Esempio n. 1
0
class TestFramework(athena.LivePage):
    addSlash = True
    docFactory = loaders.stan([
        tags.xml(DOCTYPE_XHTML),
        tags.html[
            tags.head(render=tags.directive('liveglue'))[
                tags.link(rel='stylesheet', href='livetest.css'),
                tags.directive('head')],
            tags.body[
                tags.invisible(render=tags.directive('runner'))]]])

    def __init__(self, testSuite):
        super(TestFramework, self).__init__()
        self.testSuite = testSuite
        self.children = {
            'livetest.css': static.File(util.resource_filename('nevow.livetrial', 'livetest.css')),
        }


    def beforeRender(self, ctx):
        self.runner = TestRunner(self.testSuite)


    def render_runner(self, ctx, data):
        self.runner.setFragmentParent(self)
        return self.runner


    def render_head(self, ctx, data):
        return self.runner.gatherHead()
Esempio n. 2
0
    def doRendering(self, fragmentClass):
        """
        Verify that the given fragment class will render without raising an
        exception.
        """
        siteStore = Store()

        loginSystem = LoginSystem(store=siteStore)
        installOn(loginSystem, siteStore)
        p = Product(store=siteStore, types=["xmantissa.webadmin.LocalUserBrowser",
                                            "xmantissa.signup.SignupConfiguration"])
        account = loginSystem.addAccount(u'testuser', u'localhost', None)
        p.installProductOn(account.avatars.open())
        f = fragmentClass(None, u'testuser', account)

        p = LivePage(
            docFactory=stan(
                html[
                    head(render=directive('liveglue')),
                    body(render=lambda ctx, data: f)]))
        f.setFragmentParent(p)

        ctx = WovenContext()
        req = FakeRequest()
        ctx.remember(req, IRequest)

        d = p.renderHTTP(ctx)
        def rendered(ign):
            p.action_close(None)
        d.addCallback(rendered)
        return d
    def __init__(self, ctx, restWriter, key, srcId):
        self.restWriter = restWriter

        form = iformal.IForm(ctx)
        u = widgetResourceURLFromContext(
            ctx, form.name).child(key).child(srcId).child('_submit')
        self.destId = srcId + '-dest'
        formId = srcId + '-form'

        stan = T.html(
        )[T.head()[T.script(type="text/javascript")["""
                function ReSTTranslate() {
                    dest = document.getElementById('%(destId)s');
                    form = document.getElementById('%(formId)s');
                    src = parent.document.getElementById('%(srcId)s');
                    dest.value = src.value;
                    form.submit(); 
                }    

                """ %
                                                    {
                                                        'srcId': srcId,
                                                        'destId': self.destId,
                                                        'formId': formId
                                                    }]],
          T.body(
          )[T.form(id=formId, method="POST", action=u
                   )[T.input(type="hidden", name=self.destId, id=self.destId)],
            T.script(type="text/javascript")["ReSTTranslate();"], ], ]

        self.docFactory = loaders.stan(stan)
Esempio n. 4
0
class ResultsPage(athena.LivePage):
    addSlash = True
    docFactory = loaders.stan(
        tags.html[tags.head(render=tags.directive('liveglue'))[
            tags.title["IPython Results"],
            tags.link(rel="stylesheet", type="text/css", href="main.css"),
            tags.link(rel="stylesheet", type="text/css", href="results.css")],
                  tags.body[tags.h1["IPython Results"],
                            tags.div(render=tags.directive('widgets'))]])

    def __init__(self, controller):
        athena.LivePage.__init__(self)
        self.controller = controller
        if not self.children:
            self.children = {}
        self.children["main.css"] = static.File(
            util.sibpath(__file__, 'main.css'))
        self.children["results.css"] = static.File(
            util.sibpath(__file__, 'results.css'))

    def render_widgets(self, ctx, data):
        w = aw.ResultWidget()
        w.setFragmentParent(self)
        n1 = results.notifierFromFunction(w.handleResult)
        self.controller.addNotifier(n1)
        c = aw.CommandWidget(self.controller)
        c.setFragmentParent(self)
        return ctx.tag[w, tags.br, c]
