Generate webclient-realm.js while collecting staticfiles (fixes #3422)
This commit is contained in:
parent
de9c54513d
commit
46364a84e1
@ -85,7 +85,7 @@ Core:
|
|||||||
- Added custom translations in config [#3383].
|
- Added custom translations in config [#3383].
|
||||||
- Added dynamic webpage title [#3404].
|
- Added dynamic webpage title [#3404].
|
||||||
- Added 'go to top'-link [#3404].
|
- Added 'go to top'-link [#3404].
|
||||||
- Added caching for the index views [#3419].
|
- Added caching for the index views [#3419, #3424].
|
||||||
- Added projector prioritization [#3425].
|
- Added projector prioritization [#3425].
|
||||||
|
|
||||||
Mediafiles:
|
Mediafiles:
|
||||||
|
43
openslides/core/management/commands/collectstatic.py
Normal file
43
openslides/core/management/commands/collectstatic.py
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
import os
|
||||||
|
from typing import Any, Dict
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
|
from django.contrib.staticfiles.management.commands.collectstatic import \
|
||||||
|
Command as CollectStatic
|
||||||
|
from django.core.management.base import CommandError
|
||||||
|
from django.db.utils import OperationalError
|
||||||
|
|
||||||
|
from ...views import WebclientJavaScriptView
|
||||||
|
|
||||||
|
|
||||||
|
class Command(CollectStatic):
|
||||||
|
"""
|
||||||
|
Custom collectstatic command.
|
||||||
|
"""
|
||||||
|
realms = ['site', 'projector']
|
||||||
|
js_filename = 'webclient-{}.js'
|
||||||
|
|
||||||
|
def handle(self, **options: Any) -> str:
|
||||||
|
try:
|
||||||
|
self.view = WebclientJavaScriptView()
|
||||||
|
except OperationalError:
|
||||||
|
raise CommandError('You have to run OpenSlides first to create a ' +
|
||||||
|
'database before collecting staticfiles.')
|
||||||
|
return super().handle(**options)
|
||||||
|
|
||||||
|
def collect(self) -> Dict[str, Any]:
|
||||||
|
destination_dir = os.path.join(settings.OS_STATICFILES_DIR, 'js')
|
||||||
|
if not os.path.exists(destination_dir):
|
||||||
|
os.makedirs(destination_dir)
|
||||||
|
|
||||||
|
for realm in self.realms:
|
||||||
|
filename = self.js_filename.format(realm)
|
||||||
|
content = self.view.get(realm=realm).content
|
||||||
|
path = os.path.join(destination_dir, filename)
|
||||||
|
with open(path, 'wb+') as f:
|
||||||
|
f.write(content)
|
||||||
|
self.stdout.write("Written WebclientJavaScriptView for realm {} to '{}'".format(
|
||||||
|
realm,
|
||||||
|
path))
|
||||||
|
|
||||||
|
return super().collect()
|
@ -178,7 +178,7 @@ class WebclientJavaScriptView(utils_views.View):
|
|||||||
""".format(realm=realm, angular_modules=angular_modules, angular_constants=angular_constants, js_files=js_files) +
|
""".format(realm=realm, angular_modules=angular_modules, angular_constants=angular_constants, js_files=js_files) +
|
||||||
"""
|
"""
|
||||||
}());
|
}());
|
||||||
""")
|
""").replace('\n', '')
|
||||||
self.cache[realm] = content
|
self.cache[realm] = content
|
||||||
|
|
||||||
def get(self, *args: Any, **kwargs: Any) -> HttpResponse:
|
def get(self, *args: Any, **kwargs: Any) -> HttpResponse:
|
||||||
|
@ -81,8 +81,10 @@ LOCALE_PATHS = [
|
|||||||
|
|
||||||
STATIC_URL = '/static/'
|
STATIC_URL = '/static/'
|
||||||
|
|
||||||
|
OS_STATICFILES_DIR = os.path.join(MODULE_DIR, 'static')
|
||||||
|
|
||||||
STATICFILES_DIRS = [
|
STATICFILES_DIRS = [
|
||||||
os.path.join(MODULE_DIR, 'static'),
|
OS_STATICFILES_DIR,
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user