BOJ Practice Time Setting

BOJ 연습 편집에서 '시작 시간'을 클릭하면 현재 시간으로, '종료 시간'을 클릭하면 최대 시간(시작 시간 + 14일 - 1분)으로 설정해 줍니다.

// ==UserScript==
// @name         BOJ Practice Time Setting
// @namespace    http://www.acmicpc.net
// @version      0.1
// @license MIT
// @description  BOJ 연습 편집에서 '시작 시간'을 클릭하면 현재 시간으로, '종료 시간'을 클릭하면 최대 시간(시작 시간 + 14일 - 1분)으로 설정해 줍니다.
// @author       cgiosy
// @match        https://www.acmicpc.net/group/practice/edit/*
// @match        https://www.acmicpc.net/group/practice/create/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    const getLocalDate = (date, minutes) => {
        return new Date(date.getTime() + ((-date.getTimezoneOffset() + (minutes || 0)) * 60) * 1000);
    };
    const getLocalDateString = (date, minutes) => {
        return getLocalDate(date, minutes).toISOString().replace('T', ' ').slice(0, 16);
    };

    const practiceStart = document.querySelector('input[name=practice_start]');
    const practiceEnd = document.querySelector('input[name=practice_end]');
    const practiceProblems = document.querySelector('input[name=problem_id]');

    const setPracticeStartTimeToNow = () => {
        practiceStart.value = getLocalDateString(new Date());
        update_datetime_diff();
    };
    const maximizePracticeEndTime = () => {
        practiceEnd.value = getLocalDateString(new Date(practiceStart.value), 60 * 24 * 14 - 1);
        update_datetime_diff();
    };
    const addPracticeProblems = () => {
        practiceProblems.value.split(/\s+/).forEach((problemId) => {
            problem_add(problemId);
        });
    };

    document.querySelector('label[for=practice_start]').onclick = setPracticeStartTimeToNow;
    document.querySelector('label[for=practice_end]').onclick = maximizePracticeEndTime;
    document.querySelector('label[for=problem_id]').onclick = addPracticeProblems;
})();