achalaramu 00bc55f762
Migrate bootstrap 4 from bootstrap 3
Closes: #1818. The new navbar collapse handles items better without a scrollbar.

- Switch dependency to newer bootstrap4 library.

- Bootstrap 4 has 5 grid levels instead of 4. Adjust all classes accordingly to
retain current semantics.

- Update for newer markup for dropdowns.

- Replace use for labels with badges. Labels have been removed. Use
badge-secondary instead of label-default.

- Replace use of btn-xs with btn-sm. Size is roughly the same.

- Accommodate removal of form-horizontal.

- .hidden* and .visible* classes have been removed. Use alternate utilities.

- Replace use of table-condensed with table-sm.

- Update progress bar background styling. .progress-bar-* have been replaced
with bg-*.

- Drop support for IE9 and below. Bootstrap 4 does not support those browsers.

- Use the new simplified markup for navs, navbar and navbar-toggler. Accommodate
removal of .navbar-fixed-top.

- Update the JSXC page too.

- Update all values that are using rem units. The base font size is now 1rem =
16px instead of 1rem = 10px. This the default for bootstrap 4.

- A button inside a dropdown menu is natively supported by bootstrap 4. Remove
custom styling done earlier.

- Drop use of removed class thumbnail.

- Override colors for buttons and warnings to keep the old style.

- Use new markup for close buttons inside alerts.

- Use .collapse.show instead of .collapse.in as per bootstrap 4 styling.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Veiko Aasa <veiko17@disroot.org>
2020-12-19 11:26:32 +02:00

79 lines
3.0 KiB
Python

# SPDX-License-Identifier: AGPL-3.0-or-later
"""
FreedomBox app for configuring MediaWiki.
"""
import pathlib
from django import forms
from django.forms import Widget
from django.utils.safestring import mark_safe
from django.utils.translation import ugettext_lazy as _
def get_skins():
"""Return a list of available skins as choice field values."""
skins_dir = pathlib.Path('/var/lib/mediawiki/skins')
if not skins_dir.exists():
return []
return [(skin.name.lower(), skin.name) for skin in skins_dir.iterdir()
if skin.is_dir()]
class PrependWidget(Widget):
"""Widget to create input-groups with prepended text."""
def __init__(self, base_widget, data, *args, **kwargs):
"""Initialize widget and get base instance"""
super(PrependWidget, self).__init__(*args, **kwargs)
self.base_widget = base_widget(*args, **kwargs)
self.data = data
def render(self, name, value, attrs=None, renderer=None):
"""Render base widget and add bootstrap spans."""
attrs['class'] = 'form-control'
field = self.base_widget.render(name, value, attrs, renderer)
widget_html = '''
<div class="input-group">
<span class="input-group-prepend">
<span class="input-group-text">
%(data)s
</span>
</span>
%(field)s
</div>'''
return mark_safe((widget_html) % {'field': field, 'data': self.data})
class MediaWikiForm(forms.Form): # pylint: disable=W0232
"""MediaWiki configuration form."""
password = forms.CharField(
label=_('Administrator Password'), help_text=_(
'Set a new password for MediaWiki\'s administrator account '
'(admin). Leave this field blank to keep the current password.'),
required=False, widget=forms.PasswordInput)
server_url = forms.CharField(
label=_('Server URL'), required=False, help_text=_(
'Used by MediaWiki to generate URLs that point to the wiki '
'such as in footer, feeds and emails.'),
widget=PrependWidget(base_widget=forms.TextInput, data='https://'))
enable_public_registrations = forms.BooleanField(
label=_('Enable public registrations'), required=False,
help_text=_('If enabled, anyone on the internet will be able to '
'create an account on your MediaWiki instance.'))
enable_private_mode = forms.BooleanField(
label=_('Enable private mode'), required=False,
help_text=_('If enabled, access will be restricted. Only people '
'who have accounts can read/write to the wiki. '
'Public registrations will also be disabled.'))
default_skin = forms.ChoiceField(
label=_('Default Skin'), required=False,
help_text=_('Choose a default skin for your MediaWiki installation. '
'Users have the option to select their preferred skin.'),
choices=get_skins)