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