2015年4月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
無料ブログはココログ

« 2014年8月 | トップページ | 2015年1月 »

2014年12月の2件の記事

2014年12月28日 (日)

ペン設定シールと、ストローク編集シールをアップデート

やっと時間ができたので

上記 2 シールを、enchant コマンド登録可能に修正しました。

対応方法は、前回の記事の通りです。

over head が問題になるほど頻用する手続きでもないので、関数をひとつ作ってその中に閉じ込めてしまいました。もし、流用したい人がいましたら、zip を展開した中の "miscUtil.js" の isAttached() 関数を参照ください。

今年の記事は、多分これで最終かな。だんだんアイディアが尽きてきてるので、来年はあんまり記事書けないかもしれないですが、あきらめずにもうしばらく遊んでいこうと思います。

ではでは。

2014年12月23日 (火)

古いシールを enchant コマンドに対応させる

enchant コマンド化できないシールがある !!!

MOONPhase を 3.0 に update しました。QR コードが使えたり、テレパシーとか、相当面白そうなんですが、どう使うか直ぐにはアイディアが出ません。正月の宿題になるのかも。

新機能の一つが、待望の "enchant コマンドの追加" です。ビバ、NO UI 。

喜び勇んで自作のシールを enchant コマンドに登録してみたのですが、動かないのがあるんですね。

最近よく使ってるのが、「ペン周りまとめて設定シール 」「NO UI っぽい編集シール」 なんですが(こんな感じ)、enchant コマンドに割り当てると、編集シールが動かない !!!

いじってると、なんとなくどこで引っかかってるのか想像がつくな、ってところで、検証用のコードを書いてみました。

検証用のコード

実動するシールは、[ここ]からダウンロードして下さい。hack.js だけの、簡単なシールです。


hack.js


importJS(["lib/MOON.js", "lib/enchant.js"], function() {

    enchant();

    function relDirectories( i ){
        var relURL = location.href;
        relURL = relURL.slice( relURL.search( /\/data\//i ) +1 );
        return relURL.split( "/" )[i];
    }

    var InfoUtil = {
        //MOONPhase v 2.8.0 での window.location に対応
        getStickerId: function(){ return relDirectories( 3 ); },
        getPageId: function(){ return relDirectories( 2 ); },
        getNoteId: function() { return relDirectories( 1 ); }
    };

    var sticker = Sticker.create();

    sticker.ondetach = function(event) {
        MOON.finish();
    };

    sticker.onattach = function(event) {
        MOON.finish();
    };

    sticker.ontap = function(event) {
        var id, info;

        id = InfoUtil.getStickerId();
        alert( id );
        try {
            info = MOON.getPaperJSON( id );
        } catch( e ) {
            alert( 'caught error' );
        }
        alert( info );
        MOON.finish();
    };

    sticker.register();
});

実験しましょう

このシールをダウンロードしてページに貼り付け、タップして実行すると、このような画面が順に表示されます。

Screenshot_20141223173504 Screenshot_20141223173517

これが従来の動作です。

次に、同じシールを enchant コマンドに割り当てて、enchant コマンドとして実行すると、以下のような画面遷移になります。

Screenshot_20141223173555 Screenshot_20141223173616 Screenshot_20141223173624

つまり、enchant コマンドとして実行すると、stickerId を取得できるので、ページの下に temporary にシール用の directory は作成されるものの、MOON.getPaperJSON() が失敗する、つまり、info.json は作成せずに実行されるようです。シールがページ上に貼り付けられないので、確かに info.json や strokeX.json は不要ですね。

error になるので、返り値は得られません。それまでに一度も代入されていない変数だと、値は undefined になります。

と、いうことで、よく使うシールを enchant コマンド対応に改修したいと思います。

対策はわかりました。(と思います)

既存のシールで、シール自体の info.json を参照しているコードがあれば、そこの error を捕まえる、あるいは戻り値が undefined であることをチェックして、その時はページ上にシールが張り付けられていないものとして動作させればよいわけです。

今週いっぱい働けば、年末休みに入りますので、今年中に改修してみたいですね。なにか追加の情報がつかめれば、またここで報告します。

« 2014年8月 | トップページ | 2015年1月 »