From 35fe6bda6895bd7aad716197b9c58e8fe0f6aaa6 Mon Sep 17 00:00:00 2001 From: Selman Ercan <ercan.s.selman@gmail.com> Date: Sun, 1 Mar 2015 09:04:58 +0100 Subject: [PATCH] Issue #5631. Made top and left coordinates of hovercards match those of their parents. Added line to changelog for bug fix of issue #5631. Processing the 'mouseleave' event only if we've left both the parent and the hovercard. Fixed indentation. Replaced issue id with pull request id and fixed indentation. --- Changelog.md | 3 ++- .../javascripts/app/views/hovercard_view.js | 17 ++++++++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/Changelog.md b/Changelog.md index 78a9b687d8..69d3484001 100644 --- a/Changelog.md +++ b/Changelog.md @@ -138,6 +138,7 @@ diaspora.yml file**. The existing settings from 0.4.x and before will not work a * Disable email notifications for closed user accounts [#5640](https://github.com/diaspora/diaspora/pull/5640) * Total user statistic no longer includes closed accounts [#5041](https://github.com/diaspora/diaspora/pull/5041) * Don't add a space when rendering a mention [#5711](https://github.com/diaspora/diaspora/pull/5711) +* Fix flickering hovercards [#5714](https://github.com/diaspora/diaspora/pull/5714) ## Features * Don't pull jQuery from a CDN by default [#5105](https://github.com/diaspora/diaspora/pull/5105) @@ -1202,7 +1203,7 @@ The new configuration system allows all possible settings to be overriden by env ### Environment variable changes: -#### deprectated +#### deprecated * REDISTOGO_URL in favour of REDIS_URL or ENVIRONMENT_REDIS diff --git a/app/assets/javascripts/app/views/hovercard_view.js b/app/assets/javascripts/app/views/hovercard_view.js index 92a89529ae..09242bb2ff 100644 --- a/app/assets/javascripts/app/views/hovercard_view.js +++ b/app/assets/javascripts/app/views/hovercard_view.js @@ -16,7 +16,7 @@ app.views.Hovercard = app.views.Base.extend({ .on('mouseleave', '.hovercardable', _.bind(this._mouseleaveHandler, this)); this.show_me = false; - this.parent = null; // current 'hovercarable' element that caused HC to appear + this.parent = null; // current 'hovercardable' element that caused HC to appear // cache some element references this.avatar = this.$('.avatar'); @@ -61,7 +61,10 @@ app.views.Hovercard = app.views.Base.extend({ _mouseleaveHandler: function(event) { if( this.active === false || - $.contains(this.el, event.relatedTarget) ) { return false; } + $.contains(this.el, event.relatedTarget) ) { return false; } + + if( this.mouseIsOverElement(this.parent, event) || + this.mouseIsOverElement(this.$el, event) ) { return false; } this.show_me = false; if( this.$el.is(':visible') ) { @@ -137,6 +140,14 @@ app.views.Hovercard = app.views.Base.extend({ top: p_pos.top + p_height - 25, left: p_pos.left }); - } + }, + + mouseIsOverElement: function(element, event) { + var el_pos = element.offset(); + return event.pageX >= el_pos.left && + event.pageX <= el_pos.left + element.width() && + event.pageY >= el_pos.top && + event.pageY <= el_pos.top + element.height(); + }, }); // @license-end -- GitLab