ScriptRegisterをフォークする

キャンペーン応募のお約束

MacBook Air 11インチ欲しい!
話題のMacBook Air 11インチが当たるプレゼントキャンペーンの応募要項なので、入れてみましたw


これ見てなんとなく「それにつけても金の欲しさよ」を思い出しましたw
Bookmarkletにすると、こうですね。

javascript:(function(){document.body.innerHTML=document.body.innerHTML.replace(/。/g,'。それにつけてもMacBook Airの欲しさよ。');focus();})();

いわゆる語尾だけ変えるってやつです。最近ではイカ娘の「〜でゲソ。」「〜なイカ?」の語尾に置換するのが流行ったでゲソ。
【やじうまWatch】 あちこちのサイトを手軽に侵略できる「イカ娘スクリプト」大量発生中 ほか -INTERNET Watch - 2010/11/09付記事



言い訳

寒くてやる気で無いのでスキン作り停滞中。手がかじかんでしんどいってのも理由ですが。

本題

id:Puyo2 さん作のUAスクリプトにScriptRegisterというのがあります。
UserAction スクリプト配布 - Fenrir User Community


コードを選択してSmartSearchなどからアクションを呼び出し、名前をつけるだけでUAスクリプトSeahorseスクリプトか判別してファイル化して保存してくれるという大変便利なやつです。*1


で、変更点は"javascript:"が含まれる場合に"\bookmarklet\"にファイル化し保存するって寸法です。

if(API != null) {
    var document;
    if(document == null) {
        id = API.GetDocumentID(API.ActiveIndex);
        document = API.GetDocumentObject(id);
    }
    var targetDocument = document;
    while ((/frame/i).test(targetDocument.activeElement.tagName)) {
        targetDocument = targetDocument.activeElement.contentWindow.document;
    }
    
    var selectedText = targetDocument.selection.createRange().text;
    
    if(selectedText) {
        selectedText = selectedText.replace(/ *[|\r]\n/g, "\n");
        var end = ScriptFullName.lastIndexOf("\\");
        end = ScriptFullName.lastIndexOf("\\", end - 1);
        var path = ScriptFullName.substring(0, end);
        path = path.replace(/[^\\]+\\\.\.\\/, "");
        if((/==User[S]cript==/).test(selectedText)) {
            var extension = ".user.js";
            path += "\\seahorse\\";
            var message = "登録するSeaHorseスクリプトの名前を入力してください(拡張子不要)";
        }
        else if((/javascript:/).test(selectedText)) {
            var extension = ".js";
            path += "\\..\\bookmarklet\\";
            var message = "登録するBookmarkletの名前を入力してください(拡張子不要)";
        }
        else {
            var extension = ".js";
            path += "\\scripts\\";
            var message = "登録するUserActionスクリプトの名前を入力してください(拡張子不要)";
        }
        
        var fileName = prompt(message, "");
        if(fileName) {
            var file = OpenFile(path + fileName + extension, "w");
            if(file) {
                file.Write(selectedText);
                file.Close();
                
                Alert("正常にスクリプトを登録できました");
            }
            else {
                Alert(path + fileName + extension + "を開けない?ファイル名に使えない文字が含まれているかもしれません");
            }
        }
        else {
            Alert("処理を中止しました");
        }
    }
    else {
        Alert("選択文字列の取得に失敗しました");
    }
}
else {
    Alert("オプションの\n クライアント|全般|スクリプトによるクライアントの操作を許可する\nにチェックがないと動作しません");
}


変更点はインデントを除くとたったこれだけというアレさ(しかも内容は前後の部分のコピペレベルw)

else if((/javascript:/).test(selectedText)) {
var extension = ".js";
path += "\\..\\bookmarklet\\";
var message = "登録するBookmarkletの名前を入力してください(拡張子不要)";
}

*1:ただし、js拡張子限定。vbs拡張子とかでもスクリプト作れたりしますが絶対数が違うのでw