diff --git a/fedireads/incoming.py b/fedireads/incoming.py index 9c2866d1..7c2808d7 100644 --- a/fedireads/incoming.py +++ b/fedireads/incoming.py @@ -4,14 +4,12 @@ from Crypto.PublicKey import RSA from Crypto.Signature import pkcs1_15 from Crypto.Hash import SHA256 from django.http import HttpResponse, HttpResponseBadRequest, \ - HttpResponseNotFound, JsonResponse + HttpResponseNotFound from django.views.decorators.csrf import csrf_exempt import django.db.utils -from django.db.models import Q import json import requests -from fedireads import activitypub from fedireads import models from fedireads import outgoing from fedireads.status import create_review_from_activity, \ @@ -191,7 +189,10 @@ def handle_incoming_follow_reject(activity): rejecter = get_or_create_remote_user(activity['actor']) try: - request = models.UserFollowRequest.objects.get(user_subject=requester, user_object=rejecter) + request = models.UserFollowRequest.objects.get( + user_subject=requester, + user_object=rejecter + ) request.delete() except models.UserFollowRequest.DoesNotExist: pass diff --git a/fedireads/static/format.css b/fedireads/static/format.css index 562421b1..cd7ebcaf 100644 --- a/fedireads/static/format.css +++ b/fedireads/static/format.css @@ -498,6 +498,10 @@ blockquote .icon-quote-open { height: 4em; } +.hidden { + display: none; +} + table { border-collapse: collapse; margin: 1em; diff --git a/fedireads/static/js/shared.js b/fedireads/static/js/shared.js index da4a9c0c..1fad60e5 100644 --- a/fedireads/static/js/shared.js +++ b/fedireads/static/js/shared.js @@ -6,10 +6,14 @@ function hide_element(element) { function interact(e) { e.preventDefault(); ajaxPost(e.target); - if (e.target.className.includes('active')) { - e.target.className = ''; - } else { - e.target.className += ' active'; + var identifier = e.target.getAttribute('data-id'); + var elements = document.getElementsByClassName(identifier); + for (var i = 0; i < elements.length; i++) { + if (elements[i].className.includes('hidden')) { + elements[i].className = elements[i].className.replace('hidden', ''); + } else { + elements[i].className += ' hidden'; + } } return true; } @@ -21,26 +25,9 @@ function comment(e) { return true; } -function ajaxPost(form, callback) { - // jeez. https://stackoverflow.com/questions/33021995 - var url = form.action; - var xhr = new XMLHttpRequest(); - - var params = [].filter.call(form.elements, function(el) { - return typeof(el.checked) === 'undefined' || el.checked; - }) - .filter(function(el) { return !!el.name; }) - .filter(function(el) { return el.disabled; }) - .map(function(el) { - return encodeURIComponent(el.name) + '=' + encodeURIComponent(el.value); - }).join('&'); - - xhr.open('POST', url); - xhr.setRequestHeader('Content-type', 'application/x-form-urlencoded'); - xhr.setRequestHeader('X-CSRFToken', csrf_token); - - if (callback) { - xhr.onload = callback.bind(xhr); - } - xhr.send(params); +function ajaxPost(form) { + fetch(form.action, { + method : "POST", + body: new FormData(form) + }); } diff --git a/fedireads/static/js/unfetch.js b/fedireads/static/js/unfetch.js new file mode 100644 index 00000000..c930d8dc --- /dev/null +++ b/fedireads/static/js/unfetch.js @@ -0,0 +1 @@ +module.exports=function(e,n){return n=n||{},new Promise(function(t,r){var s=new XMLHttpRequest,o=[],u=[],i={},a=function(){return{ok:2==(s.status/100|0),statusText:s.statusText,status:s.status,url:s.responseURL,text:function(){return Promise.resolve(s.responseText)},json:function(){return Promise.resolve(JSON.parse(s.responseText))},blob:function(){return Promise.resolve(new Blob([s.response]))},clone:a,headers:{keys:function(){return o},entries:function(){return u},get:function(e){return i[e.toLowerCase()]},has:function(e){return e.toLowerCase()in i}}}};for(var l in s.open(n.method||"get",e,!0),s.onload=function(){s.getAllResponseHeaders().replace(/^(.*?):[^\S\n]*([\s\S]*?)$/gm,function(e,n,t){o.push(n=n.toLowerCase()),u.push([n,t]),i[n]=i[n]?i[n]+","+t:t}),t(a())},s.onerror=r,s.withCredentials="include"==n.credentials,n.headers)s.setRequestHeader(l,n.headers[l]);s.send(n.body||null)})}; diff --git a/fedireads/templates/layout.html b/fedireads/templates/layout.html index e76cc2d4..7ce1578d 100644 --- a/fedireads/templates/layout.html +++ b/fedireads/templates/layout.html @@ -72,6 +72,7 @@ + diff --git a/fedireads/templates/snippets/follow_button.html b/fedireads/templates/snippets/follow_button.html index 200a1732..109a4b20 100644 --- a/fedireads/templates/snippets/follow_button.html +++ b/fedireads/templates/snippets/follow_button.html @@ -1,10 +1,13 @@ {% if request.user == user %} {% elif request.user in user.follower_requests.all %} +
Follow request already sent.
-{% elif not request.user in user.followers.all %} -
+ +{% else %} + + {% csrf_token %} {% if user.manually_approves_followers %} @@ -13,8 +16,7 @@ Follow request already sent. {% endif %}
-{% else %} -
+ {% csrf_token %} diff --git a/fedireads/templates/snippets/interaction.html b/fedireads/templates/snippets/interaction.html index c411334a..a755311a 100644 --- a/fedireads/templates/snippets/interaction.html +++ b/fedireads/templates/snippets/interaction.html @@ -12,7 +12,7 @@
-
+ {% csrf_token %}
+
+ {% csrf_token %} + +
-
+ {% csrf_token %}
+
+ {% csrf_token %} + +
diff --git a/fedireads/templates/user_results.html b/fedireads/templates/user_results.html index 1f0af835..5c48d850 100644 --- a/fedireads/templates/user_results.html +++ b/fedireads/templates/user_results.html @@ -1,6 +1,6 @@ {% extends 'layout.html' %} {% block content %} -
+
{% for result in results %}

{{ result.username }}