Ejemplo n.º 1
0
def default_html_handler(webdav_handle, filename, view_name, request):

    html_template = ViewPageTemplateFile('html_view.pt')

    # exist-db base url
    base_url = '{}/view/{}'.format(request.context.absolute_url(1),
                                   '/'.join(request.subpath[:-1]))

    # get HTML
    html = webdav_handle.open('.', 'rb').read()
    root = lxml.html.fromstring(html)

    # rewrite relative image urls
    for img in root.xpath('//img'):
        src = img.attrib['src']
        if not src.startswith('http'):
            img.attrib['src'] = '{}/{}'.format(base_url, src)

    # rewrite relative image urls
    for link in root.xpath('//link'):
        src = link.attrib['href']
        if not src.startswith('http'):
            link.attrib['href'] = '{}/{}'.format(base_url, src)

    html = lxml.html.tostring(root)
    return html_template.pt_render(dict(
        template='html_view',
        request=request,
        context=request.context,
        options=dict(
            base_url=base_url,
            html=html)))
Ejemplo n.º 2
0
 def test_cook_zope3_page_templates_using_format(self):
     from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
     pt = ViewPageTemplateFile('using_format_zope3_page_template.pt')
     hack_pt(pt)
     # Need to pass a namespace.
     namespace = {'context': self.app}
     # Even when one of the accessed items requires a role that we do
     # not have, we get no Unauthorized, because this is a filesystem
     # template.
     self.app.test_folder_1_.__roles__ = ['Manager']
     self.assertEqual(
         pt.pt_render(namespace).strip(),
         u"<p>class of &lt;application at &gt; is "
         u"&lt;class 'ofs.application.application'&gt;</p>\n"
         u"<p>CLASS OF &lt;APPLICATION AT &gt; IS "
         u"&lt;CLASS 'OFS.APPLICATION.APPLICATION'&gt;</p>\n"
         u"<p>{'foo': &lt;Folder at /test_folder_1_&gt;} has "
         u"foo=&lt;Folder at test_folder_1_&gt;</p>\n"
         u"<p>{'foo': &lt;Folder at /test_folder_1_&gt;} has "
         u"foo=&lt;Folder at test_folder_1_&gt;</p>\n"
         u"<p>[&lt;Folder at /test_folder_1_&gt;] has "
         u"first item &lt;Folder at test_folder_1_&gt;</p>\n"
         u"<p>[&lt;Folder at /test_folder_1_&gt;] has "
         u"first item &lt;Folder at test_folder_1_&gt;</p>"
     )
Ejemplo n.º 3
0
 def test_cook_zope3_page_templates_using_format(self):
     from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
     pt = ViewPageTemplateFile('using_format_zope3_page_template.pt')
     hack_pt(pt)
     # Need to pass a namespace.
     namespace = {'context': self.app}
     # Even when one of the accessed items requires a role that we do
     # not have, we get no Unauthorized, because this is a filesystem
     # template.
     self.app.test_folder_1_.__roles__ = ['Manager']
     self.assertEqual(
         pt.pt_render(namespace).strip(),
         u"<p>class of {app_lower} is "
         u"&lt;class 'ofs.application.application'&gt;</p>\n"
         u"<p>CLASS OF {app_upper} IS "
         u"&lt;CLASS 'OFS.APPLICATION.APPLICATION'&gt;</p>\n"
         u"<p>{{'foo': {folder}}} has "
         u"foo={folder}</p>\n"
         u"<p>{{'foo': {folder}}} has "
         u"foo={folder}</p>\n"
         u"<p>[{folder}] has "
         u"first item {folder}</p>\n"
         u"<p>[{folder}] has "
         u"first item {folder}</p>".format(
             app_lower=escape(repr(self.app).lower()),
             app_upper=escape(repr(self.app).upper()),
             folder=escape(repr(self.app.test_folder_1_))
     ))
def default_html_handler(webdav_handle, filename, view_name, request):

    html_template = ViewPageTemplateFile('html_view.pt')

    # exist-db base url
    base_url = '{}/view/{}'.format(request.context.absolute_url(1),
                                   '/'.join(request.subpath[:-1]))

    # get HTML
    html = webdav_handle.open('.', 'rb').read()
    root = lxml.html.fromstring(html)

    # rewrite relative image urls
    for img in root.xpath('//img'):
        src = img.attrib['src']
        if not src.startswith('http'):
            img.attrib['src'] = '{}/{}'.format(base_url, src)

    # rewrite relative image urls
    for link in root.xpath('//link'):
        src = link.attrib['href']
        if not src.startswith('http'):
            link.attrib['href'] = '{}/{}'.format(base_url, src)

    html = lxml.html.tostring(root)
    return html_template.pt_render(dict(
        template='html_view',
        request=request,
        context=request.context,
        options=dict(
            base_url=base_url,
            html=html)))
