您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Automatically detects the language used based on the information in the source code comments and selects it as the one to be submitted.
- // ==UserScript==
- // @name AtCoder Submission Language Detector
- // @namespace https://twitter.com/KakurenboUni
- // @version 1.1.1
- // @description Automatically detects the language used based on the information in the source code comments and selects it as the one to be submitted.
- // @author uni-kakurenbo
- // @match https://atcoder.jp/contests/*/tasks/*
- // @match https://atcoder.jp/contests/*/submit*
- // @match https://atcoder.jp/contests/*/custom_test*
- // @license MIT
- // @supportURL https://twitter.com/KakurenboUni
- // ==/UserScript==
- (async function () {
- "use strict";
- const DETECTION_REG_EXP = /#.*lang(?:uage)?:?(?<args>\s+[^\n\r*/#]+)/;
- await rendered();
- const $editor = ace.edit("editor");
- const $plainTextarea = $("#plain-textarea");
- const $selectLanguage = $("#select-lang select");
- const $languageOptions = $selectLanguage[0].querySelectorAll("option");
- const languageOptions = [].map.call($languageOptions, ({ value, label, dataset: { mime } = {} }) => {
- return {
- id: value,
- label: label.toLowerCase() ?? "",
- code: mime?.toLowerCase().replaceAll(/^.+\/x?|src$/g, "") ?? "",
- };
- });
- $editor.getSession().on("change", updateLanguageSettings);
- $plainTextarea.on("input", updateLanguageSettings);
- document.addEventListener("paste", updateLanguageSettings);
- $("#input-open-file").on("change", () => { setTimeout(updateLanguageSettings, 0); });
- function getSourceCode() {
- if($editor.isFocused()) return $editor.getValue();
- else return $plainTextarea[0].value;
- }
- function updateLanguageSettings() {
- const sourceCode = getSourceCode();
- console.log(sourceCode);
- const languageInfomation = sourceCode.match(DETECTION_REG_EXP);
- if (!languageInfomation || !languageInfomation?.groups?.args) return;
- let languageSelectors = languageInfomation.groups.args?.trim().replace(/\s+/g, " ").split(" ");
- languageSelectors = languageSelectors.map((selector) => selector.toLowerCase());
- const selectedOption = languageOptions.find((option) => {
- return (
- languageSelectors.includes(option.id) ||
- languageSelectors.every((selector) => option.label.includes(selector)) ||
- languageSelectors.every((selector) => option.code.includes(selector))
- );
- });
- if (!selectedOption) return;
- $selectLanguage.val(selectedOption.id).trigger("change");
- }
- async function rendered() {
- let timer;
- await new Promise((resolve) => {
- observer();
- function observer() {
- console.log(getLS)
- if (typeof getLS == "function") {
- resolve();
- }
- timer = setTimeout(observer, 10);
- }
- });
- clearTimeout(timer);
- }
- })();