Código fuente de WordPress - jquery-plugins (jquery.schedule.js)

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	*/
9	
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	

Contacte con nosotros
¿No puede leer el tutorial? Póngase en contacto con nosotros para obtener una respuesta gratuita. Ayuda gratuita para sitios personales y de pequeñas empresas
Servicio de atención al cliente WeChat
Servicio de atención al cliente WeChat
Tel: 020-2206-9892
QQ咨询:1025174874
(iii) Correo electrónico: info@361sale.com
Horario de trabajo: de lunes a viernes, de 9:30 a 18:30, días festivos libres
© Declaración de reproducción
Este artículo fue escrito por Harry
EL FIN
Si le gusta, apóyela.
felicitaciones0 compartir (alegrías, beneficios, privilegios, etc.) con los demás
comentarios compra de sofás

Por favor, inicie sesión para enviar un comentario

    Sin comentarios