##// END OF EJS Templates
change template to a generator...
jake@edge2.net -
r135:c0faf508 default
parent child Browse files
Show More
@@ -25,26 +25,32 b' def obfuscate(text):'
25 25 def httphdr(type):
26 26 print 'Content-type: %s\n' % type
27 27
28 def write(*things):
29 for thing in things:
30 if hasattr(thing, "__iter__"):
31 for part in thing:
32 write(part)
33 else:
34 sys.stdout.write(str(thing))
35
28 36 class template:
29 37 def __init__(self, tmpl_dir):
30 38 self.tmpl_dir = tmpl_dir
31 39 def do_page(self, tmpl_fn, **map):
32 out = []
33 40 txt = file(os.path.join(self.tmpl_dir, tmpl_fn)).read()
34 41 while txt:
35 42 m = re.search(r"#([a-zA-Z0-9]+)#", txt)
36 43 if m:
37 out.append(txt[:m.start(0)])
44 yield txt[:m.start(0)]
38 45 v = map.get(m.group(1), "")
39 46 if callable(v):
40 for y in v(**map): out.append(y)
47 for y in v(**map): yield y
41 48 else:
42 out.append(str(v))
49 yield v
43 50 txt = txt[m.end(0):]
44 51 else:
45 out.append(txt)
52 yield txt
46 53 txt = ''
47 return ''.join(out)
48 54
49 55 class page:
50 56 def __init__(self, tmpl_dir = "", type="text/html", title="Mercurial Web",
@@ -52,7 +58,7 b' class page:'
52 58 self.tmpl = template(tmpl_dir)
53 59
54 60 print 'Content-type: %s; charset=%s\n' % (type, charset)
55 print self.tmpl.do_page('htmlstart.tmpl', title = title)
61 write(self.tmpl.do_page('htmlstart.tmpl', title = title))
56 62
57 63 def endpage(self):
58 64 print '</BODY>'
@@ -84,7 +90,7 b' class change_list(page):'
84 90 page.__init__(self, tmpl_dir)
85 91 self.repo = repo
86 92 self.numchanges = numchanges
87 print self.tmpl.do_page('changestitle.tmpl', reponame=reponame)
93 write(self.tmpl.do_page('changestitle.tmpl', reponame=reponame))
88 94
89 95 def content(self, hi=None):
90 96 cl = []
@@ -135,10 +141,10 b' class change_list(page):'
135 141 for f in changes[3]:
136 142 files.append('<a href="?cmd=file;cs=%s;fn=%s">%s</a>&nbsp;&nbsp;' \
137 143 % (hn, f, cgi.escape(f)))
138 print self.tmpl.do_page('change_table.tmpl',
144 write(self.tmpl.do_page('change_table.tmpl',
139 145 author=obfuscate(changes[1]),
140 146 desc=nl2br(cgi.escape(changes[4])), date=datestr,
141 files=' '.join(files), revnum=i, revnode=hn)
147 files=' '.join(files), revnum=i, revnode=hn))
142 148
143 149 class checkin(page):
144 150 def __init__(self, repo, tmpl_dir, nodestr):
@@ -164,12 +170,12 b' class checkin(page):'
164 170 if i2 != -1:
165 171 p2link = '<a href="?cmd=chkin;nd=%s">%s</a>' % (h2, h2)
166 172
167 print self.tmpl.do_page('checkin.tmpl', revnum=i, revnode=self.nodestr,
173 write(self.tmpl.do_page('checkin.tmpl', revnum=i, revnode=self.nodestr,
168 174 p1num=i1, p1node=h1, p2num=i2, p2node=h2, p2link=p2link,
169 175 mfnum=self.repo.manifest.rev(changes[0]),
170 176 mfnode=hg.hex(changes[0]), author=obfuscate(changes[1]),
171 177 desc=nl2br(cgi.escape(changes[4])), date=datestr,
172 files=' '.join(files))
178 files=' '.join(files)))
173 179
174 180 (c, a, d) = self.repo.diffrevs(parents[0], self.node)
175 181 change = self.repo.changelog.read(parents[0])
@@ -215,9 +221,9 b' class mfpage(page):'
215 221 mf = self.repo.manifest.read(self.node)
216 222 fns = mf.keys()
217 223 fns.sort()
218 print self.tmpl.do_page('mftitle.tmpl', node = self.nodestr)
224 write(self.tmpl.do_page('mftitle.tmpl', node = self.nodestr))
219 225 for f in fns:
220 print self.tmpl.do_page('mfentry.tmpl', fn=f, node=hg.hex(mf[f]))
226 write(self.tmpl.do_page('mfentry.tmpl', fn=f, node=hg.hex(mf[f])))
221 227
222 228 class histpage(page):
223 229 def __init__(self, repo, tmpl_dir, fn):
@@ -250,10 +256,10 b' class histpage(page):'
250 256 if i2 != -1:
251 257 p2entry = '&nbsp;&nbsp;%d:<a href="?cmd=file;nd=%s;fn=%s">%s</a>' \
252 258 % (i2, h2, self.fn, h2 ),
253 print self.tmpl.do_page('hist_ent.tmpl', author=obfuscate(changes[1]),
259 write(self.tmpl.do_page('hist_ent.tmpl', author=obfuscate(changes[1]),
254 260 csnode=cs, desc=nl2br(cgi.escape(changes[4])),
255 261 date = datestr, fn=self.fn, revnode=h, p1num = i1,
256 p1node=h1, p2entry=p2entry)
262 p1node=h1, p2entry=p2entry))
257 263
258 264 class hgweb:
259 265 repo_path = "."
General Comments 0
You need to be logged in to leave comments. Login now