forked from openlp/openlp
Fixed bug #790382 by using the Mako template engine to pass Python variables into the template.
This commit is contained in:
parent
77281d3142
commit
ee151cde2a
@ -27,7 +27,7 @@
|
|||||||
-->
|
-->
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<title>OpenLP 2.0 Remote</title>
|
<title>${app_title}</title>
|
||||||
<link rel="stylesheet" href="/files/jquery.mobile.css" />
|
<link rel="stylesheet" href="/files/jquery.mobile.css" />
|
||||||
<link rel="stylesheet" href="/files/openlp.css" />
|
<link rel="stylesheet" href="/files/openlp.css" />
|
||||||
<script type="text/javascript" src="/files/jquery.js"></script>
|
<script type="text/javascript" src="/files/jquery.js"></script>
|
||||||
@ -37,79 +37,79 @@
|
|||||||
<body>
|
<body>
|
||||||
<div data-role="page" id="home">
|
<div data-role="page" id="home">
|
||||||
<div data-role="header">
|
<div data-role="header">
|
||||||
<h1>OpenLP 2.0 Remote</h1>
|
<h1>${app_title}</h1>
|
||||||
</div>
|
</div>
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
<div data-role="controlgroup">
|
<div data-role="controlgroup">
|
||||||
<a href="#service-manager" data-role="button" data-icon="arrow-r" data-iconpos="right">Service Manager</a>
|
<a href="#service-manager" data-role="button" data-icon="arrow-r" data-iconpos="right">${service_manager}</a>
|
||||||
<a href="#slide-controller" data-role="button" data-icon="arrow-r" data-iconpos="right">Slide Controller</a>
|
<a href="#slide-controller" data-role="button" data-icon="arrow-r" data-iconpos="right">${slide_controller}</a>
|
||||||
<a href="#alerts" data-role="button" data-icon="arrow-r" data-iconpos="right">Alerts</a>
|
<a href="#alerts" data-role="button" data-icon="arrow-r" data-iconpos="right">${alerts}</a>
|
||||||
<a href="#search" data-role="button" data-icon="arrow-r" data-iconpos="right">Search</a>
|
<a href="#search" data-role="button" data-icon="arrow-r" data-iconpos="right">${search}</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div data-role="page" id="service-manager">
|
<div data-role="page" id="service-manager">
|
||||||
<div data-role="header">
|
<div data-role="header">
|
||||||
<a href="#" data-rel="back" data-icon="arrow-l">Back</a>
|
<a href="#" data-rel="back" data-icon="arrow-l">${back}</a>
|
||||||
<h1>Service Manager</h1>
|
<h1>${service_manager}</h1>
|
||||||
<a href="#" id="service-refresh" data-role="button" data-icon="refresh">Refresh</a>
|
<a href="#" id="service-refresh" data-role="button" data-icon="refresh">${refresh}</a>
|
||||||
</div>
|
</div>
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
<ul data-role="listview" data-inset="true">
|
<ul data-role="listview" data-inset="true">
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div data-role="footer" data-theme="b" class="ui-bar">
|
<div data-role="footer" data-theme="b" class="ui-bar">
|
||||||
<a href="#" id="service-blank" data-role="button" data-icon="blank">Blank</a>
|
<a href="#" id="service-blank" data-role="button" data-icon="blank">${blank}</a>
|
||||||
<a href="#" id="service-unblank" data-role="button" data-icon="unblank">Show</a>
|
<a href="#" id="service-unblank" data-role="button" data-icon="unblank">${show}</a>
|
||||||
<a href="#" id="service-previous" data-role="button" data-icon="arrow-l">Prev</a>
|
<a href="#" id="service-previous" data-role="button" data-icon="arrow-l">${prev}</a>
|
||||||
<a href="#" id="service-next" data-role="button" data-icon="arrow-r" data-iconpos="right">Next</a>
|
<a href="#" id="service-next" data-role="button" data-icon="arrow-r" data-iconpos="right">${next}</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div data-role="page" id="slide-controller">
|
<div data-role="page" id="slide-controller">
|
||||||
<div data-role="header">
|
<div data-role="header">
|
||||||
<a href="#" data-rel="back" data-icon="arrow-l">Back</a>
|
<a href="#" data-rel="back" data-icon="arrow-l">${back}</a>
|
||||||
<h1>Slide Controller</h1>
|
<h1>${slide_controller}</h1>
|
||||||
<a href="#" id="controller-refresh" data-role="button" data-icon="refresh">Refresh</a>
|
<a href="#" id="controller-refresh" data-role="button" data-icon="refresh">${refresh}</a>
|
||||||
</div>
|
</div>
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
<ul data-role="listview" data-inset="true">
|
<ul data-role="listview" data-inset="true">
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div data-role="footer" data-theme="b" class="ui-bar">
|
<div data-role="footer" data-theme="b" class="ui-bar">
|
||||||
<a href="#" id="controller-blank" data-role="button" data-icon="blank">Blank</a>
|
<a href="#" id="controller-blank" data-role="button" data-icon="blank">${blank}</a>
|
||||||
<a href="#" id="controller-unblank" data-role="button" data-icon="unblank">Show</a>
|
<a href="#" id="controller-unblank" data-role="button" data-icon="unblank">${show}</a>
|
||||||
<a href="#" id="controller-previous" data-role="button" data-icon="arrow-l">Prev</a>
|
<a href="#" id="controller-previous" data-role="button" data-icon="arrow-l">${prev}</a>
|
||||||
<a href="#" id="controller-next" data-role="button" data-icon="arrow-r" data-iconpos="right">Next</a>
|
<a href="#" id="controller-next" data-role="button" data-icon="arrow-r" data-iconpos="right">${next}</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div data-role="page" id="alerts">
|
<div data-role="page" id="alerts">
|
||||||
<div data-role="header">
|
<div data-role="header">
|
||||||
<a href="#" data-rel="back" data-icon="arrow-l">Back</a>
|
<a href="#" data-rel="back" data-icon="arrow-l">${back}</a>
|
||||||
<h1>Alerts</h1>
|
<h1>${alerts}</h1>
|
||||||
</div>
|
</div>
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
<div data-role="fieldcontain">
|
<div data-role="fieldcontain">
|
||||||
<label for="alert-text">Text:</label>
|
<label for="alert-text">${text}:</label>
|
||||||
<input type="text" name="alert-text" id="alert-text" value="" />
|
<input type="text" name="alert-text" id="alert-text" value="" />
|
||||||
</div>
|
</div>
|
||||||
<a href="#" id="alert-submit" data-role="button">Show Alert</a>
|
<a href="#" id="alert-submit" data-role="button">${show_alert}</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div data-role="page" id="search">
|
<div data-role="page" id="search">
|
||||||
<div data-role="header">
|
<div data-role="header">
|
||||||
<a href="#" data-rel="back" data-icon="arrow-l">Back</a>
|
<a href="#" data-rel="back" data-icon="arrow-l">${back}</a>
|
||||||
<h1>Search</h1>
|
<h1>${search}</h1>
|
||||||
</div>
|
</div>
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
<div data-role="fieldcontain">
|
<div data-role="fieldcontain">
|
||||||
<label for="search-plugin">Search:</label>
|
<label for="search-plugin">${search}:</label>
|
||||||
<select name="search-plugin" id="search-plugin" data-native-menu="false"></select>
|
<select name="search-plugin" id="search-plugin" data-native-menu="false"></select>
|
||||||
</div>
|
</div>
|
||||||
<div data-role="fieldcontain">
|
<div data-role="fieldcontain">
|
||||||
<label for="search-text">Text:</label>
|
<label for="search-text">${text}:</label>
|
||||||
<input type="search" name="search-text" id="search-text" value="" />
|
<input type="search" name="search-text" id="search-text" value="" />
|
||||||
</div>
|
</div>
|
||||||
<a href="#" id="search-submit" data-role="button">Search</a>
|
<a href="#" id="search-submit" data-role="button">${search}</a>
|
||||||
<ul data-role="listview" data-inset="true">
|
<ul data-role="listview" data-inset="true">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -6,8 +6,8 @@
|
|||||||
# --------------------------------------------------------------------------- #
|
# --------------------------------------------------------------------------- #
|
||||||
# Copyright (c) 2008-2011 Raoul Snyman #
|
# Copyright (c) 2008-2011 Raoul Snyman #
|
||||||
# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael #
|
# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael #
|
||||||
# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, #
|
# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, #
|
||||||
# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, #
|
# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, #
|
||||||
# Jeffrey Smith, Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode #
|
# Jeffrey Smith, Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode #
|
||||||
# Woldsund #
|
# Woldsund #
|
||||||
# --------------------------------------------------------------------------- #
|
# --------------------------------------------------------------------------- #
|
||||||
|
@ -115,7 +115,6 @@ import logging
|
|||||||
import os
|
import os
|
||||||
import urlparse
|
import urlparse
|
||||||
import re
|
import re
|
||||||
from pprint import pformat
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import json
|
import json
|
||||||
@ -123,10 +122,11 @@ except ImportError:
|
|||||||
import simplejson as json
|
import simplejson as json
|
||||||
|
|
||||||
from PyQt4 import QtCore, QtNetwork
|
from PyQt4 import QtCore, QtNetwork
|
||||||
|
from mako.template import Template
|
||||||
|
|
||||||
from openlp.core.lib import Receiver, PluginStatus
|
from openlp.core.lib import Receiver, PluginStatus
|
||||||
from openlp.core.ui import HideMode
|
from openlp.core.ui import HideMode
|
||||||
from openlp.core.utils import AppLocation
|
from openlp.core.utils import AppLocation, translate
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -261,6 +261,7 @@ class HttpConnection(object):
|
|||||||
self.ready_read)
|
self.ready_read)
|
||||||
QtCore.QObject.connect(self.socket, QtCore.SIGNAL(u'disconnected()'),
|
QtCore.QObject.connect(self.socket, QtCore.SIGNAL(u'disconnected()'),
|
||||||
self.disconnected)
|
self.disconnected)
|
||||||
|
self.translate()
|
||||||
|
|
||||||
def _get_service_items(self):
|
def _get_service_items(self):
|
||||||
service_items = []
|
service_items = []
|
||||||
@ -280,6 +281,27 @@ class HttpConnection(object):
|
|||||||
})
|
})
|
||||||
return service_items
|
return service_items
|
||||||
|
|
||||||
|
def translate(self):
|
||||||
|
"""
|
||||||
|
Translate various strings in the mobile app.
|
||||||
|
"""
|
||||||
|
self.template_vars = {
|
||||||
|
'app_title': translate('RemotePlugin.Mobile', 'OpenLP 2.0 Remote'),
|
||||||
|
'stage_title': translate('RemotePlugin.Mobile', 'OpenLP 2.0 Stage View'),
|
||||||
|
'service_manager': translate('RemotePlugin.Mobile', 'Service Manager'),
|
||||||
|
'slide_controller': translate('RemotePlugin.Mobile', 'Slide Controller'),
|
||||||
|
'alerts': translate('RemotePlugin.Mobile', 'Alerts'),
|
||||||
|
'search': translate('RemotePlugin.Mobile', 'Search'),
|
||||||
|
'back': translate('RemotePlugin.Mobile', 'Back'),
|
||||||
|
'refresh': translate('RemotePlugin.Mobile', 'Refresh'),
|
||||||
|
'blank': translate('RemotePlugin.Mobile', 'Blank'),
|
||||||
|
'show': translate('RemotePlugin.Mobile', 'Show'),
|
||||||
|
'prev': translate('RemotePlugin.Mobile', 'Prev'),
|
||||||
|
'next': translate('RemotePlugin.Mobile', 'Next'),
|
||||||
|
'text': translate('RemotePlugin.Mobile', 'Text'),
|
||||||
|
'show_alert': translate('RemotePlugin.Mobile', 'Show Alert')
|
||||||
|
}
|
||||||
|
|
||||||
def ready_read(self):
|
def ready_read(self):
|
||||||
"""
|
"""
|
||||||
Data has been sent from the client. Respond to it
|
Data has been sent from the client. Respond to it
|
||||||
@ -327,8 +349,11 @@ class HttpConnection(object):
|
|||||||
if not path.startswith(self.parent.html_dir):
|
if not path.startswith(self.parent.html_dir):
|
||||||
return HttpResponse(code=u'404 Not Found')
|
return HttpResponse(code=u'404 Not Found')
|
||||||
ext = os.path.splitext(filename)[1]
|
ext = os.path.splitext(filename)[1]
|
||||||
|
html = None
|
||||||
if ext == u'.html':
|
if ext == u'.html':
|
||||||
mimetype = u'text/html'
|
mimetype = u'text/html'
|
||||||
|
variables = self.template_vars
|
||||||
|
html = Template(filename=path, input_encoding=u'utf-8', output_encoding=u'utf-8').render(**variables)
|
||||||
elif ext == u'.css':
|
elif ext == u'.css':
|
||||||
mimetype = u'text/css'
|
mimetype = u'text/css'
|
||||||
elif ext == u'.js':
|
elif ext == u'.js':
|
||||||
@ -343,6 +368,9 @@ class HttpConnection(object):
|
|||||||
mimetype = u'text/plain'
|
mimetype = u'text/plain'
|
||||||
file_handle = None
|
file_handle = None
|
||||||
try:
|
try:
|
||||||
|
if html:
|
||||||
|
content = html
|
||||||
|
else:
|
||||||
file_handle = open(path, u'rb')
|
file_handle = open(path, u'rb')
|
||||||
log.debug(u'Opened %s' % path)
|
log.debug(u'Opened %s' % path)
|
||||||
content = file_handle.read()
|
content = file_handle.read()
|
||||||
|
Loading…
Reference in New Issue
Block a user