diff -r a0932a52e53b -r 1627d552f181 runtime/NevowServer.py --- a/runtime/NevowServer.py Thu Jun 18 10:42:08 2020 +0200 +++ b/runtime/NevowServer.py Thu Jun 18 11:00:26 2020 +0200 @@ -26,6 +26,7 @@ from __future__ import absolute_import from __future__ import print_function import os +import collections import platform as platform_module from zope.interface import implements from nevow import appserver, inevow, tags, loaders, athena, url, rend @@ -180,10 +181,19 @@ setattr(self, 'action_' + name, callback) self.bindingsNames.append(name) - + ConfigurableSettings = ConfigurableBindings() +def newExtensionSetting(display, token): + global extensions_settings_od + settings = ConfigurableBindings() + extensions_settings_od[token] = (settings, display) + return settings + +def removeExtensionSetting(token): + global extensions_settings_od + extensions_settings_od.pop(token) class ISettings(annotate.TypedInterface): platform = annotate.String(label=_("Platform"), @@ -211,6 +221,7 @@ customSettingsURLs = { } +extensions_settings_od = collections.OrderedDict() class SettingsPage(rend.Page): # We deserve a slash @@ -221,6 +232,27 @@ child_webinterface_css = File(paths.AbsNeighbourFile(__file__, 'webinterface.css'), 'text/css') implements(ISettings) + + def __getattr__(self, name): + global extensions_settings_od + if name.startswith('configurable_'): + token = name[13:] + def configurable_something(ctx): + settings, _display = extensions_settings_od[token] + return settings + return configurable_something + raise AttributeError + + def extensions_settings(self, context, data): + """ Project extensions settings + Extensions added to Configuration Tree in IDE have their setting rendered here + """ + global extensions_settings_od + res = [] + for token in extensions_settings_od: + _settings, display = extensions_settings_od[token] + res += [tags.h2[display], webform.renderForms(token)] + return res docFactory = loaders.stan([tags.html[ tags.head[ @@ -238,12 +270,16 @@ webform.renderForms('staticSettings'), tags.h1["Extensions settings:"], webform.renderForms('dynamicSettings'), + extensions_settings ]]]) def configurable_staticSettings(self, ctx): return configurable.TypedInterfaceConfigurable(self) def configurable_dynamicSettings(self, ctx): + """ Runtime Extensions settings + Extensions loaded through Beremiz_service -e or optional runtime features render setting forms here + """ return ConfigurableSettings def sendLogMessage(self, level, message, **kwargs):