2
# Copyright (C) 2007-2008 The University of Melbourne
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.
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.
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
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
35
import genshi.template
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
41
This function appends new strings to the ends of each list, as required by
42
this plugin. It does not add duplicates.
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,
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.
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'))
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."""