| | 353 | def js(self, delay=20, iterations=0): |
| | 354 | """ |
| | 355 | Produce javascript code for this animation. |
| | 356 | |
| | 357 | INPUT: |
| | 358 | |
| | 359 | - ``delay`` - (default: 20) delay in hundredths of a |
| | 360 | second between frames |
| | 361 | |
| | 362 | - ``iterations`` - integer (default: 0); number of |
| | 363 | iterations of animation. If 0, loop forever. |
| | 364 | """ |
| | 365 | msec = delay*10 # delay in milliseconds |
| | 366 | d = self.png() |
| | 367 | from sage.misc.prandom import randint |
| | 368 | r = randint(1,1000) |
| | 369 | file_list = os.listdir(d) |
| | 370 | file_list.sort() |
| | 371 | cell_dir = os.path.join(os.path.dirname(os.path.abspath("")), "anim%s"%r) |
| | 372 | os.makedirs(cell_dir) |
| | 373 | link_path = os.path.join("/home", cell_dir[cell_dir.find("admin"):]) |
| | 374 | v = [] |
| | 375 | for f in file_list: |
| | 376 | shutil.copy(os.path.join(d, f), os.path.join(cell_dir, f)) |
| | 377 | |
| | 378 | v = [os.path.join(link_path, f) for f in file_list] |
| | 379 | |
| | 380 | s = '<BODY onload="animate()">' |
| | 381 | s += """ |
| | 382 | <SCRIPT language="javascript"> |
| | 383 | <!-- |
| | 384 | Animation = new Array(%s)\n"""%len(v) |
| | 385 | 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]) |
| | 388 | s +=""" |
| | 389 | var ii=1; |
| | 390 | var jj=1; |
| | 391 | var timerID=null; |
| | 392 | |
| | 393 | function animate() |
| | 394 | { |
| | 395 | if (ii<21) |
| | 396 | ii++; |
| | 397 | else |
| | 398 | {""" |
| | 399 | if iterations > 0: |
| | 400 | s += """ |
| | 401 | if (jj<%s)"""%iterations |
| | 402 | s += """ |
| | 403 | { |
| | 404 | jj++; |
| | 405 | ii=1; |
| | 406 | }""" |
| | 407 | else: |
| | 408 | s += """ |
| | 409 | ii=1;""" |
| | 410 | s += """ |
| | 411 | } |
| | 412 | document.x%s.src=Animation[ii].src; |
| | 413 | timerID=setTimeout("animate()", %s); |
| | 414 | } |
| | 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 |
| | 427 | |
| | 428 | |