28
28
from ivle.webapp.base.views import BaseView
29
29
from ivle.webapp.base.plugins import ViewPlugin, OverlayPlugin
30
30
from ivle.webapp.errors import HTTPError, Unauthorized
31
from ivle.webapp.publisher import NoPath
32
from ivle.webapp.breadcrumbs import Breadcrumber
34
32
class XHTMLView(BaseView):
41
39
template = 'template.html'
42
42
allow_overlays = True
44
def __init__(self, *args, **kwargs):
45
super(XHTMLView, self).__init__(*args, **kwargs)
47
self.overlay_blacklist = []
49
self.plugin_scripts = {}
50
self.plugin_styles = {}
51
self.scripts_init = []
53
self.extra_breadcrumbs = []
54
self.overlay_blacklist = []
56
def get_context_ancestry(self, req):
57
return req.publisher.get_ancestors(self.context)
43
overlay_blacklist = []
45
def __init__(self, req, **kwargs):
47
setattr(self, key, kwargs[key])
59
49
def filter(self, stream, ctx):
74
64
tmpl = loader.load(app_template)
75
65
app = self.filter(tmpl.generate(viewctx), viewctx)
78
67
for plugin in self.plugin_scripts:
79
68
for path in self.plugin_scripts[plugin]:
80
view_scripts.append(media_url(req, plugin, path))
69
req.scripts.append(media_url(req, plugin, path))
83
71
for plugin in self.plugin_styles:
84
72
for path in self.plugin_styles[plugin]:
85
view_styles.append(media_url(req, plugin, path))
73
req.styles.append(media_url(req, plugin, path))
88
76
ctx = genshi.template.Context()
90
overlay_bits = self.render_overlays(req) if req.user else [[]]*4
91
ctx['overlays'] = overlay_bits[0]
77
# XXX: Leave this here!! (Before req.styles is read)
78
ctx['overlays'] = self.render_overlays(req) if req.user else []
93
80
ctx['styles'] = [media_url(req, CorePlugin, 'ivle.css')]
94
ctx['styles'] += view_styles
95
ctx['styles'] += overlay_bits[1]
81
ctx['styles'] += req.styles
97
83
ctx['scripts'] = [media_url(req, CorePlugin, path) for path in
98
84
('util.js', 'json2.js', 'md5.js')]
99
85
ctx['scripts'].append(media_url(req, '+external/jquery', 'jquery.js'))
100
ctx['scripts'] += view_scripts
101
ctx['scripts'] += overlay_bits[2]
86
ctx['scripts'] += req.scripts
103
ctx['scripts_init'] = self.scripts_init + overlay_bits[3]
88
ctx['scripts_init'] = req.scripts_init
104
89
ctx['app_template'] = app
105
90
ctx['title_img'] = media_url(req, CorePlugin,
106
"images/chrome/root-breadcrumb.png")
108
ctx['ancestry'] = self.get_context_ancestry(req)
112
# Allow the view to add its own fake breadcrumbs.
113
ctx['extra_breadcrumbs'] = self.extra_breadcrumbs
115
ctx['crumb'] = Breadcrumber(req).crumb
91
"images/chrome/title.png")
116
92
self.populate_headings(req, ctx)
117
93
tmpl = loader.load(os.path.join(os.path.dirname(__file__),
118
94
'ivle-headings.html'))
187
160
#TODO: Re-factor this to look nicer
188
161
for mplugin in overlay.plugin_scripts:
189
162
for path in overlay.plugin_scripts[mplugin]:
190
scripts.append(media_url(req, mplugin, path))
163
req.scripts.append(media_url(req, mplugin, path))
192
165
for mplugin in overlay.plugin_styles:
193
166
for path in overlay.plugin_styles[mplugin]:
194
styles.append(media_url(req, mplugin, path))
167
req.styles.append(media_url(req, mplugin, path))
196
scripts_init += overlay.plugin_scripts_init
169
req.scripts_init += overlay.plugin_scripts_init
198
171
overlays.append(overlay.render(req))
199
return (overlays, styles, scripts, scripts_init)
202
175
def get_error_view(cls, e):
209
182
class XHTMLErrorView(XHTMLView):
210
183
template = 'xhtmlerror.html'
212
def __init__(self, req, context, lastobj):
213
super(XHTMLErrorView, self).__init__(req, context)
214
self.lastobj = lastobj
216
def get_context_ancestry(self, req):
217
return req.publisher.get_ancestors(self.lastobj)
185
def __init__(self, req, exception):
186
self.context = exception
219
188
def populate(self, req, ctx):
221
189
ctx['exception'] = self.context
223
191
class XHTMLUnauthorizedView(XHTMLErrorView):
224
192
template = 'xhtmlunauthorized.html'
226
def __init__(self, req, exception, lastobj):
227
super(XHTMLUnauthorizedView, self).__init__(req, exception, lastobj)
194
def __init__(self, req, exception):
195
super(XHTMLUnauthorizedView, self).__init__(req, exception)
229
197
if req.user is None:
230
198
# Not logged in. Redirect to login page.