source: cows/branches/cows-vis/cows/pylons/project_templates/cows_server/+package+/public/js/yui/api/Queue.js.html @ 5259

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/cows/branches/cows-vis/cows/pylons/project_templates/cows_server/+package+/public/js/yui/api/Queue.js.html@5259
Revision 5259, 25.6 KB checked in by domlowe, 11 years ago (diff)

adding yui javascript

Line 
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
2<html>
3<head>
4        <title>API: queue   Queue.js  (YUI Library)</title>
5        <link rel="stylesheet" type="text/css" href="assets/api.css">
6    <script type="text/javascript" src="assets/api-js"></script>
7    <script type="text/javascript" src="assets/ac-js"></script>
8</head>
9
10<body id="yahoo-com">
11
12<div id="doc3" class="yui-t2">
13
14        <div id="hd">
15        <a href="http://developer.yahoo.com/yui/"><h1>Yahoo! UI Library</h1></a>
16        <h3>queue&nbsp; <span class="subtitle">3.0.0pr1</span></h3>
17        <p>
18        <a href="./index.html">Yahoo! UI Library</a> 
19            &gt; <a href="./module_queue.html">queue</a>
20               
21                 &gt; Queue.js (source view)
22            </p>
23
24
25        </div>
26
27        <div id="bd">
28                <div id="yui-main">
29                        <div class="yui-b">
30            <form name="yui-classopts-form">
31    <span id="classopts"><input type="checkbox" name="showprivate" id="showprivate" /> <label for="showprivate">Show Private</label></span>
32    <span id="classopts"><input type="checkbox" name="showprotected" id="showprotected" /> <label for="showprotected">Show Protected</label></span>
33    <span id="classopts"><input type="checkbox" name="showdeprecated" id="showdeprecated" /> <label for="showdeprecated">Show Deprecated</label></span>
34            </form>
35
36                    <div id="srcout">
37                        <style>
38                            #doc3 #classopts { display:none; }
39                        </style>
40<div class="highlight" ><pre><span class="c">/**</span>
41<span class="c"> * Mechanism to execute a series of callbacks in a non-blocking queue.  Each</span>
42<span class="c"> * callback is executed via setTimout unless configured with a negative</span>
43<span class="c"> * timeout, in which case it is run in blocking mode in the same execution</span>
44<span class="c"> * thread as the previous callback.  Callbacks can be function references or</span>
45<span class="c"> * object literals with the following keys:</span>
46<span class="c"> * &lt;ul&gt;</span>
47<span class="c"> *    &lt;li&gt;&lt;code&gt;fn&lt;/code&gt; - {Function} REQUIRED the callback function.&lt;/li&gt;</span>
48<span class="c"> *    &lt;li&gt;&lt;code&gt;timeout&lt;/code&gt; - {number} millisecond delay to wait after previous callback completion before executing this callback.  Negative values cause immediate blocking execution.  Default 0.&lt;/li&gt;</span>
49<span class="c"> *    &lt;li&gt;&lt;code&gt;until&lt;/code&gt; - {Function} boolean function executed before each iteration.  Return true to indicate callback completion.&lt;/li&gt;</span>
50<span class="c"> *    &lt;li&gt;&lt;code&gt;iterations&lt;/code&gt; - {Number} number of times to execute the callback before proceeding to the next callback in the queue. Incompatible with &lt;code&gt;until&lt;/code&gt;.&lt;/li&gt;</span>
51<span class="c"> * &lt;/ul&gt;</span>
52<span class="c"> *</span>
53<span class="c"> * @module queue</span>
54<span class="c"> * @class Queue</span>
55<span class="c"> * @constructor</span>
56<span class="c"> * @param callback* {Function|Object} Any number of callbacks to initialize the queue</span>
57<span class="c"> */</span>
58<span class="nx">Y</span><span class="o">.</span><span class="nx">Queue</span> <span class="o">=</span> <span class="k">function</span> <span class="o">()</span> <span class="o">{</span>
59    <span class="c">// Factory or Constructor</span>
60<span class="c"></span>    <span class="k">var</span> <span class="nx">me</span> <span class="o">=</span> <span class="k">this</span> <span class="k">instanceof</span> <span class="nx">Y</span><span class="o">.</span><span class="nx">Queue</span> <span class="o">?</span> <span class="k">this</span> <span class="o">:</span> <span class="k">new</span> <span class="nx">Y</span><span class="o">.</span><span class="nx">Queue</span><span class="o">();</span>
61
62    <span class="c">/**</span>
63<span class="c">     * The callback queue</span>
64<span class="c">     * @property q</span>
65<span class="c">     * @type {Array}</span>
66<span class="c">     * @protected</span>
67<span class="c">     */</span>
68    <span class="nx">me</span><span class="o">.</span><span class="nx">q</span> <span class="o">=</span> <span class="o">[];</span>
69
70    <span class="k">return</span> <span class="nx">me</span><span class="o">.</span><span class="nx">add</span><span class="o">.</span><span class="nx">apply</span><span class="o">(</span><span class="nx">me</span><span class="o">,</span><span class="nx">arguments</span><span class="o">);</span>
71<span class="o">};</span>
72
73<span class="nx">Y</span><span class="o">.</span><span class="nx">Queue</span><span class="o">.</span><span class="nx">prototype</span> <span class="o">=</span> <span class="o">{</span>
74    <span class="c">/**</span>
75<span class="c">     * Timeout id used to pause or stop execution and indicate the execution</span>
76<span class="c">     * state of the Queue.  0 indicates paused or stopped, negatives indicate</span>
77<span class="c">     * blocking execution, and positives indicate non-blocking execution.</span>
78<span class="c">     * @property id</span>
79<span class="c">     * @type {number}</span>
80<span class="c">     * @protected</span>
81<span class="c">     */</span>
82    <span class="nx">id</span>   <span class="o">:</span> <span class="m">0</span><span class="o">,</span>
83
84    <span class="c">/**</span>
85<span class="c">     * Execute the queue callbacks (also resumes paused Queue).</span>
86<span class="c">     * @method run</span>
87<span class="c">     * @return {Queue} the Queue instance</span>
88<span class="c">     */</span>
89    <span class="nx">run</span> <span class="o">:</span> <span class="k">function</span> <span class="o">()</span> <span class="o">{</span>
90        <span class="c">// Grab the first callback in the queue</span>
91<span class="c"></span>        <span class="k">var</span> <span class="nx">c</span>  <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">q</span><span class="o">[</span><span class="m">0</span><span class="o">],</span>
92            <span class="nx">fn</span><span class="o">;</span>
93
94        <span class="c">// If there is no callback in the queue or the Queue is currently</span>
95<span class="c"></span>        <span class="c">// in an execution mode, return</span>
96<span class="c"></span>        <span class="k">if</span> <span class="o">(!</span><span class="nx">c</span><span class="o">)</span> <span class="o">{</span>
97            <span class="c">/**</span>
98<span class="c">             * Event fired after the last queued callback is executed.  Not</span>
99<span class="c">             * fired if the Queue is stopped via q.stop().</span>
100<span class="c">             * @event end</span>
101<span class="c">             */</span>
102            <span class="k">this</span><span class="o">.</span><span class="nx">fire</span><span class="o">(</span><span class="s1">&#39;end&#39;</span><span class="o">);</span>
103            <span class="k">return</span> <span class="k">this</span><span class="o">;</span>
104        <span class="o">}</span> <span class="k">else</span> <span class="k">if</span> <span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">id</span><span class="o">)</span> <span class="o">{</span>
105            <span class="k">return</span> <span class="k">this</span><span class="o">;</span>
106        <span class="o">}</span>
107
108        <span class="nx">fn</span> <span class="o">=</span> <span class="nx">c</span><span class="o">.</span><span class="nx">fn</span> <span class="o">||</span> <span class="nx">c</span><span class="o">;</span>
109
110        <span class="k">if</span> <span class="o">(</span><span class="k">typeof</span> <span class="nx">fn</span> <span class="o">===</span> <span class="s1">&#39;function&#39;</span><span class="o">)</span> <span class="o">{</span>
111            <span class="k">var</span> <span class="nx">ms</span>   <span class="o">=</span> <span class="nx">c</span><span class="o">.</span><span class="nx">timeout</span> <span class="o">||</span> <span class="m">0</span><span class="o">,</span>
112                <span class="nx">me</span>   <span class="o">=</span> <span class="k">this</span><span class="o">;</span>
113
114            <span class="c">// Execute immediately if the callback timeout is negative.</span>
115<span class="c"></span>            <span class="k">if</span> <span class="o">(</span><span class="nx">ms</span> <span class="o">&lt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">{</span>
116                <span class="k">this</span><span class="o">.</span><span class="nx">id</span> <span class="o">=</span> <span class="nx">ms</span><span class="o">;</span>
117                <span class="k">if</span> <span class="o">(</span><span class="nx">c</span><span class="o">.</span><span class="nx">until</span><span class="o">)</span> <span class="o">{</span> <span class="c">// test .until condition</span>
118<span class="c"></span>                    <span class="k">for</span> <span class="o">(;!</span><span class="nx">c</span><span class="o">.</span><span class="nx">until</span><span class="o">();)</span> <span class="o">{</span>
119                        <span class="k">this</span><span class="o">.</span><span class="nx">_exec</span><span class="o">(</span><span class="nx">fn</span><span class="o">,</span><span class="nx">c</span><span class="o">);</span>
120                    <span class="o">}</span>
121                <span class="o">}</span> <span class="k">else</span> <span class="k">if</span> <span class="o">(</span><span class="nx">c</span><span class="o">.</span><span class="nx">iterations</span><span class="o">)</span> <span class="o">{</span> <span class="c">// test .iterations</span>
122<span class="c"></span>                    <span class="k">for</span> <span class="o">(;</span><span class="nx">c</span><span class="o">.</span><span class="nx">iterations</span><span class="o">--</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">;)</span> <span class="o">{</span>
123                        <span class="k">this</span><span class="o">.</span><span class="nx">_exec</span><span class="o">(</span><span class="nx">fn</span><span class="o">,</span><span class="nx">c</span><span class="o">);</span>
124                    <span class="o">}</span>
125                <span class="o">}</span> <span class="k">else</span> <span class="o">{</span> <span class="c">// single shot callback</span>
126<span class="c"></span>                    <span class="k">this</span><span class="o">.</span><span class="nx">_exec</span><span class="o">(</span><span class="nx">fn</span><span class="o">,</span><span class="nx">c</span><span class="o">);</span>
127                <span class="o">}</span>
128                <span class="k">this</span><span class="o">.</span><span class="nx">_shift</span><span class="o">();</span>
129                <span class="k">this</span><span class="o">.</span><span class="nx">id</span> <span class="o">=</span> <span class="m">0</span><span class="o">;</span>
130                <span class="k">return</span> <span class="k">this</span><span class="o">.</span><span class="nx">run</span><span class="o">();</span>
131            <span class="o">}</span> <span class="k">else</span> <span class="o">{</span>
132                <span class="k">if</span> <span class="o">(</span><span class="nx">c</span><span class="o">.</span><span class="nx">until</span><span class="o">)</span> <span class="o">{</span> <span class="c">// test .until condition</span>
133<span class="c"></span>                    <span class="k">if</span> <span class="o">(</span><span class="nx">c</span><span class="o">.</span><span class="nx">until</span><span class="o">())</span> <span class="o">{</span>
134                        <span class="c">// Move to the next callback</span>
135<span class="c"></span>                        <span class="k">this</span><span class="o">.</span><span class="nx">_shift</span><span class="o">();</span>
136                        <span class="k">return</span> <span class="k">this</span><span class="o">.</span><span class="nx">run</span><span class="o">();</span>
137                    <span class="o">}</span>
138                <span class="o">}</span> <span class="k">else</span> <span class="k">if</span> <span class="o">(!</span><span class="nx">c</span><span class="o">.</span><span class="nx">iterations</span> <span class="o">||</span> <span class="o">!--</span><span class="nx">c</span><span class="o">.</span><span class="nx">iterations</span><span class="o">)</span> <span class="o">{</span> <span class="c">// .iterations</span>
139<span class="c"></span>                    <span class="k">this</span><span class="o">.</span><span class="nx">_shift</span><span class="o">();</span>
140                <span class="o">}</span>
141
142                <span class="c">// Set to execute after the configured timeout</span>
143<span class="c"></span>                <span class="k">this</span><span class="o">.</span><span class="nx">id</span> <span class="o">=</span> <span class="nx">setTimeout</span><span class="o">(</span><span class="k">function</span> <span class="o">()</span> <span class="o">{</span>
144                    <span class="nx">me</span><span class="o">.</span><span class="nx">_exec</span><span class="o">(</span><span class="nx">fn</span><span class="o">,</span><span class="nx">c</span><span class="o">);</span>
145
146                    <span class="c">// Loop unless the Queue was paused from inside the callback</span>
147<span class="c"></span>                    <span class="k">if</span> <span class="o">(</span><span class="nx">me</span><span class="o">.</span><span class="nx">id</span><span class="o">)</span> <span class="o">{</span>
148                        <span class="c">// Indicate ready to run state</span>
149<span class="c"></span>                        <span class="nx">me</span><span class="o">.</span><span class="nx">id</span> <span class="o">=</span> <span class="m">0</span><span class="o">;</span>
150                        <span class="c">// Start the fun all over again</span>
151<span class="c"></span>                        <span class="nx">me</span><span class="o">.</span><span class="nx">run</span><span class="o">();</span>
152                    <span class="o">}</span>
153                <span class="o">},</span><span class="nx">ms</span><span class="o">);</span>
154            <span class="o">}</span>
155        <span class="o">}</span>
156
157        <span class="k">return</span> <span class="k">this</span><span class="o">;</span>
158    <span class="o">},</span>
159
160    <span class="c">/**</span>
161<span class="c">     * Executes the callback function</span>
162<span class="c">     * @method _exec</span>
163<span class="c">     * @param fn {Function} the function to execute</span>
164<span class="c">     * @param c {Object|Function} the callback as defined during add(c)</span>
165<span class="c">     * @protected</span>
166<span class="c">     */</span>
167    <span class="nx">_exec</span> <span class="o">:</span> <span class="k">function</span> <span class="o">(</span><span class="nx">fn</span><span class="o">,</span><span class="nx">c</span><span class="o">)</span> <span class="o">{</span>
168        <span class="c">/**</span>
169<span class="c">         * Fired before a callback is executed</span>
170<span class="c">         * @event beforeCallback</span>
171<span class="c">         * @param o {Object} Object literal with the following keys:</span>
172<span class="c">         * &lt;dl&gt;</span>
173<span class="c">         * &lt;dt&gt;fn&lt;/dt&gt;&lt;dd&gt;The function about to be executed&lt;/dd&gt;</span>
174<span class="c">         * &lt;dt&gt;callback&lt;/dt&gt;&lt;dd&gt;The callback as provided to &lt;code&gt;add(..)&lt;/code&gt;&lt;/dd&gt;</span>
175<span class="c">         * &lt;/dl&gt;</span>
176<span class="c">         */</span>
177        <span class="k">this</span><span class="o">.</span><span class="nx">fire</span><span class="o">(</span><span class="s1">&#39;beforeCallback&#39;</span><span class="o">,{</span><span class="nx">fn</span><span class="o">:</span><span class="nx">fn</span><span class="o">,</span><span class="nx">callback</span><span class="o">:</span><span class="nx">c</span><span class="o">});</span>
178
179        <span class="nx">fn</span><span class="o">.</span><span class="nx">call</span><span class="o">(</span><span class="k">this</span><span class="o">);</span>
180
181        <span class="c">/**</span>
182<span class="c">         * Fired before a callback is executed</span>
183<span class="c">         * @event afterCallback</span>
184<span class="c">         * @param o {Object} Object literal with the following keys:</span>
185<span class="c">         * &lt;dl&gt;</span>
186<span class="c">         * &lt;dt&gt;fn&lt;/dt&gt;&lt;dd&gt;The function just executed&lt;/dd&gt;</span>
187<span class="c">         * &lt;dt&gt;callback&lt;/dt&gt;&lt;dd&gt;The callback as provided to &lt;code&gt;add(..)&lt;/code&gt;&lt;/dd&gt;</span>
188<span class="c">         * &lt;/dl&gt;</span>
189<span class="c">         */</span>
190        <span class="k">this</span><span class="o">.</span><span class="nx">fire</span><span class="o">(</span><span class="s1">&#39;afterCallback&#39;</span><span class="o">,{</span><span class="nx">fn</span><span class="o">:</span><span class="nx">fn</span><span class="o">,</span><span class="nx">callback</span><span class="o">:</span><span class="nx">c</span><span class="o">});</span>
191    <span class="o">},</span>
192
193    <span class="c">/**</span>
194<span class="c">     * Shifts the first callback off the Queue</span>
195<span class="c">     * @method _shift</span>
196<span class="c">     * @private</span>
197<span class="c">     */</span>
198    <span class="nx">_shift</span> <span class="o">:</span> <span class="k">function</span> <span class="o">()</span> <span class="o">{</span>
199        <span class="c">/**</span>
200<span class="c">         * Fired after a callback is shifted from the Queue</span>
201<span class="c">         * @event shiftCallback</span>
202<span class="c">         * @param callback {Function|Object} The callback passed to &lt;code&gt;add(..)&lt;/code&gt;</span>
203<span class="c">         */</span>
204        <span class="k">this</span><span class="o">.</span><span class="nx">fire</span><span class="o">(</span><span class="s1">&#39;shiftCallback&#39;</span><span class="o">,</span><span class="k">this</span><span class="o">.</span><span class="nx">q</span><span class="o">.</span><span class="nx">shift</span><span class="o">());</span>
205    <span class="o">},</span>
206   
207    <span class="c">/**</span>
208<span class="c">     * Add any number of callbacks to the end of the queue</span>
209<span class="c">     * @method add</span>
210<span class="c">     * @param callback* {Function|Object} Any number of callbacks</span>
211<span class="c">     * @return {Queue} the Queue instance</span>
212<span class="c">     */</span>
213    <span class="nx">add</span>  <span class="o">:</span> <span class="k">function</span> <span class="o">()</span> <span class="o">{</span>
214        <span class="k">var</span> <span class="nx">callbacks</span> <span class="o">=</span> <span class="nx">Y</span><span class="o">.</span><span class="nb">Array</span><span class="o">(</span><span class="nx">arguments</span><span class="o">,</span><span class="m">0</span><span class="o">,</span><span class="kc">true</span><span class="o">);</span>
215        <span class="k">this</span><span class="o">.</span><span class="nx">q</span><span class="o">.</span><span class="nx">splice</span><span class="o">.</span><span class="nx">apply</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">q</span><span class="o">,[</span><span class="k">this</span><span class="o">.</span><span class="nx">q</span><span class="o">.</span><span class="nx">length</span><span class="o">,</span><span class="m">0</span><span class="o">].</span><span class="nx">concat</span><span class="o">(</span><span class="nx">callbacks</span><span class="o">));</span>
216
217        <span class="c">/**</span>
218<span class="c">         * Fired from within &lt;code&gt;add(..)&lt;/code&gt; after callbacks are queued</span>
219<span class="c">         * @event addCallback</span>
220<span class="c">         * @param callbacks {Array} Array of callbacks passed to &lt;code&gt;add(..)&lt;/code&gt;</span>
221<span class="c">         */</span>
222        <span class="k">this</span><span class="o">.</span><span class="nx">fire</span><span class="o">(</span><span class="s1">&#39;addCallback&#39;</span><span class="o">,</span><span class="nx">callbacks</span><span class="o">);</span>
223        <span class="k">return</span> <span class="k">this</span><span class="o">;</span>
224    <span class="o">},</span>
225
226    <span class="c">/**</span>
227<span class="c">     * Pause the execution of the Queue after the execution of the current</span>
228<span class="c">     * callback completes.  If called from code outside of a queued callback,</span>
229<span class="c">     * clears the timeout for the pending callback. Paused Queue can be</span>
230<span class="c">     * restarted with q.run()</span>
231<span class="c">     * @method pause</span>
232<span class="c">     * @return {Queue} the Queue instance</span>
233<span class="c">     */</span>
234    <span class="nx">pause</span><span class="o">:</span> <span class="k">function</span> <span class="o">()</span> <span class="o">{</span>
235        <span class="nx">clearTimeout</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">id</span><span class="o">);</span>
236        <span class="k">this</span><span class="o">.</span><span class="nx">id</span> <span class="o">=</span> <span class="m">0</span><span class="o">;</span>
237
238        <span class="c">/**</span>
239<span class="c">         * Fired after Queue is paused</span>
240<span class="c">         * @event pause</span>
241<span class="c">         */</span>
242        <span class="k">this</span><span class="o">.</span><span class="nx">fire</span><span class="o">(</span><span class="s1">&#39;pause&#39;</span><span class="o">);</span>
243        <span class="k">return</span> <span class="k">this</span><span class="o">;</span>
244    <span class="o">},</span>
245
246    <span class="c">/**</span>
247<span class="c">     * Stop and clear the Queue&#39;s queue after the current execution of the</span>
248<span class="c">     * current callback completes.</span>
249<span class="c">     * @method stop</span>
250<span class="c">     * @return {Queue} the Queue instance</span>
251<span class="c">     */</span>
252    <span class="nx">stop</span> <span class="o">:</span> <span class="k">function</span> <span class="o">()</span> <span class="o">{</span> 
253        <span class="k">this</span><span class="o">.</span><span class="nx">pause</span><span class="o">();</span>
254        <span class="k">this</span><span class="o">.</span><span class="nx">q</span> <span class="o">=</span> <span class="o">[];</span>
255
256        <span class="c">/**</span>
257<span class="c">         * Fired after Queue is stopped</span>
258<span class="c">         * @event stop</span>
259<span class="c">         */</span>
260        <span class="k">this</span><span class="o">.</span><span class="nx">fire</span><span class="o">(</span><span class="s1">&#39;stop&#39;</span><span class="o">);</span>
261        <span class="k">return</span> <span class="k">this</span><span class="o">;</span>
262    <span class="o">}</span>
263<span class="o">};</span>
264<span class="nx">Y</span><span class="o">.</span><span class="nx">augment</span><span class="o">(</span><span class="nx">Y</span><span class="o">.</span><span class="nx">Queue</span><span class="o">,</span><span class="nx">Y</span><span class="o">.</span><span class="nx">Event</span><span class="o">.</span><span class="nx">Target</span><span class="o">);</span>
265</pre></div>
266                    </div>
267                        </div>
268                </div>
269                <div class="yui-b">
270            <div class="nav">
271
272                    <div class="module">
273                        <h4>Modules</h4>
274                        <ul class="content">
275
276                                <li class=""><a href="module_anim.html">anim</a></li>
277
278                                <li class=""><a href="module_attribute.html">attribute</a></li>
279
280                                <li class=""><a href="module_base.html">base</a></li>
281
282                                <li class=""><a href="module_cookie.html">cookie</a></li>
283
284                                <li class=""><a href="module_dd.html">dd</a></li>
285
286                                <li class=""><a href="module_dd-plugin.html">dd-plugin</a></li>
287
288                                <li class=""><a href="module_dom.html">dom</a></li>
289
290                                <li class=""><a href="module_dump.html">dump</a></li>
291
292                                <li class=""><a href="module_event.html">event</a></li>
293
294                                <li class=""><a href="module_io.html">io</a></li>
295
296                                <li class=""><a href="module_json.html">json</a></li>
297
298                                <li class=""><a href="module_node.html">node</a></li>
299
300                                <li class=""><a href="module_oop.html">oop</a></li>
301
302                                <li class="selected"><a href="module_queue.html">queue</a></li>
303
304                                <li class=""><a href="module_substitute.html">substitute</a></li>
305
306                                <li class=""><a href="module_yui.html">yui</a></li>
307                        </ul>
308                    </div>
309
310                    <div class="module">
311                        <h4>Classes</h4>
312                        <ul class="content">
313                                <li class=""><a href="Queue.html">Queue</a></li>
314                        </ul>
315                    </div>
316
317                    <div class="module">
318                        <h4>Files</h4>
319                        <ul class="content">       
320                                <li class="selected"><a href="Queue.js.html">Queue.js</a></li>
321                        </ul>
322                    </div>
323
324
325
326
327
328            </div>
329                </div>
330        </div>
331        <div id="ft">
332        <hr />
333        Copyright &copy; 2008 Yahoo! Inc. All rights reserved.
334        </div>
335</div>
336</body>
337</html>
Note: See TracBrowser for help on using the repository browser.