ac-score-table-ja

AtCoder(beta.atcoder.jp)の日本語版で配点表を表示します.

// ==UserScript==
// @name         ac-score-table-ja
// @namespace    https://github.com/rsk0315/
// @version      0.1.2
// @description  AtCoder(beta.atcoder.jp)の日本語版で配点表を表示します.
// @author       rsk0315
// @license      MIT
// @include      /^https?://beta\.atcoder\.jp\/contests\/[^\/]+\/?(?:\?.*)?$/
// @grant        none
// ==/UserScript==

function isJapanesePage() {
    // URL を見て判断できる保証が無いので右上の国旗を見て判断します.
    // ところで一般に国旗で言語を示す UI はアとされていますが

    // フラグ,bool 的な意味ではなく国旗です
    // この要素が確実に目的のものを指しているかがアレなのですが,まぁ大丈夫でしょう
    var flag = $($('.dropdown-toggle')[0]).children()[0].src;
    if (flag.match(/ja\.png$/)) return true;
    return false;
}

function hasScoreTable() {
    var haiten = $('h3:contains(配点)')[0];  // ガバガバ判定
    if (haiten !== undefined) return true;
    return false;
}

(function() {
/*     'use strict'; */

    // My code here...
    if (!(isJapanesePage() && !hasScoreTable())) return;

    // 英語用の配点表が無ければ帰ります.
    // ところでなぜ同じページ内にあるのに英語版だけしか見せないんでしょう
    var $pv = $('h3:contains(Point Values)');
    if ($pv.length == 0) return;

    // これにマッチする別のテーブルがあるとアなんですが,まぁアレです.
    // たぶん $pv の次とかにあるやつを指定するといいんですが,
    // 地の文に邪魔されたりしないかがわからないため,問題が起こるまでは
    // このままでいってみます.
    // テーブルがたくさんあっても配点が出てくればいいでしょ,みたいな気持ちで
    var $table = $('.row>.span4>table');
    if ($table.length == 0) return;

    // これは AGC 020 などの公式で出ているやつに合わせています.
    // 他のコンテストでは他の位置だったりするかもしれませんので,
    // 必要があればそのうち変えるかもしれません.
    var $toInsert = $('.lang-ja>h3:contains(過去問&その他コンテスト)');
    if ($toInsert.length == 0) {
        // もし見つからなければ「その他」であろう最後の要素の直前に入れます.
        // この辺ガバガバなのでそのうち変えるかもしれません.
        $toInsert = $('.lang-ja>h3:last');
    }
    $toInsert.before('<h3>配点</h3>');
    $toInsert.before('<p>これはUserscriptによって追加された表です.</p>');
    $toInsert.before($table);
    // XSS に対してアなはずなんですが,AtCoder 社を信じるみたいなことをします

    // AtCoder Scores でコメント芸が人気だったのでコメントを多めに書いています.
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址