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

« back to all changes in this revision

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

  • Committer: Matt Giuca
  • Date: 2009-02-24 02:02:03 UTC
  • mto: This revision was merged to the branch mainline in revision 1119.
  • Revision ID: matt.giuca@gmail.com-20090224020203-aqdcjnsj6y7wl32o
Added a new look to the IVLE header bar. Mmmm... Web 2.0.
Added top-level directory image-source, containing SVG and script files for
    generating the images.
ivle/webapp/coremedia/images: Added 'chrome' directory containing the rendered
    images.
Modified ivle/webapp/base/ivle-headings.html and
    ivle/webapp/coremedia/ivle.css to support the new images.
    Note that the H1 and H2 at the top of the page are no longer displayed
    (and their custom styles have been removed). There is a heading image
    instead.

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
19
 
20
20
import inspect
21
21
import os.path
 
22
import urllib
22
23
 
23
24
import genshi.template
24
25
 
25
26
from ivle.webapp.media import media_url
 
27
from ivle.webapp.core import Plugin as CorePlugin
26
28
from ivle.webapp.base.views import BaseView
27
 
from ivle.webapp.base.plugins import OverlayPlugin
 
29
from ivle.webapp.base.plugins import ViewPlugin, OverlayPlugin
28
30
from ivle.webapp.errors import HTTPError, Unauthorized
29
31
import ivle.conf
30
32
import ivle.util
39
41
    template = 'template.html'
40
42
    plugin_scripts = {}
41
43
    plugin_styles = {}
 
44
    allow_overlays = True
42
45
    overlay_blacklist = []
43
46
 
44
47
    def __init__(self, req, **kwargs):
56
59
        # view.
57
60
        app_template = os.path.join(os.path.dirname(
58
61
                        inspect.getmodule(self).__file__), self.template) 
59
 
        req.write_html_head_foot = False
60
62
        loader = genshi.template.TemplateLoader(".", auto_reload=True)
61
63
        tmpl = loader.load(app_template)
62
64
        app = tmpl.generate(viewctx)
72
74
        # Global template
73
75
        ctx = genshi.template.Context()
74
76
        # XXX: Leave this here!! (Before req.styles is read)
75
 
        ctx['overlays'] = self.render_overlays(req)
76
 
        ctx['app_styles'] = req.styles
77
 
        ctx['scripts'] = req.scripts
 
77
        ctx['overlays'] = self.render_overlays(req) if req.user else []
 
78
 
 
79
        ctx['styles'] = [media_url(req, CorePlugin, 'ivle.css')]
 
80
        ctx['styles'] += req.styles
 
81
 
 
82
        ctx['scripts'] = [media_url(req, CorePlugin, path) for path in
 
83
                           ('util.js', 'json2.js', 'md5.js')]
 
84
        ctx['scripts'] += req.scripts
 
85
 
78
86
        ctx['scripts_init'] = req.scripts_init
79
87
        ctx['app_template'] = app
80
88
        self.populate_headings(req, ctx)
98
106
            ctx['login'] = None
99
107
            ctx['logged_in'] = False
100
108
        ctx['publicmode'] = req.publicmode
 
109
        if hasattr(self, 'help'):
 
110
            ctx['help_path'] = self.help
 
111
 
101
112
        ctx['apps_in_tabs'] = []
102
 
        for urlname in ivle.conf.apps.apps_in_tabs:
103
 
            new_app = {}
104
 
            app = ivle.conf.apps.app_url[urlname]
105
 
            new_app['this_app'] = hasattr(self, 'appname') \
106
 
                                  and urlname == self.appname
107
 
            if app.icon:
108
 
                new_app['has_icon'] = True
109
 
                icon_dir = ivle.conf.apps.app_icon_dir
110
 
                icon_url = ivle.util.make_path(os.path.join(icon_dir, app.icon))
111
 
                new_app['icon_url'] = icon_url
112
 
                if new_app['this_app']:
113
 
                    ctx['favicon'] = icon_url
114
 
            else:
115
 
                new_app['has_icon'] = False
116
 
            new_app['path'] = ivle.util.make_path(urlname)
117
 
            new_app['desc'] = app.desc
118
 
            new_app['name'] = app.name
119
 
            ctx['apps_in_tabs'].append(new_app)
120
 
            
 
113
        for plugin in req.config.plugin_index[ViewPlugin]:
 
114
            if not hasattr(plugin, 'tabs'):
 
115
                continue
 
116
 
 
117
            for tab in plugin.tabs:
 
118
                # tab is a tuple: name, title, desc, icon, path
 
119
                new_app = {}
 
120
                new_app['this_app'] = hasattr(self, 'appname') \
 
121
                                      and tab[0] == self.appname
 
122
 
 
123
                # Icon name
 
124
                if tab[3] is not None:
 
125
                    new_app['has_icon'] = True
 
126
                    icon_url = media_url(req, plugin, tab[3])
 
127
                    new_app['icon_url'] = icon_url
 
128
                    if new_app['this_app']:
 
129
                        ctx['favicon'] = icon_url
 
130
                else:
 
131
                    new_app['has_icon'] = False
 
132
                new_app['path'] = ivle.util.make_path(tab[4])
 
133
                new_app['desc'] = tab[2]
 
134
                new_app['name'] = tab[1]
 
135
                new_app['weight'] = tab[5]
 
136
                ctx['apps_in_tabs'].append(new_app)
 
137
 
 
138
        ctx['apps_in_tabs'].sort(key=lambda tab: tab['weight'])
 
139
 
121
140
    def render_overlays(self, req):
122
141
        """Generate XML streams for the overlays.
123
142
        
125
144
        scripts_init.
126
145
        """
127
146
        overlays = []
128
 
        for plugin in req.plugin_index[OverlayPlugin]:
 
147
        if not self.allow_overlays:
 
148
            return overlays
 
149
 
 
150
        for plugin in req.config.plugin_index[OverlayPlugin]:
129
151
            for overclass in plugin.overlays:
130
152
                if overclass in self.overlay_blacklist:
131
153
                    continue
166
188
 
167
189
    def __init__(self, req, exception):
168
190
        super(XHTMLUnauthorizedView, self).__init__(req, exception)
 
191
 
169
192
        if req.user is None:
170
193
            # Not logged in. Redirect to login page.
171
 
            req.throw_redirect('/') # XXX: Need proper URL.
 
194
            if req.uri == '/':
 
195
                query_string = ''
 
196
            else:
 
197
                query_string = '?url=' + urllib.quote(req.uri, safe="/~")
 
198
            req.throw_redirect('/+login' + query_string)
172
199
 
173
200
        req.status = 403