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

使い方

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

基本の Deferred チェイン:

  1. var d = $.Deferred();  
  2. d.addCallback(function() {  
  3.     return 1;  
  4. }).addCallback(function(res) {  
  5.     console.log(res); // 1  
  6. });  
  7. d.callback();  

succeed() を使った例:

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

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

  1. $.async(function() {  
  2.     return 1;  
  3. }).addCallback(function(res) {  
  4.     console.log(res); // 1  
  5.     throw new Error('error');  
  6. }).addCallback(function(res) {  
  7.     console.log('このメッセージは表示されない');  
  8.     return 'noop';  
  9. }).addErrback(function(err) {  
  10.     console.log(err); // error  
  11.     return 'hello';  
  12. }).addBoth(function(res) {  
  13.     console.log(res); // hello  
  14. });  
$.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回表示されちゃう

iPhone、iPod touch とかで JavaScript の alert() が2回表示されちゃって
どうも非同期になってないようなので、以下のようにしたら直りました
  1. window.alert = function() {  
  2.   var alert_ = window.alert;  
  3.   
  4.   return function(msg) {  
  5.     setTimeout(function() {  
  6.       alert_(msg);  
  7.     }, 0);  
  8.   };  
  9. }();