From f6c885394d98d0f917d2571d119d128a59288ad6 Mon Sep 17 00:00:00 2001 From: flaburgan <flaburgan@geexxx.fr> Date: Sat, 30 Oct 2021 11:31:51 +0200 Subject: [PATCH] Refactor hovercards, fixes #8315 closes #8316 --- Changelog.md | 1 + .../javascripts/app/views/hovercard_view.js | 27 +++++-------------- app/assets/templates/hovercard_tpl.jst.hbs | 14 ++++++---- .../app/views/hovercard_view_spec.js | 21 ++++++++++++--- 4 files changed, 35 insertions(+), 28 deletions(-) diff --git a/Changelog.md b/Changelog.md index 0c7f45d8c5..a45c99f086 100644 --- a/Changelog.md +++ b/Changelog.md @@ -10,6 +10,7 @@ ## Bug fixes * Ensure the log folder exists [#8287](https://github.com/diaspora/diaspora/pull/8287) * Limit name length in header [#8313] (https://github.com/diaspora/diaspora/pull/8313) +* Fix fallback avatar in hovercards [#8316](https://github.com/diaspora/diaspora/pull/8316) ## Features * Add tags to tumblr posts [#8244](https://github.com/diaspora/diaspora/pull/8244) diff --git a/app/assets/javascripts/app/views/hovercard_view.js b/app/assets/javascripts/app/views/hovercard_view.js index 9fe895bfe2..dfba3fdff3 100644 --- a/app/assets/javascripts/app/views/hovercard_view.js +++ b/app/assets/javascripts/app/views/hovercard_view.js @@ -19,10 +19,15 @@ app.views.Hovercard = app.views.Base.extend({ this.showMe = false; this.parent = null; // current 'hovercardable' element that caused HC to appear - this.active = true; }, + presenter: function() { + return _.extend({}, this.defaultPresenter(), { + person: this.person + }); + }, + postRenderTemplate: function() { this.$el.appendTo($("body")); @@ -106,10 +111,9 @@ app.views.Hovercard = app.views.Base.extend({ if (app.currentUser.authenticated()) { self.aspectMembershipDropdown = new app.views.AspectMembership({person: new app.models.Person(person)}); } - + self.person = person; self.render(); - self._populateHovercardWith(person); if( !self.showMe ) { // mouse has left element return; @@ -118,23 +122,6 @@ app.views.Hovercard = app.views.Base.extend({ }); }, - _populateHovercardWith: function(person) { - this.avatarLink.attr("href", this.href()); - this.personLink.attr("href", this.href()); - this.personLink.text(person.name); - this.personID.text(person.diaspora_id); - - if (person.profile) { - this.avatar.attr("src", person.profile.avatar); - - // set hashtags - this.hashtags.empty(); - this.hashtags.html($(_.map(person.profile.tags, function(tag) { - return $("<a></a>", {href: Routes.tag(tag)}).text("#" + tag)[0]; - }))); - } - }, - _positionHovercard: function() { var p_pos = this.parent.offset(); var p_height = this.parent.height(); diff --git a/app/assets/templates/hovercard_tpl.jst.hbs b/app/assets/templates/hovercard_tpl.jst.hbs index c95ef3e948..31daa09197 100644 --- a/app/assets/templates/hovercard_tpl.jst.hbs +++ b/app/assets/templates/hovercard_tpl.jst.hbs @@ -1,15 +1,19 @@ +{{#with person}} <div id="hovercard"> - <a class='person_avatar'> - <img class="avatar"> + <a class="person_avatar" href="{{urlTo 'person' guid}}"> + <img class="avatar" src="{{profile.avatar}}" /> </a> <h4> - <a class="person"></a> + <a class="person" href="{{urlTo 'person' guid}}">{{name}}</a> </h4> - <div class="handle"></div> + <div class="handle">{{diaspora_id}}</div> <div id="hovercard_dropdown_container"></div> <div class="card-footer"> <div class="footer-container"> - <div class="hashtags"></div> + <div class="hashtags"> + {{fmtTags profile.tags}} + </div> </div> </div> </div> +{{/with}} diff --git a/spec/javascripts/app/views/hovercard_view_spec.js b/spec/javascripts/app/views/hovercard_view_spec.js index c307ebceee..f3d661ce49 100644 --- a/spec/javascripts/app/views/hovercard_view_spec.js +++ b/spec/javascripts/app/views/hovercard_view_spec.js @@ -16,7 +16,11 @@ describe("app.views.Hovercard", function() { this.view._populateHovercard(); jasmine.Ajax.requests.mostRecent().respondWith({ status: 200, - responseText: JSON.stringify({id: 1337}) + responseText: JSON.stringify({ + id: 1337, + guid: "ba64fce01b04013aa8db34c93d7886ce", + name: "Edward Snowden" + }) }); expect(this.view.aspectMembershipDropdown).toEqual(undefined); }); @@ -56,7 +60,11 @@ describe("app.views.Hovercard", function() { this.view._populateHovercard(); jasmine.Ajax.requests.mostRecent().respondWith({ status: 200, - responseText: JSON.stringify({id: 1337}) + responseText: JSON.stringify({ + id: 1337, + guid: "ba64fce01b04013aa8db34c93d7886ce", + name: "Edward Snowden" + }) }); expect(this.view.aspectMembershipDropdown).not.toEqual(undefined); }); @@ -65,7 +73,14 @@ describe("app.views.Hovercard", function() { this.view._populateHovercard(); jasmine.Ajax.requests.mostRecent().respondWith({ status: 200, - responseText: JSON.stringify({id: 1337, profile: {tags: ["first", "second"]}}) + responseText: JSON.stringify({ + id: 1337, + guid: "ba64fce01b04013aa8db34c93d7886ce", + name: "Edward Snowden", + profile: { + tags: ["first", "second"] + } + }) }); var first = this.view.hashtags.find("a:contains('#first')"); -- GitLab