FLASH KEY flash hack

FLASH KEY をGM名前空間にexportしてほかからも使えるように。
メッセージ伝達用に使うにはデフォルトの400msは速すぎるので可変に。

これでLDRize+reblogでreblogしてるときにreblogされてんだかされてないんだかわかんなかったのがFLASH KEY 経由で表示されるようになります。
あ、でもこれだとFLASH KEY をOnにしとかないと動かないのでやっぱりminibufferなりreblogなりに組み込まないとだめだ。

なんかJSAgreasemonkeyとminibufferと、全部同じようなコードを書いてるのになんかうまく再利用できてない。
JSANもなんか使い方わかんないし(自分がちゃんと読んだことないだけだけど....)。
読み込んだら無条件で実行っていう仕様があまりに。gmから呼んだときにはコンテキストにこういうフラグがあるから実行してね、みたいなのがあって、それをチェックして実行するとかしないとかしてくれたらファイルを丸まるライブラリとして再利用できるのに。再利用できないからワリと再利用できないこと前提で書かれていたり、再利用前提で書かれていても、どこがライブラリでどこがexportするためのコード化の判別はけっきょく読まないと分かんない。

ほんとうはみんなプログラムを書くのが好きなんだと思う。自分はあんまり好きじゃない。やりたいことをうまいことなんとかするのに使えるからやってるだけで、プログラムを書くことには実はあんまり興味ないのかなと思う。いいわけだけど。

diffが分かりにくすぎるのでベタに貼る。

var opacity = 0.8;

var flash = document.createElement('div');
flash.id = 'FLASH_KEY';
hide(flash);
document.body.appendChild(flash);

var canceler;

function showFlashKeyWindow(key_string, duration) {
    duration = duration || 400;
    canceler && canceler();

    flash.innerHTML = key_string;
    flash.style.MozOpacity = opacity;
    show(flash);
    flash.style.marginLeft = (-(flash.offsetWidth/2))+'px';

    canceler = callLater(function(){
        canceler = tween(function(value){
            flash.style.MozOpacity = opacity * (1-value);
        }, 100, 5);
    }, duration);
}

window.addEventListener('keydown', function(e){
    showFlashKeyWindow(keyString(e));
}, false);

window.FlashKey = {
    showFlashKeyWindow: showFlashKeyWindow
}
--- flashkey.user.org.js        2007-09-13 14:07:35.000000000 +0900
+++ flashkey.user.js    2007-09-13 14:03:41.000000000 +0900
@@ -23,6 +23,7 @@
        }
 ]]></>)

+var opacity = 0.8;

 var flash = document.createElement('div');
 flash.id = 'FLASH_KEY';
@@ -30,20 +31,31 @@
 document.body.appendChild(flash);

 var canceler;
-window.addEventListener('keydown', function(e){
+
+function showFlashKeyWindow(key_string, duration) {
+       duration = duration || 400;
        canceler && canceler();
-       flash.innerHTML = keyString(e);
-       flash.style.MozOpacity = 1;
+
+       flash.innerHTML = key_string;
+       flash.style.MozOpacity = opacity;
        show(flash);
        flash.style.marginLeft = (-(flash.offsetWidth/2))+'px';

        canceler = callLater(function(){
                canceler = tween(function(value){
-                       flash.style.MozOpacity = (1-value);
+                       flash.style.MozOpacity = opacity * (1-value);
                }, 100, 5);
-       }, 400);
+       }, duration);
+}
+
+window.addEventListener('keydown', function(e){
+       showFlashKeyWindow(keyString(e));
 }, false);

+window.FlashKey = {
+       showFlashKeyWindow: showFlashKeyWindow
+}
+

 // ----[Utility]-------------------------------------------------
 function callLater(callback, interval){