~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-03-25 05:53:14 UTC
  • mto: (1165.3.1 submissions)
  • mto: This revision was merged to the branch mainline in revision 1174.
  • Revision ID: grantw@unimelb.edu.au-20090325055314-7em2o0dizz5rf5xe
Add database classes for assessed, project_extension and project_submission. 

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
 
31
import ivle.conf
 
32
import ivle.util
33
33
 
34
34
class XHTMLView(BaseView):
35
35
    """
39
39
    """
40
40
 
41
41
    template = 'template.html'
 
42
    plugin_scripts = {}
 
43
    plugin_styles = {}
42
44
    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)
 
45
    overlay_blacklist = []
 
46
 
 
47
    def __init__(self, req, **kwargs):
 
48
        for key in kwargs:
 
49
            setattr(self, key, kwargs[key])
58
50
 
59
51
    def filter(self, stream, ctx):
60
52
        return stream
74
66
        tmpl = loader.load(app_template)
75
67
        app = self.filter(tmpl.generate(viewctx), viewctx)
76
68
 
77
 
        view_scripts = []
78
69
        for plugin in self.plugin_scripts:
79
70
            for path in self.plugin_scripts[plugin]:
80
 
                view_scripts.append(media_url(req, plugin, path))
 
71
                req.scripts.append(media_url(req, plugin, path))
81
72
 
82
 
        view_styles = []
83
73
        for plugin in self.plugin_styles:
84
74
            for path in self.plugin_styles[plugin]:
85
 
                view_styles.append(media_url(req, plugin, path))
 
75
                req.styles.append(media_url(req, plugin, path))
86
76
 
87
77
        # Global template
88
78
        ctx = genshi.template.Context()
89
 
 
90
 
        overlay_bits = self.render_overlays(req) if req.user else [[]]*4
91
 
        ctx['overlays'] = overlay_bits[0]
 
79
        # XXX: Leave this here!! (Before req.styles is read)
 
80
        ctx['overlays'] = self.render_overlays(req) if req.user else []
92
81
 
93
82
        ctx['styles'] = [media_url(req, CorePlugin, 'ivle.css')]
94
 
        ctx['styles'] += view_styles
95
 
        ctx['styles'] += overlay_bits[1]
 
83
        ctx['styles'] += req.styles
96
84
 
97
85
        ctx['scripts'] = [media_url(req, CorePlugin, path) for path in
98
86
                           ('util.js', 'json2.js', 'md5.js')]
99
87
        ctx['scripts'].append(media_url(req, '+external/jquery', 'jquery.js'))
100
 
        ctx['scripts'] += view_scripts
101
 
        ctx['scripts'] += overlay_bits[2]
 
88
        ctx['scripts'] += req.scripts
102
89
 
103
 
        ctx['scripts_init'] = self.scripts_init + overlay_bits[3]
 
90
        ctx['scripts_init'] = req.scripts_init
104
91
        ctx['app_template'] = app
105
92
        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
 
93
                                     "images/chrome/title.png")
116
94
        self.populate_headings(req, ctx)
117
95
        tmpl = loader.load(os.path.join(os.path.dirname(__file__), 
118
96
                                                        'ivle-headings.html'))
123
101
 
124
102
    def populate_headings(self, req, ctx):
125
103
        ctx['favicon'] = None
126
 
        ctx['root_dir'] = req.config['urls']['root']
127
 
        ctx['public_host'] = req.config['urls']['public_host']
128
 
        ctx['svn_base'] = req.config['urls']['svn_addr']
 
104
        ctx['root_dir'] = ivle.conf.root_dir
 
105
        ctx['public_host'] = ivle.conf.public_host
129
106
        ctx['write_javascript_settings'] = req.write_javascript_settings
130
107
        if req.user:
131
108
            ctx['login'] = req.user.login
158
135
                        ctx['favicon'] = icon_url
159
136
                else:
160
137
                    new_app['has_icon'] = False
161
 
                new_app['path'] = req.make_path(tab[4])
 
138
                new_app['path'] = ivle.util.make_path(tab[4])
162
139
                new_app['desc'] = tab[2]
163
140
                new_app['name'] = tab[1]
164
141
                new_app['weight'] = tab[5]
173
150
        scripts_init.
174
151
        """
175
152
        overlays = []
176
 
        styles = []
177
 
        scripts = []
178
 
        scripts_init = []
179
153
        if not self.allow_overlays:
180
 
            return (overlays, styles, scripts, scripts_init)
 
154
            return overlays
181
155
 
182
156
        for plugin in req.config.plugin_index[OverlayPlugin]:
183
157
            for overclass in plugin.overlays:
187
161
                #TODO: Re-factor this to look nicer
188
162
                for mplugin in overlay.plugin_scripts:
189
163
                    for path in overlay.plugin_scripts[mplugin]:
190
 
                        scripts.append(media_url(req, mplugin, path))
 
164
                        req.scripts.append(media_url(req, mplugin, path))
191
165
 
192
166
                for mplugin in overlay.plugin_styles:
193
167
                    for path in overlay.plugin_styles[mplugin]:
194
 
                        styles.append(media_url(req, mplugin, path))
 
168
                        req.styles.append(media_url(req, mplugin, path))
195
169
 
196
 
                scripts_init += overlay.plugin_scripts_init
 
170
                req.scripts_init += overlay.plugin_scripts_init
197
171
 
198
172
                overlays.append(overlay.render(req))
199
 
        return (overlays, styles, scripts, scripts_init)
 
173
        return overlays
200
174
 
201
175
    @classmethod
202
176
    def get_error_view(cls, e):
209
183
class XHTMLErrorView(XHTMLView):
210
184
    template = 'xhtmlerror.html'
211
185
 
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)
 
186
    def __init__(self, req, exception):
 
187
        self.context = exception
218
188
 
219
189
    def populate(self, req, ctx):
220
 
        ctx['req'] = req
221
190
        ctx['exception'] = self.context
222
191
 
223
192
class XHTMLUnauthorizedView(XHTMLErrorView):
224
193
    template = 'xhtmlunauthorized.html'
225
194
 
226
 
    def __init__(self, req, exception, lastobj):
227
 
        super(XHTMLUnauthorizedView, self).__init__(req, exception, lastobj)
 
195
    def __init__(self, req, exception):
 
196
        super(XHTMLUnauthorizedView, self).__init__(req, exception)
228
197
 
229
198
        if req.user is None:
230
199
            # Not logged in. Redirect to login page.