Esempio n. 5
0
    def doRendering(self, fragmentClass):
        """
        Verify that the given fragment class will render without raising an
        exception.
        """
        siteStore = Store()

        loginSystem = LoginSystem(store=siteStore)
        installOn(loginSystem, siteStore)
        p = Product(
            store=siteStore, types=["xmantissa.webadmin.LocalUserBrowser", "xmantissa.signup.SignupConfiguration"]
        )
        account = loginSystem.addAccount(u"testuser", u"localhost", None)
        p.installProductOn(account.avatars.open())
        f = fragmentClass(None, u"testuser", account)

        p = LivePage(docFactory=stan(html[head(render=directive("liveglue")), body(render=lambda ctx, data: f)]))
        f.setFragmentParent(p)

        ctx = WovenContext()
        req = FakeRequest()
        ctx.remember(req, IRequest)

        d = p.renderHTTP(ctx)

        def rendered(ign):
            p.action_close(None)

        d.addCallback(rendered)
        return d
Esempio n. 6
0
        def __init__(self, ctx, restWriter, key, srcId):
            self.restWriter = restWriter

            form = iformal.IForm( ctx )
            u = formal_widgetResourceURLFromContext(ctx, form.name).child(key).child( srcId ).child('_submit')
            self.destId=srcId + '-dest'
            formId=srcId + '-form'

            stan = T.html()[
                T.head()[
                    T.script(type="text/javascript")["""
                    function ReSTTranslate() {
                        dest = document.getElementById('%(destId)s');
                        form = document.getElementById('%(formId)s');
                        src = parent.document.getElementById('%(srcId)s');
                        dest.value = src.value;
                        form.submit();
                    }

                    """%{'srcId':srcId, 'destId':self.destId, 'formId':formId}]
                ],
                T.body()[
                    T.form(id=formId, method="POST", action=u)[
                        T.input(type="hidden", name=self.destId, id=self.destId)
                    ],
                    T.script(type="text/javascript")["ReSTTranslate();"],
                ],
            ]

            self.docFactory = loaders.stan(stan)
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.body[
                                        tags.div[
                                                tags.div( render = tags.directive( "MainPage" ))
                                                ]]]])
    MainPage = MainPage()
    PLCHMI = PLCHMI

    def __init__(self, plcState=False, *a, **kw):
        super(WebInterface, self).__init__(*a, **kw)
        self.jsModules.mapping[u'WebInterface'] = util.sibpath(__file__, 'webinterface.js')
        self.plcState = plcState
        self.MainPage.setPLCState(plcState)

    def getHMI(self):
        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)

    def UnLoadHMI(self):
        self.MainPage.resetPLCStartedHMI()

    def PLCStarted(self):
        self.plcState = True
        self.MainPage.setPLCState(True)

    def PLCStopped(self):
        self.plcState = False
        self.MainPage.setPLCState(False)

    def renderHTTP(self, ctx):
        """
        Force content type to fit with SVG
        """
        req = inevow.IRequest(ctx)
        req.setHeader('Content-type', 'application/xhtml+xml')
        return super(WebInterface, self).renderHTTP(ctx)

    def render_MainPage(self, ctx, data):
        f = self.MainPage
        f.setFragmentParent(self)
        return ctx.tag[f]

    def child_(self, ctx):
        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()
Esempio n. 8
0
class MyPage(athena.LivePage):
    addSlash = True
    docFactory = loaders.stan(T.html[T.head(render=T.directive('liveglue')),
                                     T.body(render=T.directive('myElement'))])

    def render_myElement(self, ctx, data):
        f = MyElement()
        f.setFragmentParent(self)
        return ctx.tag[f]
