2014年7月9日水曜日

突然の死プラグイン

_人人人人人_
> 突然の死 <
 ̄Y^Y^Y^Y^Y ̄

とかもうあまり流行らないですかね。
でも、割と私はまだTwitterで使っています(

はい、でもこれ、案外作るのめんどくさいんですよね。
一応辞書登録はしていても、複数行は登録できませんし、そもそも、中に入れる文字列を変更したら人の数やY^の数も変わってきますからね。一発で囲ってくれたらとても楽ですよね。

Androidには良いアプリがあります。Cerisierというアプリです。

Cerisier - Google Play の Android アプリ

このアプリはなんか中段の紙飛行機マーク(ツイートボタン)の左にある、それっぽいやつを押すと自動的にこうやって人とY^で囲ってくれるのです。なにか強調したいときにとても役に立ちますね。


これを、Janetterプラグインとして実装してしまおうというのが今回のお話です。

国産Twitterクライアント「Janetter」

最も有名なTwitterクライアントの1つで、そのユーザー数も非常に多いです。
しかし、いわゆるTwitterのクライアント締め出し政策の一環で設定されたユーザー数上限に達してしまい、すでに新規ユーザーが登録するのは難しい状態になっています。
また、そのような状態になっているためか、事実上開発が終了したような形になっており、ここ暫くの間一切のアップデートがされておりません。

ですが、私のTwitterライフはJanetter無しには語れないというほど、ずっとJanetterでTwitterをしてきた身です。これを手放すわけにはなかなか行かず、未だに使っております。

はい、そしてこのソフト、どうもChromeとJavaScriptベースでできているみたいなんですね。
詳しくは私もわかっていないのですが、そのため、JavaScriptのプラグインを動かす機能があります。

しかし、プラグイン作製のチュートリアルがあるわけでもなく、ちょっとしたWikiがある程度でChromeやJavaScriptの開発経験が皆無な私にとってはまさに手探り状態。ですが、見よう見まねでなんとか作り上げました。

(function(jn){
    $('.tweet-button')    
        .before(
            $('<a class="button" id="totsuzen_no_shi" style="float:right; width: 70px; height:17px; font-weight: bold; line-height:1.5em; margin: 3px 0 2px 3px;">突然の死</a>')
        );
    $('#totsuzen_no_shi').click(function(){
        var lines = String($('#tweet-edit-container > .expanded textarea').val()).trim2().split('\n');
        var lengths = [];    //各行の文字列の長さ
        for(var i = 0; i < lines.length; i++) {
            var length = 0;
            for(var j = 0; j < lines[i].length; j++) {
                var c = lines[i].charAt(j).charCodeAt(0);
                
                if((c >= 0x0 && c < 0x81) || (c == 0xf8f0) || (c >= 0xff61 && c < 0xffa0) || (c >= 0xf8f1 && c < 0xf8f4))
                    length += 0.5;    //半角だ
                else
                    length += 1;
            }
            lengths.push(length);
        }

        var maxlength = Math.max.apply(null, lengths);    //行の長さの最大値

        var totsuzen = '_';
        for(var i = 0; i < maxlength + 2; i++)
            totsuzen += '人';
        totsuzen += '_\n';

        for(var i = 0; i < lines.length; i++) {
            totsuzen += '> ' + lines[i];
            for(var j = 0; j < maxlength - lengths[i]; j++)
                totsuzen += ' ';
            totsuzen += ' <\n';
        }

        totsuzen += ' ̄Y';
        for(var i = 0; i < ((maxlength + 2) * 1.4 - 1) / 2; i++)
            totsuzen += '^Y';
        totsuzen += ' ̄';

        jn.editor._normalTweetBox(totsuzen, false);

        return false;
    });
})(janet);

totsuzen_no_shiというidのボタンを定義し、そのクリック時のイベントを書く形で作っています。
JavaScriptはほとんど開発の経験が無いので、頭が良いコードを書くより動くコードを書くことを前提に作っています。

まずは、冒頭でツイート欄の内容を取得し、それを改行コードでsplitして行ごとに配列としています。
そして、その各行の文字数を取得していますが、ここで、文字コードを判別して全角文字は1文字、半角文字は0.5文字としています。そもそもJanetterのフォントは等幅フォントではないのでこういった書き方はあまりよろしくないのかもしれませんが、実際に表示される文字幅を取得する方法がわからないので仕方ないです。

続いて、その各行の文字数の最大値に合わせて人やY^を並べていっています。それだけです。

最後は_normalTweetBox関数を呼び出して表示内容を更新しています。
なんていうか、先頭にアンダーバーを付けた関数名なあたり、プライベートにしたい感がめっちゃある関数ですが、仕方ない、これを使うしかないので使っています。
他にshowTweetBoxという関数がありますが、これはすでにツイート欄に文字列があった場合、下書きに保存するか確認するダイアログを出してくるので鬱陶しいです。中の文字列に文字を付け足してるだけなのにわざわざ下書きに保存する奴なんていないわ!というわけで、この関数は使うのをやめました。

はい、そんな感じでとりあえず形になっています。

Janetterでこのプラグインを使う場合は、このコードをコピペして適当なファイル(例えばtotsuzen_no_shi.jsなど)にUTF-8として保存し、C:\Program Files (x86)などのフォルダの中にあるJanetter2\Theme\Common\js\pluginsフォルダに突っ込んでJanetterを再起動したらおkです。


こんな風にツイート欄に突然の死ボタンが現れ、それを押すたびにツイート欄の内容をどんどん人とY^で囲っていってくれます。(クソネミキャッスルボタンはまた別のプラグインです)

ぜひJanetterユーザーはお試しあれ。

0 件のコメント:

コメントを投稿