comparison mercurial/hgweb.py @ 857:41b344235bb7

[PATCH] Propagate the template map though recursively This patch allows propagates the template map though recursively though all the templates. This allows for some hgweb template cleanup patches as well as it makes writing new skins/themes for hgweb much much easier. (I'm planing to write several basic ones.)
author Jeff Sipek <jeffpc@optonline.net>
date Mon, 08 Aug 2005 19:49:34 -0800
parents 9c918287d10b
children c333dfa8fa1a
comparison
equal deleted inserted replaced
856:fbe964ae7325 857:41b344235bb7
68 while tmpl: 68 while tmpl:
69 m = re.search(r"#([a-zA-Z0-9]+)((\|[a-zA-Z0-9]+)*)#", tmpl) 69 m = re.search(r"#([a-zA-Z0-9]+)((\|[a-zA-Z0-9]+)*)#", tmpl)
70 if m: 70 if m:
71 yield tmpl[:m.start(0)] 71 yield tmpl[:m.start(0)]
72 v = map.get(m.group(1), "") 72 v = map.get(m.group(1), "")
73 v = callable(v) and v() or v 73 v = callable(v) and v(**map) or v
74 74
75 fl = m.group(2) 75 fl = m.group(2)
76 if fl: 76 if fl:
77 for f in fl.split("|")[1:]: 77 for f in fl.split("|")[1:]:
78 v = filters[f](v) 78 v = filters[f](v)
222 for f in d: 222 for f in d:
223 to = r.file(f).read(mmap1[f]) 223 to = r.file(f).read(mmap1[f])
224 tn = None 224 tn = None
225 yield diffblock(mdiff.unidiff(to, date1, tn, date2, f), f, tn) 225 yield diffblock(mdiff.unidiff(to, date1, tn, date2, f), f, tn)
226 226
227 def header(self):
228 yield self.t("header")
229
230 def footer(self):
231 yield self.t("footer")
232
233 def changelog(self, pos): 227 def changelog(self, pos):
234 def changenav(): 228 def changenav(**map):
235 def seq(factor = 1): 229 def seq(factor = 1):
236 yield 1 * factor 230 yield 1 * factor
237 yield 3 * factor 231 yield 3 * factor
238 #yield 5 * factor 232 #yield 5 * factor
239 for f in seq(factor * 10): 233 for f in seq(factor * 10):
252 for label, rev in l: 246 for label, rev in l:
253 yield self.t("naventry", label = label, rev = rev) 247 yield self.t("naventry", label = label, rev = rev)
254 248
255 yield self.t("naventry", label="tip") 249 yield self.t("naventry", label="tip")
256 250
257 def changelist(): 251 def changelist(**map):
258 parity = (start - end) & 1 252 parity = (start - end) & 1
259 cl = self.repo.changelog 253 cl = self.repo.changelog
260 l = [] # build a list in forward order for efficiency 254 l = [] # build a list in forward order for efficiency
261 for i in range(start, end): 255 for i in range(start, end):
262 n = cl.node(i) 256 n = cl.node(i)
293 manifest = hex(mf), 287 manifest = hex(mf),
294 rev = pos, changesets = count, entries = changelist) 288 rev = pos, changesets = count, entries = changelist)
295 289
296 def search(self, query): 290 def search(self, query):
297 291
298 def changelist(): 292 def changelist(**map):
299 cl = self.repo.changelog 293 cl = self.repo.changelog
300 count = 0 294 count = 0
301 qw = query.lower().split() 295 qw = query.lower().split()
302 296
303 def revgen(): 297 def revgen():
359 mf = self.repo.manifest.read(changes[0]) 353 mf = self.repo.manifest.read(changes[0])
360 for f in changes[3]: 354 for f in changes[3]:
361 files.append(self.t("filenodelink", 355 files.append(self.t("filenodelink",
362 filenode = hex(mf.get(f, nullid)), file = f)) 356 filenode = hex(mf.get(f, nullid)), file = f))
363 357
364 def diff(): 358 def diff(**map):
365 yield self.diff(p1, n, None) 359 yield self.diff(p1, n, None)
366 360
367 yield self.t('changeset', 361 yield self.t('changeset',
368 diff = diff, 362 diff = diff,
369 rev = cl.rev(n), 363 rev = cl.rev(n),
380 def filelog(self, f, filenode): 374 def filelog(self, f, filenode):
381 cl = self.repo.changelog 375 cl = self.repo.changelog
382 fl = self.repo.file(f) 376 fl = self.repo.file(f)
383 count = fl.count() 377 count = fl.count()
384 378
385 def entries(): 379 def entries(**map):
386 l = [] 380 l = []
387 parity = (count - 1) & 1 381 parity = (count - 1) & 1
388 382
389 for i in range(count): 383 for i in range(count):
390 384
455 cn = cl.node(changerev) 449 cn = cl.node(changerev)
456 cs = cl.read(cn) 450 cs = cl.read(cn)
457 t = float(cs[2].split(' ')[0]) 451 t = float(cs[2].split(' ')[0])
458 mfn = cs[0] 452 mfn = cs[0]
459 453
460 def annotate(): 454 def annotate(**map):
461 parity = 1 455 parity = 1
462 last = None 456 last = None
463 for r, l in fl.annotate(n): 457 for r, l in fl.annotate(n):
464 try: 458 try:
465 cnode = ncache[r] 459 cnode = ncache[r]
525 files[short] = (f, None) 519 files[short] = (f, None)
526 else: 520 else:
527 short = os.path.basename(remain) 521 short = os.path.basename(remain)
528 files[short] = (f, n) 522 files[short] = (f, n)
529 523
530 def filelist(): 524 def filelist(**map):
531 parity = 0 525 parity = 0
532 fl = files.keys() 526 fl = files.keys()
533 fl.sort() 527 fl.sort()
534 for f in fl: 528 for f in fl:
535 full, fnode = files[f] 529 full, fnode = files[f]
561 mf = cl.read(cl.tip())[0] 555 mf = cl.read(cl.tip())[0]
562 556
563 i = self.repo.tagslist() 557 i = self.repo.tagslist()
564 i.reverse() 558 i.reverse()
565 559
566 def entries(): 560 def entries(**map):
567 parity = 0 561 parity = 0
568 for k,n in i: 562 for k,n in i:
569 yield self.t("tagentry", 563 yield self.t("tagentry",
570 parity = parity, 564 parity = parity,
571 tag = k, 565 tag = k,
581 cl = self.repo.changelog 575 cl = self.repo.changelog
582 p1 = cl.parents(n)[0] 576 p1 = cl.parents(n)[0]
583 cs = cl.read(n) 577 cs = cl.read(n)
584 mf = self.repo.manifest.read(cs[0]) 578 mf = self.repo.manifest.read(cs[0])
585 579
586 def diff(): 580 def diff(**map):
587 yield self.diff(p1, n, file) 581 yield self.diff(p1, n, file)
588 582
589 yield self.t("filediff", 583 yield self.t("filediff",
590 file = file, 584 file = file,
591 filenode = hex(mf.get(file, nullid)), 585 filenode = hex(mf.get(file, nullid)),
598 # add tags to things 592 # add tags to things
599 # tags -> list of changesets corresponding to tags 593 # tags -> list of changesets corresponding to tags
600 # find tag, changeset, file 594 # find tag, changeset, file
601 595
602 def run(self): 596 def run(self):
597 def header(**map):
598 yield self.t("header", **map)
599
600 def footer(**map):
601 yield self.t("footer", **map)
602
603 self.refresh() 603 self.refresh()
604 args = cgi.parse() 604 args = cgi.parse()
605 605
606 m = os.path.join(self.templates, "map") 606 m = os.path.join(self.templates, "map")
607 if args.has_key('style'): 607 if args.has_key('style'):
616 url = "http://%s%s%s" % (os.environ["SERVER_NAME"], port, uri) 616 url = "http://%s%s%s" % (os.environ["SERVER_NAME"], port, uri)
617 617
618 self.t = templater(m, self.filters, 618 self.t = templater(m, self.filters,
619 {"url":url, 619 {"url":url,
620 "repo":self.reponame, 620 "repo":self.reponame,
621 "header":self.header(), 621 "header":header,
622 "footer":self.footer(), 622 "footer":footer,
623 }) 623 })
624 624
625 if not args.has_key('cmd') or args['cmd'][0] == 'changelog': 625 if not args.has_key('cmd') or args['cmd'][0] == 'changelog':
626 c = self.repo.changelog.count() - 1 626 c = self.repo.changelog.count() - 1
627 hi = c 627 hi = c