2016-11-17 15:48:45 +00:00
|
|
|
/* global Vue */
|
|
|
|
|
2016-11-30 23:21:28 +00:00
|
|
|
(() => {
|
2016-11-17 15:48:45 +00:00
|
|
|
class Subscription {
|
2016-12-01 06:14:12 +00:00
|
|
|
constructor(containerElm) {
|
|
|
|
this.containerElm = containerElm;
|
2016-11-17 15:48:45 +00:00
|
|
|
|
2016-12-01 06:14:12 +00:00
|
|
|
const subscribeButton = containerElm.querySelector('.js-subscribe-button');
|
2016-11-17 15:48:45 +00:00
|
|
|
if (subscribeButton) {
|
|
|
|
// remove class so we don't bind twice
|
|
|
|
subscribeButton.classList.remove('js-subscribe-button');
|
|
|
|
subscribeButton.addEventListener('click', this.toggleSubscription.bind(this));
|
|
|
|
}
|
2016-07-24 20:45:11 +00:00
|
|
|
}
|
|
|
|
|
2016-11-17 15:48:45 +00:00
|
|
|
toggleSubscription(event) {
|
|
|
|
const button = event.currentTarget;
|
|
|
|
const buttonSpan = button.querySelector('span');
|
|
|
|
if (!buttonSpan || button.classList.contains('disabled')) {
|
|
|
|
return;
|
2016-10-20 07:54:33 +00:00
|
|
|
}
|
2016-11-17 15:48:45 +00:00
|
|
|
button.classList.add('disabled');
|
|
|
|
|
2016-11-22 21:56:52 +00:00
|
|
|
const isSubscribed = buttonSpan.innerHTML.trim().toLowerCase() !== 'subscribe';
|
2016-12-01 06:11:21 +00:00
|
|
|
const toggleActionUrl = this.containerElm.dataset.url;
|
2016-11-17 15:48:45 +00:00
|
|
|
|
|
|
|
$.post(toggleActionUrl, () => {
|
|
|
|
button.classList.remove('disabled');
|
|
|
|
|
|
|
|
// hack to allow this to work with the issue boards Vue object
|
|
|
|
if (document.querySelector('html').classList.contains('issue-boards-page')) {
|
|
|
|
Vue.set(
|
|
|
|
gl.issueBoards.BoardsStore.detail.issue,
|
|
|
|
'subscribed',
|
2016-11-30 23:20:06 +00:00
|
|
|
!gl.issueBoards.BoardsStore.detail.issue.subscribed,
|
2016-11-17 15:48:45 +00:00
|
|
|
);
|
|
|
|
} else {
|
2016-11-30 23:43:21 +00:00
|
|
|
buttonSpan.innerHTML = isSubscribed ? 'Subscribe' : 'Unsubscribe';
|
2016-11-17 15:48:45 +00:00
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
2016-07-24 20:45:11 +00:00
|
|
|
|
2016-11-17 15:48:45 +00:00
|
|
|
static bindAll(selector) {
|
|
|
|
[].forEach.call(document.querySelectorAll(selector), elm => new Subscription(elm));
|
|
|
|
}
|
|
|
|
}
|
2016-07-24 20:45:11 +00:00
|
|
|
|
2016-11-30 23:21:28 +00:00
|
|
|
window.gl = window.gl || {};
|
|
|
|
window.gl.Subscription = Subscription;
|
|
|
|
})();
|