Only show Sone context menus when hovering over the avatar.
[Sone.git] / src / main / resources / static / javascript / sone.js
index 29c5420..bfb925b 100644 (file)
@@ -291,7 +291,7 @@ function getSoneElement(element) {
  * @return The Sone ID
  */
 function getMenuSone(element) {
-       return $(element).closest(".sone-menu").find(".sone-id").text();
+       return $(element).closest(".sone-menu").find(".sone-menu-id").text();
 }
 
 /**
@@ -858,14 +858,23 @@ function ajaxifyPost(postElement) {
 
        /* show Sone menu when hovering over the avatar. */
        $(postElement).find(".post-avatar").mouseover(function() {
-               $(".sone-menu:visible").fadeOut();
-               $(".sone-post-menu", postElement).mouseleave(function() {
-                       $(this).fadeOut();
-               }).fadeIn();
-               return false;
+               if (typeof currentSoneMenuTimeoutHandler != undefined) {
+                       clearTimeout(currentSoneMenuTimeoutHandler);
+               }
+               currentSoneMenuId = getPostId(this);
+               currentSoneMenuTimeoutHandler = setTimeout(function() {
+                       $(".sone-menu:visible").fadeOut();
+                       $(".sone-post-menu", postElement).mouseleave(function() {
+                               $(this).fadeOut();
+                       }).fadeIn();
+               }, 1000);
+       }).mouseleave(function() {
+               if (currentSoneMenuId = getPostId(this)) {
+                       clearTimeout(currentSoneMenuTimeoutHandler);
+               }
        });
        (function(postElement) {
-               var soneId = $(".sone-id", postElement).text();
+               var soneId = $(".sone-menu-id", postElement).text();
                $(".sone-post-menu .follow", postElement).click(function() {
                        var followElement = this;
                        ajaxGet("followSone.ajax", { "sone": soneId, "formPassword": getFormPassword() }, function() {
@@ -988,14 +997,23 @@ function ajaxifyReply(replyElement) {
 
        /* show Sone menu when hovering over the avatar. */
        $(replyElement).find(".reply-avatar").mouseover(function() {
-               $(".sone-menu:visible").fadeOut();
-               $(".sone-reply-menu", replyElement).mouseleave(function() {
-                       $(this).fadeOut();
-               }).fadeIn();
-               return false;
+               if (typeof currentSoneMenuTimeoutHandler != undefined) {
+                       clearTimeout(currentSoneMenuTimeoutHandler);
+               }
+               currentSoneMenuId = getPostId(this) + "-" + getReplyId(this);
+               currentSoneMenuTimeoutHandler = setTimeout(function() {
+                       $(".sone-menu:visible").fadeOut();
+                       $(".sone-reply-menu", replyElement).mouseleave(function() {
+                               $(this).fadeOut();
+                       }).fadeIn();
+               }, 1000);
+       }).mouseleave(function() {
+               if (currentSoneMenuId = getPostId(this) + "-" + getReplyId(this)) {
+                       clearTimeout(currentSoneMenuTimeoutHandler);
+               }
        });
        (function(replyElement) {
-               var soneId = $(".sone-id", replyElement).text();
+               var soneId = $(".sone-menu-id", replyElement).text();
                $(".sone-menu .follow", replyElement).click(function() {
                        var followElement = this;
                        ajaxGet("followSone.ajax", { "sone": soneId, "formPassword": getFormPassword() }, function() {
@@ -1141,7 +1159,7 @@ function checkForRemovedPosts(oldNotification, newNotification) {
  *            The new notification element
  */
 function checkForRemovedReplies(oldNotification, newNotification) {
-       if (getNotificationId(oldNotification) != "new-replies-notification") {
+       if (getNotificationId(oldNotification) != "new-reply-notification") {
                return;
        }
        oldIds = getElementIds(oldNotification, ".reply-id");
@@ -1185,7 +1203,7 @@ function getStatus() {
                                                        postId = $(this).text();
                                                        markPostAsKnown(getPost(postId), true);
                                                });
-                                       } else if (notificationId == "new-replies-notification") {
+                                       } else if (notificationId == "new-reply-notification") {
                                                $(".reply-id", this).each(function(index, element) {
                                                        replyId = $(this).text();
                                                        markReplyAsKnown(getReply(replyId), true);
@@ -1828,6 +1846,12 @@ var online = true;
 var initiallyLoggedIn = $("#sone #loggedIn").text() == "true";
 var notLoggedIn = !initiallyLoggedIn;
 
+/** ID of the next-to-show Sone context menu. */
+var currentSoneMenuId;
+
+/** Timeout handler for the next-to-show Sone context menu. */
+var currentSoneMenuTimeoutHandler;
+
 $(document).ready(function() {
 
        /* this initializes the status update input field. */