From 23660961bd686b7089deabbc3fd327fb185000d1 Mon Sep 17 00:00:00 2001 From: Benjamin Gamard Date: Mon, 13 Nov 2017 18:11:54 +0100 Subject: [PATCH] #158: advanced search form (wip) --- .../app/docs/controller/document/Document.js | 53 ++++++++++++++++--- .../src/app/docs/directive/SelectTag.js | 1 + docs-web/src/main/webapp/src/locale/en.json | 9 ++++ .../webapp/src/partial/docs/document.html | 45 ++++++++++++++-- docs-web/src/main/webapp/src/style/main.less | 1 + 5 files changed, 98 insertions(+), 11 deletions(-) diff --git a/docs-web/src/main/webapp/src/app/docs/controller/document/Document.js b/docs-web/src/main/webapp/src/app/docs/controller/document/Document.js index 88decb32..d75f084f 100644 --- a/docs-web/src/main/webapp/src/app/docs/controller/document/Document.js +++ b/docs-web/src/main/webapp/src/app/docs/controller/document/Document.js @@ -5,7 +5,7 @@ */ angular.module('docs').controller('Document', function ($scope, $rootScope, $timeout, $state, Restangular, $q) { /** - * Documents table sort status. + * Scope variables. */ $scope.sortColumn = 3; $scope.asc = false; @@ -15,6 +15,9 @@ angular.module('docs').controller('Document', function ($scope, $rootScope, $tim $scope.search = $state.params.search ? $state.params.search : ''; $scope.searchOpened = false; $scope.setSearch = function (search) { $scope.search = search }; + $scope.searchDropdownAnchor = angular.element(document.querySelector('.search-dropdown-anchor')); + $scope.paginationShown = true; + $scope.advsearch = {}; // A timeout promise is used to slow down search requests to the server // We keep track of it for cancellation purpose @@ -149,21 +152,57 @@ angular.module('docs').controller('Document', function ($scope, $rootScope, $tim return deferred.promise; }; - // Hack to reload the pagination directive after language change - $scope.paginationShown = true; + /** + * Hack to reload the pagination directive after language change. + */ $rootScope.$on('$translateChangeSuccess', function () { $scope.paginationShown = false; $timeout(function () { $scope.paginationShown = true; }); - }) + }); - // Advanced search - $scope.searchDropdownAnchor = angular.element(document.querySelector('.search-dropdown-anchor')); + /** + * Open the advanced search panel. + */ $scope.openSearch = function () { var opened = $scope.searchOpened; $timeout(function () { $scope.searchOpened = !opened; }); - } + }; + + /** + * Start the advanced search. + */ + $scope.startSearch = function () { + var search = ''; + if (!_.isEmpty($scope.advsearch.search_simple)) { + search += $scope.advsearch.search_simple + ' '; + } + if (!_.isEmpty($scope.advsearch.search_fulltext)) { + search += 'full:' + $scope.advsearch.search_fulltext + ' '; + } + if (!_.isEmpty($scope.advsearch.creator)) { + search += 'by:' + $scope.advsearch.creator + ' '; + } + if (!_.isEmpty($scope.advsearch.language)) { + search += 'lang:' + $scope.advsearch.language + ' '; + } + $scope.advsearch.after_date; + $scope.advsearch.before_date; + if (!_.isEmpty($scope.advsearch.tags)) { + search += _.reduce($scope.advsearch.tags, function(s, t) { + return s + 'tag:' + t + ' '; + }, ''); + } + $scope.search = search; + $scope.searchOpened = false; + }; + + $scope.clearSearch = function () { + $scope.advsearch = {}; + $scope.search = ''; + $scope.searchOpened = false; + }; }); \ No newline at end of file diff --git a/docs-web/src/main/webapp/src/app/docs/directive/SelectTag.js b/docs-web/src/main/webapp/src/app/docs/directive/SelectTag.js index 3765e0b8..84b4ac2f 100644 --- a/docs-web/src/main/webapp/src/app/docs/directive/SelectTag.js +++ b/docs-web/src/main/webapp/src/app/docs/directive/SelectTag.js @@ -40,6 +40,7 @@ angular.module('docs').directive('selectTag', function() { // Add the new tag if (tag) { if (!duplicate) { + if (!$scope.tags) $scope.tags = []; $scope.tags.push(tag); } $scope.input = ''; diff --git a/docs-web/src/main/webapp/src/locale/en.json b/docs-web/src/main/webapp/src/locale/en.json index 71866c63..0935ad54 100644 --- a/docs-web/src/main/webapp/src/locale/en.json +++ b/docs-web/src/main/webapp/src/locale/en.json @@ -22,6 +22,15 @@ "logout": "Logout" }, "document": { + "search_simple": "Simple search", + "search_fulltext": "Fulltext search", + "search_creator": "Creator", + "search_language": "Language", + "search_before_date": "Before this date", + "search_after_date": "After this date", + "search_tags": "Tags", + "search_clear": "Clear", + "any_language": "Any language", "add_document": "Add a document", "tags": "Tags", "no_tags": "No tags", diff --git a/docs-web/src/main/webapp/src/partial/docs/document.html b/docs-web/src/main/webapp/src/partial/docs/document.html index a96544a2..86bd4f4a 100644 --- a/docs-web/src/main/webapp/src/partial/docs/document.html +++ b/docs-web/src/main/webapp/src/partial/docs/document.html @@ -20,7 +20,7 @@
+ auto-close="disabled" is-open="searchOpened" dropdown-append-to="searchDropdownAnchor"> @@ -61,12 +61,49 @@
+
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+
- -
diff --git a/docs-web/src/main/webapp/src/style/main.less b/docs-web/src/main/webapp/src/style/main.less index e31c74c6..51038a1c 100644 --- a/docs-web/src/main/webapp/src/style/main.less +++ b/docs-web/src/main/webapp/src/style/main.less @@ -54,6 +54,7 @@ .row-full { overflow: hidden; margin-top: -20px !important; + min-height: 80vh; } .well-full {