AOJ印刷用ブックマークレット書いた


来月のICPCに向けてチーム練習をする際に、基本的にAOJを利用して練習しているのですが、その際問題ページを印刷する際に、AOJのヘッダー部分が印刷形式によっては、問題文に被って印刷されてしまうという問題が起きました。
そのため、チームメンバーに脅されて頼まれ、ヘッダーを消すブックマークレットを書いたので、置いておきます。
詳細は以下より…

私の環境だけかもしれませんが、AOJの問題ページを印刷するとき、2段組にして印刷するとヘッダーの部分が問題文に被って表示され、見えない事がありました。
なので、そのヘッダー部分を削除してその問題解決と少しでも印刷枚数の節約(1行だけ2枚目とか結構あったので)になればと思い、書きました。

最初はシェルスクリプト等で、IDを引数に渡せば自動で印刷まで出来るようにしたかったのですが、シェルスクリプトやperl等ではHTMLの要素削除が時間がかかりそうだったので、最終的にすぐに出来るJSに落ち着きました。JSを書いてる時間より、そこに行き着くまでの時間のほうが明らかに多かった…

ついでに印刷もやりやすいように、印刷プロンプトの自動表示、また問題セットは基本連番なので、次の問題に自動で移動するようにしました。

ブックマークレットの全体のソースは以下の通りです。

var dom_obj=document.getElementById("logo");
dom_obj.parentNode.removeChild(dom_obj);
dom_obj=document.getElementById("nav");
dom_obj.parentNode.removeChild(dom_obj);
dom_obj=document.getElementById("header");
dom_obj.parentNode.removeChild(dom_obj);
window.print();
var url =location.href;
var a = url.match(/[^\d]*(\d+)[^/\d]*\/?$/);
var s = a[1];
var d = (parseInt(s) + 1) + '';
    if (s.charAt(0) == '0') {
       var l = s.length;
       var d = ((new Array(l).join('0')) + d).slice(-l);
    }
location.href = url.replace(a[1], d);

なお、次の問題への移動部分は探しているうちに、そのものどころか複数形式に対応したブックマークレットをこちらのサイトさんで、公開されていたので、その公開されていたソースをAOJ用に不要処理の削減(改悪)を行なって、ほぼそのまま使わせていただいています。

このソースをBookmarklet Crunchinatorというブックマークレット作成支援サイトを利用して
ブックマークレット化しました。

AOJ-print(ヘッダー削除のみ)

AOJ-print(印刷プロンプト表示)

AOJ-print(プロンプト表示→自動移動)

とりあえずはこれで少しでも印刷の手間を省けるようになるはずなので、あとは練習あるのみ…

参考サイト


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください