diff options
Diffstat (limited to 'js')
-rw-r--r-- | js/admin.elements.js | 35 | ||||
-rw-r--r-- | js/admin.js | 25 | ||||
-rw-r--r-- | js/admin.settings.js | 42 | ||||
-rw-r--r-- | js/fulltextsearch.v1.api.js (renamed from js/nextsearch.v1.api.js) | 31 | ||||
-rw-r--r-- | js/fulltextsearch.v1.js (renamed from js/nextsearch.v1.js) | 29 | ||||
-rw-r--r-- | js/fulltextsearch.v1.navigation.js (renamed from js/nextsearch.v1.navigation.js) | 118 | ||||
-rw-r--r-- | js/fulltextsearch.v1.result.js (renamed from js/nextsearch.v1.result.js) | 31 | ||||
-rw-r--r-- | js/fulltextsearch.v1.searchbar.js (renamed from js/nextsearch.v1.searchbar.js) | 104 | ||||
-rw-r--r-- | js/fulltextsearch.v1.settings.js (renamed from js/nextsearch.v1.settings.js) | 26 | ||||
-rw-r--r-- | js/navigate.js (renamed from js/fullnextsearch.js) | 22 | ||||
-rw-r--r-- | js/personal.js | 0 |
11 files changed, 304 insertions, 159 deletions
diff --git a/js/admin.elements.js b/js/admin.elements.js index 777e255..884930f 100644 --- a/js/admin.elements.js +++ b/js/admin.elements.js @@ -1,11 +1,11 @@ /* - * FullNextSearch - Full Text Search your Nextcloud. + * FullTextSearch - Full text search framework for Nextcloud * * This file is licensed under the Affero General Public License version 3 or * later. See the COPYING file. * * @author Maxence Lange <maxence@artificial-owl.com> - * @copyright 2017 + * @copyright 2018 * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify @@ -21,33 +21,32 @@ * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * - * */ /** global: OCA */ -/** global: fns_admin_settings */ +/** global: fts_admin_settings */ -var fns_admin_elements = { - fns_div: null, - fns_platforms: null, - fns_chunkSize: null, - fns_providers: null, +var fts_admin_elements = { + fts_div: null, + fts_platforms: null, + fts_chunkSize: null, + fts_providers: null, init: function () { - fns_admin_elements.fns_div = $('#fns'); - fns_admin_elements.fns_platforms = $('#fns_platforms'); - fns_admin_elements.fns_chunkSize = $('#fns_chunk_size'); + fts_admin_elements.fts_div = $('#fns'); + fts_admin_elements.fts_platforms = $('#fts_platforms'); + fts_admin_elements.fts_chunkSize = $('#fts_chunk_size'); - fns_admin_elements.fns_platforms.on('change', function () { - fns_admin_settings.tagSettingsAsNotSaved($(this)); - fns_admin_settings.saveSettings(); + fts_admin_elements.fts_platforms.on('change', function () { + fts_admin_settings.tagSettingsAsNotSaved($(this)); + fts_admin_settings.saveSettings(); }); - fns_admin_elements.fns_chunkSize.on('input', function () { - fns_admin_settings.tagSettingsAsNotSaved($(this)); + fts_admin_elements.fts_chunkSize.on('input', function () { + fts_admin_settings.tagSettingsAsNotSaved($(this)); }).blur(function () { - fns_admin_settings.saveSettings(); + fts_admin_settings.saveSettings(); }); } }; diff --git a/js/admin.js b/js/admin.js index 611d3d7..4e86549 100644 --- a/js/admin.js +++ b/js/admin.js @@ -1,11 +1,11 @@ /* - * FullNextSearch - Full Text Search your Nextcloud. + * FullTextSearch - Full text search framework for Nextcloud * * This file is licensed under the Affero General Public License version 3 or * later. See the COPYING file. * * @author Maxence Lange <maxence@artificial-owl.com> - * @copyright 2017 + * @copyright 2018 * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify @@ -21,12 +21,11 @@ * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * - * */ /** global: OCA */ -/** global: fns_admin_settings */ -/** global: fns_admin_elements */ +/** global: fts_admin_settings */ +/** global: fts_admin_elements */ @@ -34,17 +33,17 @@ $(document).ready(function () { /** - * @constructs NextSearchAdmin + * @constructs FullTextSearchAdmin */ - var NextSearchAdmin = function () { - $.extend(NextSearchAdmin.prototype, fns_admin_elements); - $.extend(NextSearchAdmin.prototype, fns_admin_settings); + var FullTextSearchAdmin = function () { + $.extend(FullTextSearchAdmin.prototype, fts_admin_elements); + $.extend(FullTextSearchAdmin.prototype, fts_admin_settings); - fns_admin_elements.init(); - fns_admin_settings.refreshSettingPage(); + fts_admin_elements.init(); + fts_admin_settings.refreshSettingPage(); }; - OCA.NextSearchAdmin = NextSearchAdmin; - OCA.NextSearchAdmin.settings = new NextSearchAdmin(); + OCA.FullTextSearchAdmin = FullTextSearchAdmin; + OCA.FullTextSearchAdmin.settings = new FullTextSearchAdmin(); }); diff --git a/js/admin.settings.js b/js/admin.settings.js index 11e83d0..5870572 100644 --- a/js/admin.settings.js +++ b/js/admin.settings.js @@ -1,11 +1,11 @@ /* - * FullNextSearch - Full Text Search your Nextcloud. + * FullTextSearch - Full text search framework for Nextcloud * * This file is licensed under the Affero General Public License version 3 or * later. See the COPYING file. * * @author Maxence Lange <maxence@artificial-owl.com> - * @copyright 2017 + * @copyright 2018 * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify @@ -24,7 +24,7 @@ */ /** global: OC */ -/** global: fns_admin_elements */ +/** global: fts_admin_elements */ /** @namespace result.index_chunk */ /** @namespace result.platforms_all */ @@ -34,7 +34,7 @@ -var fns_admin_settings = { +var fts_admin_settings = { config: null, @@ -42,9 +42,9 @@ var fns_admin_settings = { $.ajax({ method: 'GET', - url: OC.generateUrl('/apps/fullnextsearch/admin/settings') + url: OC.generateUrl('/apps/fulltextsearch/admin/settings') }).done(function (res) { - fns_admin_settings.updateSettingPage(res); + fts_admin_settings.updateSettingPage(res); }); }, @@ -52,19 +52,19 @@ var fns_admin_settings = { updateSettingPage: function (result) { - fns_admin_settings.updateSettingPagePlatforms(result); - fns_admin_settings.updateSettingPageChunkSize(result); + fts_admin_settings.updateSettingPagePlatforms(result); + fts_admin_settings.updateSettingPageChunkSize(result); - fns_admin_settings.updateCurrentPlatform(result); - fns_admin_settings.updateEnabledProviders(result); + fts_admin_settings.updateCurrentPlatform(result); + fts_admin_settings.updateEnabledProviders(result); - fns_admin_settings.tagSettingsAsSaved(fns_admin_elements.fns_div); + fts_admin_settings.tagSettingsAsSaved(fts_admin_elements.fts_div); }, updateSettingPagePlatforms: function (result) { - fns_admin_elements.fns_platforms.empty(); - fns_admin_elements.fns_platforms.append($('<option>', { + fts_admin_elements.fts_platforms.empty(); + fts_admin_elements.fts_platforms.append($('<option>', { value: '', text: '' })); @@ -73,7 +73,7 @@ var fns_admin_settings = { var classes = Object.keys(platforms); for (var i = 0; i < classes.length; i++) { var platformClass = classes[i]; - fns_admin_elements.fns_platforms.append($('<option>', { + fts_admin_elements.fts_platforms.append($('<option>', { value: platformClass, selected: (result.search_platform === platformClass), text: platforms[platformClass].name @@ -83,13 +83,13 @@ var fns_admin_settings = { }); } - fns_admin_elements.fns_platforms.fadeTo(300, 1); + fts_admin_elements.fts_platforms.fadeTo(300, 1); }, updateSettingPageChunkSize: function (result) { - fns_admin_elements.fns_chunkSize.val(result.index_chunk); - fns_admin_elements.fns_chunkSize.fadeTo(300, 1); + fts_admin_elements.fts_chunkSize.val(result.index_chunk); + fts_admin_elements.fts_chunkSize.fadeTo(300, 1); }, @@ -138,18 +138,18 @@ var fns_admin_settings = { saveSettings: function () { var data = { - search_platform: fns_admin_elements.fns_platforms.val(), - index_chunk: fns_admin_elements.fns_chunkSize.val() + search_platform: fts_admin_elements.fts_platforms.val(), + index_chunk: fts_admin_elements.fts_chunkSize.val() }; $.ajax({ method: 'POST', - url: OC.generateUrl('/apps/fullnextsearch/admin/settings'), + url: OC.generateUrl('/apps/fulltextsearch/admin/settings'), data: { data: data } }).done(function (res) { - fns_admin_settings.updateSettingPage(res); + fts_admin_settings.updateSettingPage(res); }); } diff --git a/js/nextsearch.v1.api.js b/js/fulltextsearch.v1.api.js index 43dbd1a..1cc826e 100644 --- a/js/nextsearch.v1.api.js +++ b/js/fulltextsearch.v1.api.js @@ -1,11 +1,11 @@ /* - * FullNextSearch - Full Text Search your Nextcloud. + * FullTextSearch - Full text search framework for Nextcloud * * This file is licensed under the Affero General Public License version 3 or * later. See the COPYING file. * * @author Maxence Lange <maxence@artificial-owl.com> - * @copyright 2017 + * @copyright 2018 * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify @@ -21,12 +21,11 @@ * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * - * */ /** global: OC */ -/** global: next_settings */ +/** global: settings */ /** global: result */ /** global: search */ /** global: nav */ @@ -35,16 +34,34 @@ var api = { - search: function (type, search, callback) { + search: function (request, callback) { var res = {status: -1}; + $.ajax({ method: 'GET', - url: OC.generateUrl('/apps/fullnextsearch/v1/search/' + type), + url: OC.generateUrl('/apps/fulltextsearch/v1/search'), data: { - search: search + request: JSON.stringify(request) } }).done(function (res) { result.displayResult(res); + nav.onResultDisplayed(res); + api.onCallback(callback, res); + }).fail(function () { + nav.failedToAjax(); + api.onCallback(callback, res); + }); + }, + + + options: function (providerId, callback) { + var res = {status: -1}; + + $.ajax({ + method: 'GET', + url: OC.generateUrl('/apps/fulltextsearch/options/' + providerId) + }).done(function (res) { + searchbar.onOptionsLoaded(res); api.onCallback(callback, res); }).fail(function () { nav.failedToAjax(); diff --git a/js/nextsearch.v1.js b/js/fulltextsearch.v1.js index 5c742c9..d956088 100644 --- a/js/nextsearch.v1.js +++ b/js/fulltextsearch.v1.js @@ -1,11 +1,11 @@ /* - * FullNextSearch - Full Text Search your Nextcloud. + * FullTextSearch - Full text search framework for Nextcloud * * This file is licensed under the Affero General Public License version 3 or * later. See the COPYING file. * * @author Maxence Lange <maxence@artificial-owl.com> - * @copyright 2017 + * @copyright 2018 * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify @@ -21,11 +21,10 @@ * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * - * */ /** global: OCA */ -/** global: next_settings */ +/** global: settings */ /** global: searchbar */ /** global: result */ /** global: nav */ @@ -35,20 +34,20 @@ (function () { /** - * @constructs NextSearch + * @constructs FullTextSearch */ - var NextSearch = function () { - $.extend(NextSearch.prototype, next_settings); - $.extend(NextSearch.prototype, result); - $.extend(NextSearch.prototype, searchbar); - $.extend(NextSearch.prototype, nav); - $.extend(NextSearch.prototype, api); + var FullTextSearch = function () { + $.extend(FullTextSearch.prototype, settings); + $.extend(FullTextSearch.prototype, result); + $.extend(FullTextSearch.prototype, searchbar); + $.extend(FullTextSearch.prototype, nav); + $.extend(FullTextSearch.prototype, api); - next_settings.generateDefaultTemplate(); - next_settings.generateNoResultDiv(); + settings.generateDefaultTemplate(); + settings.generateNoResultDiv(); }; - OCA.NextSearch = NextSearch; - OCA.NextSearch.api = new NextSearch(); + OCA.FullTextSearch = FullTextSearch; + OCA.FullTextSearch.api = new FullTextSearch(); })(); diff --git a/js/nextsearch.v1.navigation.js b/js/fulltextsearch.v1.navigation.js index 6dd0944..98a3284 100644 --- a/js/nextsearch.v1.navigation.js +++ b/js/fulltextsearch.v1.navigation.js @@ -1,11 +1,11 @@ /* - * FullNextSearch - Full Text Search your Nextcloud. + * FullTextSearch - Full text search framework for Nextcloud * * This file is licensed under the Affero General Public License version 3 or * later. See the COPYING file. * * @author Maxence Lange <maxence@artificial-owl.com> - * @copyright 2017 + * @copyright 2018 * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify @@ -21,19 +21,21 @@ * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * - * */ /** global: OCA */ /** global: api */ /** global: search */ /** global: result */ -/** global: next_settings */ +/** global: settings */ + var curr = { providerResult: [], - + page: 1, + lastRequest: '', + moreDisplayed: false, setProviderResult: function (id, value) { curr.providerResult[id] = value; @@ -62,12 +64,39 @@ var nav = { }, - managerDivProviderResult: function (divProvider, newResult, oldResult) { + manageDivProviderNavigation: function (divProviderNavigation, meta) { + + var maxPage = Math.ceil(meta.total / meta.request.size); + + divProviderNavigation.attr('data-time', meta.time); + divProviderNavigation.attr('data-page', meta.request.page); + divProviderNavigation.attr('data-search', meta.request.search); + divProviderNavigation.attr('data-max-page', maxPage); + divProviderNavigation.attr('data-size', meta.request.size); + divProviderNavigation.attr('data-total', meta.total); + + var providerName = divProviderNavigation.attr('data-provider-name'); + + var left = "Searching " + providerName + " for '" + meta.request.search + "' returns " + + meta.total + " results in " + meta.time + "ms"; + divProviderNavigation.find('.provider_navigation_left').text(left); + + divProviderNavigation.find('.provider_navigation_curr').text(meta.request.page + ' / ' + + maxPage); + + divProviderNavigation.find('.provider_navigation_prev').stop().fadeTo(200, + (meta.request.page > 1) ? 1 : 0); + divProviderNavigation.find('.provider_navigation_next').stop().fadeTo(200, + (meta.request.page < maxPage) ? 1 : 0); + }, + + + manageDivProviderResult: function (divProviderResult, newResult, oldResult) { //replaceWith(); - nav.divProviderResultAddItems(divProvider, newResult, oldResult); + nav.divProviderResultAddItems(divProviderResult, newResult, oldResult); if (oldResult) { - nav.divProviderResultRemoveItems(divProvider, newResult, oldResult); - nav.divProviderResultMoveItems(divProvider, newResult, oldResult); + nav.divProviderResultRemoveItems(divProviderResult, newResult, oldResult); + nav.divProviderResultMoveItems(divProviderResult, newResult, oldResult); } }, @@ -89,8 +118,8 @@ var nav = { precItem.after(divResult); } - divResult.slideDown(next_settings.delay_result, function () { - $(this).children('.result_template').fadeTo(next_settings.delay_result, 1); + divResult.slideDown(settings.delay_result, function () { + $(this).children('.result_template').fadeTo(settings.delay_result, 1); }); precItem = divResult; @@ -104,8 +133,8 @@ var nav = { var entry = oldResult[i]; if (result.getResultIndex(entry.id, newResult) === -1) { var divResult = nav.getDivResult(entry.id, divProviderResult); - divResult.fadeTo(next_settings.delay_result, 0, function () { - $(this).slideUp(next_settings.delay_result, function () { + divResult.fadeTo(settings.delay_result, 0, function () { + $(this).slideUp(settings.delay_result, function () { $(this).remove(); }); }); @@ -138,12 +167,12 @@ var nav = { var divResult = nav.getDivResult(entryId, divProviderResult); if (precId === '') { - divResult.fadeTo(next_settings.delay_result, 0.35, function () { + divResult.fadeTo(settings.delay_result, 0.35, function () { $(this).prependTo(divProviderResult).fadeTo(100, 1); }); } else { var precItem = nav.getDivResult(precId, divProviderResult); - divResult.fadeTo(next_settings.delay_result, 0.35, function () { + divResult.fadeTo(settings.delay_result, 0.35, function () { $(this).insertAfter(precItem).fadeTo(100, 1); }); } @@ -153,7 +182,7 @@ var nav = { getDivProvider: function (providerId, providerName) { var ret = null; - next_settings.resultContainer.children('.provider_header').each(function () { + settings.resultContainer.children('.provider_header').each(function () { if ($(this).attr('data-id') === providerId) { ret = $(this); } @@ -161,7 +190,7 @@ var nav = { if (ret === null) { ret = nav.generateDivProvider(providerId, providerName); - next_settings.resultContainer.append(ret); + settings.resultContainer.append(ret); } return ret; @@ -220,20 +249,20 @@ var nav = { nav.deleteEmptyDiv(divResult, '#line1'); nav.deleteEmptyDiv(divResult, '#line2'); - if (next_settings.parentHasMethod('onEntryGenerated')) { - next_settings.parent.onEntryGenerated(divResult); + if (settings.parentHasMethod('onEntryGenerated')) { + settings.parent.onEntryGenerated(divResult); } }, onSearchReset: function () { - if (next_settings.parentHasMethod('onSearchReset')) { - next_settings.parent.onSearchReset(); + if (settings.parentHasMethod('onSearchReset')) { + settings.parent.onSearchReset(); } }, onResultDisplayed: function () { - if (next_settings.parentHasMethod('onResultDisplayed')) { - next_settings.parent.onResultDisplayed(); + if (settings.parentHasMethod('onResultDisplayed')) { + settings.parent.onResultDisplayed(); } }, @@ -246,13 +275,13 @@ var nav = { generateTemplateEntry: function (document) { - var divTemplate = next_settings.entryTemplate; + var divTemplate = settings.entryTemplate; if (divTemplate === null) { - divTemplate = next_settings.entryTemplateDefault; + divTemplate = settings.entryTemplateDefault; } if (!divTemplate.length) { - console.log('FullNextSearch Error: template_entry is not defined'); + console.log('FullTextSearch Error: template_entry is not defined'); return; } @@ -281,14 +310,45 @@ var nav = { generateDivProvider: function (providerId, providerName) { - var divProviderName = $('<div>', {class: 'provider_name'}); - divProviderName.text(providerName); + + + var divProviderNavigation = $('<div>', {class: 'provider_navigation'}); + divProviderNavigation.attr('data-provider-name', providerName); + divProviderNavigation.append($('<div>', {class: 'provider_navigation_left'})); + + var divProviderPagination = $('<div>', {class: 'provider_navigation_right'}); + var divProviderPaginationPrev = $('<div>', {class: 'icon-page-prev provider_navigation_prev'}); + divProviderPaginationPrev.on('click', function () { + fullTextSearch.search({ + providers: providerId, + search: divProviderNavigation.attr('data-search'), + page: Number(divProviderNavigation.attr('data-page')) - 1, + size: divProviderNavigation.attr('data-size') + }); + }); + divProviderPagination.append(divProviderPaginationPrev); + + divProviderPagination.append($('<div>', {class: 'provider_navigation_curr'})); + + var divProviderPaginationNext = $('<div>', {class: 'icon-page-next provider_navigation_next'}); + divProviderPaginationNext.on('click', function () { + fullTextSearch.search({ + providers: providerId, + search: divProviderNavigation.attr('data-search'), + page: Number(divProviderNavigation.attr('data-page')) + 1, + size: divProviderNavigation.attr('data-size') + }); + }); + divProviderPagination.append(divProviderPaginationNext); + + divProviderNavigation.append(divProviderPagination); var divProviderResult = $('<div>', {class: 'provider_result'}); + var divProvider = $('<div>', {class: 'provider_header'}); divProvider.hide(); divProvider.attr('data-id', providerId); - divProvider.append(divProviderName); + divProvider.append(divProviderNavigation); divProvider.append(divProviderResult); return divProvider; diff --git a/js/nextsearch.v1.result.js b/js/fulltextsearch.v1.result.js index b8f5f06..80a19f5 100644 --- a/js/nextsearch.v1.result.js +++ b/js/fulltextsearch.v1.result.js @@ -1,11 +1,11 @@ /* - * FullNextSearch - Full Text Search your Nextcloud. + * FullTextSearch - Full text search framework for Nextcloud * * This file is licensed under the Affero General Public License version 3 or * later. See the COPYING file. * * @author Maxence Lange <maxence@artificial-owl.com> - * @copyright 2017 + * @copyright 2018 * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify @@ -21,23 +21,23 @@ * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * - * */ /** global: OCA */ -/** global: next_settings */ +/** global: settings */ /** global: curr */ /** global: nav */ +/** @namespace result.provider */ +/** @namespace result.documents */ + var result = { displayResult: function (res) { - if (next_settings.resultContainer === null) { + if (settings.resultContainer === null) { return; } - nav.onResultDisplayed(); - var searchResult = res.result; if (searchResult.length === 0) { result.displayNoResult(); @@ -51,27 +51,26 @@ var result = { displayNoResult: function () { - next_settings.divNoResult.fadeTo(next_settings.delay_result, 1); - next_settings.resultContainer.find('.provider_header').each(function () { - $(this).fadeTo(next_settings.delay_result, 0); + settings.divNoResult.fadeTo(settings.delay_result, 1); + settings.resultContainer.find('.provider_header').each(function () { + $(this).fadeTo(settings.delay_result, 0); }); }, - /** @namespace result.provider */ - /** @namespace result.documents */ displayProviderResult: function (result) { - next_settings.divNoResult.fadeTo(next_settings.delay_result, 0); + settings.divNoResult.fadeTo(settings.delay_result, 0); var current = curr.getProviderResult(result.provider.id); var divProvider = nav.getDivProvider(result.provider.id, result.provider.name); - nav.managerDivProviderResult(divProvider.children('.provider_result'), result.documents, + nav.manageDivProviderNavigation(divProvider.children('.provider_navigation'), result.meta); + nav.manageDivProviderResult(divProvider.children('.provider_result'), result.documents, current.documents); - divProvider.slideDown(next_settings.delay_provider, function () { - $(this).fadeTo(next_settings.delay_provider, 1); + divProvider.slideDown(settings.delay_provider, function () { + $(this).fadeTo(settings.delay_provider, 1); }); curr.setProviderResult(result.provider.id, result); diff --git a/js/nextsearch.v1.searchbar.js b/js/fulltextsearch.v1.searchbar.js index 3a263a9..641ab95 100644 --- a/js/nextsearch.v1.searchbar.js +++ b/js/fulltextsearch.v1.searchbar.js @@ -1,11 +1,11 @@ /* - * FullNextSearch - Full Text Search your Nextcloud. + * FullTextSearch - Full text search framework for Nextcloud * * This file is licensed under the Affero General Public License version 3 or * later. See the COPYING file. * * @author Maxence Lange <maxence@artificial-owl.com> - * @copyright 2017 + * @copyright 2018 * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify @@ -21,7 +21,6 @@ * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * - * */ /** global: OCA */ @@ -30,12 +29,14 @@ /** global: api */ /** global: search */ /** global: result */ -/** global: nextSearch */ -/** global: next_settings */ +/** global: fullTextSearch */ +/** global: settings */ var searchbox = { searchTimeout: null, + search_more: null, + search_icon_more: null, search_icon_close: null, search_icon: null, search_input: null, @@ -51,13 +52,12 @@ var searchbar = { searchbox.search_div = $('<div>', {class: 'next_search_div'}); divHeaderRight.prepend(searchbox.search_div); - searchbox.search_icon = $('<div>', {class: 'icon-fullnextsearch'}); + searchbox.search_icon = $('<div>', {class: 'icon-fulltextsearch'}); searchbox.search_icon.css('background-image', - "url('/apps/fullnextsearch/img/fullnextsearch.svg')"); + "url('/apps/fulltextsearch/img/fulltextsearch.svg')"); searchbox.search_icon.fadeTo(0, 0.7); searchbox.search_div.append(searchbox.search_icon); - searchbox.search_form = $('<div>'); searchbox.search_form.fadeTo(0, 0); @@ -67,42 +67,62 @@ var searchbar = { }); searchbox.search_form.append(searchbox.search_input); - searchbox.search_icon_close = $('<div>', {class: 'icon-close-white icon-close-fullnextsearch'}); + searchbox.search_more = $('<div>', {class: 'search_more'}); + searchbox.search_more.fadeTo(0, 0); + + searchbox.search_icon_more = $('<div>', {class: 'icon-more-white icon-more-fulltextsearch'}); + searchbox.search_icon_more.fadeTo(0, 0); + searchbox.search_icon_more.on('click', function () { + if (curr.moreDisplayed) { + searchbox.search_more.stop().fadeTo(100, 0); + curr.moreDisplayed = false; + } else { + searchbox.search_more.stop().fadeTo(100, 1); + curr.moreDisplayed = true; + } + }); + searchbox.search_form.append(searchbox.search_icon_more); + + searchbox.search_icon_close = $('<div>', {class: 'icon-close-white icon-close-fulltextsearch'}); searchbox.search_icon_close.fadeTo(0, 0); searchbox.search_icon_close.on('click', function () { - next_settings.lockSearchbox = false; + settings.lockSearchbox = false; + searchbox.search_icon_more.stop().fadeTo(100, 0); searchbox.search_icon_close.stop().fadeTo(100, 0); + searchbox.search_more.stop().fadeTo(100, 0); + curr.moreDisplayed = false; searchbox.search_input.val(''); nav.onSearchReset(); }); searchbox.search_form.append(searchbox.search_icon_close); - searchbox.search_div.append(searchbox.search_form); - searchbox.search_div.hover(function () { + searchbox.search_form.hover(function () { searchbox.search_icon.stop().fadeTo(100, 0); searchbox.search_form.stop().fadeTo(100, 0.8); }, function () { - if (next_settings.lockSearchbox === true) { + if (settings.lockSearchbox === true) { return; } searchbox.search_form.stop().fadeTo(500, 0); searchbox.search_icon.stop().fadeTo(800, 0.7); }); + searchbox.search_div.append(searchbox.search_form); + searchbox.search_div.append(searchbox.search_more); searchbox.search_input.on('focus', function () { - next_settings.lockSearchbox = true; + settings.lockSearchbox = true; + searchbox.search_icon_more.stop().fadeTo(200, 1); searchbox.search_icon_close.stop().fadeTo(200, 1); }); searchbox.search_input.on('input', function () { - if ($(this).val() === '') { nav.onSearchReset(); } - if (next_settings.parentHasMethod('onEntryGenerated')) { - next_settings.parent.onEntryGenerated(); + if (settings.parentHasMethod('onEntryGenerated')) { + settings.parent.onEntryGenerated(); } if (searchbox.searchTimeout === null && searchbar.initSearch(false)) { @@ -112,9 +132,45 @@ var searchbar = { }, 2000); } }); + + fullTextSearch.options(settings.searchProviderId); + }, + + + onOptionsLoaded: function (result) { + searchbox.search_more.html(result[settings.searchProviderId]); + searchbox.search_more.find('INPUT').each(function () { + $(this).on('change', function () { + var search = searchbox.search_input.val(); + fullTextSearch.search({ + providers: settings.searchProviderId, + search: search, + page: curr.page, + options: searchbar.getSearchOptions(), + size: 20 + }); + }); + }) + }, + + + getSearchOptions: function () { + var options = {}; + searchbox.search_more.find('INPUT').each(function () { + var value = $(this).val(); + + if ($(this).attr('type') === 'checkbox' && !$(this).is(':checked')) { + value = ''; + } + + options[$(this).attr('id')] = value; + }); + + return options; }, + // TODO: do we really need this initSearch, or should we use the one from fulltextsearch.js !? initSearch: function (force) { var search = searchbox.search_input.val(); @@ -122,7 +178,19 @@ var searchbar = { return false; } - nextSearch.search(next_settings.searchProviderId, search, searchbar.searchResult); + if (curr.lastRequest === search) { + return true; + } + + curr.lastRequest = search; + + fullTextSearch.search({ + providers: settings.searchProviderId, + search: search, + page: curr.page, + options: searchbar.getSearchOptions(), + size: 20 + }); return true; } diff --git a/js/nextsearch.v1.settings.js b/js/fulltextsearch.v1.settings.js index b1a8fb8..7baa168 100644 --- a/js/nextsearch.v1.settings.js +++ b/js/fulltextsearch.v1.settings.js @@ -1,11 +1,11 @@ /* - * FullNextSearch - Full Text Search your Nextcloud. + * FullTextSearch - Full text search framework for Nextcloud * * This file is licensed under the Affero General Public License version 3 or * later. See the COPYING file. * * @author Maxence Lange <maxence@artificial-owl.com> - * @copyright 2017 + * @copyright 2018 * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify @@ -21,13 +21,12 @@ * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * - * */ /** global: searchbar */ /** global: api */ -var next_settings = { +var settings = { parent: null, delay_provider: 300, @@ -39,6 +38,7 @@ var next_settings = { entryTemplateDefault: null, divNoResult: null, + generateDefaultTemplate: function () { var divLeft = $('<div>', {class: 'result_entry_left'}); @@ -53,7 +53,7 @@ var next_settings = { div.append(divLeft); div.append(divRight); - next_settings.entryTemplateDefault = $('<div>').append(div); + settings.entryTemplateDefault = $('<div>').append(div); }, @@ -61,29 +61,29 @@ var next_settings = { var div = $('<div>', {id: 'noresult'}); div.html('no result'); div.hide(); - next_settings.divNoResult = div; + settings.divNoResult = div; }, setEntryTemplateId: function (template, parent) { - next_settings.entryTemplate = template; - next_settings.parent = parent; + settings.entryTemplate = template; + settings.parent = parent; }, setResultContainerId: function (container) { - next_settings.resultContainer = container; - next_settings.resultContainer.prepend(next_settings.divNoResult); + settings.resultContainer = container; + settings.resultContainer.prepend(settings.divNoResult); }, addSearchBar: function (providerId) { - next_settings.searchProviderId = providerId; + settings.searchProviderId = providerId; searchbar.init(); }, parentHasMethod: function (method) { - if (next_settings.parent === null) { + if (settings.parent === null) { return false; } - return (typeof eval('next_settings.parent. ' + method) === "function"); + return (typeof eval('settings.parent. ' + method) === "function"); } }; diff --git a/js/fullnextsearch.js b/js/navigate.js index 9727694..e800338 100644 --- a/js/fullnextsearch.js +++ b/js/navigate.js @@ -1,11 +1,11 @@ /* - * FullNextSearch - Full Text Search your Nextcloud. + * FullTextSearch - Full text search framework for Nextcloud * * This file is licensed under the Affero General Public License version 3 or * later. See the COPYING file. * * @author Maxence Lange <maxence@artificial-owl.com> - * @copyright 2017 + * @copyright 2018 * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify @@ -21,14 +21,13 @@ * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * - * */ /** global: OCA */ /** global: _ */ -const nextSearch = OCA.NextSearch.api; +const fullTextSearch = OCA.FullTextSearch.api; var elements = { @@ -48,8 +47,8 @@ Navigate.prototype = { init: function () { var self = this; - nextSearch.setEntryTemplateId($('#template_entry'), self); - nextSearch.setResultContainerId($('#search_result')); + fullTextSearch.setEntryTemplateId($('#template_entry'), self); + fullTextSearch.setResultContainerId($('#search_result')); elements.search_input = $('#search_input'); elements.search_submit = $('#search_submit'); @@ -80,8 +79,13 @@ Navigate.prototype = { if (!force && search.length < 3) { return false; } + var request = { + providers: 'all', + search: search, + page: curr.page + }; - nextSearch.search('_all', search, this.searchResult); + fullTextSearch.search(request, this.searchResult); return true; }, @@ -121,11 +125,11 @@ Navigate.prototype = { } }; -OCA.NextSearch.Example = Navigate; +OCA.FullTextSearch.Example = Navigate; $(document).ready(function () { - OCA.NextSearch.example = new Navigate(); + OCA.FullTextSearch.example = new Navigate(); }); diff --git a/js/personal.js b/js/personal.js deleted file mode 100644 index e69de29..0000000 --- a/js/personal.js +++ /dev/null |