From 0c3c5a2a5f4813af4da01145b659d9a18c48337c Mon Sep 17 00:00:00 2001 From: Robert Date: Thu, 28 Jun 2018 11:46:37 +0200 Subject: [PATCH 1/4] Changed clipboard directive to take in attribute instead of bindings to avoid scope isolated scope error. --- .../components/umbclipboard.directive.js | 29 +++++++------------ .../src/views/users/views/users/users.html | 6 ++-- 2 files changed, 14 insertions(+), 21 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbclipboard.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbclipboard.directive.js index 575b5bd698..6dec88e494 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbclipboard.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbclipboard.directive.js @@ -104,33 +104,33 @@ assetsService.loadJs("lib/clipboard/clipboard.min.js", scope) .then(function () { - if(scope.umbClipboardTarget) { - target.setAttribute("data-clipboard-target", scope.umbClipboardTarget); + if(attrs.umbClipboardTarget) { + target.setAttribute("data-clipboard-target", attrs.umbClipboardTarget); } - if(scope.umbClipboardAction) { - target.setAttribute("data-clipboard-action", scope.umbClipboardAction); + if(attrs.umbClipboardAction) { + target.setAttribute("data-clipboard-action", attrs.umbClipboardAction); } - if(scope.umbClipboardText) { - target.setAttribute("data-clipboard-text", scope.umbClipboardText); + if(attrs.umbClipboardText) { + target.setAttribute("data-clipboard-text", attrs.umbClipboardText); } - clipboard = new Clipboard(target); + clipboard = new ClipboardJS(target); clipboard.on('success', function (e) { e.clearSelection(); - if (scope.umbClipboardSuccess) { + if (attrs.umbClipboardSuccess) { scope.$apply(function () { - scope.umbClipboardSuccess({ e: e }); + attrs.umbClipboardSuccess({ e: e }); }); } }); clipboard.on('error', function (e) { - if (scope.umbClipboardError) { + if (attrs.umbClipboardError) { scope.$apply(function () { - scope.umbClipboardError({ e: e }); + attrs.umbClipboardError({ e: e }); }); } }); @@ -148,13 +148,6 @@ var directive = { restrict: 'A', - scope: { - umbClipboardSuccess: '&?', - umbClipboardError: '&?', - umbClipboardTarget: "@?", - umbClipboardAction: "@?", - umbClipboardText: "=?" - }, link: link }; diff --git a/src/Umbraco.Web.UI.Client/src/views/users/views/users/users.html b/src/Umbraco.Web.UI.Client/src/views/users/views/users/users.html index f82958769a..58a88390e7 100644 --- a/src/Umbraco.Web.UI.Client/src/views/users/views/users/users.html +++ b/src/Umbraco.Web.UI.Client/src/views/users/views/users/users.html @@ -462,9 +462,9 @@ From d25c16025b5b35e183247b1e0e980120e7bfeb77 Mon Sep 17 00:00:00 2001 From: Robert Date: Fri, 29 Jun 2018 08:55:29 +0200 Subject: [PATCH 2/4] Parsing clipboard button state setters from expressions to methods --- .../components/umbclipboard.directive.js | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbclipboard.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbclipboard.directive.js index 6dec88e494..7c73e62301 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbclipboard.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbclipboard.directive.js @@ -94,51 +94,53 @@ (function () { 'use strict'; - function umbClipboardDirective($timeout, assetsService) { + function umbClipboardDirective($timeout, assetsService, $parse) { function link(scope, element, attrs, ctrl) { var clipboard; var target = element[0]; - + assetsService.loadJs("lib/clipboard/clipboard.min.js", scope) .then(function () { - if(attrs.umbClipboardTarget) { + + if (attrs.umbClipboardTarget) { target.setAttribute("data-clipboard-target", attrs.umbClipboardTarget); } - if(attrs.umbClipboardAction) { + if (attrs.umbClipboardAction) { target.setAttribute("data-clipboard-action", attrs.umbClipboardAction); } - if(attrs.umbClipboardText) { + if (attrs.umbClipboardText) { target.setAttribute("data-clipboard-text", attrs.umbClipboardText); } clipboard = new ClipboardJS(target); + var expressionHandlerSuccess = $parse(attrs.umbClipboardSuccess); clipboard.on('success', function (e) { e.clearSelection(); if (attrs.umbClipboardSuccess) { - scope.$apply(function () { - attrs.umbClipboardSuccess({ e: e }); - }); + + expressionHandlerSuccess(scope, { msg: "success" }); } + }); + var expressionHandlerError = $parse(attrs.umbClipboardError); clipboard.on('error', function (e) { if (attrs.umbClipboardError) { - scope.$apply(function () { - attrs.umbClipboardError({ e: e }); - }); + + expressionHandlerError(scope, { msg: "error" }); } }); }); // clean up - scope.$on('$destroy', function(){ + scope.$on('$destroy', function () { clipboard.destroy(); }); From 1de3f012077fa0e361af2dfab5c37397035c3db5 Mon Sep 17 00:00:00 2001 From: Robert Date: Fri, 29 Jun 2018 09:00:39 +0200 Subject: [PATCH 3/4] Adding resetClipboardButtonState function and adding a 1 second delay in between resets to show the "success"or "error" symbols on the button every time it's pressed --- .../users/views/users/users.controller.js | 30 +++++++++++++++---- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/users/views/users/users.controller.js b/src/Umbraco.Web.UI.Client/src/views/users/views/users/users.controller.js index c3cee9292c..3c5c083477 100644 --- a/src/Umbraco.Web.UI.Client/src/views/users/views/users/users.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/users/views/users/users.controller.js @@ -69,7 +69,7 @@ if (Umbraco.Sys.ServerVariables.umbracoSettings.showUserInvite) { vm.defaultButton = { labelKey: "user_inviteUser", - handler: function() { + handler: function () { vm.setUsersViewState('inviteUser'); } }; @@ -135,7 +135,7 @@ getUsers(); // Get user groups - userGroupsResource.getUserGroups({ onlyCurrentUserGroups: false}).then(function (userGroups) { + userGroupsResource.getUserGroups({ onlyCurrentUserGroups: false }).then(function (userGroups) { vm.userGroups = userGroups; }); @@ -540,12 +540,32 @@ // copy to clip board success function copySuccess() { - vm.page.copyPasswordButtonState = "success"; + + if (vm.page.copyPasswordButtonState != "success") { + + vm.page.copyPasswordButtonState = "success"; + + $timeout(function () { + resetClipboardButtonState() + }, 1000); + } + } // copy to clip board error function copyError() { - vm.page.copyPasswordButtonState = "error"; + if (vm.page.copyPasswordButtonState != "error") { + + vm.page.copyPasswordButtonState = "error"; + + $timeout(function () { + resetClipboardButtonState() + }, 1000); + } + } + + function resetClipboardButtonState() { + vm.page.copyPasswordButtonState = "init"; } function goToUser(userId) { @@ -594,7 +614,7 @@ var localOffset = new Date().getTimezoneOffset(); var serverTimeNeedsOffsetting = (-serverOffset !== localOffset); - if(serverTimeNeedsOffsetting) { + if (serverTimeNeedsOffsetting) { dateVal = dateHelper.convertToLocalMomentTime(user.lastLoginDate, serverOffset); } else { dateVal = moment(user.lastLoginDate, "YYYY-MM-DD HH:mm:ss"); From 722510aee1abbcc5e0b3064d920ed3197d1d1d01 Mon Sep 17 00:00:00 2001 From: Robert Date: Fri, 29 Jun 2018 09:02:47 +0200 Subject: [PATCH 4/4] Changing the background color of the password field to white, passing copySuccess and copyError functions as expressions. --- .../src/views/users/views/users/users.html | 41 +++++++++---------- 1 file changed, 19 insertions(+), 22 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/users/views/users/users.html b/src/Umbraco.Web.UI.Client/src/views/users/views/users/users.html index 58a88390e7..abf2f80ff2 100644 --- a/src/Umbraco.Web.UI.Client/src/views/users/views/users/users.html +++ b/src/Umbraco.Web.UI.Client/src/views/users/views/users/users.html @@ -441,33 +441,30 @@
-
+
{{vm.newUser.resetPasswordValue}}
••••••••
- + - + - +