diff options
author | newhinton <felix.nuesse@t-online.de> | 2019-05-12 14:04:18 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-05-12 14:04:18 +0300 |
commit | 626897bdfa6d861848bb13ac6ae10c6c28e0e126 (patch) | |
tree | 34c7062dd17050030e206518a698d0f6e2cc8dcf /js/app | |
parent | 6f4ad6d5a9cfe7ad18e03ec56882809d21f0b2ed (diff) | |
parent | 3b5c8e96dc8bddee0f4054021795247082898f99 (diff) |
Merge branch 'master' into feature/540/markcredentialascompromisedfeature/540/markcredentialascompromised
Diffstat (limited to 'js/app')
-rw-r--r-- | js/app/controllers/credential.js | 8 | ||||
-rw-r--r-- | js/app/controllers/menu.js | 26 | ||||
-rw-r--r-- | js/app/directives/iconpicker.js | 1 | ||||
-rw-r--r-- | js/app/services/searchboxexpanderservice.js | 245 |
4 files changed, 255 insertions, 25 deletions
diff --git a/js/app/controllers/credential.js b/js/app/controllers/credential.js index 0ad511aa..0dc3f4b1 100644 --- a/js/app/controllers/credential.js +++ b/js/app/controllers/credential.js @@ -328,8 +328,12 @@ }; //searchboxfix - $scope.$on('nc_searchbox', function(event, args) { - $scope.filterOptions.filterText=args; + $scope.$on('nc_searchbox', function(event, searchterm, fields) { + $scope.filterOptions.filterText=searchterm; + + 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/directives/iconpicker.js b/js/app/directives/iconpicker.js index 0c885845..706b18ea 100644 --- a/js/app/directives/iconpicker.js +++ b/js/app/directives/iconpicker.js @@ -136,6 +136,7 @@ $('#iconPicker').dialog({ width: 800, height: 380, + dialogClass: 'iconpicker-dialog', close: function() { $(this).dialog('destroy'); } diff --git a/js/app/services/searchboxexpanderservice.js b/js/app/services/searchboxexpanderservice.js new file mode 100644 index 00000000..972b26d1 --- /dev/null +++ b/js/app/services/searchboxexpanderservice.js @@ -0,0 +1,245 @@ +/** + * 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 searchfields = {'label':true, 'username':true, 'email':true, 'custom_fields':true, 'password':false, 'description':false, 'url':false}; + var native_search = document.getElementById("searchbox"); + + var title="Loading..."; + var defaults_button="Loading..."; + var translations ={}; + + $translate.onReady(function() { + for (var key in defaults) { + translations[key]=$translate.instant('search.settings.input.'+key); + } + + title=$translate.instant('search.settings.title'); + defaults_button=$translate.instant('search.settings.defaults_button'); + }); + + function getSearchFieldArraySettings(){ + + var res = SettingsService.getSetting('searchbox_settings'); + + if(res!== ""){ + searchfields = JSON.parse(res); + }else{ + searchfields=defaults; + } + + + } + + function getSearchFieldArrayForFiltering(){ + var fields=[]; + for (var key in searchfields) { + if(searchfields[key]){ + fields.push(key); + } + } + return fields; + } + + //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, getSearchFieldArrayForFiltering()); + }); + }); + + } + + 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-settings-white"); + 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) { + setTimeout(function() { + $('#searchbox-settings').addClass("hidden"); + }, 150); + } + }); + } + + function openPopup() { + if (native_search === null) { + return; + } + + buildPopup(title, defaults_button); + + $(function () { + $("#dialog-searchboxsettings").dialog({ + width: 280, + height: 280, + dialogClass: 'custom-search-dialog', + close: function() { + $(this).dialog('destroy'); + } + }).removeClass('ui-corner-all'); + + }); + } + + function buildPopup(title) { + + if ( $("#dialog-searchboxsettings").length ) { + $( "#dialog-searchboxsettings" ).remove(); + } + + var dialogdiv = document.createElement("div"); + dialogdiv.id = "dialog-searchboxsettings"; + dialogdiv.title = title; + dialogdiv.classList.add("hidden"); + + native_search.after(dialogdiv); + + getSearchFieldArraySettings(); + for (var key in searchfields) { + + var div_inner=document.createElement("div"); + div_inner.id=key+"_div"; + + var input = document.createElement("input"); + input.id=key+"_input"; + input.classList.add("searchbox_settings_input"); + input.setAttribute('key', key); + input.type="checkbox"; + if(searchfields[key]){ + input.checked="true"; + } + input.innerText=key; + + var label = document.createElement("label"); + label.classList.add("searchbox_settings_label"); + //label.htmlFor=key+"_input"; + label.innerHTML=translations[key]; + label.setAttribute('key', key); + + div_inner.appendChild(input); + div_inner.appendChild(label); + + dialogdiv.appendChild(div_inner); + + + + } + attachListener(); + + } + + function attachListener(){ + + $('.searchbox_settings_input').on("change", function(evt) { + + var key = $(this).attr('key'); + searchfields[key]=$("#"+key+"_input").prop('checked'); + var string = JSON.stringify(searchfields); + SettingsService.setSetting('searchbox_settings', string); + + }); + + $('.searchbox_settings_label').on("click", function(evt) { + + return; + var key = $(this).attr("key"); + + var checkBoxes = $("#"+key+"_input"); + checkBoxes.prop("checked", !checkBoxes.prop("checked")); + + //todo add functionality here + + }); + } + + + return { + expandSearch: function ($rootScope, $scope, translation) { + + getSearchFieldArraySettings(); + buildDefaultFix($rootScope, $scope); + buildCog(); + addListenerToCog(); + + $('#searchbox-settings-icon').on("click", function (evt) { + openPopup(); + }); + + }, + }; + }]); +}());
\ No newline at end of file |