[java-identity-provider] branch master updated: IDP-1127 - Improve logout user feedback and ease CSS design

Scott Cantor cantor.2 at osu.edu
Wed Dec 5 15:02:04 EST 2018


This is an automated email from the git hooks/post-receive script.

scantor pushed a commit to branch master
in repository java-identity-provider.

View the commit online:
http://git.shibboleth.net/view/?p=java-identity-provider.git;a=commit;h=16f44632ba4c1198caa2932d9e6eb1df9d4a9ee2

The following commit(s) were added to refs/heads/master by this push:
       new  16f4463   IDP-1127 - Improve logout user feedback and ease CSS design
16f4463 is described below

commit 16f44632ba4c1198caa2932d9e6eb1df9d4a9ee2
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Wed Dec 5 15:02:00 2018 -0500

    IDP-1127 - Improve logout user feedback and ease CSS design
    
    https://issues.shibboleth.net/jira/browse/IDP-1127
---
 .../resources/system/views/logout/propagate.vm     | 85 ++++++++++++++++++++--
 idp-war/src/main/webapp/css/logout.css             | 17 +++--
 2 files changed, 89 insertions(+), 13 deletions(-)

diff --git a/idp-conf/src/main/resources/system/views/logout/propagate.vm b/idp-conf/src/main/resources/system/views/logout/propagate.vm
index 8a71905..f2522ac 100644
--- a/idp-conf/src/main/resources/system/views/logout/propagate.vm
+++ b/idp-conf/src/main/resources/system/views/logout/propagate.vm
@@ -25,16 +25,26 @@
 ##
 #if ($logoutContext and !$logoutContext.getSessionMap().isEmpty())
     <ol>
-        #foreach ($sp in $logoutContext.getSessionMap().keySet())
+        #foreach ($entry in $logoutContext.getKeyedSessionMap().entrySet())
+            #set ($sp = $entry.getValue().getId())
             #set ($rpCtx = $multiRPContext.getRelyingPartyContextById($sp))
             #if ($rpCtx)
                 #set ($rpUIContext = $rpCtx.getSubcontext("net.shibboleth.idp.ui.context.RelyingPartyUIContext"))
             #end
             #if ($rpUIContext and $rpUIContext.getServiceName())
-                <li id="result_$codecUtil.hex($sp.getBytes())" title="Logout pending">$htmlEncoder.encodeForHTML($rpUIContext.getServiceName())</li>
+                #set ($serviceName = $rpUIContext.getServiceName())
+            #else
+                #set ($serviceName = $sp)
+            #end
+            #if ($flowSelector.apply($entry.getValue()))
+                #set ($logoutClass = "logout pending")
+                #set ($logoutTitle = "Logout pending...")
             #else
-                <li id="result_$codecUtil.hex($sp.getBytes())" title="Logout pending">$htmlEncoder.encodeForHTML($sp)</li>
+                #set ($logoutClass = "logout na")
+                #set ($logoutTitle = "Logout not supported")
             #end
+            <li id="result_$codecUtil.hex($sp.getBytes())" class="$logoutClass"
+                title="$logoutTitle">$htmlEncoder.encodeForHTML($serviceName)</li>
         #end
     </ol>
     <script src="$request.getContextPath()/js/jquery-3.3.1.min.js"></script>
@@ -57,7 +67,10 @@
             spTracker.status = check_status;
             sessionTracker['result_$codecUtil.hex($sp.getBytes())'] = spTracker;
         #end
-    
+
+        var hasCompleted = new Object();
+        setupHasCompleted();
+
         function onLoad(src, target, trackerId, sessionKey) {
             try {
                 var content = src.contents().text();
@@ -69,13 +82,13 @@
             } catch (e) {
                 sessionTracker[trackerId]['_' + sessionKey] = false;
             }
-            target.removeClass("success failure");
+            target.removeClass("pending success failure");
             if (sessionTracker[trackerId].status()) {
                 target.addClass("success");
-                target.prop("title", "Successful logout");
+                target.prop("title", "Logout successful");
             } else {
                 target.addClass("failure");
-                target.prop("title", "Failed logout")
+                target.prop("title", "Logout failed")
             }
             if (typeof(Storage) !== "undefined" ) {
                 var url = sessionStorage.getItem(sessionKey);
@@ -84,6 +97,64 @@
                     setTimeout(function() { src.prop("src", url) }, 1500);
                 }
             }
+
+            markAsCompleted(target, trackerId, sessionKey);
+            if (allHaveCompleted()) {
+              processAllHaveCompleted();
+            }
+        }
+
+        function setupHasCompleted() {
+        #foreach ($entry in $logoutContext.getKeyedSessionMap().entrySet())
+          #if ($flowSelector.apply($entry.getValue()))
+            #set ($trackerId = "result_$codecUtil.hex($entry.getValue().getId().getBytes())")
+            #set ($sessionKey = "$entry.getKey()")
+          hasCompleted['${trackerId}_${sessionKey}'] = false;
+          #end
+        #end
+        }
+
+        function markAsCompleted(target, trackerId, sessionKey) {
+          hasCompleted[trackerId + '_' + sessionKey] = true;
+        }
+
+        function allHaveCompleted() {
+          for (key in hasCompleted) {
+            if (!hasCompleted[key]) {
+              return false;
+            }
+          }
+          return true;
+        }
+
+        function allHaveSucceeded() {
+          for (key in sessionTracker) {
+            if (!sessionTracker[key].status()) {
+              return false;
+            }
+          }
+          return true;
+        }
+
+        function allHaveFailed() {
+          for (key in sessionTracker) {
+            if (sessionTracker[key].status()) {
+              return false;
+            }
+          }
+          return true;
+        }
+
+        function processAllHaveCompleted() {
+          $('.logout-status').removeClass("pending")
+          $('.logout-status').addClass("completed")
+          if (allHaveSucceeded()) {
+            $('.logout-status').addClass("all-success")
+          } else if (allHaveFailed()) {
+            $('.logout-status').addClass("all-failure")
+          } else {
+            $('.logout-status').addClass("any-failure")
+          }
         }
     // -->
     </script>
diff --git a/idp-war/src/main/webapp/css/logout.css b/idp-war/src/main/webapp/css/logout.css
index 26f1893..dcd10d2 100644
--- a/idp-war/src/main/webapp/css/logout.css
+++ b/idp-war/src/main/webapp/css/logout.css
@@ -1,12 +1,17 @@
 /* Success/Failure indicators for logout propagation. */
-
-.success {
-    background: url(../images/success-32x32.png) no-repeat left center;
+li.logout {
     line-height: 36px;
     padding-left: 36px;
 }
-.failure {
+li.logout.success {
+    background: url(../images/success-32x32.png) no-repeat left center;
+}
+li.logout.failure {
+    background: url(../images/failure-32x32.png) no-repeat left center;
+}
+li.logout.pending{
+
+}
+li.logout.na {
     background: url(../images/failure-32x32.png) no-repeat left center;
-    line-height: 36px;
-    padding-left: 36px;
 }

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the commits mailing list