~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to ivle/webapp/base/xhtml.py

Merge submissions-subversion-acls.

Offering staff can now use Subversion to access submissions.

Show diffs side-by-side

added added

removed removed

Lines of Context:
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
33
31
 
34
32
class XHTMLView(BaseView):
35
33
    """
39
37
    """
40
38
 
41
39
    template = 'template.html'
 
40
    plugin_scripts = {}
 
41
    plugin_styles = {}
42
42
    allow_overlays = True
43
 
 
44
 
    def __init__(self, *args, **kwargs):
45
 
        super(XHTMLView, self).__init__(*args, **kwargs)
46
 
 
47
 
        self.overlay_blacklist = []
48
 
 
49
 
        self.plugin_scripts = {}
50
 
        self.plugin_styles = {}
51
 
        self.scripts_init = []
52
 
 
53
 
        self.extra_breadcrumbs = []
54
 
        self.overlay_blacklist = []
55
 
 
56
 
    def get_context_ancestry(self, req):
57
 
        return req.publisher.get_ancestors(self.context)
 
43
    overlay_blacklist = []
 
44
 
 
45
    def __init__(self, req, **kwargs):
 
46
        for key in kwargs:
 
47
            setattr(self, key, kwargs[key])
58
48
 
59
49
    def filter(self, stream, ctx):
60
50
        return stream
74
64
        tmpl = loader.load(app_template)
75
65
        app = self.filter(tmpl.generate(viewctx), viewctx)
76
66
 
77
 
        view_scripts = []
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))
81
70
 
82
 
        view_styles = []
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))
86
74
 
87
75
        # Global template
88
76
        ctx = genshi.template.Context()
89
 
 
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 []
92
79
 
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
96
82
 
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
102
87
 
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")
107
 
        try:
108
 
            ctx['ancestry'] = self.get_context_ancestry(req)
109
 
        except NoPath:
110
 
            ctx['ancestry'] = []
111
 
 
112
 
        # Allow the view to add its own fake breadcrumbs.
113
 
        ctx['extra_breadcrumbs'] = self.extra_breadcrumbs
114
 
 
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'))
173
149
        scripts_init.
174
150
        """
175
151
        overlays = []
176
 
        styles = []
177
 
        scripts = []
178
 
        scripts_init = []
179
152
        if not self.allow_overlays:
180
 
            return (overlays, styles, scripts, scripts_init)
 
153
            return overlays
181
154
 
182
155
        for plugin in req.config.plugin_index[OverlayPlugin]:
183
156
            for overclass in plugin.overlays:
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))
191
164
 
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))
195
168
 
196
 
                scripts_init += overlay.plugin_scripts_init
 
169
                req.scripts_init += overlay.plugin_scripts_init
197
170
 
198
171
                overlays.append(overlay.render(req))
199
 
        return (overlays, styles, scripts, scripts_init)
 
172
        return overlays
200
173
 
201
174
    @classmethod
202
175
    def get_error_view(cls, e):
209
182
class XHTMLErrorView(XHTMLView):
210
183
    template = 'xhtmlerror.html'
211
184
 
212
 
    def __init__(self, req, context, lastobj):
213
 
        super(XHTMLErrorView, self).__init__(req, context)
214
 
        self.lastobj = lastobj
215
 
 
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
218
187
 
219
188
    def populate(self, req, ctx):
220
 
        ctx['req'] = req
221
189
        ctx['exception'] = self.context
222
190
 
223
191
class XHTMLUnauthorizedView(XHTMLErrorView):
224
192
    template = 'xhtmlunauthorized.html'
225
193
 
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)
228
196
 
229
197
        if req.user is None:
230
198
            # Not logged in. Redirect to login page.