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 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 <application at > is " u"<class 'ofs.application.application'></p>\n" u"<p>CLASS OF <APPLICATION AT > IS " u"<CLASS 'OFS.APPLICATION.APPLICATION'></p>\n" u"<p>{'foo': <Folder at /test_folder_1_>} has " u"foo=<Folder at test_folder_1_></p>\n" u"<p>{'foo': <Folder at /test_folder_1_>} has " u"foo=<Folder at test_folder_1_></p>\n" u"<p>[<Folder at /test_folder_1_>] has " u"first item <Folder at test_folder_1_></p>\n" u"<p>[<Folder at /test_folder_1_>] has " u"first item <Folder at test_folder_1_></p>" )
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"<class 'ofs.application.application'></p>\n" u"<p>CLASS OF {app_upper} IS " u"<CLASS 'OFS.APPLICATION.APPLICATION'></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)))
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 <application at > is " u"<class 'ofs.application.application'></p>\n" u"<p>CLASS OF <APPLICATION AT > IS " u"<CLASS 'OFS.APPLICATION.APPLICATION'></p>\n" u"<p>{'foo': <Folder at /test_folder_1_>} has " u"foo=<Folder at test_folder_1_></p>\n" u"<p>{'foo': <Folder at /test_folder_1_>} has " u"foo=<Folder at test_folder_1_></p>\n" u"<p>[<Folder at /test_folder_1_>] has " u"first item <Folder at test_folder_1_></p>\n" u"<p>[<Folder at /test_folder_1_>] has " u"first item <Folder at test_folder_1_></p>" )
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><application at ></p>\n' '<p><APPLICATION AT ></p>')
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><application at ></p>\n' u'<p><APPLICATION AT ></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><plonesite at plone></p>\n' u'<p><PLONESITE AT PLONE></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><plonesite at plone></p>\n' u'<p><PLONESITE AT PLONE></p>')
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 <application at > is " u"<class 'ofs.application.application'></p>\n" u"<p>CLASS OF <APPLICATION AT > IS " u"<CLASS 'OFS.APPLICATION.APPLICATION'></p>")
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())))
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 <plonesite at plone> is " u"<class 'products.cmfplone.portal.plonesite'></p>\n" u"<p>CLASS OF <PLONESITE AT PLONE> IS " u"<CLASS 'PRODUCTS.CMFPLONE.PORTAL.PLONESITE'></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 <plonesite at plone> is " u"<class 'products.cmfplone.portal.plonesite'></p>\n" u"<p>CLASS OF <PLONESITE AT PLONE> IS " u"<CLASS 'PRODUCTS.CMFPLONE.PORTAL.PLONESITE'></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)))
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)))