blob: 8ca3281d8246e37b1bda51029ad067317000a0f2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
/* eslint-disable no-param-reassign */
/* global Vue */
((global) => {
class Subscription {
constructor(containerSelector) {
this.containerElm = (typeof containerSelector === 'string')
? document.querySelector(containerSelector)
: containerSelector;
const subscribeButton = this.containerElm.querySelector('.js-subscribe-button');
if (subscribeButton) {
// remove class so we don't bind twice
subscribeButton.classList.remove('js-subscribe-button');
subscribeButton.addEventListener('click', this.toggleSubscription.bind(this));
}
}
toggleSubscription(event) {
const button = event.currentTarget;
const buttonSpan = button.querySelector('span');
if (!buttonSpan || button.classList.contains('disabled')) {
return;
}
button.classList.add('disabled');
const isSubscribed = buttonSpan.innerHTML.trim().toLowerCase() !== 'subscribe';
const toggleActionUrl = this.containerElm.getAttribute('data-url');
$.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',
!gl.issueBoards.BoardsStore.detail.issue.subscribed,
);
} else {
const newToggleText = isSubscribed ? 'Subscribe' : 'Unsubscribe';
buttonSpan.innerHTML = newToggleText;
if (button.getAttribute('data-original-title')) {
button.setAttribute('data-original-title', newToggleText);
$(button).tooltip('hide').tooltip('fixTitle');
}
}
});
}
static bindAll(selector) {
[].forEach.call(document.querySelectorAll(selector), elm => new Subscription(elm));
}
}
global.Subscription = Subscription;
})(window.gl || (window.gl = {}));
|