28 import os |
28 import os |
29 import platform as platform_module |
29 import platform as platform_module |
30 from zope.interface import implements |
30 from zope.interface import implements |
31 from nevow import appserver, inevow, tags, loaders, athena, url, rend |
31 from nevow import appserver, inevow, tags, loaders, athena, url, rend |
32 from nevow.page import renderer |
32 from nevow.page import renderer |
|
33 from nevow.static import File |
33 from formless import annotate |
34 from formless import annotate |
34 from formless import webform |
35 from formless import webform |
35 from formless import configurable |
36 from formless import configurable |
36 from twisted.internet import reactor |
37 from twisted.internet import reactor |
37 |
38 |
75 |
76 |
76 |
77 |
77 class MainPage(athena.LiveElement): |
78 class MainPage(athena.LiveElement): |
78 jsClass = u"WebInterface.PLC" |
79 jsClass = u"WebInterface.PLC" |
79 docFactory = loaders.stan( |
80 docFactory = loaders.stan( |
80 tags.div(render=tags.directive('liveElement'))[ |
81 tags.invisible[ |
81 tags.div(id='content')[ |
82 tags.div(render=tags.directive('liveElement'))[ |
82 tags.div(render=tags.directive('PLCElement'))] |
83 tags.div(id='content')[ |
83 ]) |
84 tags.div(render=tags.directive('PLCElement'))] |
|
85 ], |
|
86 tags.a(href='settings')['Settings']]) |
84 |
87 |
85 def __init__(self, *a, **kw): |
88 def __init__(self, *a, **kw): |
86 athena.LiveElement.__init__(self, *a, **kw) |
89 athena.LiveElement.__init__(self, *a, **kw) |
87 self.pcl_state = False |
90 self.pcl_state = False |
88 self.HMI = None |
91 self.HMI = None |
139 |
142 |
140 def getBindingNames(self, ctx): |
143 def getBindingNames(self, ctx): |
141 return self.bindingsNames |
144 return self.bindingsNames |
142 |
145 |
143 def addInfoString(self, label, value, name=None): |
146 def addInfoString(self, label, value, name=None): |
144 if type(value) is str: |
147 if isinstance(value, str): |
145 def default(*k): |
148 def default(*k): |
146 return value |
149 return value |
147 else: |
150 else: |
148 def default(*k): |
151 def default(*k): |
149 return value() |
152 return value() |
213 # We deserve a slash |
216 # We deserve a slash |
214 addSlash = True |
217 addSlash = True |
215 |
218 |
216 # This makes webform_css url answer some default CSS |
219 # This makes webform_css url answer some default CSS |
217 child_webform_css = webform.defaultCSS |
220 child_webform_css = webform.defaultCSS |
|
221 child_webinterface_css = File(paths.AbsNeighbourFile(__file__, 'webinterface.css'), 'text/css') |
218 |
222 |
219 implements(ISettings) |
223 implements(ISettings) |
220 |
224 |
221 docFactory = loaders.stan([ |
225 docFactory = loaders.stan([tags.html[ |
222 tags.html[ |
226 tags.head[ |
223 tags.head[ |
227 tags.title[_("Beremiz Runtime Settings")], |
224 tags.title[_("Beremiz Runtime Settings")], |
228 tags.link(rel='stylesheet', |
225 tags.link(rel='stylesheet', |
229 type='text/css', |
226 type='text/css', |
230 href=url.here.child("webform_css")), |
227 href=url.here.child("webform_css")) |
231 tags.link(rel='stylesheet', |
228 ], |
232 type='text/css', |
229 tags.body[ |
233 href=url.here.child("webinterface_css")) |
230 tags.h1["Runtime settings:"], |
234 ], |
231 webform.renderForms('staticSettings'), |
235 tags.body[ |
232 tags.h2["Extensions settings:"], |
236 tags.a(href='/')['Back'], |
233 webform.renderForms('dynamicSettings'), |
237 tags.h1["Runtime settings:"], |
234 ] |
238 webform.renderForms('staticSettings'), |
235 ] |
239 tags.h1["Extensions settings:"], |
236 ]) |
240 webform.renderForms('dynamicSettings'), |
|
241 ]]]) |
237 |
242 |
238 def configurable_staticSettings(self, ctx): |
243 def configurable_staticSettings(self, ctx): |
239 return configurable.TypedInterfaceConfigurable(self) |
244 return configurable.TypedInterfaceConfigurable(self) |
240 |
245 |
241 def configurable_dynamicSettings(self, ctx): |
246 def configurable_dynamicSettings(self, ctx): |