subscribe_button = document.getElementById('subscribe'); if (subscribe_button.getAttribute('onclick')) { subscribe_button['href'] = 'javascript:void(0)'; } function subscribe(timeouts = 0) { subscribe_button = document.getElementById('subscribe'); if (timeouts > 10) { console.log('Failed to subscribe.'); return; } var url = '/subscription_ajax?action_create_subscription_to_channel=1&redirect=false' + '&c=<%= ucid %>&referer=<%= env.get("current_page") %>'; var xhr = new XMLHttpRequest(); xhr.responseType = 'json'; xhr.timeout = 20000; xhr.open('POST', url, true); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xhr.send('csrf_token=<%= URI.escape(env.get?("csrf_token").try &.as(String) || "") %>'); var fallback = subscribe_button.innerHTML; subscribe_button.onclick = unsubscribe; subscribe_button.innerHTML = '<%= translate(locale, "Unsubscribe").gsub("'", "\\'") %> | <%= sub_count_text %>'; xhr.onreadystatechange = function() { if (xhr.readyState == 4) { if (xhr.status != 200) { subscribe_button.onclick = subscribe; subscribe_button.innerHTML = fallback; } } } xhr.ontimeout = function() { console.log('Subscribing timed out.'); subscribe(timeouts + 1); }; } function unsubscribe(timeouts = 0) { subscribe_button = document.getElementById('subscribe'); if (timeouts > 10) { console.log('Failed to subscribe'); return; } var url = '/subscription_ajax?action_remove_subscriptions=1&redirect=false' + '&c=<%= ucid %>&referer=<%= env.get("current_page") %>'; var xhr = new XMLHttpRequest(); xhr.responseType = 'json'; xhr.timeout = 20000; xhr.open('POST', url, true); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr.send('csrf_token=<%= URI.escape(env.get?("csrf_token").try &.as(String) || "") %>'); var fallback = subscribe_button.innerHTML; subscribe_button.onclick = subscribe; subscribe_button.innerHTML = '<%= translate(locale, "Subscribe").gsub("'", "\\'") %> | <%= sub_count_text %>'; xhr.onreadystatechange = function() { if (xhr.readyState == 4) { if (xhr.status != 200) { subscribe_button.onclick = unsubscribe; subscribe_button.innerHTML = fallback; } } } xhr.ontimeout = function() { console.log('Unsubscribing timed out.'); unsubscribe(timeouts + 1); }; }