mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-09-19 04:59:01 +00:00
properly implement header in app and setup pages
- move header section to it's own file so that it can be imported across the app (app.html, simple_app.html, setup.html) Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
This commit is contained in:
parent
45b6aa6a1c
commit
ec6013b5bb
@ -36,6 +36,7 @@ LOGGER = logging.getLogger(__name__)
|
|||||||
class ConfigAppView(views.AppView):
|
class ConfigAppView(views.AppView):
|
||||||
"""Serve configuration page."""
|
"""Serve configuration page."""
|
||||||
name = config.name
|
name = config.name
|
||||||
|
description = config.description
|
||||||
form_class = ConfigurationForm
|
form_class = ConfigurationForm
|
||||||
app_id = 'config'
|
app_id = 'config'
|
||||||
manual_page = config.manual_page
|
manual_page = config.manual_page
|
||||||
|
|||||||
@ -29,5 +29,5 @@ urlpatterns = [
|
|||||||
AppView.as_view(name=deluge.name, description=deluge.description,
|
AppView.as_view(name=deluge.name, description=deluge.description,
|
||||||
diagnostics_module_name='deluge',
|
diagnostics_module_name='deluge',
|
||||||
clients=deluge.clients, app_id='deluge',
|
clients=deluge.clients, app_id='deluge',
|
||||||
manual_page=deluge.manual_page), name='index'),
|
manual_page=deluge.manual_page, icon_filename=deluge.icon_filename), name='index'),
|
||||||
]
|
]
|
||||||
|
|||||||
@ -44,7 +44,6 @@ def index(request):
|
|||||||
|
|
||||||
return TemplateResponse(
|
return TemplateResponse(
|
||||||
request, 'diagnostics.html', {
|
request, 'diagnostics.html', {
|
||||||
'title': diagnostics.name,
|
|
||||||
'name': diagnostics.name,
|
'name': diagnostics.name,
|
||||||
'description': diagnostics.description,
|
'description': diagnostics.description,
|
||||||
'is_running': _running_task is not None,
|
'is_running': _running_task is not None,
|
||||||
|
|||||||
@ -30,7 +30,6 @@ def index(request):
|
|||||||
if not firewall.get_enabled_status():
|
if not firewall.get_enabled_status():
|
||||||
return TemplateResponse(
|
return TemplateResponse(
|
||||||
request, 'firewall.html', {
|
request, 'firewall.html', {
|
||||||
'title': firewall.name,
|
|
||||||
'name': firewall.name,
|
'name': firewall.name,
|
||||||
'description': firewall.description,
|
'description': firewall.description,
|
||||||
'firewall_status': 'not_running'
|
'firewall_status': 'not_running'
|
||||||
@ -41,7 +40,6 @@ def index(request):
|
|||||||
|
|
||||||
return TemplateResponse(
|
return TemplateResponse(
|
||||||
request, 'firewall.html', {
|
request, 'firewall.html', {
|
||||||
'title': firewall.name,
|
|
||||||
'name': firewall.name,
|
'name': firewall.name,
|
||||||
'description': firewall.description,
|
'description': firewall.description,
|
||||||
'components': components.Firewall.list(),
|
'components': components.Firewall.list(),
|
||||||
|
|||||||
@ -44,6 +44,7 @@ class GitwebAppView(views.AppView):
|
|||||||
app_id = 'gitweb'
|
app_id = 'gitweb'
|
||||||
show_status_block = False
|
show_status_block = False
|
||||||
template_name = 'gitweb_configure.html'
|
template_name = 'gitweb_configure.html'
|
||||||
|
icon_filename = gitweb.icon_filename
|
||||||
|
|
||||||
def get_context_data(self, *args, **kwargs):
|
def get_context_data(self, *args, **kwargs):
|
||||||
"""Add repositories to the context data."""
|
"""Add repositories to the context data."""
|
||||||
|
|||||||
@ -47,6 +47,7 @@ class I2PAppView(AppView):
|
|||||||
diagnostics_module_name = i2p.service_name
|
diagnostics_module_name = i2p.service_name
|
||||||
show_status_block = True
|
show_status_block = True
|
||||||
template_name = 'i2p.html'
|
template_name = 'i2p.html'
|
||||||
|
icon_filename = i2p.icon_filename
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
"""Return the context data for rendering the template view."""
|
"""Return the context data for rendering the template view."""
|
||||||
|
|||||||
@ -40,6 +40,7 @@ class IkiwikiAppView(views.AppView):
|
|||||||
template_name = 'ikiwiki_configure.html'
|
template_name = 'ikiwiki_configure.html'
|
||||||
manual_page = ikiwiki.manual_page
|
manual_page = ikiwiki.manual_page
|
||||||
clients = ikiwiki.clients
|
clients = ikiwiki.clients
|
||||||
|
icon_filename = ikiwiki.icon_filename
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
"""Return the context data for rendering the template view."""
|
"""Return the context data for rendering the template view."""
|
||||||
|
|||||||
@ -20,13 +20,5 @@
|
|||||||
|
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
|
|
||||||
{% block description %}
|
|
||||||
|
|
||||||
{% for paragraph in description %}
|
|
||||||
<p>{{ paragraph|safe }}</p>
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block configuration %}
|
{% block configuration %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@ -34,7 +34,7 @@ class JSXCAppView(AppView):
|
|||||||
description = jsxc.description
|
description = jsxc.description
|
||||||
show_status_block = False
|
show_status_block = False
|
||||||
clients = jsxc.clients
|
clients = jsxc.clients
|
||||||
|
icon_filename = jsxc.icon_filename
|
||||||
|
|
||||||
class JsxcView(TemplateView):
|
class JsxcView(TemplateView):
|
||||||
"""A simple page to embed Javascript XMPP Client library."""
|
"""A simple page to embed Javascript XMPP Client library."""
|
||||||
|
|||||||
@ -38,7 +38,6 @@ def index(request):
|
|||||||
status = letsencrypt.get_status()
|
status = letsencrypt.get_status()
|
||||||
return TemplateResponse(
|
return TemplateResponse(
|
||||||
request, 'letsencrypt.html', {
|
request, 'letsencrypt.html', {
|
||||||
'title': letsencrypt.name,
|
|
||||||
'name': letsencrypt.name,
|
'name': letsencrypt.name,
|
||||||
'description': letsencrypt.description,
|
'description': letsencrypt.description,
|
||||||
'status': status,
|
'status': status,
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "app.html" %}
|
||||||
{% comment %}
|
{% comment %}
|
||||||
#
|
#
|
||||||
# This file is part of FreedomBox.
|
# This file is part of FreedomBox.
|
||||||
@ -21,13 +21,12 @@
|
|||||||
{% load bootstrap %}
|
{% load bootstrap %}
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
|
|
||||||
{% block content %}
|
{% block pagetitle %}
|
||||||
<h2>{{ title }}</h2>
|
<h2>{{ name }}</h2>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
{% for paragraph in description %}
|
|
||||||
<p>{{ paragraph|safe }}</p>
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
|
{% block configuration %}
|
||||||
<h3>{% trans "Configuration" %}</h3>
|
<h3>{% trans "Configuration" %}</h3>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
|
|||||||
@ -38,6 +38,8 @@ class SetupView(FormView):
|
|||||||
template_name = 'matrix-synapse-pre-setup.html'
|
template_name = 'matrix-synapse-pre-setup.html'
|
||||||
form_class = DomainSelectionForm
|
form_class = DomainSelectionForm
|
||||||
success_url = reverse_lazy('matrixsynapse:index')
|
success_url = reverse_lazy('matrixsynapse:index')
|
||||||
|
icon_filename = matrixsynapse.icon_filename
|
||||||
|
title = matrixsynapse.name
|
||||||
|
|
||||||
def form_valid(self, form):
|
def form_valid(self, form):
|
||||||
"""Handle valid form submission."""
|
"""Handle valid form submission."""
|
||||||
@ -48,8 +50,9 @@ class SetupView(FormView):
|
|||||||
"""Provide context data to the template."""
|
"""Provide context data to the template."""
|
||||||
context = super().get_context_data(**kwargs)
|
context = super().get_context_data(**kwargs)
|
||||||
|
|
||||||
context['title'] = matrixsynapse.name
|
context['name'] = matrixsynapse.name
|
||||||
context['description'] = matrixsynapse.description
|
context['description'] = matrixsynapse.description
|
||||||
|
context['icon_filename'] = matrixsynapse.icon_filename
|
||||||
context['domain_names'] = names.components.DomainName.list_names(
|
context['domain_names'] = names.components.DomainName.list_names(
|
||||||
'matrix-synapse-plinth')
|
'matrix-synapse-plinth')
|
||||||
|
|
||||||
@ -65,6 +68,7 @@ class MatrixSynapseAppView(AppView):
|
|||||||
diagnostics_module_name = 'matrixsynapse'
|
diagnostics_module_name = 'matrixsynapse'
|
||||||
form_class = MatrixSynapseForm
|
form_class = MatrixSynapseForm
|
||||||
port_forwarding_info = matrixsynapse.port_forwarding_info
|
port_forwarding_info = matrixsynapse.port_forwarding_info
|
||||||
|
icon_filename = matrixsynapse.icon_filename
|
||||||
|
|
||||||
def dispatch(self, request, *args, **kwargs):
|
def dispatch(self, request, *args, **kwargs):
|
||||||
"""Redirect to setup page if setup is not done yet."""
|
"""Redirect to setup page if setup is not done yet."""
|
||||||
|
|||||||
@ -43,6 +43,7 @@ class MediaWikiAppView(views.AppView):
|
|||||||
manual_page = mediawiki.manual_page
|
manual_page = mediawiki.manual_page
|
||||||
show_status_block = False
|
show_status_block = False
|
||||||
template_name = 'mediawiki.html'
|
template_name = 'mediawiki.html'
|
||||||
|
icon_filename = mediawiki.icon_filename
|
||||||
|
|
||||||
def get_initial(self):
|
def get_initial(self):
|
||||||
"""Return the values to fill in the form."""
|
"""Return the values to fill in the form."""
|
||||||
|
|||||||
@ -41,6 +41,7 @@ class MinetestAppView(AppView): # pylint: disable=too-many-ancestors
|
|||||||
clients = minetest.clients
|
clients = minetest.clients
|
||||||
manual_page = minetest.manual_page
|
manual_page = minetest.manual_page
|
||||||
port_forwarding_info = minetest.port_forwarding_info
|
port_forwarding_info = minetest.port_forwarding_info
|
||||||
|
icon_filename = minetest.icon_filename
|
||||||
|
|
||||||
def get_initial(self):
|
def get_initial(self):
|
||||||
"""Return the values to fill in the form."""
|
"""Return the values to fill in the form."""
|
||||||
|
|||||||
@ -31,5 +31,7 @@ urlpatterns = [
|
|||||||
description=mldonkey.description,
|
description=mldonkey.description,
|
||||||
clients=mldonkey.clients,
|
clients=mldonkey.clients,
|
||||||
manual_page=mldonkey.manual_page,
|
manual_page=mldonkey.manual_page,
|
||||||
show_status_block=True), name='index'),
|
show_status_block=True,
|
||||||
|
icon_filename=mldonkey.icon_filename),
|
||||||
|
name='index'),
|
||||||
]
|
]
|
||||||
|
|||||||
@ -31,7 +31,6 @@ def index(request):
|
|||||||
|
|
||||||
return TemplateResponse(
|
return TemplateResponse(
|
||||||
request, 'names.html', {
|
request, 'names.html', {
|
||||||
'title': names.name,
|
|
||||||
'name': names.name,
|
'name': names.name,
|
||||||
'description': names.description,
|
'description': names.description,
|
||||||
'manual_page': names.manual_page,
|
'manual_page': names.manual_page,
|
||||||
|
|||||||
@ -58,9 +58,8 @@ def index(request):
|
|||||||
|
|
||||||
return TemplateResponse(
|
return TemplateResponse(
|
||||||
request, 'openvpn.html', {
|
request, 'openvpn.html', {
|
||||||
'title': openvpn.name,
|
|
||||||
'name': openvpn.name,
|
|
||||||
'clients': openvpn.clients,
|
'clients': openvpn.clients,
|
||||||
|
'name': openvpn.name,
|
||||||
'description': openvpn.description,
|
'description': openvpn.description,
|
||||||
'manual_page': openvpn.manual_page,
|
'manual_page': openvpn.manual_page,
|
||||||
'port_forwarding_info': openvpn.port_forwarding_info,
|
'port_forwarding_info': openvpn.port_forwarding_info,
|
||||||
@ -70,6 +69,7 @@ def index(request):
|
|||||||
'is_running': status['is_running'],
|
'is_running': status['is_running'],
|
||||||
'diagnostics_module_name': 'openvpn',
|
'diagnostics_module_name': 'openvpn',
|
||||||
'is_enabled': status['enabled'],
|
'is_enabled': status['enabled'],
|
||||||
|
'icon_filename': openvpn.icon_filename
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -30,6 +30,7 @@ class QuasselAppView(AppView):
|
|||||||
manual_page = quassel.manual_page
|
manual_page = quassel.manual_page
|
||||||
port_forwarding_info = quassel.port_forwarding_info
|
port_forwarding_info = quassel.port_forwarding_info
|
||||||
form_class = QuasselForm
|
form_class = QuasselForm
|
||||||
|
icon_filename = quassel.icon_filename
|
||||||
|
|
||||||
def get_initial(self):
|
def get_initial(self):
|
||||||
"""Return the values to fill in the form."""
|
"""Return the values to fill in the form."""
|
||||||
|
|||||||
@ -38,6 +38,7 @@ class RadicaleAppView(AppView):
|
|||||||
form_class = RadicaleForm
|
form_class = RadicaleForm
|
||||||
app_id = 'radicale'
|
app_id = 'radicale'
|
||||||
manual_page = radicale.manual_page
|
manual_page = radicale.manual_page
|
||||||
|
icon_filename = radicale.icon_filename
|
||||||
|
|
||||||
def get_initial(self):
|
def get_initial(self):
|
||||||
"""Return the values to fill in the form."""
|
"""Return the values to fill in the form."""
|
||||||
|
|||||||
@ -30,5 +30,6 @@ urlpatterns = [
|
|||||||
diagnostics_module_name='roundcube',
|
diagnostics_module_name='roundcube',
|
||||||
description=roundcube.description,
|
description=roundcube.description,
|
||||||
show_status_block=False, clients=roundcube.clients,
|
show_status_block=False, clients=roundcube.clients,
|
||||||
manual_page=roundcube.manual_page), name='index'),
|
manual_page=roundcube.manual_page,
|
||||||
|
icon_filename=roundcube.icon_filename), name='index'),
|
||||||
]
|
]
|
||||||
|
|||||||
@ -38,6 +38,7 @@ class SearxAppView(views.AppView):
|
|||||||
form_class = SearxForm
|
form_class = SearxForm
|
||||||
show_status_block = False
|
show_status_block = False
|
||||||
manual_page = searx.manual_page
|
manual_page = searx.manual_page
|
||||||
|
icon_filename = searx.icon_filename
|
||||||
|
|
||||||
def get_initial(self):
|
def get_initial(self):
|
||||||
"""Return the status of the service to fill in the form."""
|
"""Return the status of the service to fill in the form."""
|
||||||
|
|||||||
@ -38,6 +38,7 @@ class ShadowsocksAppView(views.AppView):
|
|||||||
name = shadowsocks.name
|
name = shadowsocks.name
|
||||||
description = shadowsocks.description
|
description = shadowsocks.description
|
||||||
manual_page = shadowsocks.manual_page
|
manual_page = shadowsocks.manual_page
|
||||||
|
icon_filename = shadowsocks.icon_filename
|
||||||
|
|
||||||
def get_initial(self, *args, **kwargs):
|
def get_initial(self, *args, **kwargs):
|
||||||
"""Get initial values for form."""
|
"""Get initial values for form."""
|
||||||
|
|||||||
@ -42,6 +42,7 @@ description = [
|
|||||||
|
|
||||||
app = None
|
app = None
|
||||||
|
|
||||||
|
icon_filename = 'sharing'
|
||||||
|
|
||||||
class SharingApp(app_module.App):
|
class SharingApp(app_module.App):
|
||||||
"""FreedomBox app for sharing files."""
|
"""FreedomBox app for sharing files."""
|
||||||
|
|||||||
@ -33,11 +33,7 @@
|
|||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
<h2>{{ title }}</h2>
|
{% include "header.html" with icon_filename=icon_filename name=title description='' %}
|
||||||
|
|
||||||
{% for paragraph in description %}
|
|
||||||
<p>{{ paragraph|safe }}</p>
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<a title="{% trans 'Add share' %}"
|
<a title="{% trans 'Add share' %}"
|
||||||
|
|||||||
@ -42,6 +42,7 @@ class IndexView(TemplateView):
|
|||||||
context['title'] = sharing.name
|
context['title'] = sharing.name
|
||||||
context['description'] = sharing.description
|
context['description'] = sharing.description
|
||||||
context['shares'] = sharing.list_shares()
|
context['shares'] = sharing.list_shares()
|
||||||
|
context['icon_filename'] = sharing.icon_filename
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -31,5 +31,6 @@ urlpatterns = [
|
|||||||
description=syncthing.description,
|
description=syncthing.description,
|
||||||
clients=syncthing.clients,
|
clients=syncthing.clients,
|
||||||
manual_page=syncthing.manual_page,
|
manual_page=syncthing.manual_page,
|
||||||
|
icon_filename = syncthing.icon_filename,
|
||||||
show_status_block=True), name='index'),
|
show_status_block=True), name='index'),
|
||||||
]
|
]
|
||||||
|
|||||||
@ -64,6 +64,8 @@ manual_page = 'Tor'
|
|||||||
|
|
||||||
app = None
|
app = None
|
||||||
|
|
||||||
|
icon_filename = 'tor'
|
||||||
|
|
||||||
|
|
||||||
class TorApp(app_module.App):
|
class TorApp(app_module.App):
|
||||||
"""FreedomBox app for Tor."""
|
"""FreedomBox app for Tor."""
|
||||||
|
|||||||
@ -132,4 +132,3 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
|||||||
@ -52,7 +52,6 @@ def index(request):
|
|||||||
|
|
||||||
return TemplateResponse(
|
return TemplateResponse(
|
||||||
request, 'tor.html', {
|
request, 'tor.html', {
|
||||||
'title': tor.name,
|
|
||||||
'name': tor.name,
|
'name': tor.name,
|
||||||
'description': tor.description,
|
'description': tor.description,
|
||||||
'clients': tor.clients,
|
'clients': tor.clients,
|
||||||
@ -65,6 +64,7 @@ def index(request):
|
|||||||
'is_enabled': status['enabled'],
|
'is_enabled': status['enabled'],
|
||||||
'show_status_block': True,
|
'show_status_block': True,
|
||||||
'is_running': status['is_running'],
|
'is_running': status['is_running'],
|
||||||
|
'icon_filename': tor.icon_filename,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -42,6 +42,7 @@ class TransmissionAppView(views.AppView):
|
|||||||
form_class = TransmissionForm
|
form_class = TransmissionForm
|
||||||
app_id = 'transmission'
|
app_id = 'transmission'
|
||||||
manual_page = transmission.manual_page
|
manual_page = transmission.manual_page
|
||||||
|
icon_filename = transmission.icon_filename
|
||||||
|
|
||||||
def get_initial(self):
|
def get_initial(self):
|
||||||
"""Get the current settings from Transmission server."""
|
"""Get the current settings from Transmission server."""
|
||||||
|
|||||||
@ -29,6 +29,7 @@ urlpatterns = [
|
|||||||
AppView.as_view(app_id='ttrss', name=ttrss.name,
|
AppView.as_view(app_id='ttrss', name=ttrss.name,
|
||||||
diagnostics_module_name='ttrss',
|
diagnostics_module_name='ttrss',
|
||||||
description=ttrss.description, clients=ttrss.clients,
|
description=ttrss.description, clients=ttrss.clients,
|
||||||
|
icon_filename=ttrss.icon_filename,
|
||||||
manual_page=ttrss.manual_page, show_status_block=True),
|
manual_page=ttrss.manual_page, show_status_block=True),
|
||||||
name='index'),
|
name='index'),
|
||||||
]
|
]
|
||||||
|
|||||||
@ -27,35 +27,7 @@
|
|||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
<header>
|
{% include "header.html" with icon_filename=icon_filename name=name description=description manual_page=manual_page %}
|
||||||
<section class='header-bar'>
|
|
||||||
{% block pagetitle %}
|
|
||||||
<h2>{{ name }}</h2>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
<div id='app-toggle-container' class="app-toggle-container">
|
|
||||||
{% if is_enabled %}
|
|
||||||
<button id="app-toggle-button" value="False" class="btn toggle-button toggle-button--toggled"></button>
|
|
||||||
{% else %}
|
|
||||||
<button id="app-toggle-button" value="True" class="btn toggle-button"></button>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
{% block description %}
|
|
||||||
{% for paragraph in description %}
|
|
||||||
<p>{{ paragraph|safe }}</p>
|
|
||||||
{% endfor %}
|
|
||||||
{% endblock %}
|
|
||||||
</header>
|
|
||||||
|
|
||||||
{% if manual_page %}
|
|
||||||
<p class="manual-page">
|
|
||||||
<a href="{% url 'help:manual-page' lang='-' page=manual_page %}">
|
|
||||||
{% trans 'Learn more...' %}
|
|
||||||
</a>
|
|
||||||
</p>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% include "toolbar.html" with enabled=is_enabled %}
|
{% include "toolbar.html" with enabled=is_enabled %}
|
||||||
|
|
||||||
|
|||||||
35
plinth/templates/header.html
Normal file
35
plinth/templates/header.html
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
{% load bootstrap %}
|
||||||
|
{% load i18n %}
|
||||||
|
{% load static %}
|
||||||
|
|
||||||
|
<header class="app-header {% if not icon_filename %} app-header-single-column {% endif %}">
|
||||||
|
{% if icon_filename %}
|
||||||
|
|
||||||
|
<img src="{% static 'theme/icons/' %}{{ icon_filename }}.svg" alt="{{ name }}"/>
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<section class="app-description" >
|
||||||
|
{% block pagetitle %}
|
||||||
|
{% if setup %}
|
||||||
|
<h2>{% trans "Installation" %}: {{ short_description|default:'' }} ({{ name }})</h2>
|
||||||
|
{% else %}
|
||||||
|
<h2>{{ name }}</h2>
|
||||||
|
{% endif %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block description %}
|
||||||
|
{% for paragraph in description %}
|
||||||
|
<p>{{ paragraph|safe }}</p>
|
||||||
|
{% endfor %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% if manual_page %}
|
||||||
|
<p class="manual-page">
|
||||||
|
<a href="{% url 'help:manual-page' lang='-' page=manual_page %}">
|
||||||
|
{% trans 'Learn more...' %}
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
||||||
|
</section>
|
||||||
|
</header>
|
||||||
@ -36,30 +36,7 @@
|
|||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
<header class="app-header {% if not setup_helper.module.icon_filename %} app-header-single-column {% endif %}">
|
{% include "header.html" with icon_filename=setup_helper.module.icon_filename name=setup_helper.module.name description=setup_helper.module.description manual_page=setup_helper.module.manual_page setup=True %}
|
||||||
|
|
||||||
{% if setup_helper.module.icon_filename %}
|
|
||||||
|
|
||||||
<img src="{% static 'theme/icons/' %}{{ setup_helper.module.icon_filename }}.svg" alt="{{ setup_helper.module.name }}"/>
|
|
||||||
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
<section class="app-description" >
|
|
||||||
<h2>{% trans "Installation" %}: {{ setup_helper.module.short_description|default:'' }} ({{ setup_helper.module.name }}) </h2>
|
|
||||||
|
|
||||||
{% for paragraph in setup_helper.module.description %}
|
|
||||||
<p>{{ paragraph|safe }}</p>
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
{% if setup_helper.module.manual_page %}
|
|
||||||
<p class="manual-page">
|
|
||||||
<a href="{% url 'help:manual-page' lang='-' page=setup_helper.module.manual_page %}">
|
|
||||||
{% trans 'Learn more...' %}
|
|
||||||
</a>
|
|
||||||
</p>
|
|
||||||
{% endif %}
|
|
||||||
</section>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
{% include "toolbar.html" with clients=setup_helper.module.clients %}
|
{% include "toolbar.html" with clients=setup_helper.module.clients %}
|
||||||
|
|
||||||
|
|||||||
@ -126,6 +126,7 @@ class AppView(FormView):
|
|||||||
template_name = 'app.html'
|
template_name = 'app.html'
|
||||||
manual_page = ''
|
manual_page = ''
|
||||||
port_forwarding_info = None
|
port_forwarding_info = None
|
||||||
|
icon_filename = ''
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
"""Initialize the view."""
|
"""Initialize the view."""
|
||||||
@ -197,6 +198,7 @@ class AppView(FormView):
|
|||||||
context['show_status_block'] = self.show_status_block
|
context['show_status_block'] = self.show_status_block
|
||||||
context['manual_page'] = self.manual_page
|
context['manual_page'] = self.manual_page
|
||||||
context['port_forwarding_info'] = self.port_forwarding_info
|
context['port_forwarding_info'] = self.port_forwarding_info
|
||||||
|
context['icon_filename'] = self.icon_filename
|
||||||
|
|
||||||
from plinth.modules.firewall.components import Firewall
|
from plinth.modules.firewall.components import Firewall
|
||||||
context['firewall'] = self.app.get_components_of_type(Firewall)
|
context['firewall'] = self.app.get_components_of_type(Firewall)
|
||||||
@ -207,6 +209,9 @@ class AppView(FormView):
|
|||||||
class SetupView(TemplateView):
|
class SetupView(TemplateView):
|
||||||
"""View to prompt and setup applications."""
|
"""View to prompt and setup applications."""
|
||||||
template_name = 'setup.html'
|
template_name = 'setup.html'
|
||||||
|
name = 'None'
|
||||||
|
# List of paragraphs describing the service
|
||||||
|
description = ""
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
"""Return the context data rendering the template."""
|
"""Return the context data rendering the template."""
|
||||||
@ -223,6 +228,9 @@ class SetupView(TemplateView):
|
|||||||
context[
|
context[
|
||||||
'package_manager_is_busy'] = package.is_package_manager_busy()
|
'package_manager_is_busy'] = package.is_package_manager_busy()
|
||||||
|
|
||||||
|
context['name'] = self.name
|
||||||
|
context['description'] = self.description
|
||||||
|
|
||||||
return context
|
return context
|
||||||
|
|
||||||
def dispatch(self, request, *args, **kwargs):
|
def dispatch(self, request, *args, **kwargs):
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user