--- a/Beremiz_service.py Tue Feb 18 16:22:54 2025 +0100
+++ b/Beremiz_service.py Thu Feb 20 12:00:17 2025 +0100
@@ -570,7 +570,6 @@
website = NS.RegisterWebsite(interface, webport)
pyruntimevars["website"] = website
- statuschange.append(NS.website_statuslistener_factory(website))
LogMessageAndException(_("Nevow Web service failed. "))
--- a/runtime/NevowServer.py Tue Feb 18 16:22:54 2025 +0100
+++ b/runtime/NevowServer.py Thu Feb 20 12:00:17 2025 +0100
@@ -51,89 +51,6 @@
-class PLCHMI(athena.LiveElement):
- def HMIinitialised(self, result):
- self.initialised = True
- def HMIinitialisation(self):
- self.HMIinitialised(None)
-class DefaultPLCStartedHMI(PLCHMI):
- docFactory = loaders.stan(
- tags.div(render=tags.directive('liveElement'))[
- tags.h1["PLC IS NOW STARTED"],
-class PLCStoppedHMI(PLCHMI):
- docFactory = loaders.stan(
- tags.div(render=tags.directive('liveElement'))[
- tags.h1["PLC IS STOPPED"],
-class MainPage(athena.LiveElement):
- jsClass = u"WebInterface.PLC"
- docFactory = loaders.stan(
- tags.div(render=tags.directive('liveElement'))[
- tags.div(id='content')[
- tags.div(render=tags.directive('PLCElement'))]
- tags.a(href='settings')['Settings']])
- def __init__(self, *a, **kw):
- athena.LiveElement.__init__(self, *a, **kw)
- self.resetPLCStartedHMI()
- def setPLCState(self, state):
- if self.HMI is not None:
- self.callRemote('updateHMI')
- def setPLCStartedHMI(self, hmi):
- self.PLCStartedHMIClass = hmi
- def resetPLCStartedHMI(self):
- self.PLCStartedHMIClass = DefaultPLCStartedHMI
- def HMIexec(self, function, *args, **kwargs):
- if self.HMI is not None:
- getattr(self.HMI, function, lambda: None)(*args, **kwargs)
- def PLCElement(self, ctx, data):
- return self.getPLCElement()
- def getPLCElement(self):
- self.detachFragmentChildren()
- f = self.PLCStartedHMIClass()
- f.setFragmentParent(self)
- athena.expose(getPLCElement)
- def detachFragmentChildren(self):
- for child in self.liveFragmentChildren[:]:
class ConfigurableBindings(configurable.Configurable):
@@ -380,83 +297,23 @@
return super(ExtensionSettingsPage, self).locateChild(ctx, segments)
-class WebInterface(athena.LivePage):
- docFactory = loaders.stan([tags.raw(xhtml_header),
- tags.html(xmlns="http://www.w3.org/1999/xhtml")[
- tags.head(render=tags.directive('liveglue'))[
- tags.title[PAGE_TITLE],
- tags.link(rel='stylesheet',
- href=url.here.child("webform_css"))
+class LandingPage(rend.Page): + docFactory = loaders.stan( + tags.head[tags.title[PAGE_TITLE]], + tags.a(href="settings")["Access Settings"] def child_settings(self, context):
- def __init__(self, plcState=False, *a, **kw):
- super(WebInterface, self).__init__(*a, **kw)
- self.jsModules.mapping[u'WebInterface'] = paths.AbsNeighbourFile(
- __file__, 'webinterface.js')
- self.plcState = plcState
- self.MainPage.setPLCState(plcState)
- return self.MainPage.getHMI()
- def LoadHMI(self, hmi, jsmodules):
- for name, path in jsmodules.iteritems():
- self.jsModules.mapping[name] = os.path.join(WorkingDir, path)
- self.MainPage.setPLCStartedHMI(hmi)
- self.MainPage.resetPLCStartedHMI()
- self.MainPage.setPLCState(True)
- self.MainPage.setPLCState(False)
- def renderHTTP(self, ctx):
- Force content type to fit with SVG
- req = ctx.locate(inevow.IRequest)
- req.setHeader('Content-type', 'application/xhtml+xml')
- return super(WebInterface, self).renderHTTP(ctx)
- def render_MainPage(self, ctx, data):
- f.setFragmentParent(self)
- self.MainPage.detachFragmentChildren()
- return WebInterface(plcState=self.plcState)
- def beforeRender(self, ctx):
- d = self.notifyOnDisconnect()
- d.addErrback(self.disconnected)
- def disconnected(self, reason):
- self.MainPage.resetHMI()
- # print "We will be called back when the client disconnects"
def RegisterWebsite(iface, port):
- website = WebInterface()
+ website = LandingPage() site = appserver.NevowSite(website)
reactor.listenTCP(port, site, interface=iface)
@@ -464,22 +321,3 @@
-class statuslistener(object):
- def __init__(self, site):
- def listen(self, state):
- if state != self.oldstate:
- action = {'Started': self.site.PLCStarted,
- 'Stopped': self.site.PLCStopped}.get(state, None)
-def website_statuslistener_factory(site):
- return statuslistener(site).listen