[FIX] website_forum: restore the possibility to change accepted answer

The design for accepted answers changed a lot and with it, the
possibility to remove or change accepted answers was gone. This commit
tries to reintroduce the possibility without breaking the design and
by making an unique attribute addition to the XML (stable change).

task-2034497

closes odoo/odoo#35445

Signed-off-by: Quentin Smetz (qsm) <qsm@odoo.com>
This commit is contained in:
qsm-odoo
2019-08-05 11:38:49 +00:00
parent 7e1d98cbb9
commit 2c029a0cf6
3 changed files with 48 additions and 11 deletions
@@ -24,6 +24,9 @@ sAnimations.registry.websiteForum = sAnimations.Class.extend({
'click .vote_up:not(.karma_required), .vote_down:not(.karma_required)': '_onVotePostClick',
'click .o_js_validation_queue a[href*="/validate"]': '_onValidationQueueClick',
'click .accept_answer:not(.karma_required)': '_onAcceptAnswerClick',
'click .validate_answer [data-href]': '_onAcceptAnswerClick',
'mouseenter .validate_answer [data-href]': '_onRemoveValidAnswerMouse',
'mouseleave .validate_answer [data-href]': '_onRemoveValidAnswerMouse',
'click .favourite_question': '_onFavoriteQuestionClick',
'click .comment_delete': '_onDeleteCommentClick',
'click .notification_close': '_onCloseNotificationClick',
@@ -350,6 +353,8 @@ sAnimations.registry.websiteForum = sAnimations.Class.extend({
*/
_onAcceptAnswerClick: function (ev) {
ev.preventDefault();
var self = this;
var $acceptAnswerLinks = this.$('.accept_answer');
var $link = $(ev.currentTarget);
this._rpc({
route: $link.data('href'),
@@ -368,19 +373,41 @@ sAnimations.registry.websiteForum = sAnimations.Class.extend({
$link.parent().append($warning);
}
} else {
$acceptAnswerLinks.removeClass('oe_answer_true')
.addClass('oe_answer_false');
$link.toggleClass('oe_answer_true', !!data)
.toggleClass('oe_answer_false', !data);
// TODO in master, review the utility of this function...
self._onCheckAnswerStatus(ev);
// If we are removing an accepted answer, reload the page as the
// design is quite different with or without an accepted answer.
if ($link.closest('.validate_answer').length) {
window.location.reload();
}
}
});
this._onCheckAnswerStatus(ev);
},
/**
* @private
* @param {Event} ev
*/
_onRemoveValidAnswerMouse: function (ev) {
var hover = (ev.type === 'mouseenter');
$(ev.currentTarget).find('.fa')
.toggleClass('fa-times-circle text-danger', hover)
.toggleClass('fa-check-circle text-success', !hover);
},
/**
* @private
* @param {Event} ev
*/
_onCheckAnswerStatus: function (ev) {
var $link = $(ev.currentTarget);
$link.toggleClass('text-success', !$link.hasClass('oe_answer_true'));
_.each(this.$('.accept_answer'), function (link) {
var $link = $(link);
$link.toggleClass('text-success', $link.hasClass('oe_answer_true'));
});
},
/**
* @private
@@ -47,16 +47,23 @@ $bronze: #eea91e;
}
.validate_answer {
@include o-position-absolute(0,0,0,0);
@include o-position-absolute(0, auto, 0, 0);
width: 4px;
height: 100%;
.bg-success {
@include o-position-absolute(0,0,0,0);
height: 100%;
width: 4px;
z-index: 1; // On top of card content if an alert is displayed inside
> .bg-success {
@include o-position-absolute(0, 0, 0, 0);
}
span {
@include o-position-absolute(10px,0,0,-9px);
> span {
@include o-position-absolute(10px, 50%);
transform: translateX(50%);
font-size: 20px;
&[data-href] {
cursor: pointer;
}
i {
padding: 2px 3px;
border-radius: 100%;
+4 -1
View File
@@ -800,7 +800,10 @@
<div class="card-body">
<div t-if="answer.is_correct" class="validate_answer">
<div class="bg-success"></div>
<span title="Question has accepted answer" role="img" aria-label="Question has accepted answer"><i class="fa fa-check-circle text-success bg-white"/></span>
<span title="Question has accepted answer" role="img" aria-label="Question has accepted answer"
t-attf-data-href="/forum/#{slug(question.forum_id)}/post/#{slug(answer)}/toggle_correct">
<i class="fa fa-check-circle text-success bg-white"/>
</span>
</div>
<div class="row">
<div class="col-1">