diff --git a/controller/translationcontroller.php b/controller/translationcontroller.php
index 2e293b33..e7e4ec55 100644
--- a/controller/translationcontroller.php
+++ b/controller/translationcontroller.php
@@ -420,6 +420,19 @@ class TranslationController extends ApiController {
'share.page.link_loading' => $this->trans->t('Loading…'),
'expired.share' => $this->trans->t('Awwhh… credential not found. Maybe it expired'),
+ //searchboxexpanderservice
+ 'search.settings.input.label' => $this->trans->t('Label'),
+ 'search.settings.input.username' => $this->trans->t('Username'),
+ 'search.settings.input.email' => $this->trans->t('email'),
+ 'search.settings.input.custom_fields' => $this->trans->t('Custom Fields'),
+ 'search.settings.input.password' => $this->trans->t('Password'),
+ 'search.settings.input.description' => $this->trans->t('Description'),
+ 'search.settings.input.url' => $this->trans->t('Url'),
+
+ 'search.settings.title' => $this->trans->t('Custom Search:'),
+ 'search.settings.defaults_button' => $this->trans->t('Revert to defaults'),
+
+
);
return new JSONResponse($translations);
}
diff --git a/js/app/controllers/credential.js b/js/app/controllers/credential.js
index 0ad511aa..ff9f881a 100644
--- a/js/app/controllers/credential.js
+++ b/js/app/controllers/credential.js
@@ -328,8 +328,11 @@
};
//searchboxfix
- $scope.$on('nc_searchbox', function(event, args) {
+ $scope.$on('nc_searchbox', function(event, args, fields) {
$scope.filterOptions.filterText=args;
+ if(fields){
+ $scope.filterOptions.fields=fields;
+ }
});
$scope.filtered_credentials = [];
diff --git a/js/app/controllers/menu.js b/js/app/controllers/menu.js
index fdb3a208..0c1ed6b2 100644
--- a/js/app/controllers/menu.js
+++ b/js/app/controllers/menu.js
@@ -31,8 +31,8 @@
* Controller of the passmanApp
*/
angular.module('passmanApp')
- .controller('MenuCtrl', ['$scope', 'VaultService', '$location', '$rootScope', 'TagService','SettingsService', '$translate',
- function ($scope, VaultService, $location, $rootScope, TagService, SettingsService, $translate) {
+ .controller('MenuCtrl', ['$scope', 'VaultService', '$location', '$rootScope', 'TagService','SettingsService', '$translate', 'SearchboxexpanderService',
+ function ($scope, VaultService, $location, $rootScope, TagService, SettingsService, $translate, SearchboxexpanderService) {
$rootScope.logout = function () {
//see vault.js:54
$rootScope.override_default_vault=true;
@@ -124,28 +124,8 @@
}
};
- //searchboxfix
- var native_search = document.getElementById("searchbox");
- if(native_search !== null){
- native_search.nextElementSibling.addEventListener('click', function (e) {
- $scope.$apply(function () {
- $rootScope.$broadcast('nc_searchbox',"");
- });
- });
- native_search.classList.remove('hidden');
- native_search.addEventListener('keypress', function (e) {
- if(e.keyCode === 13){
- e.preventDefault();
- }
- });
-
- native_search.addEventListener('keyup', function (e) {
- $scope.$apply(function () {
- $rootScope.$broadcast('nc_searchbox',native_search.value);
- });
- });
- }
+ SearchboxexpanderService.expandSearch($rootScope, $scope);
$scope.clickedNavigationItem="all";
diff --git a/js/app/services/searchboxexpanderservice.js b/js/app/services/searchboxexpanderservice.js
new file mode 100644
index 00000000..20e76e36
--- /dev/null
+++ b/js/app/services/searchboxexpanderservice.js
@@ -0,0 +1,199 @@
+/**
+ * Nextcloud - passman
+ *
+ * @copyright Copyright (c) 2019, Felix Nüsse (felix.nuesse@t-online.de)
+ * @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';
+ /**
+ * @ngdoc service
+ * @name passmanApp.SearchboxexpanderService
+ * @description
+ * # SearchboxexpanderService
+ * Service in the passmanApp.
+ */
+ angular.module('passmanApp')
+ .service('SearchboxexpanderService', ['SettingsService', '$translate', function (SettingsService, $translate) {
+
+ var defaults = {'label':true, 'username':true, 'email':true, 'custom_fields':true, 'password':false, 'description':false, 'url':false};
+ var native_search = document.getElementById("searchbox");
+
+
+ var translations ={};
+
+ $translate.onReady(function() {
+ for (var key in defaults) {
+ translations[key]=$translate.instant('search.settings.input.'+key);
+ }
+
+ var title=$translate.instant('search.settings.title');
+ var defaults_button=$translate.instant('search.settings.defaults_button');
+ buildPopup(title, defaults_button);
+ });
+
+
+ function getSearchFieldArray(){
+ var fields=[];
+ for (var key in defaults) {
+ if(defaults[key]){
+ fields.push(key);
+ }
+ }
+ }
+
+ //searchboxfix
+ function buildDefaultFix(rootScope, scope) {
+ if (native_search === null) {
+ return;
+ }
+ native_search.nextElementSibling.addEventListener('click', function (e) {
+ scope.$apply(function () {
+ rootScope.$broadcast('nc_searchbox', "");
+ });
+ });
+
+ native_search.classList.remove('hidden');
+ native_search.addEventListener('keypress', function (e) {
+ if (e.keyCode === 13) {
+ e.preventDefault();
+ }
+ });
+
+ native_search.addEventListener('keyup', function (e) {
+ scope.$apply(function () {
+ rootScope.$broadcast('nc_searchbox', native_search.value, getSearchFieldArray());
+ });
+ });
+
+ }
+
+ function buildCog() {
+ if (native_search === null) {
+ return;
+ }
+
+ var parent = document.createElement("div");
+ parent.classList.add("notifications");
+ parent.id = "searchbox-settings";
+ //parent.classList.add("hidden");
+
+ var node = document.createElement("div");
+ node.classList.add("icon-category-tools");
+ node.classList.add("searchbox-settings");
+ node.id = "searchbox-settings-icon";
+
+ parent.appendChild(node);
+ native_search.after(parent);
+ }
+
+ function addListenerToCog() {
+ if (native_search === null) {
+ return;
+ }
+
+ $('#searchbox').on("focus", function (evt) {
+ //$('#searchbox-settings').removeClass("hidden");
+
+ });
+
+ $('#searchbox').on("blur", function (evt) {
+ if (!native_search.value) {
+ //$('#searchbox-settings').addClass("hidden");
+ }
+ });
+ }
+
+ function openPopup() {
+ if (native_search === null) {
+ return;
+ }
+
+ $(function () {
+ $("#dialog").dialog({
+ width: 280,
+ height: 280,
+ dialogClass: 'custom-search-dialog',
+ close: function() {
+ $(this).dialog('destroy');
+ }
+ }).removeClass('ui-corner-all');
+
+ });
+ }
+
+ function buildPopup(title) {
+
+ var dialogdiv = document.createElement("div");
+ dialogdiv.id = "dialog";
+ dialogdiv.title = title;
+ dialogdiv.classList.add("hidden");
+ native_search.after(dialogdiv);
+
+ for (var key in defaults) {
+ var div_inner=document.createElement("div");
+
+ var input = document.createElement("input");
+ input.id=key+"_input";
+ input.type="checkbox";
+ if(defaults[key]){
+ input.checked="true";
+ }
+ input.innerText=key;
+
+ var label = document.createElement("label");
+ label.htmlFor=key+"_input";
+ label.innerHTML=translations[key];
+
+ div_inner.appendChild(input);
+ div_inner.appendChild(label);
+ dialogdiv.appendChild(div_inner);
+
+
+
+ }
+
+ }
+
+
+ function addListenerToDefault(rootScope, scope) {
+ if (native_search === null) {
+ return;
+ }
+ }
+
+ return {
+ expandSearch: function ($rootScope, $scope, translation) {
+
+ buildDefaultFix($rootScope, $scope);
+ buildCog();
+ addListenerToCog();
+ buildPopup(translation);
+
+
+
+ $('#searchbox-settings-icon').on("click", function (evt) {
+ console.log("click?");
+ openPopup();
+ });
+
+
+ },
+ };
+ }]);
+}());
\ No newline at end of file
diff --git a/sass/app.scss b/sass/app.scss
index f064c217..9570352a 100644
--- a/sass/app.scss
+++ b/sass/app.scss
@@ -31,6 +31,7 @@
@import 'menu';
@import 'share_credential';
@import 'settings';
+@import 'searchboxexpander';
.template-hidden{
diff --git a/sass/searchboxexpander.scss b/sass/searchboxexpander.scss
new file mode 100644
index 00000000..5ca3a65d
--- /dev/null
+++ b/sass/searchboxexpander.scss
@@ -0,0 +1,66 @@
+/**
+ * Nextcloud - passman
+ *
+ * @copyright Copyright (c) 2019, Felix Nüsse (felix.nuesse@t-online.de)
+ * @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 .
+ *
+ */
+
+.searchbox-settings{
+ position: relative;
+ top: 50%;
+ transform: translateY(-50%);
+}
+
+.custom-search-dialog{
+ border-radius: var(--border-radius-large) !important;
+ box-shadow: 0 0 30px var(--color-box-shadow);
+ .ui-dialog {
+ border-radius: var(--border-radius-large);
+ box-shadow: 0 0 30px var(--color-box-shadow);
+ }
+ .ui-widget-header {
+ background: none;
+ }
+
+ //closebutton top right
+ .ui-icon-closethick {
+ background-position: inherit;
+ }
+
+ .ui-button-icon {
+ border: none !important;
+ }
+ .ui-icon {
+ border: none !important;
+ }
+
+ .ui-button .ui-icon {
+ background-image: var(--icon-close-000);
+ }
+
+ .ui-icon-closethick {
+ border: none !important;
+ }
+
+ //closebutton top right end
+
+ //bottom line removal
+ .ui-dialog-buttonpane.ui-helper-clearfix{
+ display: none;
+ }
+ //bottom line end
+}
\ No newline at end of file
diff --git a/templates/main.php b/templates/main.php
index 0cae6042..4bc649a3 100644
--- a/templates/main.php
+++ b/templates/main.php
@@ -64,6 +64,7 @@ script('passman', 'app/services/iconservice');
script('passman', 'app/services/tagservice');
script('passman', 'app/services/notificationservice');
script('passman', 'app/services/shareservice');
+script('passman', 'app/services/searchboxexpanderservice');
script('passman', 'app/factory/sharingacl');
script('passman', 'app/directives/passwordgen');
script('passman', 'app/directives/fileselect');