|
|
|
@ -4,6 +4,24 @@ import 'packs/public-path';
|
|
|
|
|
import { delegate } from '@rails/ujs';
|
|
|
|
|
import ready from '../mastodon/ready';
|
|
|
|
|
|
|
|
|
|
const setAnnouncementEndsAttributes = (target) => {
|
|
|
|
|
const valid = target?.value && target?.validity?.valid;
|
|
|
|
|
const element = document.querySelector('input[type="datetime-local"]#announcement_ends_at');
|
|
|
|
|
if (valid) {
|
|
|
|
|
element.classList.remove('optional');
|
|
|
|
|
element.required = true;
|
|
|
|
|
element.min = target.value;
|
|
|
|
|
} else {
|
|
|
|
|
element.classList.add('optional');
|
|
|
|
|
element.removeAttribute('required');
|
|
|
|
|
element.removeAttribute('min');
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
delegate(document, 'input[type="datetime-local"]#announcement_starts_at', 'change', ({ target }) => {
|
|
|
|
|
setAnnouncementEndsAttributes(target);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const batchCheckboxClassName = '.batch-checkbox input[type="checkbox"]';
|
|
|
|
|
|
|
|
|
|
const showSelectAll = () => {
|
|
|
|
@ -143,6 +161,20 @@ const onChangeRegistrationMode = (target) => {
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const convertUTCDateTimeToLocal = (value) => {
|
|
|
|
|
const date = new Date(value + 'Z');
|
|
|
|
|
const twoChars = (x) => (x.toString().padStart(2, '0'));
|
|
|
|
|
return `${date.getFullYear()}-${twoChars(date.getMonth()+1)}-${twoChars(date.getDate())}T${twoChars(date.getHours())}:${twoChars(date.getMinutes())}`;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const convertLocalDatetimeToUTC = (value) => {
|
|
|
|
|
const re = /^([0-9]{4,})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2})/;
|
|
|
|
|
const match = re.exec(value);
|
|
|
|
|
const date = new Date(match[1], match[2] - 1, match[3], match[4], match[5]);
|
|
|
|
|
const fullISO8601 = date.toISOString();
|
|
|
|
|
return fullISO8601.slice(0, fullISO8601.indexOf('T') + 6);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
delegate(document, '#form_admin_settings_registrations_mode', 'change', ({ target }) => onChangeRegistrationMode(target));
|
|
|
|
|
|
|
|
|
|
ready(() => {
|
|
|
|
@ -170,4 +202,26 @@ ready(() => {
|
|
|
|
|
e.target.href = url;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
[].forEach.call(document.querySelectorAll('input[type="datetime-local"]'), element => {
|
|
|
|
|
if (element.value) {
|
|
|
|
|
element.value = convertUTCDateTimeToLocal(element.value);
|
|
|
|
|
}
|
|
|
|
|
if (element.placeholder) {
|
|
|
|
|
element.placeholder = convertUTCDateTimeToLocal(element.placeholder);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
delegate(document, 'form', 'submit', ({ target }) => {
|
|
|
|
|
[].forEach.call(target.querySelectorAll('input[type="datetime-local"]'), element => {
|
|
|
|
|
if (element.value && element.validity.valid) {
|
|
|
|
|
element.value = convertLocalDatetimeToUTC(element.value);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const announcementStartsAt = document.querySelector('input[type="datetime-local"]#announcement_starts_at');
|
|
|
|
|
if (announcementStartsAt) {
|
|
|
|
|
setAnnouncementEndsAttributes(announcementStartsAt);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|