WordPress.org

Make WordPress Core

Changeset 6590


Ignore:
Timestamp:
01/10/08 17:35:48 (6 years ago)
Author:
ryan
Message:

Eliminate duplication in and minify jquery.schedule.js. fixes #5620

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/js/jquery/jquery.schedule.js

    r6546 r6590  
    1 /* 
    2 **  jquery.schedule.js -- jQuery plugin for scheduled/deferred actions 
    3 **  Copyright (c) 2007 Ralf S. Engelschall <rse@engelschall.com>  
    4 **  Licensed under GPL <http://www.gnu.org/licenses/gpl.txt> 
    5 ** 
    6 **  $LastChangedDate$ 
    7 **  $LastChangedRevision$ 
    8 */ 
    91 
    10 /* 
    11  *  <div id="button">TEST BUTTON</div> 
    12  *  <div id="test"></div> 
    13  * 
    14  *  <script type="text/javascript"> 
    15  *     $(document).ready( 
    16  *     function(){ 
    17  *         $('#button').click(function () { 
    18  *             $(this).css("color", "blue").schedule(2000, function (x) { 
    19  *                 $(this).css("color", "red"); 
    20  *                 $("#test").html("test: x = " + x); 
    21  *             }, 42); 
    22  *         }); 
    23  *     }); 
    24  *  </script> 
    25  */ 
    26  
    27 (function($) { 
    28  
    29     /*  object constructor  */ 
    30     $.scheduler = function () { 
    31         this.bucket = {}; 
    32         return; 
    33     }; 
    34  
    35     /*  object methods  */ 
    36     $.scheduler.prototype = { 
    37         /*  schedule a task  */ 
    38         schedule: function () { 
    39             /*  schedule context with default parameters */ 
    40             var ctx = { 
    41                 "id":         null,         /* unique identifier of high-level schedule */ 
    42                 "time":       1000,         /* time in milliseconds after which the task is run */ 
    43                 "repeat":     false,        /* whether schedule should be automatically repeated */ 
    44                 "protect":    false,        /* whether schedule should be protected from double scheduling */ 
    45                 "obj":        null,         /* function context object ("this") */ 
    46                 "func":       function(){}, /* function to call */ 
    47                 "args":       []            /* function arguments to pass */ 
    48             }; 
    49  
    50             /*  helper function: portable checking whether something is a function  */ 
    51             function _isfn (fn) { 
    52                 return ( 
    53                        !!fn 
    54                     && typeof fn != "string" 
    55                     && typeof fn[0] == "undefined" 
    56                     && RegExp("function", "i").test(fn + "") 
    57                 ); 
    58             }; 
    59              
    60             /*  parse arguments into context parameters (part 1/4): 
    61                 detect an override object (special case to support jQuery method) */ 
    62             var i = 0; 
    63             var override = false; 
    64             if (typeof arguments[i] == "object" && arguments.length > 1) { 
    65                 override = true; 
    66                 i++; 
    67             } 
    68  
    69             /*  parse arguments into context parameters (part 2/4): 
    70                 support the flexible way of an associated array */ 
    71             if (typeof arguments[i] == "object") { 
    72                 for (var option in arguments[i]) 
    73                     if (typeof ctx[option] != "undefined") 
    74                         ctx[option] = arguments[i][option]; 
    75                 i++; 
    76             } 
    77  
    78             /*  parse arguments into context parameters (part 3/4): 
    79                 support: schedule([time [, repeat], ]{{obj, methodname} | func}[, arg, ...]); */ 
    80             if (   typeof arguments[i] == "number" 
    81                 || (   typeof arguments[i] == "string"  
    82                     && arguments[i].match(RegExp("^[0-9]+[smhdw]$")))) 
    83                 ctx["time"] = arguments[i++]; 
    84             if (typeof arguments[i] == "boolean") 
    85                 ctx["repeat"] = arguments[i++]; 
    86             if (typeof arguments[i] == "boolean") 
    87                 ctx["protect"] = arguments[i++]; 
    88             if (   typeof arguments[i] == "object" 
    89                 && typeof arguments[i+1] == "string" 
    90                 && _isfn(arguments[i][arguments[i+1]])) { 
    91                 ctx["obj"] = arguments[i++]; 
    92                 ctx["func"] = arguments[i++]; 
    93             } 
    94             else if (   typeof arguments[i] != "undefined" 
    95                      && (   _isfn(arguments[i])  
    96                          || typeof arguments[i] == "string")) 
    97                 ctx["func"] = arguments[i++]; 
    98             while (typeof arguments[i] != "undefined") 
    99                 ctx["args"].push(arguments[i++]); 
    100  
    101             /*  parse arguments into context parameters (part 4/4): 
    102                 apply parameters from override object */ 
    103             if (override) { 
    104                 if (typeof arguments[1] == "object") { 
    105                     for (var option in arguments[0]) 
    106                         if (   typeof ctx[option] != "undefined" 
    107                             && typeof arguments[1][option] == "undefined") 
    108                             ctx[option] = arguments[0][option]; 
    109                 } 
    110                 else { 
    111                     for (var option in arguments[0]) 
    112                         if (typeof ctx[option] != "undefined") 
    113                             ctx[option] = arguments[0][option]; 
    114                 } 
    115                 i++; 
    116             } 
    117  
    118             /*  annotate context with internals */ 
    119             ctx["_scheduler"] = this; /* internal: back-reference to scheduler object */ 
    120             ctx["_handle"]    = null; /* internal: unique handle of low-level task */ 
    121  
    122             /*  determine time value in milliseconds */ 
    123             var match = String(ctx["time"]).match(RegExp("^([0-9]+)([smhdw])$")); 
    124             if (match && match[0] != "undefined" && match[1] != "undefined") 
    125                 ctx["time"] = String(parseInt(match[1]) * 
    126                     { s: 1000, m: 1000*60, h: 1000*60*60, 
    127                       d: 1000*60*60*24, w: 1000*60*60*24*7 }[match[2]]); 
    128  
    129             /*  determine unique identifier of task  */ 
    130             if (ctx["id"] == null) 
    131                 ctx["id"] = (  String(ctx["repeat"])  + ":" 
    132                              + String(ctx["protect"]) + ":" 
    133                              + String(ctx["time"])    + ":" 
    134                              + String(ctx["obj"])     + ":" 
    135                              + String(ctx["func"])    + ":" 
    136                              + String(ctx["args"])         ); 
    137  
    138             /*  optionally protect from duplicate calls  */ 
    139             if (ctx["protect"]) 
    140                 if (typeof this.bucket[ctx["id"]] != "undefined") 
    141                     return this.bucket[ctx["id"]]; 
    142  
    143             /*  support execution of methods by name and arbitrary scripts  */ 
    144             if (!_isfn(ctx["func"])) { 
    145                 if (   ctx["obj"] != null 
    146                     && typeof ctx["obj"] == "object" 
    147                     && typeof ctx["func"] == "string" 
    148                     && _isfn(ctx["obj"][ctx["func"]])) 
    149                     /*  method by name  */ 
    150                     ctx["func"] = ctx["obj"][ctx["func"]]; 
    151                 else 
    152                     /*  arbitrary script  */ 
    153                     ctx["func"] = eval("function () { " + ctx["func"] + " }"); 
    154             } 
    155  
    156             /*  pass-through to internal scheduling operation  */ 
    157             ctx["_handle"] = this._schedule(ctx); 
    158  
    159             /*  store context into bucket of scheduler object  */ 
    160             this.bucket[ctx["id"]] = ctx; 
    161  
    162             /*  return context  */ 
    163             return ctx; 
    164         }, 
    165  
    166         /*  re-schedule a task  */ 
    167         reschedule: function (ctx) { 
    168             if (typeof ctx == "string") 
    169                 ctx = this.bucket[ctx]; 
    170  
    171             /*  pass-through to internal scheduling operation  */ 
    172             ctx["_handle"] = this._schedule(ctx); 
    173  
    174             /*  return context  */ 
    175             return ctx; 
    176         }, 
    177  
    178         /*  internal scheduling operation  */ 
    179         _schedule: function (ctx) { 
    180             /*  closure to act as the call trampoline function  */ 
    181             var trampoline = function () { 
    182                 /*  jump into function  */ 
    183                 var obj = (ctx["obj"] != null ? ctx["obj"] : ctx); 
    184                 (ctx["func"]).apply(obj, ctx["args"]); 
    185  
    186                 /*  either repeat scheduling and keep in bucket or 
    187                     just stop scheduling and delete from scheduler bucket  */ 
    188                 if (   /* not cancelled from inside... */ 
    189                        typeof (ctx["_scheduler"]).bucket[ctx["id"]] != "undefined" 
    190                     && /* ...and repeating requested */ 
    191                        ctx["repeat"]) 
    192                     (ctx["_scheduler"])._schedule(ctx); 
    193                 else 
    194                     delete (ctx["_scheduler"]).bucket[ctx["id"]]; 
    195             }; 
    196  
    197             /*  schedule task and return handle  */ 
    198             return setTimeout(trampoline, ctx["time"]); 
    199         }, 
    200  
    201         /*  cancel a scheduled task  */ 
    202         cancel: function (ctx) { 
    203             if (typeof ctx == "string") 
    204                 ctx = this.bucket[ctx]; 
    205  
    206             /*  cancel scheduled task  */ 
    207             if (typeof ctx == "object") { 
    208                 clearTimeout(ctx["_handle"]); 
    209                 delete this.bucket[ctx["id"]]; 
    210             } 
    211         } 
    212     }; 
    213  
    214     /* integrate a global instance of the scheduler into the global jQuery object */ 
    215     $.extend({ 
    216         scheduler$: new $.scheduler(), 
    217         schedule:   function () { return $.scheduler$.schedule.apply  ($.scheduler$, arguments) }, 
    218         reschedule: function () { return $.scheduler$.reschedule.apply($.scheduler$, arguments) }, 
    219         cancel:     function () { return $.scheduler$.cancel.apply    ($.scheduler$, arguments) } 
    220     }); 
    221  
    222     /* integrate scheduling convinience method into all jQuery objects */ 
    223     $.fn.extend({ 
    224         schedule: function () { 
    225             var a = [ {} ]; 
    226             for (var i = 0; i < arguments.length; i++) 
    227                 a.push(arguments[i]); 
    228             return this.each(function () { 
    229                 a[0] = { "id": this, "obj": this }; 
    230                 return $.schedule.apply($, a); 
    231             }); 
    232         } 
    233     }); 
    234  
    235 })(jQuery); 
    236  
    237 /* 
    238 **  jquery.schedule.js -- jQuery plugin for scheduled/deferred actions 
    239 **  Copyright (c) 2007 Ralf S. Engelschall <rse@engelschall.com>  
    240 **  Licensed under GPL <http://www.gnu.org/licenses/gpl.txt> 
    241 ** 
    242 **  $LastChangedDate$ 
    243 **  $LastChangedRevision$ 
    244 */ 
    245  
    246 /* 
    247  *  <div id="button">TEST BUTTON</div> 
    248  *  <div id="test"></div> 
    249  * 
    250  *  <script type="text/javascript"> 
    251  *     $(document).ready( 
    252  *     function(){ 
    253  *         $('#button').click(function () { 
    254  *             $(this).css("color", "blue").schedule(2000, function (x) { 
    255  *                 $(this).css("color", "red"); 
    256  *                 $("#test").html("test: x = " + x); 
    257  *             }, 42); 
    258  *         }); 
    259  *     }); 
    260  *  </script> 
    261  */ 
    262  
    263 (function($) { 
    264  
    265     /*  object constructor  */ 
    266     $.scheduler = function () { 
    267         this.bucket = {}; 
    268         return; 
    269     }; 
    270  
    271     /*  object methods  */ 
    272     $.scheduler.prototype = { 
    273         /*  schedule a task  */ 
    274         schedule: function () { 
    275             /*  schedule context with default parameters */ 
    276             var ctx = { 
    277                 "id":         null,         /* unique identifier of high-level schedule */ 
    278                 "time":       1000,         /* time in milliseconds after which the task is run */ 
    279                 "repeat":     false,        /* whether schedule should be automatically repeated */ 
    280                 "protect":    false,        /* whether schedule should be protected from double scheduling */ 
    281                 "obj":        null,         /* function context object ("this") */ 
    282                 "func":       function(){}, /* function to call */ 
    283                 "args":       []            /* function arguments to pass */ 
    284             }; 
    285  
    286             /*  helper function: portable checking whether something is a function  */ 
    287             function _isfn (fn) { 
    288                 return ( 
    289                        !!fn 
    290                     && typeof fn != "string" 
    291                     && typeof fn[0] == "undefined" 
    292                     && RegExp("function", "i").test(fn + "") 
    293                 ); 
    294             }; 
    295              
    296             /*  parse arguments into context parameters (part 1/4): 
    297                 detect an override object (special case to support jQuery method) */ 
    298             var i = 0; 
    299             var override = false; 
    300             if (typeof arguments[i] == "object" && arguments.length > 1) { 
    301                 override = true; 
    302                 i++; 
    303             } 
    304  
    305             /*  parse arguments into context parameters (part 2/4): 
    306                 support the flexible way of an associated array */ 
    307             if (typeof arguments[i] == "object") { 
    308                 for (var option in arguments[i]) 
    309                     if (typeof ctx[option] != "undefined") 
    310                         ctx[option] = arguments[i][option]; 
    311                 i++; 
    312             } 
    313  
    314             /*  parse arguments into context parameters (part 3/4): 
    315                 support: schedule([time [, repeat], ]{{obj, methodname} | func}[, arg, ...]); */ 
    316             if (   typeof arguments[i] == "number" 
    317                 || (   typeof arguments[i] == "string"  
    318                     && arguments[i].match(RegExp("^[0-9]+[smhdw]$")))) 
    319                 ctx["time"] = arguments[i++]; 
    320             if (typeof arguments[i] == "boolean") 
    321                 ctx["repeat"] = arguments[i++]; 
    322             if (typeof arguments[i] == "boolean") 
    323                 ctx["protect"] = arguments[i++]; 
    324             if (   typeof arguments[i] == "object" 
    325                 && typeof arguments[i+1] == "string" 
    326                 && _isfn(arguments[i][arguments[i+1]])) { 
    327                 ctx["obj"] = arguments[i++]; 
    328                 ctx["func"] = arguments[i++]; 
    329             } 
    330             else if (   typeof arguments[i] != "undefined" 
    331                      && (   _isfn(arguments[i])  
    332                          || typeof arguments[i] == "string")) 
    333                 ctx["func"] = arguments[i++]; 
    334             while (typeof arguments[i] != "undefined") 
    335                 ctx["args"].push(arguments[i++]); 
    336  
    337             /*  parse arguments into context parameters (part 4/4): 
    338                 apply parameters from override object */ 
    339             if (override) { 
    340                 if (typeof arguments[1] == "object") { 
    341                     for (var option in arguments[0]) 
    342                         if (   typeof ctx[option] != "undefined" 
    343                             && typeof arguments[1][option] == "undefined") 
    344                             ctx[option] = arguments[0][option]; 
    345                 } 
    346                 else { 
    347                     for (var option in arguments[0]) 
    348                         if (typeof ctx[option] != "undefined") 
    349                             ctx[option] = arguments[0][option]; 
    350                 } 
    351                 i++; 
    352             } 
    353  
    354             /*  annotate context with internals */ 
    355             ctx["_scheduler"] = this; /* internal: back-reference to scheduler object */ 
    356             ctx["_handle"]    = null; /* internal: unique handle of low-level task */ 
    357  
    358             /*  determine time value in milliseconds */ 
    359             var match = String(ctx["time"]).match(RegExp("^([0-9]+)([smhdw])$")); 
    360             if (match && match[0] != "undefined" && match[1] != "undefined") 
    361                 ctx["time"] = String(parseInt(match[1]) * 
    362                     { s: 1000, m: 1000*60, h: 1000*60*60, 
    363                       d: 1000*60*60*24, w: 1000*60*60*24*7 }[match[2]]); 
    364  
    365             /*  determine unique identifier of task  */ 
    366             if (ctx["id"] == null) 
    367                 ctx["id"] = (  String(ctx["repeat"])  + ":" 
    368                              + String(ctx["protect"]) + ":" 
    369                              + String(ctx["time"])    + ":" 
    370                              + String(ctx["obj"])     + ":" 
    371                              + String(ctx["func"])    + ":" 
    372                              + String(ctx["args"])         ); 
    373  
    374             /*  optionally protect from duplicate calls  */ 
    375             if (ctx["protect"]) 
    376                 if (typeof this.bucket[ctx["id"]] != "undefined") 
    377                     return this.bucket[ctx["id"]]; 
    378  
    379             /*  support execution of methods by name and arbitrary scripts  */ 
    380             if (!_isfn(ctx["func"])) { 
    381                 if (   ctx["obj"] != null 
    382                     && typeof ctx["obj"] == "object" 
    383                     && typeof ctx["func"] == "string" 
    384                     && _isfn(ctx["obj"][ctx["func"]])) 
    385                     /*  method by name  */ 
    386                     ctx["func"] = ctx["obj"][ctx["func"]]; 
    387                 else 
    388                     /*  arbitrary script  */ 
    389                     ctx["func"] = eval("function () { " + ctx["func"] + " }"); 
    390             } 
    391  
    392             /*  pass-through to internal scheduling operation  */ 
    393             ctx["_handle"] = this._schedule(ctx); 
    394  
    395             /*  store context into bucket of scheduler object  */ 
    396             this.bucket[ctx["id"]] = ctx; 
    397  
    398             /*  return context  */ 
    399             return ctx; 
    400         }, 
    401  
    402         /*  re-schedule a task  */ 
    403         reschedule: function (ctx) { 
    404             if (typeof ctx == "string") 
    405                 ctx = this.bucket[ctx]; 
    406  
    407             /*  pass-through to internal scheduling operation  */ 
    408             ctx["_handle"] = this._schedule(ctx); 
    409  
    410             /*  return context  */ 
    411             return ctx; 
    412         }, 
    413  
    414         /*  internal scheduling operation  */ 
    415         _schedule: function (ctx) { 
    416             /*  closure to act as the call trampoline function  */ 
    417             var trampoline = function () { 
    418                 /*  jump into function  */ 
    419                 var obj = (ctx["obj"] != null ? ctx["obj"] : ctx); 
    420                 (ctx["func"]).apply(obj, ctx["args"]); 
    421  
    422                 /*  either repeat scheduling and keep in bucket or 
    423                     just stop scheduling and delete from scheduler bucket  */ 
    424                 if (   /* not cancelled from inside... */ 
    425                        typeof (ctx["_scheduler"]).bucket[ctx["id"]] != "undefined" 
    426                     && /* ...and repeating requested */ 
    427                        ctx["repeat"]) 
    428                     (ctx["_scheduler"])._schedule(ctx); 
    429                 else 
    430                     delete (ctx["_scheduler"]).bucket[ctx["id"]]; 
    431             }; 
    432  
    433             /*  schedule task and return handle  */ 
    434             return setTimeout(trampoline, ctx["time"]); 
    435         }, 
    436  
    437         /*  cancel a scheduled task  */ 
    438         cancel: function (ctx) { 
    439             if (typeof ctx == "string") 
    440                 ctx = this.bucket[ctx]; 
    441  
    442             /*  cancel scheduled task  */ 
    443             if (typeof ctx == "object") { 
    444                 clearTimeout(ctx["_handle"]); 
    445                 delete this.bucket[ctx["id"]]; 
    446             } 
    447         } 
    448     }; 
    449  
    450     /* integrate a global instance of the scheduler into the global jQuery object */ 
    451     $.extend({ 
    452         scheduler$: new $.scheduler(), 
    453         schedule:   function () { return $.scheduler$.schedule.apply  ($.scheduler$, arguments) }, 
    454         reschedule: function () { return $.scheduler$.reschedule.apply($.scheduler$, arguments) }, 
    455         cancel:     function () { return $.scheduler$.cancel.apply    ($.scheduler$, arguments) } 
    456     }); 
    457  
    458     /* integrate scheduling convinience method into all jQuery objects */ 
    459     $.fn.extend({ 
    460         schedule: function () { 
    461             var a = [ {} ]; 
    462             for (var i = 0; i < arguments.length; i++) 
    463                 a.push(arguments[i]); 
    464             return this.each(function () { 
    465                 a[0] = { "id": this, "obj": this }; 
    466                 return $.schedule.apply($, a); 
    467             }); 
    468         } 
    469     }); 
    470  
    471 })(jQuery); 
    472  
    473 /* 
    474 **  jquery.schedule.js -- jQuery plugin for scheduled/deferred actions 
    475 **  Copyright (c) 2007 Ralf S. Engelschall <rse@engelschall.com>  
    476 **  Licensed under GPL <http://www.gnu.org/licenses/gpl.txt> 
    477 ** 
    478 **  $LastChangedDate$ 
    479 **  $LastChangedRevision$ 
    480 */ 
    481  
    482 /* 
    483  *  <div id="button">TEST BUTTON</div> 
    484  *  <div id="test"></div> 
    485  * 
    486  *  <script type="text/javascript"> 
    487  *     $(document).ready( 
    488  *     function(){ 
    489  *         $('#button').click(function () { 
    490  *             $(this).css("color", "blue").schedule(2000, function (x) { 
    491  *                 $(this).css("color", "red"); 
    492  *                 $("#test").html("test: x = " + x); 
    493  *             }, 42); 
    494  *         }); 
    495  *     }); 
    496  *  </script> 
    497  */ 
    498  
    499 (function($) { 
    500  
    501     /*  object constructor  */ 
    502     $.scheduler = function () { 
    503         this.bucket = {}; 
    504         return; 
    505     }; 
    506  
    507     /*  object methods  */ 
    508     $.scheduler.prototype = { 
    509         /*  schedule a task  */ 
    510         schedule: function () { 
    511             /*  schedule context with default parameters */ 
    512             var ctx = { 
    513                 "id":         null,         /* unique identifier of high-level schedule */ 
    514                 "time":       1000,         /* time in milliseconds after which the task is run */ 
    515                 "repeat":     false,        /* whether schedule should be automatically repeated */ 
    516                 "protect":    false,        /* whether schedule should be protected from double scheduling */ 
    517                 "obj":        null,         /* function context object ("this") */ 
    518                 "func":       function(){}, /* function to call */ 
    519                 "args":       []            /* function arguments to pass */ 
    520             }; 
    521  
    522             /*  helper function: portable checking whether something is a function  */ 
    523             function _isfn (fn) { 
    524                 return ( 
    525                        !!fn 
    526                     && typeof fn != "string" 
    527                     && typeof fn[0] == "undefined" 
    528                     && RegExp("function", "i").test(fn + "") 
    529                 ); 
    530             }; 
    531              
    532             /*  parse arguments into context parameters (part 1/4): 
    533                 detect an override object (special case to support jQuery method) */ 
    534             var i = 0; 
    535             var override = false; 
    536             if (typeof arguments[i] == "object" && arguments.length > 1) { 
    537                 override = true; 
    538                 i++; 
    539             } 
    540  
    541             /*  parse arguments into context parameters (part 2/4): 
    542                 support the flexible way of an associated array */ 
    543             if (typeof arguments[i] == "object") { 
    544                 for (var option in arguments[i]) 
    545                     if (typeof ctx[option] != "undefined") 
    546                         ctx[option] = arguments[i][option]; 
    547                 i++; 
    548             } 
    549  
    550             /*  parse arguments into context parameters (part 3/4): 
    551                 support: schedule([time [, repeat], ]{{obj, methodname} | func}[, arg, ...]); */ 
    552             if (   typeof arguments[i] == "number" 
    553                 || (   typeof arguments[i] == "string"  
    554                     && arguments[i].match(RegExp("^[0-9]+[smhdw]$")))) 
    555                 ctx["time"] = arguments[i++]; 
    556             if (typeof arguments[i] == "boolean") 
    557                 ctx["repeat"] = arguments[i++]; 
    558             if (typeof arguments[i] == "boolean") 
    559                 ctx["protect"] = arguments[i++]; 
    560             if (   typeof arguments[i] == "object" 
    561                 && typeof arguments[i+1] == "string" 
    562                 && _isfn(arguments[i][arguments[i+1]])) { 
    563                 ctx["obj"] = arguments[i++]; 
    564                 ctx["func"] = arguments[i++]; 
    565             } 
    566             else if (   typeof arguments[i] != "undefined" 
    567                      && (   _isfn(arguments[i])  
    568                          || typeof arguments[i] == "string")) 
    569                 ctx["func"] = arguments[i++]; 
    570             while (typeof arguments[i] != "undefined") 
    571                 ctx["args"].push(arguments[i++]); 
    572  
    573             /*  parse arguments into context parameters (part 4/4): 
    574                 apply parameters from override object */ 
    575             if (override) { 
    576                 if (typeof arguments[1] == "object") { 
    577                     for (var option in arguments[0]) 
    578                         if (   typeof ctx[option] != "undefined" 
    579                             && typeof arguments[1][option] == "undefined") 
    580                             ctx[option] = arguments[0][option]; 
    581                 } 
    582                 else { 
    583                     for (var option in arguments[0]) 
    584                         if (typeof ctx[option] != "undefined") 
    585                             ctx[option] = arguments[0][option]; 
    586                 } 
    587                 i++; 
    588             } 
    589  
    590             /*  annotate context with internals */ 
    591             ctx["_scheduler"] = this; /* internal: back-reference to scheduler object */ 
    592             ctx["_handle"]    = null; /* internal: unique handle of low-level task */ 
    593  
    594             /*  determine time value in milliseconds */ 
    595             var match = String(ctx["time"]).match(RegExp("^([0-9]+)([smhdw])$")); 
    596             if (match && match[0] != "undefined" && match[1] != "undefined") 
    597                 ctx["time"] = String(parseInt(match[1]) * 
    598                     { s: 1000, m: 1000*60, h: 1000*60*60, 
    599                       d: 1000*60*60*24, w: 1000*60*60*24*7 }[match[2]]); 
    600  
    601             /*  determine unique identifier of task  */ 
    602             if (ctx["id"] == null) 
    603                 ctx["id"] = (  String(ctx["repeat"])  + ":" 
    604                              + String(ctx["protect"]) + ":" 
    605                              + String(ctx["time"])    + ":" 
    606                              + String(ctx["obj"])     + ":" 
    607                              + String(ctx["func"])    + ":" 
    608                              + String(ctx["args"])         ); 
    609  
    610             /*  optionally protect from duplicate calls  */ 
    611             if (ctx["protect"]) 
    612                 if (typeof this.bucket[ctx["id"]] != "undefined") 
    613                     return this.bucket[ctx["id"]]; 
    614  
    615             /*  support execution of methods by name and arbitrary scripts  */ 
    616             if (!_isfn(ctx["func"])) { 
    617                 if (   ctx["obj"] != null 
    618                     && typeof ctx["obj"] == "object" 
    619                     && typeof ctx["func"] == "string" 
    620                     && _isfn(ctx["obj"][ctx["func"]])) 
    621                     /*  method by name  */ 
    622                     ctx["func"] = ctx["obj"][ctx["func"]]; 
    623                 else 
    624                     /*  arbitrary script  */ 
    625                     ctx["func"] = eval("function () { " + ctx["func"] + " }"); 
    626             } 
    627  
    628             /*  pass-through to internal scheduling operation  */ 
    629             ctx["_handle"] = this._schedule(ctx); 
    630  
    631             /*  store context into bucket of scheduler object  */ 
    632             this.bucket[ctx["id"]] = ctx; 
    633  
    634             /*  return context  */ 
    635             return ctx; 
    636         }, 
    637  
    638         /*  re-schedule a task  */ 
    639         reschedule: function (ctx) { 
    640             if (typeof ctx == "string") 
    641                 ctx = this.bucket[ctx]; 
    642  
    643             /*  pass-through to internal scheduling operation  */ 
    644             ctx["_handle"] = this._schedule(ctx); 
    645  
    646             /*  return context  */ 
    647             return ctx; 
    648         }, 
    649  
    650         /*  internal scheduling operation  */ 
    651         _schedule: function (ctx) { 
    652             /*  closure to act as the call trampoline function  */ 
    653             var trampoline = function () { 
    654                 /*  jump into function  */ 
    655                 var obj = (ctx["obj"] != null ? ctx["obj"] : ctx); 
    656                 (ctx["func"]).apply(obj, ctx["args"]); 
    657  
    658                 /*  either repeat scheduling and keep in bucket or 
    659                     just stop scheduling and delete from scheduler bucket  */ 
    660                 if (   /* not cancelled from inside... */ 
    661                        typeof (ctx["_scheduler"]).bucket[ctx["id"]] != "undefined" 
    662                     && /* ...and repeating requested */ 
    663                        ctx["repeat"]) 
    664                     (ctx["_scheduler"])._schedule(ctx); 
    665                 else 
    666                     delete (ctx["_scheduler"]).bucket[ctx["id"]]; 
    667             }; 
    668  
    669             /*  schedule task and return handle  */ 
    670             return setTimeout(trampoline, ctx["time"]); 
    671         }, 
    672  
    673         /*  cancel a scheduled task  */ 
    674         cancel: function (ctx) { 
    675             if (typeof ctx == "string") 
    676                 ctx = this.bucket[ctx]; 
    677  
    678             /*  cancel scheduled task  */ 
    679             if (typeof ctx == "object") { 
    680                 clearTimeout(ctx["_handle"]); 
    681                 delete this.bucket[ctx["id"]]; 
    682             } 
    683         } 
    684     }; 
    685  
    686     /* integrate a global instance of the scheduler into the global jQuery object */ 
    687     $.extend({ 
    688         scheduler$: new $.scheduler(), 
    689         schedule:   function () { return $.scheduler$.schedule.apply  ($.scheduler$, arguments) }, 
    690         reschedule: function () { return $.scheduler$.reschedule.apply($.scheduler$, arguments) }, 
    691         cancel:     function () { return $.scheduler$.cancel.apply    ($.scheduler$, arguments) } 
    692     }); 
    693  
    694     /* integrate scheduling convinience method into all jQuery objects */ 
    695     $.fn.extend({ 
    696         schedule: function () { 
    697             var a = [ {} ]; 
    698             for (var i = 0; i < arguments.length; i++) 
    699                 a.push(arguments[i]); 
    700             return this.each(function () { 
    701                 a[0] = { "id": this, "obj": this }; 
    702                 return $.schedule.apply($, a); 
    703             }); 
    704         } 
    705     }); 
    706  
    707 })(jQuery); 
    708  
     2(function($){$.scheduler=function(){this.bucket={};return;};$.scheduler.prototype={schedule:function(){var ctx={"id":null,"time":1000,"repeat":false,"protect":false,"obj":null,"func":function(){},"args":[]};function _isfn(fn){return(!!fn&&typeof fn!="string"&&typeof fn[0]=="undefined"&&RegExp("function","i").test(fn+""));};var i=0;var override=false;if(typeof arguments[i]=="object"&&arguments.length>1){override=true;i++;} 
     3if(typeof arguments[i]=="object"){for(var option in arguments[i]) 
     4if(typeof ctx[option]!="undefined") 
     5ctx[option]=arguments[i][option];i++;} 
     6if(typeof arguments[i]=="number"||(typeof arguments[i]=="string"&&arguments[i].match(RegExp("^[0-9]+[smhdw]$")))) 
     7ctx["time"]=arguments[i++];if(typeof arguments[i]=="boolean") 
     8ctx["repeat"]=arguments[i++];if(typeof arguments[i]=="boolean") 
     9ctx["protect"]=arguments[i++];if(typeof arguments[i]=="object"&&typeof arguments[i+1]=="string"&&_isfn(arguments[i][arguments[i+1]])){ctx["obj"]=arguments[i++];ctx["func"]=arguments[i++];} 
     10else if(typeof arguments[i]!="undefined"&&(_isfn(arguments[i])||typeof arguments[i]=="string")) 
     11ctx["func"]=arguments[i++];while(typeof arguments[i]!="undefined") 
     12ctx["args"].push(arguments[i++]);if(override){if(typeof arguments[1]=="object"){for(var option in arguments[0]) 
     13if(typeof ctx[option]!="undefined"&&typeof arguments[1][option]=="undefined") 
     14ctx[option]=arguments[0][option];} 
     15else{for(var option in arguments[0]) 
     16if(typeof ctx[option]!="undefined") 
     17ctx[option]=arguments[0][option];} 
     18i++;} 
     19ctx["_scheduler"]=this;ctx["_handle"]=null;var match=String(ctx["time"]).match(RegExp("^([0-9]+)([smhdw])$"));if(match&&match[0]!="undefined"&&match[1]!="undefined") 
     20ctx["time"]=String(parseInt(match[1])*{s:1000,m:1000*60,h:1000*60*60,d:1000*60*60*24,w:1000*60*60*24*7}[match[2]]);if(ctx["id"]==null) 
     21ctx["id"]=(String(ctx["repeat"])+":" 
     22+String(ctx["protect"])+":" 
     23+String(ctx["time"])+":" 
     24+String(ctx["obj"])+":" 
     25+String(ctx["func"])+":" 
     26+String(ctx["args"]));if(ctx["protect"]) 
     27if(typeof this.bucket[ctx["id"]]!="undefined") 
     28return this.bucket[ctx["id"]];if(!_isfn(ctx["func"])){if(ctx["obj"]!=null&&typeof ctx["obj"]=="object"&&typeof ctx["func"]=="string"&&_isfn(ctx["obj"][ctx["func"]])) 
     29ctx["func"]=ctx["obj"][ctx["func"]];else 
     30ctx["func"]=eval("function () { "+ctx["func"]+" }");} 
     31ctx["_handle"]=this._schedule(ctx);this.bucket[ctx["id"]]=ctx;return ctx;},reschedule:function(ctx){if(typeof ctx=="string") 
     32ctx=this.bucket[ctx];ctx["_handle"]=this._schedule(ctx);return ctx;},_schedule:function(ctx){var trampoline=function(){var obj=(ctx["obj"]!=null?ctx["obj"]:ctx);(ctx["func"]).apply(obj,ctx["args"]);if(typeof(ctx["_scheduler"]).bucket[ctx["id"]]!="undefined"&&ctx["repeat"]) 
     33(ctx["_scheduler"])._schedule(ctx);else 
     34delete(ctx["_scheduler"]).bucket[ctx["id"]];};return setTimeout(trampoline,ctx["time"]);},cancel:function(ctx){if(typeof ctx=="string") 
     35ctx=this.bucket[ctx];if(typeof ctx=="object"){clearTimeout(ctx["_handle"]);delete this.bucket[ctx["id"]];}}};$.extend({scheduler$:new $.scheduler(),schedule:function(){return $.scheduler$.schedule.apply($.scheduler$,arguments)},reschedule:function(){return $.scheduler$.reschedule.apply($.scheduler$,arguments)},cancel:function(){return $.scheduler$.cancel.apply($.scheduler$,arguments)}});$.fn.extend({schedule:function(){var a=[{}];for(var i=0;i<arguments.length;i++) 
     36a.push(arguments[i]);return this.each(function(){a[0]={"id":this,"obj":this};return $.schedule.apply($,a);});}});})(jQuery); 
Note: See TracChangeset for help on using the changeset viewer.