##// END OF EJS Templates
templater: move stylemap function from hgweb to templater
Dirkjan Ochtman -
r7966:aa983c3d default
parent child Browse files
Show More
@@ -78,25 +78,6 b' def staticfile(directory, fname, req):'
78 else:
78 else:
79 raise ErrorResponse(HTTP_SERVER_ERROR, err.strerror)
79 raise ErrorResponse(HTTP_SERVER_ERROR, err.strerror)
80
80
81 def style_map(templatepath, style):
82 """Return path to mapfile for a given style.
83
84 Searches mapfile in the following locations:
85 1. templatepath/style/map
86 2. templatepath/map-style
87 3. templatepath/map
88 """
89 locations = style and [os.path.join(style, "map"), "map-"+style] or []
90 locations.append("map")
91 if isinstance(templatepath, str):
92 templatepath = [templatepath]
93 for path in templatepath:
94 for location in locations:
95 mapfile = os.path.join(path, location)
96 if os.path.isfile(mapfile):
97 return mapfile
98 raise RuntimeError("No hgweb templates found in %r" % templatepath)
99
100 def paritygen(stripecount, offset=0):
81 def paritygen(stripecount, offset=0):
101 """count parity of horizontal stripes for easier reading"""
82 """count parity of horizontal stripes for easier reading"""
102 if stripecount and offset:
83 if stripecount and offset:
@@ -9,7 +9,7 b''
9 import os
9 import os
10 from mercurial import ui, hg, util, hook, error, encoding
10 from mercurial import ui, hg, util, hook, error, encoding
11 from mercurial import templater, templatefilters
11 from mercurial import templater, templatefilters
12 from common import get_mtime, style_map, ErrorResponse
12 from common import get_mtime, ErrorResponse
13 from common import HTTP_OK, HTTP_BAD_REQUEST, HTTP_NOT_FOUND, HTTP_SERVER_ERROR
13 from common import HTTP_OK, HTTP_BAD_REQUEST, HTTP_NOT_FOUND, HTTP_SERVER_ERROR
14 from common import HTTP_UNAUTHORIZED, HTTP_METHOD_NOT_ALLOWED
14 from common import HTTP_UNAUTHORIZED, HTTP_METHOD_NOT_ALLOWED
15 from request import wsgirequest
15 from request import wsgirequest
@@ -37,9 +37,7 b' class hgweb(object):'
37 self.stripecount = 1
37 self.stripecount = 1
38 # a repo owner may set web.templates in .hg/hgrc to get any file
38 # a repo owner may set web.templates in .hg/hgrc to get any file
39 # readable by the user running the CGI script
39 # readable by the user running the CGI script
40 self.templatepath = self.config("web", "templates",
40 self.templatepath = self.config('web', 'templates')
41 templater.templatepath(),
42 untrusted=False)
43
41
44 # The CGI scripts are often run by a user different from the repo owner.
42 # The CGI scripts are often run by a user different from the repo owner.
45 # Trust the settings from the .hg/hgrc files by default.
43 # Trust the settings from the .hg/hgrc files by default.
@@ -237,7 +235,7 b' class hgweb(object):'
237
235
238 start = req.url[-1] == '?' and '&' or '?'
236 start = req.url[-1] == '?' and '&' or '?'
239 sessionvars = webutil.sessionvars(vars, start)
237 sessionvars = webutil.sessionvars(vars, start)
240 mapfile = style_map(self.templatepath, style)
238 mapfile = templater.stylemap(style, self.templatepath)
241
239
242 if not self.reponame:
240 if not self.reponame:
243 self.reponame = (self.config("web", "name")
241 self.reponame = (self.config("web", "name")
@@ -9,7 +9,7 b''
9 import os
9 import os
10 from mercurial.i18n import _
10 from mercurial.i18n import _
11 from mercurial import ui, hg, util, templater, templatefilters, error, encoding
11 from mercurial import ui, hg, util, templater, templatefilters, error, encoding
12 from common import ErrorResponse, get_mtime, staticfile, style_map, paritygen,\
12 from common import ErrorResponse, get_mtime, staticfile, paritygen,\
13 get_contact, HTTP_OK, HTTP_NOT_FOUND, HTTP_SERVER_ERROR
13 get_contact, HTTP_OK, HTTP_NOT_FOUND, HTTP_SERVER_ERROR
14 from hgweb_mod import hgweb
14 from hgweb_mod import hgweb
15 from request import wsgirequest
15 from request import wsgirequest
@@ -317,7 +317,7 b' class hgwebdir(object):'
317 style = req.form['style'][0]
317 style = req.form['style'][0]
318 if self.stripecount is None:
318 if self.stripecount is None:
319 self.stripecount = int(config('web', 'stripes', 1))
319 self.stripecount = int(config('web', 'stripes', 1))
320 mapfile = style_map(templater.templatepath(), style)
320 mapfile = templater.stylemap(style)
321 tmpl = templater.templater(mapfile, templatefilters.filters,
321 tmpl = templater.templater(mapfile, templatefilters.filters,
322 defaults={"header": header,
322 defaults={"header": header,
323 "footer": footer,
323 "footer": footer,
@@ -7,7 +7,7 b''
7
7
8 import os, mimetypes, re, cgi, copy
8 import os, mimetypes, re, cgi, copy
9 import webutil
9 import webutil
10 from mercurial import error, archival, templatefilters
10 from mercurial import error, archival, templater, templatefilters
11 from mercurial.node import short, hex
11 from mercurial.node import short, hex
12 from mercurial.util import binary
12 from mercurial.util import binary
13 from common import paritygen, staticfile, get_contact, ErrorResponse
13 from common import paritygen, staticfile, get_contact, ErrorResponse
@@ -610,7 +610,7 b' def static(web, req, tmpl):'
610 # readable by the user running the CGI script
610 # readable by the user running the CGI script
611 static = web.config("web", "static", None, untrusted=False)
611 static = web.config("web", "static", None, untrusted=False)
612 if not static:
612 if not static:
613 tp = web.templatepath
613 tp = web.templatepath or templater.templatepath()
614 if isinstance(tp, str):
614 if isinstance(tp, str):
615 tp = [tp]
615 tp = [tp]
616 static = [os.path.join(p, 'static') for p in tp]
616 static = [os.path.join(p, 'static') for p in tp]
@@ -183,9 +183,32 b' def templatepath(name=None):'
183
183
184 return normpaths
184 return normpaths
185
185
186 def stylemap(style, paths=None):
187 """Return path to mapfile for a given style.
188
189 Searches mapfile in the following locations:
190 1. templatepath/style/map
191 2. templatepath/map-style
192 3. templatepath/map
193 """
194
195 if paths is None:
196 paths = templatepath()
197 elif isinstance(paths, str):
198 paths = [templatepath]
199
200 locations = style and [os.path.join(style, "map"), "map-" + style] or []
201 locations.append("map")
202 for path in paths:
203 for location in locations:
204 mapfile = os.path.join(path, location)
205 if os.path.isfile(mapfile):
206 return mapfile
207
208 raise RuntimeError("No hgweb templates found in %r" % paths)
209
186 def stringify(thing):
210 def stringify(thing):
187 '''turn nested template iterator into string.'''
211 '''turn nested template iterator into string.'''
188 if hasattr(thing, '__iter__'):
212 if hasattr(thing, '__iter__'):
189 return "".join([stringify(t) for t in thing if t is not None])
213 return "".join([stringify(t) for t in thing if t is not None])
190 return str(thing)
214 return str(thing)
191
General Comments 0
You need to be logged in to leave comments. Login now