Add plugin xstatic modules support
This patch allows Horizon to accept additional xstatic modules in plugin dashboards. Related static files would be collected and included in every page. Change-Id: Ie49a522b28aaf6e028c5b218968d68189dd7eef1 Closes-Bug: #1755339
This commit is contained in:
parent
892607890a
commit
1f93e64a3d
@ -79,6 +79,29 @@ A list of scss files to be included in the compressed set of files that are
|
||||
loaded on every page. We recommend one scss file per dashboard, use @import if
|
||||
you need to include additional scss files for panels.
|
||||
|
||||
|
||||
``ADD_XSTATIC_MODULES``
|
||||
-----------------------
|
||||
|
||||
.. versionadded:: 14.0.0(Rocky)
|
||||
|
||||
A list of xstatic modules containing javascript and scss files to be included
|
||||
in the compressed set of files that are loaded on every page. Related files
|
||||
specified in ``ADD_XSTATIC_MODULES`` do not need to be included in
|
||||
``ADD_JS_FILES``. This option expects a list of tuples, each consists of
|
||||
a xstatic module and a list of javascript files to be loaded if any.
|
||||
For more details, please check the comment of ``BASE_XSTATIC_MODULES``
|
||||
in openstack_dashboard/utils/settings.py.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
ADD_XSTATIC_MODULES = [
|
||||
('xstatic.pkg.foo', ['foo.js']),
|
||||
('xstatic.pkg.bar', None),
|
||||
]
|
||||
|
||||
.. _auto_discover_static_files:
|
||||
|
||||
``AUTO_DISCOVER_STATIC_FILES``
|
||||
|
@ -454,11 +454,8 @@ if DEFAULT_THEME_PATH is not None:
|
||||
_LOG.warning("DEFAULT_THEME_PATH has been deprecated. Please convert "
|
||||
"your settings to make use of AVAILABLE_THEMES.")
|
||||
|
||||
# Discover all the directories that contain static files; at the same time
|
||||
# discover all the xstatic module entry points to embed in our HTML
|
||||
STATICFILES_DIRS = settings_utils.get_xstatic_dirs(
|
||||
XSTATIC_MODULES, HORIZON_CONFIG)
|
||||
STATICFILES_DIRS += theme_settings.get_theme_static_dirs(
|
||||
# Discover all the directories that contain static files
|
||||
STATICFILES_DIRS = theme_settings.get_theme_static_dirs(
|
||||
AVAILABLE_THEMES, THEME_COLLECTION_DIR, ROOT_PATH)
|
||||
|
||||
# Ensure that we always have a SECRET_KEY set, even when no local_settings.py
|
||||
@ -496,6 +493,13 @@ INSTALLED_APPS[0:0] = ADD_INSTALLED_APPS
|
||||
|
||||
NG_TEMPLATE_CACHE_AGE = NG_TEMPLATE_CACHE_AGE if not DEBUG else 0
|
||||
|
||||
# Include xstatic_modules specified in plugin
|
||||
XSTATIC_MODULES += HORIZON_CONFIG['xstatic_modules']
|
||||
|
||||
# Discover all the xstatic module entry points to embed in our HTML
|
||||
STATICFILES_DIRS += settings_utils.get_xstatic_dirs(
|
||||
XSTATIC_MODULES, HORIZON_CONFIG)
|
||||
|
||||
# This base context objects gets added to the offline context generator
|
||||
# for each theme configured.
|
||||
HORIZON_COMPRESS_OFFLINE_CONTEXT_BASE = {
|
||||
|
@ -24,6 +24,12 @@ ADD_JS_SPEC_FILES = ['plugin_panel/plugin.spec.js']
|
||||
# A list of scss files to be included in the compressed set of files
|
||||
ADD_SCSS_FILES = ['plugin_panel/plugin.scss']
|
||||
|
||||
# A list of tuples of xstatic modules and files to be included
|
||||
# in the compressed set of files
|
||||
ADD_XSTATIC_MODULES = [
|
||||
('xstatic.pkg.foo', None)
|
||||
]
|
||||
|
||||
# A list of extensible header views to be displayed
|
||||
ADD_HEADER_SECTIONS = \
|
||||
['openstack_dashboard.test.test_panels.plugin_panel.views.TestBannerView',]
|
||||
|
@ -37,6 +37,7 @@ HORIZON_CONFIG.pop('default_dashboard', None)
|
||||
HORIZON_CONFIG.pop('js_files', None)
|
||||
HORIZON_CONFIG.pop('js_spec_files', None)
|
||||
HORIZON_CONFIG.pop('scss_files', None)
|
||||
HORIZON_CONFIG.pop('xstatic_modules', None)
|
||||
|
||||
util_settings.update_dashboards([panel_config,], HORIZON_CONFIG, INSTALLED_APPS)
|
||||
|
||||
@ -60,6 +61,8 @@ class PanelPluginTests(test.PluginTestCase):
|
||||
self.assertEqual(pc.ADD_JS_FILES, HORIZON_CONFIG['js_files'])
|
||||
self.assertEqual(pc.ADD_JS_SPEC_FILES, HORIZON_CONFIG['js_spec_files'])
|
||||
self.assertEqual(pc.ADD_SCSS_FILES, HORIZON_CONFIG['scss_files'])
|
||||
self.assertEqual(pc.ADD_XSTATIC_MODULES,
|
||||
HORIZON_CONFIG['xstatic_modules'])
|
||||
self.assertEqual(pc.ADD_HEADER_SECTIONS,
|
||||
HORIZON_CONFIG['header_sections'])
|
||||
|
||||
|
@ -110,6 +110,7 @@ def update_dashboards(modules, horizon_config, installed_apps):
|
||||
js_files = []
|
||||
js_spec_files = []
|
||||
scss_files = []
|
||||
xstatic_modules = []
|
||||
panel_customization = []
|
||||
header_sections = []
|
||||
extra_tabs = {}
|
||||
@ -145,6 +146,7 @@ def update_dashboards(modules, horizon_config, installed_apps):
|
||||
if f not in existing])
|
||||
js_spec_files.extend(config.get('ADD_JS_SPEC_FILES', []))
|
||||
scss_files.extend(config.get('ADD_SCSS_FILES', []))
|
||||
xstatic_modules.extend(config.get('ADD_XSTATIC_MODULES', []))
|
||||
update_horizon_config.update(
|
||||
config.get('UPDATE_HORIZON_CONFIG', {}))
|
||||
if config.get('DASHBOARD'):
|
||||
@ -173,6 +175,7 @@ def update_dashboards(modules, horizon_config, installed_apps):
|
||||
horizon_config.setdefault('js_files', []).extend(js_files)
|
||||
horizon_config.setdefault('js_spec_files', []).extend(js_spec_files)
|
||||
horizon_config.setdefault('scss_files', []).extend(scss_files)
|
||||
horizon_config.setdefault('xstatic_modules', []).extend(xstatic_modules)
|
||||
horizon_config['extra_tabs'] = extra_tabs
|
||||
|
||||
# apps contains reference to applications declared in the enabled folder
|
||||
@ -247,7 +250,7 @@ def get_xstatic_dirs(XSTATIC_MODULES, HORIZON_CONFIG):
|
||||
it must be handled as a special case.
|
||||
"""
|
||||
STATICFILES_DIRS = []
|
||||
HORIZON_CONFIG['xstatic_lib_files'] = []
|
||||
HORIZON_CONFIG.setdefault('xstatic_lib_files', [])
|
||||
for module_name, files in XSTATIC_MODULES:
|
||||
module = import_module(module_name)
|
||||
if module_name == 'xstatic.pkg.jquery_ui':
|
||||
|
9
releasenotes/notes/bug-1755339-2dfa3ce2accb568f.yaml
Normal file
9
releasenotes/notes/bug-1755339-2dfa3ce2accb568f.yaml
Normal file
@ -0,0 +1,9 @@
|
||||
---
|
||||
features:
|
||||
- |
|
||||
[:bug:`1755339`]
|
||||
(for horizon plugin developers) A new plugin option ``ADD_XSTATIC_MODULES``
|
||||
is now available and horizon plugins can add extra xstatic modules via the
|
||||
horizon plugin "enabled" file. For more detail, see ``ADD_XSTATIC_MODULES``
|
||||
description in `Pluggable Panels and Groups <https://docs.openstack.org/horizon/latest/configuration/pluggable_panels.html#ADD_XSTATIC_MODULES>`__
|
||||
in horizon documentation.
|
Loading…
Reference in New Issue
Block a user