Show
Ignore:
Timestamp:
07/15/08 23:07:10 (6 months ago)
Author:
cho45
Message:
  • jquery binding を更新
  • テストを追加
  • テストの skip とかを実装
  • サンプルに自動分割ループを追加
Location:
lang/javascript/jsdeferred/trunk
Files:
10 modified

Legend:

Unmodified
Added
Removed
  • lang/javascript/jsdeferred/trunk/binding/jquery.js

    r8469 r15859  
    11(function ($) { 
    22        $.deferred = Deferred; 
    3         // override jQuery Ajax functions 
    4         $.each(["get", "post"], function (n, i) { 
    5                 var orig = $[i]; 
    6                 $[i] = function (url, data, callback, type) { 
    7                         if (typeof data == "function") { 
    8                                 data = undefined; 
    9                                 callback = data; 
    10                         } 
    11                         var d = $.deferred(); 
    12                         orig(url, data, function (data) { 
    13                                 d.call(data); 
    14                         }, type); 
    15                         if (callback) d = d.next(callback); 
    16                         return d; 
     3 
     4        // override jQuery Ajax function for returning Deferred. 
     5        var orig_ajax = $.ajax; $.ajax = function (opts) { 
     6                var d = $.deferred(), orig = {}; 
     7                $.extend(orig, opts); 
     8 
     9                opts.success = function () { 
     10                        if (orig.success) orig.success.apply(this, arguments); 
     11                        d.call.apply(d, arguments); 
    1712                }; 
    18         }); 
     13 
     14                opts.error = function () { 
     15                        if (orig.error) orig.error.apply(this, arguments); 
     16                        d.fail.apply(d, arguments); 
     17                }; 
     18 
     19                orig_ajax(opts); 
     20 
     21                return d; 
     22        }; 
    1923})(jQuery); 
    2024 
  • lang/javascript/jsdeferred/trunk/jsdeferred.jquery.js

    r14855 r15859  
    6161return ret;} 
    6262} 
    63 return Deferred.call(_loop,o.begin);});};Deferred.register=function(name,fun){ 
     63if(o.begin<o.end)return Deferred.call(_loop,o.begin);});};Deferred.register=function(name,fun){ 
    6464this.prototype[name]=function(){ 
    6565return this.next(Deferred.wrap(fun).apply(null,arguments));};};Deferred.wrap=function(dfun){ 
     
    7070var n=list[i];obj[n]=Deferred[n];} 
    7171return Deferred;};(function($){ 
    72 $.deferred=Deferred;$.each(["get","post"],function(n,i){ 
    73 var orig=$[i];$[i]=function(url,data,callback,type){ 
    74 if(typeof data=="function"){ 
    75 data=undefined;callback=data;} 
    76 var d=$.deferred();orig(url,data,function(data){ 
    77 d.call(data);},type);if(callback)d=d.next(callback);return d;};});})(jQuery); 
     72$.deferred=Deferred;var orig_ajax=$.ajax;$.ajax=function(opts){ 
     73var d=$.deferred(),orig={};$.extend(orig,opts);opts.success=function(){ 
     74if(orig.success)orig.success.apply(this,arguments);d.call.apply(d,arguments);};opts.error=function(){ 
     75if(orig.error)orig.error.apply(this,arguments);d.fail.apply(d,arguments);};orig_ajax(opts);return d;};})(jQuery); 
  • lang/javascript/jsdeferred/trunk/jsdeferred.js

    r8480 r15859  
    287287                        } 
    288288                } 
    289                 return Deferred.call(_loop, o.begin); 
     289                if (o.begin < o.end) return Deferred.call(_loop, o.begin); 
    290290        }); 
    291291}; 
  • lang/javascript/jsdeferred/trunk/jsdeferred.mini.js

    r14855 r15859  
    6161return ret;} 
    6262} 
    63 return Deferred.call(_loop,o.begin);});};Deferred.register=function(name,fun){ 
     63if(o.begin<o.end)return Deferred.call(_loop,o.begin);});};Deferred.register=function(name,fun){ 
    6464this.prototype[name]=function(){ 
    6565return this.next(Deferred.wrap(fun).apply(null,arguments));};};Deferred.wrap=function(dfun){ 
  • lang/javascript/jsdeferred/trunk/jsdeferred.nodoc.js

    r14855 r15859  
    129129                        } 
    130130                } 
    131                 return Deferred.call(_loop, o.begin); 
     131                if (o.begin < o.end) return Deferred.call(_loop, o.begin); 
    132132        }); 
    133133}; 
  • lang/javascript/jsdeferred/trunk/jsdeferred.userscript.js

    r14856 r15859  
    133133                        } 
    134134                } 
    135                 return Deferred.call(_loop, o.begin); 
     135                if (o.begin < o.end) return Deferred.call(_loop, o.begin); 
    136136        }); 
    137137}; 
  • lang/javascript/jsdeferred/trunk/sample.html

    r4770 r15859  
    209209 
    210210function print (m) { $("#loop-code1").append("\n// "+m) } 
     211</pre> 
     212                                </div> 
     213                                <div clsss="section"> 
     214                                        <h2>Auto Divided Loop</h2> 
     215                                        <pre id="aloop-code" onclick="eval($(this).text());"> 
     216function aloop (n, f) { 
     217        var i   = 0; 
     218        var end = new Object; 
     219        var ret = null; 
     220        return Deferred.next(function () { 
     221                var t = (new Date()).getTime(); 
     222                try { 
     223                        do { 
     224                                ret = f(i) 
     225                                i++; 
     226                                if (i > n) throw end; 
     227                        } while ((new Date()).getTime() - t < 50); 
     228                        print("Devided: " + ((new Date()).getTime() - t) + "msec."); 
     229                        return Deferred.call(arguments.callee); 
     230                } catch (e) { 
     231                        if (e == end) { 
     232                                print("End"); 
     233                                return ret; 
     234                        } else { 
     235                                throw e; 
     236                        } 
     237                } 
     238        }); 
     239} 
     240 
     241aloop(100, function (n, o) { 
     242        print(n); 
     243        for (var i = 0; i < Math.pow(n, 2); i++) { 
     244                for (var j = n; j; j--); 
     245        } 
     246}); 
     247 
     248 
     249function print (m) { $("#aloop-code").append("\n// "+m) } 
    211250</pre> 
    212251                                </div> 
  • lang/javascript/jsdeferred/trunk/test-jsdeferred.js

    r8480 r15859  
    11$(function () { $.get("test-jsdeferred.js", {}, function (data) { 
     2Global = (function () { return this })(); 
    23 
    34// get tests number. 
     
    1415function show (msg, expect, result) { 
    1516        var okng = this; 
    16         testfuns.pop(); 
     17        if (okng == "skip") { 
     18                result = "skipped " + expect + "tests:" + msg; 
     19                while (expect--) testfuns.pop(); 
     20                expect = "skipped"; 
     21        } else { 
     22                testfuns.pop(); 
     23                expect = (typeof expect == "function") ? uneval(expect).match(/[^{]+/)+"..." : uneval(expect); 
     24                result = (typeof result == "function") ? uneval(result).match(/[^{]+/)+"..." : uneval(result); 
     25        } 
    1726        $("#nums").text([expects - testfuns.length, expects].join("/")); 
    18         expect = (typeof expect == "function") ? uneval(expect).match(/[^{]+/)+"..." : uneval(expect); 
    19         result = (typeof result == "function") ? uneval(result).match(/[^{]+/)+"..." : uneval(result); 
    2027        $("<tr class='"+okng+"'><td>"+[msg, expect, result].join("</td><td>")+"</td></tr>").appendTo(results); 
    2128        if (testfuns.length) { 
     
    4653function ok () { 
    4754        show.apply("ok", arguments); 
     55        return true; 
    4856} 
    4957 
    5058function ng () { 
    5159        show.apply("ng", arguments); 
     60        return true; 
     61} 
     62 
     63function skip () { 
     64        show.apply("skip", arguments); 
     65        return true; 
    5266} 
    5367 
     
    5872                show.apply("ng", arguments); 
    5973        } 
     74        return true; 
    6075} 
    6176 
     
    93108d.call(); 
    94109 
    95 // comment out for test on rhino 
    96 // msg("jQuery binding test") 
    97 // expect//("$.get deferred",     true, $.get(".")     instanceof $.deferred); 
    98 // expect//("$.post deferred",    true, $.post(".")    instanceof $.deferred); 
    99 // expect//("$.getJSON deferred", true, $.getJSON(".") instanceof $.deferred); 
    100110 
    101111// Start Main Test 
     
    354364next(function () { 
    355365        msg("Stack over flow test: check not waste stack."); 
     366        if (skip("too heavy", 1)) return; 
     367 
    356368        var num = 1000; 
    357369        return loop(num, function (n) { 
     
    368380next(function () { 
    369381        msg("Done Main."); 
     382}). 
     383next(function () { 
     384        msg("jQuery binding test") 
     385        if (Global.navigator) { 
     386                return next(function() { 
     387                        expect("$.ajax should return deferred",    true, $.ajax({ url: "." }) instanceof $.deferred); 
     388                        expect("$.get should return deferred",     true, $.get(".")           instanceof $.deferred); 
     389                        expect("$.post should return deferred",    true, $.post(".")          instanceof $.deferred); 
     390                        expect("$.getJSON should return deferred", true, $.getJSON(".")       instanceof $.deferred); 
     391                }). 
     392                next(function () { 
     393                        return $.ajax({ 
     394                                url : ".", 
     395                                success : function () { 
     396                                        ok("$.ajax#success"); 
     397                                }, 
     398                                error : function () { 
     399                                        ng("$.ajax#success"); 
     400                                } 
     401                        }). 
     402                        next(function () { 
     403                                ok("$.ajax#success"); 
     404                        }). 
     405                        error(function (e) { 
     406                                ng("$.ajax#success"); 
     407                        }); 
     408                }). 
     409                next(function () { 
     410                        return $.ajax({ 
     411                                url : "error-404" + Math.random(), 
     412                                success : function () { 
     413                                        ng("$.ajax#errro"); 
     414                                }, 
     415                                error : function () { 
     416                                        ok("$.ajax#error", "You may see error on console but it is correct."); 
     417                                } 
     418                        }). 
     419                        next(function () { 
     420                                ng("$.ajax#error"); 
     421                        }). 
     422                        error(function (e) { 
     423                                ok("$.ajax#error"); 
     424                        }); 
     425                }). 
     426                error(function (e) { 
     427                        ng("Error on jQuery Test:", "", e); 
     428                }); 
     429        } else { 
     430                skip("Not in browser", 8); 
     431        } 
     432}). 
     433next(function () { 
    370434        msg("Canceling Test:"); 
    371435        return next(function () { 
     
    381445next(function () { 
    382446        ng("Must not be called!! calceled"); 
     447}). 
     448error(function (e) { 
     449        ng(e); 
    383450}); 
    384451 
  • lang/javascript/jsdeferred/trunk/test-rhino.js

    r8480 r15859  
    1717function show (msg, expect, result) { 
    1818        var okng = this; 
    19         testfuns.pop(); 
    2019 
    2120        var out = []; 
    2221        out.push(color(46, "[", [expects - testfuns.length, expects].join("/"), "]")); 
     22        if (okng == "skip") { 
     23                out.push(" ", color(33, "skipped " + expect + "tests: " + msg)); 
     24                print(out.join("")); 
     25                while (expect--) testfuns.pop(); 
     26        } else 
    2327        if (okng == "ng") { 
     28                testfuns.pop(); 
    2429                expect = (typeof expect == "function") ? uneval(expect).match(/[^{]+/)+"..." : uneval(expect); 
    2530                result = (typeof result == "function") ? uneval(result).match(/[^{]+/)+"..." : uneval(result); 
     
    2833                quit(); 
    2934        } else { 
     35                testfuns.pop(); 
    3036                out.push(" ", color(32, "ok")); 
    3137                print(out.join("")); 
     
    3945function ok () { 
    4046        show.apply("ok", arguments); 
     47        return true; 
    4148} 
    4249 
    4350function ng () { 
    4451        show.apply("ng", arguments); 
     52        return true; 
     53} 
     54 
     55function skip () { 
     56        show.apply("skip", arguments); 
     57        return true; 
    4558} 
    4659 
     
    5164                show.apply("ng", arguments); 
    5265        } 
     66        return true; 
    5367} 
    5468 
  • lang/javascript/jsdeferred/trunk/test.html

    r4770 r15859  
    4949                                background: #900; 
    5050                                color: #fff; 
     51                                font-weight: bold; 
     52                        } 
     53 
     54                        tr.skip { 
     55                                color: #fff; 
     56                                background: #d2b301; 
    5157                                font-weight: bold; 
    5258                        }