def ace_editor(get_handle,
               filename,
               view_name,
               request,
               readonly=False,
               template_name='ace_editor.pt'):
    """ Default handler for showing/editing textish content through the ACE editor """

    mt, encoding = mimetypes.guess_type(filename)
    content = get_handle.open(get_handle.leaf_filename, 'rb').read()
    ace_mode = config.ACE_MODES.get(mt, 'text')
    template = ViewPageTemplateFile(template_name)
    action_url = '{}/view-editor/{}'.format(request.context.absolute_url(),
                                            '/'.join(request.subpath))
    return template.pt_render(
        dict(
            template='ace_editor.pt',
            request=request,
            context=request.context,
            options=dict(
                content=content,
                action_url=action_url,
                readonly=readonly,
                ace_readonly=str(readonly).lower(),  # JS
                ace_mode=ace_mode)))
Ejemplo n.º 6
0
 def test_cook_zope3_page_templates_using_format(self):
     from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
     pt = ViewPageTemplateFile('using_format_zope3_page_template.pt')
     hack_pt(pt)
     # Need to pass a namespace.
     namespace = {'context': self.app}
     # Even when one of the accessed items requires a role that we do
     # not have, we get no Unauthorized, because this is a filesystem
     # template.
     self.app.test_folder_1_.__roles__ = ['Manager']
     self.assertEqual(
         pt.pt_render(namespace).strip(),
         u"<p>class of &lt;application at &gt; is "
         u"&lt;class 'ofs.application.application'&gt;</p>\n"
         u"<p>CLASS OF &lt;APPLICATION AT &gt; IS "
         u"&lt;CLASS 'OFS.APPLICATION.APPLICATION'&gt;</p>\n"
         u"<p>{'foo': &lt;Folder at /test_folder_1_&gt;} has "
         u"foo=&lt;Folder at test_folder_1_&gt;</p>\n"
         u"<p>{'foo': &lt;Folder at /test_folder_1_&gt;} has "
         u"foo=&lt;Folder at test_folder_1_&gt;</p>\n"
         u"<p>[&lt;Folder at /test_folder_1_&gt;] has "
         u"first item &lt;Folder at test_folder_1_&gt;</p>\n"
         u"<p>[&lt;Folder at /test_folder_1_&gt;] has "
         u"first item &lt;Folder at test_folder_1_&gt;</p>"
     )
Ejemplo n.º 7
0
 def test_cook_zope3_page_templates_normal(self):
     from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
     pt = ViewPageTemplateFile('normal_zope3_page_template.pt')
     hack_pt(pt)
     # Need to pass a namespace.
     namespace = {'context': self.app}
     self.assertEqual(
         pt.pt_render(namespace).strip(), '<p>&lt;application at &gt;</p>\n'
         '<p>&lt;APPLICATION AT &gt;</p>')
Ejemplo n.º 8
0
 def test_cook_zope3_page_templates_normal(self):
     from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
     pt = ViewPageTemplateFile('normal_zope3_page_template.pt')
     hack_pt(pt)
     # Need to pass a namespace.
     namespace = {'context': self.app}
     self.assertEqual(
         pt.pt_render(namespace).strip(),
         u'<p>&lt;application at &gt;</p>\n'
         u'<p>&lt;APPLICATION AT &gt;</p>')
Ejemplo n.º 9
0
 def test_cook_zope3_page_templates_normal(self):
     from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
     # Note: on Plone 3.3 this is actually a ZopeTwoPageTemplateFile.
     pt = ViewPageTemplateFile('normal_zope3_page_template.pt')
     hack_pt(pt)
     # Need to pass a namespace.
     namespace = {'context': self.portal}
     self.assertEqual(
         pt.pt_render(namespace).strip(),
         u'<p>&lt;plonesite at plone&gt;</p>\n'
         u'<p>&lt;PLONESITE AT PLONE&gt;</p>')
 def test_cook_zope3_page_templates_normal(self):
     from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
     # Note: on Plone 3.3 this is actually a ZopeTwoPageTemplateFile.
     pt = ViewPageTemplateFile('normal_zope3_page_template.pt')
     hack_pt(pt)
     # Need to pass a namespace.
     namespace = {'context': self.portal}
     self.assertEqual(
         pt.pt_render(namespace).strip(),
         u'<p>&lt;plonesite at plone&gt;</p>\n'
         u'<p>&lt;PLONESITE AT PLONE&gt;</p>')
