summaryrefslogtreecommitdiffstats
path: root/askbot/media/js
diff options
context:
space:
mode:
authorEvgeny Fadeev <evgeny.fadeev@gmail.com>2013-04-16 05:21:21 -0400
committerEvgeny Fadeev <evgeny.fadeev@gmail.com>2013-04-16 05:21:31 -0400
commitd850e2ab84144240db8eb122dc04679280c599d8 (patch)
tree419499f8aff5b0500ccaa5a55d79e0e29c83cc1c /askbot/media/js
parentc913ec44fb92711712df93c3ca1f2c9d8aab628c (diff)
downloadaskbot-d850e2ab84144240db8eb122dc04679280c599d8.tar.gz
askbot-d850e2ab84144240db8eb122dc04679280c599d8.tar.bz2
askbot-d850e2ab84144240db8eb122dc04679280c599d8.zip
created a new js voting control for posts
Diffstat (limited to 'askbot/media/js')
-rw-r--r--askbot/media/js/post.js130
1 files changed, 129 insertions, 1 deletions
diff --git a/askbot/media/js/post.js b/askbot/media/js/post.js
index 755ce158..fdb21290 100644
--- a/askbot/media/js/post.js
+++ b/askbot/media/js/post.js
@@ -1219,7 +1219,7 @@ var questionRetagger = function(){
}
},
error: function(xhr, textStatus, errorThrown) {
- showMessage(tagsDiv, 'sorry, something is not right here');
+ showMessage(tagsDiv, gettext('sorry, something is not right here'));
cancelRetag();
}
});
@@ -1343,6 +1343,134 @@ var questionRetagger = function(){
};
}();
+/**
+ * @constructor
+ * Controls vor voting for a post
+ */
+var VoteControls = function() {
+ WrappedElement.call(this);
+ this._postAuthorId = undefined;
+ this._postId = undefined;
+};
+inherits(VoteControls, WrappedElement);
+
+VoteControls.prototype.setPostId = function(postId) {
+ this._postId = postId;
+};
+
+VoteControls.prototype.getPostId = function() {
+ return this._postId;
+};
+
+VoteControls.prototype.setPostAuthorId = function(userId) {
+ this._postAuthorId = userId;
+};
+
+VoteControls.prototype.setSlug = function(slug) {
+ this._slug = slug;
+};
+
+VoteControls.prototype.setPostType = function(postType) {
+ this._postType = postType;
+};
+
+VoteControls.prototype.getPostType = function() {
+ return this._postType;
+};
+
+VoteControls.prototype.clearVotes = function() {
+ this._upvoteButton.removeClass('on');
+ this._downvoteButton.removeClass('on');
+};
+
+VoteControls.prototype.toggleButton = function(button) {
+ if (button.hasClass('on')) {
+ button.removeClass('on');
+ } else {
+ button.addClass('on');
+ }
+};
+
+VoteControls.prototype.toggleVote = function(voteType) {
+ if (voteType === 'upvote') {
+ this.toggleButton(this._upvoteButton);
+ } else {
+ this.toggleButton(this._downvoteButton);
+ }
+};
+
+VoteControls.prototype.setVoteCount = function(count) {
+ this._voteCount.html(count);
+};
+
+VoteControls.prototype.updateDisplay = function(voteType, data) {
+ if (data['status'] == '1'){
+ this.clearVotes();
+ } else {
+ this.toggleVote(voteType);
+ }
+ this.setVoteCount(data['count']);
+ if (data['message'] && data['message'].length > 0){
+ showMessage(this._element, data.message);
+ }
+};
+
+VoteControls.prototype.getAnonymousMessage = function(message) {
+ var pleaseLogin = " <a href='" + askbot['urls']['user_signin'] + ">"
+ + gettext('please login') + "</a>";
+ message += pleaseLogin;
+ message = message.replace("{{QuestionID}}", me._postId);
+ return message.replace('{{questionSlug}}', me._slug);
+};
+
+VoteControls.prototype.getVoteHandler = function(voteType) {
+ var me = this;
+ return function() {
+ if (askbot['data']['userIsAuthenticated'] === false) {
+ var message = me.getAnonymousMessage(gettext('anonymous users cannot vote'));
+ showMessage(me.getElement(), message);
+ } else {
+ //this function submits votes
+ var voteMap = {
+ 'question': { 'upvote': 1, 'downvote': 2 },
+ 'answer': { 'upvote': 5, 'downvote': 6 }
+ };
+ var legacyVoteType = voteMap[me.getPostType()][voteType];
+ $.ajax({
+ type: "POST",
+ cache: false,
+ dataType: "json",
+ url: askbot['urls']['vote_url'],
+ data: {
+ "type": legacyVoteType,
+ "postId": me.getPostId()
+ },
+ error: function() {
+ showMessage(me.getElement(), gettext('sorry, something is not right here'));
+ },
+ success: function(data) {
+ if (data['success']) {
+ me.updateDisplay(voteType, data);
+ } else {
+ showMessage(me.getElement(), data['message']);
+ }
+ }
+ });
+ }
+ };
+};
+
+VoteControls.prototype.decorate = function(element) {
+ this._element = element;
+ var upvoteButton = element.find('.upvote');
+ this._upvoteButton = upvoteButton;
+ setupButtonEventHandlers(upvoteButton, this.getVoteHandler('upvote'));
+ var downvoteButton = element.find('.downvote');
+ this._downvoteButton = downvoteButton;
+ setupButtonEventHandlers(downvoteButton, this.getVoteHandler('downvote'));
+ this._voteCount = element.find('.vote-number');
+};
+
var DeletePostLink = function(){
SimpleControl.call(this);
this._post_id = null;