Mercurial > public > mercurial-scm > hg
comparison mercurial/hgweb/webcommands.py @ 35407:27ab3150cd50
hgweb: calculate <canvas> width and height client-side
hgweb determines and passes to templates some variables related to graph
appearance, like bg_height, canvaswidth and canvasheight. bg_height was and
still is used for graph.scale() call in graph.tmpl, and the two latter
variables were used in <canvas> element as width and height properties, and
they were set before JS code got to run. Setting these properties server-side
doesn't make a lot of sense, because a graph that has been scaled should
calculate things like width and height on its own when being rendered.
Let's move (re)sizing <canvas> to JavaScript (to Graph.render function) and
stop parsing HTML with regular expressions just to know new width and height.
That extra loop that only counts cols is required because <canvas> can't
be resized after or in the process of rendering (or it gets cleared).
Incidentally, SVG doesn't have this problem and I'm hoping to switch graph to
using it in future.
There also was truecanvasheight, but according to hg grep --all it was never
used, see d490edc71146.
author | Anton Shestakov <av6@dwimlabs.net> |
---|---|
date | Sun, 10 Dec 2017 15:56:22 +0800 |
parents | 76dcdc4e707b |
children | a48af4993aa0 |
comparison
equal
deleted
inserted
replaced
35406:76dcdc4e707b | 35407:27ab3150cd50 |
---|---|
1229 dag = graphmod.dagwalker(web.repo, smartset.baseset(revs)) | 1229 dag = graphmod.dagwalker(web.repo, smartset.baseset(revs)) |
1230 # As we said one line above... not lazy. | 1230 # As we said one line above... not lazy. |
1231 tree = list(item for item in graphmod.colored(dag, web.repo) | 1231 tree = list(item for item in graphmod.colored(dag, web.repo) |
1232 if item[1] == graphmod.CHANGESET) | 1232 if item[1] == graphmod.CHANGESET) |
1233 | 1233 |
1234 def getcolumns(tree): | |
1235 cols = 0 | |
1236 for (id, type, ctx, vtx, edges) in tree: | |
1237 cols = max(cols, max([edge[0] for edge in edges] or [0]), | |
1238 max([edge[1] for edge in edges] or [0])) | |
1239 return cols | |
1240 | |
1241 def graphdata(usetuples): | 1234 def graphdata(usetuples): |
1242 data = [] | 1235 data = [] |
1243 | 1236 |
1244 row = 0 | 1237 row = 0 |
1245 for (id, type, ctx, vtx, edges) in tree: | 1238 for (id, type, ctx, vtx, edges) in tree: |
1264 | 1257 |
1265 row += 1 | 1258 row += 1 |
1266 | 1259 |
1267 return data | 1260 return data |
1268 | 1261 |
1269 cols = getcolumns(tree) | |
1270 rows = len(tree) | 1262 rows = len(tree) |
1271 canvasheight = (rows + 1) * bg_height - 27 | |
1272 | 1263 |
1273 return tmpl('graph', rev=rev, symrev=symrev, revcount=revcount, | 1264 return tmpl('graph', rev=rev, symrev=symrev, revcount=revcount, |
1274 uprev=uprev, | 1265 uprev=uprev, |
1275 lessvars=lessvars, morevars=morevars, downrev=downrev, | 1266 lessvars=lessvars, morevars=morevars, downrev=downrev, |
1276 cols=cols, rows=rows, changesets=count, | 1267 rows=rows, |
1277 canvaswidth=(cols + 1) * bg_height, | 1268 bg_height=bg_height, |
1278 truecanvasheight=rows * bg_height, | 1269 changesets=count, |
1279 canvasheight=canvasheight, bg_height=bg_height, | |
1280 jsdata=lambda **x: graphdata(True), | 1270 jsdata=lambda **x: graphdata(True), |
1281 nodes=lambda **x: graphdata(False), | 1271 nodes=lambda **x: graphdata(False), |
1282 node=ctx.hex(), changenav=changenav) | 1272 node=ctx.hex(), changenav=changenav) |
1283 | 1273 |
1284 def _getdoc(e): | 1274 def _getdoc(e): |