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

« back to all changes in this revision

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

Added overlay system and console overlay. Note that the console overlay
is no longer special cased, allowing multiple overlays per page.

This commit breaks the original console tab.

Show diffs side-by-side

added added

removed removed

Lines of Context:
24
24
 
25
25
from ivle.webapp.media import media_url
26
26
from ivle.webapp.base.views import BaseView
 
27
from ivle.webapp.base.plugins import OverlayPlugin
27
28
import ivle.conf
28
29
import ivle.util
29
30
 
37
38
    template = 'template.html'
38
39
    plugin_scripts = {}
39
40
    plugin_styles = {}
 
41
    overlay_blacklist = []
40
42
 
41
43
    def __init__(self, req, **kwargs):
42
44
        for key in kwargs:
68
70
 
69
71
        # Global template
70
72
        ctx = genshi.template.Context()
 
73
        # XXX: Leave this here!! (Before req.styles is read)
 
74
        ctx['overlays'] = self.render_overlays(req)
71
75
        ctx['app_styles'] = req.styles
72
76
        ctx['scripts'] = req.scripts
73
77
        ctx['scripts_init'] = req.scripts_init
76
80
        tmpl = loader.load(os.path.join(os.path.dirname(__file__), 
77
81
                                                        'ivle-headings.html'))
78
82
        req.write(tmpl.generate(ctx).render('xhtml', doctype='xhtml'))
 
83
        
 
84
    def populate(self, req, ctx):
 
85
        raise NotImplementedError()
79
86
 
80
87
    def populate_headings(self, req, ctx):
81
88
        ctx['favicon'] = None
108
115
            new_app['desc'] = app.desc
109
116
            new_app['name'] = app.name
110
117
            ctx['apps_in_tabs'].append(new_app)
 
118
            
 
119
    def render_overlays(self, req):
 
120
        """Generate XML streams for the overlays.
 
121
        
 
122
        Returns a list of streams. Populates the scripts, styles, and 
 
123
        scripts_init.
 
124
        """
 
125
        overlays = []
 
126
        for plugin in req.plugin_index[OverlayPlugin]:
 
127
            for overclass in plugin.overlays:
 
128
                if overclass in self.overlay_blacklist:
 
129
                    continue
 
130
                overlay = overclass(req)
 
131
                #TODO: Re-factor this to look nicer
 
132
                for mplugin in overlay.plugin_scripts:
 
133
                    for path in overlay.plugin_scripts[mplugin]:
 
134
                        req.scripts.append(media_url(req, mplugin, path))
 
135
 
 
136
                for mplugin in overlay.plugin_styles:
 
137
                    for path in overlay.plugin_styles[mplugin]:
 
138
                        req.styles.append(media_url(req, mplugin, path))
 
139
                
 
140
                req.scripts_init += overlay.plugin_scripts_init
 
141
                
 
142
                overlays.append(overlay.render(req))
 
143
        return overlays