xref: /aosp_15_r20/external/toolchain-utils/cros_utils/html_tools.py (revision 760c253c1ed00ce9abd48f8546f08516e57485fe)
1*760c253cSXin Li# -*- coding: utf-8 -*-
2*760c253cSXin Li# Copyright 2019 The ChromiumOS Authors
3*760c253cSXin Li# Use of this source code is governed by a BSD-style license that can be
4*760c253cSXin Li# found in the LICENSE file.
5*760c253cSXin Li
6*760c253cSXin Li"""Utilities for generating html."""
7*760c253cSXin Li
8*760c253cSXin Li
9*760c253cSXin Lidef GetPageHeader(page_title):
10*760c253cSXin Li    return (
11*760c253cSXin Li        """<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
12*760c253cSXin Li"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
13*760c253cSXin Li<html>
14*760c253cSXin Li<head>
15*760c253cSXin Li<style type="text/css">
16*760c253cSXin Litable
17*760c253cSXin Li{
18*760c253cSXin Liborder-collapse:collapse;
19*760c253cSXin Li}
20*760c253cSXin Litable, td, th
21*760c253cSXin Li{
22*760c253cSXin Liborder:1px solid black;
23*760c253cSXin Li}
24*760c253cSXin Li</style>
25*760c253cSXin Li<script type="text/javascript">
26*760c253cSXin Lifunction displayRow(id){
27*760c253cSXin Li  var row = document.getElementById("group_"+id);
28*760c253cSXin Li  if (row.style.display == '')  row.style.display = 'none';
29*760c253cSXin Li    else row.style.display = '';
30*760c253cSXin Li  }
31*760c253cSXin Li</script>
32*760c253cSXin Li<title>%s</title>
33*760c253cSXin Li</head>
34*760c253cSXin Li<body>
35*760c253cSXin Li
36*760c253cSXin Li"""
37*760c253cSXin Li        % page_title
38*760c253cSXin Li    )
39*760c253cSXin Li
40*760c253cSXin Li
41*760c253cSXin Lidef GetListHeader():
42*760c253cSXin Li    return "<ul>"
43*760c253cSXin Li
44*760c253cSXin Li
45*760c253cSXin Lidef GetListItem(text):
46*760c253cSXin Li    return "<li>%s</li>" % text
47*760c253cSXin Li
48*760c253cSXin Li
49*760c253cSXin Lidef GetListFooter():
50*760c253cSXin Li    return "</ul>"
51*760c253cSXin Li
52*760c253cSXin Li
53*760c253cSXin Lidef GetList(items):
54*760c253cSXin Li    return "<ul>%s</ul>" % "".join(["<li>%s</li>" % item for item in items])
55*760c253cSXin Li
56*760c253cSXin Li
57*760c253cSXin Lidef GetParagraph(text):
58*760c253cSXin Li    return "<p>%s</p>" % text
59*760c253cSXin Li
60*760c253cSXin Li
61*760c253cSXin Lidef GetFooter():
62*760c253cSXin Li    return "</body>\n</html>"
63*760c253cSXin Li
64*760c253cSXin Li
65*760c253cSXin Lidef GetHeader(text, h=1):
66*760c253cSXin Li    return "<h%s>%s</h%s>" % (h, text, h)
67*760c253cSXin Li
68*760c253cSXin Li
69*760c253cSXin Lidef GetTableHeader(headers):
70*760c253cSXin Li    row = "".join(["<th>%s</th>" % header for header in headers])
71*760c253cSXin Li    return "<table><tr>%s</tr>" % row
72*760c253cSXin Li
73*760c253cSXin Li
74*760c253cSXin Lidef GetTableFooter():
75*760c253cSXin Li    return "</table>"
76*760c253cSXin Li
77*760c253cSXin Li
78*760c253cSXin Lidef FormatLineBreaks(text):
79*760c253cSXin Li    return text.replace("\n", "<br/>")
80*760c253cSXin Li
81*760c253cSXin Li
82*760c253cSXin Lidef GetTableCell(text):
83*760c253cSXin Li    return "<td>%s</td>" % FormatLineBreaks(str(text))
84*760c253cSXin Li
85*760c253cSXin Li
86*760c253cSXin Lidef GetTableRow(columns):
87*760c253cSXin Li    return "<tr>%s</tr>" % "\n".join(
88*760c253cSXin Li        [GetTableCell(column) for column in columns]
89*760c253cSXin Li    )
90*760c253cSXin Li
91*760c253cSXin Li
92*760c253cSXin Lidef GetTable(headers, rows):
93*760c253cSXin Li    table = [GetTableHeader(headers)]
94*760c253cSXin Li    table.extend([GetTableRow(row) for row in rows])
95*760c253cSXin Li    table.append(GetTableFooter())
96*760c253cSXin Li    return "\n".join(table)
97*760c253cSXin Li
98*760c253cSXin Li
99*760c253cSXin Lidef GetLink(link, text):
100*760c253cSXin Li    return "<a href='%s'>%s</a>" % (link, text)
101