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

« back to all changes in this revision

Viewing changes to www/plugins/console/__init__.py

Merged from new-dispatch branch.
This branch is now a child of new-dispatch (until that branch is merged with
    trunk).

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# IVLE
2
 
# Copyright (C) 2007-2008 The University of Melbourne
3
 
#
4
 
# This program is free software; you can redistribute it and/or modify
5
 
# it under the terms of the GNU General Public License as published by
6
 
# the Free Software Foundation; either version 2 of the License, or
7
 
# (at your option) any later version.
8
 
#
9
 
# This program is distributed in the hope that it will be useful,
10
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
 
# GNU General Public License for more details.
13
 
#
14
 
# You should have received a copy of the GNU General Public License
15
 
# along with this program; if not, write to the Free Software
16
 
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
17
 
 
18
 
# Plugin: console
19
 
# Author: Matt Giuca
20
 
# Date: 30/1/2008
21
 
 
22
 
# Console plugin. This "mini-app" can be plugged in to another application.
23
 
# It exposes two functions: "present" and "insert_scripts_styles".
24
 
# These should both be called at the appropriate time by the implementing
25
 
# application. See docs on these functions for details.
26
 
# Applications also need to call console_init in JavaScript from their own
27
 
# onload events.
28
 
 
29
 
import cgi
30
 
 
31
 
from ivle import util
32
 
 
33
 
import genshi
34
 
import genshi.core
35
 
import genshi.template
36
 
 
37
 
def insert_scripts_styles(scripts, styles, scripts_init):
38
 
    """Given 2 lists of strings: scripts and styles. These lists are lists of
39
 
    pathnames, as expected on the "scripts" and "styles" attributes of a
40
 
    Request object.
41
 
    This function appends new strings to the ends of each list, as required by
42
 
    this plugin. It does not add duplicates.
43
 
    """
44
 
    _append_if_absent(scripts,
45
 
        "media/common/json2.js",
46
 
        "media/common/md5.js",
47
 
        "media/common/util.js",
48
 
        "media/console/console.js")
49
 
    _append_if_absent(styles,
50
 
        "media/console/console.css")
51
 
    _append_if_absent(scripts_init,
52
 
        "console_init")
53
 
 
54
 
def present(req, windowpane=False):
55
 
    """Writes the HTML for this plugin into a request stream.
56
 
    May utilise other properties of the Request object in generating the HTML.
57
 
    windowpane: If True, starts the console in "window pane" mode, where it
58
 
    will float over the page and have a "minimize" button.
59
 
    """
60
 
    ctx = genshi.template.Context()
61
 
    ctx['windowpane'] = windowpane
62
 
    ctx['minimize_path'] = util.make_path("media/images/interface/minimize.png") 
63
 
    ctx['maximize_path'] = util.make_path("media/images/interface/maximize.png")
64
 
    loader = genshi.template.TemplateLoader(".", auto_reload=True)
65
 
    tmpl = loader.load(util.make_local_path("plugins/console/template.html"))
66
 
    #TODO: Make the dispatch render this
67
 
    req.write(tmpl.generate(ctx).render('html'))
68
 
 
69
 
def _append_if_absent(list, *values):
70
 
    """Appends an arbitray number of values to a list, but omits values that
71
 
    are already contained within the list."""
72
 
    for value in values:
73
 
        if not value in list:
74
 
            list.append(value)