Merge branch 'riyad-update-votes-when-adding-notes'

This commit is contained in:
Dmitriy Zaporozhets 2012-09-18 09:18:07 +03:00
commit 560b1ac5f3
7 changed files with 77 additions and 7 deletions

View file

@ -21,15 +21,18 @@ var NoteList = {
this.getContent(); this.getContent();
$("#notes-list, #new-notes-list").on("ajax:success", ".delete-note", function() { $("#notes-list, #new-notes-list").on("ajax:success", ".delete-note", function() {
$(this).closest('li').fadeOut(); $(this).closest('li').fadeOut(function() {
$(this).remove();
NoteList.updateVotes();
});
}); });
$(".note-form-holder").on("ajax:before", function(){ $(".note-form-holder").on("ajax:before", function(){
$(".submit_note").disable() $(".submit_note").disable();
}) })
$(".note-form-holder").on("ajax:complete", function(){ $(".note-form-holder").on("ajax:complete", function(){
$(".submit_note").enable() $(".submit_note").enable();
}) })
disableButtonIfEmptyField(".note-text", ".submit_note"); disableButtonIfEmptyField(".note-text", ".submit_note");
@ -159,6 +162,8 @@ var NoteList = {
if (!this.reversed) { if (!this.reversed) {
this.initRefreshNew(); this.initRefreshNew();
} }
// make sure we are up to date
this.updateVotes();
}, },
@ -198,6 +203,7 @@ var NoteList = {
replaceNewNotes: replaceNewNotes:
function(html) { function(html) {
$("#new-notes-list").html(html); $("#new-notes-list").html(html);
this.updateVotes();
}, },
/** /**
@ -210,6 +216,37 @@ var NoteList = {
} else { } else {
$("#new-notes-list").append(html); $("#new-notes-list").append(html);
} }
this.updateVotes();
},
/**
* Recalculates the votes and updates them (if they are displayed at all).
*
* Assumes all relevant notes are displayed (i.e. there are no more notes to
* load via getMore()).
* Might produce inaccurate results when not all notes have been loaded and a
* recalculation is triggered (e.g. when deleting a note).
*/
updateVotes:
function() {
var votes = $("#votes .votes");
var notes = $("#notes-list, #new-notes-list").find(".note.vote");
// only update if there is a vote display
if (votes.size()) {
var upvotes = notes.filter(".upvote").size();
var downvotes = notes.filter(".downvote").size();
var votesCount = upvotes + downvotes;
var upvotesPercent = votesCount ? (100.0 / votesCount * upvotes) : 0;
var downvotesPercent = votesCount ? (100.0 - upvotesPercent) : 0;
// change vote bar lengths
votes.find(".bar-success").css("width", upvotesPercent+"%");
votes.find(".bar-danger").css("width", downvotesPercent+"%");
// replace vote numbers
votes.find(".upvotes").text(votes.find(".upvotes").text().replace(/\d+/, upvotes));
votes.find(".downvotes").text(votes.find(".downvotes").text().replace(/\d+/, downvotes));
}
} }
}; };

View file

@ -158,6 +158,18 @@ span.update-author {
padding: 6px; padding: 6px;
} }
} }
&.label-success {
background-color: #8D8;
color: #333;
text-shadow: 0 1px 1px white;
}
&.label-error {
background-color: #D88;
color: #333;
text-shadow: 0 1px 1px white;
}
} }
.event_label { .event_label {

View file

@ -71,6 +71,11 @@
border-top: 1px solid #eee; border-top: 1px solid #eee;
} }
/* mark vote notes */
.voting_notes .note {
padding: 8px 0;
}
.notes-status { .notes-status {
margin: 18px; margin: 18px;
} }

View file

@ -6,4 +6,12 @@ module NotesHelper
def loading_new_notes? def loading_new_notes?
params[:loading_new].present? params[:loading_new].present?
end end
def note_vote_class(note)
if note.upvote?
"vote upvote"
elsif note.downvote?
"vote downvote"
end
end
end end

View file

@ -61,4 +61,4 @@
= markdown @issue.description = markdown @issue.description
.issue_notes#notes= render "notes/notes_with_form", tid: @issue.id, tt: "issue" .issue_notes.voting_notes#notes= render "notes/notes_with_form", tid: @issue.id, tt: "issue"

View file

@ -15,7 +15,7 @@
%i.icon-list-alt %i.icon-list-alt
Diff Diff
.merge_request_notes#notes{ class: (controller.action_name == 'show') ? "" : "hide" } .merge_request_notes.voting_notes#notes{ class: (controller.action_name == 'show') ? "" : "hide" }
= render("notes/notes_with_form", tid: @merge_request.id, tt: "merge_request") = render("notes/notes_with_form", tid: @merge_request.id, tt: "merge_request")
.merge-request-diffs .merge-request-diffs
= render "merge_requests/show/diffs" if @diffs = render "merge_requests/show/diffs" if @diffs

View file

@ -1,4 +1,4 @@
%li{id: dom_id(note), class: "note"} %li{id: dom_id(note), class: "note #{note_vote_class(note)}"}
= image_tag gravatar_icon(note.author.email), class: "avatar s32" = image_tag gravatar_icon(note.author.email), class: "avatar s32"
%div.note-author %div.note-author
%strong= note.author_name %strong= note.author_name
@ -6,8 +6,16 @@
%cite.cgray %cite.cgray
= time_ago_in_words(note.updated_at) = time_ago_in_words(note.updated_at)
ago ago
- if note.upvote?
%span.label.label-success
%i.icon-thumbs-up
\+1
- if note.downvote?
%span.label.label-error
%i.icon-thumbs-down
\-1
- if(note.author_id == current_user.id) || can?(current_user, :admin_note, @project) - if(note.author_id == current_user.id) || can?(current_user, :admin_note, @project)
= link_to [@project, note], confirm: 'Are you sure?', method: :delete, remote: true, class: "cred delete-note btn very_small" do = link_to [@project, note], confirm: 'Are you sure?', method: :delete, remote: true, class: "cred delete-note btn very_small" do
%i.icon-trash %i.icon-trash
Remove Remove