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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
/**
* Misc
*/
import store from './utils/store';
import { $ } from './utils/dom';
let touchMoved = false;
function formResult({target, detail}) {
const elements = {
'#description-form': '.image-description',
'#uploader-form': '.image_uploader',
'#source-form': '#image-source',
'#thumbnail-form': '.image-thumbnail__container'
};
function showResult(resultEl, formEl, response) {
resultEl.innerHTML = response;
resultEl.classList.remove('hidden');
formEl.classList.add('hidden');
formEl.querySelector('input[type="submit"]').disabled = false;
}
for (const element in elements) {
if (target.matches(element)) detail.text().then(text => showResult($(elements[element]), target, text));
}
}
function revealSpoiler(event) {
const { target } = event;
const spoiler = target.closest('.spoiler');
let imgspoiler = target.closest('.spoiler .imgspoiler, .spoiler-revealed .imgspoiler');
const showContainer = target.closest('.image-show-container');
// Prevent reveal if touchend came after touchmove event
if (touchMoved) {
touchMoved = false;
return;
}
if (spoiler) {
if (showContainer) {
const imageShow = showContainer.querySelector('.image-show');
if (!imageShow.classList.contains('hidden') && imageShow.classList.contains('spoiler-pending')) {
imageShow.classList.remove('spoiler-pending');
return;
}
}
spoiler.classList.remove('spoiler');
spoiler.classList.add('spoiler-revealed');
// Prevent click-through to links on mobile platforms
if (event.type === 'touchend') event.preventDefault();
if (!imgspoiler) {
imgspoiler = spoiler.querySelector('.imgspoiler');
}
}
if (imgspoiler) {
imgspoiler.classList.remove('imgspoiler');
imgspoiler.classList.add('imgspoiler-revealed');
if (event.type === 'touchend' && !event.defaultPrevented) {
event.preventDefault();
}
}
}
function setupEvents() {
const extrameta = $('#extrameta');
if (store.get('hide_uploader') && extrameta) extrameta.classList.add('hidden');
document.addEventListener('fetchcomplete', formResult);
document.addEventListener('click', revealSpoiler);
document.addEventListener('touchend', revealSpoiler);
document.addEventListener('touchmove', () => touchMoved = true);
}
function cleanIrcNickname(username) {
return username.replace(' ', '_').replaceAll(/[^a-zA-Z0-9_\-`\[\]{}]/g, '');
}
/* Find elements that require a username substitution in them and do so. */
function setupUsernameSubstitutions() {
[].forEach.call(document.getElementsByClassName('js-username-substitution'), element => {
const field = element.getAttribute('data-substitute-field');
const oldValue = element.getAttribute(field);
const usernameReplacement = window.booru.userName || ('Anon' + (Math.floor(9999 * Math.random())));
element.setAttribute(field, oldValue.replace('${username}', cleanIrcNickname(usernameReplacement)));
});
}
export { setupEvents, setupUsernameSubstitutions };
|