From 3d0c958a1997fc901712c0b1f0aaf8c0ebca7241 Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Mon, 24 Apr 2017 12:08:15 -0400 Subject: [PATCH] (js) Keep form pristine when changing passwords Fixes #4138 --- NEWS | 1 + UI/Templates/PreferencesUI/UIxPreferences.wox | 4 +-- .../js/Common/sgNoDirtyCheck.directive.js | 33 +++++++++++++++++++ 3 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 UI/WebServerResources/js/Common/sgNoDirtyCheck.directive.js diff --git a/NEWS b/NEWS index 847682c64..0ad9ca742 100644 --- a/NEWS +++ b/NEWS @@ -12,6 +12,7 @@ Enhancements Bug fixes - [web] fixed attachment path when inside multiple body parts - [web] fixed email reminder with attendees (#4115) + - [web] prevented form to be marked dirty when changing password (#4138) - [core] cherry-picked comma escaping fix from v2 (#3296) - [core] fix sogo-tool restore potentially crashing on corrupted data (#4048) - [core] handle properly mails using windows-1255 charset (#4124) diff --git a/UI/Templates/PreferencesUI/UIxPreferences.wox b/UI/Templates/PreferencesUI/UIxPreferences.wox index 131046368..1e6783c98 100644 --- a/UI/Templates/PreferencesUI/UIxPreferences.wox +++ b/UI/Templates/PreferencesUI/UIxPreferences.wox @@ -233,13 +233,13 @@ - + - +
diff --git a/UI/WebServerResources/js/Common/sgNoDirtyCheck.directive.js b/UI/WebServerResources/js/Common/sgNoDirtyCheck.directive.js new file mode 100644 index 000000000..a19381591 --- /dev/null +++ b/UI/WebServerResources/js/Common/sgNoDirtyCheck.directive.js @@ -0,0 +1,33 @@ +/* -*- Mode: js; indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +(function() { + 'use strict'; + + angular + .module('SOGo.Common') + .directive('sgNoDirtyCheck', sgNoDirtyCheck); + + /* + * sgNoDirtyCheck - prevent input from affecting the form's pristine state. + * @restrict attribute + */ + function sgNoDirtyCheck() { + return { + restrict: 'A', + require: 'ngModel', + link: function (scope, elem, attrs, ngModelCtrl) { + if (!ngModelCtrl) { + return; + } + + var clean = (ngModelCtrl.$pristine && !ngModelCtrl.$dirty); + + if (clean) { + ngModelCtrl.$pristine = false; + ngModelCtrl.$dirty = true; + } + } + }; + } + +})();