diff --git a/apps/comments/src/comments.js b/apps/comments/src/comments.js index e632936c77..41ddee7b97 100644 --- a/apps/comments/src/comments.js +++ b/apps/comments/src/comments.js @@ -7,7 +7,6 @@ import './commentstabview' import './commentsmodifymenu' import './filesplugin' import './activitytabviewplugin' -import './search' import './vendor/Caret.js/dist/jquery.caret.min' import './vendor/At.js/dist/js/jquery.atwho.min' diff --git a/apps/comments/src/search.js b/apps/comments/src/search.js deleted file mode 100644 index c62726d908..0000000000 --- a/apps/comments/src/search.js +++ /dev/null @@ -1,137 +0,0 @@ -/* eslint-disable */ -/* - * Copyright (c) 2014 - * - * This file is licensed under the Affero General Public License version 3 - * or later. - * - * See the COPYING-README file. - * - */ -(function(OC, OCA, $) { - 'use strict' - - /** - * Construct a new FileActions instance - * @constructs Files - */ - var Comment = function() { - this.initialize() - } - - Comment.prototype = { - - fileList: null, - - /** - * Initialize the file search - */ - initialize: function() { - - var self = this - - this.fileAppLoaded = function() { - return !!OCA.Files && !!OCA.Files.App - } - function inFileList($row, result) { - return false - - if (!self.fileAppLoaded()) { - return false - } - var dir = self.fileList.getCurrentDirectory().replace(/\/+$/, '') - var resultDir = OC.dirname(result.path) - return dir === resultDir && self.fileList.inList(result.name) - } - function hideNoFilterResults() { - var $nofilterresults = $('.nofilterresults') - if (!$nofilterresults.hasClass('hidden')) { - $nofilterresults.addClass('hidden') - } - } - - /** - * - * @param {jQuery} $row - * @param {Object} result - * @param {int} result.id - * @param {string} result.comment - * @param {string} result.authorId - * @param {string} result.authorName - * @param {string} result.link - * @param {string} result.fileName - * @param {string} result.path - * @returns {*} - */ - this.renderCommentResult = function($row, result) { - if (inFileList($row, result)) { - return null - } - hideNoFilterResults() - /* render preview icon, show path beneath filename, - show size and last modified date on the right */ - this.updateLegacyMimetype(result) - - var $pathDiv = $('
').addClass('path').text(result.path) - - var $avatar = $('
') - $avatar.addClass('avatar') - .css('display', 'inline-block') - .css('vertical-align', 'middle') - .css('margin', '0 5px 2px 3px') - - if (result.authorName) { - $avatar.avatar(result.authorId, 21, undefined, false, undefined, result.authorName) - } else { - $avatar.avatar(result.authorId, 21) - } - - $row.find('td.info div.name').after($pathDiv).text(result.comment).prepend($('').addClass('path').css('margin-right', '5px').text(result.authorName)).prepend($avatar) - $row.find('td.result a').attr('href', result.link) - - $row.find('td.icon') - .css('background-image', 'url(' + OC.imagePath('core', 'actions/comment') + ')') - .css('opacity', '.4') - var dir = OC.dirname(result.path) - // "result.path" does not include a leading "/", so "OC.dirname" - // returns the path itself for files or folders in the root. - if (dir === result.path) { - dir = '/' - } - $row.find('td.info a').attr('href', - OC.generateUrl('/apps/files/?dir={dir}&scrollto={scrollto}', { dir: dir, scrollto: result.fileName }) - ) - - return $row - } - - this.handleCommentClick = function($row, result, event) { - if (self.fileAppLoaded() && self.fileList.id === 'files') { - self.fileList.changeDirectory(OC.dirname(result.path)) - self.fileList.scrollTo(result.name) - return false - } else { - return true - } - } - - this.updateLegacyMimetype = function(result) { - // backward compatibility: - if (!result.mime && result.mime_type) { - result.mime = result.mime_type - } - } - this.setFileList = function(fileList) { - this.fileList = fileList - } - - OC.Plugins.register('OCA.Search.Core', this) - }, - attach: function(search) { - search.setRenderer('comment', this.renderCommentResult.bind(this)) - search.setHandler('comment', this.handleCommentClick.bind(this)) - } - } - - OCA.Search.comment = new Comment() -})(OC, OCA, $) diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index cb93ded939..eee24b648f 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -383,8 +383,6 @@ } }); - this.updateSearch(); - this.$fileList.on('click','td.filename>a.name, td.filesize, td.date', _.bind(this._onClickFile, this)); this.$fileList.on("droppedOnFavorites", function (event, file) { @@ -1126,7 +1124,6 @@ if ($targetDir !== undefined && e.which === 1) { e.preventDefault(); this.changeDirectory($targetDir, true, true); - this.updateSearch(); } }, @@ -3260,17 +3257,7 @@ getFilter:function(filter) { return this._filter; }, - /** - * update the search object to use this filelist when filtering - */ - updateSearch:function() { - if (OCA.Search.files) { - OCA.Search.files.setFileList(this); - } - if (OC.Search) { - OC.Search.clear(); - } - }, + /** * Update UI based on the current selection */ diff --git a/apps/files/js/merged-index.json b/apps/files/js/merged-index.json index c8cda01825..478db35f6f 100644 --- a/apps/files/js/merged-index.json +++ b/apps/files/js/merged-index.json @@ -24,7 +24,6 @@ "operationprogressbar.js", "recentfilelist.js", "recentplugin.js", - "search.js", "semaphore.js", "sidebarpreviewmanager.js", "sidebarpreviewtext.js", diff --git a/apps/files/js/search.js b/apps/files/js/search.js deleted file mode 100644 index 66899c0915..0000000000 --- a/apps/files/js/search.js +++ /dev/null @@ -1,176 +0,0 @@ -/* - * Copyright (c) 2014 - * - * This file is licensed under the Affero General Public License version 3 - * or later. - * - * See the COPYING-README file. - * - */ -(function() { - - /** - * Construct a new FileActions instance - * @constructs Files - */ - var Files = function() { - this.initialize(); - }; - /** - * @memberof OCA.Search - */ - Files.prototype = { - - fileList: null, - - /** - * Initialize the file search - */ - initialize: function() { - - var self = this; - - this.fileAppLoaded = function() { - return !!OCA.Files && !!OCA.Files.App; - }; - function inFileList($row, result) { - if (! self.fileAppLoaded()) { - return false; - } - var dir = self.fileList.getCurrentDirectory().replace(/\/+$/,''); - var resultDir = OC.dirname(result.path); - return dir === resultDir && self.fileList.inList(result.name); - } - function updateLegacyMimetype(result) { - // backward compatibility: - if (!result.mime && result.mime_type) { - result.mime = result.mime_type; - } - } - function hideNoFilterResults() { - var $nofilterresults = $('.nofilterresults'); - if ( ! $nofilterresults.hasClass('hidden') ) { - $nofilterresults.addClass('hidden'); - } - } - - this.renderFolderResult = function($row, result) { - if (inFileList($row, result)) { - return null; - } - hideNoFilterResults(); - /*render folder icon, show path beneath filename, - show size and last modified date on the right */ - this.updateLegacyMimetype(result); - - var $pathDiv = $('
').text(result.path.substr(1, result.path.lastIndexOf("/"))); - $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.MimeType.getIconUrl(result.mime) + ')'); - return $row; - }; - - this.renderFileResult = function($row, result) { - if (inFileList($row, result)) { - return null; - } - hideNoFilterResults(); - /*render preview icon, show path beneath filename, - show size and last modified date on the right */ - this.updateLegacyMimetype(result); - - var $pathDiv = $('
').text(result.path.substr(1, result.path.lastIndexOf("/"))); - $row.find('td.info div.name').after($pathDiv).text(result.name); - - $row.find('td.result a').attr('href', result.link); - - if (self.fileAppLoaded()) { - self.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.MimeType.getIconUrl(result.mime) + ')'); - 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}) - ); - } - return $row; - }; - - - this.handleFolderClick = function($row, result, event) { - // open folder - if (self.fileAppLoaded() && self.fileList.id === 'files') { - self.fileList.changeDirectory(result.path); - return false; - } else { - return true; - } - }; - - this.handleFileClick = function($row, result, event) { - if (self.fileAppLoaded() && self.fileList.id === 'files') { - self.fileList.changeDirectory(OC.dirname(result.path)); - self.fileList.scrollTo(result.name); - return false; - } else { - return true; - } - }; - - this.updateLegacyMimetype = function (result) { - // backward compatibility: - if (!result.mime && result.mime_type) { - result.mime = result.mime_type; - } - }; - this.setFileList = function (fileList) { - this.fileList = fileList; - }; - - OC.Plugins.register('OCA.Search.Core', this); - }, - attach: function(search) { - var self = this; - search.setFilter('files', function (query) { - if (self.fileAppLoaded()) { - self.fileList.setFilter(query); - if (query.length > 1) { - //search is not started until 500msec have passed - window.setTimeout(function() { - $('.nofilterresults').addClass('hidden'); - }, 500); - } - } - }); - - search.setRenderer('folder', this.renderFolderResult.bind(this)); - search.setRenderer('file', this.renderFileResult.bind(this)); - search.setRenderer('image', this.renderFileResult.bind(this)); - search.setRenderer('audio', this.renderFileResult.bind(this)); - - search.setHandler('folder', this.handleFolderClick.bind(this)); - search.setHandler(['file', 'audio', 'image'], this.handleFileClick.bind(this)); - - if (self.fileAppLoaded()) { - // hide results when switching directory outside of search results - $('#app-content').delegate('>div', 'changeDirectory', function() { - search.clear(); - }); - } - } - }; - OCA.Search.Files = Files; - OCA.Search.files = new Files(); -})(); diff --git a/core/search/css/results.scss b/core/search/css/results.scss deleted file mode 100644 index 2f31ec7cd9..0000000000 --- a/core/search/css/results.scss +++ /dev/null @@ -1,103 +0,0 @@ -/* - * @copyright Copyright (c) 2018 Jan-Christoph Borchardt - * - * @author John Molakvoæ - * @author Jan-Christoph Borchardt - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - * - */ - -#searchresults { - overflow-x: hidden; - text-overflow: ellipsis; - padding-top: 51px; /* table row is 51px height */ - box-sizing: border-box; - z-index: 75; - /* account for margin-bottom in files list */ - margin-top: -250px; - table { - border-spacing: 0; - padding-left: 41px; - table-layout: fixed; - top: 0; - width: 100%; - } - tr { - &.result { - border-bottom: 1px solid var(--color-border); - * { - cursor: pointer; - } - } - &.template { - display: none; - } - &:hover, - &.current { - background-color: var(--color-primary-light); - } - td { - padding: 5px 9px; - font-style: normal; - vertical-align: middle; - border-bottom: none; - &.icon { - text-align: right; - width: 40px; - height: 40px; - padding: 5px 0; - background-position: right center; - background-repeat: no-repeat; - } - .has-selection:not(.hidden) ~ &.icon { - width: 50px; - padding-left: 41px; - background-size: 32px; - } - } - - .name, - .text, - .path { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - } - .text { - white-space: normal; - color: var(--color-primary-text); - } - .path { - opacity: 0.5; - } - .text em { - color: var(--color-primary-text); - font-weight: bold; - opacity: 1; - } - } - .hidden { - display: none; - } - &.filter-empty { - /* remove whitespace on bottom when no search results, to fix layout */ - margin-top: 0 !important; - } - .status.summary .info { - margin-left: 100px; - } -} diff --git a/core/search/js/search.js b/core/search/js/search.js deleted file mode 100644 index 4f5499d03c..0000000000 --- a/core/search/js/search.js +++ /dev/null @@ -1,197 +0,0 @@ -/** - * @copyright Copyright (c) 2018 John Molakvoæ - * - * @author John Molakvoæ - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - * - */ -(function() { - 'use strict'; - - /** - * @class Search - * @memberOf OCA - * - * The Search class manages a search - * - * This is a simple method. Register a new search with your function as references. - * The events will forward the search or reset directly - * - * @param {Function} searchCallback the function to run on a query search - * @param {Function} resetCallback the function to run when the user reset the form - */ - var Search = function(searchCallback, resetCallback) { - this.initialize(searchCallback, resetCallback); - }; - - /** - * @memberof OC - */ - Search.prototype = { - /** - * Initialize the search box - * - * @param {Function} searchCallback the function to run on a query search - * @param {Function} resetCallback the function to run when the user reset the form - */ - initialize: function(searchCallback, resetCallback) { - - var self = this; - - if (typeof searchCallback !== 'function') { - throw new Error('searchCallback must be a function'); - } - if (typeof resetCallback !== 'function') { - throw new Error('resetCallback must be a function'); - } - if (!document.getElementById('searchbox')) { - throw new Error('searchBox not available'); - } - - this.searchCallback = searchCallback; - this.resetCallback = resetCallback; - console.debug('New search handler registered'); - - /** - * Search - */ - this._search = function(event) { - event.preventDefault(); - var query = document.getElementById('searchbox').value; - self.searchCallback(query); - }; - - /** - * Reset form - */ - this._reset = function(event) { - event.preventDefault(); - document.getElementById('searchbox').value = ''; - self.resetCallback(); - }; - - /** - * Submit event handler - */ - this._submitHandler = function(event) { - // Avoid form submit - event.preventDefault(); - _.debounce(self.search, 500); - } - - /** - * keyUp event handler for the escape key - */ - this._keyUpHandler = function(event) { - if (event.defaultPrevented) { - return; - } - - var key = event.key || event.keyCode; - if ( - document.getElementById('searchbox') === document.activeElement && - document.getElementById('searchbox').value === '' - ) { - if (key === 'Escape' || key === 'Esc' || key === 27) { - document.activeElement.blur(); // remove focus on searchbox - _.debounce(self.reset, 500); - } - } - } - - this._searchDebounced = _.debounce(self._search, 500) - - this._resetDebounced = _.debounce(self._reset, 500) - - /** - * keyDown event handler for the ctrl+F shortcut - */ - this._keyDownHandler = function(event) { - if (event.defaultPrevented) { - return; - } - - var key = event.key || event.keyCode; - if (document.getElementById('searchbox') !== document.activeElement) { - if ( - (event.ctrlKey || event.metaKey) && // CTRL or mac CMD - !event.shiftKey && // Not SHIFT - (key === 'f' || key === 70) // F - ) { - event.preventDefault(); - document.getElementById('searchbox').focus(); - document.getElementById('searchbox').select(); - } - } - } - - // Show search - document.getElementById('searchbox').style.display = 'block'; - - // Register input event - document - .getElementById('searchbox') - .addEventListener('input', this._searchDebounced, true); - document - .querySelector('form.searchbox') - .addEventListener('submit', this._submitHandler, true); - - // Register reset - document - .querySelector('form.searchbox') - .addEventListener('reset', this._resetDebounced, true); - - // Register esc key shortcut reset if focused - document.addEventListener('keyup', this._keyUpHandler); - - // Register ctrl+F key shortcut to focus - document.addEventListener('keydown', this._keyDownHandler); - }, - - unregister: function() { - // Hide search - document.getElementById('searchbox').style.display = 'none'; - - // Reset search - document.getElementById('searchbox').value = ''; - this.resetCallback(); - - // Unregister input event - document - .getElementById('searchbox') - .removeEventListener('input', this._searchDebounced, true); - document - .querySelector('form.searchbox') - .removeEventListener('submit', this._submitHandler, true); - - // Unregister reset - document - .querySelector('form.searchbox') - .removeEventListener('reset', this._resetDebounced, true); - - // Unregister esc key shortcut reset if focused - document.removeEventListener('keyup', this._keyUpHandler); - - // Unregister ctrl+F key shortcut to focus - document.removeEventListener('keydown', this._keyDownHandler); - - console.debug('Search handler unregistered'); - } - }; - - OCA.Search = Search; -})(); diff --git a/core/search/js/searchprovider.js b/core/search/js/searchprovider.js deleted file mode 100644 index cc9687d723..0000000000 --- a/core/search/js/searchprovider.js +++ /dev/null @@ -1,455 +0,0 @@ -/* - * @copyright Copyright (c) 2014 Jörn Friedrich Dreyer - * - * @author Jörn Friedrich Dreyer - * @author John Molakvoæ - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - * - */ -(function() { - /** - * @class OCA.Search.Core - * @classdesc - * - * The Search class manages a search queries and their results - * - * @param $searchBox container element with existing markup for the #searchbox form - * @param $searchResults container element for results und status message - */ - var Search = function($searchBox, $searchResults) { - this.initialize($searchBox, $searchResults); - }; - /** - * @memberof OC - */ - Search.prototype = { - /** - * Initialize the search box - * - * @param $searchBox container element with existing markup for the #searchbox form - * @param $searchResults container element for results und status message - * @private - */ - initialize: function($searchBox, $searchResults) { - var self = this; - - /** - * contains closures that are called to filter the current content - */ - var filters = {}; - this.setFilter = function(type, filter) { - filters[type] = filter; - }; - this.hasFilter = function(type) { - return typeof filters[type] !== 'undefined'; - }; - this.getFilter = function(type) { - return filters[type]; - }; - - /** - * contains closures that are called to render search results - */ - var renderers = {}; - this.setRenderer = function(type, renderer) { - renderers[type] = renderer; - }; - this.hasRenderer = function(type) { - return typeof renderers[type] !== 'undefined'; - }; - this.getRenderer = function(type) { - return renderers[type]; - }; - - /** - * contains closures that are called when a search result has been clicked - */ - var handlers = {}; - this.setHandler = function(type, handler) { - handlers[type] = handler; - }; - this.hasHandler = function(type) { - return typeof handlers[type] !== 'undefined'; - }; - this.getHandler = function(type) { - return handlers[type]; - }; - - var currentResult = -1; - var lastQuery = ''; - var lastInApps = []; - var lastPage = 0; - var lastSize = 30; - var lastResults = []; - var timeoutID = null; - - this.getLastQuery = function() { - return lastQuery; - }; - - /** - * Do a search query and display the results - * @param {string} query the search query - * @param inApps - * @param page - * @param size - */ - this.search = function(query, inApps, page, size) { - if (query) { - if (typeof page !== 'number') { - page = 1; - } - if (typeof size !== 'number') { - size = 30; - } - if (typeof inApps !== 'object') { - var currentApp = getCurrentApp(); - if (currentApp) { - inApps = [currentApp]; - } else { - inApps = []; - } - } - // prevent double pages - if ( - $searchResults && - query === lastQuery && - page === lastPage && - size === lastSize - ) { - return; - } - window.clearTimeout(timeoutID); - timeoutID = window.setTimeout(function() { - lastQuery = query; - lastInApps = inApps; - lastPage = page; - lastSize = size; - - //show spinner - $searchResults.removeClass('hidden'); - $status.addClass('status emptycontent'); - $status.html('

' + t('core', 'Searching other places') + '

'); - - // do the actual search query - $.getJSON( - OC.generateUrl('core/search'), - { - query: query, - inApps: inApps, - page: page, - size: size - }, - function(results) { - lastResults = results; - if (page === 1) { - showResults(results); - } else { - addResults(results); - } - } - ); - }, 500); - } - }; - - //TODO should be a core method, see https://github.com/owncloud/core/issues/12557 - function getCurrentApp() { - var content = document.getElementById('content'); - if (content) { - var classList = document.getElementById('content').className.split(/\s+/); - for (var i = 0; i < classList.length; i++) { - if (classList[i].indexOf('app-') === 0) { - return classList[i].substr(4); - } - } - } - return false; - } - - var $status = $searchResults.find('#status'); - // summaryAndStatusHeight is a constant - var summaryAndStatusHeight = 118; - - function isStatusOffScreen() { - return ( - $searchResults.position() && - $searchResults.position().top + summaryAndStatusHeight > - window.innerHeight - ); - } - - function placeStatus() { - if (isStatusOffScreen()) { - $status.addClass('fixed'); - } else { - $status.removeClass('fixed'); - } - } - - function showResults(results) { - lastResults = results; - $searchResults.find('tr.result').remove(); - $searchResults.removeClass('hidden'); - addResults(results); - } - - function addResults(results) { - var $template = $searchResults.find('tr.template'); - jQuery.each(results, function(i, result) { - var $row = $template.clone(); - $row.removeClass('template'); - $row.addClass('result'); - - $row.data('result', result); - - // generic results only have four attributes - $row.find('td.info div.name').text(result.name); - $row.find('td.info a').attr('href', result.link); - - /** - * Give plugins the ability to customize the search results. see result.js for examples - */ - if (self.hasRenderer(result.type)) { - $row = self.getRenderer(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('
'); - $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); - } - } - if ($row) { - $searchResults.find('tbody').append($row); - } - }); - - var count = $searchResults.find('tr.result').length; - $status.data('count', count); - - if (count === 0) { - $status.addClass('emptycontent').removeClass('status'); - $status.html(''); - $status.append($('
').addClass('icon-search')); - var error = t('core', 'No search results in other folders for {tag}{filter}{endtag}', { filter: lastQuery }); - $status.append($('

').html(error.replace('{tag}', '').replace('{endtag}', ''))); - } else { - $status.removeClass('emptycontent').addClass('status summary'); - $status.text(n('core','{count} search result in another folder','{count} search results in other folders', count,{ count: count })); - $status.html('' + n( 'core', '{count} search result in another folder', '{count} search results in other folders', count, { count: count } ) + ''); - } - } - - function renderCurrent() { - var result = $searchResults.find('tr.result')[currentResult]; - if (result) { - var $result = $(result); - var currentOffset = $(window).scrollTop(); - $(window).animate( - { - // Scrolling to the top of the new result - scrollTop: - currentOffset + - $result.offset().top - - $result.height() * 2 - }, - { - duration: 100 - } - ); - $searchResults.find('tr.result.current').removeClass('current'); - $result.addClass('current'); - } - } - this.hideResults = function() { - $searchResults.addClass('hidden'); - $searchResults.find('tr.result').remove(); - lastQuery = false; - }; - - this.clear = function() { - self.hideResults(); - if (self.hasFilter(getCurrentApp())) { - self.getFilter(getCurrentApp())(''); - } - $searchBox.val(''); - $searchBox.blur(); - }; - - /** - * Event handler for when scrolling the list container. - * This appends/renders the next page of entries when reaching the bottom. - */ - function onScroll() { - if ( - $searchResults && - lastQuery !== false && - lastResults.length > 0 - ) { - if ($(window).scrollTop() + $(window).height() > $searchResults.height() - 300) { - self.search(lastQuery, lastInApps, lastPage + 1); - } - placeStatus(); - } - } - - $(window).on('scroll', _.bind(onScroll, this)); // For desktop browser - $("body").on('scroll', _.bind(onScroll, this)); // For mobile browser - - /** - * scrolls the search results to the top - */ - function scrollToResults() { - setTimeout(function() { - if (isStatusOffScreen()) { - var newScrollTop = $(window).prop('scrollHeight') - $searchResults.height(); - console.log('scrolling to ' + newScrollTop); - $(window).animate( - { - scrollTop: newScrollTop - }, - { - duration: 100, - complete: function() { - scrollToResults(); - } - } - ); - } - }, 150); - } - - $searchBox.keyup(function(event) { - if (event.keyCode === 13) { - //enter - if (currentResult > -1) { - var result = $searchResults.find('tr.result a')[currentResult]; - window.location = $(result).attr('href'); - } - } else if (event.keyCode === 38) { - //up - if (currentResult > 0) { - currentResult--; - renderCurrent(); - } - } else if (event.keyCode === 40) { - //down - if (lastResults.length > currentResult + 1) { - currentResult++; - renderCurrent(); - } - } - }); - - $searchResults.on('click', 'tr.result', function(event) { - var $row = $(this); - var item = $row.data('result'); - if (self.hasHandler(item.type)) { - var result = self.getHandler(item.type)($row, item, event); - $searchBox.val(''); - if (self.hasFilter(getCurrentApp())) { - self.getFilter(getCurrentApp())(''); - } - self.hideResults(); - return result; - } - }); - $searchResults.on('click', '#status', function(event) { - event.preventDefault(); - scrollToResults(); - return false; - }); - placeStatus(); - - OC.Plugins.attach('OCA.Search.Core', this); - - // Finally use default Search registration - return new OCA.Search( - // Search handler - function(query) { - if (lastQuery !== query) { - currentResult = -1; - if (query.length > 1) { - self.search(query); - } else { - self.hideResults(); - } - if (self.hasFilter(getCurrentApp())) { - self.getFilter(getCurrentApp())(query); - } - } - }, - // Reset handler - function() { - if ($searchBox.val() === '') { - if (self.hasFilter(getCurrentApp())) { - self.getFilter(getCurrentApp())(''); - } - self.hideResults(); - } - } - ); - } - }; - OCA.Search.Core = Search; -})(); - -window.addEventListener('DOMContentLoaded', function() { - var $searchResults = $('#searchresults'); - var $searchBox = $('#searchbox'); - if ($searchResults.length > 0 && $searchBox.length > 0) { - $searchResults.addClass('hidden'); - $searchResults.html('\n' + - '\t\n' + - '\t\t\n' + - '\t\t\t\n' + - '\t\t\t\n' + - '\t\t\n' + - '\t\n' + - '
\n' + - '\t\t\t\t\n' + - '\t\t\t\t\t
\n' + - '\t\t\t\t
\n' + - '\t\t\t
\n' + - '
'); - OC.Search = new OCA.Search.Core( - $searchBox, - $searchResults - ); - } else { - // check again later - _.defer(function() { - if ($searchResults.length > 0 && $searchBox.length > 0) { - OC.Search = new OCA.Search.Core( - $searchBox, - $searchResults - ); - } - }); - } -}); - -/** - * @deprecated use get/setRenderer() instead - */ -OC.search.customResults = {}; -/** - * @deprecated use get/setRenderer() instead - */ -OC.search.resultTypes = {}; diff --git a/core/src/OC/index.js b/core/src/OC/index.js index 61de15516c..036e640be3 100644 --- a/core/src/OC/index.js +++ b/core/src/OC/index.js @@ -103,7 +103,6 @@ import msg from './msg' import Notification from './notification' import PasswordConfirmation from './password-confirmation' import Plugins from './plugins' -import search from './search' import { theme } from './theme' import Util from './util' import { debug } from './debug' @@ -249,7 +248,6 @@ export default { Notification, PasswordConfirmation, Plugins, - search, theme, Util, debug, diff --git a/core/src/OC/search.js b/core/src/OC/search.js deleted file mode 100644 index 281907a06a..0000000000 --- a/core/src/OC/search.js +++ /dev/null @@ -1,41 +0,0 @@ -/** - * @copyright 2019 Christoph Wurst - * - * @author 2019 Christoph Wurst - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import OC from './index' - -/** - * Do a search query and display the results - * @param {string} query the search query - */ -const search = function(query) { - OC.Search.search(query, null, 0, 30) -} - -/** - * @namespace OC.search - */ -search.customResults = {} -/** - * @deprecated use get/setFormatter() instead - */ -search.resultTypes = {} - -export default search diff --git a/core/src/unified-search.js b/core/src/unified-search.js index ba975d7856..c6d835836b 100644 --- a/core/src/unified-search.js +++ b/core/src/unified-search.js @@ -32,6 +32,18 @@ __webpack_nonce__ = btoa(getRequestToken()) // eslint-disable-next-line camelcase __webpack_public_path__ = generateFilePath('core', '', 'js/') +// TODO: remove with nc22 +if (!OCA.Search) { + class Search { + + constructor() { + console.warn('OCA.Search is deprecated. Please use the unified search API instead') + } + + } + OCA.Search = Search +} + Vue.mixin({ methods: { t, diff --git a/lib/private/legacy/OC_Template.php b/lib/private/legacy/OC_Template.php index 32d185d25f..18a15ad1d4 100644 --- a/lib/private/legacy/OC_Template.php +++ b/lib/private/legacy/OC_Template.php @@ -115,9 +115,6 @@ class OC_Template extends \OC\Template\Base { OC_Util::addTranslations('core', null, true); if (\OC::$server->getSystemConfig()->getValue('installed', false)) { - OC_Util::addStyle('search', 'results'); - OC_Util::addScript('search', 'search', true); - OC_Util::addScript('search', 'searchprovider'); OC_Util::addScript('merged-template-prepend', null, true); OC_Util::addScript('dist/files_client', null, true); OC_Util::addScript('dist/files_fileinfo', null, true);