##// 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 def httphdr(type):
25 def httphdr(type):
26 print 'Content-type: %s\n' % type
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 class template:
36 class template:
29 def __init__(self, tmpl_dir):
37 def __init__(self, tmpl_dir):
30 self.tmpl_dir = tmpl_dir
38 self.tmpl_dir = tmpl_dir
31 def do_page(self, tmpl_fn, **map):
39 def do_page(self, tmpl_fn, **map):
32 out = []
33 txt = file(os.path.join(self.tmpl_dir, tmpl_fn)).read()
40 txt = file(os.path.join(self.tmpl_dir, tmpl_fn)).read()
34 while txt:
41 while txt:
35 m = re.search(r"#([a-zA-Z0-9]+)#", txt)
42 m = re.search(r"#([a-zA-Z0-9]+)#", txt)
36 if m:
43 if m:
37 out.append(txt[:m.start(0)])
44 yield txt[:m.start(0)]
38 v = map.get(m.group(1), "")
45 v = map.get(m.group(1), "")
39 if callable(v):
46 if callable(v):
40 for y in v(**map): out.append(y)
47 for y in v(**map): yield y
41 else:
48 else:
42 out.append(str(v))
49 yield v
43 txt = txt[m.end(0):]
50 txt = txt[m.end(0):]
44 else:
51 else:
45 out.append(txt)
52 yield txt
46 txt = ''
53 txt = ''
47 return ''.join(out)
48
54
49 class page:
55 class page:
50 def __init__(self, tmpl_dir = "", type="text/html", title="Mercurial Web",
56 def __init__(self, tmpl_dir = "", type="text/html", title="Mercurial Web",
@@ -52,7 +58,7 b' class page:'
52 self.tmpl = template(tmpl_dir)
58 self.tmpl = template(tmpl_dir)
53
59
54 print 'Content-type: %s; charset=%s\n' % (type, charset)
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 def endpage(self):
63 def endpage(self):
58 print '</BODY>'
64 print '</BODY>'
@@ -84,7 +90,7 b' class change_list(page):'
84 page.__init__(self, tmpl_dir)
90 page.__init__(self, tmpl_dir)
85 self.repo = repo
91 self.repo = repo
86 self.numchanges = numchanges
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 def content(self, hi=None):
95 def content(self, hi=None):
90 cl = []
96 cl = []
@@ -135,10 +141,10 b' class change_list(page):'
135 for f in changes[3]:
141 for f in changes[3]:
136 files.append('<a href="?cmd=file;cs=%s;fn=%s">%s</a>&nbsp;&nbsp;' \
142 files.append('<a href="?cmd=file;cs=%s;fn=%s">%s</a>&nbsp;&nbsp;' \
137 % (hn, f, cgi.escape(f)))
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 author=obfuscate(changes[1]),
145 author=obfuscate(changes[1]),
140 desc=nl2br(cgi.escape(changes[4])), date=datestr,
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 class checkin(page):
149 class checkin(page):
144 def __init__(self, repo, tmpl_dir, nodestr):
150 def __init__(self, repo, tmpl_dir, nodestr):
@@ -164,12 +170,12 b' class checkin(page):'
164 if i2 != -1:
170 if i2 != -1:
165 p2link = '<a href="?cmd=chkin;nd=%s">%s</a>' % (h2, h2)
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 p1num=i1, p1node=h1, p2num=i2, p2node=h2, p2link=p2link,
174 p1num=i1, p1node=h1, p2num=i2, p2node=h2, p2link=p2link,
169 mfnum=self.repo.manifest.rev(changes[0]),
175 mfnum=self.repo.manifest.rev(changes[0]),
170 mfnode=hg.hex(changes[0]), author=obfuscate(changes[1]),
176 mfnode=hg.hex(changes[0]), author=obfuscate(changes[1]),
171 desc=nl2br(cgi.escape(changes[4])), date=datestr,
177 desc=nl2br(cgi.escape(changes[4])), date=datestr,
172 files=' '.join(files))
178 files=' '.join(files)))
173
179
174 (c, a, d) = self.repo.diffrevs(parents[0], self.node)
180 (c, a, d) = self.repo.diffrevs(parents[0], self.node)
175 change = self.repo.changelog.read(parents[0])
181 change = self.repo.changelog.read(parents[0])
@@ -215,9 +221,9 b' class mfpage(page):'
215 mf = self.repo.manifest.read(self.node)
221 mf = self.repo.manifest.read(self.node)
216 fns = mf.keys()
222 fns = mf.keys()
217 fns.sort()
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 for f in fns:
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 class histpage(page):
228 class histpage(page):
223 def __init__(self, repo, tmpl_dir, fn):
229 def __init__(self, repo, tmpl_dir, fn):
@@ -250,10 +256,10 b' class histpage(page):'
250 if i2 != -1:
256 if i2 != -1:
251 p2entry = '&nbsp;&nbsp;%d:<a href="?cmd=file;nd=%s;fn=%s">%s</a>' \
257 p2entry = '&nbsp;&nbsp;%d:<a href="?cmd=file;nd=%s;fn=%s">%s</a>' \
252 % (i2, h2, self.fn, h2 ),
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 csnode=cs, desc=nl2br(cgi.escape(changes[4])),
260 csnode=cs, desc=nl2br(cgi.escape(changes[4])),
255 date = datestr, fn=self.fn, revnode=h, p1num = i1,
261 date = datestr, fn=self.fn, revnode=h, p1num = i1,
256 p1node=h1, p2entry=p2entry)
262 p1node=h1, p2entry=p2entry))
257
263
258 class hgweb:
264 class hgweb:
259 repo_path = "."
265 repo_path = "."
General Comments 0
You need to be logged in to leave comments. Login now