summaryrefslogtreecommitdiffstats
path: root/assets/js/subscribe_widget.js
diff options
context:
space:
mode:
Diffstat (limited to 'assets/js/subscribe_widget.js')
-rw-r--r--assets/js/subscribe_widget.js92
1 files changed, 20 insertions, 72 deletions
diff --git a/assets/js/subscribe_widget.js b/assets/js/subscribe_widget.js
index 45ff5706..7665a00b 100644
--- a/assets/js/subscribe_widget.js
+++ b/assets/js/subscribe_widget.js
@@ -1,8 +1,9 @@
'use strict';
var subscribe_data = JSON.parse(document.getElementById('subscribe_data').textContent);
+var payload = 'csrf_token=' + subscribe_data.csrf_token;
var subscribe_button = document.getElementById('subscribe');
-subscribe_button.parentNode['action'] = 'javascript:void(0)';
+subscribe_button.parentNode.action = 'javascript:void(0)';
if (subscribe_button.getAttribute('data-type') === 'subscribe') {
subscribe_button.onclick = subscribe;
@@ -10,87 +11,34 @@ if (subscribe_button.getAttribute('data-type') === 'subscribe') {
subscribe_button.onclick = unsubscribe;
}
-function subscribe(retries) {
- if (retries === undefined) retries = 5;
-
- if (retries <= 0) {
- console.warn('Failed to subscribe.');
- return;
- }
-
- var url = '/subscription_ajax?action_create_subscription_to_channel=1&redirect=false' +
- '&c=' + subscribe_data.ucid;
- var xhr = new XMLHttpRequest();
- xhr.responseType = 'json';
- xhr.timeout = 10000;
- xhr.open('POST', url, true);
- xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
-
+function subscribe() {
var fallback = subscribe_button.innerHTML;
subscribe_button.onclick = unsubscribe;
subscribe_button.innerHTML = '<b>' + subscribe_data.unsubscribe_text + ' | ' + subscribe_data.sub_count_text + '</b>';
- xhr.onreadystatechange = function () {
- if (xhr.readyState === 4) {
- if (xhr.status !== 200) {
- subscribe_button.onclick = subscribe;
- subscribe_button.innerHTML = fallback;
- }
- }
- };
-
- xhr.onerror = function () {
- console.warn('Subscribing failed... ' + retries + '/5');
- setTimeout(function () { subscribe(retries - 1); }, 1000);
- };
-
- xhr.ontimeout = function () {
- console.warn('Subscribing failed... ' + retries + '/5');
- subscribe(retries - 1);
- };
+ var url = '/subscription_ajax?action_create_subscription_to_channel=1&redirect=false' +
+ '&c=' + subscribe_data.ucid;
- xhr.send('csrf_token=' + subscribe_data.csrf_token);
+ helpers.xhr('POST', url, {payload: payload, retries: 5, entity_name: 'subscribe request'}, {
+ onNon200: function (xhr) {
+ subscribe_button.onclick = subscribe;
+ subscribe_button.innerHTML = fallback;
+ }
+ });
}
-function unsubscribe(retries) {
- if (retries === undefined)
- retries = 5;
-
- if (retries <= 0) {
- console.warn('Failed to subscribe');
- return;
- }
-
- var url = '/subscription_ajax?action_remove_subscriptions=1&redirect=false' +
- '&c=' + subscribe_data.ucid;
- var xhr = new XMLHttpRequest();
- xhr.responseType = 'json';
- xhr.timeout = 10000;
- xhr.open('POST', url, true);
- xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
-
+function unsubscribe() {
var fallback = subscribe_button.innerHTML;
subscribe_button.onclick = subscribe;
subscribe_button.innerHTML = '<b>' + subscribe_data.subscribe_text + ' | ' + subscribe_data.sub_count_text + '</b>';
- xhr.onreadystatechange = function () {
- if (xhr.readyState === 4) {
- if (xhr.status !== 200) {
- subscribe_button.onclick = unsubscribe;
- subscribe_button.innerHTML = fallback;
- }
- }
- };
-
- xhr.onerror = function () {
- console.warn('Unsubscribing failed... ' + retries + '/5');
- setTimeout(function () { unsubscribe(retries - 1); }, 1000);
- };
-
- xhr.ontimeout = function () {
- console.warn('Unsubscribing failed... ' + retries + '/5');
- unsubscribe(retries - 1);
- };
+ var url = '/subscription_ajax?action_remove_subscriptions=1&redirect=false' +
+ '&c=' + subscribe_data.ucid;
- xhr.send('csrf_token=' + subscribe_data.csrf_token);
+ helpers.xhr('POST', url, {payload: payload, retries: 5, entity_name: 'unsubscribe request'}, {
+ onNon200: function (xhr) {
+ subscribe_button.onclick = unsubscribe;
+ subscribe_button.innerHTML = fallback;
+ }
+ });
}