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

« back to all changes in this revision

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

  • Committer: David Coles
  • Date: 2009-12-02 00:31:40 UTC
  • mfrom: (1326.1.4 svn-fixes)
  • Revision ID: coles.david@gmail.com-20091202003140-n0k6rmv86hu6mj2p
Allow updating files to past revisions through 'Subversion Log' page.

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
 
 
41
    plugin_scripts = {}
 
42
    plugin_styles = {}
 
43
    scripts_init = []
 
44
 
42
45
    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)
 
46
    overlay_blacklist = []
 
47
 
 
48
    def __init__(self, req, **kwargs):
 
49
        for key in kwargs:
 
50
            setattr(self, key, kwargs[key])
59
51
 
60
52
    def filter(self, stream, ctx):
61
53
        return stream
104
96
        ctx['scripts_init'] = self.scripts_init + overlay_bits[3]
105
97
        ctx['app_template'] = app
106
98
        ctx['title_img'] = media_url(req, CorePlugin,
107
 
                                     "images/chrome/root-breadcrumb.png")
108
 
        try:
109
 
            ancestry = self.get_context_ancestry(req)
110
 
        except NoPath:
111
 
            ancestry = []
112
 
 
113
 
        crumber = Breadcrumber(req)
114
 
 
115
 
        ctx['breadcrumbs'] = []
116
 
        for ancestor in ancestry:
117
 
            crumb = crumber.crumb(ancestor)
118
 
            if crumb is None:
119
 
                continue
120
 
 
121
 
            if hasattr(crumb, 'extra_breadcrumbs_before'):
122
 
                ctx['breadcrumbs'].extend(crumb.extra_breadcrumbs_before)
123
 
            ctx['breadcrumbs'].append(crumb)
124
 
            if hasattr(crumb, 'extra_breadcrumbs_after'):
125
 
                ctx['breadcrumbs'].extend(crumb.extra_breadcrumbs_after)
126
 
 
127
 
        # If the view has specified text for a breadcrumb, add one.
128
 
        if self.breadcrumb_text:
129
 
            ctx['breadcrumbs'].append(ViewBreadcrumb(req, self))
130
 
 
131
 
        # Allow the view to add its own fake breadcrumbs.
132
 
        ctx['breadcrumbs'].extend(self.extra_breadcrumbs)
133
 
 
 
99
                                     "images/chrome/title.png")
134
100
        self.populate_headings(req, ctx)
135
101
        tmpl = loader.load(os.path.join(os.path.dirname(__file__), 
136
102
                                                        'ivle-headings.html'))
162
128
                continue
163
129
 
164
130
            for tab in plugin.tabs:
165
 
                # tab is a tuple: name, title, desc, icon, path, weight, admin
166
 
                # (Admin is optional, defaults to false)
 
131
                # tab is a tuple: name, title, desc, icon, path
167
132
                new_app = {}
168
133
                new_app['this_app'] = hasattr(self, 'tab') \
169
134
                                      and tab[0] == self.tab
177
142
                        ctx['favicon'] = icon_url
178
143
                else:
179
144
                    new_app['has_icon'] = False
180
 
                # The following check is here, so it is AFTER setting the
181
 
                # icon, but BEFORE actually installing the tab in the menu
182
 
                if len(tab) > 6 and tab[6]:
183
 
                    # Admin-only tab
184
 
                    if not (req.user and req.user.admin):
185
 
                        break
186
145
                new_app['path'] = req.make_path(tab[4])
187
146
                new_app['desc'] = tab[2]
188
147
                new_app['name'] = tab[1]
234
193
class XHTMLErrorView(XHTMLView):
235
194
    template = 'xhtmlerror.html'
236
195
 
237
 
    def __init__(self, req, context, lastobj):
238
 
        super(XHTMLErrorView, self).__init__(req, context)
239
 
        self.lastobj = lastobj
240
 
 
241
 
    def get_context_ancestry(self, req):
242
 
        return req.publisher.get_ancestors(self.lastobj)
 
196
    def __init__(self, req, exception):
 
197
        self.context = exception
243
198
 
244
199
    def populate(self, req, ctx):
245
 
        ctx['req'] = req
246
200
        ctx['exception'] = self.context
247
201
 
248
202
class XHTMLUnauthorizedView(XHTMLErrorView):
249
203
    template = 'xhtmlunauthorized.html'
250
204
 
251
 
    def __init__(self, req, exception, lastobj):
252
 
        super(XHTMLUnauthorizedView, self).__init__(req, exception, lastobj)
 
205
    def __init__(self, req, exception):
 
206
        super(XHTMLUnauthorizedView, self).__init__(req, exception)
253
207
 
254
 
        if not req.publicmode and req.user is None:
 
208
        if req.user is None:
255
209
            # Not logged in. Redirect to login page.
256
210
            if req.uri == '/':
257
211
                query_string = ''
260
214
            req.throw_redirect('/+login' + query_string)
261
215
 
262
216
        req.status = 403
263
 
 
264
 
class ViewBreadcrumb(object):
265
 
    def __init__(self, req, context):
266
 
        self.req = req
267
 
        self.context = context
268
 
 
269
 
    @property
270
 
    def text(self):
271
 
        return self.context.breadcrumb_text