39
40
# Note the inline JavaScript, which provides the client with constants
40
41
# derived from the server configuration.
41
42
if req.title != None:
42
titlepart = ' - ' + req.title
43
titlepart = req.title + ' - '
45
46
req.write("""<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
46
47
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
47
48
<html xmlns="http://www.w3.org/1999/xhtml">
50
51
<meta http-equiv="Content-Type" content="%s; charset=utf-8" />
51
<script type="text/javascript">
52
""" % (cgi.escape(titlepart), cgi.escape(req.content_type)))
53
# Write inline JavaScript which gives the client code access to certain
54
# server-side variables.
56
username = repr(req.username)
59
req.write(""" <script type="text/javascript">
54
<link rel="stylesheet" type="text/css" href="%s" />
55
""" % (titlepart, req.content_type,
56
repr(conf.root_dir)[1:-1],
57
util.make_path('media/common/ivle.css')))
63
""" % (repr(conf.root_dir), username))
64
iconurl = get_icon_url(req.app)
66
req.write(""" <link rel="shortcut icon" href="%s" />
67
""" % cgi.escape(iconurl))
68
req.write(""" <link rel="stylesheet" type="text/css" href="%s" />
69
""" % cgi.escape(util.make_path('media/common/ivle.css')))
59
71
# Write any app-specific style and script links
60
72
for style in req.styles:
61
73
req.write(' <link rel="stylesheet" type="text/css" href="%s" />\n'
62
% util.make_path(style))
74
% cgi.escape(util.make_path(style)))
63
75
for script in req.scripts:
64
76
req.write(' <script type="text/javascript" src="%s" />\n'
65
% util.make_path(script))
77
% cgi.escape(util.make_path(script)))
67
79
req.write("</head>\n\n")
79
91
' <a href="%s">Help</a> |\n'
80
92
' <a href="%s">Logout</a>\n'
82
(req.username, get_help_url(req), util.make_path('logout')))
94
(cgi.escape(req.username),
95
cgi.escape(get_help_url(req)),
96
cgi.escape(util.make_path('logout'))))
84
98
req.write(' <p class="userhello">Not logged in.</p>')
115
129
help_path = 'help'
116
130
return util.make_path(help_path)
132
def get_icon_url(appurl, small=False):
133
"""Given an app's url name, gets the URL of the icon image for this app,
134
relative to the site root. Returns None if the app has no icon."""
135
if appurl is None: return None
136
app = conf.apps.app_url[appurl]
138
icon_dir = conf.apps.app_icon_dir_small
140
icon_dir = conf.apps.app_icon_dir
141
if app.icon is None: return None
142
return util.make_path(os.path.join(icon_dir, app.icon))
118
144
def print_apps_list(file, thisapp):
119
145
"""Prints all app tabs, as a UL. Prints a list item for each app that has
122
148
file: Object with a "write" method - ie. the request object.
125
file.write(' <ul class="apptabs">\n')
151
file.write(' <ul id="apptabs">\n')
127
153
for urlname in conf.apps.apps_in_tabs:
128
154
app = conf.apps.app_url[urlname]
133
159
file.write(' <li%s>' % li_attr)
135
file.write('<img src="%s" alt="" /> ' %
136
util.make_path(os.path.join(conf.apps.app_icon_dir,
161
file.write('<img src="%s" alt="" /> '
162
% cgi.escape(get_icon_url(urlname)))
138
163
file.write('<a href="%s">%s</a></li>\n'
139
% (util.make_path(urlname), app.name))
164
% (cgi.escape(util.make_path(urlname)), cgi.escape(app.name)))
141
166
file.write(' </ul>\n')