Instrumentality

ささいな日常の記録

均等分割からの差額を表示する Greasemonkey スクリプト

某所でリクエストがあったので作ってみました。



終了後の質問において、各回答が得たポイントの横に、均等分割した場合からの差額を表示します。
差額がマイナス 10ポイントより少ない場合、色が変わります。
(デフォルトは lightyellow です。色と点数の設定は変更できます)
ついでに、減点しておいて「満足!」はないだろう、と以前から思っていたので、「満足!」も削除されます。


例によって、プロトタイプですのでお気をつけください。
問題点:回答未オープンで終了後、回答がオープンされた場合の処理。(面倒なので対応しないかもです)

// ==UserScript==
// @name          Hatena Question reward checker
// @include       http://q.hatena.ne.jp/*
// @exclude       http://q.hatena.ne.jp/list*
// @namespace     http://d.hatena.ne.jp/meefla/
// @description   Check diff from the average reward
// @version       0.1
// ==/UserScript==

(function() {
  // prefs
  var warningColor = "lightyellow"; 
  var warningPoint = -10;

  var statuslabel = document.getElementsByClassName('info-title');
  if (statuslabel.length > 0) {
    var statustext = statuslabel[0].nextSibling.data;
    var statustextinitial = statustext.substring(0,1);
    var pointtext = statuslabel[2].nextSibling.data;
    var s1 = pointtext.split("ポ");
    var pointtextnum = parseInt(s1[0]) ;
  }
  else return;

  if (statustextinitial == "終") {
    var answercontainer = document.getElementById('read_answer_list');
    var answerstatus = answercontainer.getElementsByClassName('answer-status');
    var answernum = answerstatus.length;
    for (var i=0; i<answernum; i++) {
      var answerpoint = answerstatus[i].lastChild.data;
      var s2 = answerpoint.split("ポ");
      var answerpointnum = parseInt(s2[0]) ;
      var dif = answerpointnum - Math.round(pointtextnum/answernum);
      var diftextdiv = document.createElement('div');
      if (dif < warningPoint) {
        answerstatus[i].style.color = warningColor;
        answerstatus[i].firstChild.data = "";
      }
      else if (dif > 0) {
        dif = "+" + dif;
      }
      diftextdiv.innerHTML = "(" + dif + ")";
      diftextdiv = diftextdiv.firstChild;
      answerstatus[i].appendChild(diftextdiv);
    }
  }
})();


スクリプトの中で、質問が終了しているかどうかの判別とかに日本語を使っていますので、このページからコピペする時は文字コードに注意が必要です。
はてダは charset=euc-jp なので、Greasemonkey にインストールする前に UTF-8 にしないと文字化けして正常に動作しないかもしれません。
手順としては、

  1. Firefox でこのページを開いておく。
  2. 文字コードUTF-8 に変更できるエディタ(秀丸など)を開く。
  3. スクリプトをエディタにコピー。
  4. 文字コードUTF-8 にして保存(ファイル名は何でも可)。
  5. 保存したテキストファイルを Firefox のブラウザ画面にドラッグアンドドロップ

これでインストールできる筈です。


[2009年10月25日追記]
getElementsByClassName を使っているので、Firefox 2.x では動作しません。
[追記終わり]