Commit 9da55ffb authored by Xiaowu Zhang's avatar Xiaowu Zhang

erp5_corporate_identity: add CI_web skin

parent 87b1f298
...@@ -19,8 +19,12 @@ ...@@ -19,8 +19,12 @@
<skin_folder>erp5_corporate_identity_slide</skin_folder> <skin_folder>erp5_corporate_identity_slide</skin_folder>
<skin_selection>Slide</skin_selection> <skin_selection>Slide</skin_selection>
</skin_folder_selection> </skin_folder_selection>
<skin_folder_selection>
<skin_folder>erp5_corporate_identity_web</skin_folder>
<skin_selection>CI_web</skin_selection>
</skin_folder_selection>
<skin_folder_selection> <skin_folder_selection>
<skin_folder>erp5_xhtml_style</skin_folder> <skin_folder>erp5_xhtml_style</skin_folder>
<skin_selection>Book,Leaflet,Letter,Release,Report,Slide</skin_selection> <skin_selection>Book,CI_web,Leaflet,Letter,Release,Report,Slide</skin_selection>
</skin_folder_selection> </skin_folder_selection>
</registered_skin_selection> </registered_skin_selection>
\ No newline at end of file
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Folder" module="OFS.Folder"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_local_properties</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>erp5_corporate_identity_web</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>404.error.page</string> </value>
</item>
<item>
<key> <string>output_encoding</string> </key>
<value> <string>utf-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <unicode></unicode> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Page Not Found</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
* {
line-height: 1.2;
margin: 0;
}
html {
color: #888;
display: table;
font-family: sans-serif;
height: 100%;
text-align: center;
width: 100%;
}
body {
display: table-cell;
vertical-align: middle;
margin: 2em auto;
}
h1 {
color: #555;
font-size: 2em;
font-weight: 400;
}
p {
margin: 0 auto;
width: 280px;
}
@media only screen and (max-width: 280px) {
body, p {
width: 95%;
}
h1 {
font-size: 1.5em;
margin: 0 0 0.3em;
}
}
</style>
</head>
<body>
<h1>Page Not Found</h1>
<p>Sorry, but the page you were trying to view does not exist.</p>
</body>
</html>
<!-- IE needs 512+ bytes: https://blogs.msdn.microsoft.com/ieinternals/2010/08/18/friendly-http-error-pages/ -->
\ No newline at end of file
import re
from Products.PythonScripts.standard import html_quote
document = context
document_content = content
websection = document.getWebSectionValue()
document_url = html_quote(websection.getPermanentURL(context))
# table of content
# XXX we are back to adding TOC to all documents, which we don't want
# XXX fix this to be applied only if a page is viewed as chapter
document_header_list = re.findall("<h[1-6].*?</h[1-6]>", document_content or "")
if len(document_header_list) > 0:
header_current = 1
header_initial = None
table_of_content = ''
for header in document_header_list:
header_level = header[2]
header_initial = header_initial or header_level
header_reference = re.findall(">(.*)<", header)[0]
header_lowercase = header_reference.lower()
header_reference_prefix = header_lowercase.replace(" ", "-")
if header_level == header_current:
table_of_content += '</li>'
# start of a list
if header_level > header_current:
header_current = header_level
table_of_content += '<ul>'
# end of a list
if header_level < header_current:
iterations = (int(header_current) - int(header_level))
table_of_content += '</li></ul>' * iterations
header_current = header_level
# add anchor in content
snippet = ''.join(['>', header_reference])
named_snippet = ''.join([
'>',
'<a name="', html_quote(header_reference_prefix), '"></a>',
header_reference,
'<a class="custom-para" href="', document_url, '#', header_reference_prefix, '"><span style="font-size:.75em;line-height:1em;padding-left:.5em;">&para;</span></a>'
])
document_content = document_content.replace(snippet, named_snippet)
# create table of content entry
table_of_content += ''.join([
'<li><a href="#',
html_quote(header_reference_prefix),
'">',
html_quote(header_reference),
'</a>']
)
closer = int(header_current) * '</ul>'
insert = ''.join(['<p class="custom-table-of-contents">Table of Contents</p>', table_of_content, closer])
document_content = document_content.replace('${table_of_content}', insert)
return document_content
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>content=None</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>WebPage_enhanceHtmlContent</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
"""
================================================================================
Looks for <img /> with data-open-graph-image="true" from content
================================================================================
"""
import re
if item and item.getPortalType() == "Web Page":
content_image_list = re.findall("<img(.*?)/>", item.getTextContent() or "")
for image_candidate in content_image_list:
if "data-open-graph-image" in image_candidate:
match = re.search('src="([^"]+)"', image_candidate)
if match:
return match.group(1).split("?")[0]
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>item=None</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>WebPage_getOpenGraphImage</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
"""
================================================================================
Get Lastest Documents of a certain Publication Section
================================================================================
"""
portal = language = validation_state = None
portal = context.getPortalObject()
portal_catalog = portal.portal_catalog
language = portal.Localizer.get_selected_language()
validation_state = (
'released',
'released_alive',
'published',
'published_alive',
'shared',
'shared_alive',
'public',
'validated'
)
def getUid(publication_section):
publication_section_smallcaps = publication_section.lower()
return portal.portal_categories.publication_section[publication_section_smallcaps].getUid()
if len(publication_section_list) > 0:
publication_section_uid_list = map(lambda x:getUid(x), publication_section_list)
# beware of different dates: modificatio_date, creation_date, effective_date
if len(publication_section_uid_list) > 0:
return portal_catalog(
portal_type='Web Page',
publication_section_uid=[x for x in publication_section_uid_list],
validation_state=validation_state,
language=language,
sort_on=[('creation_date', 'descending')],
group_by=('reference',),
limit=[0, upper_limit]
)
return []
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>upper_limit=4, publication_section_list=[]</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>WebSection_getLastestDocumentList</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
"""
================================================================================
Create A Webbook Layout Based on Websection Predicate and keywords
================================================================================
"""
from Products.PythonScripts.standard import html_quote
web_section = context
web_section_document_list = web_section.getDocumentValueList() or []
web_section_default_document = web_section.getDefaultDocumentValue() or None
web_section_default_document_content = ''
section_entry = '''<h%(digit)s class="ci-web-page-book-toc-group">%(title)s</h%(digit)s><ul>'''
group_entry = '''<li class="ci-web-page-book-toc-element"><a href="#%(reference)s">%(title)s</a></li>'''
section_close = '''</ul>'''
content_title_entry = '''<h%(digit)s class="ci-web-page-book-content-title">%(title)s</h%(digit)s><a id="%(reference)s">&para;</a>'''
if web_section_default_document is not None:
web_section_default_document_content = web_section_default_document.getTextContent()
if len(web_section_document_list) > 0:
book_toc = []
book_content = []
# First grouping order is by web_section keywords
web_section_keyword_list = web_section.getSubjectList() or ["ungrouped"]
if len(web_section_keyword_list) > 0:
web_section_keyword_dict = {
"rule": [],
"recommendation": [],
"crime": [],
"ungrouped": []
}
for web_section_keyword in web_section_keyword_list:
web_section_keyword_dict[web_section_keyword] = web_section_keyword_dict.get(web_section_keyword, [])
# get keywords of all pages
for page in web_section_document_list:
page_subject_list = page.getSubjectList() or []
if len(page_subject_list) > 0:
# find out which section keyword a page belongs to
page_subject_in_section_subject = None
for subject in page_subject_list:
if subject in web_section_keyword_list:
page_subject_in_section_subject = subject
page_subject_in_section_subject = page_subject_in_section_subject or "ungrouped"
page_dict = {}
page_dict["title"] = html_quote(page.getTitle())
page_dict["short_title"] = html_quote(page.getShortTitle())
page_dict["description"] = html_quote(page.getDescription())
page_dict["subject_list"] = page_subject_list
page_dict["reference"] = html_quote(page.getReference())
page_dict["text_content"] = page.getTextContent()
# now add all keywords and the page to this group
web_section_keyword_dict[page_subject_in_section_subject].append(page_dict)
# group_count
group_count = 0
for group in web_section_keyword_dict:
group_count += 1
for group in web_section_keyword_dict:
has_entry = None
group_page_list = web_section_keyword_dict[group]
group_keyword_list = []
if len(group_page_list) > 0:
if group == "ungrouped" and group_count == 1:
group_header_init = 0
else:
group_header_init = 1
if group == "ungrouped":
group_title = "additional rules"
else:
group_title = group
# initialize group header
book_toc.append(section_entry % {
"digit": group_header_init,
"title": group_title.title()
})
has_entry = True
# build list of keywords per page
for page in group_page_list:
for keyword in page.get("subject_list"):
if (keyword not in web_section_keyword_list):
if (keyword not in group_keyword_list):
group_keyword_list.append(keyword)
# add entries
group_keyword_list.sort()
for keyword in group_keyword_list:
group_title_dict = {
"digit": group_header_init + 1,
"reference": "reference-" + keyword.replace(" ", "_"),
"title": keyword.title()
}
book_toc.append(group_entry % group_title_dict)
book_content.append(content_title_entry % group_title_dict)
# XXX cumbersome - add all pages listed on this keyword
for page in group_page_list:
if keyword in page.get("subject_list"):
book_content.append(page.get("text_content"))
if has_entry is not None:
book_toc.append(section_close)
return web_section_default_document_content + ''.join(book_toc) + ''.join(book_content)
return web_section_default_document_content
#===============================================================================
# ======================================================================
# def pushDown(level):
# return ''.join(["h", str(level), ">"])
#
# def downgradeHeader(my_content, my_downgrade):
# if my_downgrade is None:
# my_downgrade = 1
#
# header_list = re.findall("<h[1-6].*</h[1-6]>", my_content or "")
# for header in header_list:
# header_tag = re.findall("<(h[1-6]>)", header)[0] #h2>
# header_key = header_tag[1]
# new_header = header.replace(header_tag, pushDown(int(header_key) + my_downgrade))
# my_content = my_content.replace(header, new_header)
#
# return my_content or ""
#
# web_section = document.getWebSectionValue()
# web_section_document_list = web_section.getDocumentValueList() or []
# page_keyword_ignore_list = ["rule", "crime", "recommendation"]
#
# book_anchor = '''<a name="reference-main-anchor"></a><br/><br/>'''
# section_placeholder = '''<span class="ci-web-page-book-toc-group"></span>'''
# section_start = '''<hr/><ul>'''
# section_entry = '''
# <h%(digit)s class="ci-web-page-book-toc-group">
# <a href="#%(reference)s">%(title)s</a>
# </h%(digit)s>'''
# section_pointer = '''
# <a name="%(reference)s"></a>
# <h%(digit)s class="ci-web-page-book-content-group">%(title)s</h%(digit)s>
# <span>
# [<a href="%(local_url)s#%(reference)s">&para;</a>]
# [<a href="%(local_url)s#reference-main-anchor">top</a>]
# </span>'''
# section_end = '''</ul><hr/>'''
# keyword_entry = '''
# <li class="ci-web-page-book-keyword-toc-element">
# <a href="%(url)s">%(title)s</a>&nbsp;
# [<a href="#%(reference)s">
# <span style="font-size:10px;">goto</span>
# </a>]&nbsp;-&nbsp;%(description)s
# </li>'''
# group_anchor = ''
# group_entry = '''
# <li class="ci-web-page-book-toc-element">
# <a href="#%(reference)s">%(title)s</a>&nbsp;(%(count)s)
# </li>'''
#
# content_title_entry = '''
# <a name="%(reference)s"></a>
# <h%(digit)s class="ci-web-page-book-content-title">%(title)s</h%(digit)s>
# <span>
# [<a href="%(local_url)s#%(reference)s">&para;</a>]
# [<a href="%(local_url)s#%(group_anchor)s">section</a>]
# </span>
# '''
#
# if len(web_section_document_list) > 0:
# book_toc = []
# book_content = []
# web_section_url = document.absolute_url()
#
# # group by websection keywords if specified
# web_section_keyword_list = web_section.getSubjectList() or []
# web_section_keyword_dict = {"ungrouped": []}
# #web_section_keyword_dict = {
# # "rule": [],
# # "crime": [],
# # "recommendation": []
# #}
# for web_section_keyword in web_section_keyword_list:
# web_section_keyword_dict[web_section_keyword] = web_section_keyword_dict.get(web_section_keyword, [])
#
# # add predicate pages by their keyword to web section keyword dict
# for page in web_section_document_list:
# page_subject_list = page.getSubjectList() or []
# #page_matched_to_websection_keyword = None
# page_dict = {}
# page_dict["title"] = html_quote(page.getTitle())
# page_dict["short_title"] = html_quote(page.getShortTitle())
# page_dict["description"] = html_quote(page.getDescription())
# page_dict["subject_list"] = page_subject_list
# page_dict["reference"] = html_quote(page.getReference())
# page_dict["text_content"] = page.getTextContent()
#
# if len(web_section_keyword_list) == 0:
# web_section_keyword_dict["ungrouped"].append(page_dict)
# else:
# if len(page_subject_list) > 0:
# for subject in page_subject_list:
# if web_section_keyword_dict.get(subject) is not None:
# #page_matched_to_websection_keyword = True
# web_section_keyword_dict[subject].append(page_dict)
#
# # no keywords set on page or keyword not matching websection keyword
# #if len(page_subject_list) == 0 or page_matched_to_websection_keyword is None:
# # web_section_keyword_dict["ungrouped"].append(page_dict)
#
#
# # all pages allocated to web section keywords, now split by page keyword
# # override for JP and split into rule recommendation and crime
# for group in web_section_keyword_dict:
# group_page_list = web_section_keyword_dict.get(group)
# group_has_header = None
# group_keyword_list = []
#
# if len(group_page_list) > 0:
#
# # web section keywords are first grouping order
# if len(web_section_keyword_list) > 0:
# if group == "ungrouped":
# group_title = "additional rules"
# else:
# group_title = group
# group_anchor = "anchor-" + group_title.replace(" ", "_")
# section_config = {
# "digit": 2,
# "title": group_title.title(),
# "reference": group_anchor,
# "local_url": web_section_url
# }
# book_toc.append(section_entry % section_config)
# book_content.append(section_pointer % section_config)
# group_has_header = True
# else:
# book_toc.append(section_placeholder)
#
# book_toc.append(section_start)
#
# # build list of keywords per group, exclude web section keywords
# for page_dict in group_page_list:
# for keyword in page_dict.get("subject_list"):
# if keyword not in web_section_keyword_list:
# if keyword not in page_keyword_ignore_list:
# if (keyword not in group_keyword_list):
# group_keyword_list.append(keyword)
#
# group_keyword_list.sort()
# for keyword in group_keyword_list:
# book_keyword_toc = []
# book_keyword_content = []
# keyword_page_count = 0
#
# group_title_dict = {
# "digit": 3 if group_has_header else 2,
# "reference": group_anchor + "_" + keyword.replace(" ", "_"),
# "title": keyword.title(),
# "local_url": web_section_url,
# "count": "",
# "group_anchor": group_anchor
# }
# book_keyword_toc.append(content_title_entry % group_title_dict)
# book_keyword_toc.append("<hr/><ul>")
#
# # XXX improve - match pages in the web section keyword to the page group keyword
# for page in group_page_list:
# page_reference = page.get("reference")
# page_anchor = group_anchor + "-" + page_reference.replace(" ", "_")
# page_url = "../" + page_reference
#
# if keyword in page.get("subject_list"):
# keyword_page_count += 1
# book_keyword_toc.append(keyword_entry % {
# "reference": "reference-" + page_anchor,
# "title": page.get("short_title"),
# "description": page.get("description"),
# "url": page_url
# })
# book_keyword_content.append(
# '<a name="reference-' + page_anchor + '"></a>' +
# downgradeHeader(page.get("text_content"), 3 if group_has_header else 2)
# )
# group_title_dict["count"] = keyword_page_count
# book_toc.append(group_entry % group_title_dict)
# book_keyword_toc.append("</ul><hr/>")
# book_content.append(''.join(book_keyword_toc) + ''.join(book_keyword_content))
# book_toc.append(section_end)
#
# document_content = document_content.replace(
# '${predicate_view_as_book}',
# book_anchor + ''.join(book_toc) + '<br/><br/>' + ''.join(book_content)
# )
#===============================================================================
#def generateBookByKeyword(complete_keyword_dict):
# keyword_list = complete_keyword_dict.keys()
# keyword_list.sort()
#
# return_value_list = []
# for keyword in keyword_list:
# return_value_list.append(list_start % (keyword.title()))
# for page in complete_keyword_dict[keyword]:
# return_value_list.append(
# list_item_template % (
# html_quote(page.getReference()),
# html_quote(page.getTitle()),
# html_quote(page.getShortTitle() or page.getTitle()),
# html_quote(page.getDescription())
# )
# )
# return_value_list.append(list_end)
#
# return ''.join(return_value_list)
#
#web_section = context
#web_section_document_list = web_section.getDocumentValueList() or []
#web_section_default_document = web_section.getDefaultDocumentValue() or None
#web_section_default_document_content = ''
#
#section_start = '''<h1 class="ci-web-page-content-section">%s</h1>'''
#list_start = '''<h2 class="ci-web-page-content-book">%s</h2><ul class="ci-web-page-content-book-list">'''
#list_item_template = '''<li><a href="%s" title="%s">%s</a>&nbsp;-&nbsp;%s</li>'''
#list_end = '</ul>'
#
#if web_section_default_document is not None:
# web_section_default_document_content = web_section_default_document.getTextContent()
#
#if len(web_section_document_list) > 0:
# book_content = []
#
# # First grouping order is by web_section keywords
# web_section_keyword_list = web_section.getSubjectList() or []
# if len(web_section_keyword_list) > 0:
# web_section_keyword_dict = {
# "rule": [],
# "recommendation": [],
# "crime": []
# }
# for web_section_keyword in web_section_keyword_list:
# web_section_keyword_dict[web_section_keyword] = web_section_keyword_dict.get(web_section_keyword, [])
#
# for page in web_section_document_list:
# page_subject_list = page.getSubjectList() or []
# if len(page_subject_list) > 0:
#
# # find correct section keyword to add page to
# for subject in page_subject_list:
# if subject in web_section_keyword_list:
# web_section_keyword_dict[subject].append(page)
#
# for group in web_section_keyword_dict:
# group_page_list = web_section_keyword_dict[group]
# if len(group_page_list) > 0:
# keyword_dict = {}
# for page in group_page_list:
# page_subject_list = page.getSubjectList() or []
# if len(page_subject_list) > 0:
# for subject in page_subject_list:
# key = subject
# if key not in web_section_keyword_list:
# page_list = keyword_dict[key] = keyword_dict.get(key, [])
# page_list.append(page)
# book_content.append(section_start % (group.title()))
# book_content.append(generateBookByKeyword(keyword_dict))
#
# book_content = ''.join(book_content)
#
# return web_section_default_document_content + book_content
#
# keyword_dict = {}
# for page in web_section_document_list:
# page_subject_list = page.getSubjectList() or []
#
# if len(page_subject_list):
# for subject in page_subject_list:
# key = subject
# # get or initialize a list for pages of this keyword
# page_list = keyword_dict[key] = keyword_dict.get(key, [])
# page_list.append(page)
#
# book_content = generateBookByKeyword(keyword_dict)
#
# return web_section_default_document_content + book_content
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>WebSite_generateWebSectionBook</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
'''=============================================================================
Create WebSection based Navigation
============================================================================='''
from Products.PythonScripts.standard import html_quote
def buildItem(item, drill_down_depth):
return menu_item_template % (
#html_quote(item.getRelativeUrl()),
html_quote(item.getId()),
html_quote(item.getTitle()),
buildWebSectionMenu(getChildWebSectionList(item), drill_down_depth)
)
def getChildWebSectionList(element):
breadcrumb_list = element.getBreadcrumbItemList()
current_section = breadcrumb_list[-1]
return current_section[1].contentValues(portal_type='Web Section')
def buildWebSectionMenu(element_list, depth):
if depth < max_depth:
depth = depth + 1
display_list = []
display_items = ''
display_count = 0
for section in element_list:
is_accessible = section.getProperty('authorization_forced') is not True
is_visible = section.getProperty('visible') is 1
has_index = section.getProperty('int_index') is not None
if is_accessible and is_visible and has_index:
display_list.append(section)
if len(display_list):
display_list.sort(key=lambda x: x.getProperty('int_index'), reverse=False)
for menu_item in display_list:
if max_items is not None:
if display_count < max_items:
display_count = display_count + 1
display_items = display_items + buildItem(menu_item, depth)
else:
display_items = display_items + buildItem(menu_item, depth)
return menu_list_template % display_items
else:
return ''
else:
return ''
parent = context
parent_section_list = getChildWebSectionList(parent)
menu_list_template = '''<ul class="ci-web-sitemap-list">%s</ul>'''
menu_item_template = '''<li><a href="./%s"><span class="ci-web-sitemap-item-title">%s</span></a>%s</li>'''
depth = 0
max_depth = max_depth or 2
return buildWebSectionMenu(parent_section_list, depth)
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>max_depth=None, max_items=None</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>WebSite_generateWebSectionNavigation</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
'''=============================================================================
List of CSS Files to load
============================================================================='''
if scope is not None:
if scope == "global":
return (
'roboto/roboto.css',
'roboto-condensed/roboto-condensed.css',
'heuristica/heuristica.css',
'ci_web_css/normalize.css',
'ci_web_css/ci_web.css',
)
return ()
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>scope=None</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>WebSite_getCssRelativeUrlList</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
"""
================================================================================
Return extendable default list of JavaScript files to load
================================================================================
"""
if scope is not None:
if scope == "global":
return [
"ci_web_js/ci_web.js"
]
return []
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>scope=None</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>WebSite_getJavaScriptRelativeUrlList</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
if parameter is not None and proxy is not None:
proxyHandler = getattr(context, 'Base_getProxyThemeBasedProperty', None)
prefixHandler = getattr(context, 'Base_getBasicThemeBasedProperty', None)
if proxyHandler is not None and proxy == True:
return proxyHandler(
parameter=parameter,
source_uid=source_uid,
is_site=True
)
if prefixHandler is not None and proxy == False:
return prefixHandler(
parameter=parameter
)
return "XXX could not retrieve %s" % (parameter or " undefined parameter")
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>parameter=None, proxy=None, source_uid=None</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>WebSite_getThemeBasedProperty</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
'''=============================================================================
Adds <link rel="alternate" hreflang="[language] href="[href]"> for
alternative language verions of web pages. SEO-relevant to avoid
duplicate page/content flags
============================================================================='''
portal_type = context.getPortalType()
website = context.getWebSiteValue()
website_url = website.getAbsoluteUrl()
default_language = website.getDefaultAvailableLanguage()
language_displayed_in_path = website.getStaticLanguageSelection()
available_language_list = website.getAvailableLanguageList()
def generateAlternativeTags(my_loop_language, my_visible_language, my_url=None):
if my_url is None:
my_url = website_url
trailing_slash = ''
else:
trailing_slash = '/'
if my_loop_language == default_language:
visible_path_snippet = '/' + my_visible_language + '/'
updated_path_snippet = '/'
else:
# no language indicator in path
if my_visible_language == default_language:
visible_path_snippet = website_url
updated_path_snippet = website_url + '/' + my_loop_language
else:
visible_path_snippet = '/' + my_visible_language + trailing_slash
updated_path_snippet = '/' + my_loop_language + trailing_slash
return '<link rel="alternate" hreflang="%s" href="%s">' % (
my_loop_language,
my_url.replace(visible_path_snippet, updated_path_snippet)
)
def generateAlternativeLanguageListForDocument(webpage):
webpage_url = webpage.getAbsoluteUrl()
reference = webpage.getProperty("reference")
visible_language = webpage.getProperty("language")
available_version_list = webpage.getDocumentValueList(
reference=reference,
all_languages=True,
portal_type='Web Page',
validation_state='published_alive'
)
if (reference is not None
and visible_language is not None
and language_displayed_in_path == 1
):
result = []
for loop_language in available_language_list:
for document in available_version_list:
document_language = document.getLanguage()
if document_language == loop_language:
if document_language != visible_language:
result.append(
generateAlternativeTags(
document_language,
visible_language,
webpage_url
)
)
return '\n'.join(result)
if portal_type == 'Web Page':
return generateAlternativeLanguageListForDocument(context)
if portal_type == 'Web Section':
websection = context
websection_url = websection.getAbsoluteUrl()
default_document = websection.getDefaultDocumentValue()
if default_document is not None:
return generateAlternativeLanguageListForDocument(default_document)
else:
result = []
localizer_tool = context.Localizer
visible_language = localizer_tool.get_selected_language()
for loop_language in available_language_list:
if loop_language != visible_language:
result.append(
generateAlternativeTags(
loop_language,
visible_language,
websection_url
)
)
return '\n'.join(result)
if portal_type == 'Web Site':
default_document = website.getDefaultDocumentValue()
if default_document is not None:
return generateAlternativeLanguageListForDocument(default_document)
else:
result = []
localizer_tool = context.Localizer
visible_language = localizer_tool.get_selected_language()
for loop_language in available_language_list:
if loop_language != visible_language:
result.append(generateAlternativeTags(loop_language, visible_language))
return '\n'.join(result)
return ''
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>WebSite_setAlternativeLanguageList</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
'''=============================================================================
Adds open graph meta for Twitter and Facebook
https://developers.facebook.com/docs/sharing/best-practices
NOTE: add data-open-graph-image="true" to <img/> for OpenGraph
============================================================================='''
portal_type = context.getPortalType()
website = context.getWebSiteValue()
website_url = website.getAbsoluteUrl()
website_name = website.getProperty('short_title')
website_fallback_image = website.getProperty('layout_seo_open_graph_image', '')
def generateImageUrl(my_url, my_image, my_size):
return ''.join([my_url, '/', my_image, "?format=png&amp;display=", my_size])
def generateOpenGraphMeta(my_title, my_url, my_description, my_image):
result = []
result.append('<!-- OpenGraph -->')
result.append('<meta property="og:type" content="website"/>')
result.append('<meta property="og:site_name" content="%s"/>' % (website_name))
result.append('<meta property="og:title" content="%s"/>' % (my_title))
result.append('<meta property="og:url" content="%s"/>' % (my_url))
result.append('<meta property="og:description" content="%s"/>' % (my_description))
result.append('<meta property="og:image" content="%s"/>' % (my_image))
result.append('<!-- Twitter Card -->')
result.append('<meta name="twitter:card" content="summary"/>')
result.append('<meta name="twitter:site" content="%s"/>' % (''.join(["@", website_name])))
result.append('<meta name="twitter:title" content="%s"/>' % (my_title))
result.append('<meta name="twitter:url" content="%s"/>' % (my_url))
result.append('<meta name="twitter:description" content="%s"/>' % (my_description))
result.append('<meta name="twitter:image" content="%s"/>' % (my_image))
return '\n'.join(result)
def generateOpenGraphParamaters(my_context, has_text_content=None):
document = my_context
document_url = document.getAbsoluteUrl()
document_title = document.getProperty("short_title") or document.getProperty("title")
document_description = document.getProperty("description")
# test if an image is labelled for open-graph in this documents textContent
if has_text_content is not None:
document_image = generateImageUrl(website_url, website_fallback_image, "xsmall")
document_image_candidate = context.WebPage_getOpenGraphImage(document)
if document_image_candidate:
document_image = document_image.replace(website_fallback_image, document_image_candidate)
else:
document_background = document.getProperty('layout_content_background')
if document_background is not None:
document_image = generateImageUrl(document_url, document_background, "xlarge")
else:
document_image = generateImageUrl(document_url, website_fallback_image, "xsmall")
return generateOpenGraphMeta(
document_title,
document_url,
document_description,
document_image
)
if portal_type == 'Web Page':
return generateOpenGraphParamaters(context, True)
if portal_type == 'Web Section':
websection = context
default_document = websection.getDefaultDocumentValue()
if default_document is not None:
return generateOpenGraphParamaters(default_document, True)
else:
return generateOpenGraphParamaters(websection)
if portal_type == 'Web Site':
default_document = website.getDefaultDocumentValue()
if default_document is not None:
return generateOpenGraphParamaters(default_document, True)
else:
return generateOpenGraphParamaters(website)
return ''
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>WebSite_setOpenGraphMeta</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
'''=============================================================================
Adds schemaDotOrg discoverable descriptions
https://schema.org/ | https://developers.google.com/schemas/
https://schema.org/docs/full.html
NOTE: Schema defines categories applied to web sites/sections/pages
NOTE: Organizations cannot be declared currently hardcoded
============================================================================='''
'''
portal_type = context.getPortalType()
website = context.getWebSiteValue()
website_url = website.getAbsoluteUrl()
website_name = website.getProperty('title')
website_fallback_image = website.getProperty('layout_seo_open_graph_image', '')
#hardcoded (can't store on organization)
facebook_handle = 'https://www.facebook.com/pages/Nexedi/168462169880320'
twitter_handle = 'https://twitter.com/nexedi'
google_handle = ''
# always add website information, no matter displayed
result = []
result.append('<script type="application/ld+json">')
result.append('{')
result.append('"@context": "http://schema.org",')
result.append('"@type": "WebSite",')
result.append(''.join(['"@url": "', website_url, '",']))
result.append('"potentialAction": {')
result.append('"@type": "InteractAction",')
result.append(''.join(['"target": "', website_url, '/contact"']))
result.append('}')
result.append('</script>')
# on a website, we add above and hardcoded organization info
if portal_type == 'Web Site':
result.append('<script type="application/ld+json">')
result.append('{')
result.append('"@context": "http://schema.org",')
result.append('"@type": "Organization",')
result.append(''.join(['"name": "', website_name, '",']))
result.append(''.join(['"url": "', website_url, '",']))
result.append(''.join(['"logo": "', website_fallback_image, '?format=png&amp;display=xsmall",']))
result.append(''.join(['"sameAs":["', facebook_handle, '", "', twitter_handle,'", "', google_handle, '"]']))
# once organizations are retrieveable, could we add contact numbers
result.append('"contactPoint": [')
result.append('{')
result.append('"@type" : "ContactPoint",')
result.append('"telephone": "+33-6-62-05-76-14",')
result.append('"contactType": "Enquiries",')
result.append('"availableLanguage": ["French", "English", "Japanese"]')
result.append('}, {')
result.append('"@type" : "ContactPoint",')
result.append('"telephone": "+49-176-9639-9023",')
result.append('"contactType": "Enquiries",')
result.append('"availableLanguage": ["German", "English", "French"]')
result.append('}, {')
result.append('"@type" : "ContactPoint",')
result.append('"telephone": "+33-6-77-73-59-28",')
result.append('"contactType": "Enquiries",')
result.append('"availableLanguage": ["Chinese", "English", "French"]')
result.append('}, {')
result.append('"@type" : "ContactPoint",')
result.append('"telephone": "+55-21-999-09-58-70",')
result.append('"contactType": "Enquiries",')
result.append('"availableLanguage": ["Portuguese", "English", "French"]')
result.append('}')
result.append('</script>')
# a web section should ideally be a webpage in schema.org
if portal_type == 'Web Section':
result.append('<script type="application/ld+json">')
result.append('{')
result.append('"@context": "http://schema.org",')
result.append('"@type": "Organization",')
result.append('}')
result.append('</script>')
return '\n'.join(result)
"""
I could use categories, if we would have
schema/WebSite
schema/WebPage
schema/AboutPage
schema/ProfilePage
schema/CheckoutPage
schema/CollectionPage
schema/ContactPage
schema/ItemPage
about = AboutPage
value = ProfilePage
success = ~ CheckoutPage
innovation = ~ CheckoutPage
free software = CollectionPage & Item = Product/Software
jobs = ~ CheckoutPage
contact = ContactPage
Solution = CollectionPage & Item = Product/Software
Service = CollectionPage & Item = Service
Press = CollectionPage
Blog = CollectionPage
Team = CheckoutPage
#import re
#portal_type = context.getPortalType()
#website = context.getWebSiteValue()
#website_url = website.getAbsoluteUrl()
#website_name = website.getProperty('title')
#website_fallback_image = website.getProperty('layout_seo_open_graph_image', '')
#def generateImageUrl(my_url, my_image, my_size):
# return ''.join([my_url, '/', my_image, "?format=png&amp;display=", my_size])
#def generateOpenGraphMeta(my_title, my_url, my_description, my_image):
# result = []
# result.append('<!-- OpenGraph -->')
# result.append('<meta property="og:type" content="website"/>')
# result.append('<meta property="og:site_name" content="%s"/>' % (website_name))
# result.append('<meta property="og:title" content="%s"/>' % (my_title))
# result.append('<meta property="og:url" content="%s"/>' % (my_url))
# result.append('<meta property="og:description" content="%s"/>' % (my_description))
# result.append('<meta property="og:image" content="%s"/>' % (my_image))
# result.append('<!-- Twitter Card -->')
# result.append('<meta name="twitter:card" content="summary"/>')
# result.append('<meta name="twitter:site" content="%s"/>' % (''.join(["@", website_name])))
# result.append('<meta name="twitter:title" content="%s"/>' % (my_title))
# result.append('<meta name="twitter:url" content="%s"/>' % (my_url))
# result.append('<meta name="twitter:description" content="%s"/>' % (my_description))
# result.append('<meta name="twitter:image" content="%s"/>' % (my_image))
# return '\n'.join(result)
#def generateOpenGraphParamaters(my_context, has_text_content=None):
# document = my_context
# document_url = document.getAbsoluteUrl()
# document_title = document.getProperty("short_title")
# document_description = document.getProperty("description")
# # test if an image is labelled for open-graph in this documents textContent
# if has_text_content is not None:
# document_content = document.getProperty("text_content")
# document_image_list = re.findall("<img(.*?)/>", document_content)
# document_image = generateImageUrl(website_url, website_fallback_image, "xsmall")
# for image_candidate in document_image_list:
# if "data-open-graph-image" in image_candidate:
# match = re.search('src="([^"]+)"', image_candidate)
# if match:
# document_image = match.group(1).split("?")[0]
# else:
# document_background = document.getProperty('layout_content_background')
# if document_background is not None:
# document_image = generateImageUrl(document_url, document_background, "xlarge")
# else:
# document_image = generateImageUrl(document_url, website_fallback_image, "xsmall")
# return generateOpenGraphMeta(
# document_title,
# document_url,
# document_description,
# document_image
# )
#if portal_type == 'Web Page':
# return generateOpenGraphParamaters(context, True)
#if portal_type == 'Web Section':
# websection = context
# default_document = websection.getDefaultDocumentValue()
# if default_document is not None:
# return generateOpenGraphParamaters(default_document, True)
# else:
# return generateOpenGraphParamaters(websection)
#if portal_type == 'Web Site':
# default_document = website.getDefaultDocumentValue()
# if default_document is not None:
# return generateOpenGraphParamaters(default_document, True)
# else:
# return generateOpenGraphParamaters(website)
#return ''
'''
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>WebSite_setSchemaDotOrg</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ERP5 Form" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary/>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>action</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>edit_order</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>encoding</string> </key>
<value> <string>UTF-8</string> </value>
</item>
<item>
<key> <string>enctype</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>group_list</string> </key>
<value>
<list>
<string>left</string>
<string>right</string>
<string>center</string>
<string>bottom</string>
<string>hidden</string>
</list>
</value>
</item>
<item>
<key> <string>groups</string> </key>
<value>
<dictionary>
<item>
<key> <string>bottom</string> </key>
<value>
<list>
<string>iframe_content</string>
<string>text_content</string>
</list>
</value>
</item>
<item>
<key> <string>center</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>hidden</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>left</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>right</string> </key>
<value>
<list/>
</value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>WebSite_viewBookPage</string> </value>
</item>
<item>
<key> <string>method</string> </key>
<value> <string>POST</string> </value>
</item>
<item>
<key> <string>name</string> </key>
<value> <string>WebSite_viewBookPage</string> </value>
</item>
<item>
<key> <string>pt</string> </key>
<value> <string>erp5_ci_web_template</string> </value>
</item>
<item>
<key> <string>row_length</string> </key>
<value> <int>4</int> </value>
</item>
<item>
<key> <string>stored_encoding</string> </key>
<value> <string>UTF-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode_mode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>update_action</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>update_action_title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>delegated_list</string> </key>
<value>
<list>
<string>css_class</string>
<string>default</string>
<string>description</string>
<string>editable</string>
<string>enabled</string>
<string>height</string>
<string>title</string>
<string>whitespace_preserve</string>
<string>width</string>
</list>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>iframe_content</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>css_class</string> </key>
<value> <string>page hiddenLabel</string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string>my_editor_field</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>Base_viewWebFieldLibrary</string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <int>18</int> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string>Click to edit the target</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Page Content</string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <int>80</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="TALESMethod" module="Products.Formulator.TALESField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string encoding="cdata"><![CDATA[
python:\'<iframe width="100%%" height="600" src="%s/asEntireHTML"></iframe>\' % context.absolute_url()
]]></string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="TALESMethod" module="Products.Formulator.TALESField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>here/getUrlString</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>delegated_list</string> </key>
<value>
<list>
<string>css_class</string>
<string>default</string>
<string>description</string>
<string>editable</string>
<string>enabled</string>
<string>text_editor</string>
<string>title</string>
<string>whitespace_preserve</string>
</list>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>text_content</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>css_class</string> </key>
<value> <string>page hidden_label</string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string>my_editor_field</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>Base_viewFieldLibrary</string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string>Click to edit the target</string> </value>
</item>
<item>
<key> <string>text_editor</string> </key>
<value> <string>text_area</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Page Content</string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="TALESMethod" module="Products.Formulator.TALESField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>python: context.WebPage_viewAsBook(format="plain")</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="TALESMethod" module="Products.Formulator.TALESField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>not:here/getUrlString</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ERP5 Form" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary/>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>action</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>edit_order</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>encoding</string> </key>
<value> <string>UTF-8</string> </value>
</item>
<item>
<key> <string>enctype</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>group_list</string> </key>
<value>
<list>
<string>left</string>
<string>right</string>
<string>center</string>
<string>bottom</string>
<string>hidden</string>
</list>
</value>
</item>
<item>
<key> <string>groups</string> </key>
<value>
<dictionary>
<item>
<key> <string>bottom</string> </key>
<value>
<list>
<string>iframe_content</string>
<string>text_content</string>
</list>
</value>
</item>
<item>
<key> <string>center</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>hidden</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>left</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>right</string> </key>
<value>
<list/>
</value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>WebSite_viewChapterPage</string> </value>
</item>
<item>
<key> <string>method</string> </key>
<value> <string>POST</string> </value>
</item>
<item>
<key> <string>name</string> </key>
<value> <string>WebSite_viewChapterPage</string> </value>
</item>
<item>
<key> <string>pt</string> </key>
<value> <string>erp5_ci_web_template</string> </value>
</item>
<item>
<key> <string>row_length</string> </key>
<value> <int>4</int> </value>
</item>
<item>
<key> <string>stored_encoding</string> </key>
<value> <string>UTF-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode_mode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>update_action</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>update_action_title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>delegated_list</string> </key>
<value>
<list>
<string>css_class</string>
<string>default</string>
<string>description</string>
<string>editable</string>
<string>enabled</string>
<string>height</string>
<string>title</string>
<string>whitespace_preserve</string>
<string>width</string>
</list>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>iframe_content</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>css_class</string> </key>
<value> <string>page hiddenLabel</string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string>my_editor_field</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>Base_viewWebFieldLibrary</string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <int>18</int> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string>Click to edit the target</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Page Content</string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <int>80</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="TALESMethod" module="Products.Formulator.TALESField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string encoding="cdata"><![CDATA[
python:\'<iframe width="100%%" height="600" src="%s/asEntireHTML"></iframe>\' % context.absolute_url()
]]></string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="TALESMethod" module="Products.Formulator.TALESField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>here/getUrlString</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>delegated_list</string> </key>
<value>
<list>
<string>css_class</string>
<string>default</string>
<string>description</string>
<string>editable</string>
<string>enabled</string>
<string>text_editor</string>
<string>title</string>
<string>whitespace_preserve</string>
</list>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>text_content</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>css_class</string> </key>
<value> <string>page hidden_label</string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string>my_editor_field</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>Base_viewFieldLibrary</string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string>Click to edit the target</string> </value>
</item>
<item>
<key> <string>text_editor</string> </key>
<value> <string>text_area</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Page Content</string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="TALESMethod" module="Products.Formulator.TALESField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>python: context.WebPage_viewAsChapter(format="plain")</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="TALESMethod" module="Products.Formulator.TALESField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>not:here/getUrlString</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ERP5 Form" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary/>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>action</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>edit_order</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>encoding</string> </key>
<value> <string>UTF-8</string> </value>
</item>
<item>
<key> <string>enctype</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>group_list</string> </key>
<value>
<list>
<string>left</string>
<string>right</string>
<string>center</string>
<string>bottom</string>
<string>hidden</string>
</list>
</value>
</item>
<item>
<key> <string>groups</string> </key>
<value>
<dictionary>
<item>
<key> <string>bottom</string> </key>
<value>
<list>
<string>iframe_content</string>
<string>text_content</string>
</list>
</value>
</item>
<item>
<key> <string>center</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>hidden</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>left</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>right</string> </key>
<value>
<list/>
</value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>WebSite_viewDefaultPage</string> </value>
</item>
<item>
<key> <string>method</string> </key>
<value> <string>POST</string> </value>
</item>
<item>
<key> <string>name</string> </key>
<value> <string>WebSite_viewDefaultPage</string> </value>
</item>
<item>
<key> <string>pt</string> </key>
<value> <string>erp5_ci_web_template</string> </value>
</item>
<item>
<key> <string>row_length</string> </key>
<value> <int>4</int> </value>
</item>
<item>
<key> <string>stored_encoding</string> </key>
<value> <string>UTF-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode_mode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>update_action</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>update_action_title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>delegated_list</string> </key>
<value>
<list>
<string>css_class</string>
<string>default</string>
<string>description</string>
<string>editable</string>
<string>enabled</string>
<string>height</string>
<string>title</string>
<string>whitespace_preserve</string>
<string>width</string>
</list>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>iframe_content</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>css_class</string> </key>
<value> <string>page hiddenLabel</string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string>my_editor_field</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>Base_viewWebFieldLibrary</string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <int>18</int> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string>Click to edit the target</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Page Content</string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <int>80</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="TALESMethod" module="Products.Formulator.TALESField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string encoding="cdata"><![CDATA[
python:\'<iframe width="100%%" height="600" src="%s/asEntireHTML"></iframe>\' % context.absolute_url()
]]></string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="TALESMethod" module="Products.Formulator.TALESField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>here/getUrlString</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>delegated_list</string> </key>
<value>
<list>
<string>css_class</string>
<string>default</string>
<string>description</string>
<string>editable</string>
<string>enabled</string>
<string>text_editor</string>
<string>title</string>
<string>whitespace_preserve</string>
</list>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>text_content</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>css_class</string> </key>
<value> <string>page hidden_label</string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string>my_editor_field</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>Base_viewFieldLibrary</string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string>Click to edit the target</string> </value>
</item>
<item>
<key> <string>text_editor</string> </key>
<value> <string>text_area</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Page Content</string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="TALESMethod" module="Products.Formulator.TALESField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>python: context.WebPage_viewAsDefault(format=\'plain\')</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="TALESMethod" module="Products.Formulator.TALESField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>not:here/getUrlString</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
"""
================================================================================
Render page content for pages in this web section as book
================================================================================
"""
context.REQUEST.set("content_form_id", "WebPage_viewAsBook")
web_section = context.getWebSectionValue()
web_section_default_renderer = getattr(context, web_section.getApplicableLayout())
return web_section_default_renderer()
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>WebSite_viewFoo</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
'''=============================================================================
Website Search
============================================================================='''
if field_your_search_form_id is None:
field_your_search_form_id = 'WebSite_viewSearchResultList'
if context is context.getWebSiteValue():
field_your_search_form_id = context.getWebSiteValue()["browse"].absolute_url()
return context.ERP5Site_viewQuickSearchResultList(
field_your_search_text=field_your_search_text,
field_your_search_portal_type=field_your_search_portal_type,
all_languages=all_languages,
list_style=list_style,
field_your_search_form_id=field_your_search_form_id,
)
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>field_your_search_text=\'\', field_your_search_portal_type=\'\', all_languages=None, list_style=None, field_your_search_form_id=None</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>WebSite_viewQuickSearchResultList</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Folder" module="OFS.Folder"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>ci_web_css</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
/* === Browser Overrides === */
fieldset {
border: 0 none;
padding: 0;
margin: 0;
}
/* === font-family === */
.ci-web .ci-web-header-bar-logo-left span,
.ci-web .ci-web-header div,
.ci-web .ci-web-page-footer .ci-web-copyright {
font-family: "Roboto", Arial, sans-serif;
font-weight: normal;
}
.ci-web .ci-web-page-content h1,
.ci-web .ci-web-page-content h2,
.ci-web .ci-web-page-content h3 {
font-family: "Roboto", Arial, sans-serif;
}
.ci-web .ci-web-page-content table th,
.ci-web .ci-web-page-content table td {
font-family: "Roboto Condensed", Arial, 'Noto Sans Sc', SimHei, STXihei, sans-serif;
font-weight: normal;
}
.ci-web .ci-web-page-content p,
.ci-web .ci-web-page-content li,
.ci-web .ci-web-page-content span {
font-family: 'Heuristica', 'Helvetica', Times, serif;
}
.ci-web .ci-web-page-content pre,
.ci-web .ci-web-page-content code,
.ci-web .ci-web-page-content code span {
font-family: "Courier New", Courier, monospace, sans-serif;
}
/* === font-size === */
.ci-web .ci-web-page-content code span,
.ci-web .ci-web-page-footer .ci-web-copyright {
font-size: .9em;
}
.ci-web .ci-web-page-content p,
.ci-web .ci-web-page-content ul li {
font-size: 1.25em;
line-height: 1.58em;
letter-spacing: -.003em;
}
/* === main section dimensions === */
.ci-web .ci-web-page-header,
.ci-web .ci-web-page-footer {
width: 100%;
}
.ci-web .ci-web-page-header-logo-bar,
.ci-web .ci-web-page-content {
width: 80%;
max-width: 64em;
margin: 0 auto;
}
@media(max-width: 64em) {
.ci-web .ci-web-page-header-logo-bar,
.ci-web .ci-web-page-content {
width: auto;
max-width: none;
padding: 0 1em;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
}
/* === site header === */
.ci-web .ci-web-page-header {
margin-bottom: 1em;
padding-bottom: 5em;
-webkit-box-shadow: 0 2px 5px 0 rgba(0,0,0,0.24);
-moz-box-shadow: 0 2px 5px 0 rgba(0,0,0,0.24);
box-shadow: 0 2px 5px 0 rgba(0,0,0,0.24);
}
.ci-web-header-bar-navigation-left img {
width: 2em;
vertical-align: middle;
padding-right: .5em;
padding-left: .5em;
}
.ci-web .ci-web-page-header-bar-navigation-title {
vertical-align: middle;
padding: .25em 0;
}
.ci-web .ci-web-header-bar-logo-left a,
.ci-web-header-bar-navigation-left a {
text-decoration: none;
}
.ci-web .ci-web-header-bar-logo-left img {
max-width: 10em;
height: auto;
border: 0 none;
vertical-align: middle;
}
.ci-web .ci-web-header-bar-logo-left span {
vertical-align: middle;
text-transform: uppercase;
letter-spacing: 2px;
font-weight: bold;
}
@media(max-width: 45em) {
.ci-web .ci-web-header-bar-logo-left span {
display: block;
width: auto;
}
.ci-web .ci-web-header-bar-logo-left img {
text-align: center;
margin-bottom: 1em;
}
}
.ci-web .ci-web-header-bar-logo {
margin-top: 4em;
text-align: center;
}
.ci-web .ci-web .ci-web-header-bar-logo-left,
.ci-web .ci-web .ci-web-header-bar-logo-center,
.ci-web .ci-web .ci-web-header-bar-logo-right {
display: inline-block;
width: 0;
}
.ci-web .ci-web .ci-web-header-bar-logo-left {
width: 50%;
}
@media(max-width: 64em) {
.ci-web .ci-web .ci-web-header-bar-logo-left {
width: auto;
}
}
.ci-web .ci-web-header-bar-navigation {
padding: .25em 0;
-webkit-box-shadow: 0 2px 5px 0 rgba(0,0,0,0.24);
-moz-box-shadow: 0 2px 5px 0 rgba(0,0,0,0.24);
box-shadow: 0 2px 5px 0 rgba(0,0,0,0.24);
}
/*
ci-web-page-header
ci-web-page-footer
ci-web-page-banner
ci-web-header
ci-web-header-bar-navigation
ci-web-header-bar-navigation-left
ci-web-header-bar-navigation-center
ci-web-header-bar-navigation-right
ci-web-header-menu-lang
ci-web-header-menu-auth
ci-web-header-menu-user
ci-web-header-bar-logo
ci-web-header-bar-logo-left
ci-web-header-bar-logo-center
ci-web-header-bar-logo-right
ci-web-header-bar-search
ci-web-header-bar-search-left
ci-web-header-bar-search-center
ci-web-header-bar-search-right
*/
/* === site content === */
.ci-web .ci-web-page-content h1:not(:first-of-type) {
margin-top: 1.5em;
}
.ci-web .ci-web-page-content h2 {
margin-top: 1em;
}
.ci-web .ci-web-page-content h3 {
margin-top: .5em;
}
.ci-web .ci-web-page-content table {
border-collapse: collapse;
border: 1px solid #808080;
}
.ci-web .ci-web-page-content table thead {
background: #F0F0F0;
}
.ci-web .ci-web-page-content table thead th,
.ci-web .ci-web-page-content table thead td {
padding: 1em .25em;
}
.ci-web .ci-web-page-content table tbody th,
.ci-web .ci-web-page-content table tbody td {
padding: 0 .25em;
}
.ci-web .ci-web-page-content img {
width: 100%;
}
.ci-web .ci-web-page-content a {
text-decoration: none;
}
/* prevent inline code elements to break page width */
.ci-web .ci-web-page-content code {
word-break: break-all;
word-wrap: break-word;
}
.ci-web .ci-web-page-content pre code {
word-break: normal;
word-wrap: normal;
}
/*
.ci-web .ci-web-page-content p,
.ci-web .ci-web-page-content li,
.ci-web .ci-web-page-content span {
line-height: 1.3em;
}
*/
/* === site content responsie tables === */
@media (max-width: 64em) {
.ci-web .ci-web-page-content table,
.ci-web .ci-web-page-content thead,
.ci-web .ci-web-page-content tbody,
.ci-web .ci-web-page-content th,
.ci-web .ci-web-page-content td,
.ci-web .ci-web-page-content tr {
display: block;
}
.ci-web .ci-web-page-content thead tr {
position: absolute !important;
height: 1px;
width: 1px;
overflow: hidden;
clip: rect(1px,1px,1px,1px);
}
.ci-web .ci-web-page-content table tbody tr td:first-child {
font-weight: 700;
}
.ci-web .ci-web-page-content tr {
border-bottom: 1px solid #808080;
padding: 1em 0.5em;
}
/* new row */
.ci-web .ci-web-page-content td {
border: none;
}
/* new row header */
.ci-web .ci-web-page-content td:before {
padding-right: 10px;
white-space: nowrap;
}
}
/* === Login Menu === */
.ci-web .ci-web-header-menu-user {
display: none;
}
/* === site footer === */
.ci-web .ci-web-page-footer {
text-align: center;
margin-top: 2em;
padding: 1em 0;
}
.ci-web .ci-web-page-footer .ci-web-copyright {
}
/* === code highlighting === */
/* highlightjs */
.hljs {
display: block;
overflow-x: auto;
background: #F0F0F0
}
.hljs,
.hljs-subst {
color: #444
}
.hljs-comment {
color: #888888
}
.hljs-keyword,
.hljs-attribute,
.hljs-selector-tag,
.hljs-meta-keyword,
.hljs-doctag,
.hljs-name {
font-weight: bold
}
.hljs-type,
.hljs-string,
.hljs-number,
.hljs-selector-id,
.hljs-selector-class,
.hljs-quote,
.hljs-template-tag,
.hljs-deletion {
color: #880000
}
.hljs-title,
.hljs-section {
color: #880000;
font-weight: bold
}
.hljs-regexp,
.hljs-symbol,
.hljs-variable,
.hljs-template-variable,
.hljs-link,
.hljs-selector-attr,
.hljs-selector-pseudo {
color: #BC6060
}
.hljs-literal {
color: #78A960
}
.hljs-built_in,
.hljs-bullet,
.hljs-code,
.hljs-addition {
color: #397300
}
.hljs-meta {
color: #1f7199
}
.hljs-meta-string {
color: #4d99bf
}
.hljs-emphasis {
font-style: italic
}
.hljs-strong {
font-weight: bold
}
/* line numbers from experimental branch: https://github.com/isagalaev/highlight.js/compare/line-numbers */
/* line numbers */
pre {
counter-reset: lines;
}
pre .line {
counter-increment: lines;
}
pre .line::before {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
-o-user-select: none;
user-select: none;
content: counter(lines);
text-align: right;
display: inline-block;
width: 2em;
padding-right: 0.5em;
margin-right: 0.5em;
color: #BBB;
border-right: solid 1px;
}
/* hanging indent, removed per request of Vincent *//*
pre .line {
padding-left: 1.5em;
text-indent: -2em;
display: block;
}
pre {
white-space: pre-wrap;
white-space: -moz-pre-wrap;
white-space: -pre-wrap;
white-space: -o-pre-wrap;
word-wrap: break-word;
}
*/
/* customized colors */
/* coloring from prismjs */
.hljs-comment,
.hljs-doctag,
.hljs-meta,
.hljs-meta-string {
color: slategray;
}
.hljs-keyword {
color: #07a;
}
.hljs-attribute,
.hljs-string,
.hljs-selector-tag,
.hljs-selector-id,
.hljs-selector-class,
.hljs-selector-attr,
.hljs-selector-pseudo {
color: #690;
}
.hljs-number,
.hljs-deletion,
.hljs-symbol,
.hljs-code {
color: #905;
}
.hljs-regexp,
.hljs-variable,
.hljs-template-variable,
.hljs-strong {
color: #e90;
}
.hljs-link {
color: #a67f59;
}
/* don't exist */
.hljs-name,
.hljs-type,
.hljs-quote,
.hljs-template-tag,
.hljs-title,
.hljs-section,
.hljs-literal,
.hljs-built_in,
.hljs-addition,
.hljs-bullet {
color: inherit;
font-weight: normal;
}
/* overriding of line breaks with scrolling, added per request of Vincent */
.ci-web .ci-web-page-content pre {
overflow-x: scroll;
}
.ci-web .ci-web-page-content pre code {
white-space: pre;
}
\ No newline at end of file
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Cacheable__manager_id</string> </key>
<value> <string>http_cache</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>ci_web.css</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/css</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
/*! normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */
/**
* 1. Change the default font family in all browsers (opinionated).
* 2. Correct the line height in all browsers.
* 3. Prevent adjustments of font size after orientation changes in
* IE on Windows Phone and in iOS.
*/
/* Document
========================================================================== */
html {
font-family: sans-serif; /* 1 */
line-height: 1.15; /* 2 */
-ms-text-size-adjust: 100%; /* 3 */
-webkit-text-size-adjust: 100%; /* 3 */
}
/* Sections
========================================================================== */
/**
* Remove the margin in all browsers (opinionated).
*/
body {
margin: 0;
}
/**
* Add the correct display in IE 9-.
*/
article,
aside,
footer,
header,
nav,
section {
display: block;
}
/**
* Correct the font size and margin on `h1` elements within `section` and
* `article` contexts in Chrome, Firefox, and Safari.
*/
h1 {
font-size: 2em;
margin: 0.67em 0;
}
/* Grouping content
========================================================================== */
/**
* Add the correct display in IE 9-.
* 1. Add the correct display in IE.
*/
figcaption,
figure,
main { /* 1 */
display: block;
}
/**
* Add the correct margin in IE 8.
*/
figure {
margin: 1em 40px;
}
/**
* 1. Add the correct box sizing in Firefox.
* 2. Show the overflow in Edge and IE.
*/
hr {
box-sizing: content-box; /* 1 */
height: 0; /* 1 */
overflow: visible; /* 2 */
}
/**
* 1. Correct the inheritance and scaling of font size in all browsers.
* 2. Correct the odd `em` font sizing in all browsers.
*/
pre {
font-family: monospace, monospace; /* 1 */
font-size: 1em; /* 2 */
}
/* Text-level semantics
========================================================================== */
/**
* 1. Remove the gray background on active links in IE 10.
* 2. Remove gaps in links underline in iOS 8+ and Safari 8+.
*/
a {
background-color: transparent; /* 1 */
-webkit-text-decoration-skip: objects; /* 2 */
}
/**
* Remove the outline on focused links when they are also active or hovered
* in all browsers (opinionated).
*/
a:active,
a:hover {
outline-width: 0;
}
/**
* 1. Remove the bottom border in Firefox 39-.
* 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
*/
abbr[title] {
border-bottom: none; /* 1 */
text-decoration: underline; /* 2 */
text-decoration: underline dotted; /* 2 */
}
/**
* Prevent the duplicate application of `bolder` by the next rule in Safari 6.
*/
b,
strong {
font-weight: inherit;
}
/**
* Add the correct font weight in Chrome, Edge, and Safari.
*/
b,
strong {
font-weight: bolder;
}
/**
* 1. Correct the inheritance and scaling of font size in all browsers.
* 2. Correct the odd `em` font sizing in all browsers.
*/
code,
kbd,
samp {
font-family: monospace, monospace; /* 1 */
font-size: 1em; /* 2 */
}
/**
* Add the correct font style in Android 4.3-.
*/
dfn {
font-style: italic;
}
/**
* Add the correct background and color in IE 9-.
*/
mark {
background-color: #ff0;
color: #000;
}
/**
* Add the correct font size in all browsers.
*/
small {
font-size: 80%;
}
/**
* Prevent `sub` and `sup` elements from affecting the line height in
* all browsers.
*/
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
/* Embedded content
========================================================================== */
/**
* Add the correct display in IE 9-.
*/
audio,
video {
display: inline-block;
}
/**
* Add the correct display in iOS 4-7.
*/
audio:not([controls]) {
display: none;
height: 0;
}
/**
* Remove the border on images inside links in IE 10-.
*/
img {
border-style: none;
}
/**
* Hide the overflow in IE.
*/
svg:not(:root) {
overflow: hidden;
}
/* Forms
========================================================================== */
/**
* 1. Change the font styles in all browsers (opinionated).
* 2. Remove the margin in Firefox and Safari.
*/
button,
input,
optgroup,
select,
textarea {
font-family: sans-serif; /* 1 */
font-size: 100%; /* 1 */
line-height: 1.15; /* 1 */
margin: 0; /* 2 */
}
/**
* Show the overflow in IE.
* 1. Show the overflow in Edge.
*/
button,
input { /* 1 */
overflow: visible;
}
/**
* Remove the inheritance of text transform in Edge, Firefox, and IE.
* 1. Remove the inheritance of text transform in Firefox.
*/
button,
select { /* 1 */
text-transform: none;
}
/**
* 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`
* controls in Android 4.
* 2. Correct the inability to style clickable types in iOS and Safari.
*/
button,
html [type="button"], /* 1 */
[type="reset"],
[type="submit"] {
-webkit-appearance: button; /* 2 */
}
/**
* Remove the inner border and padding in Firefox.
*/
button::-moz-focus-inner,
[type="button"]::-moz-focus-inner,
[type="reset"]::-moz-focus-inner,
[type="submit"]::-moz-focus-inner {
border-style: none;
padding: 0;
}
/**
* Restore the focus styles unset by the previous rule.
*/
button:-moz-focusring,
[type="button"]:-moz-focusring,
[type="reset"]:-moz-focusring,
[type="submit"]:-moz-focusring {
outline: 1px dotted ButtonText;
}
/**
* Change the border, margin, and padding in all browsers (opinionated).
*/
fieldset {
border: 1px solid #c0c0c0;
margin: 0 2px;
padding: 0.35em 0.625em 0.75em;
}
/**
* 1. Correct the text wrapping in Edge and IE.
* 2. Correct the color inheritance from `fieldset` elements in IE.
* 3. Remove the padding so developers are not caught out when they zero out
* `fieldset` elements in all browsers.
*/
legend {
box-sizing: border-box; /* 1 */
color: inherit; /* 2 */
display: table; /* 1 */
max-width: 100%; /* 1 */
padding: 0; /* 3 */
white-space: normal; /* 1 */
}
/**
* 1. Add the correct display in IE 9-.
* 2. Add the correct vertical alignment in Chrome, Firefox, and Opera.
*/
progress {
display: inline-block; /* 1 */
vertical-align: baseline; /* 2 */
}
/**
* Remove the default vertical scrollbar in IE.
*/
textarea {
overflow: auto;
}
/**
* 1. Add the correct box sizing in IE 10-.
* 2. Remove the padding in IE 10-.
*/
[type="checkbox"],
[type="radio"] {
box-sizing: border-box; /* 1 */
padding: 0; /* 2 */
}
/**
* Correct the cursor style of increment and decrement buttons in Chrome.
*/
[type="number"]::-webkit-inner-spin-button,
[type="number"]::-webkit-outer-spin-button {
height: auto;
}
/**
* 1. Correct the odd appearance in Chrome and Safari.
* 2. Correct the outline style in Safari.
*/
[type="search"] {
-webkit-appearance: textfield; /* 1 */
outline-offset: -2px; /* 2 */
}
/**
* Remove the inner padding and cancel buttons in Chrome and Safari on macOS.
*/
[type="search"]::-webkit-search-cancel-button,
[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
/**
* 1. Correct the inability to style clickable types in iOS and Safari.
* 2. Change font properties to `inherit` in Safari.
*/
::-webkit-file-upload-button {
-webkit-appearance: button; /* 1 */
font: inherit; /* 2 */
}
/* Interactive
========================================================================== */
/*
* Add the correct display in IE 9-.
* 1. Add the correct display in Edge, IE, and Firefox.
*/
details, /* 1 */
menu {
display: block;
}
/*
* Add the correct display in all browsers.
*/
summary {
display: list-item;
}
/* Scripting
========================================================================== */
/**
* Add the correct display in IE 9-.
*/
canvas {
display: inline-block;
}
/**
* Add the correct display in IE.
*/
template {
display: none;
}
/* Hidden
========================================================================== */
/**
* Add the correct display in IE 10-.
*/
[hidden] {
display: none;
}
\ No newline at end of file
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Cacheable__manager_id</string> </key>
<value> <string>http_cache</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>normalize.css</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/css</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Folder" module="OFS.Folder"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>ci_web_js</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
/*! highlight.js v9.6.0 | BSD3 License | git.io/hljslicense */
/*
Syntax highlighting with language autodetection.
https://highlightjs.org/
https://raw.githubusercontent.com/isagalaev/highlight.js/master/src/highlight.js
*/
/* Custom: built manually, added line-numbers from dev-branch */
(function(factory) {
// Find the global object for export to both the browser and web workers.
var globalObject = typeof window === 'object' && window ||
typeof self === 'object' && self;
// Setup highlight.js for different environments. First is Node.js or
// CommonJS.
if(typeof exports !== 'undefined') {
factory(exports);
} else if(globalObject) {
// Export hljs globally even when using AMD for cases when this script
// is loaded with others that may still expect a global hljs.
globalObject.hljs = factory({});
// Finally register the global hljs with AMD.
if(typeof define === 'function' && define.amd) {
define([], function() {
return globalObject.hljs;
});
}
}
}(function(hljs) {
// Convenience variables for build-in objects
var ArrayProto = [],
objectKeys = Object.keys;
// Global internal variables used within the highlight.js library.
var languages = {},
aliases = {};
// Regular expressions used throughout the highlight.js library.
var noHighlightRe = /^(no-?highlight|plain|text)$/i,
languagePrefixRe = /\blang(?:uage)?-([\w-]+)\b/i,
fixMarkupRe = /((^(<[^>]+>|\t|)+|(?:\n)))/gm;
var spanEndTag = '</span>';
// Global options used when within external APIs. This is modified when
// calling the `hljs.configure` function.
var options = {
classPrefix: 'hljs-',
tabReplace: null,
useBR: false,
languages: undefined/* custom */,
lineNodes: true /* end */
};
// Object map that is used to escape some common HTML characters.
var escapeRegexMap = {
'&': '&amp;',
'<': '&lt;',
'>': '&gt;'
};
/* Utility functions */
function escape(value) {
return value.replace(/[&<>]/gm, function(character) {
return escapeRegexMap[character];
});
}
function tag(node) {
return node.nodeName.toLowerCase();
}
function testRe(re, lexeme) {
var match = re && re.exec(lexeme);
return match && match.index === 0;
}
function isNotHighlighted(language) {
return noHighlightRe.test(language);
}
function blockLanguage(block) {
var i, match, length, _class;
var classes = block.className + ' ';
classes += block.parentNode ? block.parentNode.className : '';
// language-* takes precedence over non-prefixed class names.
match = languagePrefixRe.exec(classes);
if (match) {
return getLanguage(match[1]) ? match[1] : 'no-highlight';
}
classes = classes.split(/\s+/);
for (i = 0, length = classes.length; i < length; i++) {
_class = classes[i]
if (isNotHighlighted(_class) || getLanguage(_class)) {
return _class;
}
}
}
function inherit(parent, obj) {
var key;
var result = {};
for (key in parent)
result[key] = parent[key];
if (obj)
for (key in obj)
result[key] = obj[key];
return result;
}
/* Stream merging */
function nodeStream(node) {
var result = [];
(function _nodeStream(node, offset) {
for (var child = node.firstChild; child; child = child.nextSibling) {
if (child.nodeType === 3)
offset += child.nodeValue.length;
else if (child.nodeType === 1) {
result.push({
event: 'start',
offset: offset,
node: child
});
offset = _nodeStream(child, offset);
// Prevent void elements from having an end tag that would actually
// double them in the output. There are more void elements in HTML
// but we list only those realistically expected in code display.
if (!tag(child).match(/br|hr|img|input/)) {
result.push({
event: 'stop',
offset: offset,
node: child
});
}
}
}
return offset;
})(node, 0);
return result;
}
function mergeStreams(original, highlighted, value) {
var processed = 0;
var result = '';
var nodeStack = [];
function selectStream() {
if (!original.length || !highlighted.length) {
return original.length ? original : highlighted;
}
if (original[0].offset !== highlighted[0].offset) {
return (original[0].offset < highlighted[0].offset) ? original : highlighted;
}
/*
To avoid starting the stream just before it should stop the order is
ensured that original always starts first and closes last:
if (event1 == 'start' && event2 == 'start')
return original;
if (event1 == 'start' && event2 == 'stop')
return highlighted;
if (event1 == 'stop' && event2 == 'start')
return original;
if (event1 == 'stop' && event2 == 'stop')
return highlighted;
... which is collapsed to:
*/
return highlighted[0].event === 'start' ? original : highlighted;
}
function open(node) {
function attr_str(a) {return ' ' + a.nodeName + '="' + escape(a.value) + '"';}
result += '<' + tag(node) + ArrayProto.map.call(node.attributes, attr_str).join('') + '>';
}
function close(node) {
result += '</' + tag(node) + '>';
}
function render(event) {
(event.event === 'start' ? open : close)(event.node);
}
while (original.length || highlighted.length) {
var stream = selectStream();
result += escape(value.substr(processed, stream[0].offset - processed));
processed = stream[0].offset;
if (stream === original) {
/*
On any opening or closing tag of the original markup we first close
the entire highlighted node stack, then render the original tag along
with all the following original tags at the same offset and then
reopen all the tags on the highlighted stack.
*/
nodeStack.reverse().forEach(close);
do {
render(stream.splice(0, 1)[0]);
stream = selectStream();
} while (stream === original && stream.length && stream[0].offset === processed);
nodeStack.reverse().forEach(open);
} else {
if (stream[0].event === 'start') {
nodeStack.push(stream[0].node);
} else {
nodeStack.pop();
}
render(stream.splice(0, 1)[0]);
}
}
return result + escape(value.substr(processed));
}
/* Initialization */
function compileLanguage(language) {
function reStr(re) {
return (re && re.source) || re;
}
function langRe(value, global) {
return new RegExp(
reStr(value),
'm' + (language.case_insensitive ? 'i' : '') + (global ? 'g' : '')
);
}
function compileMode(mode, parent) {
if (mode.compiled)
return;
mode.compiled = true;
mode.keywords = mode.keywords || mode.beginKeywords;
if (mode.keywords) {
var compiled_keywords = {};
var flatten = function(className, str) {
if (language.case_insensitive) {
str = str.toLowerCase();
}
str.split(' ').forEach(function(kw) {
var pair = kw.split('|');
compiled_keywords[pair[0]] = [className, pair[1] ? Number(pair[1]) : 1];
});
};
if (typeof mode.keywords === 'string') { // string
flatten('keyword', mode.keywords);
} else {
objectKeys(mode.keywords).forEach(function (className) {
flatten(className, mode.keywords[className]);
});
}
mode.keywords = compiled_keywords;
}
mode.lexemesRe = langRe(mode.lexemes || /\w+/, true);
if (parent) {
if (mode.beginKeywords) {
mode.begin = '\\b(' + mode.beginKeywords.split(' ').join('|') + ')\\b';
}
if (!mode.begin)
mode.begin = /\B|\b/;
mode.beginRe = langRe(mode.begin);
if (!mode.end && !mode.endsWithParent)
mode.end = /\B|\b/;
if (mode.end)
mode.endRe = langRe(mode.end);
mode.terminator_end = reStr(mode.end) || '';
if (mode.endsWithParent && parent.terminator_end)
mode.terminator_end += (mode.end ? '|' : '') + parent.terminator_end;
}
if (mode.illegal)
mode.illegalRe = langRe(mode.illegal);
if (mode.relevance == null)
mode.relevance = 1;
if (!mode.contains) {
mode.contains = [];
}
var expanded_contains = [];
mode.contains.forEach(function(c) {
if (c.variants) {
c.variants.forEach(function(v) {expanded_contains.push(inherit(c, v));});
} else {
expanded_contains.push(c === 'self' ? mode : c);
}
});
mode.contains = expanded_contains;
mode.contains.forEach(function(c) {compileMode(c, mode);});
if (mode.starts) {
compileMode(mode.starts, parent);
}
var terminators =
mode.contains.map(function(c) {
return c.beginKeywords ? '\\.?(' + c.begin + ')\\.?' : c.begin;
})
.concat([mode.terminator_end, mode.illegal])
.map(reStr)
.filter(Boolean);
mode.terminators = terminators.length ? langRe(terminators.join('|'), true) : {exec: function(/*s*/) {return null;}};
}
compileMode(language);
}
/*
Core highlighting function. Accepts a language name, or an alias, and a
string with the code to highlight. Returns an object with the following
properties:
- relevance (int)
- value (an HTML string with highlighting markup)
*/
function highlight(name, value, ignore_illegals, continuation) {
function subMode(lexeme, mode) {
var i, length;
for (i = 0, length = mode.contains.length; i < length; i++) {
if (testRe(mode.contains[i].beginRe, lexeme)) {
return mode.contains[i];
}
}
}
function endOfMode(mode, lexeme) {
if (testRe(mode.endRe, lexeme)) {
while (mode.endsParent && mode.parent) {
mode = mode.parent;
}
return mode;
}
if (mode.endsWithParent) {
return endOfMode(mode.parent, lexeme);
}
}
function isIllegal(lexeme, mode) {
return !ignore_illegals && testRe(mode.illegalRe, lexeme);
}
function keywordMatch(mode, match) {
var match_str = language.case_insensitive ? match[0].toLowerCase() : match[0];
return mode.keywords.hasOwnProperty(match_str) && mode.keywords[match_str];
}
function buildSpan(classname, insideSpan, leaveOpen, noPrefix) {
var classPrefix = noPrefix ? '' : options.classPrefix,
openSpan = '<span class="' + classPrefix,
closeSpan = leaveOpen ? '' : spanEndTag
openSpan += classname + '">';
return openSpan + insideSpan + closeSpan;
}
function processKeywords() {
var keyword_match, last_index, match, result;
if (!top.keywords)
return escape(mode_buffer);
result = '';
last_index = 0;
top.lexemesRe.lastIndex = 0;
match = top.lexemesRe.exec(mode_buffer);
while (match) {
result += escape(mode_buffer.substr(last_index, match.index - last_index));
keyword_match = keywordMatch(top, match);
if (keyword_match) {
relevance += keyword_match[1];
result += buildSpan(keyword_match[0], escape(match[0]));
} else {
result += escape(match[0]);
}
last_index = top.lexemesRe.lastIndex;
match = top.lexemesRe.exec(mode_buffer);
}
return result + escape(mode_buffer.substr(last_index));
}
function processSubLanguage() {
var explicit = typeof top.subLanguage === 'string';
if (explicit && !languages[top.subLanguage]) {
return escape(mode_buffer);
}
var result = explicit ?
highlight(top.subLanguage, mode_buffer, true, continuations[top.subLanguage]) :
highlightAuto(mode_buffer, top.subLanguage.length ? top.subLanguage : undefined);
// Counting embedded language score towards the host language may be disabled
// with zeroing the containing mode relevance. Usecase in point is Markdown that
// allows XML everywhere and makes every XML snippet to have a much larger Markdown
// score.
if (top.relevance > 0) {
relevance += result.relevance;
}
if (explicit) {
continuations[top.subLanguage] = result.top;
}
return buildSpan(result.language, result.value, false, true);
}
function processBuffer() {
result += (top.subLanguage != null ? processSubLanguage() : processKeywords());
mode_buffer = '';
}
function startNewMode(mode) {
result += mode.className? buildSpan(mode.className, '', true): '';
top = Object.create(mode, {parent: {value: top}});
}
function processLexeme(buffer, lexeme) {
mode_buffer += buffer;
if (lexeme == null) {
processBuffer();
return 0;
}
var new_mode = subMode(lexeme, top);
if (new_mode) {
if (new_mode.skip) {
mode_buffer += lexeme;
} else {
if (new_mode.excludeBegin) {
mode_buffer += lexeme;
}
processBuffer();
if (!new_mode.returnBegin && !new_mode.excludeBegin) {
mode_buffer = lexeme;
}
}
startNewMode(new_mode, lexeme);
return new_mode.returnBegin ? 0 : lexeme.length;
}
var end_mode = endOfMode(top, lexeme);
if (end_mode) {
var origin = top;
if (origin.skip) {
mode_buffer += lexeme;
} else {
if (!(origin.returnEnd || origin.excludeEnd)) {
mode_buffer += lexeme;
}
processBuffer();
if (origin.excludeEnd) {
mode_buffer = lexeme;
}
}
do {
if (top.className) {
result += spanEndTag;
}
if (!top.skip) {
relevance += top.relevance;
}
top = top.parent;
} while (top !== end_mode.parent);
if (end_mode.starts) {
startNewMode(end_mode.starts, '');
}
return origin.returnEnd ? 0 : lexeme.length;
}
if (isIllegal(lexeme, top))
throw new Error('Illegal lexeme "' + lexeme + '" for mode "' + (top.className || '<unnamed>') + '"');
/*
Parser should not reach this point as all types of lexemes should be caught
earlier, but if it does due to some bug make sure it advances at least one
character forward to prevent infinite looping.
*/
mode_buffer += lexeme;
return lexeme.length || 1;
}
var language = getLanguage(name);
if (!language) {
throw new Error('Unknown language: "' + name + '"');
}
compileLanguage(language);
var top = continuation || language;
var continuations = {}; // keep continuations for sub-languages
var result = '', current;
for(current = top; current !== language; current = current.parent) {
if (current.className) {
result = buildSpan(current.className, '', true) + result;
}
}
var mode_buffer = '';
var relevance = 0;
try {
var match, count, index = 0;
while (true) {
top.terminators.lastIndex = index;
match = top.terminators.exec(value);
if (!match)
break;
count = processLexeme(value.substr(index, match.index - index), match[0]);
index = match.index + count;
}
processLexeme(value.substr(index));
for(current = top; current.parent; current = current.parent) { // close dangling modes
if (current.className) {
result += spanEndTag;
}
}
return {
relevance: relevance,
value: result,
language: name,
top: top
};
} catch (e) {
if (e.message && e.message.indexOf('Illegal') !== -1) {
return {
relevance: 0,
value: escape(value)
};
} else {
throw e;
}
}
}
/*
Highlighting with language detection. Accepts a string with the code to
highlight. Returns an object with the following properties:
- language (detected language)
- relevance (int)
- value (an HTML string with highlighting markup)
- second_best (object with the same structure for second-best heuristically
detected language, may be absent)
*/
function highlightAuto(text, languageSubset) {
languageSubset = languageSubset || options.languages || objectKeys(languages);
var result = {
relevance: 0,
value: escape(text)
};
var second_best = result;
languageSubset.filter(getLanguage).forEach(function(name) {
var current = highlight(name, text, false);
current.language = name;
if (current.relevance > second_best.relevance) {
second_best = current;
}
if (current.relevance > result.relevance) {
second_best = result;
result = current;
}
});
if (second_best.language) {
result.second_best = second_best;
}
return result;
}
/*
Post-processing of the highlighted markup:
- replace TABs with something more useful
- replace real line-breaks with '<br>' for non-pre containers
*/
function fixMarkup(value) {
return !(options.tabReplace || options.useBR)
? value
: value.replace(fixMarkupRe, function(match, p1) {
if (options.useBR && match === '\n') {
return '<br>';
} else if (options.tabReplace) {
return p1.replace(/\t/g, options.tabReplace);
}
});
}
function buildClassName(prevClassName, currentLang, resultLang) {
var language = currentLang ? aliases[currentLang] : resultLang,
result = [prevClassName.trim()];
if (!prevClassName.match(/\bhljs\b/)) {
result.push('hljs');
}
if (prevClassName.indexOf(language) === -1) {
result.push(language);
}
return result.join(' ').trim();
}
/*
Applies highlighting to a DOM node containing code. Accepts a DOM node and
two optional parameters for fixMarkup.
*/
function highlightBlock(block) {
var node, originalStream, result, resultNode, text
/* custom */, resultPre, linesPre, lines /* end */;
var language = blockLanguage(block);
if (isNotHighlighted(language))
return;
if (options.useBR) {
node = document.createElementNS('http://www.w3.org/1999/xhtml', 'div');
node.innerHTML = block.innerHTML.replace(/\n/g, '').replace(/<br[ \/]*>/g, '\n');
} else {
node = block;
}
text = node.textContent;
result = language ? highlight(language, text, true) : highlightAuto(text);
originalStream = nodeStream(node);
if (originalStream.length) {
resultNode = document.createElementNS('http://www.w3.org/1999/xhtml', 'div');
resultNode.innerHTML = result.value;
result.value = mergeStreams(originalStream, nodeStream(resultNode), text);
}
/* custom */
if (options.lineNodes) {
resultPre = document.createElement('pre');
resultPre.innerHTML = result.value;
linesPre = document.createElement('pre');
lines = escape(text.trimRight()).replace(/^.*?(\n|$)/gm, '<span class="line">$&</span>');
linesPre.innerHTML = lines;
result.value = mergeStreams(nodeStream(linesPre), nodeStream(resultPre), text);
}
/* end */
result.value = fixMarkup(result.value);
block.innerHTML = result.value;
block.className = buildClassName(block.className, language, result.language);
block.result = {
language: result.language,
re: result.relevance
};
if (result.second_best) {
block.second_best = {
language: result.second_best.language,
re: result.second_best.relevance
};
}
}
/*
Updates highlight.js global options with values passed in the form of an object.
*/
function configure(user_options) {
options = inherit(options, user_options);
}
/*
Applies highlighting to all <pre><code>..</code></pre> blocks on a page.
*/
function initHighlighting() {
if (initHighlighting.called)
return;
initHighlighting.called = true;
var blocks = document.querySelectorAll('pre code');
ArrayProto.forEach.call(blocks, highlightBlock);
}
/*
Attaches highlighting to the page load event.
*/
function initHighlightingOnLoad() {
addEventListener('DOMContentLoaded', initHighlighting, false);
addEventListener('load', initHighlighting, false);
}
function registerLanguage(name, language) {
var lang = languages[name] = language(hljs);
if (lang.aliases) {
lang.aliases.forEach(function(alias) {aliases[alias] = name;});
}
}
function listLanguages() {
return objectKeys(languages);
}
function getLanguage(name) {
name = (name || '').toLowerCase();
return languages[name] || languages[aliases[name]];
}
/* Interface definition */
hljs.highlight = highlight;
hljs.highlightAuto = highlightAuto;
hljs.fixMarkup = fixMarkup;
hljs.highlightBlock = highlightBlock;
hljs.configure = configure;
hljs.initHighlighting = initHighlighting;
hljs.initHighlightingOnLoad = initHighlightingOnLoad;
hljs.registerLanguage = registerLanguage;
hljs.listLanguages = listLanguages;
hljs.getLanguage = getLanguage;
hljs.inherit = inherit;
// Common regexps
hljs.IDENT_RE = '[a-zA-Z]\\w*';
hljs.UNDERSCORE_IDENT_RE = '[a-zA-Z_]\\w*';
hljs.NUMBER_RE = '\\b\\d+(\\.\\d+)?';
hljs.C_NUMBER_RE = '(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)'; // 0x..., 0..., decimal, float
hljs.BINARY_NUMBER_RE = '\\b(0b[01]+)'; // 0b...
hljs.RE_STARTERS_RE = '!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~';
// Common modes
hljs.BACKSLASH_ESCAPE = {
begin: '\\\\[\\s\\S]', relevance: 0
};
hljs.APOS_STRING_MODE = {
className: 'string',
begin: '\'', end: '\'',
illegal: '\\n',
contains: [hljs.BACKSLASH_ESCAPE]
};
hljs.QUOTE_STRING_MODE = {
className: 'string',
begin: '"', end: '"',
illegal: '\\n',
contains: [hljs.BACKSLASH_ESCAPE]
};
hljs.PHRASAL_WORDS_MODE = {
begin: /\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|like)\b/
};
hljs.COMMENT = function (begin, end, inherits) {
var mode = hljs.inherit(
{
className: 'comment',
begin: begin, end: end,
contains: []
},
inherits || {}
);
mode.contains.push(hljs.PHRASAL_WORDS_MODE);
mode.contains.push({
className: 'doctag',
begin: '(?:TODO|FIXME|NOTE|BUG|XXX):',
relevance: 0
});
return mode;
};
hljs.C_LINE_COMMENT_MODE = hljs.COMMENT('//', '$');
hljs.C_BLOCK_COMMENT_MODE = hljs.COMMENT('/\\*', '\\*/');
hljs.HASH_COMMENT_MODE = hljs.COMMENT('#', '$');
hljs.NUMBER_MODE = {
className: 'number',
begin: hljs.NUMBER_RE,
relevance: 0
};
hljs.C_NUMBER_MODE = {
className: 'number',
begin: hljs.C_NUMBER_RE,
relevance: 0
};
hljs.BINARY_NUMBER_MODE = {
className: 'number',
begin: hljs.BINARY_NUMBER_RE,
relevance: 0
};
hljs.CSS_NUMBER_MODE = {
className: 'number',
begin: hljs.NUMBER_RE + '(' +
'%|em|ex|ch|rem' +
'|vw|vh|vmin|vmax' +
'|cm|mm|in|pt|pc|px' +
'|deg|grad|rad|turn' +
'|s|ms' +
'|Hz|kHz' +
'|dpi|dpcm|dppx' +
')?',
relevance: 0
};
hljs.REGEXP_MODE = {
className: 'regexp',
begin: /\//, end: /\/[gimuy]*/,
illegal: /\n/,
contains: [
hljs.BACKSLASH_ESCAPE,
{
begin: /\[/, end: /\]/,
relevance: 0,
contains: [hljs.BACKSLASH_ESCAPE]
}
]
};
hljs.TITLE_MODE = {
className: 'title',
begin: hljs.IDENT_RE,
relevance: 0
};
hljs.UNDERSCORE_TITLE_MODE = {
className: 'title',
begin: hljs.UNDERSCORE_IDENT_RE,
relevance: 0
};
hljs.METHOD_GUARD = {
// excludes method names from keyword processing
begin: '\\.\\s*' + hljs.UNDERSCORE_IDENT_RE,
relevance: 0
};
/* languages */
/*
Language: SQL
Contributors: Nikolay Lisienko <info@neor.ru>, Heiko August <post@auge8472.de>, Travis Odom <travis.a.odom@gmail.com>, Vadimtro <vadimtro@yahoo.com>, Benjamin Auder <benjamin.auder@gmail.com>
Category: common
*/
hljs.registerLanguage('sql', function(hljs) {
var COMMENT_MODE = hljs.COMMENT('--', '$');
return {
case_insensitive: true,
illegal: /[<>{}*#]/,
contains: [
{
beginKeywords:
'begin end start commit rollback savepoint lock alter create drop rename call ' +
'delete do handler insert load replace select truncate update set show pragma grant ' +
'merge describe use explain help declare prepare execute deallocate release ' +
'unlock purge reset change stop analyze cache flush optimize repair kill ' +
'install uninstall checksum restore check backup revoke comment',
end: /;/, endsWithParent: true,
lexemes: /[\w\.]+/,
keywords: {
keyword:
'abort abs absolute acc acce accep accept access accessed accessible account acos action activate add ' +
'addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias ' +
'allocate allow alter always analyze ancillary and any anydata anydataset anyschema anytype apply ' +
'archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan ' +
'atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid ' +
'authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile ' +
'before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float ' +
'binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound ' +
'buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel ' +
'capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base ' +
'char_length character_length characters characterset charindex charset charsetform charsetid check ' +
'checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close ' +
'cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation ' +
'collect colu colum column column_value columns columns_updated comment commit compact compatibility ' +
'compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn ' +
'connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection ' +
'consider consistent constant constraint constraints constructor container content contents context ' +
'contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost ' +
'count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation ' +
'critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user ' +
'cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add ' +
'date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts ' +
'day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate ' +
'declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults ' +
'deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank ' +
'depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor ' +
'deterministic diagnostics difference dimension direct_load directory disable disable_all ' +
'disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div ' +
'do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable ' +
'editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt ' +
'end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors ' +
'escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding ' +
'execu execut execute exempt exists exit exp expire explain export export_set extended extent external ' +
'external_1 external_2 externally extract failed failed_login_attempts failover failure far fast ' +
'feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final ' +
'finish first first_value fixed flash_cache flashback floor flush following follows for forall force ' +
'form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ' +
'ftp full function general generated get get_format get_lock getdate getutcdate global global_name ' +
'globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups ' +
'gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex ' +
'hierarchy high high_priority hosts hour http id ident_current ident_incr ident_seed identified ' +
'identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment ' +
'index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile ' +
'initial initialized initially initrans inmemory inner innodb input insert install instance instantiable ' +
'instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat ' +
'is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists ' +
'keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lax lcase ' +
'lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit ' +
'lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate ' +
'locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call ' +
'logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime ' +
'managed management manual map mapping mask master master_pos_wait match matched materialized max ' +
'maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans ' +
'md5 measures median medium member memcompress memory merge microsecond mid migration min minextents ' +
'minimum mining minus minute minvalue missing mod mode model modification modify module monitoring month ' +
'months mount move movement multiset mutex name name_const names nan national native natural nav nchar ' +
'nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile ' +
'nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile ' +
'nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder ' +
'nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck ' +
'noswitch not nothing notice notrim novalidate now nowait nth_value nullif nulls num numb numbe ' +
'nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ' +
'ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old ' +
'on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date ' +
'oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary ' +
'out outer outfile outline output over overflow overriding package pad parallel parallel_enable ' +
'parameters parent parse partial partition partitions pascal passing password password_grace_time ' +
'password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex ' +
'pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc ' +
'performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin ' +
'policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction ' +
'prediction_cost prediction_details prediction_probability prediction_set prepare present preserve ' +
'prior priority private private_sga privileges procedural procedure procedure_analyze processlist ' +
'profiles project prompt protection public publishingservername purge quarter query quick quiesce quota ' +
'quotename radians raise rand range rank raw read reads readsize rebuild record records ' +
'recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh ' +
'regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy ' +
'reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename ' +
'repair repeat replace replicate replication required reset resetlogs resize resource respect restore ' +
'restricted result result_cache resumable resume retention return returning returns reuse reverse revoke ' +
'right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows ' +
'rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll ' +
'sdo_georaster sdo_topo_geometry search sec_to_time second section securefile security seed segment select ' +
'self sequence sequential serializable server servererror session session_user sessions_per_user set ' +
'sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor ' +
'si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin ' +
'size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex ' +
'source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows ' +
'sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone ' +
'standby start starting startup statement static statistics stats_binomial_test stats_crosstab ' +
'stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep ' +
'stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev ' +
'stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate ' +
'subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum ' +
'suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate ' +
'sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tan tdo ' +
'template temporary terminated tertiary_weights test than then thread through tier ties time time_format ' +
'time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr ' +
'timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking ' +
'transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate ' +
'try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress ' +
'under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unpivot ' +
'unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert ' +
'url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date ' +
'utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var ' +
'var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray ' +
'verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear ' +
'wellformed when whene whenev wheneve whenever where while whitespace with within without work wrapped ' +
'xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces ' +
'xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek',
literal:
'true false null',
built_in:
'array bigint binary bit blob boolean char character date dec decimal float int int8 integer interval number ' +
'numeric real record serial serial8 smallint text varchar varying void'
},
contains: [
{
className: 'string',
begin: '\'', end: '\'',
contains: [hljs.BACKSLASH_ESCAPE, {begin: '\'\''}]
},
{
className: 'string',
begin: '"', end: '"',
contains: [hljs.BACKSLASH_ESCAPE, {begin: '""'}]
},
{
className: 'string',
begin: '`', end: '`',
contains: [hljs.BACKSLASH_ESCAPE]
},
hljs.C_NUMBER_MODE,
hljs.C_BLOCK_COMMENT_MODE,
COMMENT_MODE
]
},
hljs.C_BLOCK_COMMENT_MODE,
COMMENT_MODE
]
};
});
/*
Language: Python
Category: common
*/
hljs.registerLanguage('python', function(hljs) {
var PROMPT = {
className: 'meta', begin: /^(>>>|\.\.\.) /
};
var STRING = {
className: 'string',
contains: [hljs.BACKSLASH_ESCAPE],
variants: [
{
begin: /(u|b)?r?'''/, end: /'''/,
contains: [PROMPT],
relevance: 10
},
{
begin: /(u|b)?r?"""/, end: /"""/,
contains: [PROMPT],
relevance: 10
},
{
begin: /(u|r|ur)'/, end: /'/,
relevance: 10
},
{
begin: /(u|r|ur)"/, end: /"/,
relevance: 10
},
{
begin: /(b|br)'/, end: /'/
},
{
begin: /(b|br)"/, end: /"/
},
hljs.APOS_STRING_MODE,
hljs.QUOTE_STRING_MODE
]
};
var NUMBER = {
className: 'number', relevance: 0,
variants: [
{begin: hljs.BINARY_NUMBER_RE + '[lLjJ]?'},
{begin: '\\b(0o[0-7]+)[lLjJ]?'},
{begin: hljs.C_NUMBER_RE + '[lLjJ]?'}
]
};
var PARAMS = {
className: 'params',
begin: /\(/, end: /\)/,
contains: ['self', PROMPT, NUMBER, STRING]
};
return {
aliases: ['py', 'gyp'],
keywords: {
keyword:
'and elif is global as in if from raise for except finally print import pass return ' +
'exec else break not with class assert yield try while continue del or def lambda ' +
'async await nonlocal|10 None True False',
built_in:
'Ellipsis NotImplemented'
},
illegal: /(<\/|->|\?)/,
contains: [
PROMPT,
NUMBER,
STRING,
hljs.HASH_COMMENT_MODE,
{
variants: [
{className: 'function', beginKeywords: 'def', relevance: 10},
{className: 'class', beginKeywords: 'class'}
],
end: /:/,
illegal: /[${=;\n,]/,
contains: [
hljs.UNDERSCORE_TITLE_MODE,
PARAMS,
{
begin: /->/, endsWithParent: true,
keywords: 'None'
}
]
},
{
className: 'meta',
begin: /^[\t ]*@/, end: /$/
},
{
begin: /\b(print|exec)\(/ // don’t highlight keywords-turned-functions in Python 3
}
]
};
});
/*
Language: JSON
Author: Ivan Sagalaev <maniac@softwaremaniacs.org>
Category: common, protocols
*/
hljs.registerLanguage('json', function(hljs) {
var LITERALS = {literal: 'true false null'};
var TYPES = [
hljs.QUOTE_STRING_MODE,
hljs.C_NUMBER_MODE
];
var VALUE_CONTAINER = {
end: ',', endsWithParent: true, excludeEnd: true,
contains: TYPES,
keywords: LITERALS
};
var OBJECT = {
begin: '{', end: '}',
contains: [
{
className: 'attr',
begin: /"/, end: /"/,
contains: [hljs.BACKSLASH_ESCAPE],
illegal: '\\n',
},
hljs.inherit(VALUE_CONTAINER, {begin: /:/})
],
illegal: '\\S'
};
var ARRAY = {
begin: '\\[', end: '\\]',
contains: [hljs.inherit(VALUE_CONTAINER)], // inherit is a workaround for a bug that makes shared modes with endsWithParent compile only the ending of one of the parents
illegal: '\\S'
};
TYPES.splice(TYPES.length, 0, OBJECT, ARRAY);
return {
contains: TYPES,
keywords: LITERALS,
illegal: '\\S'
};
});
/*
Language: JavaScript
Category: common, scripting
*/
hljs.registerLanguage('javascript', function(hljs) {
return {
aliases: ['js', 'jsx'],
keywords: {
keyword:
'in of if for while finally var new function do return void else break catch ' +
'instanceof with throw case default try this switch continue typeof delete ' +
'let yield const export super debugger as async await static ' +
// ECMAScript 6 modules import
'import from as'
,
literal:
'true false null undefined NaN Infinity',
built_in:
'eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent ' +
'encodeURI encodeURIComponent escape unescape Object Function Boolean Error ' +
'EvalError InternalError RangeError ReferenceError StopIteration SyntaxError ' +
'TypeError URIError Number Math Date String RegExp Array Float32Array ' +
'Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array ' +
'Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require ' +
'module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect ' +
'Promise'
},
contains: [
{
className: 'meta',
relevance: 10,
begin: /^\s*['"]use (strict|asm)['"]/
},
{
className: 'meta',
begin: /^#!/, end: /$/
},
hljs.APOS_STRING_MODE,
hljs.QUOTE_STRING_MODE,
{ // template string
className: 'string',
begin: '`', end: '`',
contains: [
hljs.BACKSLASH_ESCAPE,
{
className: 'subst',
begin: '\\$\\{', end: '\\}'
}
]
},
hljs.C_LINE_COMMENT_MODE,
hljs.C_BLOCK_COMMENT_MODE,
{
className: 'number',
variants: [
{ begin: '\\b(0[bB][01]+)' },
{ begin: '\\b(0[oO][0-7]+)' },
{ begin: hljs.C_NUMBER_RE }
],
relevance: 0
},
{ // "value" container
begin: '(' + hljs.RE_STARTERS_RE + '|\\b(case|return|throw)\\b)\\s*',
keywords: 'return throw case',
contains: [
hljs.C_LINE_COMMENT_MODE,
hljs.C_BLOCK_COMMENT_MODE,
hljs.REGEXP_MODE,
{ // E4X / JSX
begin: /</, end: /(\/\w+|\w+\/)>/,
subLanguage: 'xml',
contains: [
{begin: /<\w+\s*\/>/, skip: true},
{begin: /<\w+/, end: /(\/\w+|\w+\/)>/, skip: true, contains: ['self']}
]
}
],
relevance: 0
},
{
className: 'function',
beginKeywords: 'function', end: /\{/, excludeEnd: true,
contains: [
hljs.inherit(hljs.TITLE_MODE, {begin: /[A-Za-z$_][0-9A-Za-z$_]*/}),
{
className: 'params',
begin: /\(/, end: /\)/,
excludeBegin: true,
excludeEnd: true,
contains: [
hljs.C_LINE_COMMENT_MODE,
hljs.C_BLOCK_COMMENT_MODE
]
}
],
illegal: /\[|%/
},
{
begin: /\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`
},
hljs.METHOD_GUARD,
{ // ES6 class
className: 'class',
beginKeywords: 'class', end: /[{;=]/, excludeEnd: true,
illegal: /[:"\[\]]/,
contains: [
{beginKeywords: 'extends'},
hljs.UNDERSCORE_TITLE_MODE
]
},
{
beginKeywords: 'constructor', end: /\{/, excludeEnd: true
}
],
illegal: /#(?!!)/
};
});
/*
Language: CSS
Category: common, css
*/
hljs.registerLanguage('css', function(hljs) {
var IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';
var RULE = {
begin: /[A-Z\_\.\-]+\s*:/, returnBegin: true, end: ';', endsWithParent: true,
contains: [
{
className: 'attribute',
begin: /\S/, end: ':', excludeEnd: true,
starts: {
endsWithParent: true, excludeEnd: true,
contains: [
{
begin: /[\w-]+\(/, returnBegin: true,
contains: [
{
className: 'built_in',
begin: /[\w-]+/
},
{
begin: /\(/, end: /\)/,
contains: [
hljs.APOS_STRING_MODE,
hljs.QUOTE_STRING_MODE
]
}
]
},
hljs.CSS_NUMBER_MODE,
hljs.QUOTE_STRING_MODE,
hljs.APOS_STRING_MODE,
hljs.C_BLOCK_COMMENT_MODE,
{
className: 'number', begin: '#[0-9A-Fa-f]+'
},
{
className: 'meta', begin: '!important'
}
]
}
}
]
};
return {
case_insensitive: true,
illegal: /[=\/|'\$]/,
contains: [
hljs.C_BLOCK_COMMENT_MODE,
{
className: 'selector-id', begin: /#[A-Za-z0-9_-]+/
},
{
className: 'selector-class', begin: /\.[A-Za-z0-9_-]+/
},
{
className: 'selector-attr',
begin: /\[/, end: /\]/,
illegal: '$'
},
{
className: 'selector-pseudo',
begin: /:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/
},
{
begin: '@(font-face|page)',
lexemes: '[a-z-]+',
keywords: 'font-face page'
},
{
begin: '@', end: '[{;]', // at_rule eating first "{" is a good thing
// because it doesn’t let it to be parsed as
// a rule set but instead drops parser into
// the default mode which is how it should be.
illegal: /:/, // break on Less variables @var: ...
contains: [
{
className: 'keyword',
begin: /\w+/
},
{
begin: /\s/, endsWithParent: true, excludeEnd: true,
relevance: 0,
contains: [
hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE,
hljs.CSS_NUMBER_MODE
]
}
]
},
{
className: 'selector-tag', begin: IDENT_RE,
relevance: 0
},
{
begin: '{', end: '}',
illegal: /\S/,
contains: [
hljs.C_BLOCK_COMMENT_MODE,
RULE,
]
}
]
};
});
/*
Language: HTML, XML
Category: common
*/
hljs.registerLanguage('xml', function(hljs) {
var XML_IDENT_RE = '[A-Za-z0-9\\._:-]+';
var TAG_INTERNALS = {
endsWithParent: true,
illegal: /</,
relevance: 0,
contains: [
{
className: 'attr',
begin: XML_IDENT_RE,
relevance: 0
},
{
begin: /=\s*/,
relevance: 0,
contains: [
{
className: 'string',
endsParent: true,
variants: [
{begin: /"/, end: /"/},
{begin: /'/, end: /'/},
{begin: /[^\s"'=<>`]+/}
]
}
]
}
]
};
return {
aliases: ['html', 'xhtml', 'rss', 'atom', 'xjb', 'xsd', 'xsl', 'plist'],
case_insensitive: true,
contains: [
{
className: 'meta',
begin: '<!DOCTYPE', end: '>',
relevance: 10,
contains: [{begin: '\\[', end: '\\]'}]
},
hljs.COMMENT(
'<!--',
'-->',
{
relevance: 10
}
),
{
begin: '<\\!\\[CDATA\\[', end: '\\]\\]>',
relevance: 10
},
{
begin: /<\?(php)?/, end: /\?>/,
subLanguage: 'php',
contains: [{begin: '/\\*', end: '\\*/', skip: true}]
},
{
className: 'tag',
/*
The lookahead pattern (?=...) ensures that 'begin' only matches
'<style' as a single word, followed by a whitespace or an
ending braket. The '$' is needed for the lexeme to be recognized
by hljs.subMode() that tests lexemes outside the stream.
*/
begin: '<style(?=\\s|>|$)', end: '>',
keywords: {name: 'style'},
contains: [TAG_INTERNALS],
starts: {
end: '</style>', returnEnd: true,
subLanguage: ['css', 'xml']
}
},
{
className: 'tag',
// See the comment in the <style tag about the lookahead pattern
begin: '<script(?=\\s|>|$)', end: '>',
keywords: {name: 'script'},
contains: [TAG_INTERNALS],
starts: {
end: '\<\/script\>', returnEnd: true,
subLanguage: ['actionscript', 'javascript', 'handlebars', 'xml']
}
},
{
className: 'meta',
variants: [
{begin: /<\?xml/, end: /\?>/, relevance: 10},
{begin: /<\?\w+/, end: /\?>/}
]
},
{
className: 'tag',
begin: '</?', end: '/?>',
contains: [
{
className: 'name', begin: /[^\/><\s]+/, relevance: 0
},
TAG_INTERNALS
]
}
]
};
});
return hljs;
}));
hljs.initHighlightingOnLoad();
\ No newline at end of file
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Cacheable__manager_id</string> </key>
<value> <string>http_cache</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>ci_web.js</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/javascript</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ERP5 Form" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary/>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>action</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>edit_order</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>encoding</string> </key>
<value> <string>UTF-8</string> </value>
</item>
<item>
<key> <string>enctype</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>group_list</string> </key>
<value>
<list>
<string>left</string>
<string>right</string>
<string>center</string>
<string>bottom</string>
<string>try</string>
<string>documentation</string>
<string>breadcrumb</string>
<string>header_title</string>
<string>teaser</string>
<string>discussions</string>
<string>related_documents</string>
<string>site_header</string>
<string>site_footer</string>
<string>flex_slider_control</string>
<string>hidden</string>
<string>application</string>
</list>
</value>
</item>
<item>
<key> <string>groups</string> </key>
<value>
<dictionary>
<item>
<key> <string>application</string> </key>
<value>
<list>
<string>special_header</string>
</list>
</value>
</item>
<item>
<key> <string>bottom</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>breadcrumb</string> </key>
<value>
<list>
<string>breadcrumb</string>
</list>
</value>
</item>
<item>
<key> <string>center</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>discussions</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>documentation</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>flex_slider_control</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>header_title</string> </key>
<value>
<list>
<string>header_title</string>
</list>
</value>
</item>
<item>
<key> <string>hidden</string> </key>
<value>
<list>
<string>special_content</string>
</list>
</value>
</item>
<item>
<key> <string>left</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>related_documents</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>right</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>site_footer</string> </key>
<value>
<list>
<string>site_footer</string>
</list>
</value>
</item>
<item>
<key> <string>site_header</string> </key>
<value>
<list>
<string>site_header</string>
</list>
</value>
</item>
<item>
<key> <string>teaser</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>try</string> </key>
<value>
<list/>
</value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>erp5_ci_web_container_layout</string> </value>
</item>
<item>
<key> <string>method</string> </key>
<value> <string>POST</string> </value>
</item>
<item>
<key> <string>name</string> </key>
<value> <string>container_layout</string> </value>
</item>
<item>
<key> <string>pt</string> </key>
<value> <string>erp5_ci_web_template</string> </value>
</item>
<item>
<key> <string>row_length</string> </key>
<value> <int>4</int> </value>
</item>
<item>
<key> <string>stored_encoding</string> </key>
<value> <string>UTF-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode_mode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>update_action</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>update_action_title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="EditorField" module="Products.ERP5Form.EditorField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>breadcrumb</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
<item>
<key> <string>line_too_long</string> </key>
<value> <string>A line was too long.</string> </value>
</item>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
<item>
<key> <string>too_long</string> </key>
<value> <string>You entered too many characters.</string> </value>
</item>
<item>
<key> <string>too_many_lines</string> </key>
<value> <string>You entered too many lines.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>text_editor</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>text_editor</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string>hidden_label</string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <int>5</int> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>text_editor</string> </key>
<value> <string>text_area</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>breadcrumb</string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <int>40</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="TALESMethod" module="Products.Formulator.TALESField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>python: here!=here.getWebSiteValue()</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="EditorField" module="Products.ERP5Form.EditorField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>header_title</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
<item>
<key> <string>line_too_long</string> </key>
<value> <string>A line was too long.</string> </value>
</item>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
<item>
<key> <string>too_long</string> </key>
<value> <string>You entered too many characters.</string> </value>
</item>
<item>
<key> <string>too_many_lines</string> </key>
<value> <string>You entered too many lines.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>text_editor</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>text_editor</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string>hidden_label</string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <int>5</int> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>text_editor</string> </key>
<value> <string>text_area</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>header_title</string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <int>40</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="TALESMethod" module="Products.Formulator.TALESField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>python: here!=here.getWebSiteValue()</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="EditorField" module="Products.ERP5Form.EditorField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>site_footer</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
<item>
<key> <string>line_too_long</string> </key>
<value> <string>A line was too long.</string> </value>
</item>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
<item>
<key> <string>too_long</string> </key>
<value> <string>You entered too many characters.</string> </value>
</item>
<item>
<key> <string>too_many_lines</string> </key>
<value> <string>You entered too many lines.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>text_editor</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>text_editor</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string>hidden_label</string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <int>5</int> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>text_editor</string> </key>
<value> <string>text_area</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>site_footer</string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <int>40</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="EditorField" module="Products.ERP5Form.EditorField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>site_header</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
<item>
<key> <string>line_too_long</string> </key>
<value> <string>A line was too long.</string> </value>
</item>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
<item>
<key> <string>too_long</string> </key>
<value> <string>You entered too many characters.</string> </value>
</item>
<item>
<key> <string>too_many_lines</string> </key>
<value> <string>You entered too many lines.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>text_editor</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>text_editor</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string>hidden_label</string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <int>5</int> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>text_editor</string> </key>
<value> <string>text_area</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>site_header</string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <int>40</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="EditorField" module="Products.ERP5Form.EditorField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>special_content</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
<item>
<key> <string>line_too_long</string> </key>
<value> <string>A line was too long.</string> </value>
</item>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
<item>
<key> <string>too_long</string> </key>
<value> <string>You entered too many characters.</string> </value>
</item>
<item>
<key> <string>too_many_lines</string> </key>
<value> <string>You entered too many lines.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>text_editor</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>text_editor</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string>hidden_label</string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <int>5</int> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>text_editor</string> </key>
<value> <string>text_area</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>special_content</string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <int>40</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="TALESMethod" module="Products.Formulator.TALESField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>python: here==here.getWebSiteValue()</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="EditorField" module="Products.ERP5Form.EditorField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>special_header</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
<item>
<key> <string>line_too_long</string> </key>
<value> <string>A line was too long.</string> </value>
</item>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
<item>
<key> <string>too_long</string> </key>
<value> <string>You entered too many characters.</string> </value>
</item>
<item>
<key> <string>too_many_lines</string> </key>
<value> <string>You entered too many lines.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>text_editor</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>text_editor</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string>hidden_label</string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <int>5</int> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>text_editor</string> </key>
<value> <string>text_area</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>special_header</string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <int>40</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="TALESMethod" module="Products.Formulator.TALESField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>python: not context.REQUEST.get(\'portal_status_message\', None)</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ERP5 Form" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary/>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>action</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>edit_order</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>encoding</string> </key>
<value> <string>UTF-8</string> </value>
</item>
<item>
<key> <string>enctype</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>group_list</string> </key>
<value>
<list>
<string>left</string>
<string>right</string>
<string>center</string>
<string>bottom</string>
<string>hidden</string>
<string>breadcrumb</string>
<string>header_title</string>
<string>teaser</string>
<string>related_documents</string>
<string>discussions</string>
<string>site_header</string>
<string>profile_document</string>
<string>site_footer</string>
</list>
</value>
</item>
<item>
<key> <string>groups</string> </key>
<value>
<dictionary>
<item>
<key> <string>bottom</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>breadcrumb</string> </key>
<value>
<list>
<string>breadcrumb</string>
</list>
</value>
</item>
<item>
<key> <string>center</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>discussions</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>header_title</string> </key>
<value>
<list>
<string>header_title</string>
</list>
</value>
</item>
<item>
<key> <string>hidden</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>left</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>profile_document</string> </key>
<value>
<list>
<string>document_summary</string>
</list>
</value>
</item>
<item>
<key> <string>related_documents</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>right</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>site_footer</string> </key>
<value>
<list>
<string>site_footer</string>
</list>
</value>
</item>
<item>
<key> <string>site_header</string> </key>
<value>
<list>
<string>site_header</string>
</list>
</value>
</item>
<item>
<key> <string>teaser</string> </key>
<value>
<list/>
</value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>erp5_ci_web_content_layout</string> </value>
</item>
<item>
<key> <string>method</string> </key>
<value> <string>POST</string> </value>
</item>
<item>
<key> <string>name</string> </key>
<value> <string>erp5_ci_web_content_layout</string> </value>
</item>
<item>
<key> <string>pt</string> </key>
<value> <string>erp5_ci_web_template</string> </value>
</item>
<item>
<key> <string>row_length</string> </key>
<value> <int>4</int> </value>
</item>
<item>
<key> <string>stored_encoding</string> </key>
<value> <string>UTF-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode_mode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>update_action</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>update_action_title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="EditorField" module="Products.ERP5Form.EditorField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>breadcrumb</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
<item>
<key> <string>line_too_long</string> </key>
<value> <string>A line was too long.</string> </value>
</item>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
<item>
<key> <string>too_long</string> </key>
<value> <string>You entered too many characters.</string> </value>
</item>
<item>
<key> <string>too_many_lines</string> </key>
<value> <string>You entered too many lines.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>text_editor</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>text_editor</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string>hidden_label</string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <int>5</int> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>text_editor</string> </key>
<value> <string>text_area</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>breadcrumb</string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <int>40</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="TALESMethod" module="Products.Formulator.TALESField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>python: here!=here.getWebSiteValue()</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="EditorField" module="Products.ERP5Form.EditorField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>document_summary</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
<item>
<key> <string>line_too_long</string> </key>
<value> <string>A line was too long.</string> </value>
</item>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
<item>
<key> <string>too_long</string> </key>
<value> <string>You entered too many characters.</string> </value>
</item>
<item>
<key> <string>too_many_lines</string> </key>
<value> <string>You entered too many lines.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>text_editor</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>text_editor</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string>hidden_label</string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <int>5</int> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>text_editor</string> </key>
<value> <string>text_area</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>document_summary</string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <int>40</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="TALESMethod" module="Products.Formulator.TALESField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>python: here!=here.getWebSiteValue()</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="EditorField" module="Products.ERP5Form.EditorField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>header_title</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
<item>
<key> <string>line_too_long</string> </key>
<value> <string>A line was too long.</string> </value>
</item>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
<item>
<key> <string>too_long</string> </key>
<value> <string>You entered too many characters.</string> </value>
</item>
<item>
<key> <string>too_many_lines</string> </key>
<value> <string>You entered too many lines.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>text_editor</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>text_editor</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string>hidden_label</string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <int>5</int> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>text_editor</string> </key>
<value> <string>text_area</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>header_title</string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <int>40</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="TALESMethod" module="Products.Formulator.TALESField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>python: here!=here.getWebSiteValue()</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="EditorField" module="Products.ERP5Form.EditorField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>site_footer</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
<item>
<key> <string>line_too_long</string> </key>
<value> <string>A line was too long.</string> </value>
</item>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
<item>
<key> <string>too_long</string> </key>
<value> <string>You entered too many characters.</string> </value>
</item>
<item>
<key> <string>too_many_lines</string> </key>
<value> <string>You entered too many lines.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>text_editor</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>text_editor</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string>hidden_label</string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <int>5</int> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>text_editor</string> </key>
<value> <string>text_area</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>site_footer</string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <int>40</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="EditorField" module="Products.ERP5Form.EditorField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>site_header</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
<item>
<key> <string>line_too_long</string> </key>
<value> <string>A line was too long.</string> </value>
</item>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
<item>
<key> <string>too_long</string> </key>
<value> <string>You entered too many characters.</string> </value>
</item>
<item>
<key> <string>too_many_lines</string> </key>
<value> <string>You entered too many lines.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>text_editor</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>text_editor</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string>hidden_label</string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <int>5</int> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>text_editor</string> </key>
<value> <string>text_area</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>site_header</string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <int>40</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>erp5_ci_web_template</string> </value>
</item>
<item>
<key> <string>output_encoding</string> </key>
<value> <string>utf-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <unicode></unicode> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<tal:comment replace="nothing">XXX Try to fetch aggregate dynamic? make default_web_page_template, call this so renderer can be changed</tal:comment>
<tal:block metal:define-macro="master">
<tal:block tal:define="request python: context.REQUEST;
portal_status_message python: request.get('portal_status_message', None);
layout_form_id python: request.get('layout_form_id', here.getApplicableLayout() or None);
content_form_id python: request.get('content_form_id', None);
layout_form python: layout_form_id and getattr(here, layout_form_id, None) or None;
content_form python: content_form_id and getattr(here, content_form_id, None) or None;
has_no_layout python: layout_form is None;
has_no_content_form python: content_form is None;
aggregate python: has_no_layout or layout_form.Form_getGroupList(['site_header', 'site_footer', 'header_title', 'breadcrumb', 'document_summary', 'special_header']);
aggregate python: ((aggregate is not has_no_layout) and dict(aggregate)) or {};
mode python: request.get('list_mode', request.get('dialog_mode', None), '');
mode_class python: '%s-mode-content' % (mode);
content_class python: '%s-content' % (here.getPortalType().replace(' ', '-'));
site_header_area python: aggregate.get('site_header', []);
site_footer_area python: aggregate.get('site_footer', []);
header_title_area python: aggregate.get('header_title', []);
breadcrumb_area python: aggregate.get('breadcrumb', []);
document_summary_area python: aggregate.get('document_summary', []);
special_header_area python: aggregate.get('special_header', []);
website python: context.getWebSiteValue();
root_url python: website.absolute_url();
current_url python: context.absolute_url();
default_document python: website.getDefaultDocumentValue();
default_url python: (''.join([root_url, '/', default_document.getReference()]) if default_document else root_url);
is_front_page python: root_url == current_url or current_url == default_url;">
<tal:comment replace="nothing">Actual Page Template</tal:comment>
<tal:block metal:use-macro="here/template_erp5_ci_web_style/macros/master">
<tal:block metal:fill-slot="seo">
<tal:block metal:use-macro="here/theme_macros_library/macros/multilanguage"/>
<tal:block metal:use-macro="here/theme_macros_library/macros/schemadotorg" />
<tal:block metal:use-macro="here/theme_macros_library/macros/opengraph" />
<tal:block metal:use-macro="here/theme_macros_library/macros/site_verification" />
</tal:block>
<tal:block metal:fill-slot="layout">
<tal:block metal:use-macro="here/theme_macros_library/macros/populate_request" />
<div class="header-container ci-web-page-header">
<tal:block tal:condition="python: layout_form is not None">
<tal:block tal:repeat="aggregate python: [('site_header', site_header_area)]">
<tal:block metal:use-macro="here/theme_macros_library/macros/aggregate_render"/>
</tal:block>
</tal:block>
</div>
<div tal:attributes="id string:${mode_class}_id; class string:main-container ${content_class}">
<div class="main clearfix">
<div class="headteaser index">
<div class="teaserin">
<div class="wrappin ci-web-page-banner">
<tal:block tal:condition="python: not is_front_page">
<tal:block tal:repeat="aggregate python: [('header_title', header_title_area)]">
<tal:block metal:use-macro="here/theme_macros_library/macros/aggregate_render"/>
</tal:block>
<tal:block tal:repeat="aggregate python: [('breadcrumb', breadcrumb_area)]">
<tal:block metal:use-macro="here/theme_macros_library/macros/aggregate_render"/>
</tal:block>
<tal:block tal:repeat="aggregate python: [('document_summary', document_summary_area)]">
<tal:block metal:use-macro="here/theme_macros_library/macros/aggregate_render"/>
</tal:block>
</tal:block>
<span class="portal_status_message" tal:content="portal_status_message"
tal:condition="portal_status_message"/>
<tal:comment replace="nothing">Landing Page Highlight (Slider, or similar)</tal:comment>
<tal:block tal:condition="is_front_page">
<tal:block tal:repeat="aggregate python: [('special_header', special_header_area)]">
<tal:block metal:use-macro="here/theme_macros_library/macros/aggregate_render"/>
</tal:block>
</tal:block>
</div><!-- end ci-web-pagebanner -->
</div><!-- end teaserin -->
</div><!-- end headteaser -->
<div tal:attributes="class string:content wrappin ci-web-page-content ${mode_class} ${content_class}">
<tal:comment replace="nothing">Standard Page Form Content ("simplicity: Form is rendered here")</tal:comment>
<tal:block tal:condition="python: not is_front_page">
<tal:block metal:use-macro="here/theme_macros_library/macros/default_content" />
</tal:block>
<tal:comment replace="nothing">Special Page Content (Front page, showing all documents related to default document)</tal:comment>
<tal:block tal:condition="python: layout_form is not None">
<tal:block metal:use-macro="here/theme_macros_library/macros/special_content" />
</tal:block>
<div class="clear"></div>
</div><!-- end content wrappin -->
</div><!-- end main -->
</div> <!-- main-container -->
<div class="footer-container ci-web-page-footer">
<tal:block tal:condition="python: layout_form is not None">
<tal:block tal:repeat="aggregate python: [('site_footer', site_footer_area)]">
<tal:block metal:use-macro="here/theme_macros_library/macros/aggregate_render"/>
</tal:block>
</tal:block>
</div>
</tal:block>
</tal:block>
</tal:block>
</tal:block>
\ No newline at end of file
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>field_renderer</string> </value>
</item>
<item>
<key> <string>output_encoding</string> </key>
<value> <string>utf-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <unicode></unicode> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<tal:block metal:use-macro="options/macro" />
\ No newline at end of file
# www.robotstxt.org/
# Allow crawling of all content
User-agent: *
Disallow:
\ No newline at end of file
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Cacheable__manager_id</string> </key>
<value> <string>http_cache</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>robots.txt</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/plain</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>sitemap.xml</string> </value>
</item>
<item>
<key> <string>output_encoding</string> </key>
<value> <string>utf-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <unicode></unicode> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<tal:block define="dummy python:request.RESPONSE.setHeader('Content-Type', 'application/xml;; charset=utf-8')"
tal:replace="structure python: context.WebSite_viewSiteMapAsXML()">
</tal:block>
\ No newline at end of file
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>template_erp5_ci_web_style</string> </value>
</item>
<item>
<key> <string>output_encoding</string> </key>
<value> <string>utf-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <unicode></unicode> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<tal:block xmlns:tal="http://xml.zope.org/namespaces/tal"
xmlns:metal="http://xml.zope.org/namespaces/metal"
xmlns:i18n="http://xml.zope.org/namespaces/i18n">
<tal:comment replace="nothing">PAGE CONTAINER FOR ALL PAGES</tal:comment>
<tal:block metal:define-macro="master">
<tal:block tal:define="web_site python: context.getWebSiteValue();
web_site_title python: web_site.getProperty('title');
web_site_description python: web_site.getProperty('description');
web_site_keyword_list python: web_site.getProperty('subject_list');
url python: context.getAbsoluteUrl();
page_theme_dict python: context.Base_getThemeDict(doc_format='html', css_path='template_css/web');
page_source_dict python: context.Base_getSourceDict(theme_logo_url=page_theme_dict.get('theme_logo_url'));
theme python: page_theme_dict.get('theme');
theme_css_url python: page_theme_dict.get('theme_css_url');
author python: page_source_dict.get('organisation_title') or '';
meta_description python: context.getProperty('description') or web_site_description or '';
meta_title python: context.getProperty('title') or web_site_title or context.getPortalObject().title_or_id();
meta_keyword_list python: context.getProperty('subject_list') or web_site_keyword_list or [];
meta_generator python: '%s - Copyright (C) 2001 - %s. All rights reserved.' % (author, DateTime().year());
logo_url python: web_site.getLayoutProperty('layout_logo_reference') or None;
js_list python: context.WebSite_getJavaScriptRelativeUrlList(scope='global');
css_list python: web_site.WebSite_getCssRelativeUrlList(scope='global');
request python: context.REQUEST;">
<!DOCTYPE html>
<html tal:attributes="class python: 'ci-%s' % (theme)" prefix="og: http://ogp.me/ns#">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title tal:content="python: meta_title" />
<meta name="description" content="" tal:attributes="content python: meta_description" />
<meta name="generator" content="" tal:attributes="content python: meta_generator" />
<meta name="keywords" content="" tal:attributes="content python:', '.join(meta_keyword_list)" />
<meta name="robots" content="index, follow" />
<tal:block tal:condition="python: logo_url is not None">
<link rel="shortcut icon" type="image/png" tal:attributes="href python: ''.join([logo_url, '?format=png&amp;resolution=16x16'])" />
<link rel="icon" type="image/png" sizes="192x192" tal:attributes="href python: ''.join([logo_url, '?format=png&amp;resolution=192x192'])" />
<link rel="apple-touch-icon" sizes="180x180" tal:attributes="href python: ''.join([logo_url, '?format=png&amp;resolution=180x180'])">
</tal:block>
<link rel="sitemap" type="application/xml" title="Sitemap" href="/sitemap.xml" />
<tal:block metal:define-slot="seo" />
<tal:block tal:condition="python: theme_css_url is not None">
<link tal:attributes="href theme_css_url" type="text/css" rel="stylesheet" />
</tal:block>
<tal:block tal:repeat="css css_list">
<link tal:attributes="href css" type="text/css" rel="stylesheet" />
</tal:block>
<tal:block tal:condition="python: form is not None">
<tal:block tal:repeat="group python: [x for x in form.get_groups(include_empty=0) if x != 'hidden']">
<tal:block tal:repeat="field python: form.get_fields_in_group(group)">
<tal:block tal:define="css python: field.render_css(REQUEST=request)">
<style tal:condition="python: css is not None" tal:content="css" tal:attributes="type python:'text/css'"></style>
</tal:block>
<tal:block tal:define="dummy python: js_list.extend(field.get_javascript_list(REQUEST=request))" />
</tal:block>
</tal:block>
</tal:block>
</head>
<body class="ci-web">
<!--[if lte IE 9]>
<p class="browserupgrade">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience and security.</p>
<![endif]-->
<form id="main_form" class="main_form ci-web-form"
onsubmit="changed=false; return true"
tal:attributes="enctype enctype | form/Form_getEnctype | nothing;
action url;
method python:str(path('form/method | string:post')).lower()">
<fieldset id="hidden_fieldset" class="hidden_fieldset">
<input tal:condition="form_action | nothing"
id="hidden_button" class="hidden_button" type="submit" value="dummy"
tal:attributes="name string:${form_action}:method" />
<tal:block metal:use-macro="here/theme_macros_library/macros/http_definitions" />
</fieldset>
<tal:comment replace="nothing">PAGE CONTENT</tal:comment>
<tal:block metal:define-slot="layout" />
</form>
<tal:block tal:repeat="js js_list">
<script tal:attributes="src js" type="text/javascript"></script>
</tal:block>
</body>
</html>
</tal:block>
</tal:block>
</tal:block>
\ No newline at end of file
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>theme_macros_library</string> </value>
</item>
<item>
<key> <string>output_encoding</string> </key>
<value> <string>utf-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <unicode></unicode> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<tal:comment replace="nothing">from portal_skins/erp5_web/aggregate_render.xml</tal:comment>
<tal:comment replace="nothing">from portal_skins/erp5_xhtml_style/global_definitions.xml</tal:comment>
<tal:block metal:define-macro="populate_request">
<tal:block tal:define="request python: context.REQUEST;
global portal python: here.getPortalObject();
global portal_path portal_path | python: here.getAbsoluteUrl();
action_context python: portal.restrictedTraverse(request.get('object_path', '?'), here);
global actions python: here.Base_filterDuplicateActions(portal.portal_actions.listFilteredActionsFor(action_context));
local_parameter_list local_parameter_list | python: {};
global http_parameter_list python: portal.ERP5Site_filterParameterList(request.form);
dummy python: http_parameter_list.update(local_parameter_list);
global http_parameters python: portal.ERP5Site_renderHTTPParameterList(http_parameter_list);
global form nocall:form | nothing;
portal_preferences python: portal.portal_preferences;
global preferred_html_style_developper_mode python: portal_preferences.getPreferredHtmlStyleDevelopperMode();
global preferred_html_style_translator_mode python: portal_preferences.getPreferredHtmlStyleTranslatorMode();
global preferred_html_style_contextual_help python: portal_preferences.getPreferredHtmlStyleContextualHelp();
global preferred_html_style_acknowledgeable_message python: portal_preferences.getPreferredHtmlStyleAcknowledgeableMessage();
global developper_shortcut_render python: (preferred_html_style_developper_mode or preferred_html_style_translator_mode) and portal.developper_shortcut_render;
global selected_language portal/Localizer/get_selected_language;
dialog_mode dialog_mode | nothing;
list_mode list_mode | nothing;
website python: context.getWebSiteValue();
website_url python: website.getAbsoluteUrl();
websection python: context.getWebSectionValue();
websection_url python: websection.getAbsoluteUrl();
document python: context.getDocumentValue();
dummy python: request.set('dialog_mode', dialog_mode);
dummy python: request.set('list_mode', list_mode);
dummy python: request.set('http_parameters', http_parameters);
dummy python: request.set('actions', actions);
dummy python: request.set('current_web_site', website);
dummy python: request.set('current_web_site_url', website_url);
dummy python: request.set('current_web_section', websection);
dummy python: request.set('current_web_section_url', websection_url);
dummy python: request.set('current_web_document', document);
dummy python: request.set('is_web_section_default_document', request.get('is_web_section_default_document', 0));">
</tal:block>
</tal:block>
<tal:comment replace="nothing">
- from portal_skins/erp5_web/aggregate_render.xml, modified to call macros dynamically
- no widget_renderer, also removed in content/container layout field defaults
</tal:comment>
<tal:block metal:define-macro="aggregate_render">
<!-- aggregate block -->
<div tal:define="aggregate_name python: aggregate[0];
group_list python: aggregate[1];"
tal:condition="python: len(group_list)"
tal:attributes="class wrapper_class | python: 'wrapper';
id wrapper_id | python: 'wrapper_%s' % aggregate_name;">
<tal:block tal:repeat="group group_list">
<tal:block tal:define="gid group/gid;
gtitle group/gtitle;
goid group/goid;
field_list python: layout_form.get_fields_in_group(goid);">
<div tal:attributes="class python: gid.lstrip(aggregate_name);" tal:condition="python:len(field_list)">
<fieldset class="widget">
<legend i18n:translate="" i18n:domain="ui" tal:content="python: gtitle" class="group_title" />
<tal:block tal:repeat="field field_list">
<tal:block tal:define="field_title string: ${field/title};
strip_title python: field_title.strip();
good_render nocall: context/field_render/macros/field_render;
fake_render python: context.theme_macros_library.macros.get(strip_title);
field_render python: good_render if fake_render is None else fake_render;">
<tal:block tal:replace="structure python: context.field_renderer(macro=field_render)" />
</tal:block>
</tal:block>
</fieldset>
</div>
</tal:block>
</tal:block>
</div>
</tal:block>
<tal:comment replace="nothing">from portal_skins/erp5_xhtml_style/global_definitions.xml</tal:comment>
<tal:block metal:define-macro="http_definitions">
<tal:block tal:define="request python: context.REQUEST;
portal python: here.getPortalObject();
local_parameter_list local_parameter_list | python: {};
http_parameter_list python: portal.ERP5Site_filterParameterList(request.form);
dummy python: http_parameter_list.update(local_parameter_list);">
<tal:block tal:replace="structure python: modules['ZTUtils'].make_hidden_input(**http_parameter_list)" />
</tal:blocK>
</tal:block>
<tal:block metal:define-macro="multilanguage">
<tal:block tal:replace="structure python: here.WebSite_setAlternativeLanguageList()" />
</tal:block>
<tal:block metal:define-macro="opengraph">
<tal:block tal:replace="structure python: here.WebSite_setOpenGraphMeta()" />
</tal:block>
<tal:block metal:define-macro="schemadotorg">
<tal:block tal:replace="structure python: here.WebSite_setSchemaDotOrg()" />
</tal:block>
<tal:block metal:define-macro="site_verification">
<!--google <meta name="google-site-verification" content="" /> -->
<!--taobao <meta property="wb:webmaster" content="" /> -->
</tal:block>
<tal:comment replace="nothing">HEADER (first level: sections/login/language, second level: logo/call-to-action, third level: search)</tal:comment>
<tal:block metal:define-macro="site_header"
tal:define="web_site python: here.getWebSiteValue();
web_site_url python: web_site.getAbsoluteUrl();
language_list python: web_site.Localizer.get_languages_map();
dummy python: language_list.sort(key=lambda x: x['selected'], reverse=True);
available_language_list python: web_site.getAvailableLanguageList();
is_multi_language python: len(available_language_list) > 1;
is_authorization_forced python: web_site.getProperty('authorization_forced');
is_authenticated_user python: web_site.portal_membership.isAnonymousUser() is not 0;
is_searchable_section python: context is web_site or context is context.getWebSectionValue();
has_browse_section python: getattr(web_site, 'browse', None) is not None;
has_contact_section python: getattr(web_site, 'contact', None) is not None;
web_site_title python: web_site.getTitle() or '';
web_site_short_title python: web_site.getShortTitle() or '';
web_site_logo_reference python: web_site.getLayoutProperty('layout_logo_reference');">
<div class="ci-web-header">
<tal:comment replace="nothing">left: LOGO + 5 WEB SECTION MENU (if visible), right: LOGIN/LANGUAGE (if enabled)</tal:comment>
<div class="ci-web-header-bar-navigation">
<div class="ci-web-header-bar-navigation-left">
<tal:block tal:condition="web_site_logo_reference">
<a tal:attributes="href web_site_url">
<img tal:attributes="src python: ''.join([web_site_logo_reference, '?format=png']);
alt python: ''.join([web_site_short_title, ' Home'])"
i18n:translate="" i18n:domain="ui" i18n:attributes="alt" />
</a>
</tal:block>
<span class="ci-web-page-header-bar-navigation-title" tal:content="python: web_site_short_title or 'Home'" i18n:translate="" i18n:domain="ui"></span>
<tal:block tal:replace="structure python: here.WebSite_generateWebSectionNavigation(max_depth=1,max_items=5)"></tal:block>
</div>
<div class="ci-web-header-bar-navigation-center"></div>
<div class="ci-web-header-bar-navigation-right">
<tal:block tal:condition="is_multi_language">
<ul class="ci-web-header-menu-lang">
<tal:block tal:repeat="language language_list">
<li tal:define="language_id language/id;
pretty_language_id python:test(language_id=='pt-BR', 'PT', language_id);
class_id python:test(language_id=='pt-BR', 'pt', language_id);"
tal:attributes="class class_id"
tal:condition="python:language_id in available_language_list">
<a tal:attributes="href python:'Base_doLanguage?select_language=%s' %language_id;
class python:int(language['selected']) * 'selected' or 'not_selected';"
tal:content="pretty_language_id" i18n:translate="" i18n:domain="ui" />
</li>
</tal:block>
</ul>
</tal:block>
<tal:block tal:condition="is_authorization_forced">
<ul class="ci-web-header-menu-auth">
<li tal:condition="is_authenticated_user"><a class="toolbar-menu" tal:attributes="href python: portal_path + '/WebSite_logout'" i18n:translate="" i18n:domain="ui">Logout</a></li>
<li tal:condition="not:is_authenticated_user"><a class="toolbar-menu toolbar-menu-contrast" tal:attributes="href python: portal_path + '/login_form'" i18n:translate="" i18n:domain="ui">Login</a></li>
</ul>
</tal:block>
<tal:block tal:condition="is_authenticated_user">
<ul class="ci-web-header-menu-user"></ul>
</tal:block>
</div>
</div>
<tal:comment replace="nothing">left: LOGO, right: CONTACT/call-to-action (if enabled)</tal:comment>
<div class="ci-web-header-bar-logo">
<div class="ci-web-header-bar-logo-left">
<tal:block tal:condition="web_site_logo_reference">
<a tal:attributes="href web_site_url">
<img tal:attributes="src python: ''.join([web_site_logo_reference, '?format=png']);
alt python: ''.join([web_site_short_title, ' Home'])"
i18n:translate="" i18n:domain="ui" i18n:attributes="alt" />
</a>
<span class="ci-web-page-header-bar-logo-title" tal:content="python: web_site_title or ''" i18n:translate="" i18n:domain="ui"></span>
</tal:block>
</div>
<div class="ci-web-header-bar-logo-center"></div>
<div class="ci-web-header-bar-logo-right">
<tal:block tal:condition="has_contact_section">
<a tal:attributes="href string: ${web_site_url}/contact" title="Contact us for more information." i18n:attributes="title" i18n:translate="" i18n:domain="ui">Contact</a>
</tal:block>
</div>
</div>
<tal:comment replace="nothing">SITE SEARCH (if enabled)</tal:comment>
<tal:comment replace="nothing">XXX load this from a custom template?</tal:comment>
<div class="ci-web-header-bar-search">
<div class="ci-web-header-bar-search-left"></div>
<div class="ci-web-header-bar-search-center">
<tal:block tal:condition="has_browse_section">
<tal:block tal:condition="is_searchable_section">
<div class="custom-menu-search" tal:condition="is_searchable_section">
<input class="custom-menu-search-input" type="text"
onkeypress="submitFormOnEnter(event, this.form, 'WebSite_viewQuickSearchResultList');"
placeholder="Documentation, Install..." i18n:attributes="placeholder" i18n:domain="ui"
name="field_your_search_text" size="40" accesskey="4"/>
<input class="quick_search_button" type="submit" i18n:attributes="value" i18n:domain="ui" value="Search" name="WebSite_viewQuickSearchResultList:method" />
</div>
</tal:block>
</tal:block>
</div>
<div class="ci-web-header-bar-search-right"></div>
</div>
</div>
</tal:block>
<tal:comment replace="nothing">main footer for all pages</tal:comment>
<tal:block metal:define-macro="site_footer">
<tal:block tal:define="web_site python: here.getWebSiteValue();
footer_reference python: web_site.getLayoutProperty('layout_footer_reference');
has_footer python: footer_reference is not None;
copyright python: 'Copyright (C) 2001 - %s. All rights reserved.' % (DateTime().year());">
<div class="ci-web-sitemap">
<tal:block tal:replace="structure python: here.WebSite_generateWebSectionNavigation(max_depth=2)"></tal:block>
</div>
<tal:block tal:condition="has_footer">
<div class="ci-web-footer">
<div tal:replace="structure python: web_site.restrictedTraverse(footer_reference).getTextContent()" />
</div>
</tal:block>
<div class="ci-web-copyright">
<span><a href="https://www.nexedi.com/">Nexedi SA</a></span> -
<span tal:content="copyright" /> -
<span><a href="http://www.miibeian.gov.cn/">&#27818;ICP&#22791;14008524&#21495;</a></span><tal:comment tal:replace="nothing"><!-- XXX
Should this span be moved on another div ? (with class="ci-web-icp" ?)
div.ci-web-icp a {
color: inherit ?
text-decoration: inherit ? none ?
}
--- Tristan
--></tal:comment>
</div>
</tal:block>
</tal:block>
<tal:comment replace="nothing">Default Page</tal:comment>
<tal:block metal:define-macro="special_content"
tal:define="web_site python: context.getWebSiteValue();
web_section python: context.getWebSectionValue();
request python: context.REQUEST;
request_path_url python: request['PATH_INFO'];
is_not_login python: request_path_url.find('login_form') == -1;
is_not_credential_request python: request_path_url.find('ERP5Site_viewCredentialRecoveryLoginDialog') == -1;
root_url python: web_site.absolute_url();
current_url python: context.absolute_url();
default_document python: web_site.getDefaultDocumentValue();
has_default_document python: default_document is not None;
is_default_document_displayed python: web_section.getDefaultPageDisplayed();
is_front_page python: root_url == current_url or current_url == default_url;
current_web_section_renderer_id python: web_site.getProperty('custom_render_method_id', None);
custom_content_reference python: web_site.getProperty('layout_news_reference');
has_custom_content python: custom_content_reference is not None;
predicate_value_list python: getattr(context, 'criterionPropertyList', []);">
<tal:block tal:condition="python: is_front_page and is_not_login and is_not_credential_request">
<tal:comment replace="nothing">Default Page (with renderer/without renderer)</tal:comment>
<tal:block tal:condition="python: has_no_content_form is not True">
<tal:block tal:content="structure python: content_form()"></tal:block>
</tal:block>
<tal:block tal:condition="python: has_no_content_form">
<tal:block tal:condition="python: has_default_document">
<!-- has default -->
<tal:block tal:condition="python: is_default_document_displayed">
<tal:block tal:replace="structure python: default_document.asEntireHTML()"></tal:block>
</tal:block>
</tal:block>
</tal:block>
<tal:comment replace="nothing">Front Page custom content (layout configuration web page "news")</tal:comment>
<tal:block tal:condition="python: has_custom_content">
<tal:block tal:replace="structure python: context.WebSection_viewInlinePageRenderer(custom_content_reference)"></tal:block>
</tal:block>
<tal:comment replace="nothing">Front Page additional content (latest documents, etc)</tal:comment>
<tal:block tal:condition="python: len(predicate_value_list) > 0">
<tal:block metal:use-macro="here/theme_macros_library/macros/press_releases" />
<tal:block metal:use-macro="here/theme_macros_library/macros/latest_documents" />
<tal:block metal:use-macro="here/theme_macros_library/macros/discussions" />
</tal:block>
</tal:block>
</tal:block>
<tal:comment replace="nothing">Normal pages</tal:comment>
<tal:block metal:define-macro="default_content">
<tal:block tal:define="content_context python: context;
content_context_portal_type python: content_context.getPortalType();
web_site python: content_context.getWebSiteValue();
web_section python: content_context.getWebSectionValue();
default_document python: web_section.getDefaultDocumentValue();
has_default_document python: default_document is not None;
is_default_document_displayed python: web_section.getDefaultPageDisplayed();
current_web_section_renderer_id python: web_section.getProperty('custom_render_method_id', None);">
<tal:block tal:condition="python: has_no_content_form is not True">
<tal:block tal:content="structure python: content_form()"></tal:block>
</tal:block>
<tal:block tal:condition="python: has_no_content_form is True">
<tal:block tal:condition="python: has_default_document">
<tal:block tal:condition="python: is_default_document_displayed">
<tal:block tal:replace="structure python: default_document.asEntireHTML()"></tal:block>
</tal:block>
</tal:block>
</tal:block>
</tal:block>
</tal:block>
<tal:comment replace="nothing">landing page header images/animation static content</tal:comment>
<tal:block metal:define-macro="special_header"
tal:define="web_site python: here.getWebSiteValue();
request python: context.REQUEST;
request_path_url python: request['PATH_INFO'];
is_not_login python: request_path_url.find('login_form') == -1;
is_not_credential_request python: request_path_url.find('ERP5Site_viewCredentialRecoveryLoginDialog') == -1;
highlight_reference python: web_site.getProperty('layout_highlight_reference');
has_highlight python: highlight_reference is not None;">
<tal:block tal:condition="python: has_highlight and is_not_login and is_not_credential_request">
<div tal:replace="structure python: web_site.restrictedTraverse(highlight_reference).getTextContent()" />
</tal:block>
</tal:block>
<tal:comment replace="nothing">Make generic, same for discussions and latest documents</tal:comment>
<tal:block metal:define-macro="press_releases">
<tal:block tal:define="item_list python: [x for x in here.WebSection_getLastestDocumentList(publication_section_list=['news', 'blog'])]">
<div class="ci-web-collection-list" tal:condition="python: len(item_list)">
<h2><a href="/news" i18n:attributes="title" i18n:translate="" i18n:domain="ui" title="Show more">Latest News</a></h2>
<a href="/news/WebSection_viewContentListAsRSS" class="icon icon-rss" i18n:attributes="alt" i18n:translate="" i18n:domain="ui" alt="Subscribe via RSS">RSS Feed</a>
<div class="ci-web-collection-row" tal:repeat="item item_list">
<tal:block tal:define="item_url python: here.getWebSiteValue().getPermanentURL(item);
item_date python: item.getCreationDate().strftime('%y-%m-%d');
item_type python: item.getPortalType().lower().replace(' ', '-');
item_image_reference python: web_site.WebPage_getOpenGraphImage(item) or web_site.getLayoutProperty('layout_logo_reference');
item_image_alt python: web_site.restrictedTraverse(item_image_reference).getDescription();">
<div class="ci-web-collection-content">
<div class="ci-web-collection-image" tal:condition="item_image_reference">
<a tal:attributes="href item_url;
title python: item.getTitle();" i18n:attributes="title" i18n:domain="ui">
<img tal:attributes="src python: ''.join([item_image_reference, '?format=png&amp;display=medium']);
alt python: item_image_alt;" i18n:attributes="alt" i18n:domain="ui" />
</a>
</div>
<div class="ci-web-collection-item">
<span tal:content="item_date"></span>
<h3><a i18n:attributes="title" i18n:domain="ui" title="Show Post" tal:attributes="href item_url;" tal:content="python: item.getTitle()" /></h3>
<p tal:replace="python: item.getDescription()"/>
</div>
<div class="ci-web-collection-icon">
<a class="icon icon-document" title="Show Post" i18n:attributes="title" i18n:domain="ui" tal:attributes="href python: item_url"/>
</div>
</div>
</tal:block>
</div>
</div>
</tal:block>
</tal:block>
<tal:block metal:define-macro="latest_documents">
<tal:block tal:define="item_list python: [x for x in here.WebSection_getLatestDocumentListFromUserPreferences(limit=[0,5], sort_on=[('modification_date', 'descending')])]">
<div class="ci-web-collection-list" tal:condition="python: len(item_list)">
<h2><a href="/news" i18n:attributes="title" i18n:translate="" i18n:domain="ui" title="Show more">Latest Documents</a></h2>
<a href="/news/WebSection_viewContentListAsRSS" class="icon icon-rss" i18n:attributes="alt" i18n:translate="" i18n:domain="ui" alt="Latest Documents via RSS">RSS Feed</a>
<div class="ci-web-collection-row" tal:repeat="item item_list">
<tal:block tal:define="item_url python: here.getWebSiteValue().getPermanentURL(item);
item_date python: item.getCreationDate().strftime('%y-%m-%d');
item_type python: item.getPortalType().lower().replace(' ', '-');
item_image_reference python: web_site.WebPage_getOpenGraphImage(item) or web_site.getLayoutProperty('layout_logo_reference');
item_image_alt python: web_site.restrictedTraverse(item_image_reference).getDescription();">
<div class="ci-web-collection-content">
<div class="ci-web-collection-image" tal:condition="item_image_reference">
<a tal:attributes="href item_url;
title python: item.getTitle();" i18n:attributes="title" i18n:domain="ui">
<img tal:attributes="src python: ''.join([item_image_reference, '?format=png&amp;display=medium']);
alt python: item_image_alt;" i18n:attributes="alt" i18n:domain="ui" />
</a>
</div>
<div class="ci-web-collection-item">
<span tal:content="item_date"></span>
<h3><a i18n:attributes="title" i18n:domain="ui" title="Show Post" tal:attributes="href item_url;" tal:content="python: item.getTitle()" /></h3>
<p tal:replace="python: item.getDescription()"/>
</div>
<div class="ci-web-collection-icon">
<a class="icon icon-document" title="Show Post" i18n:attributes="title" i18n:domain="ui" tal:attributes="href python: item_url"/>
</div>
</div>
</tal:block>
</div>
</div>
</tal:block>
</tal:block>
<tal:block metal:define-macro="header_title"><p>BAM-Header-Title</p></tal:block>
<tal:block metal:define-macro="discussions"><p>BAM-Discussions</p></tal:block>
<tal:block metal:define-macro="breadcrumb"><p>BAM-Breadcrumb</p></tal:block>
<tal:block metal:define-macro="document_profile"><p>BAM-Document-Profile</p></tal:block>
<tal:block metal:define-macro="xxxheader_title">
<h1 tal:content="here/getTitle"></h1>
</tal:block>
<tal:block metal:define-macro="xxxbreadcrumb">
<div class="breadcrumb"
tal:define="current_web_section python:request.get('current_web_section', here);
current_web_document python:request.get('current_web_document', here);
portal_path python:request.get('current_web_section_url', current_web_section.absolute_url());
is_web_section_default_document python:request.get('is_web_section_default_document',False);
breadcrumb_list python: current_web_section.getBreadcrumbItemList(current_web_document);">
<ul>
<li tal:repeat="breadcrumb python: breadcrumb_list[:(is_web_section_default_document and -1 or None)]">
<tal:block tal:define="is_last repeat/breadcrumb/end;
is_first repeat/breadcrumb/start;">
<a href="#" tal:attributes="href python: current_web_section.getPermanentURL(breadcrumb[1]);
title python: breadcrumb[2];
class python: test(is_last, 'last-breadcrumb', 'breadcrumb')"
tal:content="python: test(is_first, breadcrumb[0], breadcrumb[1].getShortTitle() or breadcrumb[0])">Title</a>
</tal:block>
</li>
</ul>
</div>
</tal:block>
<tal:block metal:define-macro="xxxprofile_document">
<span tal:replace="here/getDescription"/>
<div class="teaserInfo">
<ul>
<li><strong>Last Update:</strong><span tal:replace="python: context.getModificationDate().strftime('%Y-%m-%d')"/></li>
<li><strong>Version:</strong><span tal:replace="python: getattr(context, 'getVersion', str)()"/></li>
<li><strong>Language:</strong><span tal:replace="python: getattr(context, 'getLanguage', str)()"/></li>
<li>Social Media Map</li>
</ul>
</div>
</tal:block>
<tal:block metal:define-macro="example_custom_property_content"
tal:define="website here/getWebSiteValue;
request python: context.REQUEST;
dynamic_path_url python: request['PATH_INFO'];
is_not_login python: dynamic_path_url.find('login_form') == -1;
is_not_credential_request python: dynamic_path_url.find('ERP5Site_viewCredentialRecoveryLoginDialog') == -1;
custom_property_content_reference python: website.getProperty('custom_property_content_reference');
custom_property_content_web_page python: here.WebSection_getCachedDocumentValue(custom_property_content_reference)">
<span tal:condition="python: custom_property_content_web_page is not None and is_not_login and is_not_credential_request"
tal:replace="structure custom_property_content_web_page/asEntireHTML"/>
</tal:block>
<!-- === CLEANUP ===
<tal:block metal:define-macro="xxxlatest_documents">
<tal:block tal:define="latest_document_list python: [x for x in here.WebSection_getLatestRelevantDocumentList()]">
<div class="bottomPosts latestDocuments" tal:condition="python: len(latest_document_list)">
<h2 style="display:inline-block;"><a href="/latest">Latest Documents</a></h2>
<a style="margin-left:2em;top:-2px;" href="/latest/WebSection_viewContentListAsRSS" alt="Latest Documents as RSS" class="share-button rss-feed">
<img src="img/rss.png" alt="RSS Feed">
</a>
<div class="row" tal:repeat="latest_document latest_document_list">
<tal:block tal:define="latest_document_url python: here.getWebSiteValue().getPermanentURL(latest_document);">
<div class="date">
<span tal:replace="python: latest_document.getModificationDate().strftime('%d-%m')"/>
<span tal:content="python: latest_document.getModificationDate().strftime('%Y')"/>
</div>
<div class="text">
<h3><a title="Show press release"
tal:attributes="href latest_document_url"
tal:content="latest_document/getTitle"/></h3>
<span tal:replace="latest_document/getDescription"/>
</div>
<a class="icon"
title="Show post"
tal:attributes="href latest_document_url"><img src="img/posticon-doc.png" alt="" /></a>
</tal:block>
</div>
</div>
</tal:block>
</tal:block>
<tal:block metal:define-macro="related_documents">
<tal:block tal:condition="python: context.getPortalType() in context.getPortalDocumentTypeList()">
<tal:block tal:define="related_document_list python: context.Document_getRelatedDocumentList(relation_id='related_predecessor') +
context.Document_getRelatedDocumentList(relation_id='related_similar') +
context.Document_getRelatedDocumentList(relation_id='related_successor')">
<div class="bottomPosts relatedDocs" tal:condition="python: len(related_document_list)">
<h2>
<a href="Document_viewRelatedDocumentList"
title="Show more">Related Documents</a>
<a href="#" class="txtButn" title="Show more">Suggest</a>
</h2>
<div class="row" tal:repeat="related_document python: related_document_list[:2]">
<tal:block tal:define="related_document_url python: here.getWebSiteValue().getPermanentURL(related_document);">
<div class="date">
<span tal:replace="python: related_document.getModificationDate().strftime('%d-%m')"/>
<span tal:content="python: related_document.getModificationDate().strftime('%Y')"/>
</div>
<div class="text">
<h3><a title="Show document"
tal:attributes="href related_document_url"
tal:content="related_document/getTitle"/></h3>
<span tal:replace="related_document/getDescription"/>
</div>
<a class="icon"
title="Show post"
tal:attributes="href related_document_url"><img src="img/posticon-doc.png" alt="" /></a>
</tal:block>
</div>
<a class="txtButn" title="Show more" href="Document_viewRelatedDocumentList">More</a>
</div>
</tal:block>
</tal:block>
</tal:block>
<tal:block metal:define-macro="xxxdiscussions">
<div class="bottomPosts Discussions"
tal:define="web_site here/getWebSiteValue;
absolute_url here/getAbsoluteUrl;
relative_url here/getRelativeUrl;
forum_web_section here/WebSite_getDefaultForumWebSectionValue;
discussion_thread_list python:here.WebSection_getLatestDiscussionThreadList(forum_web_section)[:2]">
<h2>
<a title="Show more"
tal:attributes="href python: forum_web_section.absolute_url()">Discussions</a>
<a class="txtButn" title="Show more"
tal:attributes="href string:${forum_web_section/absolute_url}/WebSection_viewCreateNewDiscussionThreadDialog?cancel_url=${absolute_url}&amp;predecessor_url=${relative_url}">New</a>
</h2>
<div class="row" tal:repeat="discussion_thread discussion_thread_list">
<tal:block tal:define="discussion_post discussion_thread/DiscussionThread_getLastPost;
author_dict discussion_post/DiscussionPost_getAuthorDict;
is_author_link_available python:author_dict['author_url'] is not None;
base_url python: '%s/%s/%s' %(web_site.absolute_url(), forum_web_section.getId(), discussion_thread.getReference())">
<div class="date">
<span tal:replace="python: discussion_post.getModificationDate().strftime('%d-%m')"/>
<span tal:content="python: discussion_post.getModificationDate().strftime('%Y')"/>
</div>
<div class="text">
<h3>
<a title="Show post"
tal:attributes="href python: '%s/view?list_start=%s&amp;reset=1#%s' %(base_url, discussion_post.getId(), discussion_post.getUid())"
tal:content="discussion_post/getTitle"/>
<em>by <spam tal:replace="author_dict/author_title"/></em>
</h3>
<span tal:replace="structure python: here.Base_asStrippedHTML(discussion_post.getTextContent(''))"/>
</div>
</tal:block>
</div>
<a class="txtButn" title="Show more" tal:attributes="href string:${forum_web_section/absolute_url}">More</a>
<div class="clear"></div>
</div>
</tal:block>
-->
\ No newline at end of file
...@@ -4,7 +4,9 @@ erp5_corporate_identity_leaflet | Leaflet ...@@ -4,7 +4,9 @@ erp5_corporate_identity_leaflet | Leaflet
erp5_corporate_identity_letter | Letter erp5_corporate_identity_letter | Letter
erp5_corporate_identity_release | Release erp5_corporate_identity_release | Release
erp5_corporate_identity_slide | Slide erp5_corporate_identity_slide | Slide
erp5_corporate_identity_web | CI_web
erp5_xhtml_style | Book erp5_xhtml_style | Book
erp5_xhtml_style | CI_web
erp5_xhtml_style | Leaflet erp5_xhtml_style | Leaflet
erp5_xhtml_style | Letter erp5_xhtml_style | Letter
erp5_xhtml_style | Release erp5_xhtml_style | Release
......
...@@ -4,3 +4,4 @@ erp5_corporate_identity_leaflet ...@@ -4,3 +4,4 @@ erp5_corporate_identity_leaflet
erp5_corporate_identity_letter erp5_corporate_identity_letter
erp5_corporate_identity_release erp5_corporate_identity_release
erp5_corporate_identity_slide erp5_corporate_identity_slide
erp5_corporate_identity_web
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment