@ -2,6 +2,24 @@ import './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 = ( ) => {
@ -141,6 +159,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 ( ( ) => {
@ -163,6 +195,28 @@ ready(() => {
}
} ) ;
[ ] . 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 ) ;
}
const React = require ( 'react' ) ;
const ReactDOM = require ( 'react-dom' ) ;