class ReSTPreview(rend.Page):
    def __init__(self, ctx, restWriter, key, srcId):
        self.restWriter = restWriter

        form = iformal.IForm(ctx)
        u = widgetResourceURLFromContext(
            ctx, form.name).child(key).child(srcId).child('_submit')
        self.destId = srcId + '-dest'
        formId = srcId + '-form'

        stan = T.html(
        )[T.head()[T.script(type="text/javascript")["""
                function ReSTTranslate() {
                    dest = document.getElementById('%(destId)s');
                    form = document.getElementById('%(formId)s');
                    src = parent.document.getElementById('%(srcId)s');
                    dest.value = src.value;
                    form.submit(); 
                }    

                """ %
                                                    {
                                                        'srcId': srcId,
                                                        'destId': self.destId,
                                                        'formId': formId
                                                    }]],
          T.body(
          )[T.form(id=formId, method="POST", action=u
                   )[T.input(type="hidden", name=self.destId, id=self.destId)],
            T.script(type="text/javascript")["ReSTTranslate();"], ], ]

        self.docFactory = loaders.stan(stan)

    def child__submit(self, ctx):
        args = inevow.IRequest(ctx).args
        value = args.get(self.destId, [''])[0]

        from docutils.utils import SystemMessage

        try:
            if self.restWriter:
                restValue = self._html_fragment(value, writer=self.restWriter)
            else:
                restValue = self._html_fragment(value, writer_name='html')
        except SystemMessage, e:
            restValue = str(e)

        stan = T.html()[T.head()[T.style(type="text/css")["""
                
                    .system-message {border: 1px solid red; background-color: #FFFFDD; margin: 5px; padding: 5px;}
                    .system-message-title { font-weight: bold;}
                """]],
                        T.body()[T.div()[T.xml(restValue)]], ]

        self.docFactory = loaders.stan(stan)

        return self
Esempio n. 10
0
 def getTemplate(self, resultFormat):
     if resultFormat in self.service.templates:
         return self.service.getTemplate(resultFormat)
     return common.doctypedStan(T.html[
         T.head(render=T.directive("commonhead"))[T.title(
             render=T.directive("meta"))['title'], ],
         T.body(render=T.directive("withsidebar"))[
             T.h1(render=T.directive("meta"))['title'],
             T.div(class_="result", data=T.directive("result"))[T.invisible(
                 render=T.directive(resultFormat))]]])
Esempio n. 11
0
class ControllerPageAthena(athena.LivePage):
    """This is broken"""
    chat = None
    addSlash = True
    docFactory = loaders.stan(
        tags.html[tags.head(
            render=tags.directive('liveglue')
        )[tags.link(rel="stylesheet", type="text/css", href="main.css"),
          tags.link(rel="stylesheet", type="text/css", href="controller.css")],
                  tags.body[tags.h1["IPython Controller"], tags.br,
                            tags.h2[tags.div(
                                render=tags.directive('idwidget')), tags.br,
                                    tags.a(href="results")["results"], tags.br,
                                    tags.a(href="status")["status"], tags.br,
                                    tags.a(href="command")["command"], tags.br,
                                    tags.a(href="monitor")["monitor"]],
                            tags.br,
                            tags.div(render=tags.directive('chat'))]])

    def __init__(self, controller):
        athena.LivePage.__init__(self)
        self.controller = controller
        if not self.children:
            self.children = {}
        self.children["main.css"] = static.File(
            util.sibpath(__file__, 'main.css'))
        self.children["controller.css"] = static.File(
            util.sibpath(__file__, 'controller.css'))

    def render_idwidget(self, ctx, data):
        w = aw.IDWidget(self.controller)
        w.setFragmentParent(self)
        return ctx.tag[w]

    def render_chat(self, ctx, data):
        self.chat = "NO CHAT"
        if self.chat is None:
            self.chat = aw.ChatWidget()
            self.chat.setFragmentParent(self)
        return ctx.tag[self.chat]

    def child_results(self, ctx):
        return ResultsPage(self.controller)

    def child_status(self, ctx):
        return StatusPage(self.controller)

    def child_command(self, ctx):
        return CommandPage(self.controller)

    def child_monitor(self, ctx):
        return MonitorPage(self.controller)

    def goingLive(self, ctx, client):
        return self.chat.goingLive(ctx, client)
Esempio n. 12
0
class ElementRenderingLivePage(LivePage):
    """
    Trivial LivePage which renders an instance of a particular element class.
    """
    docFactory = stan(html[head(render=directive('liveglue'))[title(
        render=directive('title'))], body[div(render=directive('element'))]])

    def __init__(self, element):
        LivePage.__init__(self)
        self.element = element

    def render_title(self, ctx, data):
        return ctx.tag[self.element.__class__.__name__]

    def render_element(self, ctx, data):
        self.element.setFragmentParent(self)
        return ctx.tag[self.element]
