summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRiyad Preukschas <riyad@informatik.uni-bremen.de>2012-09-15 11:55:17 +0200
committerRiyad Preukschas <riyad@informatik.uni-bremen.de>2012-09-15 11:55:17 +0200
commit6aebb76b5d05bf7668a8f389a00648fdb405af7d (patch)
tree1d75f224f53f0e92c9d7749b8197429d1c55ce53
parentb8113334a86639b87d5f89cc78e2279a8ae4e38a (diff)
downloadgitlab-ce-6aebb76b5d05bf7668a8f389a00648fdb405af7d.tar.gz
Update votes when creating or refreshing notes
-rw-r--r--app/assets/javascripts/notes.js43
1 files changed, 40 insertions, 3 deletions
diff --git a/app/assets/javascripts/notes.js b/app/assets/javascripts/notes.js
index 81bb1d6d1b0..7b59cc77e7f 100644
--- a/app/assets/javascripts/notes.js
+++ b/app/assets/javascripts/notes.js
@@ -21,15 +21,18 @@ var NoteList = {
this.getContent();
$("#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(){
- $(".submit_note").disable()
+ $(".submit_note").disable();
})
$(".note-form-holder").on("ajax:complete", function(){
- $(".submit_note").enable()
+ $(".submit_note").enable();
})
disableButtonIfEmptyField(".note-text", ".submit_note");
@@ -154,6 +157,8 @@ var NoteList = {
if (!this.reversed) {
this.initRefreshNew();
}
+ // make sure we are up to date
+ this.updateVotes();
},
@@ -193,6 +198,7 @@ var NoteList = {
replaceNewNotes:
function(html) {
$("#new-notes-list").html(html);
+ this.updateVotes();
},
/**
@@ -205,6 +211,37 @@ var NoteList = {
} else {
$("#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));
+ }
}
};