diff options
author | Frederick Yin <fkfd@macaw.me> | 2020-07-04 14:23:36 +0800 |
---|---|---|
committer | Frederick Yin <fkfd@macaw.me> | 2020-07-04 14:23:36 +0800 |
commit | 0be69d4b5db18b1e0794fd3dc3297da0a16b1ccf (patch) | |
tree | 00c8f50f381d4531a3a45eeed0f9cdd1bf18f3b1 /utab/rendering.py |
Minimal viable product
Diffstat (limited to 'utab/rendering.py')
-rw-r--r-- | utab/rendering.py | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/utab/rendering.py b/utab/rendering.py new file mode 100644 index 0000000..731524c --- /dev/null +++ b/utab/rendering.py @@ -0,0 +1,35 @@ +import urllib +from .const import * + +# dead simple template engine +def render_page(template: str, **kwargs): + page = template + for k, v in kwargs.items(): + page = page.replace(f"%{str(k)}%", str(v)) + return page + + +def render_sites(sites: list, columns=8, rows=4): + top_sites = sorted(sites, key=lambda s: int(s[VISITS]), reverse=True)[ + : (columns * rows) # top col*row sites, default=32 + ] + # site_rows: group sites into rows + if len(top_sites) < 32: + top_sites.extend([None] * (32 - len(top_sites))) + + site_rows = list(zip(*[top_sites[n::columns] for n in range(columns)])) + html = '<div class="sites-grid">' + for row in site_rows: + html += '<div class="sites-row">' + for col in row: + if col is not None: + html += ( + '<div class="sites-item">' + f'<a class="site" href="/go/{urllib.parse.quote(col[URL], safe="")}">' + f'<img class="site-favicon" src="{col[FAVICON]}" /></a>' + + f"<p>{col[TITLE]}</p>" + + "</div>" + ) + html += "</div>" + html += "</div>" + return html |