Esempio n. 13
0
class NotebookPage(athena.LivePage):
    addSlash = True
    docFactory = loaders.stan(
        tags.html[tags.head(
            render=tags.directive('liveglue')
        )[tags.title["IPython Notebook"],
          tags.link(href="notebook.css", rel="stylesheet", type="text/css"), ],
                  tags.body(render=tags.directive('widget'))])

    def __init__(self, controller):
        athena.LivePage.__init__(self)
        self.controller = controller
        if self.children is None:
            self.children = {}
        self.children["notebook.css"] = static.File(
            util.sibpath(__file__, 'notebook.css'))

    def render_widget(self, ctx, data):
        w = aw.NotebookWidget(self.controller)
        w.setFragmentParent(self)
        return ctx.tag[w]
Esempio n. 14
0
    def test_rendering(self):
        """
        Test that L{webadmin.UserInteractionFragment} renders without raising
        any exceptions.
        """
        f = UserInteractionFragment(self.browser)

        p = LivePage(docFactory=stan(html[head(render=directive("liveglue")), body(render=lambda ctx, data: f)]))
        f.setFragmentParent(p)

        ctx = WovenContext()
        req = FakeRequest()
        ctx.remember(req, IRequest)

        d = p.renderHTTP(ctx)

        def rendered(ign):
            p.action_close(None)

        d.addCallback(rendered)
        return d
Esempio n. 15
0
class ResultPage(athena.LivePage):
    addSlash = True
    source = None
    CSS = open(basedir+'/ajaxpb.css').read()
    start = CSS.find('height', CSS.find('resultOut'))
    stop = CSS.find('\n', start)
    css = CSS[:start]+'height: 30em;\n'+CSS[stop:]
    docFactory = loaders.stan(tags.html[
        tags.head(render=tags.directive('liveglue')),
        tags.style(type="text/css")[css],
        tags.body(render=tags.directive('resultElement'))])
    
    def __init__(self, source):
        athena.LivePage.__init__(self)
        self.source = source
    
    def render_resultElement(self, ctx, data):
        f = ResultElement()
        f.setFragmentParent(self)
        reactor.callLater(1, self.source.addGatherer, f)
        return ctx.tag[f]
Esempio n. 16
0
    def _render(self, element):
        """
        Put the given L{IRenderer} provider into an L{athena.LivePage} and
        render it.  Return a Deferred which fires with the request object used
        which is an instance of L{nevow.testutil.FakeRequest}.
        """
        p = LivePage(docFactory=stan(html[head(
            render=directive('liveglue')), body[invisible(
                render=lambda ctx, data: element)]]))
        element.setFragmentParent(p)

        ctx = WovenContext()
        req = FakeRequest()
        ctx.remember(req, IRequest)

        d = p.renderHTTP(ctx)

        def rendered(ign):
            p.action_close(None)
            return req

        d.addCallback(rendered)
        return d
