Added filtering UI

Signed-off-by: fnuesse <felix.nuesse@t-online.de>
This commit is contained in:
fnuesse 2019-01-09 18:46:45 +01:00
parent 0751fbf2c6
commit 7170de48a1
No known key found for this signature in database
GPG key ID: 2089A3431243E819
7 changed files with 287 additions and 24 deletions

View file

@ -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);
}

View file

@ -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 = [];

View file

@ -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";

View file

@ -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 <http://www.gnu.org/licenses/>.
*
*/
(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();
});
},
};
}]);
}());

View file

@ -31,6 +31,7 @@
@import 'menu';
@import 'share_credential';
@import 'settings';
@import 'searchboxexpander';
.template-hidden{

View file

@ -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 <http://www.gnu.org/licenses/>.
*
*/
.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
}

View file

@ -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');