Poodletooth-iLand/panda/direct/http/LandingPageHTML.py
Master Jumblespeed d882959bfa switch to remote
2015-05-18 22:11:33 -04:00

476 lines
9.2 KiB
Python
Executable file

# -- Text content for the landing page. You should change these for yours! --
from direct.showbase import ElementTree as ET
title = "Landing Page"
defaultTitle = title
description = "To set this description, call WebRequestDispatcher.setDescription!<BR><BR>You can also add stats to the table below by calling WebRequestDispatcher.addQuickStat(Name,Value,PositionInTable)."
defaultDesc = description
contactInfo = "M. Ian Graham - ian.graham@dig.com"
# -- Begin fancy layout stuff, change at your own risk --
stylesheet = '''
body
{
margin: 0;
padding: 0;
font-size: 90%;
font-family: Verdana, sans-serif;
background-color: #fff;
color: #333;
}
p
{
margin: 0;
padding: 10px;
background-color: #eee;
}
h2
{
font-size: 140%;
color: #666;
background-color: #fff;
width: 22em;
margin-left: 150px;
margin-top: 0px;
}
h3
{
padding-top: 10px;
margin-top: 0px;
margin-left: 20px;
}
pre
{
margin-left: 20px;
margin-bottom: 0px;
padding-bottom: 10px;
}
a
{
text-decoration: none;
color: #333;
}
a:hover
{
text-decoration: underline;
}
#header
{
margin: 0;
padding: 0;
background-color: #fff;
}
#footer
{
margin: 0;
padding: 3px;
text-align: right;
background-color: #fff;
border-top: 1px solid #778;
font: 10px Verdana, sans-serif;
}
#contents
{
margin: 0;
padding: 25;
background-color: #eee;
min-height:600px;
height:auto !important;
height:600px;
}
<!-- Tab menu -->
#navcontainer
{
margin:0;
padding: 0;
}
#navlist
{
padding: 3px 0;
margin-left: 0;
margin: 0;
border-bottom: 1px solid #778;
font: bold 12px Verdana, sans-serif;
background-color: transparent;
}
#navlist li
{
list-style: none;
margin: 0;
display: inline;
}
#navlist li a
{
padding: 3px 0.5em;
margin-left: 3px;
border: 1px solid #778;
border-bottom: none;
background: #DDE;
text-decoration: none;
}
#navlist li a:link { color: #448; }
#navlist li a:visited { color: #667; }
#navlist li a:hover
{
color: #000;
background: #AAE;
border-color: #227;
}
#navlist li a#current
{
background: #eee;
border-bottom: 1px solid #eee;
}
#navlist li.first
{
margin-left: 150px;
}
<!-- Table formatting -->
table
{
border-spacing:1px;
background:#E7E7E7;
color:#333;
}
caption
{
border: #666666;
border-bottom: 2px solid #666666;
margin-left: 2px;
margin-right: 2px;
padding: 10px;
background: #cfcfdf;
font: 15px 'Verdana', Arial, Helvetica, sans-serif;
font-weight: bold;
}
td, th
{
font:13px 'Courier New',monospace;
padding: 4px;
}
thead th
{
text-align: center;
background: #dde;
color: #666666;
border: 1px solid #ffffff;
text-transform: uppercase;
}
tbody th
{
font-weight: bold;
}
tbody tr
{
background: #efeffc;
text-align: left;
}
tbody tr.odd
{
background: #ffffff;
border-top: 1px solid #ffffff;
}
tbody th a:hover
{
color: #009900;
}
tbody tr td
{
text-align: left
height: 30px;
background: #ffffff;
border: 1px solid #ffffff;
color: #333;
}
tbody tr.odd td
{
background: #efeffc;
border-top: 1px solid #ffffff;
}
tbody tr[altColoring="1"] td
{
background: LightCyan;
border-top: 1px solid #ffffff;
}
tbody tr[altColoring="1"].odd td
{
background: PaleTurquoise;
border-top: 1px solid #ffffff;
}
tbody tr[altColoring="2"] td
{
background: LightSalmon;
border-top: 1px solid #ffffff;
}
tbody tr[altColoring="2"].odd td
{
background: SandyBrown;
border-top: 1px solid #ffffff;
}
tbody tr.dead td
{
background:#ff0000;
border-top: 1px solid #ffffff;
}
table td a:link, table td a:visited
{
display: block;
padding: 0px;
margin: 0px;
width: 100%;
text-decoration: none;
color: #333;
}
html>body #navcontainer li a { width: auto; }
table td a:hover
{
color: #000000;
background: #aae;
}
tfoot th, tfoot td
{
background: #dfdfdf;
padding: 3px;
text-align: center;
font: 14px 'Verdana', Arial, Helvetica, sans-serif;
font-weight: bold;
border-bottom: 1px solid #cccccc;
border-top: 1px solid #DFDFDF;
}
\r\n'''
header = '''
<?xml version="1.0" encoding="UTF-8"?>
<html>
%(headTag)s
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>%(titlestring)s</title>
<link rel="stylesheet" type="text/css" href="/default.css">
</head>
%(bodyTag)s
'''
# this portion of the body is now added dynamically in order to support changes to the body tag
# attributes
'''
<!-- HEADER -->
<div id="header">
<h2>%(titlestring)s</h2>
<div id="navcontainer">
<ul id="navlist">
%(menustring)s</ul>
</div>
</div>
<!-- CONTENT -->
<div id="contents">
<center>
'''
# caller must remove '</div>' from end of output string derived from what is returned
def addBodyHeaderAndContent(bodyTag, titleString, menuTags):
SE = ET.SubElement
bodyTag.append(ET.Comment('HEADER'))
header = SE(bodyTag, 'div', id='header')
h2 = SE(header, 'h2')
h2.text = titleString
navContainer = SE(header, 'div', id='navcontainer')
navList = SE(navContainer, 'ul', id='navlist')
for menuTag in menuTags:
navList.append(menuTag)
bodyTag.append(ET.Comment('CONTENT'))
contents = SE(bodyTag, 'div', id='contents')
center = SE(contents, 'center')
# for ease of removal of center tag closer
center.append(ET.Comment(''))
mainPageBody = '''
<P>%(description)s</P>
<P>%(quickstats)s</P>
'''
footer = '''
</center>
</div>
<!-- FOOTER -->
<div id="footer">
Contact: %(contact)s
</div>
</body>
</html>
\r\n'''
def getRowClassString(rowNum):
if rowNum % 2 == 0:
return ""
else:
return " class=\"odd\""
def getURITable(title,uriList,uriToHandler):
output = "\n<P>\n<table>\n<caption>%s</caption><thead><tr><th scope=col>URI</th><th scope=col>Handler</th></tr></thead>\n" % title
output += "<tbody>\n"
rowNum = 0
for uri in uriList:
handlerFunc = str(uriToHandler[uri][0]).split(" ")[2]
output += "<tr%s><td><a href=%s>%s</a></td><td>%s</td></tr>\n" % \
(getRowClassString(rowNum),
uri,
uri,
handlerFunc)
rowNum += 1
output += "</tbody>\n</table>\n</P>\n"
return output
def getTabs(menu,activeTab):
tabList = menu.keys()
if "Main" in tabList:
tabList.remove("Main")
if "Services" in tabList:
tabList.remove("Services")
tabList.sort()
if "Main" in menu.keys():
tabList.insert(0, "Main")
if "Services" in menu.keys():
tabList.insert(1, "Services")
s = ""
tabNum = 0
for tab in tabList:
if tabNum == 0:
if tab == activeTab:
s += "<li id=\"active\" class=\"first\"><a href=\"%s\" id=\"current\">%s</a></li>\n" % \
(menu[tab], tab)
else:
s += "<li class=\"first\"><a href=\"%s\">%s</a></li>\n" % \
(menu[tab], tab)
else:
if tab == activeTab:
s += "<li id=\"active\"><a href=\"%s\" id=\"current\">%s</a></li>\n" % \
(menu[tab], tab)
else:
s += "<li><a href=\"%s\">%s</a></li>\n" % \
(menu[tab], tab)
tabNum += 1
return s
def getTabTags(menu,activeTab):
tabList = menu.keys()
if "Main" in tabList:
tabList.remove("Main")
if "Services" in tabList:
tabList.remove("Services")
tabList.sort()
if "Main" in menu.keys():
tabList.insert(0, "Main")
if "Services" in menu.keys():
tabList.insert(1, "Services")
tabNum = 0
tags = []
for tab in tabList:
if tabNum == 0:
if tab == activeTab:
li = ET.Element('li', id='active')
li.set('class', 'first')
a = ET.SubElement(li, 'a', href=menu[tab], id='current')
a.text = tab
tags.append(li)
else:
li = ET.Element('li')
li.set('class', 'first')
a = ET.SubElement(li, 'a', href=menu[tab])
a.text = tab
tags.append(li)
else:
if tab == activeTab:
li = ET.Element('li', id='active')
a = ET.SubElement(li, 'a', href=menu[tab], id='current')
a.text = tab
tags.append(li)
else:
li = ET.Element('li')
a = ET.SubElement(li, 'a', href=menu[tab])
a.text = tab
tags.append(li)
tabNum += 1
return tags
def getQuickStatsTable(quickStats):
output = "\n<table>\n<caption>Quick Stats</caption>\n<thead><tr><th scope=col>Item</th><th scope=col>Value</th></tr></thead>\n"
output += "<tbody>\n"
rowNum = 0
for item in quickStats[0]:
output += "<tr%s><td>%s</td><td>%s</td></tr>\n" % \
(getRowClassString(rowNum),
item,
quickStats[1][item])
rowNum += 1
output += "</tbody>\n</table>\n"
return output