Esempio n. 17
0
class Benchmark(athena.LivePage):
    docFactory = loaders.stan(
        tags.html[tags.head(render=tags.directive('liveglue')),
                  tags.body(render=tags.directive('body'))])

    def __init__(self, maxNodes, maxDepth):
        self.maxNodes = maxNodes
        self.maxDepth = maxDepth
        super(Benchmark, self).__init__()

        here = filepath.FilePath(__file__).parent().child('benchmark.js')

        self.jsModules.mapping.update({'Nevow.Benchmarks': here.path})

    def render_body(self, ctx, data):
        for j in range(self.maxNodes // self.maxDepth):
            top = t = tags.div()
            for i in range(self.maxDepth):
                m = tags.div()
                t[m]
                t = m
            t[InitializationBenchmark(self)]
            yield top
Esempio n. 18
0
    def test_rendering(self):
        """
        Test that L{webadmin.UserInteractionFragment} renders without raising
        any exceptions.
        """
        f = UserInteractionFragment(self.browser)

        p = LivePage(
            docFactory=stan(
                html[
                    head(render=directive('liveglue')),
                    body(render=lambda ctx, data: f)]))
        f.setFragmentParent(p)

        ctx = WovenContext()
        req = FakeRequest()
        ctx.remember(req, IRequest)

        d = p.renderHTTP(ctx)
        def rendered(ign):
            p.action_close(None)
        d.addCallback(rendered)
        return d
Esempio n. 19
0
class MonitorPage(athena.LivePage):
    addSlash = True
    docFactory = loaders.stan(
        tags.html[tags.head(render=tags.directive('liveglue'))[
            tags.title["IPython Monitor"],
            tags.link(rel="stylesheet", type="text/css", href="main.css"),
            tags.link(rel="stylesheet", type="text/css", href="monitor.css")],
                  tags.body[tags.h1["IPython Monitor"],
                            tags.div(render=tags.directive('widgets'))]])

    def __init__(self, controller):
        athena.LivePage.__init__(self)
        self.controller = controller
        if not self.children:
            self.children = {}
        self.children["main.css"] = static.File(
            util.sibpath(__file__, 'main.css'))
        self.children["monitor.css"] = static.File(
            util.sibpath(__file__, 'monitor.css'))

    def render_widgets(self, ctx, data):
        f = aw.CommandWidget(self.controller)
        f.setFragmentParent(self)
        g = aw.StatusWidget(self.controller)
        g.setFragmentParent(self)
        h = aw.ResultWidget()
        h.setFragmentParent(self)
        n1 = results.notifierFromFunction(h.handleResult)
        self.controller.addNotifier(n1)
        n2 = results.notifierFromFunction(g.refreshStatus)
        f.addNotifier(n2)
        reactor.callLater(1, g.refreshStatus)
        build = tags.table(id="monitor")[tags.tr[tags.td(valign="top")[g],
                                                 tags.td(valign="top")[h,
                                                                       tags.br,
                                                                       f]]]
        return ctx.tag[build]
Esempio n. 20
0
    def _render(self, element):
        """
        Put the given L{IRenderer} provider into an L{athena.LivePage} and
        render it.  Return a Deferred which fires with the request object used
        which is an instance of L{nevow.testutil.FakeRequest}.
        """
        p = LivePage(
            docFactory=stan(
                html[
                    head(render=directive('liveglue')),
                    body[
                        invisible(render=lambda ctx, data: element)]]))
        element.setFragmentParent(p)

        ctx = WovenContext()
        req = FakeRequest()
        ctx.remember(req, IRequest)

        d = p.renderHTTP(ctx)
        def rendered(ign):
            p.action_close(None)
            return req
        d.addCallback(rendered)
        return d
Esempio n. 21
0
class CommandPage(athena.LivePage):
    addSlash = True
    docFactory = loaders.stan(
        tags.html[tags.head(render=tags.directive('liveglue'))[
            tags.title["IPython Command"],
            tags.link(rel="stylesheet", type="text/css", href="main.css"),
            tags.link(rel="stylesheet", type="text/css", href="command.css")],
                  tags.body[tags.h1["IPython Command"],
                            tags.div(render=tags.directive('widget'))]])

    def __init__(self, controller):
        athena.LivePage.__init__(self)
        self.controller = controller
        if not self.children:
            self.children = {}
        self.children["main.css"] = static.File(
            util.sibpath(__file__, 'main.css'))
        self.children["command.css"] = static.File(
            util.sibpath(__file__, 'command.css'))

    def render_widget(self, ctx, data):
        w = aw.CommandWidget(self.controller)
        w.setFragmentParent(self)
        return ctx.tag[w]
Esempio n. 22
0
        try:
            # Check whether it is valid to be loaded
            xml = """<!DOCTYPE html
                    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
                    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
                    <div xmlns:n="http://nevow.com/ns/nevow/0.1" >""" + restValue + '</div>'

            test = loaders.xmlstr(xml, ignoreDocType=True).load() 
        except Exception, e:
            restValue = "HTML Validation Error: please check any raw HTML blocks."

        stan = T.html()[
            T.head()[
                T.style(type="text/css")["""

                    .system-message {border: 1px solid red; background-color: #FFFFDD; margin: 5px; padding: 5px;}
                    .system-message-title { font-weight: bold;}
                """
                ]
            ],
            T.body()[
                T.div()[
                    T.xml(restValue)
                ]
            ],
        ]

        self.docFactory = loaders.stan(stan)

        return self

    def _html_fragment(self, input_string, writer=None, writer_name=None):