# HG changeset patch
# User William Stein <wstein@gmail.com>
# Date 1246372477 -7200
# Node ID 0fe38a2b742aca6d79ce9457da8536adc29a3048
# Parent 0ee125b9c62b838cf034e1de0c81313def06049f
trac #1483 -- javascript animation in the notebook
diff -r 0ee125b9c62b -r 0fe38a2b742a sage/plot/animate.py
|
a
|
b
|
|
| 361 | 361 | |
| 362 | 362 | - ``iterations`` - integer (default: 0); number of |
| 363 | 363 | iterations of animation. If 0, loop forever. |
| | 364 | |
| | 365 | EXAMPLES:: |
| | 366 | sage: a = animate([sin(x + float(k)) for k in srange(0,pi,0.3)], xmin=0, xmax=2*pi, figsize=[2,1]) |
| | 367 | sage: a.js() |
| | 368 | <html>...</html> |
| 364 | 369 | """ |
| 365 | 370 | msec = delay*10 # delay in milliseconds |
| 366 | 371 | d = self.png() |
| 367 | 372 | from sage.misc.prandom import randint |
| 368 | | r = randint(1,1000) |
| | 373 | r = randint(1,1000000000) |
| 369 | 374 | file_list = os.listdir(d) |
| 370 | 375 | file_list.sort() |
| 371 | 376 | cell_dir = os.path.join(os.path.dirname(os.path.abspath("")), "anim%s"%r) |
| … |
… |
|
| 376 | 381 | shutil.copy(os.path.join(d, f), os.path.join(cell_dir, f)) |
| 377 | 382 | |
| 378 | 383 | v = [os.path.join(link_path, f) for f in file_list] |
| | 384 | v.sort() |
| 379 | 385 | |
| 380 | | s = '<BODY onload="animate()">' |
| 381 | | s += """ |
| 382 | | <SCRIPT language="javascript"> |
| 383 | | <!-- |
| 384 | | Animation = new Array(%s)\n"""%len(v) |
| | 386 | s = """ |
| | 387 | <script> |
| | 388 | Animation%s = new Array(%s)\n"""%(r,len(v)) |
| 385 | 389 | for i in range(len(v)): |
| 386 | | s += ' Animation[%s] = new Image();\n'%(i+1) |
| 387 | | s += ' Animation[%s].src="%s"\n'%(i+1, v[i]) |
| | 390 | s += ' Animation%s[%s] = "%s";\n'%(r, i+1, v[i]) |
| | 391 | |
| 388 | 392 | s +=""" |
| 389 | 393 | var ii=1; |
| 390 | 394 | var jj=1; |
| 391 | 395 | var timerID=null; |
| 392 | 396 | |
| 393 | | function animate() |
| | 397 | function animate%s() |
| 394 | 398 | { |
| 395 | | if (ii<21) |
| | 399 | if (ii<%s) |
| 396 | 400 | ii++; |
| 397 | 401 | else |
| 398 | | {""" |
| | 402 | {"""%(r, len(file_list)) |
| | 403 | |
| 399 | 404 | if iterations > 0: |
| 400 | 405 | s += """ |
| 401 | 406 | if (jj<%s)"""%iterations |
| … |
… |
|
| 409 | 414 | ii=1;""" |
| 410 | 415 | s += """ |
| 411 | 416 | } |
| 412 | | document.x%s.src=Animation[ii].src; |
| 413 | | timerID=setTimeout("animate()", %s); |
| | 417 | var e=get_element('animation%s'); |
| | 418 | if (e) e.src=Animation%s[ii]; |
| | 419 | timerID=setTimeout("animate%s()", %s); |
| 414 | 420 | } |
| 415 | | </SCRIPT>"""%(r, msec) |
| 416 | | s += """ |
| 417 | | <IMG NAME=x%s SRC="%s" BORDER="0"> |
| 418 | | </BODY>"""%(r, v[0]) |
| 419 | | # ideally, delete the following three lines |
| 420 | | f = open(os.path.join(os.path.abspath(""), "animate.html"), 'w') |
| 421 | | f.write(s) |
| 422 | | f.close() |
| 423 | | # the following should be good enough... |
| 424 | | print "<html>%s</html>"%s |
| 425 | | return |
| 426 | | # return s # uncomment for debugging the javascript |
| | 421 | animate%s(); |
| | 422 | </script>"""%(r, r, r, msec, r) |
| | 423 | s = """ |
| | 424 | <img src="" id="animation%s"> |
| | 425 | """%r + s |
| | 426 | s = '<html>%s</html>'%s |
| | 427 | #print '<html>%s</html>'%s |
| | 428 | return s |
| 427 | 429 | |
| 428 | 430 | |
| 429 | 431 | def show(self, delay=20, iterations=0): |