10FastFingers を劇的に快適にする方法

10FastFingers でまじめにスコア狙いをし始めると、

  • 途中経過が表示されない
  • リトライがめんどくさい (Tab → Enter に慣れない)

みたいなことが気になります。大丈夫です。解決できます。

やり方

このスクリプトをブラウザのデベロッパーコンソールに貼り付けるだけです。
(別に変な事してないんですが一応免責として自己責任でお願いします。)

$(function(){function e(){for(var e=0,t=document.getElementById("words").getElementsByClassName("correct"),n=0;n<t.length;n++){var o=t.item(n);e=Math.round(e+o.textContent.length+1)}var r=Math.round(e/5/((60.01-countdown)/60));(e<0||e>2e3)&&(e=0),(r<0||r>400)&&(r=0),$("#preview").html("<h2><b>Key Strokes: </b>"+e+" - <b>WPM: </b>"+r+"</h2>")}$("#words").before("<div id='preview'></div>"),e(),$(document).keydown(function(t){e()}),$(document).keyup(function(e){27==e.which&&restart()})});

そうすると、

  1. タイピング中に入力文字数と WPM が表示されます
  2. ESC でリトライできます

f:id:permil:20190303013326p:plain

べんり!!*1

これでだいぶタイプウェルと似た感覚でプレイできます。
Forefox/Chrome、Typing Test/Typing Test(advanced)、英語/日本語、あたりである程度使えそうなことを確認済です。
greasemonkey/tampermonkey あたりと組み合わせて使えばページ読み込み時に自動で適用もできます。

↑ で伝わらない人向けにもう少し細かく

ブラウザで 10FastFingers の Typing Test などのページを開いた状態で、

  1. 右クリックから開発者向けコンソールを開く
    • Firefox の場合、右クリック → 要素を調査 → コンソール
    • Chrome の場合、右クリック → 検証(I) → Console
  2. 上のスクリプトを入力欄に貼り付けて Enter
  3. 出題文字列の上に Key Strokes: 0 - WPM: 0 と表示されればたぶん成功
    • スクリプト貼付後はコンソールは消してしまって大丈夫です
    • ページを開くたびに貼り付ける必要があります
f:id:permil:20190303020706p:plain
Firefox の場合
f:id:permil:20190303021128p:plain
Chrome の場合

スクリプトについて

discord 上でいただいた2つのスクリプト*2を適当に混合しつつ、ESC でリトライ機能を足したものです。minify 書ける前はこんな感じです。

$(function() {
    $('#words').before("<div id='preview'></div>");
    update();

    $(document).keydown(function(k) { update() })
    $(document).keyup(function(k) { if (k.which == 27) { restart(); } })

    function update() {
        var realCPM = 0;
        var x = document.getElementById("words");
        var corrects = x.getElementsByClassName("correct");

        for(var i = 0; i < corrects.length; i++) {
            var correctword = corrects.item(i);
            realCPM = Math.round(realCPM + correctword.textContent.length + 1);
        }
        var realWPM = Math.round((realCPM / 5) / ((60.01 - countdown) / 60));

        if (realCPM < 0 || realCPM > 2000) { realCPM = 0; }
        if (realWPM < 0 || realWPM > 400) { realWPM = 0; }

        $('#preview').html("<h2><b>Key Strokes: </b>" + realCPM + " - " + "<b>WPM: </b>" + realWPM + "</h2>");
    }
})

ぶっちゃけ中味が気になる人が読めないほど複雑なことやってないんですが

  1. ページ読み込み時に Key Strokes と WPM の行を差し込む
  2. キー押下時にそれまでの打鍵数と速度を計測して更新
  3. ESC が押されたら reload (Tab → Enter を押したときと同じ挙動)

をしてるだけです。
$(document).keydown(function(k) { update() })setInterval(function() { update() }, 100} あたりで置き換えてもいいと思います。よしなに。

*1:使って問題ないことは、10FF関係者のAyasuさんにdiscord上のDMで確認済です。「ああそういうのみんな使ってるから大丈夫だよhaha」的な回答をいただきました。

*2:出自不明、10ff の discord に誰かが貼ったものっぽい