diff --git a/JSAnimation/html_writer.py b/JSAnimation/html_writer.py
index bf47346..3da6a51 100644
--- a/JSAnimation/html_writer.py
+++ b/JSAnimation/html_writer.py
@@ -25,13 +25,17 @@ def _load_base64(self, filename):
return 'data:image/{0};base64,{1}'.format(self.extension,
data.encode('base64'))
+PREV_INCLUDE = """
+{add_html}
+"""
JS_INCLUDE = """
"""
INCLUDED_FRAMES = """
- for (var i=0; i<{Nframes}; i++){{
- frames[i] = "{frame_dir}/frame" + ("0000000" + i).slice(-7) + ".{frame_format}";
- }}
+ frames = {frame_list}
"""
-def _included_frames(frame_list, frame_format):
+def _included_frames(frame_fullnames):
"""frame_list should be a list of filenames"""
- return INCLUDED_FRAMES.format(Nframes=len(frame_list),
- frame_dir=os.path.dirname(frame_list[0]),
- frame_format=frame_format)
+ return INCLUDED_FRAMES.format(Nframes=len(frame_fullnames),
+ frame_list=frame_fullnames)
+
def _embedded_frames(frame_list, frame_format):
@@ -246,8 +251,12 @@ def new_id(cls):
return '%16x' % cls.rng.getrandbits(64)
def __init__(self, fps=30, codec=None, bitrate=None, extra_args=None,
- metadata=None, embed_frames=False, default_mode='loop'):
+ metadata=None, embed_frames=False, frame_dir=None, add_html='',
+ frame_width=650,default_mode='loop'):
self.embed_frames = embed_frames
+ self.frame_dir = frame_dir
+ self.add_html = add_html
+ self.frame_width = frame_width
self.default_mode = default_mode.lower()
if self.default_mode not in ['loop', 'once', 'reflect']:
@@ -258,21 +267,29 @@ def __init__(self, fps=30, codec=None, bitrate=None, extra_args=None,
super(HTMLWriter, self).__init__(fps, codec, bitrate,
extra_args, metadata)
- def setup(self, fig, outfile, dpi, frame_dir=None):
+ def setup(self, fig, outfile, dpi):
if os.path.splitext(outfile)[-1] not in ['.html', '.htm']:
raise ValueError("outfile must be *.htm or *.html")
if not self.embed_frames:
- if frame_dir is None:
- frame_dir = outfile.rstrip('.html') + '_frames'
- if not os.path.exists(frame_dir):
- os.makedirs(frame_dir)
- frame_prefix = os.path.join(frame_dir, 'frame')
+ if self.frame_dir is None:
+ self.frame_dir= outfile.rstrip('.html') + '_frames'
+ if not os.path.exists(self.frame_dir):
+ os.makedirs(self.frame_dir)
+ frame_prefix = os.path.join(self.frame_dir, 'frame')
else:
frame_prefix = None
super(HTMLWriter, self).setup(fig, outfile, dpi,
frame_prefix, clear_temp=False)
+
+ # Set frame fullname; it can be replaced in child class
+ def set_framename(self):
+ frame_fullname = self._temp_names
+ for i in range(len(self._temp_names)):
+ frame_name = 'frame' + str(i).zfill(4) + "." + self.frame_format
+ frame_fullname[i] = os.path.join(self.frame_dir, frame_name)
+ return frame_fullname
def grab_frame(self, **savefig_kwargs):
if self.embed_frames:
@@ -300,8 +317,8 @@ def communicate(self):
self.frame_format)
else:
# temp names is filled by FileMovieWriter
- fill_frames = _included_frames(self._temp_names,
- self.frame_format)
+ frame_fullname = self.set_framename()
+ fill_frames = _included_frames(frame_fullname)
mode_dict = dict(once_checked='',
loop_checked='',
@@ -311,10 +328,13 @@ def communicate(self):
interval = int(1000. / self.fps)
with open(self.outfile, 'w') as of:
+ if (self.add_html != ''):
+ of.write(PREV_INCLUDE.format(add_html=self.add_html))
of.write(JS_INCLUDE)
of.write(DISPLAY_TEMPLATE.format(id=self.new_id(),
Nframes=len(self._temp_names),
fill_frames=fill_frames,
interval=interval,
icons=_Icons(),
+ frame_width=self.frame_width,
**mode_dict))