##// END OF EJS Templates
Subscribe/unsubscribe thread by ajax
neko259 -
r2089:676b3885 default
parent child Browse files
Show More
@@ -133,6 +133,21 b' function showQuoteButton() {'
133 }
133 }
134 }
134 }
135
135
136 function attachAjaxToForms() {
137 var forms = $('form.ajax-form');
138 forms.each(function() {
139 var form = $(this);
140 var options = {
141 success: function(response, statusText, xhr, f) {
142 afterForm(form, $.parseJSON(response));
143 },
144 url: form.attr('action') + '?ajax'
145 };
146
147 form.ajaxForm(options);
148 });
149 }
150
136 $(document).ready(function() {
151 $(document).ready(function() {
137 $('body').on('mouseup', function() {
152 $('body').on('mouseup', function() {
138 showQuoteButton();
153 showQuoteButton();
@@ -140,4 +155,6 b' function showQuoteButton() {'
140 $("#quote-button").click(function() {
155 $("#quote-button").click(function() {
141 addQuickQuote();
156 addQuickQuote();
142 })
157 })
158
159 attachAjaxToForms();
143 });
160 });
@@ -13,18 +13,39 b''
13
13
14 <div class="tag_info">
14 <div class="tag_info">
15 <h2>
15 <h2>
16 <form action="{% url 'thread' opening_post.id %}" method="post" class="post-button-form">
16 <form action="{% url 'thread' opening_post.id %}" method="post" class="post-button-form ajax-form">
17 {% csrf_token %}
17 {% csrf_token %}
18 {% if is_favorite %}
18 {% if is_favorite %}
19 <button id="thread-fav-button" name="method" value="unsubscribe" class="fav">β˜…</button>
19 <input type="hidden" name="method" value="unsubscribe" />
20 <button id="thread-fav-button" class="fav">β˜…</button>
20 {% else %}
21 {% else %}
21 <button id="thread-fav-button" name="method" value="subscribe" class="not_fav">β˜…</button>
22 <input type="hidden" name="method" value="subscribe" />
23 <button id="thread-fav-button" class="not_fav">β˜…</button>
22 {% endif %}
24 {% endif %}
23 </form>
25 </form>
24 {{ opening_post.get_title_or_text }}
26 {{ opening_post.get_title_or_text }}
25 </h2>
27 </h2>
26 </div>
28 </div>
27
29
30 <script>
31 function afterForm(form, data) {
32 if (data.status == 'success') {
33 var button = form.children('button');
34 var newMethod;
35 if (data.fav == 'true') {
36 button.addClass('fav');
37 button.removeClass('not_fav');
38 newMethod = 'unsubscribe';
39 } else {
40 button.addClass('not_fav');
41 button.removeClass('fav');
42 newMethod = 'subscribe';
43 }
44 form.children('input[name=method]').attr('value', newMethod);
45 }
46 }
47 </script>
48
28 {% if bumpable and thread.has_post_limit %}
49 {% if bumpable and thread.has_post_limit %}
29 <div class="bar-bg">
50 <div class="bar-bg">
30 <div class="bar-value" style="width:{{ bumplimit_progress }}%" id="bumplimit_progress">
51 <div class="bar-value" style="width:{{ bumplimit_progress }}%" id="bumplimit_progress">
@@ -1,5 +1,6 b''
1 import json
1 from django.core.exceptions import ObjectDoesNotExist
2 from django.core.exceptions import ObjectDoesNotExist
2 from django.http import Http404
3 from django.http import Http404, HttpResponse
3 from django.shortcuts import get_object_or_404, render, redirect
4 from django.shortcuts import get_object_or_404, render, redirect
4 from django.urls import reverse
5 from django.urls import reverse
5 from django.utils.decorators import method_decorator
6 from django.utils.decorators import method_decorator
@@ -74,9 +75,13 b' class ThreadView(BaseBoardView, FormMixi'
74 raise Http404
75 raise Http404
75
76
76 if PARAMETER_METHOD in request.POST:
77 if PARAMETER_METHOD in request.POST:
77 self.dispatch_method(request, opening_post)
78 result = self.dispatch_method(request, opening_post)
78
79
79 return redirect('thread', post_id) # FIXME Different for different modes
80 ajax = 'ajax' in request.GET
81 if ajax:
82 return HttpResponse(content=json.dumps(result))
83 else:
84 return redirect('thread', post_id) # FIXME Different for different modes
80
85
81 if not opening_post.get_thread().is_archived():
86 if not opening_post.get_thread().is_archived():
82 form = PostForm(request.POST, request.FILES,
87 form = PostForm(request.POST, request.FILES,
@@ -112,9 +117,19 b' class ThreadView(BaseBoardView, FormMixi'
112 settings_manager = get_settings_manager(request)
117 settings_manager = get_settings_manager(request)
113 settings_manager.add_or_read_fav_thread(opening_post)
118 settings_manager.add_or_read_fav_thread(opening_post)
114
119
120 return {
121 'status': 'success',
122 'fav': 'true'
123 }
124
115 def unsubscribe(self, request, opening_post):
125 def unsubscribe(self, request, opening_post):
116 settings_manager = get_settings_manager(request)
126 settings_manager = get_settings_manager(request)
117 settings_manager.del_fav_thread(opening_post)
127 settings_manager.del_fav_thread(opening_post)
118
128
129 return {
130 'status': 'success',
131 'fav': 'false'
132 }
133
119 def get_rss_url(self, opening_id):
134 def get_rss_url(self, opening_id):
120 return reverse('thread', kwargs={'post_id': opening_id}) + 'rss/'
135 return reverse('thread', kwargs={'post_id': opening_id}) + 'rss/'
General Comments 0
You need to be logged in to leave comments. Login now