10dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif# Copyright 2010 Google Inc. All Rights Reserved.
2e57523abd8f2a5aa0b93f1248d6d969d0865781bRahul Chaudhry"""Utilities for generating html."""
30dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif
40dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif
50dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharifdef GetPageHeader(page_title):
60dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif  return """<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
70dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
80dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif<html>
90dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif<head>
100dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif<style type="text/css">
110dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Shariftable
120dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif{
130dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharifborder-collapse:collapse;
140dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif}
150dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Shariftable, td, th
160dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif{
170dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharifborder:1px solid black;
180dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif}
190dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif</style>
200dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif<script type="text/javascript">
210dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Shariffunction displayRow(id){
220dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif  var row = document.getElementById("group_"+id);
230dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif  if (row.style.display == '')  row.style.display = 'none';
240dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif    else row.style.display = '';
250dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif  }
260dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif</script>
270dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif<title>%s</title>
280dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif</head>
290dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif<body>
300dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif
310dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif""" % page_title
320dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif
330dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif
340dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharifdef GetListHeader():
35f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano  return '<ul>'
360dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif
370dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif
380dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharifdef GetListItem(text):
39f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano  return '<li>%s</li>' % text
400dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif
410dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif
420dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharifdef GetListFooter():
43f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano  return '</ul>'
440dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif
450dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif
460dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharifdef GetList(items):
47f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano  return '<ul>%s</ul>' % ''.join(['<li>%s</li>' % item for item in items])
480dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif
490dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif
500dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharifdef GetParagraph(text):
51f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano  return '<p>%s</p>' % text
520dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif
530dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif
540dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharifdef GetFooter():
55f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano  return '</body>\n</html>'
560dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif
570dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif
580dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharifdef GetHeader(text, h=1):
59f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano  return '<h%s>%s</h%s>' % (h, text, h)
600dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif
610dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif
620dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharifdef GetTableHeader(headers):
63f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano  row = ''.join(['<th>%s</th>' % header for header in headers])
64f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano  return '<table><tr>%s</tr>' % row
650dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif
660dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif
670dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharifdef GetTableFooter():
68f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano  return '</table>'
690dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif
700dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif
710dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharifdef FormatLineBreaks(text):
72f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano  return text.replace('\n', '<br/>')
730dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif
740dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif
750dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharifdef GetTableCell(text):
76f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano  return '<td>%s</td>' % FormatLineBreaks(str(text))
770dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif
780dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif
790dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharifdef GetTableRow(columns):
80f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano  return '<tr>%s</tr>' % '\n'.join([GetTableCell(column) for column in columns])
810dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif
820dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif
830dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharifdef GetTable(headers, rows):
840dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif  table = [GetTableHeader(headers)]
850dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif  table.extend([GetTableRow(row) for row in rows])
860dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif  table.append(GetTableFooter())
87f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano  return '\n'.join(table)
880dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif
890dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif
900dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharifdef GetLink(link, text):
910dcbc4b1714260820fd4b8d6536fbb05e139cc0fAhmad Sharif  return "<a href='%s'>%s</a>" % (link, text)
92