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

« back to all changes in this revision

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

  • Committer: William Grant
  • Date: 2009-04-29 05:20:14 UTC
  • Revision ID: grantw@unimelb.edu.au-20090429052014-5tzyfz97fwt5mn0k
Replace some of ivle.makeuser's os.system calls with subprocess.call.

This makes Subversion repositories with spaces work.

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
 
    breadcrumb_text = None
44
 
 
45
 
    def __init__(self, *args, **kwargs):
46
 
        super(XHTMLView, self).__init__(*args, **kwargs)
47
 
 
48
 
        self.overlay_blacklist = []
49
 
 
50
 
        self.plugin_scripts = {}
51
 
        self.plugin_styles = {}
52
 
        self.scripts_init = []
53
 
 
54
 
        self.extra_breadcrumbs = []
55
 
        self.overlay_blacklist = []
56
 
 
57
 
    def get_context_ancestry(self, req):
58
 
        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])
59
48
 
60
49
    def filter(self, stream, ctx):
61
50
        return stream
75
64
        tmpl = loader.load(app_template)
76
65
        app = self.filter(tmpl.generate(viewctx), viewctx)
77
66
 
78
 
        view_scripts = []
79
67
        for plugin in self.plugin_scripts:
80
68
            for path in self.plugin_scripts[plugin]:
81
 
                view_scripts.append(media_url(req, plugin, path))
 
69
                req.scripts.append(media_url(req, plugin, path))
82
70
 
83
 
        view_styles = []
84
71
        for plugin in self.plugin_styles:
85
72
            for path in self.plugin_styles[plugin]:
86
 
                view_styles.append(media_url(req, plugin, path))
 
73
                req.styles.append(media_url(req, plugin, path))
87
74
 
88
75
        # Global template
89
76
        ctx = genshi.template.Context()
90
 
 
91
 
        overlay_bits = self.render_overlays(req) if req.user else [[]]*4
92
 
        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
79
 
94
80
        ctx['styles'] = [media_url(req, CorePlugin, 'ivle.css')]
95
 
        ctx['styles'] += view_styles
96
 
        ctx['styles'] += overlay_bits[1]
 
81
        ctx['styles'] += req.styles
97
82
 
98
83
        ctx['scripts'] = [media_url(req, CorePlugin, path) for path in
99
84
                           ('util.js', 'json2.js', 'md5.js')]
100
85
        ctx['scripts'].append(media_url(req, '+external/jquery', 'jquery.js'))
101
 
        ctx['scripts'] += view_scripts
102
 
        ctx['scripts'] += overlay_bits[2]
 
86
        ctx['scripts'] += req.scripts
103
87
 
104
 
        ctx['scripts_init'] = self.scripts_init + overlay_bits[3]
 
88
        ctx['scripts_init'] = req.scripts_init
105
89
        ctx['app_template'] = app
106
90
        ctx['title_img'] = media_url(req, CorePlugin,
107
 
                                     "images/chrome/root-breadcrumb.png")
108
 
        try:
109
 
            ctx['ancestry'] = self.get_context_ancestry(req)
110
 
        except NoPath:
111
 
            ctx['ancestry'] = []
112
 
 
113
 
        # If the view has specified text for a breadcrumb, add one.
114
 
        if self.breadcrumb_text:
115
 
            ctx['extra_breadcrumbs'] = [ViewBreadcrumb(req, self)]
116
 
        else:
117
 
            ctx['extra_breadcrumbs'] = []
118
 
 
119
 
        # Allow the view to add its own fake breadcrumbs.
120
 
        ctx['extra_breadcrumbs'] += self.extra_breadcrumbs
121
 
 
122
 
        ctx['crumb'] = Breadcrumber(req).crumb
 
91
                                     "images/chrome/title.png")
123
92
        self.populate_headings(req, ctx)
124
93
        tmpl = loader.load(os.path.join(os.path.dirname(__file__), 
125
94
                                                        'ivle-headings.html'))
180
149
        scripts_init.
181
150
        """
182
151
        overlays = []
183
 
        styles = []
184
 
        scripts = []
185
 
        scripts_init = []
186
152
        if not self.allow_overlays:
187
 
            return (overlays, styles, scripts, scripts_init)
 
153
            return overlays
188
154
 
189
155
        for plugin in req.config.plugin_index[OverlayPlugin]:
190
156
            for overclass in plugin.overlays:
194
160
                #TODO: Re-factor this to look nicer
195
161
                for mplugin in overlay.plugin_scripts:
196
162
                    for path in overlay.plugin_scripts[mplugin]:
197
 
                        scripts.append(media_url(req, mplugin, path))
 
163
                        req.scripts.append(media_url(req, mplugin, path))
198
164
 
199
165
                for mplugin in overlay.plugin_styles:
200
166
                    for path in overlay.plugin_styles[mplugin]:
201
 
                        styles.append(media_url(req, mplugin, path))
 
167
                        req.styles.append(media_url(req, mplugin, path))
202
168
 
203
 
                scripts_init += overlay.plugin_scripts_init
 
169
                req.scripts_init += overlay.plugin_scripts_init
204
170
 
205
171
                overlays.append(overlay.render(req))
206
 
        return (overlays, styles, scripts, scripts_init)
 
172
        return overlays
207
173
 
208
174
    @classmethod
209
175
    def get_error_view(cls, e):
216
182
class XHTMLErrorView(XHTMLView):
217
183
    template = 'xhtmlerror.html'
218
184
 
219
 
    def __init__(self, req, context, lastobj):
220
 
        super(XHTMLErrorView, self).__init__(req, context)
221
 
        self.lastobj = lastobj
222
 
 
223
 
    def get_context_ancestry(self, req):
224
 
        return req.publisher.get_ancestors(self.lastobj)
 
185
    def __init__(self, req, exception):
 
186
        self.context = exception
225
187
 
226
188
    def populate(self, req, ctx):
227
 
        ctx['req'] = req
228
189
        ctx['exception'] = self.context
229
190
 
230
191
class XHTMLUnauthorizedView(XHTMLErrorView):
231
192
    template = 'xhtmlunauthorized.html'
232
193
 
233
 
    def __init__(self, req, exception, lastobj):
234
 
        super(XHTMLUnauthorizedView, self).__init__(req, exception, lastobj)
 
194
    def __init__(self, req, exception):
 
195
        super(XHTMLUnauthorizedView, self).__init__(req, exception)
235
196
 
236
 
        if not req.publicmode and req.user is None:
 
197
        if req.user is None:
237
198
            # Not logged in. Redirect to login page.
238
199
            if req.uri == '/':
239
200
                query_string = ''
242
203
            req.throw_redirect('/+login' + query_string)
243
204
 
244
205
        req.status = 403
245
 
 
246
 
class ViewBreadcrumb(object):
247
 
    def __init__(self, req, context):
248
 
        self.req = req
249
 
        self.context = context
250
 
 
251
 
    @property
252
 
    def text(self):
253
 
        return self.context.breadcrumb_text