Ejemplo n.º 11
0
 def test_cook_zope3_page_templates_using_format(self):
     from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
     pt = ViewPageTemplateFile('using_format_zope3_page_template.pt')
     hack_pt(pt)
     # Need to pass a namespace.
     namespace = {'context': self.app}
     self.assertEqual(
         pt.pt_render(namespace).strip(),
         u"<p>class of &lt;application at &gt; is "
         u"&lt;class 'ofs.application.application'&gt;</p>\n"
         u"<p>CLASS OF &lt;APPLICATION AT &gt; IS "
         u"&lt;CLASS 'OFS.APPLICATION.APPLICATION'&gt;</p>")
Ejemplo n.º 12
0
 def test_cook_zope3_page_templates_normal(self):
     from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
     pt = ViewPageTemplateFile('normal_zope3_page_template.pt')
     hack_pt(pt)
     # Need to pass a namespace.
     namespace = {'context': self.app}
     self.assertEqual(
         pt.pt_render(namespace).strip(),
         u'<p>{}</p>\n'
         u'<p>{}</p>'.format(
             escape(repr(self.app).lower()),
             escape(repr(self.app).upper())))
Ejemplo n.º 13
0
 def test_cook_zope3_page_templates_using_format(self):
     from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
     # Note: on Plone 3.3 this is actually a ZopeTwoPageTemplateFile.
     pt = ViewPageTemplateFile('using_format_zope3_page_template.pt')
     hack_pt(pt)
     # Need to pass a namespace.
     namespace = {'context': self.portal}
     self.assertEqual(
         pt.pt_render(namespace).strip(),
         u"<p>class of &lt;plonesite at plone&gt; is "
         u"&lt;class 'products.cmfplone.portal.plonesite'&gt;</p>\n"
         u"<p>CLASS OF &lt;PLONESITE AT PLONE&gt; IS "
         u"&lt;CLASS 'PRODUCTS.CMFPLONE.PORTAL.PLONESITE'&gt;</p>")
 def test_cook_zope3_page_templates_using_format(self):
     from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
     # Note: on Plone 3.3 this is actually a ZopeTwoPageTemplateFile.
     pt = ViewPageTemplateFile('using_format_zope3_page_template.pt')
     hack_pt(pt)
     # Need to pass a namespace.
     namespace = {'context': self.portal}
     self.assertEqual(
         pt.pt_render(namespace).strip(),
         u"<p>class of &lt;plonesite at plone&gt; is "
         u"&lt;class 'products.cmfplone.portal.plonesite'&gt;</p>\n"
         u"<p>CLASS OF &lt;PLONESITE AT PLONE&gt; IS "
         u"&lt;CLASS 'PRODUCTS.CMFPLONE.PORTAL.PLONESITE'&gt;</p>\n"
         u"<p>{'foo': 42} has foo=42</p>\n"
         u"<p>{'foo': 42} has foo=42</p>\n"
         u"<p>['ni'] has first item ni</p>\n"
         u"<p>['ni'] has first item ni</p>"
     )
def ace_editor(webdav_handle, filename, view_name, request,
               readonly=False, template_name='ace_editor.pt'):
    """ Default handler for showing/editing textish content through the ACE editor """

    mt, encoding = mimetypes.guess_type(filename)
    content = webdav_handle.open('.', 'rb').read()
    ace_mode = config.ACE_MODES.get(mt, 'text')
    template = ViewPageTemplateFile(template_name)
    action_url = '{}/view-editor/{}'.format(request.context.absolute_url(),
                                            '/'.join(request.subpath))
    return template.pt_render(dict(
        template='ace_editor.pt',
        request=request,
        context=request.context,
        options=dict(content=content,
                     action_url=action_url,
                     readonly=readonly,
                     ace_readonly=str(readonly).lower(),  # JS
                     ace_mode=ace_mode)))
Ejemplo n.º 16
0
def default_html_handler(get_handle, filename, view_name, request):

    html_template = ViewPageTemplateFile('html_view.pt')

    # exist-db base url
    base_url = '{}/@@view/{}'.format(
        request.context.absolute_url(1),
        '/'.join(request.subpath[:-1]))
    # get HTML
    html = get_handle.open(get_handle.leaf_filename, 'rb').read()
    html = unicode(html, 'utf8')
    if html.startswith(u'<?xml'):
        pos = html.find('?>')
        html = html[pos+3:]
    root = lxml.html.fromstring(html)

    # rewrite relative image urls
    for img in root.xpath('//img'):
        src = img.attrib['src']
        if not src.startswith('http'):
            img.attrib['src'] = '{}/{}'.format(base_url, src)

    # rewrite relative image urls
    for link in root.xpath('//link'):
        src = link.attrib['href']
        if not src.startswith('http'):
            link.attrib['href'] = '{}/{}'.format(base_url, src)

    html = lxml.html.tostring(root, encoding=unicode)

    return html_template.pt_render(dict(
        template='html_view',
        request=request,
        context=request.context,
        options=dict(
            base_url=base_url,
            html=html)))