modを取る必要がありそうだったら教えてくれます!嬉しいね(うれしいので) ソースコード内で通知位置の設定が可能です!
当前为
// ==UserScript==
// @name mod noticer
// @namespace http://atcoder.jp/
// @version 2.0
// @description modを取る必要がありそうだったら教えてくれます!嬉しいね(うれしいので) ソースコード内で通知位置の設定が可能です!
// @author Ll_e_ki
// @match https://atcoder.jp/contests/*/tasks/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
// Your code here...
const IN_SUBMIT = 0b001
const ABOVE_SUBMIT = 0b010
const DIALOG = 0b100
const NOTICE_POSITION = IN_SUBMIT | ABOVE_SUBMIT | DIALOG
// IN_SUBMIT = 提出ボタン内
// ABOVE_SUBMIT = 提出ボタンの上
// DIALOG = 提出時、提出コードでmodを取り忘れている場合ダイアログ表示
// 組み合わせることも可能です(例:AROUND_SUBMIT||DIALOG = 提出ボタンの上と提出時のダイアログで通知)
const MODMARK = [ // ダイアログ表示を使用する場合、modを取っているかの確認用文言を予め入力してください
"%"
]
const MOD_LIST = ["割ったあまり", "割った余り", "答えは非常に大きく", "mod"]
function inWord(root_element, word_list) {
let elem_stack = [root_element]
while (elem_stack.length > 0) {
var element = elem_stack.pop()
for (var i = 0; i < word_list.length; i++) {
if (element.textContent.match(word_list[i])) {
return true
}
}
if (element.children.length > 0) {
var children = element.children
for (var i = 0; i < children.length; i++) {
elem_stack.push(children[i])
}
}
}
return false
}
let task_element = document.getElementById("task-statement")
let global_needmod = inWord(task_element, MOD_LIST)
if (global_needmod) {
if (NOTICE_POSITION & IN_SUBMIT) {
document.getElementById("submit").appendChild(document.createElement("br"))
document.getElementById("submit").appendChild(document.createTextNode("※ modは取りましたか?"))
}
if (NOTICE_POSITION & ABOVE_SUBMIT) {
var append_elem = document.createElement("b")
append_elem.textContent = "※ modは取りましたか?"
document.getElementById("sourceCode").appendChild(append_elem)
}
}
document.getElementById("submit").addEventListener("click", (event) => {
if (NOTICE_POSITION & NOTICE_POSITION && global_needmod) {
let code_element = document.getElementById("sourceCode")
if (inWord(code_element, MODMARK) == false && confirm("modを取っていない可能性があります。提出しますか?") == false) {
event.preventDefault()
}
}
})
})()