AtCoder Crouch Start

Add a link to problem A on upcoming AtCoder contest pages

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==UserScript==
// @name            AtCoder Crouch Start
// @name:ja         AtCoder Crouch Start
// @namespace       https://github.com/xe-o
// @version         0.2
// @description     Add a link to problem A on upcoming AtCoder contest pages
// @description:ja  AtCoderの開始前のコンテストページにA問題へのリンクを追加します
// @author          XERO
// @license         MIT
// @match           https://atcoder.jp/contests/*
// @exclude         https://atcoder.jp/contests/
// @grant           none
// ==/UserScript==

(function () {
  "use strict";

  const fixtime = document.querySelector(".fixtime-full");
  const navTabs = document.querySelector(".nav.nav-tabs");
  const pullRightListItem = document.querySelector("li.pull-right");

  if (fixtime && Date.parse(fixtime.innerText) > Date.now()) {
    const contestID = window.location.pathname.split("/")[2];
    const tab = document.createElement("li");
    tab.innerHTML = `<a href="/contests/${contestID}/tasks/${contestID}_a"><span class="glyphicon glyphicon-paperclip" style="margin-right:4px;" aria-hidden="true"></span>A問題</a>`;
    navTabs.insertBefore(tab, pullRightListItem);
  }
})();