2013年9月25日

jQuery.DeferredをMochiKit.Async.Deferredな感じに操作できるプラグイン作った

日頃、もちもちな Deferred に慣れてるせいか、jQuery.Deferred があまりに使い難いので作ってみました
JSDeferred でもよかったのですが、エラー処理が楽なので伝統を継承する感じで。
dojo や Closure Library などの Deferred は MochiKit.Async.Deferred からの派生なので、汎用性はあると思います。

機能概要

  • jQuery.Deferred 本体に機能を追加してるだけなので、本来の機能 .done() とかはそのまま使えて他のプラグインも普通に動く(と思う)
  • minify版 5KB とけっこう軽量
  • jQueryオブジェクトに async という関数オブジェクトが追加される
  • Deferred は、今までどおり var d = $.Deferred(); で生成
  • たぶん古い環境でも動く

Download

使い方

スクリプトを読み込みます
<script src="/path/to/jquery.async.js"></script>
or
<script src="/path/to/jquery.async.min.js"></script>

基本の Deferred チェイン:

var d = $.Deferred();
d.addCallback(function() {
    return 1;
}).addCallback(function(res) {
    console.log(res); // 1
});
d.callback();

succeed() を使った例:

$.async.succeed(1).addCallback(function(res) {
    return res + 1;
}).addCallback(function(res) {
    console.log(res); // 2
});

値の受け渡しと、エラー処理:

$.async(function() {
    return 1;
}).addCallback(function(res) {
    console.log(res); // 1
    throw new Error('error');
}).addCallback(function(res) {
    console.log('このメッセージは表示されない');
    return 'noop';
}).addErrback(function(err) {
    console.log(err); // error
    return 'hello';
}).addBoth(function(res) {
    console.log(res); // hello
});
$.async() は、引数の関数を非同期で実行して新しい Deferred チェインを作ります。JSDeferred でいう next() みたいな感じ。

基本的な使い方は GitHub に書いてありますので参考ください

addCallback() とか addErrback() などの 他の機能については MochiKit.Async と同じなのでリファレンスを参考ください

バグとか問題等ありましたら issues または、Twitter @polygon_planet までご報告ください

レポジトリ


2013年9月20日

TumblrでPhotosetをローカル保存する時、全画像を取得するTombfixパッチ

Firefox アドオン Tombfix (Tombloo fork) のパッチです。

機能概要

Tumblr dashboard から Photoset をリブログする時に、ローカルに保存も設定してた場合
Photoset の全画像をローカル保存するパッチです
(Photoset 1枚めのみ画像取得は本体にコミットされています)

TumblrでHighRes画像を取得するTombfixパッチ と組み合わせるといいかもしれないです

パッチ (Download or Update):

インストール/アップデート:

上のパッチリンクを
右クリック→「Tombfix」→「Tombfixパッチのインストール」でインストール/アップデート

レポジトリ


※レポジトリ名とか tombloo のままになってますが、各パッチは tombfix で動作確認済みです

デスクトップに保存するmodelを追加するTombfixパッチ

Firefox アドオン Tombfix (Tombloo fork) のパッチです。

機能概要

ローカルのデスクトップに保存する model を追加します

てっとり早くデスクトップに保存したい時は tombfix 設定で Desktop を ON にして、どんどん share すると楽です

パッチ (Download or Update):

インストール/アップデート:

上のパッチリンクを
右クリック→「Tombfix」→「Tombfixパッチのインストール」でインストール/アップデート

レポジトリ


※レポジトリ名とか tombloo のままになってますが、各パッチは tombfix で動作確認済みです

TumblrでHighRes画像を取得するTombfixパッチ

Firefox アドオン Tombfix (Tombloo fork) のパッチです。

機能概要

Tumblr で画像をリブログする時に、High-Res 画像を取得します
High-Res がなければ通常の画像を取得します
主にローカル保存時に使われます

(この機能はオプション的な立ち位置なので本体に pull req しないでパッチにしてあります)

パッチ (Download or Update):

インストール/アップデート:

上のパッチリンクを
右クリック→「Tombfix」→「Tombfixパッチのインストール」でインストール/アップデート

レポジトリ



2013年9月16日

iPhone,iPodでalertが2回表示されちゃう

あいぽん、iPod touch とかで JavaScript の alert() が2回表示されちゃって
どうも非同期になってないようなので、以下のようにしたら直りました
window.alert = function() {
  var alert_ = window.alert;

  return function(msg) {
    setTimeout(function() {
      alert_(msg);
    }, 0);
  };
}();