Commit cdef346a authored by Xiaowu Zhang's avatar Xiaowu Zhang

corporate identity improvement

See merge request nexedi/erp5!1464
parents 0c51b3dd fd2114e1
Pipeline #16639 failed with stage
in 0 seconds
......@@ -16,13 +16,13 @@
<key> <string>categories</string> </key>
<value>
<tuple>
<string>action_type/object_exchange</string>
<string>action_type/object_jio_exchange</string>
</tuple>
</value>
</item>
<item>
<key> <string>category</string> </key>
<value> <string>object_exchange</string> </value>
<value> <string>object_jio_exchange</string> </value>
</item>
<item>
<key> <string>condition</string> </key>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ActionInformation" module="Products.CMFCore.ActionInformation"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>action</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>action_type/object_jio_exchange</string>
</tuple>
</value>
</item>
<item>
<key> <string>category</string> </key>
<value> <string>object_jio_exchange</string> </value>
</item>
<item>
<key> <string>condition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string>Generate a book from the current web page.</string> </value>
</item>
<item>
<key> <string>icon</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>export_contract</string> </value>
</item>
<item>
<key> <string>permissions</string> </key>
<value>
<tuple>
<string>View</string>
</tuple>
</value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Action Information</string> </value>
</item>
<item>
<key> <string>priority</string> </key>
<value> <float>25.0</float> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Export as Contract</string> </value>
</item>
<item>
<key> <string>visible</string> </key>
<value> <int>1</int> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Expression" module="Products.CMFCore.Expression"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>text</string> </key>
<value> <string>string:${object_url}/WebPage_viewExportAsContractDialog</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
......@@ -16,13 +16,13 @@
<key> <string>categories</string> </key>
<value>
<tuple>
<string>action_type/object_exchange</string>
<string>action_type/object_jio_exchange</string>
</tuple>
</value>
</item>
<item>
<key> <string>category</string> </key>
<value> <string>object_exchange</string> </value>
<value> <string>object_jio_exchange</string> </value>
</item>
<item>
<key> <string>condition</string> </key>
......
......@@ -16,13 +16,13 @@
<key> <string>categories</string> </key>
<value>
<tuple>
<string>action_type/object_exchange</string>
<string>action_type/object_jio_exchange</string>
</tuple>
</value>
</item>
<item>
<key> <string>category</string> </key>
<value> <string>object_exchange</string> </value>
<value> <string>object_jio_exchange</string> </value>
</item>
<item>
<key> <string>condition</string> </key>
......
......@@ -16,13 +16,13 @@
<key> <string>categories</string> </key>
<value>
<tuple>
<string>action_type/object_exchange</string>
<string>action_type/object_jio_exchange</string>
</tuple>
</value>
</item>
<item>
<key> <string>category</string> </key>
<value> <string>object_exchange</string> </value>
<value> <string>object_jio_exchange</string> </value>
</item>
<item>
<key> <string>condition</string> </key>
......
......@@ -16,13 +16,13 @@
<key> <string>categories</string> </key>
<value>
<tuple>
<string>action_type/object_exchange</string>
<string>action_type/object_jio_exchange</string>
</tuple>
</value>
</item>
<item>
<key> <string>category</string> </key>
<value> <string>object_exchange</string> </value>
<value> <string>object_jio_exchange</string> </value>
</item>
<item>
<key> <string>condition</string> </key>
......
......@@ -42,7 +42,7 @@ of the document. So, this link external link <a href="https://google.com">docume
will not be touched, while this one will end up as a reference [<a href="https://www.google.com/" title="Google Website;Search;0;1">AD</a>]
and this internl link (only reference) will be embedded if the option is active:
</p>
<a href="Template.Test.Book.Embeddable.Document">This link should be embedded</a>
<a>This link should be embedded</a>
<p>Embedded document above.</p>
<h2>Table Caption/Image Captions</h2>
......@@ -98,7 +98,7 @@ alt attribute, to list them in the reference tables. Examples of both:
<p>Please don't add any formatting to a table except for the width of cells. There
is a default css applied to all tables. Finally an image:
</p>
<img src="Template.Test.Image.Office?format=png&amp;display=medium" type="image/png" alt="Caption for this image" />
<img type="image/png" alt="Caption for this image" />
<h1>Reports</h1>
......
......@@ -37,7 +37,7 @@
</p>
<h2>Ubiquitous HTML5 Appstore</h2>
<div class="left-icon"> <img alt="" src="Template.Test.Image.Screenshot.Erp5?format=png" />
<div class="left-icon"> <img alt="" />
<p class="excerpt">Foo HTML5 Appstore</p>
</div>
<p>
......@@ -59,7 +59,7 @@
</p>
<h2>Never lose your data</h2>
<div class="left-icon"> <img alt="" src="Template.Test.Image.Screenshot.Erp5?format=png" />
<div class="left-icon"> <img alt="" />
<p class="excerpt">Foo supports new generation low cost Baz such as Snip 1234</p>
</div>
<p>
......
......@@ -5,7 +5,7 @@
<p>The hardware offering relies on building blocks of 180 dual Xeon servers. Each subsystem integrates 2880 x86 core, 11.5 TB of main memory and 180 TB of high performance, full SSD storage. Networking relies on redundant industry standard 10 Gbps Ethernet. Each building block is coming at a price of 205,000 Euros and is ready to scale to hundred thousands of cores.</p>
<p style="text-align:center">
<img src="Template.Test.Image.Map?format=png" alt="" />
<img alt="" />
</p>
<p>The software offering relies on Bar Open Source / Free Software. Bar integrates IaaS (virtualisation, nano-containers), PaaS, software defined networking, accounting, billing, provisionning, orchestration, automated disaster recovery, network resiliency and edge computing. Typical Bar monthly operating cost per building block is 4800 euro.</p>
......
......@@ -36,7 +36,7 @@
<section>
<h1>Content Header</h1>
<img src="Template.Test.Image.Screenshot.Erp5?format=png" alt="Fullsize Screenshot">
<img alt="Fullsize Screenshot">
<details open="open">
Additional information provided here.
</details>
......@@ -44,7 +44,7 @@
<section>
<h1>Content Header</h1>
<img src="Template.Test.Image.Screenshot.Erp5?format=png" alt="Fullsize Screenshot">
<img alt="Fullsize Screenshot">
<p>Screenshot info</p>
<details open="open">
Additional information provided here.
......
......@@ -3,6 +3,10 @@
<skin_folder>erp5_corporate_identity_book</skin_folder>
<skin_selection>Book,Report</skin_selection>
</skin_folder_selection>
<skin_folder_selection>
<skin_folder>erp5_corporate_identity_contract</skin_folder>
<skin_selection>Contract</skin_selection>
</skin_folder_selection>
<skin_folder_selection>
<skin_folder>erp5_corporate_identity_leaflet</skin_folder>
<skin_selection>Leaflet</skin_selection>
......@@ -25,6 +29,6 @@
</skin_folder_selection>
<skin_folder_selection>
<skin_folder>erp5_xhtml_style</skin_folder>
<skin_selection>Book,CI_web,Leaflet,Letter,Release,Report,Slide</skin_selection>
<skin_selection>Book,CI_web,Contract,Leaflet,Letter,Release,Report,Slide</skin_selection>
</skin_folder_selection>
</registered_skin_selection>
\ No newline at end of file
......@@ -39,6 +39,8 @@ if doc_save:
'portal_type': context.getTranslatedPortalType()
}
)
if context.getWebSiteValue():
context.getPortalObject().portal_skins.changeSkin('HalRestricted')
return web_page.Base_redirect(
keep_items=dict(portal_status_message=message)
)
......
......@@ -39,7 +39,7 @@ Update a book report dialog with parameters manually entered
from Products.ERP5Type.Message import translateString
if dialog_id is not None:
return context.Base_redirect(
return context.Base_renderForm(
dialog_id,
keep_items = dict(
portal_status_message=translateString('Preview updated.'),
......
......@@ -37,6 +37,7 @@ Generates the complete book (only called in HTML version)
book_full_reference python: options.get('book_full_reference');
book_source_organisation_title python: options.get('book_source_organisation_title');
margin_15mm python: options.get('margin_15mm');
book_history_section_list python: options.get('book_history_section_list');
book_table_of_content python: options.get('book_table_of_content');">
<!DOCTYPE html>
<html tal:attributes="class python: ''.join(['ci-', book_theme, ' ci-', book_language])">
......@@ -75,7 +76,7 @@ Generates the complete book (only called in HTML version)
<tal:block tal:condition="python: book_raw_report != True">
<tal:block metal:use-macro="context/WebPage_createBookCover/macros/book_cover" />
</tal:block>
<tal:block tal:condition="python: book_include_history is not None">
<tal:block tal:condition="python: book_include_history">
<tal:block metal:use-macro="context/WebPage_createBookTableOfHistory/macros/book_history" />
</tal:block>
<tal:block tal:replace="structure book_table_of_content"></tal:block>
......@@ -99,7 +100,7 @@ Generates the complete book (only called in HTML version)
<tal:block tal:condition="python: book_raw_report != True">
<tal:block metal:use-macro="context/WebPage_createBookCover/macros/book_cover" />
</tal:block>
<tal:block tal:condition="python: book_include_history is not None">
<tal:block tal:condition="python: book_include_history">
<tal:block metal:use-macro="context/WebPage_createBookTableOfHistory/macros/book_history" />
</tal:block>
<tal:block tal:replace="structure book_table_of_content"></tal:block>
......
......@@ -15,6 +15,7 @@ Creates the Book sections (version, authors, etc).
book_signature_list python: options.get('book_signature_list');
book_distribution_list python: options.get('book_distribution_list');
margin_15mm python: options.get('margin_15mm');
book_history_section_list python: options.get('book_history_section_list');
book_version_list python: options.get('book_version_list');">
<!DOCTYPE html>
<html tal:attributes="class python: ''.join(['ci-', book_theme, ' ci-', book_language])">
......@@ -43,7 +44,10 @@ Creates the Book sections (version, authors, etc).
<tal:block tal:condition="python: False">
<tal:block metal:define-macro="book_history">
<tal:comment replace="nothing">Directly called from WebPage_createBook, so need to check again</tal:comment>
<tal:block tal:repeat="book_history_section book_history_section_list">
<tal:block tal:replace="structure book_history_section"></tal:block>
</tal:block>
<!--tal:comment replace="nothing">Directly called from WebPage_createBook, so need to check again</tal:comment>
<tal:block tal:condition="python: book_include_history != 0">
<section>
<table class="ci-book-table ci-book-signature-list" border="1" width="100%" cellpadding="0" cellspacing="0">
......@@ -162,6 +166,6 @@ Creates the Book sections (version, authors, etc).
</tbody>
</table>
</section>
</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>WebPage_createContract</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">
"""
================================================================================
Generates the complete contract (only called in HTML version)
================================================================================
"""
</tal:comment>
<tal:block tal:define="contract_raw_tables python: options.get('contract_raw_tables');
contract_raw_report python: options.get('contract_raw_report');
contract_theme python: options.get('contract_theme');
contract_header python: options.get('contract_header');
contract_footer python: options.get('contract_footer');
contract_title python: options.get('contract_title');
contract_language python: options.get('contract_language');
contract_theme_css_font_list python: options.get('contract_theme_css_font_list');
contract_theme_css_url python: options.get('contract_theme_css_url');
contract_template_css_url python: options.get('contract_template_css_url');
contract_report_css_list python: options.get('contract_report_css_list');
contract_report_js_list python: options.get('contract_report_js_list');
contract_embed python: options.get('contract_embed');
contract_short_title python: options.get('contract_short_title');
contract_description python: options.get('contract_description');
contract_source_person_title python: options.get('contract_source_person_title');
contract_include_history python: options.get('contract_include_history');
contract_signature_list python: options.get('contract_signature_list');
contract_version_list python: options.get('contract_version_list');
contract_distribution_list python: options.get('contract_distribution_list');
contract_content python: options.get('contract_content');
contract_format python: options.get('contract_format');
contract_rendering_fix python: options.get('contract_rendering_fix');
contract_logo_url python: options.get('contract_logo_url');
contract_logo_title python: options.get('contract_logo_title');
contract_reference python: options.get('contract_reference');
contract_revision python: options.get('contract_revision');
contract_version python: options.get('contract_version');
contract_short_date python: options.get('contract_short_date');
contract_full_reference python: options.get('contract_full_reference');
contract_source_organisation_title python: options.get('contract_source_organisation_title');
contract_history_section_list python: options.get('contract_history_section_list');
contract_table_of_content python: options.get('contract_table_of_content');">
<!DOCTYPE html>
<html tal:attributes="class python: ''.join(['ci-', contract_theme, ' ci-', contract_language])">
<head>
<meta charset="utf-8">
<title tal:content="python: contract_title"></title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<tal:block tal:repeat="font_url contract_theme_css_font_list">
<link rel="stylesheet" tal:attributes="href font_url" />
</tal:block>
<link rel="stylesheet" tal:attributes="href contract_theme_css_url" />
<link rel="stylesheet" tal:attributes="href contract_template_css_url" />
<link rel="stylesheet" href="template_css/highlight.css" />
<tal:block tal:condition="python: len(contract_report_css_list) > 0">
<tal:block tal:repeat="css_href contract_report_css_list">
<link rel="stylesheet" tal:attributes="href css_href" />
</tal:block>
</tal:block>
<script type="text/javascript">
function setPlaceholdersWithUrlParameters() {
var vars={};
var x=window.location.search.substring(1).split('&');
for (var i in x) {var z=x[i].split('=',2);vars[z[0]] = unescape(z[1]);}
var x=['frompage','topage','page','webpage','section','subsection','subsubsection'];
for (var i in x) {
var y = document.getElementsByClassName(x[i]);
for (var j=0; j<y.length; ++j) y[j].textContent = vars[x[i]];
}
}
</script>
</head>
<body class="ci-contract" onload="setPlaceholdersWithUrlParameters()">
<tal:block tal:condition="python: contract_embed != 1">
<tal:block metal:use-macro="context/WebPage_createContractHeader/macros/contract_header" />
<tal:block tal:condition="python: contract_raw_report != True">
<tal:block metal:use-macro="context/WebPage_createContractCover/macros/contract_cover" />
</tal:block>
<tal:block tal:condition="python: contract_include_history">
<tal:block metal:use-macro="context/WebPage_createContractTableOfHistory/macros/contract_history" />
</tal:block>
<tal:block tal:replace="structure contract_table_of_content"></tal:block>
</tal:block>
<tal:block metal:use-macro="context/WebPage_createContractContent/macros/contract_content" />
<tal:block tal:condition="python: contract_embed != 1">
<tal:block metal:use-macro="context/WebPage_createContractFooter/macros/contract_footer" />
</tal:block>
<script type="text/javascript" src="template_js/highlight.js"></script>
<tal:block tal:condition="python: len(contract_report_js_list) > 0">
<tal:block tal:repeat="js_src contract_report_js_list">
<script type="text/javascript" tal:attributes="src js_src"></script>
</tal:block>
</tal:block>
</body>
</html>
</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>WebPage_createContractContent</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">
"""
================================================================================
Creates the Book content.
================================================================================
"""
</tal:comment>
<tal:block tal:define="contract_theme python: options.get('contract_theme');
contract_title python: options.get('contract_title');
contract_language python: options.get('contract_language');
contract_theme_css_font_list python: options.get('contract_theme_css_font_list');
contract_theme_css_url python: options.get('contract_theme_css_url');
contract_template_css_url python: options.get('contract_template_css_url');
contract_report_css_list python: options.get('contract_report_css_list');
contract_report_js_list python: options.get('contract_report_js_list');
contract_short_title python: options.get('contract_short_title');
contract_description python: options.get('contract_description');
contract_source_person_title python: options.get('contract_source_person_title');
contract_content python: options.get('contract_content');
contract_format python: options.get('contract_format');
contract_rendering_fix python: options.get('contract_rendering_fix');">
<!DOCTYPE html>
<html tal:attributes="class python: ''.join(['ci-', contract_theme, ' ci-', contract_language])">
<head>
<meta charset="utf-8">
<title tal:content="python: contract_title"></title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<tal:block tal:repeat="font_url contract_theme_css_font_list">
<link rel="stylesheet" tal:attributes="href font_url" />
</tal:block>
<link rel="stylesheet" tal:attributes="href contract_theme_css_url" />
<link rel="stylesheet" tal:attributes="href contract_template_css_url" />
<link rel="stylesheet" href="template_css/highlight.css" />
<tal:block tal:condition="python: len(contract_report_css_list) > 0">
<tal:block tal:repeat="css_href contract_report_css_list">
<link rel="stylesheet" tal:attributes="href css_href" />
</tal:block>
</tal:block>
</head>
<body class="ci-contract ci-contract-content">
<tal:block metal:use-macro="context/WebPage_createContractContent/macros/contract_content" />
<script type="text/javascript" src="template_js/highlight.js"></script>
<tal:block tal:condition="python: len(contract_report_js_list) > 0">
<tal:block tal:repeat="js_src contract_report_js_list">
<script type="text/javascript" tal:attributes="src js_src"></script>
</tal:block>
</tal:block>
<tal:block tal:condition="python: contract_format == 'pdf'">
<tal:block tal:content="structure python: contract_rendering_fix"></tal:block>
</tal:block>
</body>
</html>
</tal:block>
<tal:block tal:condition="python: False">
<tal:block metal:define-macro="contract_content">
<tal:block tal:content="structure python: contract_content"></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>WebPage_createContractCover</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">
"""
================================================================================
Creates the Contract cover.
================================================================================
"""
</tal:comment>
<tal:block tal:define="contract_theme python: options.get('contract_theme');
contract_title python: options.get('contract_title');
contract_language python: options.get('contract_language');
contract_theme_css_font_list python: options.get('contract_theme_css_font_list');
contract_theme_css_url python: options.get('contract_theme_css_url');
contract_template_css_url python: options.get('contract_template_css_url');
contract_short_title python: options.get('contract_short_title');
contract_description python: options.get('contract_description');
contract_source_person_title python: options.get('contract_source_person_title');">
<!DOCTYPE html>
<html tal:attributes="class python: ''.join(['ci-', contract_theme, ' ci-', contract_language])">
<head>
<meta charset="utf-8">
<title tal:content="python: contract_title"></title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<tal:block tal:repeat="font_url contract_theme_css_font_list">
<link rel="stylesheet" tal:attributes="href font_url" />
</tal:block>
<link rel="stylesheet" tal:attributes="href contract_theme_css_url" />
<link rel="stylesheet" tal:attributes="href contract_template_css_url" />
</head>
<body class="ci-contract">
<tal:block metal:use-macro="context/WebPage_createContractCover/macros/contract_cover" />
</body>
</html>
</tal:block>
<tal:block tal:condition="python: False">
<tal:block metal:define-macro="contract_cover">
<div class="ci-contract-cover ci-document-cover ci-document-print">
<p class="ci-contract-cover-faux-h1" tal:content="python: contract_title"></p>
<p class="ci-contract-cover-faux-h2" tal:content="python: contract_short_title"></p>
<p class="ci-contract-cover-description" tal:content="python: contract_description"></p>
<p class="ci-contract-cover-author-list">
<tal:block tal:repeat="author contract_source_person_title">
<span tal:content="author"></span><tal:block tal:condition="not: repeat/author/end">,</tal:block>
</tal:block>
</p>
</div>
</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>WebPage_createContractFooter</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">
"""
================================================================================
Creates the Contract footer.
================================================================================
"""
</tal:comment>
<tal:block tal:define="contract_theme python: options.get('contract_theme');
contract_title python: options.get('contract_title');
contract_footer python: options.get('contract_footer');
contract_language python: options.get('contract_language');
contract_theme_css_font_list python: options.get('contract_theme_css_font_list');
contract_theme_css_url python: options.get('contract_theme_css_url');
contract_template_css_url python: options.get('contract_template_css_url');
contract_full_reference python: options.get('contract_full_reference');
contract_source_organisation_title python: options.get('contract_source_organisation_title');">
<!DOCTYPE html>
<html tal:attributes="class python: ''.join(['ci-', contract_theme, ' ci-', contract_language])">
<head>
<meta charset="utf-8">
<title tal:content="python: contract_title"></title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<tal:block tal:repeat="font_url contract_theme_css_font_list">
<link rel="stylesheet" tal:attributes="href font_url" />
</tal:block>
<link rel="stylesheet" tal:attributes="href contract_theme_css_url" />
<link rel="stylesheet" tal:attributes="href contract_template_css_url" />
<script type="text/javascript">
function setPlaceholdersWithUrlParameters() {
var vars={};
var x=window.location.search.substring(1).split('&');
for (var i in x) {var z=x[i].split('=',2);vars[z[0]] = unescape(z[1]);}
var x=['frompage','topage','page','webpage','section','subsection','subsubsection'];
for (var i in x) {
var y = document.getElementsByClassName(x[i]);
for (var j=0; j<y.length; ++j) y[j].textContent = vars[x[i]];
}
}
</script>
</head>
<body class="ci-contract" onload="setPlaceholdersWithUrlParameters()">
<tal:block metal:use-macro="context/WebPage_createContractFooter/macros/contract_footer" />
</body>
</html>
</tal:block>
<tal:block tal:condition="python: False">
<tal:block metal:define-macro="contract_footer">
<tal:block tal:condition="python: contract_footer">
<tal:block tal:content="structure python: contract_footer"></tal:block>
</tal:block>
<tal:block tal:condition="python: not contract_footer">
<table class="ci-contract-footer">
<tbody>
<tr>
<td></td>
<td></td>
<td><div>
<span class="ci-contract-header-key" i18n:translate="" i18n:domain="erp5_ui">Page:</span>
<span class="ci-contract-header-value page"></span>
<span class="ci-contract-header-value">/</span>
<span class="ci-contract-header-value topage"></span>
</div></td>
</tr>
</tbody>
</table>
</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>WebPage_createContractHeader</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">
"""
================================================================================
Creates the Contract header.
================================================================================
"""
</tal:comment>
<tal:block tal:define="contract_theme python: options.get('contract_theme');
contract_title python: options.get('contract_title');
contract_header python: options.get('contract_header');
contract_language python: options.get('contract_language');
contract_theme_css_font_list python: options.get('contract_theme_css_font_list');
contract_theme_css_url python: options.get('contract_theme_css_url');
contract_template_css_url python: options.get('contract_template_css_url');
contract_logo_url python: options.get('contract_logo_url');
contract_logo_title python: options.get('contract_logo_title');
contract_short_title python: options.get('contract_short_title');
contract_reference python: options.get('contract_reference');
contract_revision python: options.get('contract_revision');
contract_version python: options.get('contract_version');
contract_short_date python: options.get('contract_short_date');">
<!DOCTYPE html>
<html tal:attributes="class python: ''.join(['ci-', contract_theme, ' ci-', contract_language])">
<head>
<meta charset="utf-8">
<title tal:content="python: contract_title"></title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<tal:block tal:repeat="font_url contract_theme_css_font_list">
<link rel="stylesheet" tal:attributes="href font_url" />
</tal:block>
<link rel="stylesheet" tal:attributes="href contract_theme_css_url" />
<link rel="stylesheet" tal:attributes="href contract_template_css_url" />
<script type="text/javascript">
function setPlaceholdersWithUrlParameters() {
var vars={};
var x=window.location.search.substring(1).split('&');
for (var i in x) {var z=x[i].split('=',2);vars[z[0]] = unescape(z[1]);}
var x=['frompage','topage','page','webpage','section','subsection','subsubsection'];
for (var i in x) {
var y = document.getElementsByClassName(x[i]);
for (var j=0; j<y.length; ++j) y[j].textContent = vars[x[i]];
}
}
function setImageSize(pic) {
if (pic.naturalWidth / pic.naturalHeight <= 1) {
pic.style.width = "auto";
pic.style.maxWidth = "28mm";
pic.style.maxHeight = "28mm"
pic.style.height = "auto";
}
}
</script>
</head>
<body class="ci-contract" onload="setPlaceholdersWithUrlParameters()">
<tal:block metal:use-macro="context/WebPage_createContractHeader/macros/contract_header" />
</body>
</html>
</tal:block>
<tal:block tal:condition="python: False">
<tal:block metal:define-macro="contract_header">
<tal:block tal:condition="python: contract_header">
<tal:block tal:content="structure python: contract_header"></tal:block>
</tal:block>
<tal:block tal:condition="python: not contract_header">
<table class="ci-contract-header">
<tbody>
<tr>
<td>
</td>
<td>
</td>
<td>
<div class="ci-contract-header-image-wkhtmltopdf-image-wrapper">
<img class="hack" onload="setImageSize(event.srcElement)" tal:attributes="src python: contract_logo_url; alt python: contract_logo_title"/>
</div>
</td>
</tr>
</tbody>
</table>
</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>WebPage_createContractTableOfHistory</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">
"""
================================================================================
Creates the Contract sections (version, authors, etc).
================================================================================
"""
</tal:comment>
<tal:block tal:define="contract_theme python: options.get('contract_theme');
contract_title python: options.get('contract_title');
contract_language python: options.get('contract_language');
contract_theme_css_font_list python: options.get('contract_theme_css_font_list');
contract_theme_css_url python: options.get('contract_theme_css_url');
contract_template_css_url python: options.get('contract_template_css_url');
contract_include_history python: options.get('contract_include_history');
contract_history_section_list python: options.get('contract_history_section_list');">
<!DOCTYPE html>
<html tal:attributes="class python: ''.join(['ci-', contract_theme, ' ci-', contract_language])">
<head>
<meta charset="utf-8">
<title tal:content="python: contract_title"></title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<tal:block tal:repeat="font_url contract_theme_css_font_list">
<link rel="stylesheet" tal:attributes="href font_url" />
</tal:block>
<link rel="stylesheet" tal:attributes="href contract_theme_css_url" />
<link rel="stylesheet" tal:attributes="href contract_template_css_url" />
</head>
<body class="ci-contract" tal:condition="python: contract_include_history != 0">
<tal:block metal:use-macro="context/WebPage_createContractTableOfHistory/macros/contract_history" />
</body>
</html>
</tal:block>
<tal:block tal:condition="python: False">
<tal:block metal:define-macro="contract_history">
<tal:block tal:repeat="contract_history_section contract_history_section_list">
<tal:block tal:replace="structure contract_history_section"></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>WebPage_createContractTableOfReferences</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">
"""
================================================================================
Creates the Tables of references.
================================================================================
"""
</tal:comment>
<tal:block tal:define="contract_format python: options.get('contract_format');
contract_theme python: options.get('contract_theme');
contract_title python: options.get('contract_title');
contract_language python: options.get('contract_language');
contract_theme_css_font_list python: options.get('contract_theme_css_font_list');
contract_theme_css_url python: options.get('contract_theme_css_url');
contract_template_css_url python: options.get('contract_template_css_url');
contract_include_reference python: options.get('contract_include_reference');
contract_reference_list python: options.get('contract_reference_list');
contract_applicable_document_list python: options.get('contract_applicable_document_list');
contract_abbreviation_list python: options.get('contract_abbreviation_list');
contract_image_list python: options.get('contract_image_list');
contract_table_list python: options.get('contract_table_list');">
<tal:block tal:condition="python: contract_format == 'html' or contract_format == 'mhtml'">
<tal:block metal:use-macro="context/WebPage_createContractTableOfReferences/macros/contract_references" />
</tal:block>
<tal:block tal:condition="python: contract_format == 'pdf'">
<!DOCTYPE html>
<html tal:attributes="class python: ''.join(['ci-', contract_theme, ' ci-', contract_language])">
<head>
<meta charset="utf-8">
<title tal:content="python: contract_title"></title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<tal:block tal:repeat="font_url contract_theme_css_font_list">
<link rel="stylesheet" tal:attributes="href font_url" />
</tal:block>
<link rel="stylesheet" tal:attributes="href contract_theme_css_url" />
<link rel="stylesheet" tal:attributes="href contract_template_css_url" />
</head>
<body class="ci-contract" tal:condition="python: contract_include_reference != 0">
<tal:block metal:use-macro="context/WebPage_createContractTableOfReferences/macros/contract_references" />
</body>
</html>
</tal:block>
</tal:block>
<tal:block tal:condition="python: False">
<tal:block metal:define-macro="contract_references">
<tal:comment tal:replace="nothing">We need to recheck in case macro is called directly</tal:comment>
<tal:block tal:condition="python: contract_include_reference != 0">
<h2 i18n:translate="" i18n:domain="erp5_ui">References</h2>
<p i18n:translate="" i18n:domain="erp5_ui">This section provides the list of applicable documents and references.</p>
<h3 i18n:translate="" i18n:domain="erp5_ui">Applicable Documents</h3>
<p i18n:translate="" i18n:domain="erp5_ui">This section provides the list of applicable documents.</p>
<table class="ci-contract-table ci-contract-applicable-list" border="1" width="100%" style="table-layout:fixed;" cellpadding="0" cellspacing="0">
<thead>
<tr>
<th width="9%"><b i18n:translate="" i18n:domain="erp5_ui">ID</b></th>
<th width="56%"><b i18n:translate="" i18n:domain="erp5_ui">Title</b><b>/</b><b i18n:translate="" i18n:domain="erp5_ui">Reference</b></th>
<th width="21%"><b i18n:translate="" i18n:domain="erp5_ui">Document Number</b></th>
<th width="14%"><b i18n:translate="" i18n:domain="erp5_ui">Issue.</b><br /><b i18n:translate="" i18n:domain="erp5_ui">Rev.</b></th>
</tr>
</thead>
<tbody>
<tal:block tal:condition="python: len(contract_applicable_document_list) > 0">
<tal:block tal:repeat="applicable_document contract_applicable_document_list">
<tr>
<td width="9%"><a tal:attributes="id python: applicable_document.get('id')"></a><span tal:content="python: applicable_document.get('id')"></span></td>
<td width="56%" style="text-align:left"><span tal:content="python: applicable_document.get('title')"></span><br/><a tal:attributes="href python: applicable_document.get('href')"><span tal:content="python: applicable_document.get('href')"></span></a></td>
<td width="21%" tal:content="python: applicable_document.get('number')"></td>
<td width="14%" tal:content="python: applicable_document.get('version')"></td>
</tr>
</tal:block>
</tal:block>
</tbody>
</table>
<h3 i18n:translate="" i18n:domain="erp5_ui">Referenced Documents</h3>
<p i18n:translate="" i18n:domain="erp5_ui">This section provides the list of referenced documents.</p>
<table class="ci-contract-table ci-contract-reference-list" border="1" width="100%" style="table-layout:fixed;" cellpadding="2" cellspacing="0">
<thead>
<tr>
<th width="9%"><b i18n:translate="" i18n:domain="erp5_ui">ID</b></th>
<th width="56%"><b i18n:translate="" i18n:domain="erp5_ui">Title</b><b>/</b><b i18n:translate="" i18n:domain="erp5_ui">Reference</b></th>
<th width="21%"><b i18n:translate="" i18n:domain="erp5_ui">Document Number</b></th>
<th width="14%"><b i18n:translate="" i18n:domain="erp5_ui">Issue.</b><br /><b i18n:translate="" i18n:domain="erp5_ui">Rev.</b></th>
</tr>
</thead>
<tbody>
<tal:block tal:condition="python: len(contract_reference_list) > 0">
<tal:block tal:repeat="reference_document contract_reference_list">
<tr>
<td width="9%"><a tal:attributes="id python: reference_document.get('id')"></a><span tal:content="python: reference_document.get('id')"></span></td>
<td width="56%" style="text-align:left"><span tal:content="python: reference_document.get('title')"></span><br/><a tal:attributes="href python: reference_document.get('href')"><span tal:content="python: reference_document.get('href')"></span></a></td>
<td width="21%" tal:content="python: reference_document.get('number')"></td>
<td width="14%" tal:content="python: reference_document.get('version')"></td>
</tr>
</tal:block>
</tal:block>
</tbody>
</table>
<h2 i18n:translate="" i18n:domain="erp5_ui">Abbreviations</h2>
<p i18n:translate="" i18n:domain="erp5_ui">This section provides the lists of the applicable abbreviations.</p>
<table border="1" class="ci-contract-table ci-contract-abbreviation-list" width="100%" style="table-layout:fixed;" cellpadding="0" cellspacing="0">
<thead>
<tr>
<th width="10%"><b i18n:translate="" i18n:domain="erp5_ui">ID</b></th>
<th width="15%"><b i18n:translate="" i18n:domain="erp5_ui">Abbreviation</b></th>
<th width="31%"><b i18n:translate="" i18n:domain="erp5_ui">Title</b></th>
<th width="43%"><b i18n:translate="" i18n:domain="erp5_ui">Description</b></th>
</tr>
</thead>
<tbody>
<tal:block tal:condition="python: len(contract_abbreviation_list) > 0">
<tal:block tal:repeat="abbreviation contract_abbreviation_list">
<tr>
<td width="9%"><a tal:attributes="id python: abbreviation.get('id')"></a><span tal:content="python: abbreviation.get('id')"></span></td>
<td width="56%" style="text-align:left"><a tal:attributes="href python: abbreviation.get('href')"><span tal:content="python: abbreviation.get('abbreviation')"></span></a></td>
<td width="21%" style="text-align:left" tal:content="python: abbreviation.get('title')"></td>
<td width="14%" style="text-align:left" tal:content="python: abbreviation.get('description')"></td>
</tr>
</tal:block>
</tal:block>
</tbody>
</table>
<h2 i18n:translate="" i18n:domain="erp5_ui">Figures</h2>
<p i18n:translate="" i18n:domain="erp5_ui">This section provides the list of figures and images.</p>
<table border="1" class="ci-contract-table ci-contract-figure-list" width="100%" style="table-layout:fixed;" cellpadding="0" cellspacing="0">
<thead>
<tr>
<th width="10%"><b i18n:translate="" i18n:domain="erp5_ui">ID</b></th>
<th width="90%"><b i18n:translate="" i18n:domain="erp5_ui">Title</b></th>
</tr>
</thead>
<tbody>
<tal:block tal:condition="python: len(contract_image_list) > 0">
<tal:block tal:repeat="image contract_image_list">
<tr>
<td width="10%"><a tal:attributes="id python: image.get('id')"></a><span tal:content="python: image.get('id')"></span></td>
<td width="90%" style="text-align: left; vertical-align: top" tal:content="python: image.get('title')"></td>
</tr>
</tal:block>
</tal:block>
</tbody>
</table>
<h2 i18n:translate="" i18n:domain="erp5_ui">Tables</h2>
<p i18n:translate="" i18n:domain="erp5_ui">This section provides the list of tables.</p>
<table border="1" class="ci-contract-table ci-contract-figure-list" width="100%" style="table-layout:fixed;" cellpadding="0" cellspacing="0">
<thead>
<tr>
<th width="10%"><b i18n:translate="" i18n:domain="erp5_ui">ID</b></th>
<th width="90%"><b i18n:translate="" i18n:domain="erp5_ui">Title</b></th>
</tr>
</thead>
<tbody>
<tal:block tal:condition="contract_table_list">
<tal:block tal:repeat="table contract_table_list">
<tr>
<td width="10%"><a tal:attributes="id python: table.get('id')"></a><span tal:content="python: table.get('id')"></span></td>
<td width="90%" style="text-align: left; vertical-align: top" tal:content="python: table.get('title')"></td>
</tr>
</tal:block>
</tal:block>
</tbody>
</table>
</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>WebPage_createContractXslTableOfContent</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>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:outline="http://wkhtmltopdf.org/outline"
xmlns="http://www.w3.org/1999/xhtml">
<xsl:output method="html" encoding="utf-8" indent="yes" doctype-system="about:legacy-compat"/>
<xsl:template match="outline:outline">
<xsl:param name="count" select="0" />
<html>
<head>
<title>Table of Contents</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style>
/* punt at fixing overlaps */
html, body {
overflow-x: initial !important;
}
/* font */
.ci-contract-table-of-content ol,
.ci-contract-table-of-content li,
.ci-contract-table-of-content a,
.ci-contract-table-of-content span {
font-family: "Roboto", Arial, 'Noto Sans Sc', SimHei, STXihei, sans-serif;
}
.ci-contract-faux-h1 {
font-family: "Roboto", Arial, 'Noto Sans Sc', SimHei, STXihei, sans-serif;
}
/* size */
.ci-contract-table-of-content ol {
font-size: 20px;
}
.ci-contract-table-of-content ol ol {
font-size: 18px;
}
.ci-contract-faux-h1 {
font-size: 36px;
}
/* indent */
/* h1 */
.ci-contract-table-of-content ol {
text-indent: 0;
}
/* h2 */
.ci-contract-table-of-content ol ol {
text-indent: 3em;
}
/* h3 */
.ci-contract-table-of-content ol ol ol {
text-indent: 6em;
}
/* h4 */
.ci-contract-table-of-content ol ol ol ol {
text-indent: 9em;
}
/* h5 */
.ci-contract-table-of-content ol ol ol ol ol {
text-indent: 12em;
}
/* h6 */
.ci-contract-table-of-content ol ol ol ol ol ol {
text-indent: 15em;
}
/* spacing, what misery */
.ci-contract-helper {
margin: 0;
padding: 0;
}
.ci-contract-table-of-content-lead-item:not(:first-child) {
padding-top: 10mm;
}
/* dotted lines */
.ci-contract-table-of-content ol li div {
position: relative;
overflow: hidden;
}
.ci-contract-table-of-content ol li div:after {
content: "";
position: absolute;
bottom: 3px;
width: 100%;
border-bottom: 1px dotted #000;
z-index: 500;
}
/* line-height */
.ci-contract-table-of-content ol li div {
height: 28px;
line-height: 24px;
}
.ci-contract-table-of-content ol ol li div {
height: 24px;
line-height: 20px;
}
/* numbering x.x.x.x */
.ci-contract-table-of-content ol li {
counter-increment: item;
}
.ci-contract-table-of-content ol li div:before {
content: counters(item, ".") ". ";
padding-right: 0.5em;
}
.ci-contract-table-of-content li ol li div:before {
content: counters(item, ".") " ";
}
/* general styling */
.ci-contract-table-of-content {
display: block;
width: 100%;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
padding-right: 10px;
}
.ci-contract-table-of-content ol {
counter-reset: item;
list-style-type: none;
margin: 0;
padding: 0;
display: block;
width: inherit;
}
.ci-contract-table-of-content li ol li {
margin: 0;
}
/* page numbers */
.ci-contract-table-of-content span {
float: right;
position: relative;
}
/* hail mary coverup */
.ci-contract-table-of-content span:before {
content: "";
height: 4px;
width: 22px;
position: absolute;
background-color: #fff;
bottom: -4px;
right: -1px;
z-index: 1000;
}
.ci-contract-table-of-content a {
text-decoration:none;
color: black;
}
.ci-contract-faux-h1 {
text-align: left;
font-weight: normal;
margin-top: 24mm;
margin-bottom: 12%;
}
</style>
</head>
<body class="ci-contract-toc">
<p class="ci-contract-faux-h1" tal:content="python: options.get('contract_toc_title') or ''">Table of Contents</p>
<div class="ci-contract-table-of-content">
<p class="ci-contract-helper"></p>
<ol>
<xsl:apply-templates select="outline:item/outline:item">
<xsl:with-param name="count" select="$count" />
</xsl:apply-templates>
</ol>
</div>
</body>
</html>
</xsl:template>
<xsl:template match="outline:item">
<xsl:param name="count" />
<xsl:choose>
<xsl:when test="number($count)=0">
<li class="ci-contract-table-of-content-lead-item">
<xsl:if test="@title!=''">
<div>
<a>
<xsl:if test="@link">
<xsl:attribute name="href"><xsl:value-of select="@link"/></xsl:attribute>
</xsl:if>
<xsl:if test="@backLink">
<xsl:attribute name="name"><xsl:value-of select="@backLink"/></xsl:attribute>
</xsl:if>
<xsl:value-of select="@title" />
</a>
<span><xsl:value-of select="@page" /> </span>
</div>
</xsl:if>
<ol>
<xsl:comment>added to prevent self-closing tags in QtXmlPatterns</xsl:comment>
<xsl:apply-templates select="outline:item"></xsl:apply-templates>
</ol>
</li>
</xsl:when>
<xsl:otherwise>
<li>
<xsl:if test="@title!=''">
<div>
<a>
<xsl:if test="@link">
<xsl:attribute name="href"><xsl:value-of select="@link"/></xsl:attribute>
</xsl:if>
<xsl:if test="@backLink">
<xsl:attribute name="name"><xsl:value-of select="@backLink"/></xsl:attribute>
</xsl:if>
<xsl:value-of select="@title" />
</a>
<span><xsl:value-of select="@page" /> </span>
</div>
</xsl:if>
<ol>
<xsl:comment>added to prevent self-closing tags in QtXmlPatterns</xsl:comment>
<xsl:apply-templates select="outline:item"></xsl:apply-templates>
</ol>
</li>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
\ No newline at end of file
......@@ -38,7 +38,7 @@ for figure in re.findall('(<img.*?/>)', document_content or ''):
# no alt attribute = skip an image from being included
figure_title = re.findall(match_content, figure) or blank
if figure_title[0] == blank:
if figure_title == blank or figure_title[0] == blank:
continue
figure_count = figure_count + 1
......
......@@ -3,6 +3,9 @@
Create HTML table of content (to be used on web pages instead of xsl for pdf)
================================================================================
"""
# ERP5 web uses type= argument, which is also a python builtin
# pylint: disable=redefined-builtin
# parameters
# ------------------------------------------------------------------------------
# doc_content text content of document being rendered
......@@ -58,8 +61,8 @@ for header in re.findall("<h[1-6].*?</h[1-6]>", doc_content or blank):
closer = int(header_current) * '</ol>'
insert = ''.join([
'<section class="ci-book-table-of-content">',
'<p class="ci-book-toc-faux-h1">%s</p>' % (doc_toc_title or "Table of Contents"),
'<section class="ci-%s-table-of-content">' % type,
'<p class="ci-%s-toc-faux-h1">%s</p>' % (type, doc_toc_title or "Table of Contents"),
table_of_content,
closer,
'</section>'
......
......@@ -50,7 +50,7 @@
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>doc_content=None, doc_reference=None, doc_toc_title=None</string> </value>
<value> <string>doc_content=None, doc_reference=None, doc_toc_title=None, type=\'book\'</string> </value>
</item>
<item>
<key> <string>id</string> </key>
......
......@@ -11,6 +11,7 @@ import re
blank = ""
for link in re.findall('([^[]<a.*?</a>[^]])', doc_content or blank):
link = link[1:-1]
link_reference_list = re.findall('href=\"(.*?)\"', link)
if link_reference_list:
link_reference = link_reference_list[0]
......@@ -21,7 +22,7 @@ for link in re.findall('([^[]<a.*?</a>[^]])', doc_content or blank):
link_doc = context.restrictedTraverse(link_reference.split("?")[0])
doc_content = doc_content.replace(link, link_doc.asStrippedHTML())
except LookupError:
raise LookupError(link_reference)
pass
doc_content = doc_content.replace("${related_subject_list}", blank)
doc_content = doc_content.replace("${table_of_content", blank)
......
......@@ -55,6 +55,7 @@ if doc_content.find('${WebPage_') != -1:
# call it with the parameters provided
for link in re.findall('([^[]<a.*?</a>[^]])', doc_content):
link = link[1:-1]
link_reference_list = re.findall('href=\"(.*?)\"', link)
if link_reference_list:
link_reference = link_reference_list[0]
......
# ERP5 web uses format= argument, which is also a python builtin
# pylint: disable=redefined-builtin
return context.WebPage_viewAsContract(
document_save=document_save,
display_svg=display_svg,
batch_mode=batch_mode,
include_content_table=include_content_table,
include_history_table=include_history_table,
include_reference_table=include_reference_table,
include_linked_content=include_linked_content,
include_report_content=include_report_content,
format=format,
**kw
)
<?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>format=None, include_content_table=None,include_history_table= None,include_reference_table=None,include_linked_content=None,include_report_content=None,batch_mode=False,display_svg=None,document_save=None, **kw</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>WebPage_exportAsContract</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
......@@ -53,9 +53,10 @@ if doc_save:
'portal_type': document.getTranslatedPortalType()
}
)
# XXX redirect = true?
return document.Base_redirect(
if context.getWebSiteValue():
context.getPortalObject().portal_skins.changeSkin('HalRestricted')
return document.Base_redirect(form_id='view',
keep_items=dict(portal_status_message=message)
)
#XXX else:
......
......@@ -38,31 +38,27 @@ Update a book dialog with parameters manually entered
from Products.ERP5Type.Message import translateString
if dialog_id is not None:
return context.Base_redirect(
dialog_id,
keep_items = dict(
portal_status_message=translateString('Preview updated.'),
cancel_url=cancel_url,
portal_skin=portal_skin,
format=format,
display_svg=display_svg,
document_save=document_save,
document_download=document_download,
override_document_description=override_document_description,
override_document_short_title=override_document_short_title,
override_document_title=override_document_title,
override_document_version=override_document_version,
override_logo_reference=override_logo_reference,
override_source_person_title=override_source_person_title,
override_document_reference=override_document_reference,
override_source_organisation_title=override_source_organisation_title,
transformation=transformation,
include_content_table=include_content_table,
include_history_table=include_history_table,
include_reference_table=include_reference_table,
include_linked_content=include_linked_content,
include_report_content=include_report_content,
margin15mm = margin15mm,
#**kw
)
)
request = container.REQUEST
request.form['portal_status_message'] = translateString('Preview updated.')
request.form['cancel_url'] = cancel_url
request.form['portal_skin'] = portal_skin
request.form['format'] = format
request.form['display_svg'] = display_svg
request.form['document_save'] = document_save
request.form['document_download'] = document_download
request.form['override_document_description'] = override_document_description
request.form['override_document_short_title'] = override_document_short_title
request.form['override_document_title'] = override_document_title
request.form['override_document_version'] = override_document_version
request.form['override_logo_reference'] = override_logo_reference
request.form['override_source_person_title'] = override_source_person_title
request.form['override_document_reference'] = override_document_reference
request.form['override_source_organisation_title'] = override_source_organisation_title
request.form['transformation'] = transformation
request.form['include_content_table'] = include_content_table
request.form['include_history_table'] = include_history_table
request.form['include_reference_table'] = include_reference_table
request.form['include_linked_content'] = include_linked_content
request.form['include_report_content'] = include_report_content
request.form['margin15mm'] = margin15mm
return context.Base_renderForm(dialog_id)
# ERP5 web uses format= argument, which is also a python builtin
# pylint: disable=redefined-builtin
from Products.ERP5Type.Message import translateString
if dialog_id is not None:
request = container.REQUEST
request.form['portal_status_message'] = translateString('Preview updated.')
request.form['cancel_url'] = cancel_url
request.form['portal_skin'] = portal_skin
request.form['format'] = format
request.form['display_svg'] = display_svg
request.form['document_save'] = document_save
request.form['include_content_table'] = include_content_table
request.form['include_history_table'] = include_history_table
request.form['include_reference_table'] = include_reference_table
request.form['include_linked_content'] = include_linked_content
request.form['include_report_content'] = include_report_content
return context.Base_renderForm(dialog_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>dialog_id=None, cancel_url=None, portal_skin=None, include_content_table=None, include_history_table= None, include_reference_table=None, include_linked_content=None, include_report_content=None, format=None,display_svg=None,document_save=None, *args,**kw</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>WebPage_updateContractDialog</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
......@@ -24,20 +24,17 @@ Update a leaflet dialog with parameters manually entered
from Products.ERP5Type.Message import translateString
if dialog_id is not None:
return context.Base_redirect(
dialog_id,
keep_items = dict(
portal_status_message=translateString('Preview updated.'),
cancel_url=cancel_url,
portal_skin=portal_skin,
override_source_organisation_title=override_source_organisation_title,
override_source_person_title=override_source_person_title,
override_leaflet_header_title=override_leaflet_header_title,
format=format,
display_svg=display_svg,
display_side=display_side,
document_save=document_save,
document_download=document_download,
**kw
)
)
request = container.REQUEST
request.form['portal_status_message'] = translateString('Preview updated.')
request.form['cancel_url'] = cancel_url
request.form['portal_skin'] = portal_skin
request.form['override_source_organisation_title'] = override_source_organisation_title
request.form['override_source_person_title'] = override_source_person_title
request.form['override_leaflet_header_title'] = override_leaflet_header_title
request.form['format'] = format
request.form['display_svg'] = display_svg
request.form['display_side'] = display_side
request.form['document_save'] = document_save
request.form['document_download'] = document_download
return context.Base_renderForm(dialog_id)
......@@ -28,26 +28,23 @@ Update the letter dialog with parameters manually entered
# override_date to use instead of current date
from Products.ERP5Type.Message import translateString
if dialog_id is not None:
return context.Base_redirect(
dialog_id,
keep_items = dict(
portal_status_message=translateString('Preview updated.'),
cancel_url=cancel_url,
portal_skin=portal_skin,
override_source_organisation_title=override_source_organisation_title,
override_source_person_title=override_source_person_title,
override_destination_organisation_title=override_destination_organisation_title,
override_destination_person_title=override_destination_person_title,
override_date=override_date,
format=format,
display_head=display_head,
display_svg=display_svg,
document_download=document_download,
document_save=document_save,
destination_position_in_letter = destination_position_in_letter,
display_sender_company_above_recipient=display_sender_company_above_recipient,
destination_position_padding_left = destination_position_padding_left,
letter_header_margin_to_top = letter_header_margin_to_top,
**kw
)
)
request = container.REQUEST
request.form['portal_status_message'] = translateString('Preview updated.')
request.form['cancel_url'] = cancel_url
request.form['portal_skin'] = portal_skin
request.form['format'] = format
request.form['display_svg'] = display_svg
request.form['document_save'] = document_save
request.form['document_download'] = document_download
request.form['override_source_organisation_title'] = override_source_organisation_title
request.form['override_source_person_title'] = override_source_person_title
request.form['override_destination_organisation_title'] = override_destination_organisation_title
request.form['override_destination_person_title'] = override_destination_person_title
request.form['override_date'] = override_date
request.form['display_head'] = display_head
request.form['destination_position_in_letter'] = destination_position_in_letter
request.form['display_sender_company_above_recipient'] = display_sender_company_above_recipient
request.form['destination_position_padding_left'] = destination_position_padding_left
request.form['letter_header_margin_to_top'] = letter_header_margin_to_top
return context.Base_renderForm(dialog_id)
......@@ -23,19 +23,15 @@ Update a press release dialog with parameters manually entered
from Products.ERP5Type.Message import translateString
if dialog_id is not None:
return context.Base_redirect(
dialog_id,
keep_items = dict(
portal_status_message=translateString('Preview updated.'),
cancel_url=cancel_url,
portal_skin=portal_skin,
override_source_organisation_title=override_source_organisation_title,
override_source_person_title=override_source_person_title,
format=format,
display_svg=display_svg,
display_about=display_about,
document_save=document_save,
document_download=document_download,
**kw
)
)
request = container.REQUEST
request.form['portal_status_message'] = translateString('Preview updated.')
request.form['cancel_url'] = cancel_url
request.form['portal_skin'] = portal_skin
request.form['override_source_organisation_title'] = override_source_organisation_title
request.form['override_source_person_title'] = override_source_person_title
request.form['format'] = format
request.form['display_svg'] = display_svg
request.form['display_about'] = display_about
request.form['document_save'] = document_save
request.form['document_download'] = document_download
return context.Base_renderForm(dialog_id)
......@@ -27,18 +27,16 @@ Update the slide dialog with parameters manually entered
from Products.ERP5Type.Message import translateString
if dialog_id is not None:
return context.Base_redirect(
dialog_id,
keep_items = dict(
portal_status_message=translateString('Preview updated.'),
cancel_url=cancel_url,
portal_skin=portal_skin,
override_logo_reference=override_logo_reference,
override_source_organisation_title=override_source_organisation_title,
display_note=display_note,
display_svg=display_svg,
document_save=document_save,
document_download=document_download,
format=format,
)
)
request = container.REQUEST
request.form['portal_status_message'] = translateString('Preview updated.')
request.form['cancel_url'] = cancel_url
request.form['portal_skin'] = portal_skin
request.form['format'] = format
request.form['display_svg'] = display_svg
request.form['document_save'] = document_save
request.form['document_download'] = document_download
request.form['override_logo_reference'] = override_logo_reference
request.form['override_source_organisation_title'] = override_source_organisation_title
request.form['display_note'] = display_note
return context.Base_renderForm(dialog_id)
......@@ -47,17 +47,27 @@ if not img_src.lower().startswith("http"):
#END user ignoring guidelines
if img_src[0] == '/':
img_src = img_src[1:]
img_obj = context.restrictedTraverse(img_src.split("?")[0], None)
real_img_src = img_src.split("?")[0]
img_obj = context.restrictedTraverse(real_img_src, None)
# flag broken link until further notice
if img_obj is None:
return '<p style="color:red">The following image could not be found in erp5 OR is not following guidelines for links (eg no ./ prefix): <span style="font-weight:bold">%s</span></p>' % (img_src.split("?")[0])
return '<p style="color:red">The following image could not be found in erp5 OR is not following guidelines for links (eg no ./ prefix): <span style="font-weight:bold">%s</span></p>' % (real_img_src)
# img_src = "image_module/3/getData"
try:
img_type = img_obj.getContentType()
except AttributeError:
real_img_src = '/'.join(real_img_src.split('/')[:-1])
# img_obj is surely not None
img_obj = context.restrictedTraverse(real_img_src, None)
img_type = img_obj.getContentType()
# ensure alt attributes are set
if img_string.find('alt=') == -1:
img_string.replace ("src=", 'alt="%s" src=' % img_caption or img_obj.getTitle())
img_type = img_obj.getContentType()
# force svg display as svg or png
if img_type == "image/svg+xml":
if img_svg_format == "png":
......
......@@ -85,6 +85,11 @@ book_title = html_quote(override_document_title) if override_document_title else
if isinstance(book_content, unicode):
book_content = book_content.encode("UTF-8")
# backcompat
book_history_section_list = re.findall('<section.+?>.+?</section>', book_content, re.S)
for book_history_section in book_history_section_list:
book_content = book_content.replace(book_history_section, '')
# override for tests
if override_batch_mode:
book_modification_date = DateTime("1976-11-04")
......@@ -225,6 +230,7 @@ for image in re.findall('(<img.*?/>)', book_content):
if book_format == "html" or book_format == "mhtml":
context.REQUEST.RESPONSE.setHeader("Content-Type", "text/html; charset=utf-8")
book_output = book.WebPage_createBook(
book_history_section_list = book_history_section_list,
book_theme=book_theme.get("theme"),
book_title=book_title,
book_language=book_language,
......@@ -285,6 +291,7 @@ elif book_format == "pdf":
)
book_history = book.WebPage_createBookTableOfHistory(
book_history_section_list = book_history_section_list,
book_theme=book_theme.get("theme"),
book_title=book_title,
book_language=book_language,
......
import re
from base64 import b64encode
blank = ''
pref = context.getPortalObject().portal_preferences
contract_format = kw.get('format') or 'html'
contract_save = int(kw.get('document_save') or 0)
contract_display_svg = kw.get('display_svg') or 'png'
contract_include_content_table = int(kw.get('include_content_table') or 0)
contract_include_history_table = int(kw.get('include_history_table') or 0)
contract_include_reference_table = int(kw.get('include_reference_table') or 0)
contract_include_linked_content = int(kw.get('include_linked_content') or 0)
contract_include_report_content = int(kw.get('include_report_content') or 0)
override_batch_mode = kw.get('batch_mode')
contract_relative_url = context.getRelativeUrl()
#contract_prefix = pref.getPreferredCorporateIdentityTemplateContractDocumentPrefix() or "Contract."
contract_prefix='Contract.'
contract_rendering_fix = context.WebPage_getPdfOutputRenderingFix() or blank
contract_content = context.getTextContent()
contract_aggregate_list = []
contract_revision = context.getRevision()
contract_modification_date = context.getModificationDate()
contract_language = context.getLanguage()
contract_reference = context.getReference()
contract_short_title = context.getShortTitle()
contract_version = context.getVersion() or "001"
contract_description = context.getDescription()
contract_title = context.getTitle()
if isinstance(contract_content, unicode):
contract_content = contract_content.encode("UTF-8")
contract_history_section_list = re.findall('<section.+?>.+?</section>', contract_content, re.S)
for contract_history_section in contract_history_section_list:
contract_content = contract_content.replace(contract_history_section, '')
for header in re.findall("<h[1-6].*</h[1-6]>", contract_content or ""):
convert_to_h2 = True
for tag in ['introduction', 'annex', 'appendix']:
if tag in header.lower():
convert_to_h2 = False
break
if convert_to_h2:
header_list = re.findall("<(h[1-6]).*>", header)
if len(header_list):
tag = header_list[0]
key = tag[1]
contract_content = contract_content.replace(
header,
header.replace(tag, 'h%s' % (int(key) + 1))
)
# override for tests
if override_batch_mode:
contract_modification_date = DateTime("1976-11-04")
contract_revision = "1"
contract_short_date = contract_modification_date.strftime('%Y-%m-%d')
if contract_language:
context.REQUEST['AcceptLanguage'].set(contract_language, 10)
else:
contract_language = blank
if not contract_reference:
contract_reference = contract_prefix + contract_title.replace(" ", ".")
contract_full_reference = '-'.join([contract_reference, contract_version, contract_language])
# ------------------------------- Theme ----------------------------------------
contract_theme = context.Base_getThemeDict(doc_format=contract_format, css_path="template_css/contract", skin="Contract")
# --------------------------- Source/Destination -------------------------------
contract_source = context.Base_getSourceDict(
theme_logo_url=contract_theme.get("theme_logo_url", None)
)
# --------------------------- Content Upgrades ---------------------------------
contract_reference_list = []
contract_report_css_list = contract_report_js_list = []
contract_applicable_document_list = []
contract_abbreviation_list = []
contract_image_list = []
contract_table_list = []
contract_table_of_content = blank
# old generate book, this embed link like <a href="Template.Test.context.Embeddable.Document">This link should be embedded</a>
if contract_include_linked_content:
contract_content = context.WebPage_embedLinkedDocumentList(doc_content=contract_content)
# embed reports, link like <a href="project_module/1234?report=bam>, which has report=
if contract_include_report_content:
contract_report_css_list = pref.getPreferredCorporateIdentityTemplateReportCssList() or []
contract_report_js_list = pref.getPreferredCorporateIdentityTemplateReportJsList() or []
contract_content = context.WebPage_embedReportDocumentList(doc_content=contract_content, doc_language=contract_language, doc_format=contract_format)
# table of links
if contract_include_reference_table:
contract_link_list = context.WebPage_createLinkOverview(contract_content)
table_link_list = context.WebPage_createTableOverview(contract_content)
image_link_list = context.WebPage_createImageOverview(contract_content)
for referenced_document in contract_link_list.get("reference_list", []):
contract_reference_list.append(referenced_document.get("item"))
contract_content = contract_content.replace(referenced_document.get("input"), referenced_document.get("output"),1)
for applicable_document in contract_link_list.get("applicable_list", []):
contract_applicable_document_list.append(applicable_document.get("item"))
contract_content = contract_content.replace(applicable_document.get("input"), applicable_document.get("output"),1)
for abbreviation in contract_link_list.get("abbreviation_list", []):
contract_abbreviation_list.append(abbreviation.get("item"))
contract_content = contract_content.replace(abbreviation.get("input"), abbreviation.get("output"),1)
for figure in image_link_list.get("figure_list", []):
contract_image_list.append(figure.get("item"))
contract_content = contract_content.replace(figure.get("input"), figure.get("output"), 1)
for table in table_link_list.get("table_list", []):
contract_table_list.append(table.get("item"))
contract_content = contract_content.replace(table.get("input"), table.get("output"), 1)
# in order for the reference tables to be in the table of content, they must
# be added beforehand to content
contract_references = context.WebPage_createContractTableOfReferences(
contract_format=contract_format,
contract_theme=contract_theme.get("theme"),
contract_title=contract_title,
contract_language=contract_language,
contract_theme_css_font_list=contract_theme.get("theme_css_font_list"),
contract_theme_css_url=contract_theme.get("theme_css_url"),
contract_template_css_url=contract_theme.get("template_css_url"),
contract_include_reference=contract_include_reference_table,
contract_reference_list=contract_reference_list,
contract_applicable_document_list=contract_applicable_document_list,
contract_abbreviation_list=contract_abbreviation_list,
contract_image_list=contract_image_list,
contract_table_list=contract_table_list
)
contract_references = context.Base_unescape(contract_references)
contract_content = contract_content.replace("${WebPage_insertTableOfReferences}", contract_references.encode('UTF-8').strip())
else:
contract_content = contract_content.replace("${WebPage_insertTableOfReferences}", blank)
# table of content has to be created manually to run over everything that
# should be indexed in the toc
if contract_include_content_table:
contract_translated_toc_title = context.Base_translateString("Table of Contents", lang=contract_language)
if contract_format == "pdf":
contract_table_of_content = context.WebPage_createContractXslTableOfContent(
contract_toc_title=contract_translated_toc_title,
).encode('UTF-8').strip()
elif contract_format == "html":
contract_content, contract_table_of_content = context.WebPage_createTableOfContent(
doc_content=contract_content,
doc_reference=contract_reference,
doc_toc_title=contract_translated_toc_title,
type='contract'
)
for image in re.findall('(<img.*?/>)', contract_content):
contract_content = contract_content.replace(
image,
context.WebPage_validateImage(
img_string=image,
img_svg_format=contract_display_svg,
img_wrap=True
)
)
# ============================ Transformation ==================================
# ========================== Format: mhtml/html ================================
if contract_format == "html" or contract_format == "mhtml":
context.REQUEST.RESPONSE.setHeader("Content-Type", "text/html; charset=utf-8")
contract_output = context.WebPage_createContract(
contract_history_section_list = contract_history_section_list,
contract_theme=contract_theme.get("theme"),
contract_title=contract_title,
contract_language=contract_language,
contract_theme_css_font_list=contract_theme.get("theme_css_font_list"),
contract_theme_css_url=contract_theme.get("theme_css_url"),
contract_template_css_url=contract_theme.get("template_css_url"),
contract_report_css_list=contract_report_css_list,
contract_report_js_list=contract_report_js_list,
contract_short_title=contract_short_title,
contract_description=contract_description,
contract_source_person_title=contract_source.get("contributor_title_string").split(','),
contract_include_history=contract_include_history_table,
contract_logo_url=context.Base_setUrl(path=contract_source.get("enhanced_logo_url"), display="small"),
contract_logo_title=contract_theme.get("theme_logo_description"),
contract_reference=contract_reference,
contract_revision=contract_revision,
contract_version=contract_version,
contract_short_date=contract_short_date,
contract_full_reference=contract_full_reference,
contract_source_organisation_title=contract_source.get("organisation_title") or blank,
contract_content=contract_content,
contract_table_of_content=contract_table_of_content
)
if contract_format == "html":
return context.Base_finishWebPageCreation(
doc_save=contract_save,
doc_version=contract_version,
doc_title=contract_title,
doc_relative_url=contract_relative_url,
doc_aggregate_list=contract_aggregate_list,
doc_language=contract_language,
doc_modification_date=contract_modification_date,
doc_reference=contract_reference,
doc_full_reference=contract_full_reference,
doc_html_file=contract_output
)
return context.Base_convertHtmlToSingleFile(contract_output, allow_script=True)
# ============================= Format: pdf ====================================
elif contract_format == "pdf":
contract_cover = context.WebPage_createContractCover(
contract_theme=contract_theme.get("theme"),
contract_title=contract_title,
contract_language=contract_language,
contract_theme_css_font_list=contract_theme.get("theme_css_font_list"),
contract_theme_css_url=contract_theme.get("theme_css_url"),
contract_template_css_url=contract_theme.get("template_css_url"),
contract_short_title=contract_short_title,
contract_description=contract_description,
contract_source_person_title=contract_source.get("contributor_title_string").split(",")
)
contract_history = context.WebPage_createContractTableOfHistory(
contract_history_section_list = contract_history_section_list,
contract_theme=contract_theme.get("theme"),
contract_title=contract_title,
contract_language=contract_language,
contract_theme_css_font_list=contract_theme.get("theme_css_font_list"),
contract_theme_css_url=contract_theme.get("theme_css_url"),
contract_theme_logo_url=context.Base_setUrl(path=contract_source.get("enhanced_logo_url"), display="small"),
contract_theme_logo_alt=contract_theme.get("theme_logo_alt"),
contract_template_css_url=contract_theme.get("template_css_url"),
contract_include_history=contract_include_history_table
)
# contract_references created and added above
contract_content = context.WebPage_createContractContent(
contract_format=contract_format,
contract_rendering_fix=contract_rendering_fix,
contract_theme=contract_theme.get("theme"),
contract_title=contract_title,
contract_language=contract_language,
contract_theme_css_font_list=contract_theme.get("theme_css_font_list"),
contract_theme_css_url=contract_theme.get("theme_css_url"),
contract_template_css_url=contract_theme.get("template_css_url"),
contract_report_css_list=contract_report_css_list,
contract_report_js_list=contract_report_js_list,
contract_content=contract_content,
)
contract_head = context.WebPage_createContractHeader(
contract_theme=contract_theme.get("theme"),
contract_title=contract_title,
contract_language=contract_language,
contract_theme_css_font_list=contract_theme.get("theme_css_font_list"),
contract_theme_css_url=contract_theme.get("theme_css_url"),
contract_template_css_url=contract_theme.get("template_css_url"),
contract_logo_url=context.Base_setUrl(path=contract_source.get("enhanced_logo_url"), display="small"),
contract_logo_title=contract_theme.get("theme_logo_description"),
contract_short_title=contract_short_title,
contract_reference=contract_reference,
contract_revision=contract_revision,
contract_version=contract_version,
contract_short_date=contract_short_date
)
contract_foot = context.WebPage_createContractFooter(
contract_theme=contract_theme.get("theme"),
contract_title=contract_title,
contract_language=contract_language,
contract_theme_css_font_list=contract_theme.get("theme_css_font_list"),
contract_theme_css_url=contract_theme.get("theme_css_url"),
contract_theme_logo_url=context.Base_setUrl(path=contract_source.get("enhanced_logo_url"), display="small"),
contract_theme_logo_alt=contract_theme.get("theme_logo_description"),
contract_template_css_url=contract_theme.get("template_css_url"),
contract_full_reference=contract_full_reference,
contract_source_organisation_title=contract_source.get("organisation_title") or blank,
)
# ================ encode and build cloudoo elements =========================
header_embedded_html_data = context.Base_convertHtmlToSingleFile(contract_head, allow_script=True)
before_toc_data_list = [
b64encode(context.Base_convertHtmlToSingleFile(contract_cover, allow_script=True)),
]
after_toc_data_list = []
if contract_include_history_table:
before_toc_data_list.append(
b64encode(context.Base_convertHtmlToSingleFile(contract_history, allow_script=True))
)
#if contract_include_reference_table:
# after_toc_data_list.append(
# b64encode(context.Base_convertHtmlToSingleFile(contract_references, allow_script=True))
# )
xsl_style_sheet_data = contract_table_of_content
embedded_html_data = context.Base_convertHtmlToSingleFile(contract_content, allow_script=True)
footer_embedded_html_data = context.Base_convertHtmlToSingleFile(contract_foot, allow_script=True)
margin_top = 40
margin_bottom = 20
pdf_file = context.Base_cloudoooDocumentConvert(embedded_html_data, "html", "pdf", conversion_kw=dict(
encoding="utf8",
margin_top=margin_top,
margin_bottom=margin_bottom,
toc=True if contract_include_content_table else False,
before_toc_data_list=before_toc_data_list,
xsl_style_sheet_data=b64encode(xsl_style_sheet_data),
after_toc_data_list=after_toc_data_list,
header_html_data=b64encode(header_embedded_html_data),
header_spacing=10,
footer_html_data=b64encode(footer_embedded_html_data),
footer_spacing=3,
)
)
return context.WebPage_finishPdfCreation(
doc_save=contract_save,
doc_version=contract_version or "001",
doc_title=contract_title,
doc_relative_url=contract_relative_url,
doc_aggregate_list=contract_aggregate_list,
doc_language=contract_language,
doc_modification_date=contract_modification_date,
doc_reference=contract_reference,
doc_full_reference=contract_full_reference,
doc_pdf_file=pdf_file
)
<?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>*args,**kw</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>WebPage_viewAsContract</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
......@@ -140,14 +140,24 @@ def removeEmptyDetails(my_content):
def addLastSlide(my_last_slide):
# XXXX This condition is not accurate
if my_last_slide.count("<div") != 2:
last_slide_relative_url = pref.getPreferredCorporateIdentityTemplateSlideLastSlideRelativeUrl()
if last_slide_relative_url:
# try:
last_slide = doc.restrictedTraverse(last_slide_relative_url)
if last_slide is not None:
return last_slide.getTextContent()
#except AttributeError:
# last_slide_content = blank
last_slide=None
# search first through web reference
if doc_theme['theme']:
last_slide_list = context.portal_catalog(
portal_type='Web Page',
reference='%s-Marketing.Slideshow.Last.Slide' % doc_theme['theme'].upper(),
limit=1)
if last_slide_list:
last_slide=last_slide_list[0]
if not last_slide:
# get default one
last_slide_relative_url = pref.getPreferredCorporateIdentityTemplateSlideLastSlideRelativeUrl()
if last_slide_relative_url:
last_slide = doc.restrictedTraverse(last_slide_relative_url)
if last_slide:
return last_slide.getTextContent()
return blank
# -------------------------- Setup ---------------------------------------------
......@@ -169,6 +179,8 @@ override_source_organisation_title = kw.get("override_source_organisation_title"
override_batch_mode = kw.get('batch_mode')
override_source_person_title = None
doc_theme = doc.Base_getThemeDict(doc_format=doc_format, css_path="template_css/slide", skin="Slide")
# --------------------- Convert any page into a slideshow ----------------------
# Note: mileage varies depending on the cleanliness of the HTML page
if doc_is_slideshow is None:
......@@ -250,7 +262,6 @@ if doc_reference is None:
doc_full_reference = '-'.join([doc_reference, doc_version, doc_language])
# --------------------------- Layout Parameters --------------------------------
doc_theme = doc.Base_getThemeDict(doc_format=doc_format, css_path="template_css/slide", skin="Slide")
doc_css = ''.join(['.ci-slideshow-intro.present:not(.slide-background):before {',
'content: "%s";' % (doc_theme.get("theme_logo_description")),
'background: #FFF url("%s") center no-repeat;' % (doc.Base_setUrl(path=doc_theme.get("theme_logo_url"), display="medium")),
......
<?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>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>action</string> </key>
<value> <string>WebPage_exportAsContract</string> </value>
</item>
<item>
<key> <string>action_title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string>Export this web page as a Contract in the chosen format.</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>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>
<string>format</string>
<string>include_history_table</string>
<string>include_content_table</string>
<string>include_reference_table</string>
<string>display_svg</string>
<string>document_save</string>
<string>portal_skin</string>
</list>
</value>
</item>
<item>
<key> <string>right</string> </key>
<value>
<list>
<string>include_linked_content</string>
<string>include_report_content</string>
</list>
</value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>WebPage_viewExportAsContractDialog</string> </value>
</item>
<item>
<key> <string>method</string> </key>
<value> <string>POST</string> </value>
</item>
<item>
<key> <string>name</string> </key>
<value> <string>WebPage_viewExportAsContractDialog</string> </value>
</item>
<item>
<key> <string>pt</string> </key>
<value> <string>form_dialog</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>Export Contract</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>WebPage_updateContractDialog</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>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>
<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> <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>page</string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string>The content of the document considered as a text 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>40</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>codemirror</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>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>100</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="500" style="background-color:#FFFFFF;box-sizing:border-box;-wekbit-box-sizing:border-box;" src="%s/WebPage_viewAsWeb?portal_skin=Contract&amp;override_document_description=%s&amp;override_document_short_title=%s&amp;override_document_title=%s&amp;override_document_version=%s&amp;override_logo_reference=%s&amp;override_source_organisation_title=%s&amp;override_source_person_title=%s&amp;include_content_table=%s&amp;include_history_table=%s&amp;include_reference_table=%s&amp;include_linked_content=%s&amp;include_report_content=%s&amp;display_svg=%s" name="default_version"></iframe>\' % (context.absolute_url(), context.REQUEST.get("override_document_description", ""), context.REQUEST.get("override_document_short_title", ""), context.REQUEST.get("override_document_title", ""), context.REQUEST.get("override_document_version", ""), context.REQUEST.get("override_logo_reference", ""), context.REQUEST.get("override_source_organisation_title", ""), context.REQUEST.get("override_source_person_title", ""),context.REQUEST.get("include_content_table", 0), context.REQUEST.get("include_history_table", 0),context.REQUEST.get("include_reference_table", 0),context.REQUEST.get("include_linked_content", 0),context.REQUEST.get("include_report_content", 0), context.REQUEST.get("display_svg", "png"))
]]></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>default</string>
<string>description</string>
<string>items</string>
<string>orientation</string>
<string>title</string>
</list>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>display_svg</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>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>default</string> </key>
<value> <string></string> </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>items</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>orientation</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>default</string> </key>
<value> <string>png</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string>Format to display SVG images in.</string> </value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string>my_radio_field</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>Base_viewFieldLibrary</string> </value>
</item>
<item>
<key> <string>items</string> </key>
<value>
<list>
<tuple>
<string>svg</string>
<string>svg</string>
</tuple>
<tuple>
<string>png</string>
<string>png</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>orientation</string> </key>
<value> <string>horizontal</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Svg Output Format</string> </value>
</item>
</dictionary>
</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>default</string>
<string>description</string>
<string>title</string>
</list>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>document_save</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>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>default</string> </key>
<value> <string></string> </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>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>default</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string>Save generated document in Document module.</string> </value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string>my_checkbox</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>Base_viewFieldLibrary</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Save in Document Module</string> </value>
</item>
</dictionary>
</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>default</string>
<string>description</string>
<string>enabled</string>
<string>items</string>
</list>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>format</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>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </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>items</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>default</string> </key>
<value> <string>html</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string>Document output format.</string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string>my_dialog_mode_format</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>Base_viewFieldLibrary</string> </value>
</item>
<item>
<key> <string>items</string> </key>
<value>
<list>
<tuple>
<string>html</string>
<string>html</string>
</tuple>
<tuple>
<string>pdf</string>
<string>pdf</string>
</tuple>
<tuple>
<string>mhtml</string>
<string>mhtml</string>
</tuple>
</list>
</value>
</item>
</dictionary>
</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>default</string>
<string>description</string>
<string>title</string>
</list>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>include_content_table</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>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>default</string> </key>
<value> <string></string> </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>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>default</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string>Display table of content.</string> </value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string>my_checkbox</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>Base_viewFieldLibrary</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Include Table Of Content</string> </value>
</item>
</dictionary>
</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>default</string>
<string>description</string>
<string>title</string>
</list>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>include_history_table</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>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>default</string> </key>
<value> <string></string> </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>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>default</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string>Display table of versions and signatures.</string> </value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string>my_checkbox</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>Base_viewFieldLibrary</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Include History Table</string> </value>
</item>
</dictionary>
</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>default</string>
<string>description</string>
<string>title</string>
</list>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>include_linked_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>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>default</string> </key>
<value> <string></string> </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>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>default</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string>Embed linked internal documents.</string> </value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string>my_checkbox</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>Base_viewFieldLibrary</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Embed Linked Documents</string> </value>
</item>
</dictionary>
</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>default</string>
<string>description</string>
<string>title</string>
</list>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>include_reference_table</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>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>default</string> </key>
<value> <string></string> </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>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>default</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string>Display table of references.</string> </value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string>my_checkbox</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>Base_viewFieldLibrary</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Include Reference Tables</string> </value>
</item>
</dictionary>
</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>default</string>
<string>description</string>
<string>title</string>
</list>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>include_report_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>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>default</string> </key>
<value> <string></string> </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>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>default</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string>Generate and embed linked report documents.</string> </value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string>my_checkbox</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>Base_viewFieldLibrary</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Embed Report Documents</string> </value>
</item>
</dictionary>
</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>title</string>
</list>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>portal_skin</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>
</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> <string></string> </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>title</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>hidden</string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string>Book</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string>Portal skin to be used.</string> </value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string>your_portal_skin</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>Base_viewDialogFieldLibrary</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Portal Skin</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
/* === font-size === */
.ci-contract h1 {
font-size: 12.7mm; /* 36pt; */ /* 48px; */
}
.ci-contract h2 {
font-size: 7.9375mm; /* 22.5pt; */ /* 30px; */
}
.ci-contract h3 {
font-size: 6.879167mm; /* 19.5pt; */ /* 26px; */
}
.ci-contract .ci-contract-header .ci-contract-header-title
/*,
.ci-contract table thead tr:first-child:nth-last-child(2) th,
.ci-contract table thead tr:first-child:nth-last-child(2) td
*/
{
font-size: 6.35mm; /* 18pt; */ /* 24px; */
}
.ci-contract div.ci-contract-box-offer span,
.ci-contract div.ci-contract-box-offer-milestone span {
font-size: 5.820833mm; /* 16.5pt; */ /* 22px */
}
.ci-contract div.ci-contract-box-offer *,
.ci-contract div.ci-contract-box-offer-milestone * {
font-size: 4.7625mm; /* 13.5pt; */ /* 18px; */
/* font-size: 5.820833mm; 16.5pt; */ /* 22px */
}
.ci-contract-ci-contract-table-of-content li,
.ci-contract h4,
.ci-contract h5,
.ci-contract h6,
.ci-contract span,
.ci-contract p,
.ci-contract a,
.ci-contract li,
.ci-contract p,
.ci-contract pre {
font-size: 5.29167mm; /* 15pt; */ /* 20px; */
}
.ci-contract .ci-contract-img + span,
.ci-contract caption,
.ci-contract table thead th,
.ci-contract table thead td,
.ci-contract table tbody td,
.ci-contract table tbody td span,
.ci-contract table tbody td p,
.ci-contract table tbody td li,
.ci-contract table tbody td em,
.ci-contract table tbody td strong,
.ci-contract table tbody td a,
.ci-contract table tbody td em,
.ci-contract pre code {
font-size: 4.7625mm; /* 13.5pt; */ /* 18px; */
}
.ci-contract .ci-contract-header td:last-child div {
font-size: 4.7625mm; /* 13.5pt; */ /* 18px; */
}
.ci-contract .ci-contract-header .ci-contract-header-subtitle,
.ci-contract .ci-contract-header .ci-contract-header-value,
.ci-contract .ci-contract-header .ci-contract-header-key {
font-size: 4.4979167mm; /* 12.75pt; */ /* 17px; */
}
.ci-contract .ci-contract-footer .ci-contract-footer-copy,
.ci-contract .ci-contract-footer span {
font-size: 4.23333mm; /* 12pt; */ /* 16px; */
}
.ci-contract table tbody tr td ul li:before,
.ci-contract .ci-contract-box-offer div,
.ci-contract .ci-contract-box-offer-line div,
.ci-contract .ci-contract-box-offer-milestone div,
.ci-contract .ci-contract-box-offer div b,
.ci-contract .ci-contract-box-offer-line div b,
.ci-contract .ci-contract-box-offer-milestone div b {
font-size: 3.704167mm; /* 10.5pt; */ /* 14px; */ /* 8px; */
}
/* === cover === */
.ci-contract .ci-contract-cover p.ci-contract-cover-faux-h1 {
font-family: "Roboto" !important;
font-weight: bold !important;
font-size: 12.7mm; /* 36pt; */ /* 48px; */
}
.ci-contract .ci-contract-cover p.ci-contract-cover-faux-h2 {
font-family: "Arial";
font-weight: lighter;
font-style: normal;
font-size: 12.7mm; /* 36pt; */ /* 48px; */
}
.ci-contract .ci-contract-cover p.ci-contract-cover-description {
font-family: "Roboto";
font-weight: lighter;
font-style: italic;
font-size: 6.35mm; /* 18pt; */ /* 24px; */
}
.ci-contract .ci-contract-cover p.ci-contract-cover-author-list span {
font-family: "Roboto";
font-weight: lighter;
font-style: normal;
font-size: 6.35mm; /* 18pt; */ /* 24px; */
}
.ci-contract p em,
.ci-contract p i {
font-style: italic;
}
/* === color === */
/* .ci-contract a:not([href*="#"]), */
.ci-contract a:not([id]),
.ci-contract td i,
.ci-contract a span
/*, .ci-contract .ci-contract-table table td[colspan]*/ {
color: #1c76bb !important;
}
.ci-contract * {
color: #000 /* XXX Why? !important */;
}
.ci-contract a {
text-decoration: none;
}
/* === text align === */
/* text align */
.ci-contract p {
text-align: justify;
}
.ci-contract table tbody td ul {
text-align: left;
font-weight: normal;
margin: 0;
margin-left: 4pt;
padding: 0;
}
/* Chinese */
.ci-zh .ci-contract p {
text-align: initial;
}
/* === page breaks === */
.ci-contract h1 {
page-break-before: always;
page-break-after: avoid;
}
.ci-contract .custom-force-page-break,
.ci-contract .custom-resume {
page-break-before: always;
}
.ci-contract h2,
.ci-contract h3,
.ci-contract h4,
.ci-contract h5 {
page-break-after: avoid;
}
.ci-contract h1 + img,
.ci-contract h2 + img,
.ci-contract h2 + p {
page-break-before: avoid;
}
.ci-contract table,
.ci-contract table caption,
.ci-contract img,
.ci-contract tr {
page-break-inside: avoid;
}
.ci-contract section:not(:last-child) {
page-break-after: always;
page-break-inside: always;
}
/* clear blank page after custom tables */
.ci-contract table.ci-contract-version-list {
page-break-after: avoid !important;
}
.ci-contract tbody + caption,
.ci-contract .ci-contract-img + span {
page-break-inside: avoid;
page-break-before: avoid;
page-break-after: avoid;
}
.ci-contract .ci-contract-box-offer {
page-break-inside: avoid;
}
/* === header/footer === */
.ci-contract .ci-contract-header,
.ci-contract .ci-contract-footer {
border-collapse: collapse;
width: 100%;
table-layout: fixed;
}
.ci-contract .ci-contract-header {
margin-top: 0;
}
.ci-contract .ci-contract-header td div,
.ci-contract .ci-contract-header div,
.ci-contract .ci-contract-header .ci-contract-header-sidebyside,
.ci-contract .ci-contract-header .ci-contract-header-sidebyside-first,
.ci-contract .ci-contract-header .ci-contract-header-sidebyside-last {
line-height: 18px;
height: 18px;
}
.ci-contract .ci-contract-header td,
.ci-contract .ci-contract-footer td {
text-align: center;
margin: 0;
vertical-align: middle;
padding: 0;
padding-bottom: 3mm;
}
.ci-contract .ci-contract-footer td span {
font-weight: 300;
}
.ci-contract .ci-contract-header td {
padding-top: 2mm;
border: transparent;
}
/* freeze table cell widths */
.ci-contract .ci-contract-header td:nth-child(1),
.ci-contract .ci-contract-header td:nth-child(3),
.ci-contract .ci-contract-footer td:nth-child(2),
.ci-contract .ci-contract-footer td:nth-child(3) {
width: 30%;
}
.ci-contract .ci-contract-header td:nth-child(2),
.ci-contract .ci-contract-footer td:nth-child(1) {
width: 40%;
}
.ci-contract .ci-contract-footer td:nth-child(1) {
text-align: left;
}
.ci-contract .ci-contract-footer td:nth-child(3) {
text-align: right;
}
/* header title/subtitle */
.ci-contract .ci-contract-header .ci-contract-header-title,
.ci-contract .ci-contract-header .ci-contract-header-subtitle {
font-weight: bold;
}
.ci-contract .ci-contract-header .ci-contract-header-title {
padding-top: 2mm;
padding-bottom: 2mm;
}
/* header image dimensions */
.ci-contract .ci-contract-header .ci-contract-header-image-wkhtmltopdf-image-wrapper {
padding-top: 1mm;
min-height: 25mm;
display: inline;
vertical-align: middle;
}
/* BACKUP:
fits all logos, unless you have to use a really wiiiiide logo like Nexedi
*/
.ci-contract .ci-contract-header .ci-contract-header-image-wkhtmltopdf-image-wrapper img {
height: auto;
display: inline-block;
width: auto;
}
/* hardcode here we go.
NOTE: logos will disappear in wkhtmltopdf if they go beyond the available space
.ci-contract .ci-contract-header .ci-contract-header-image-wkhtmltopdf-image-wrapper img {
height: auto;
display: inline-block;
width: 60%;
vertical-align: -webkit-baseline-middle;
}
*/
/* header spec section */
.ci-contract .ci-contract-header td:last-child {
text-align: left;
padding-left: 2mm;
}
.ci-contract .ci-contract-header td:last-child .ci-contract-header-key {
min-width: 25%;
display: inline-block;
font-weight: 300;
}
.ci-contract .ci-contract-header td:last-child .ci-contract-header-value {
font-weight: bold;
width: auto;
}
.ci-contract .ci-contract-header .ci-contract-header-sidebyside-last {
display: inline-block;
width: 58%;
}
.ci-contract .ci-contract-header .ci-contract-header-sidebyside-first {
display: inline-block;
width: 40%;
}
.ci-contract .ci-contract-header .ci-contract-header-sidebyside-first .ci-contract-header-key {
width: 62.5%;
}
.ci-contract .ci-contract-header td div.ci-contract-header-sidebyside {
position: relative;
top: -2px;
}
.ci-contract .ci-contract-header td div:last-child {
padding-top: 2px;
}
.ci-contract .ci-contract-header td:last-child .ci-contract-header-minify {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 70%;
}
.ci-contract .ci-contract-header td:last-child div {
vertical-align: middle;
}
.ci-contract .ci-contract-header div span {
line-height: 16px;
height: 16px;
display: inline-block;
vertical-align: middle;
}
.ci-contract .ci-contract-footer th,
.ci-contract .ci-contract-footer td {
border: 0 none;
}
.ci-contract .ci-contract-footer .ci-contract-footer-copy {
padding-right: 2mm;
}
/* === document cover === */
.ci-contract .ci-contract-cover p {
text-align: center;
}
.ci-contract .ci-contract-cover .ci-contract-cover-faux-h1 {
text-decoration: uppercase;
padding-top: 40%;
padding-bottom: 2%;
}
.ci-contract .ci-contract-cover .ci-contract-cover-description {
margin: 10mm 0;
font-weight: normal;
}
.ci-contract .ci-contract-cover {
margin-bottom: 20%;
}
/* === tables === */
/* fix header/footer clipping content */
.ci-contract thead {
display: table-header-group;
}
.ci-contract tfoot {
display: table-row-group;
}
.ci-contract table tr {
page-break-inside: avoid;
}
.ci-contract .ci-contract-table-highlight td,
.ci-contract table tr[data-class='ci-contract-table-highlight'] td {
background-color: #ffa07a;
}
.ci-contract .ci-contract-table-section td,
.ci-contract table tr[data-class='ci-contract-table-section'] td,
.ci-contract .ci-contract-table-section-depth-1 td {
background-color: #e0e0e0;
}
.ci-contract .ci-contract-table-section-depth-2 td {
background-color: #f5f5f5;
}
.ci-contract table td[colspan] {
padding: 0;
}
.ci-contract table table td[colspan] {
padding-left: 2mm;
padding-right: 2mm;
}
.ci-contract .ci-contract-table table {
margin-right: 0;
margin-left: auto;
border-collapse: collapse;
width: 100%;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
vertical-align: top;
border-left-color: transparent;
border-top-color: transparent;
border-right-color: transparent;
}
.ci-contract .ci-contract-table table td {
text-align: left;
}
.ci-contract .ci-contract-table table td[rowspan] {
border-left-color: transparent;
vertical-align:top;
}
.ci-contract .ci-contract-table table td[rowspan],
.ci-contract .ci-contract-table table td[colspan] {
border-left-color: transparent;
}
.ci-contract .ci-contract-table table td[colspan] {
border-bottom-color: transparent;
}
.ci-contract .ci-contract-table table tr:nth-child(1) td {
border-top-color: transparent;
}
.ci-contract .ci-contract-table table tr td:last-child {
border-right-color: transparent;
}
/* multi-table headers */
.ci-contract table thead {
display: table-header-group;
}
.ci-contract table tfoot {
display: table-row-group;
}
.ci-contract table tr {
page-break-inside: avoid;
}
/* spacing */
.ci-contract table {
border-collapse: collapse;
width: 100%;
margin: 0 auto;
}
/* === table == */
.ci-contract section table thead th {
vertical-align: middle;
padding-top: 2mm;
padding-bottom: 2mm;
}
.ci-contract table {
width: 100%;
margin: initial;
background-color: transparent !important;
}
.ci-contract table th,
.ci-contract table td {
border: 1px solid #a1a1a1;
padding: 0 2mm;
}
.ci-contract table th {
text-align: center;
}
/* opinionated align for content tables, overwrite in html if required */
.ci-contract table:not(.ci-contract-header):not(.ci-contract-footer):not(.ci-contract-table) tbody td,
.ci-contract table:not(.ci-contract-header):not(.ci-contract-footer):not(.ci-contract-table) tbody th {
/*text-align: center;*/
}
/*
.ci-contract table:not(.ci-contract-header):not(.ci-contract-footer):not(.ci-contract-table) tbody tr td:first-child,
.ci-contract table:not(.ci-contract-header):not(.ci-contract-footer):not(.ci-contract-table) tbody tr th:first-child {
text-align: right;
}
*/
.ci-contract table thead tr th p {
color: black !important;
}
.ci-contract a + table tbody tr td:first-child,
.ci-contract a + table tbody tr th:first-child {
/*text-align: center;*/
}
.ci-contract a + table tbody tr td:not(:first-child),
.ci-contract a + table tbody tr th:not(:first-child) {
/*text-align: right;*/
}
.ci-contract p + table td a {
display: block;
}
/* table formatting */
.ci-contract table {
border-collapse: collapse;
}
.ci-contract table td {
padding-left: 2mm;
word-wrap: break-word;
}
/* sigh... Fcuk Editor... backgrounds */
.ci-contract table:not(.ci-contract-header):not(.ci-contract-footer) thead tr td,
.ci-contract table:not(.ci-contract-header):not(.ci-contract-footer) thead tr th,
.ci-contract table:not(.ci-contract-header):not(.ci-contract-footer) thead tr th span,
.ci-contract table:not(.ci-contract-header):not(.ci-contract-footer) tbody tr:first-child td,
.ci-contract table:not(.ci-contract-header):not(.ci-contract-footer) tbody tr:first-child th {
background-color: #e0e0e0;
font-weight: bold;
/*text-align: center;*/
}
.ci-contract .ci-contract-table tbody tr td,
.ci-contract .ci-contract-table tbody tr th {
text-align: center;
}
.ci-contract table thead tr td,
.ci-contract table thead tr th {
text-align: center;
}
.ci-contract table:not(.ci-contract-header):not(.ci-contract-footer) thead + tbody tr:first-child td,
.ci-contract table:not(.ci-contract-header):not(.ci-contract-footer) thead + tbody tr:first-child th {
background-color: #ffffff;
font-weight: normal;
}
.ci-contract table.ci-document-page-header tbody tr td,
.ci-contract table.ci-document-page-footer tbody tr td {
/* background-color: #ffffff !important; */
/*text-align: center;*/
font-weight: 100;
}
.ci-contract table thead tr td,
.ci-contract table thead tr th {
padding-top: 2mm;
padding-bottom: 2mm;
}
/* override header with p tags eating maring/padding */
.ci-contract table thead tr td p
.ci-contract table thead tr th p {
padding: 0;
margin: 0;
}
/* === list formatting === */
.ci-contract ol {
list-style-position: inside;
}
.ci-contract ul {
list-style: none;
list-style-position: inside;
}
.ci-contract ul li,
.ci-contract ol li {
padding-left: 16px;
/*text-indent: -24px;*/
}
.ci-contract ul li:before {
content: "•";
padding-right: 16px;
margin-top: 2px;
}
/* === header auto-numbering 1.2.3.4. === */
/* table-of-content numbering (numbering x.x.x.x) */
/* faux-h1 */
.ci-contract p.ci-contract-toc-faux-h1 {
text-align: left;
font-weight: normal;
padding-top: 10mm;
margin-bottom: 25%;
padding-left: 2mm;
font-size: 12.7mm; /* 36pt; */ /* 48px; */
}
.ci-contract .ci-contract-table-of-content + ol,
.ci-contract .ci-contract-table-of-content + ol ol {
counter-reset: item;
list-style: none;
margin: 0;
}
.ci-contract .ci-contract-table-of-content + ol > li,
.ci-contract .ci-contract-table-of-content + ol ol > li {
counter-increment: item;
}
.ci-contract .ci-contract-table-of-content + ol > li:before,
.ci-contract .ci-contract-table-of-content + ol ol > li:before {
content: counters(item, ".") ". ";
padding-right: 0.5em;
}
.ci-contract .ci-contract-table-of-content + ol li ol li:before {
content: counters(item, ".") " ";
}
.ci-contract .ci-contract-table-of-content ~ h1 ~ ol > li:before,
.ci-contract .ci-contract-table-of-content ~ h1 ~ ol ol > li:before,
.ci-contract .ci-contract-table-of-content ~ h2 ~ ol > li:before,
.ci-contract .ci-contract-table-of-content ~ h2 ~ ol ol > li:before,
.ci-contract .ci-contract-table-of-content ~ h3 ~ ol > li:before,
.ci-contract .ci-contract-table-of-content ~ h3 ~ ol ol > li:before,
.ci-contract .ci-contract-table-of-content ~ h4 ~ ol > li:before,
.ci-contract .ci-contract-table-of-content ~ h4 ~ ol ol > li:before {
counter-increment: initial;
content: none;
}
.ci-contract {
counter-reset: h1;
}
.ci-contract h1 {
counter-reset: h2;
}
.ci-contract h2 {
counter-reset: h3;
}
.ci-contract h3 {
counter-reset: h4;
}
.ci-contract h4 {
counter-reset: h5;
}
.ci-contract h5 {
counter-reset: h6;
}
.ci-contract h1:before {
counter-increment: h1;
content: counter(h1) ". ";
}
.ci-contract h2:before {
counter-increment: h2;
content: counter(h1) "." counter(h2) ". ";
}
.ci-contract h3:before {
counter-increment: h3;
content: counter(h1) "." counter(h2) "." counter(h3) ". ";
}
.ci-contract h4:before {
counter-increment: h4;
content: counter(h1) "." counter(h2) "." counter(h3) "." counter(h4) ". ";
}
.ci-contract h5:before {
counter-increment: h5;
content: counter(h1) "." counter(h2) "." counter(h3) "." counter(h4) "." counter(h5) ". ";
}
.ci-contract h6:before {
counter-increment: h6;
content: counter(h1) "." counter(h2) "." counter(h3) "." counter(h4) "." counter(h5) "." counter(h6) ". ";
}
.ci-contract .ci-contract-table-of-content ol {
text-indent: 0;
}
.ci-contract .ci-contract-table-of-content ol ol {
text-indent: 3em;
}
.ci-contract .ci-contract-table-of-content ol ol ol {
text-indent: 6em;
}
.ci-contract .ci-contract-table-of-content ol ol ol ol {
text-indent: 9em;
}
.ci-contract .ci-contract-table-of-content ol ol ol ol ol {
text-indent: 12em;
}
.ci-contract .ci-contract-table-of-content ol ol ol ol ol ol {
text-indent: 15em;
}
.ci-contract .ci-contract-table-of-content-lead-item:not(:first-child) {
padding-top: 10mm;
}
.ci-contract-table-of-content ol li div {
position: relative;
overflow: hidden;
}
.ci-contract-table-of-content ol li div:after {
content: "";
position: absolute;
bottom: 3px;
width: 100%;
border-bottom: 1px dotted #000;
z-index: 500;
}
.ci-contract .ci-contract-table-of-content ol li div {
height: 28px;
line-height: 24px;
}
.ci-contract .ci-contract-table-of-content ol ol li div {
height: 24px;
line-height: 20px;
}
.ci-contract .ci-contract-table-of-content ol li {
counter-increment: item;
}
.ci-contract .ci-contract-table-of-content ol li div:before {
content: counters(item, ".") ". ";
padding-right: 0.5em;
}
.ci-contract .ci-contract-table-of-content li ol li div:before {
content: counters(item, ".") " ";
}
.ci-contract .ci-contract-table-of-content {
display: block;
width: 100%;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
padding-right: 10px;
}
.ci-contract .ci-contract-table-of-content ol {
counter-reset: item;
list-style-type: none;
margin: 0;
padding: 0;
display: block;
width: inherit;
}
.ci-contract .ci-contract-table-of-content li ol li {
margin: 0;
}
.ci-contract .ci-contract-table-of-content a {
text-decoration:none;
color: black;
}
/* === custom margins === */
.ci-contract h1 {
text-align: left;
font-weight: normal;
padding-top: 10mm;
padding-left: 2mm;
}
.ci-contract h2 {
margin-top: 10mm; /* 0.67em */
}
.ci-contract h3 {
margin-top: 12mm; /* 1em */
}
.ci-contract h4 {
margin-top: 14mm; /* 1.33em */
}
.ci-contract h5 {
margin-top: 16mm /* 1.67em */;
}
.ci-contract h6 {
margin-top: 18mm /* 2.33em */;
}
.ci-contract p {
margin-top: 5mm;
margin-bottom: 5mm;
}
/* === indent all paragraphs === */
.ci-contract p {
text-indent: 5mm;
}
.ci-contract table {
margin-top: 5mm;
margin-bottom: 5mm;
margin-left: auto;
margin-right: auto;
}
.ci-contract table table {
margin-top: 0;
}
/* === image and table captions */
/* XXX caption should be inside .ci-contract-img */
.ci-contract .ci-contract-img > img {
display: block;
margin: 0 auto 0;
padding-top: 20px;
max-width: 240mm;
page-break-after: avoid;
width: 50%;
}
.ci-contract .ci-contract-img > img ~ span {
margin-left: 3cm;
display:inline-block;
}
.ci-contract .ci-contract-img + span {
margin-left: 3cm;
display:inline-block;
}
.ci-contract table caption,
.ci-contract .ci-contract-caption {
text-align: center;
padding-top: 4mm;
padding-bottom: 5mm;
caption-side: bottom;
width: auto;
}
/* customizations */
/* editor adding <p>... */
html .ci-contract table td p {
margin: 0;
text-indent: 0;
display:inline-block;
}
html .ci-contract table td p:first-child {
padding: 0;
}
html .ci-contract table td p:not(:first-child){
padding-left: 5px;
}
/* === code boxes === */
.ci-contract pre {
text-align: left;
font-family: TexGyreCursor;
white-space: pre-wrap;
word-wrap: break-word;
padding: 10px 20px 36px;
background-color: rgb(234,246,246);
/*
white-space: pre;
word-wrap: break-word;
overflow-wrap: break-word;
*/
/*
break after 100 characters - https://stackoverflow.com/a/16756641
max-width: 40em;
max-width: 100ch;
*/
}
.ci-contract pre code {
display: block;
background-color: rgb(234,246,246);
}
.ci-contract p code,
.ci-contract blockquote {
background-color: rgb(234,246,246);
}
/* === special headers === */
/* distribution list */
.ci-contract .ci-contract thead th {
vertical-align: middle;
padding-top: 2mm;
padding-bottom: 2mm;
}
.ci-contract .ci-contract-distribution-list tbody tr td ul,
/* backcompat */
.ci-contract section tbody tr td ul {
vertical-align: top;
margin-left: 0;
padding-left: 0;
display: inline-block;
width: 49%;
padding-top: 5mm;
padding-bottom: 5mm;
}
.ci-contract .ci-contract-distribution-list tbody tr td ul li,
/* backcompat */
.ci-contract section tbody tr td ul li {
padding: 0;
list-style: none;
text-indent: 0;
line-height: 18pt;
text-align: left;
}
.ci-contract .ci-contract-distribution-list tbody tr td ul li:before,
/* backcompat */
.ci-contract section tbody tr td ul li:before {
content: "■";
padding-right: 8px;
vertical-align: middle;
}
.ci-contract .ci-contract-distribution-list tbody tr td ul li span,
.ci-contract .ci-contract-distribution-list tbody tr td ul li div {
width: 46%;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
display: inline-block;
}
/* backcompat */
.ci-contract section tbody tr td ul li span,
.ci-contract section tbody tr td ul li div,
.ci-contract section tbody tr td ul li p {
display: inline-block;
width: 46%;
}
.ci-contract .ci-contract-distribution-list tbody tr td ul li,
.ci-contract .ci-contract-distribution-list tbody tr td ul div,
.ci-contract .ci-contract-distribution-list tbody tr td ul span,
/* backcompat */
.ci-contract section tbody tr td ul li,
.ci-contract section tbody tr td ul div,
.ci-contract section tbody tr td ul span {
vertical-align: middle;
}
/* Version List */
/* Signature List */
.ci-contract .ci-contract-signature-list tbody td {
padding-top: 2mm;
padding-bottom: 5mm;
}
.ci-contract .ci-contract-signature-list tbody td i,
.ci-contract .ci-contract-signature-list tbody td em {
display: block;
text-align: left;
text-indent: 2mm;
}
/* === reports === */
/* should have their own .css/.pdf.css file eventually */
.ci-contract .ci-contract-table .ci-contract-report-cell-left,
.ci-contract .ci-contract-table td[colspan] {
text-align: left;
}
.ci-contract .ci-contract-table .ci-contract-report-cell-right {
text-align: right;
}
/* === box items === */
/* Project Breakdown/Milestone List */
.ci-contract .ci-contract-box-offer,
.ci-contract div.ci-contract-box-offer-milestone,
/* backcompat */
.ci-document-box-offer,
div.ci-document-box-offer-milestone {
width: 100%;
}
.ci-contract .ci-contract-box-offer,
.ci-contract .ci-contract-box-id,
.ci-contract .ci-contract-box-coverage,
.ci-contract .ci-contract-box-begin,
.ci-contract .ci-contract-box-end,
.ci-contract .ci-contract-box-total-duration,
.ci-contract .ci-contract-box-duration,
.ci-contract .ci-contract-box-leader,
.ci-contract .ci-contract-box-resources,
.ci-contract .ci-contract-box-location,
.ci-contract .ci-contract-box-result,
.ci-contract .ci-contract-box-offer-milestone {
}
.ci-contract .ci-contract-box-offer b,
.ci-contract .ci-contract-box-offer-milestone b,
.ci-contract .ci-contract-box-offer-line b,
/* backcompat */
.ci-document-box-offer b,
.ci-document-box-offer-milestone b,
.ci-document-box-offer-line b{
font-weight: bold;
}
.ci-contract .ci-contract-box-detail,
/* backcompat */
.ci-document-box-detail {
table-layout: fixed;
}
.ci-contract .ci-contract-box-offer,
.ci-contract .ci-contract-box-offer-line,
.ci-contract .ci-contract-box-offer-milestone,
/* backcompat */
.ci-document-box-offer,
.ci-document-box-offer-line,
.ci-document-box-offer-milestone {
border: 1px solid #a1a1a1;
padding: 2px;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
-webkit-box-shadow: 10px 10px 0 #a1a1a1;
-moz-box-shadow: 10px 10px 0 #a1a1a1;
box-shadow: 10px 10px 0 #a1a1a1;
background-color: #fff;
}
.ci-contract .ci-contract-box-coverage,
/* backcompat */
.ci-document-box-coverage {
display: inline-block;
vertical-align: top;
width: 66%;
}
.ci-contract-box-location,
.ci-contract-box-resources,
.ci-contract-box-leader,
/* backcompat */
.ci-document-box-location,
.ci-document-box-resources,
.ci-document-box-leader {
display: inline-block;
vertical-align: top;
width: 33%;
}
.ci-contract .ci-contract-box-begin,
.ci-contract .ci-contract-box-end,
/* backcompat */
.ci-document-box-begin,
.ci-document-box-end {
display: inline-block;
vertical-align: top;
width: 33%;
}
.ci-contract .ci-contract-box-id,
/* backcompat */
.ci-document-box-id {
display: inline-block;
vertical-align: top;
width: 33%;
}
.ci-contract .ci-contract-box-duration,
/* backcompat */
.ci-document-box-duration {
display: inline-block;
vertical-align: top;
width: 33%;
}
.ci-contract .ci-contract-box-end + .ci-contract-box-resources,
/* backcompat */
.ci-document-box-end + .ci-document-box-resources {
margin-left: 20%;
}
.ci-contract .ci-contract-box-end + .ci-contract-box-resources,
/* backcompat */
.ci-document-box-end + .ci-document-box-resources {
margin-left: 20%;
}
\ 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>__name__</string> </key>
<value> <string>contract.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>
/* === font-size === */
.ci-contract h1 {
font-size: 12.7mm; /* 36pt; */ /* 48px; */
}
.ci-contract h2 {
font-size: 7.9375mm; /* 22.5pt; */ /* 30px; */
}
.ci-contract h3 {
font-size: 6.879167mm; /* 19.5pt; */ /* 26px; */
}
.ci-contract .ci-contract-header .ci-contract-header-title
/*,
.ci-contract table thead tr:first-child:nth-last-child(2) th,
.ci-contract table thead tr:first-child:nth-last-child(2) td
*/
{
font-size: 6.35mm; /* 18pt; */ /* 24px; */
}
.ci-contract div.ci-contract-box-offer span,
.ci-contract div.ci-contract-box-offer-milestone span {
font-size: 5.820833mm; /* 16.5pt; */ /* 22px */
}
.ci-contract div.ci-contract-box-offer *,
.ci-contract div.ci-contract-box-offer-milestone * {
font-size: 4.7625mm; /* 13.5pt; */ /* 18px; */
/* font-size: 5.820833mm; 16.5pt; */ /* 22px */
}
.ci-contract-ci-contract-table-of-content li,
.ci-contract h4,
.ci-contract h5,
.ci-contract h6,
.ci-contract span,
.ci-contract p,
.ci-contract a,
.ci-contract li,
.ci-contract p,
.ci-contract pre {
font-size: 5.29167mm; /* 15pt; */ /* 20px; */
}
.ci-contract .ci-contract-img + span,
.ci-contract caption,
.ci-contract table thead th,
.ci-contract table thead td,
.ci-contract table tbody td,
.ci-contract table tbody td span,
.ci-contract table tbody td p,
.ci-contract table tbody td li,
.ci-contract table tbody td em,
.ci-contract table tbody td strong,
.ci-contract table tbody td a,
.ci-contract table tbody td em,
.ci-contract pre code {
font-size: 4.7625mm; /* 13.5pt; */ /* 18px; */
}
.ci-contract .ci-contract-header td:last-child div {
font-size: 4.7625mm; /* 13.5pt; */ /* 18px; */
}
.ci-contract .ci-contract-header .ci-contract-header-subtitle,
.ci-contract .ci-contract-header .ci-contract-header-value,
.ci-contract .ci-contract-header .ci-contract-header-key {
font-size: 4.4979167mm; /* 12.75pt; */ /* 17px; */
}
.ci-contract .ci-contract-footer .ci-contract-footer-copy,
.ci-contract .ci-contract-footer span {
font-size: 4.23333mm; /* 12pt; */ /* 16px; */
}
.ci-contract table tbody tr td ul li:before,
.ci-contract .ci-contract-box-offer div,
.ci-contract .ci-contract-box-offer-line div,
.ci-contract .ci-contract-box-offer-milestone div,
.ci-contract .ci-contract-box-offer div b,
.ci-contract .ci-contract-box-offer-line div b,
.ci-contract .ci-contract-box-offer-milestone div b {
font-size: 3.704167mm; /* 10.5pt; */ /* 14px; */ /* 8px; */
}
/* === cover === */
.ci-contract .ci-contract-cover p.ci-contract-cover-faux-h1 {
font-family: "Roboto" !important;
font-weight: bold !important;
font-size: 12.7mm; /* 36pt; */ /* 48px; */
}
.ci-contract .ci-contract-cover p.ci-contract-cover-faux-h2 {
font-family: "Arial";
font-weight: lighter;
font-style: normal;
font-size: 12.7mm; /* 36pt; */ /* 48px; */
}
.ci-contract .ci-contract-cover p.ci-contract-cover-description {
font-family: "Roboto";
font-weight: lighter;
font-style: italic;
font-size: 6.35mm; /* 18pt; */ /* 24px; */
}
.ci-contract .ci-contract-cover p.ci-contract-cover-author-list span {
font-family: "Roboto";
font-weight: lighter;
font-style: normal;
font-size: 6.35mm; /* 18pt; */ /* 24px; */
}
.ci-contract p em,
.ci-contract p i {
font-style: italic;
}
/* === color === */
/* .ci-contract a:not([href*="#"]), */
.ci-contract a:not([id]),
.ci-contract td i,
.ci-contract a span
/*, .ci-contract .ci-contract-table table td[colspan]*/ {
color: #1c76bb !important;
}
.ci-contract * {
color: #000 /* XXX Why? !important */;
}
.ci-contract a {
text-decoration: none;
}
/* === text align === */
/* text align */
.ci-contract p {
text-align: justify;
}
.ci-contract table tbody td ul {
text-align: left;
font-weight: normal;
margin: 0;
margin-left: 4pt;
padding: 0;
}
/* Chinese */
.ci-zh .ci-contract p {
text-align: initial;
}
/* === page breaks === */
.ci-contract h1 {
page-break-before: always;
page-break-after: avoid;
}
.ci-contract .custom-force-page-break,
.ci-contract .custom-resume {
page-break-before: always;
}
.ci-contract h2,
.ci-contract h3,
.ci-contract h4,
.ci-contract h5 {
page-break-after: avoid;
}
.ci-contract h1 + img,
.ci-contract h2 + img,
.ci-contract h2 + p {
page-break-before: avoid;
}
.ci-contract table,
.ci-contract table caption,
.ci-contract img,
.ci-contract tr {
page-break-inside: avoid;
}
.ci-contract section:not(:last-child) {
page-break-after: always;
page-break-inside: always;
}
/* clear blank page after custom tables */
.ci-contract table.ci-contract-version-list {
page-break-after: avoid !important;
}
.ci-contract tbody + caption,
.ci-contract .ci-contract-img + span {
page-break-inside: avoid;
page-break-before: avoid;
page-break-after: avoid;
}
.ci-contract .ci-contract-box-offer {
page-break-inside: avoid;
}
/* === header/footer === */
.ci-contract .ci-contract-header,
.ci-contract .ci-contract-footer {
border-collapse: collapse;
width: 100%;
table-layout: fixed;
}
.ci-contract .ci-contract-header {
margin-top: 0;
}
.ci-contract .ci-contract-header td div,
.ci-contract .ci-contract-header div,
.ci-contract .ci-contract-header .ci-contract-header-sidebyside,
.ci-contract .ci-contract-header .ci-contract-header-sidebyside-first,
.ci-contract .ci-contract-header .ci-contract-header-sidebyside-last {
line-height: 18px;
height: 18px;
}
.ci-contract .ci-contract-header td,
.ci-contract .ci-contract-footer td {
text-align: center;
margin: 0;
vertical-align: middle;
padding: 0;
padding-bottom: 3mm;
}
.ci-contract .ci-contract-footer td span {
font-weight: 300;
}
.ci-contract .ci-contract-header td {
padding-top: 2mm;
border: transparent;
}
/* freeze table cell widths */
.ci-contract .ci-contract-header td:nth-child(1),
.ci-contract .ci-contract-header td:nth-child(3),
.ci-contract .ci-contract-footer td:nth-child(2),
.ci-contract .ci-contract-footer td:nth-child(3) {
width: 30%;
}
.ci-contract .ci-contract-header td:nth-child(2),
.ci-contract .ci-contract-footer td:nth-child(1) {
width: 40%;
}
.ci-contract .ci-contract-footer td:nth-child(1) {
text-align: left;
}
.ci-contract .ci-contract-footer td:nth-child(3) {
text-align: right;
}
/* header title/subtitle */
.ci-contract .ci-contract-header .ci-contract-header-title,
.ci-contract .ci-contract-header .ci-contract-header-subtitle {
font-weight: bold;
}
.ci-contract .ci-contract-header .ci-contract-header-title {
padding-top: 2mm;
padding-bottom: 2mm;
}
/* header image dimensions */
.ci-contract .ci-contract-header .ci-contract-header-image-wkhtmltopdf-image-wrapper {
padding-top: 1mm;
min-height: 25mm;
vertical-align: middle;
width: 100%;
line-height: 25mm;
}
.ci-contract .ci-contract-header .ci-contract-header-image-wkhtmltopdf-image-wrapper img {
height: auto;
vertical-align: middle;
max-height: 25mm;
}
/* header spec section */
.ci-contract .ci-contract-header td:last-child {
text-align: left;
padding-left: 2mm;
}
.ci-contract .ci-contract-header td:last-child .ci-contract-header-key {
min-width: 25%;
display: inline-block;
font-weight: 300;
}
.ci-contract .ci-contract-header td:last-child .ci-contract-header-value {
font-weight: bold;
width: auto;
}
.ci-contract .ci-contract-header .ci-contract-header-sidebyside-last {
display: inline-block;
width: 58%;
}
.ci-contract .ci-contract-header .ci-contract-header-sidebyside-first {
display: inline-block;
width: 40%;
}
.ci-contract .ci-contract-header .ci-contract-header-sidebyside-first .ci-contract-header-key {
width: 62.5%;
}
.ci-contract .ci-contract-header td div.ci-contract-header-sidebyside {
position: relative;
top: -2px;
}
.ci-contract .ci-contract-header td div:last-child {
padding-top: 2px;
}
.ci-contract .ci-contract-header td:last-child .ci-contract-header-minify {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 70%;
}
.ci-contract .ci-contract-header td:last-child div {
vertical-align: middle;
}
.ci-contract .ci-contract-header div span {
line-height: 16px;
height: 16px;
display: inline-block;
vertical-align: middle;
}
.ci-contract .ci-contract-footer th,
.ci-contract .ci-contract-footer td {
border: 0 none;
}
.ci-contract .ci-contract-footer .ci-contract-footer-copy {
padding-right: 2mm;
}
/* === document cover === */
.ci-contract .ci-contract-cover p {
text-align: center;
}
.ci-contract .ci-contract-cover .ci-contract-cover-faux-h1 {
text-decoration: uppercase;
padding-top: 40%;
padding-bottom: 2%;
}
.ci-contract .ci-contract-cover .ci-contract-cover-description {
margin: 10mm 0;
font-weight: normal;
}
.ci-contract .ci-contract-cover {
margin-bottom: 20%;
}
/* === tables === */
/* fix header/footer clipping content */
.ci-contract thead {
display: table-header-group;
}
.ci-contract tfoot {
display: table-row-group;
}
.ci-contract table tr {
page-break-inside: avoid;
}
.ci-contract .ci-contract-table-highlight td,
.ci-contract table tr[data-class='ci-contract-table-highlight'] td {
background-color: #ffa07a;
}
.ci-contract .ci-contract-table-section td,
.ci-contract table tr[data-class='ci-contract-table-section'] td,
.ci-contract .ci-contract-table-section-depth-1 td {
background-color: #e0e0e0;
}
.ci-contract .ci-contract-table-section-depth-2 td {
background-color: #f5f5f5;
}
.ci-contract table td[colspan] {
padding: 0;
}
.ci-contract table table td[colspan] {
padding-left: 2mm;
padding-right: 2mm;
}
.ci-contract .ci-contract-table table {
margin-right: 0;
margin-left: auto;
border-collapse: collapse;
width: 100%;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
vertical-align: top;
border-left-color: transparent;
border-top-color: transparent;
border-right-color: transparent;
}
.ci-contract .ci-contract-table table td {
text-align: left;
}
.ci-contract .ci-contract-table table td[rowspan] {
border-left-color: transparent;
vertical-align:top;
}
.ci-contract .ci-contract-table table td[rowspan],
.ci-contract .ci-contract-table table td[colspan] {
border-left-color: transparent;
}
.ci-contract .ci-contract-table table td[colspan] {
border-bottom-color: transparent;
}
.ci-contract .ci-contract-table table tr:nth-child(1) td {
border-top-color: transparent;
}
.ci-contract .ci-contract-table table tr td:last-child {
border-right-color: transparent;
}
/* multi-table headers */
.ci-contract table thead {
display: table-header-group;
}
.ci-contract table tfoot {
display: table-row-group;
}
.ci-contract table tr {
page-break-inside: avoid;
}
/* spacing */
.ci-contract table {
border-collapse: collapse;
width: 100%;
margin: 0 auto;
}
/* === table == */
.ci-contract section table thead th {
vertical-align: middle;
padding-top: 2mm;
padding-bottom: 2mm;
}
.ci-contract table {
width: 100%;
margin: initial;
background-color: transparent !important;
}
.ci-contract table th,
.ci-contract table td {
border: 1px solid #a1a1a1;
padding: 0 2mm;
}
.ci-contract table th {
text-align: center;
}
/* opinionated align for content tables, overwrite in html if required */
.ci-contract table:not(.ci-contract-header):not(.ci-contract-footer):not(.ci-contract-table) tbody td,
.ci-contract table:not(.ci-contract-header):not(.ci-contract-footer):not(.ci-contract-table) tbody th {
/*text-align: center;*/
}
/*
.ci-contract table:not(.ci-contract-header):not(.ci-contract-footer):not(.ci-contract-table) tbody tr td:first-child,
.ci-contract table:not(.ci-contract-header):not(.ci-contract-footer):not(.ci-contract-table) tbody tr th:first-child {
text-align: right;
}
*/
.ci-contract table thead tr th p {
color: black !important;
}
.ci-contract a + table tbody tr td:first-child,
.ci-contract a + table tbody tr th:first-child {
/*text-align: center;*/
}
.ci-contract a + table tbody tr td:not(:first-child),
.ci-contract a + table tbody tr th:not(:first-child) {
/*text-align: right;*/
}
.ci-contract p + table td a {
display: block;
}
/* table formatting */
.ci-contract table {
border-collapse: collapse;
}
.ci-contract table td {
padding-left: 2mm;
word-wrap: break-word;
}
/* sigh... Fcuk Editor... backgrounds */
.ci-contract table:not(.ci-contract-header):not(.ci-contract-footer) thead tr td,
.ci-contract table:not(.ci-contract-header):not(.ci-contract-footer) thead tr th,
.ci-contract table:not(.ci-contract-header):not(.ci-contract-footer) thead tr th span,
.ci-contract table:not(.ci-contract-header):not(.ci-contract-footer) tbody tr:first-child td,
.ci-contract table:not(.ci-contract-header):not(.ci-contract-footer) tbody tr:first-child th {
background-color: #e0e0e0;
font-weight: bold;
/*text-align: center;*/
}
.ci-contract .ci-contract-table tbody tr td,
.ci-contract .ci-contract-table tbody tr th {
text-align: center;
}
.ci-contract table thead tr td,
.ci-contract table thead tr th {
text-align: center;
}
.ci-contract table:not(.ci-contract-header):not(.ci-contract-footer) thead + tbody tr:first-child td,
.ci-contract table:not(.ci-contract-header):not(.ci-contract-footer) thead + tbody tr:first-child th {
background-color: #ffffff;
font-weight: normal;
}
.ci-contract table.ci-document-page-header tbody tr td,
.ci-contract table.ci-document-page-footer tbody tr td {
/* background-color: #ffffff !important; */
/*text-align: center;*/
font-weight: 100;
}
.ci-contract table thead tr td,
.ci-contract table thead tr th {
padding-top: 2mm;
padding-bottom: 2mm;
}
/* override header with p tags eating maring/padding */
.ci-contract table thead tr td p
.ci-contract table thead tr th p {
padding: 0;
margin: 0;
}
/* === list formatting === */
.ci-contract ol {
list-style-position: inside;
}
.ci-contract ul {
list-style: none;
list-style-position: inside;
}
.ci-contract ul li,
.ci-contract ol li {
padding-left: 16px;
/*text-indent: -24px;*/
}
.ci-contract ul li:before {
content: "•";
padding-right: 16px;
margin-top: 2px;
}
.ci-contract {
counter-reset: h1;
}
.ci-contract h1 {
counter-reset: h2;
}
.ci-contract h2 {
counter-reset: h3;
}
.ci-contract h3 {
counter-reset: h4;
}
.ci-contract h4 {
counter-reset: h5;
}
.ci-contract h5 {
counter-reset: h6;
}
.ci-contract h1:before {
counter-increment: h1;
content: counter(h1) ". ";
}
.ci-contract h2:before {
counter-increment: h2;
content: counter(h1) "." counter(h2) ". ";
}
.ci-contract h3:before {
counter-increment: h3;
content: counter(h1) "." counter(h2) "." counter(h3) ". ";
}
.ci-contract h4:before {
counter-increment: h4;
content: counter(h1) "." counter(h2) "." counter(h3) "." counter(h4) ". ";
}
.ci-contract h5:before {
counter-increment: h5;
content: counter(h1) "." counter(h2) "." counter(h3) "." counter(h4) "." counter(h5) ". ";
}
.ci-contract h6:before {
counter-increment: h6;
content: counter(h1) "." counter(h2) "." counter(h3) "." counter(h4) "." counter(h5) "." counter(h6) ". ";
}
.ci-contract .ci-contract-table-of-content ol {
text-indent: 0;
}
.ci-contract .ci-contract-table-of-content ol ol {
text-indent: 3em;
}
.ci-contract .ci-contract-table-of-content ol ol ol {
text-indent: 6em;
}
.ci-contract .ci-contract-table-of-content ol ol ol ol {
text-indent: 9em;
}
.ci-contract .ci-contract-table-of-content ol ol ol ol ol {
text-indent: 12em;
}
.ci-contract .ci-contract-table-of-content ol ol ol ol ol ol {
text-indent: 15em;
}
.ci-contract .ci-contract-table-of-content-lead-item:not(:first-child) {
padding-top: 10mm;
}
.ci-contract-table-of-content ol li div {
position: relative;
overflow: hidden;
}
.ci-contract-table-of-content ol li div:after {
content: "";
position: absolute;
bottom: 3px;
width: 100%;
border-bottom: 1px dotted #000;
z-index: 500;
}
.ci-contract .ci-contract-table-of-content ol li div {
height: 28px;
line-height: 24px;
}
.ci-contract .ci-contract-table-of-content ol ol li div {
height: 24px;
line-height: 20px;
}
.ci-contract .ci-contract-table-of-content ol li {
counter-increment: item;
}
.ci-contract .ci-contract-table-of-content ol li div:before {
content: counters(item, ".") ". ";
padding-right: 0.5em;
}
.ci-contract .ci-contract-table-of-content li ol li div:before {
content: counters(item, ".") " ";
}
.ci-contract .ci-contract-table-of-content {
display: block;
width: 100%;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
padding-right: 10px;
}
.ci-contract .ci-contract-table-of-content ol {
counter-reset: item;
list-style-type: none;
margin: 0;
padding: 0;
display: block;
width: inherit;
}
.ci-contract .ci-contract-table-of-content li ol li {
margin: 0;
}
.ci-contract .ci-contract-table-of-content a {
text-decoration:none;
color: black;
}
/* === custom margins === */
.ci-contract h1 {
text-align: left;
font-weight: normal;
padding-top: 10mm;
padding-left: 2mm;
}
.ci-contract h2 {
margin-top: 10mm; /* 0.67em */
}
.ci-contract h3 {
margin-top: 12mm; /* 1em */
}
.ci-contract h4 {
margin-top: 14mm; /* 1.33em */
}
.ci-contract h5 {
margin-top: 16mm /* 1.67em */;
}
.ci-contract h6 {
margin-top: 18mm /* 2.33em */;
}
.ci-contract p {
margin-top: 5mm;
margin-bottom: 5mm;
}
/* === indent all paragraphs === */
.ci-contract p {
text-indent: 5mm;
}
.ci-contract table {
margin-top: 5mm;
margin-bottom: 5mm;
margin-left: auto;
margin-right: auto;
}
.ci-contract table table {
margin-top: 0;
}
/* === image and table captions */
/* XXX caption should be inside .ci-contract-img */
.ci-contract .ci-contract-img > img {
display: block;
margin: 0 auto 0;
padding-top: 20px;
max-width: 240mm;
page-break-after: avoid;
width: 50%;
}
.ci-contract .ci-contract-img > img ~ span {
margin-left: 3cm;
display:inline-block;
}
.ci-contract .ci-contract-img + span {
margin-left: 3cm;
display:inline-block;
}
.ci-contract table caption,
.ci-contract .ci-contract-caption {
text-align: center;
padding-top: 4mm;
padding-bottom: 5mm;
caption-side: bottom;
width: auto;
}
/* customizations */
/* editor adding <p>... */
html .ci-contract table td p {
margin: 0;
text-indent: 0;
display:inline-block;
}
html .ci-contract table td p:first-child {
padding: 0;
}
html .ci-contract table td p:not(:first-child){
padding-left: 5px;
}
/* === code boxes === */
.ci-contract pre {
text-align: left;
font-family: TexGyreCursor;
white-space: pre-wrap;
word-wrap: break-word;
padding: 10px 20px 36px;
background-color: rgb(234,246,246);
/*
white-space: pre;
word-wrap: break-word;
overflow-wrap: break-word;
*/
/*
break after 100 characters - https://stackoverflow.com/a/16756641
max-width: 40em;
max-width: 100ch;
*/
}
.ci-contract pre code {
display: block;
background-color: rgb(234,246,246);
}
.ci-contract p code,
.ci-contract blockquote {
background-color: rgb(234,246,246);
}
/* === special headers === */
/* distribution list */
.ci-contract .ci-contract thead th {
vertical-align: middle;
padding-top: 2mm;
padding-bottom: 2mm;
}
.ci-contract .ci-contract-distribution-list tbody tr td ul,
/* backcompat */
.ci-contract section tbody tr td ul {
vertical-align: top;
margin-left: 0;
padding-left: 0;
display: inline-block;
width: 49%;
padding-top: 5mm;
padding-bottom: 5mm;
}
.ci-contract .ci-contract-distribution-list tbody tr td ul li,
/* backcompat */
.ci-contract section tbody tr td ul li {
padding: 0;
list-style: none;
text-indent: 0;
line-height: 18pt;
text-align: left;
}
.ci-contract .ci-contract-distribution-list tbody tr td ul li:before,
/* backcompat */
.ci-contract section tbody tr td ul li:before {
content: "■";
padding-right: 8px;
vertical-align: middle;
}
.ci-contract .ci-contract-distribution-list tbody tr td ul li span,
.ci-contract .ci-contract-distribution-list tbody tr td ul li div {
width: 46%;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
display: inline-block;
}
/* backcompat */
.ci-contract section tbody tr td ul li span,
.ci-contract section tbody tr td ul li div,
.ci-contract section tbody tr td ul li p {
display: inline-block;
width: 46%;
}
.ci-contract .ci-contract-distribution-list tbody tr td ul li,
.ci-contract .ci-contract-distribution-list tbody tr td ul div,
.ci-contract .ci-contract-distribution-list tbody tr td ul span,
/* backcompat */
.ci-contract section tbody tr td ul li,
.ci-contract section tbody tr td ul div,
.ci-contract section tbody tr td ul span {
vertical-align: middle;
}
/* Version List */
/* Signature List */
.ci-contract .ci-contract-signature-list tbody td {
padding-top: 2mm;
padding-bottom: 5mm;
}
.ci-contract .ci-contract-signature-list tbody td i,
.ci-contract .ci-contract-signature-list tbody td em {
display: block;
text-align: left;
text-indent: 2mm;
}
/* === reports === */
/* should have their own .css/.pdf.css file eventually */
.ci-contract .ci-contract-table .ci-contract-report-cell-left,
.ci-contract .ci-contract-table td[colspan] {
text-align: left;
}
.ci-contract .ci-contract-table .ci-contract-report-cell-right {
text-align: right;
}
/* === box items === */
/* Project Breakdown/Milestone List */
.ci-contract .ci-contract-box-offer,
.ci-contract div.ci-contract-box-offer-milestone,
/* backcompat */
.ci-document-box-offer,
div.ci-document-box-offer-milestone {
width: 100%;
}
.ci-contract .ci-contract-box-offer,
.ci-contract .ci-contract-box-id,
.ci-contract .ci-contract-box-coverage,
.ci-contract .ci-contract-box-begin,
.ci-contract .ci-contract-box-end,
.ci-contract .ci-contract-box-total-duration,
.ci-contract .ci-contract-box-duration,
.ci-contract .ci-contract-box-leader,
.ci-contract .ci-contract-box-resources,
.ci-contract .ci-contract-box-location,
.ci-contract .ci-contract-box-result,
.ci-contract .ci-contract-box-offer-milestone {
}
.ci-contract .ci-contract-box-offer b,
.ci-contract .ci-contract-box-offer-milestone b,
.ci-contract .ci-contract-box-offer-line b,
/* backcompat */
.ci-document-box-offer b,
.ci-document-box-offer-milestone b,
.ci-document-box-offer-line b{
font-weight: bold;
}
.ci-contract .ci-contract-box-detail,
/* backcompat */
.ci-document-box-detail {
table-layout: fixed;
}
.ci-contract .ci-contract-box-offer,
.ci-contract .ci-contract-box-offer-line,
.ci-contract .ci-contract-box-offer-milestone,
/* backcompat */
.ci-document-box-offer,
.ci-document-box-offer-line,
.ci-document-box-offer-milestone {
border: 1px solid #a1a1a1;
padding: 2px;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
-webkit-box-shadow: 10px 10px 0 #a1a1a1;
-moz-box-shadow: 10px 10px 0 #a1a1a1;
box-shadow: 10px 10px 0 #a1a1a1;
background-color: #fff;
}
.ci-contract .ci-contract-box-coverage,
/* backcompat */
.ci-document-box-coverage {
display: inline-block;
vertical-align: top;
width: 66%;
}
.ci-contract-box-location,
.ci-contract-box-resources,
.ci-contract-box-leader,
/* backcompat */
.ci-document-box-location,
.ci-document-box-resources,
.ci-document-box-leader {
display: inline-block;
vertical-align: top;
width: 33%;
}
.ci-contract .ci-contract-box-begin,
.ci-contract .ci-contract-box-end,
/* backcompat */
.ci-document-box-begin,
.ci-document-box-end {
display: inline-block;
vertical-align: top;
width: 33%;
}
.ci-contract .ci-contract-box-id,
/* backcompat */
.ci-document-box-id {
display: inline-block;
vertical-align: top;
width: 33%;
}
.ci-contract .ci-contract-box-duration,
/* backcompat */
.ci-document-box-duration {
display: inline-block;
vertical-align: top;
width: 33%;
}
.ci-contract .ci-contract-box-end + .ci-contract-box-resources,
/* backcompat */
.ci-document-box-end + .ci-document-box-resources {
margin-left: 20%;
}
.ci-contract .ci-contract-box-end + .ci-contract-box-resources,
/* backcompat */
.ci-document-box-end + .ci-document-box-resources {
margin-left: 20%;
}
\ 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>__name__</string> </key>
<value> <string>contract.pdf.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>
......@@ -32,8 +32,28 @@ html .ci-slideshow code {
font-size: .4em;
}
/* line number */
html .ci-slideshow pre {
counter-reset: lines;
}
html .ci-slideshow pre .line {
counter-increment: lines;
}
html .ci-slideshow 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;
width:1em;
display: inline-block;
padding-right: 0.5em;
margin-right: 0.5em;
color: #BBB;
border-right: solid 1px;
}
/*
......
......@@ -6,6 +6,10 @@
</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>slide.css</string> </value>
......
......@@ -18,7 +18,7 @@ based on dark.css by Ivan Sagalaev
.hljs-keyword,
.hljs-selector-tag,
.hljs-tag {
color: #e3ceab;
color: #690;
}
.hljs-template-tag {
......@@ -49,7 +49,7 @@ based on dark.css by Ivan Sagalaev
.hljs-selector-class,
.hljs-section,
.hljs-type {
color: #efef8f;
color: black;
}
.hljs-symbol,
......@@ -62,14 +62,14 @@ based on dark.css by Ivan Sagalaev
.hljs-string,
.hljs-built_in,
.hljs-builtin-name {
color: #cc9393;
color: #905d5e;
}
.hljs-addition,
.hljs-comment,
.hljs-quote,
.hljs-meta {
color: #7f9f7f;
color: black;
}
......
<?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_contract</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>document</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
# ERP5 web uses format= argument, which is also a python builtin
# pylint: disable=redefined-builtin
return context.WebPage_viewAsContract(
document_save=document_save,
display_svg=display_svg,
batch_mode=batch_mode,
include_content_table=include_content_table,
include_history_table=include_history_table,
include_reference_table=include_reference_table,
include_linked_content=include_linked_content,
include_report_content=include_report_content,
format=format,
**kw
)
<?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>format="html", include_content_table=None,include_history_table= None,include_reference_table=None,include_linked_content=None,include_report_content=None,batch_mode=False,display_svg=None,document_save=None, **kw</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>WebPage_viewAsWeb</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
......@@ -163,6 +163,7 @@ ul.ci-web-header-menu-lang{
overflow: hidden;
margin: 0;
padding: 0;
top:2px;
}
ul.ci-web-header-menu-lang:hover {
......
......@@ -20,6 +20,7 @@
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');
form nocall: form | nothing;
request python: context.REQUEST;">
<!DOCTYPE html>
<html tal:attributes="class python: 'ci-%s' % (theme)" prefix="og: http://ogp.me/ns#">
......
Preference | corporate_identity_style_preferences
Web Page | export_book
Web Page | export_contract
Web Page | export_leaflet
Web Page | export_letter
Web Page | export_release
......
erp5_corporate_identity_book | Book
erp5_corporate_identity_book | Report
erp5_corporate_identity_contract | Contract
erp5_corporate_identity_leaflet | Leaflet
erp5_corporate_identity_letter | Letter
erp5_corporate_identity_release | Release
......@@ -7,6 +8,7 @@ erp5_corporate_identity_slide | Slide
erp5_corporate_identity_web | CI_web
erp5_xhtml_style | Book
erp5_xhtml_style | CI_web
erp5_xhtml_style | Contract
erp5_xhtml_style | Leaflet
erp5_xhtml_style | Letter
erp5_xhtml_style | Release
......
erp5_corporate_identity
erp5_corporate_identity_book
erp5_corporate_identity_contract
erp5_corporate_identity_leaflet
erp5_corporate_identity_letter
erp5_corporate_identity_release
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Zuite" module="Products.Zelenium.zuite"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>corporate_identity_renderjs_ui_test_zuite</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<html xmlns:tal="http://xml.zope.org/namespaces/tal"
xmlns:metal="http://xml.zope.org/namespaces/metal">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Test and Update Test Files for BOOK Template</title>
</head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
<thead>
<tr><td rowspan="1" colspan="3">Test Book Template UI</td></tr>
</thead>
<tbody>
<tal:block metal:use-macro="here/Zuite_CommonTemplate/macros/init" />
<tr>
<td>open</td>
<td>${base_url}/web_site_module/renderjs_runner/#/web_page_module</td>
<td></td>
</tr>
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_app_loaded" />
<tal:block tal:define="search_query python: 'reference: Template.Test.Book AND version: 001'">
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/search_in_form_list" />
</tal:block>
<tr>
<td>waitForElementPresent</td>
<td>//a[contains(text(), 'Template.Test.Book')]</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>//a[contains(text(), 'Template.Test.Book')]</td>
<td></td>
</tr>
<tr>
<td>waitForTextPresent</td>
<td>Workflows</td>
<td></td>
</tr>
<tal:block tal:define="exchange_configuration python: {'action_title': 'Export as Book'}">
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/go_to_selected_exchange_dialog" />
</tal:block>
<tr>
<td>waitForTextPresent</td>
<td>Export Book</td>
<td></td>
</tr>
<tr>
<td>uncheck</td>
<td>name=field_include_content_table</td>
<td></td>
</tr>
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/update_dialog" />
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_content_loaded" />
<tr>
<td>selectFrame</td>
<td>//div[@class="bottom"]//iframe</td>
<td></td>
</tr>
<tr>
<td>waitForTextPresent</td>
<td>ISO 16016</td>
<td></td>
</tr>
<tr>
<td>selectFrame</td>
<td>relative=top</td>
<td></td>
</tr>
<tr>
<td>type</td>
<td>name=field_override_logo_reference</td>
<td>Template.Test.Image.Erp5.Logo</td>
</tr>
<tr>
<td>check</td>
<td>name=field_include_history_table</td>
<td></td>
</tr>
<tr>
<td>check</td>
<td>name=field_include_content_table</td>
<td></td>
</tr>
<tr>
<td>check</td>
<td>name=field_include_reference_table</td>
<td></td>
</tr>
<tr>
<td>check</td>
<td>name=field_include_linked_content</td>
<td></td>
</tr>
<tr>
<td>check</td>
<td>name=field_include_report_content</td>
<td></td>
</tr>
<tr>
<td>type</td>
<td>name=field_override_document_description</td>
<td>foobar</td>
</tr>
<tr>
<td>type</td>
<td>name=field_override_document_title</td>
<td>Couscous</td>
</tr>
<tr>
<td>type</td>
<td>name=field_override_document_short_title</td>
<td>Cous</td>
</tr>
<tr>
<td>type</td>
<td>name=field_override_document_reference</td>
<td>P-XYZ-Foobar</td>
</tr>
<tr>
<td>type</td>
<td>name=field_override_source_organisation_title</td>
<td>Test Organisation</td>
</tr>
<tr>
<td>type</td>
<td>name=field_override_source_person_title</td>
<td>Test Sender</td>
</tr>
<tr>
<td>type</td>
<td>name=field_override_document_version</td>
<td>333</td>
</tr>
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/update_dialog" />
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_content_loaded" />
<tr>
<td>selectFrame</td>
<td>//div[@class="bottom"]//iframe</td>
<td></td>
</tr>
<tr>
<td>waitForTextPresent</td>
<td>ISO 16016</td>
<td></td>
</tr>
<tr>
<td>verifyElementPresent</td>
<td>//div[@class='ci-book-header-title' and contains(text(), 'Couscous')]</td>
<td></td>
</tr>
<tr>
<td>verifyElementPresent</td>
<td>//div[@class='ci-book-header-subtitle' and contains(text(), 'Cous')]</td>
<td></td>
</tr>
<tr>
<td>verifyElementPresent</td>
<td>//span[@class='ci-book-header-value' and contains(text(), '333')]</td>
<td></td>
</tr>
<tr>
<td>verifyElementPresent</td>
<td>//img[contains(@src, 'Template.Test.Image.Erp5.Logo')]</td>
<td></td>
</tr>
<tr>
<td>selectFrame</td>
<td>relative=top</td>
<td></td>
</tr>
<tr>
<td>type</td>
<td>//select[@name='field_format']</td>
<td>pdf</td>
</tr>
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/submit_dialog" />
<tal:block tal:define="notification_configuration python: {'class': 'success',
'text': 'Data received.'}">
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_notification" />
</tal:block>
</tbody>
</table>
</body>
</html>
\ No newline at end of file
<html xmlns:tal="http://xml.zope.org/namespaces/tal"
xmlns:metal="http://xml.zope.org/namespaces/metal">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Test and Update Test Files for LEAFLET Template</title>
</head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
<thead>
<tr><td rowspan="1" colspan="3">Test Leaflet Template UI</td></tr>
</thead>
<tbody>
<tal:block metal:use-macro="here/Zuite_CommonTemplate/macros/init" />
<tr>
<td>open</td>
<td>${base_url}/web_site_module/renderjs_runner/#/web_page_module</td>
<td></td>
</tr>
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_app_loaded" />
<tal:block tal:define="search_query python: 'reference: Template.Test.Leaflet AND version: 001'">
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/search_in_form_list" />
</tal:block>
<tr>
<td>waitForElementPresent</td>
<td>//a[contains(text(), 'Template.Test.Leaflet')]</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>//a[contains(text(), 'Template.Test.Leaflet')]</td>
<td></td>
</tr>
<tr>
<td>waitForTextPresent</td>
<td>Workflows</td>
<td></td>
</tr>
<!-- Save once to set modification date for live tests -->
<tal:block tal:define="exchange_configuration python: {'action_title': 'Export as Leaflet'}">
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/go_to_selected_exchange_dialog" />
</tal:block>
<tr>
<td>waitForTextPresent</td>
<td>Export Leaflet</td>
<td></td>
</tr>
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/update_dialog" />
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_content_loaded" />
<tr>
<td>selectFrame</td>
<td>//div[@class="bottom"]//iframe</td>
<td></td>
</tr>
<tr>
<td>waitForTextPresent</td>
<td>@</td>
<td></td>
</tr>
<tr>
<td>selectFrame</td>
<td>relative=top</td>
<td></td>
</tr>
<tr>
<td>type</td>
<td>name=field_override_source_organisation_title</td>
<td>Test Association</td>
</tr>
<tr>
<td>type</td>
<td>name=field_override_source_person_title</td>
<td>Test Recipient</td>
</tr>
<tr>
<td>type</td>
<td>name=field_override_leaflet_header_title</td>
<td>Couscous</td>
</tr>
<tr>
<td>uncheck</td>
<td>name=field_display_side</td>
<td></td>
</tr>
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/update_dialog" />
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_content_loaded" />
<tr>
<td>selectFrame</td>
<td>//div[@class="bottom"]//iframe</td>
<td></td>
</tr>
<tr>
<td>waitForElementPresent</td>
<td>//p[@class='ci-leaflet-source-header' and contains(text(), 'Test Association:Couscous')]</td>
<td></td>
</tr>
<tr>
<td>verifyElementNotPresent</td>
<td>//div[@id='legalese']</td>
<td></td>
</tr>
<tr>
<td>selectFrame</td>
<td>relative=top</td>
<td></td>
</tr>
<tr>
<td>type</td>
<td>//select[@name='field_format']</td>
<td>pdf</td>
</tr>
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/submit_dialog" />
<tal:block tal:define="notification_configuration python: {'class': 'success',
'text': 'Data received.'}">
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_notification" />
</tal:block>
</tbody>
</table>
</body>
</html>
\ No newline at end of file
<html xmlns:tal="http://xml.zope.org/namespaces/tal"
xmlns:metal="http://xml.zope.org/namespaces/metal">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Test and Update Test Files for LETTER Template</title>
</head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
<thead>
<tr><td rowspan="1" colspan="3">Test Letter Template UI</td></tr>
</thead>
<tbody>
<tal:block metal:use-macro="here/Zuite_CommonTemplate/macros/init" />
<tr>
<td>open</td>
<td>${base_url}/web_site_module/renderjs_runner/#/web_page_module</td>
<td></td>
</tr>
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_app_loaded" />
<tal:block tal:define="search_query python: 'reference: Template.Test.Letter AND version: 001'">
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/search_in_form_list" />
</tal:block>
<tr>
<td>waitForElementPresent</td>
<td>//a[contains(text(), 'Template.Test.Letter')]</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>//a[contains(text(), 'Template.Test.Letter')]</td>
<td></td>
</tr>
<tr>
<td>waitForTextPresent</td>
<td>Workflows</td>
<td></td>
</tr>
<tal:block tal:define="exchange_configuration python: {'action_title': 'Export as Letter'}">
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/go_to_selected_exchange_dialog" />
</tal:block>
<tr>
<td>waitForTextPresent</td>
<td>Export Letter</td>
<td></td>
</tr>
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/update_dialog" />
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_content_loaded" />
<tr>
<td>selectFrame</td>
<td>//div[@class="bottom"]//iframe</td>
<td></td>
</tr>
<tr>
<td>waitForElementPresent</td>
<td>//span[contains(text(), 'Address')]</td>
<td></td>
</tr>
<tr>
<td>verifyElementNotPresent</td>
<td>//span[contains(text(), 'IBAN')]</td>
<td></td>
</tr>
<tr>
<td>selectFrame</td>
<td>relative=top</td>
<td></td>
</tr>
<tr>
<td>type</td>
<td>name=field_override_source_organisation_title</td>
<td>Test Association</td>
</tr>
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/update_dialog" />
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_content_loaded" />
<tr>
<td>selectFrame</td>
<td>//div[@class="bottom"]//iframe</td>
<td></td>
</tr>
<tr>
<td>waitForElementPresent</td>
<td>//span[contains(text(), 'Test Association')]</td>
<td></td>
</tr>
<tr>
<td>selectFrame</td>
<td>relative=top</td>
<td></td>
</tr>
<tr>
<td>type</td>
<td>//select[@name='field_format']</td>
<td>pdf</td>
</tr>
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/submit_dialog" />
<tal:block tal:define="notification_configuration python: {'class': 'success',
'text': 'Data received.'}">
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_notification" />
</tal:block>
</tbody>
</table>
</body>
</html>
\ No newline at end of file
<html xmlns:tal="http://xml.zope.org/namespaces/tal"
xmlns:metal="http://xml.zope.org/namespaces/metal">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Test and Update Test Files for RELEASE Template</title>
</head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
<thead>
<tr><td rowspan="1" colspan="3">Test Release Template UI</td></tr>
</thead>
<tbody>
<tal:block metal:use-macro="here/Zuite_CommonTemplate/macros/init" />
<tr>
<td>open</td>
<td>${base_url}/web_site_module/renderjs_runner/#/web_page_module</td>
<td></td>
</tr>
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_app_loaded" />
<tal:block tal:define="search_query python: 'reference: Template.Test.Release AND version: 001'">
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/search_in_form_list" />
</tal:block>
<tr>
<td>waitForElementPresent</td>
<td>//a[contains(text(), 'Template.Test.Release')]</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>//a[contains(text(), 'Template.Test.Release')]</td>
<td></td>
</tr>
<tr>
<td>waitForTextPresent</td>
<td>Workflows</td>
<td></td>
</tr>
<tal:block tal:define="exchange_configuration python: {'action_title': 'Export as Press Release'}">
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/go_to_selected_exchange_dialog" />
</tal:block>
<tr>
<td>waitForTextPresent</td>
<td>Export Release</td>
<td></td>
</tr>
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/update_dialog" />
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_content_loaded" />
<tr>
<td>selectFrame</td>
<td>//div[@class="bottom"]//iframe</td>
<td></td>
</tr>
<tr>
<td>waitForTextPresent</td>
<td>©</td>
<td></td>
</tr>
<tr>
<td>selectFrame</td>
<td>relative=top</td>
<td></td>
</tr>
<tr>
<td>waitForTextPresent</td>
<td>Export Release</td>
<td></td>
</tr>
<tr>
<td>select</td>
<td>name=field_format</td>
<td>index=1</td>
</tr>
<tr>
<td>type</td>
<td>name=field_override_source_organisation_title</td>
<td>Test Association</td>
</tr>
<tr>
<td>type</td>
<td>name=field_override_source_person_title</td>
<td>Test Association Member</td>
</tr>
<tr>
<td>check</td>
<td>name=field_display_about</td>
<td></td>
</tr>
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/update_dialog" />
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_content_loaded" />
<tr>
<td>selectFrame</td>
<td>//div[@class="bottom"]//iframe</td>
<td></td>
</tr>
<tr>
<td>selectFrame</td>
<td>relative=top</td>
<td></td>
</tr>
<tr>
<td>type</td>
<td>//select[@name='field_format']</td>
<td>pdf</td>
</tr>
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/submit_dialog" />
<tal:block tal:define="notification_configuration python: {'class': 'success',
'text': 'Data received.'}">
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_notification" />
</tal:block>
</tbody>
</table>
</body>
</html>
\ No newline at end of file
<html xmlns:tal="http://xml.zope.org/namespaces/tal"
xmlns:metal="http://xml.zope.org/namespaces/metal">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Test and Update Test Files for SLIDE Template</title>
</head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
<thead>
<tr><td rowspan="1" colspan="3">Test Slide Template UI</td></tr>
</thead>
<tbody>
<tal:block metal:use-macro="here/Zuite_CommonTemplate/macros/init" />
<tr>
<td>open</td>
<td>${base_url}/web_site_module/renderjs_runner/#/web_page_module</td>
<td></td>
</tr>
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_app_loaded" />
<tal:block tal:define="search_query python: 'reference: Template.Test.Slideshow AND version: 001'">
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/search_in_form_list" />
</tal:block>
<tr>
<td>waitForElementPresent</td>
<td>//a[contains(text(), 'Template Test Slideshow')]</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>//a[contains(text(), 'Template Test Slideshow')]</td>
<td></td>
</tr>
<tr>
<td>waitForTextPresent</td>
<td>Workflows</td>
<td></td>
</tr>
<tal:block tal:define="exchange_configuration python: {'action_title': 'Export as SlideShow'}">
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/go_to_selected_exchange_dialog" />
</tal:block>
<tr>
<td>waitForTextPresent</td>
<td>Export Slideshow</td>
<td></td>
</tr>
<tr>
<td>type</td>
<td>name=field_override_logo_reference</td>
<td>Template.Test.Image.Logo.Alternativ</td>
</tr>
<tr>
<td>type</td>
<td>name=field_override_source_organisation_title</td>
<td>Foobarbazbam</td>
</tr>
<tr>
<td>click</td>
<td>//input[@value="svg"]</td>
<td></td>
</tr>
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/update_dialog" />
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_content_loaded" />
<tr>
<td>selectFrame</td>
<td>//div[@class="bottom"]//iframe</td>
<td></td>
</tr>
<tr>
<td>waitForTextPresent</td>
<td>©</td>
<td></td>
</tr>
<tr>
<td>verifyElementPresent</td>
<td>//img[contains(@src, 'Template.Test.Image.Logo.Alternativ')]</td>
<td></td>
</tr>
<tr>
<td>selectFrame</td>
<td>relative=top</td>
<td></td>
</tr>
<tr>
<td>type</td>
<td>//select[@name='field_format']</td>
<td>pdf</td>
</tr>
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/submit_dialog" />
<tal:block tal:define="notification_configuration python: {'class': 'success',
'text': 'Data received.'}">
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_notification" />
</tal:block>
</tbody>
</table>
</body>
</html>
\ No newline at end of file
##############################################################################
#
# Copyright (c) 2002-2018 Nexedi SA and Contributors. All Rights Reserved.
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsibility of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# guarantees and support are strongly adviced to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
##############################################################################
import unittest
from Products.ERP5Type.tests.ERP5TypeFunctionalTestCase import ERP5TypeFunctionalTestCase
class testFunctionalCorporateIdentityInRenderJSUI(ERP5TypeFunctionalTestCase):
foreground = 0
run_only = "corporate_identity_renderjs_ui_test_zuite"
def getBusinessTemplateList(self):
return (
'erp5_corporate_identity',
'erp5_corporate_identity_test',
'erp5_ui_test_core',
'erp5_ui_test',
'erp5_web_renderjs_ui_test_core'
)
def test_suite():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(testFunctionalCorporateIdentityInRenderJSUI))
return suite
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Test Component" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_recorded_property_dict</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>default_reference</string> </key>
<value> <string>testFunctionalCorporateIdentityInRenderJSUI</string> </value>
</item>
<item>
<key> <string>default_source_reference</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>test.erp5.testFunctionalCorporateIdentityInRenderJSUI</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Test Component</string> </value>
</item>
<item>
<key> <string>sid</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>text_content_error_message</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>text_content_warning_message</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>version</string> </key>
<value> <string>erp5</string> </value>
</item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary/>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>component_validation_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_log</string> </key>
<value>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>validate</string> </value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>validated</string> </value>
</item>
</dictionary>
</list>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
erp5_corporate_identity_test
erp5_web_renderjs_ui_test_core
\ No newline at end of file
Test and output files used for portal component tests of erp5_corporate_identity. Tests.
\ No newline at end of file
portal_tests/corporate_identity_renderjs_ui_test_zuite
portal_tests/corporate_identity_renderjs_ui_test_zuite/**
\ No newline at end of file
portal_tests/corporate_identity_renderjs_ui_test_zuite
portal_tests/corporate_identity_renderjs_ui_test_zuite/**
\ No newline at end of file
test.erp5.testFunctionalCorporateIdentityInRenderJSUI
\ No newline at end of file
erp5_full_text_mroonga_catalog
\ No newline at end of file
erp5_corporate_identity_renderjs_ui_test
\ No newline at end of file
......@@ -79,7 +79,7 @@
</item>
<item>
<key> <string>content_md5</string> </key>
<value> <string>c91d93c9eac427477b7e340503fe4f4b</string> </value>
<value> <string>985a87fdc9edabb1bc4fdb0c6546b048</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
......
......@@ -87,7 +87,7 @@
</item>
<item>
<key> <string>content_md5</string> </key>
<value> <string>1524cbb63bf6ba232bb84883e8f0830c</string> </value>
<value> <string>837b2f9266997816bbfe93e0151e4f27</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
......
......@@ -87,7 +87,7 @@
</item>
<item>
<key> <string>content_md5</string> </key>
<value> <string>fce66ad45692816d75e2f8d6fe2f5614</string> </value>
<value> <string>7b936abf8dce250935aff9a23d3664dc</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
......
......@@ -14,7 +14,7 @@
</item>
<item>
<key> <string>id</string> </key>
<value> <string>template_test_zuite</string> </value>
<value> <string>corporate_identity_test_zuite</string> </value>
</item>
<item>
<key> <string>title</string> </key>
......
<?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>testAndUpdateTestBookTemplate</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>
<?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>testAndUpdateTestLeafletTemplate</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>
<?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>testAndUpdateTestLetterTemplate</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>
<?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>testAndUpdateTestReleaseTemplate</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>
<?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>testAndUpdateTestSlideTemplate</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>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Image" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>__name__</string> </key>
<value> <string>testCodeViewOnSlideshow-reference-snapshot-1.png</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/png</string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <int>492</int> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <int>1192</int> </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>testCodeViewOnSlideshow</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>
<html xmlns:tal="http://xml.zope.org/namespaces/tal"
xmlns:metal="http://xml.zope.org/namespaces/metal">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Test for Code View On Slideshow</title>
</head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
<thead>
<tr><th rowspan="1" colspan="3">Test for Code View On Slideshow</th></tr>
</thead><tbody>
<tal:block metal:use-macro="here/Zuite_CommonTemplate/macros/init" />
<tr>
<td>open</td>
<td>${base_url}/web_page_module/template_test_slideshow_highlight_code_html/WebPage_exportAsSlideshow#/1/</td>
<td></td>
</tr>
<tr>
<td>waitForElementPresent</td>
<td>//h1[text()="App Configuration Router"]</td>
<td></td>
</tr>
<tr>
<td>verifyImageMatchSnapshot</td>
<td>//pre</td>
<td>20</td>
</tr>
</tbody></table>
</body>
</html>
\ No newline at end of file
......@@ -72,6 +72,21 @@
<td>//ul/li[2]/a[text()='Template Test Web FAQ 2' and @href='Template.Test.Web.FAQ2']</td>
<td></td>
</tr>
<tr>
<td>openAndWait</td>
<td>${base_url}/web_site_module/template_test_web_site/login_form</td>
<td></td>
</tr>
<tr>
<td>verifyElementNotPresent</td>
<td>//ul/li[2]/a[text()='Template Test Web FAQ 2' and @href='Template.Test.Web.FAQ2']</td>
<td></td>
</tr>
<tr>
<td>verifyElementPresent</td>
<td>//div[@class='ci-web-header-bar-logo']//span[text()='Template Test Web Site']</td>
<td></td>
</tr>
</tbody></table>
</body>
......
......@@ -93,117 +93,14 @@
<section>
<table>
<thead>
<tr>
<th colspan="4">签收单</th>
</tr>
<tr>
<th>姓名</th>
<th>职位<br />
公司</th>
<th>签名</th>
<th>日期</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>John Doe</strong></td>
<td>总经理, 讯空间大数据科技</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td><b>Jane Donaghue</b></td>
<td>销售副总裁</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td><strong>Foo Man Chu</strong></td>
<td>CEO, Kontrabass</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
</tbody>
</table>
</section>
<section>
<table>
<thead>
<tr>
<th>分发列表</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<ul>
<li>
<p>John Doe</p>
<p>CEO, 讯空间大数据科技</p>
</li>
<li>
<p>Jane Donaghue</p>
</li>
</ul>
<ul>
<li>
<p>Foo Man Chu</p>
<p>CEO, Kontrabass</p>
</li>
</ul>
</td>
</tr>
</tbody>
</table>
</section>
<section>
<table>
<thead>
<tr>
<th colspan="4">版本列表</th>
</tr>
<tr>
<th>版本</th>
<th>日期</th>
<th>页数</th>
<th>编辑描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>001</td>
<td>2018-5-15</td>
<td>全页</td>
<td>创建内容</td>
</tr>
<tr>
<td>002</td>
<td>2018-5-28</td>
<td>附录四</td>
<td>添加附录四</td>
</tr>
<tr>
<td>003</td>
<td>2018-6-1</td>
<td>全页</td>
<td>修改和完善</td>
</tr>
</tbody>
</table>
</section>
<h1>Introduction</h1>
<h1>Synthese</h1>
......
......@@ -92,99 +92,7 @@
<section>
<table class="ci-book-table ci-book-signature-list" border="1" width="100%" cellpadding="0" cellspacing="0">
<thead>
<tr>
<th colspan="4">Signature List</th>
</tr>
<tr>
<th width="25%">Name</th>
<th width="25%"><span>Function</span><br /><span>Company</span></th>
<th width="25%">Signature</th>
<th width="25%">Date</th>
</tr>
</thead>
<tbody>
<tr>
<td width="25%"><em>Signed by:</em><strong>Sample Person</strong></td>
<td width="25%">CEO</td>
<td width="25%">Sample Company</td>
<td width="25%">20xx-xx-xx</td>
</tr>
</tbody>
</table>
</section>
<section>
<table class="ci-book-table ci-book-distribution-list" border="1" width="100%" cellpadding="0" cellspacing="0">
<thead>
<tr>
<th>Distribution List</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<ul>
<li>
<div>Sample Person</div>
<div>Sample Company</div>
</li>
</ul>
<ul>
<li>
<div>Sample Person</div>
<div>Sample Company</div>
</li>
</ul>
</td>
</tr>
</tbody>
</table>
</section>
<section>
<table class="ci-book-table ci-book-version-list" border="1" width="100%" cellpadding="0" cellspacing="0">
<thead>
<tr>
<th colspan="4">Version Table</th>
</tr>
<tr>
<th width="15%">Version</th>
<th width="20%">Date</th>
<th width="15%">Page</th>
<th width="55%">Description of Modifications</th>
</tr>
</thead>
<tbody>
<tr>
<td width="15%">001</td>
<td width="20%">20xx-xx-xx</td>
<td width="15%">All</td>
<td width="55%" style="text-align: right">Added example content, corrections.</td>
</tr>
</tbody>
</table>
</section>
<section class="ci-book-table-of-content"><p class="ci-book-toc-faux-h1">Table of Contents</p><ol><li><div><a href="#introduction0_anchor">Introduction</div></a><ol><li><div><a href="#references1_anchor">References</div></a><ol><li><div><a href="#applicable-documents2_anchor">Applicable Documents</div></a></li><li><div><a href="#referenced-documents3_anchor">Referenced Documents</div></a></li></ol><li><div><a href="#abbreviations4_anchor">Abbreviations</div></a></li><li><div><a href="#figures5_anchor">Figures</div></a></li><li><div><a href="#tables6_anchor">Tables</div></a></li></ol><li><div><a href="#synthese7_anchor">Synthese</div></a><ol><li><div><a href="#risks-and-measures8_anchor">Risks and measures</div></a><ol><li><div><a href="#risk-of-casualties-if-device-does-not-stop-and-destroys-itself9_anchor">Risk of casualties if device does not stop and destroys itself</div></a></li><li><div><a href="#risk-of-killing-birds-and-polluting-the-environment10_anchor">Risk of killing birds and polluting the environment</div></a></li><li><div><a href="#noise-and-vibration-levels11_anchor">Noise and vibration levels</div></a></li></ol></li></ol><li><div><a href="#header-embedded-document12_anchor">Header Embedded Document</div></a><ol><li><div><a href="#header-embedded-document-content-examples13_anchor">Header Embedded Document content Examples</div></a></li></ol><li><div><a href="#reports14_anchor">Reports</div></a><ol><li><div><a href="#project-reports15_anchor">Project Reports</div></a></li><li><div><a href="#sale-order-reports16_anchor">Sale Order Reports</div></a></ol></ol></section>
<section>
<table>
<thead>
<tr>
......@@ -220,8 +128,9 @@
</tbody>
</table>
</section>
<section>
<section>
<table>
<thead>
<tr>
......@@ -251,8 +160,9 @@
</tbody>
</table>
</section>
<section>
<section>
<table>
<thead>
<tr>
......@@ -287,6 +197,137 @@
</tbody>
</table>
</section>
<!--tal:comment replace="nothing">Directly called from WebPage_createBook, so need to check again</tal:comment>
<tal:block tal:condition="python: book_include_history != 0">
<section>
<table class="ci-book-table ci-book-signature-list" border="1" width="100%" cellpadding="0" cellspacing="0">
<thead>
<tr>
<th colspan="4" i18n:translate="" i18n:domain="erp5_ui">Signature List</th>
</tr>
<tr>
<th width="25%" i18n:translate="" i18n:domain="erp5_ui">Name</th>
<th width="25%"><span i18n:translate="" i18n:domain="erp5_ui">Function</span><br /><span i18n:translate="" i18n:domain="erp5_ui">Company</span></th>
<th width="25%" i18n:translate="" i18n:domain="erp5_ui">Signature</th>
<th width="25%" i18n:translate="" i18n:domain="erp5_ui">Date</th>
</tr>
</thead>
<tbody>
<tal:block tal:condition="python: len(book_signature_list) > 0">
<tal:block tal:repeat="person book_signature_list">
<tr>
<td width="25%"><em i18n:translate="" i18n:domain="erp5_ui">Signed by:</em><strong tal:content="python: person.title"></strong></td>
<td width="25%" tal:content="python: person.career_subordination_title"></td>
<td width="25%" tal:content="python: person.career_function"></td>
<td width="25%" tal:content="python: Date().strftime('%Y-%m-%d')"></td>
</tr>
</tal:block>
</tal:block>
<tal:block tal:condition="python: len(book_signature_list) == 0">
<tr>
<td width="25%"><em i18n:translate="" i18n:domain="erp5_ui">Signed by:</em><strong>Sample Person</strong></td>
<td width="25%">CEO</td>
<td width="25%">Sample Company</td>
<td width="25%">20xx-xx-xx</td>
</tr>
</tal:block>
</tbody>
</table>
</section>
<section>
<table class="ci-book-table ci-book-distribution-list" border="1" width="100%" cellpadding="0" cellspacing="0">
<thead>
<tr>
<th i18n:translate="" i18n:domain="erp5_ui">Distribution List</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<ul>
<tal:block tal:condition="python: len(book_distribution_list) > 0">
<tal:block tal:repeat="person book_distribution_list">
<li tal:condition="person/odd">
<div tal:content="python: person.title"></div>
<div tal:content="python: person.career_function"></div>
</li>
</tal:block>
</tal:block>
<tal:block tal:condition="python: len(book_distribution_list) == 0">
<li>
<div>Sample Person</div>
<div>Sample Company</div>
</li>
</tal:block>
</ul>
<ul>
<tal:block tal:condition="python: len(book_distribution_list) > 0">
<tal:block tal:repeat="person book_distribution_list">
<li tal:condition="person/even">
<div tal:content="python: person.title"></div>
<div tal:content="python: person.career_function"></div>
</li>
</tal:block>
</tal:block>
<tal:block tal:condition="python: len(book_distribution_list) == 0">
<li>
<div>Sample Person</div>
<div>Sample Company</div>
</li>
</tal:block>
</ul>
</td>
</tr>
</tbody>
</table>
</section>
<section>
<table class="ci-book-table ci-book-version-list" border="1" width="100%" cellpadding="0" cellspacing="0">
<thead>
<tr>
<th colspan="4" i18n:translate="" i18n:domain="erp5_ui">Version Table</th>
</tr>
<tr>
<th width="15%" i18n:translate="" i18n:domain="erp5_ui">Version</th>
<th width="20%" i18n:translate="" i18n:domain="erp5_ui">Date</th>
<th width="15%" i18n:translate="" i18n:domain="erp5_ui">Page</th>
<th width="55%" i18n:translate="" i18n:domain="erp5_ui">Description of Modifications</th>
</tr>
</thead>
<tbody>
<tal:block tal:condition="python: len(book_version_list) > 0">
<tal:block tal:repeat="version book_version_list">
<tr>
<td width="15%" tal:content="python: version.number"></td>
<td width="20%" tal:content="python: version.date"></td>
<td width="15%" tal:content="python: version.modifciations"></td>
<td width="55%" tal:content="python: version.comment" style="text-align: left"></td>
</tr>
</tal:block>
</tal:block>
<tal:block tal:condition="python: len(book_version_list) == 0">
<tr>
<td width="15%">001</td>
<td width="20%">20xx-xx-xx</td>
<td width="15%">All</td>
<td width="55%" style="text-align: right">Added example content, corrections.</td>
</tr>
</tal:block>
</tbody>
</table>
</section>
</tal:block-->
<section class="ci-book-table-of-content"><p class="ci-book-toc-faux-h1">Table of Contents</p><ol><li><div><a href="#introduction0_anchor">Introduction</div></a><ol><li><div><a href="#references1_anchor">References</div></a><ol><li><div><a href="#applicable-documents2_anchor">Applicable Documents</div></a></li><li><div><a href="#referenced-documents3_anchor">Referenced Documents</div></a></li></ol><li><div><a href="#abbreviations4_anchor">Abbreviations</div></a></li><li><div><a href="#figures5_anchor">Figures</div></a></li><li><div><a href="#tables6_anchor">Tables</div></a></li></ol><li><div><a href="#synthese7_anchor">Synthese</div></a><ol><li><div><a href="#risks-and-measures8_anchor">Risks and measures</div></a><ol><li><div><a href="#risk-of-casualties-if-device-does-not-stop-and-destroys-itself9_anchor">Risk of casualties if device does not stop and destroys itself</div></a></li><li><div><a href="#risk-of-killing-birds-and-polluting-the-environment10_anchor">Risk of killing birds and polluting the environment</div></a></li><li><div><a href="#noise-and-vibration-levels11_anchor">Noise and vibration levels</div></a></li></ol></li></ol><li><div><a href="#header-embedded-document12_anchor">Header Embedded Document</div></a><ol><li><div><a href="#header-embedded-document-content-examples13_anchor">Header Embedded Document content Examples</div></a></li></ol><li><div><a href="#reports14_anchor">Reports</div></a><ol><li><div><a href="#project-reports15_anchor">Project Reports</div></a></li><li><div><a href="#sale-order-reports16_anchor">Sale Order Reports</div></a></ol></ol></section>
<h1><a name="introduction0_anchor"></a>Introduction<a class="custom-para" href=#introduction0_anchor><span style="font-size:.75em;line-height:1em;padding-left:.5em;">&para;</span></a></h1>
<h2><a name="references1_anchor"></a>References<a class="custom-para" href=#references1_anchor><span style="font-size:.75em;line-height:1em;padding-left:.5em;">&para;</span></a></h2>
<p>This section provides the list of applicable documents and references.</p>
......@@ -494,13 +535,15 @@ within corelated noise and vibration in allowed by regulations levels [<a href="
Finally an abbreviation: [<a href="#AB-1" title="Enterprise Research Planning">AB-1</a>],
mixed with another link to an external <a href="https://google.com">document</a>
which should not be touched.
</p><h1><a name="header-embedded-document12_anchor"></a>Header Embedded Document<a class="custom-para" href=#header-embedded-document12_anchor><span style="font-size:.75em;line-height:1em;padding-left:.5em;">&para;</span></a></h1>
</p>
<h1><a name="header-embedded-document12_anchor"></a>Header Embedded Document<a class="custom-para" href=#header-embedded-document12_anchor><span style="font-size:.75em;line-height:1em;padding-left:.5em;">&para;</span></a></h1>
<p>This is the content of an embedded document loaded via reference.</p>
<h2><a name="header-embedded-document-content-examples13_anchor"></a>Header Embedded Document content Examples<a class="custom-para" href=#header-embedded-document-content-examples13_anchor><span style="font-size:.75em;line-height:1em;padding-left:.5em;">&para;</span></a></h2>
<p>Some more references to include in the overall tables
[<a href="#AD-2" title="Gnu">AD-2</a>], as well another image.
</p>
<a href="#Figure-1"></a><p class="ci-book-img" style="text-align:center"><img src="Template.Test.Illustration.Reach?format=png&amp;display=medium" alt="Reach" /></p><span>Figure-1 - Reach</span>
<p>Another example of an image and a table of data</p>
<a href="#Figure-2"></a><p class="ci-book-img" style="text-align:center"><img src="Template.Test.Image.Office?format=png&amp;display=medium" alt="Caption for this image" /></p><span>Figure-2 - Caption for this image</span>
<p>Another example of an image and a table of data</p>
......
......@@ -93,11 +93,6 @@
<section class="ci-book-table-of-content"><p class="ci-book-toc-faux-h1">Inhaltsverzeichnis</p><ol><li><div><a href="#synthese0_anchor">Synthese</div></a><ol><li><div><a href="#risks-and-measures1_anchor">Risks and measures</div></a><ol><li><div><a href="#risk-of-casualties-if-device-does-not-stop-and-destroys-itself2_anchor">Risk of casualties if device does not stop and destroys itself</div></a></li><li><div><a href="#risk-of-killing-birds-and-polluting-the-environment3_anchor">Risk of killing birds and polluting the environment</div></a></li><li><div><a href="#noise-and-vibration-levels4_anchor">Noise and vibration levels</div></a></li></ol></li></ol><li><div><a href="#reports5_anchor">Reports</div></a><ol><li><div><a href="#project-reports6_anchor">Project Reports</div></a></li><li><div><a href="#sale-order-reports7_anchor">Sale Order Reports</div></a></ol></ol></section>
......
<section class="screenshot">
<h1>App Configuration Router</h1>
<p>&nbsp;</p>
<pre>
<code>&nbsp; &lt;body&gt;
&nbsp; &nbsp; &lt;script data-renderjs-configuration=&quot;configuration_manifest&quot; type=&quot;text/x-renderjs-configuration&quot;&gt;gadget_officejs_nice_editor.configuration&lt;/script&gt;
&nbsp; &nbsp; &lt;script data-renderjs-configuration=&quot;parent_portal_type&quot; type=&quot;text/x-renderjs-configuration&quot;&gt;Web Page Module&lt;/script&gt;
&nbsp; &nbsp; &lt;script data-renderjs-configuration=&quot;parent_relative_url&quot; type=&quot;text/x-renderjs-configuration&quot;&gt;web_page_module&lt;/script&gt;
&nbsp; &nbsp; &lt;script data-renderjs-configuration=&quot;portal_type&quot; type=&quot;text/x-renderjs-configuration&quot;&gt;Web Page&lt;/script&gt;
&nbsp; &nbsp; &lt;script data-renderjs-configuration=&quot;portal_skin_folder&quot; type=&quot;text/x-renderjs-configuration&quot;&gt;erp5_text_editor&lt;/script&gt;
&nbsp; &nbsp; &lt;script data-renderjs-configuration=&quot;app_actions&quot; type=&quot;text/x-renderjs-configuration&quot;&gt;(&#39;Web Page Module | text_editor_view&#39;)&lt;/script&gt;
&lt;script data-renderjs-configuration=&quot;app_allowed_sub_types&quot; type=&quot;text/x-renderjs-configuration&quot;&gt;&lt;/script&gt;
&nbsp; &nbsp; &lt;script data-renderjs-configuration=&quot;web_page_module_dict&quot; type=&quot;text/x-renderjs-configuration&quot;&gt;{&quot;title&quot;: &quot;Nice Text Documents&quot;, &quot;filter_action&quot;: 1, &quot;hide_add_button&quot;: 0}&lt;/script&gt;
&nbsp; &nbsp; &lt;script data-renderjs-configuration=&quot;app_view_reference&quot; type=&quot;text/x-renderjs-configuration&quot;&gt;&lt;/script&gt;
&nbsp; &nbsp; &lt;div&gt;&lt;/div&gt;
&nbsp; &lt;/body&gt;
&lt;/html&gt;</code>
</pre>
</section>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Web Page" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Access_contents_information_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Add_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Change_local_roles_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Modify_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>_View_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>content_md5</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>default_reference</string> </key>
<value> <string>Template.Test.Slideshow.High.Light.Code</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>template_test_slideshow_highlight_code_html</string> </value>
</item>
<item>
<key> <string>language</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Web Page</string> </value>
</item>
<item>
<key> <string>short_title</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Template Test Slideshow High Light Code</string> </value>
</item>
<item>
<key> <string>version</string> </key>
<value>
<none/>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
......@@ -111,6 +111,20 @@ class TestCorporateIdentityMethod(ERP5TypeTestCase):
self.portal.portal_preferences.default_site_preference.enable()
self.tic()
def test_WebPage_createImageOverview(self):
web_page = self.portal.web_page_module.template_test_slideshow_input_001_en_html
document_content = '<div><img src="http://test.png" /></div>'
expected_dict ={'figure_list': []}
output_dict = web_page.WebPage_createImageOverview(document_content)
self.assertEquals(output_dict, expected_dict)
document_content = '<div><img src="http://test.png" alt="test" /></div>'
expected_dict ={'figure_list': [{'input': '<img src="http://test.png" alt="test" />',
'item': {'id': 'Figure-1', 'title': 'test'},
'output': '<a href="#Figure-1"></a><img src="http://test.png" alt="test" /><span>Figure-1 - test</span>'}]}
output_dict = web_page.WebPage_createImageOverview(document_content)
self.assertEquals(output_dict, expected_dict)
def test_validateImage(self):
web_page = self.portal.web_page_module.template_test_slideshow_input_001_en_html
img_string = ''
......@@ -146,6 +160,10 @@ class TestCorporateIdentityMethod(ERP5TypeTestCase):
output_string = web_page.WebPage_validateImage(img_string=img_string)
self.assertEqual(output_string, '<img src="Template.Test.Image.Map?version=1&amp;format=">')
img_string = '<img src="Template.Test.Image.Map/getData">'
output_string = web_page.WebPage_validateImage(img_string=img_string)
self.assertEqual(output_string, '<img src="Template.Test.Image.Map/getData?format=">')
img_string = '<img src="./Template.Test.Image.Map?version=1">'
output_string = web_page.WebPage_validateImage(img_string=img_string)
self.assertEqual(output_string, '<img src="Template.Test.Image.Map?version=1&amp;format=">')
......@@ -172,7 +190,7 @@ class TestCorporateIdentityMethod(ERP5TypeTestCase):
# be careful of space between <div> <a>
doc_content = '<div> <a href="Template.Test.Book.Embeddable.Document">This link should be embedded</a> </div>'
output =web_page.WebPage_embedLinkedDocumentList(doc_content)
self.assertEqual(output, '<div>%s</div>' %web_page.restrictedTraverse('Template.Test.Book.Embeddable.Document').asStrippedHTML())
self.assertEqual(output, '<div> %s </div>' %web_page.restrictedTraverse('Template.Test.Book.Embeddable.Document').asStrippedHTML())
def test_webPage_embedReportDocumentList(self):
web_page_no_follow_up = self.portal.web_page_module.template_test_slideshow_input_001_en_html
......@@ -188,11 +206,11 @@ class TestCorporateIdentityMethod(ERP5TypeTestCase):
# it has no matter with/without follow up
doc_content = '<div> <a href="sale_opportunity_module/template_test_embed_sale_opportunity?report=Base_generateCorporareIdentityTestReport&amp;test=23"></a> </div>'
output =web_page_with_follow_up.WebPage_embedReportDocumentList(doc_content)
self.assertEqual(output, '<div>test report {"test": "23", "document_language": null, "format": null}</div>')
self.assertEqual(output, '<div> test report {"test": "23", "document_language": null, "format": null} </div>')
doc_content = '<div> <a href="sale_opportunity_module/template_test_embed_sale_opportunity?report=Base_generateCorporareIdentityTestReport&amp;test=23"></a> </div>'
output =web_page_no_follow_up.WebPage_embedReportDocumentList(doc_content)
self.assertEqual(output, '<div>test report {"test": "23", "document_language": null, "format": null}</div>')
self.assertEqual(output, '<div> test report {"test": "23", "document_language": null, "format": null} </div>')
def test_getTemplateProxyParameter_override_person(self):
output_dict_list = self.test_person.Base_getTemplateProxyParameter(
......
......@@ -460,6 +460,24 @@ class TestCorporateIdentityTemplateList(ERP5TypeTestCase):
)
self.tic()
@changeSkin('Slide')
def test_pdfAddLastSlideThroughReference(self):
self.portal.web_page_module.template_test_last_slide_html.edit(reference='DEFAULT-Marketing.Slideshow.Last.Slide')
self.tic()
self.runPdfTestPattern(
"template_test_convert_to_slideview",
"template_test_last_view_bmp",
"template_test_image_source_pdf",
**dict(
page_number=4,
use_skin="Slide",
test_method="WebPage_exportAsSlideshow",
format="pdf"
)
)
self.portal.web_page_module.template_test_last_slide_html.edit(reference='')
self.tic()
@changeSkin('Slide')
def test_pdfSlideShowForAnonymous(self):
"""
......
......@@ -30,7 +30,7 @@ from Products.ERP5Type.tests.ERP5TypeFunctionalTestCase import ERP5TypeFunctiona
class TestFunctionalCorporateIdentityTemplateList(ERP5TypeFunctionalTestCase):
foreground = 0
run_only = "template_test_zuite"
run_only = "corporate_identity_test_zuite"
def getBusinessTemplateList(self):
return (
......
......@@ -8,6 +8,6 @@ person_module/template_test*
person_module/template_test*/default**
web_page_module/template_test_*
portal_categories/group/template_test_group
portal_tests/template_test_zuite
portal_tests/template_test_zuite/*
portal_tests/corporate_identity_test_zuite
portal_tests/corporate_identity_test_zuite/*
support_request_module/template_test_*
\ No newline at end of file
......@@ -8,8 +8,8 @@ person_module/template_test*/default**
portal_categories/function/company
portal_categories/function/company/executive
portal_categories/group/template*
portal_tests/template_test_zuite
portal_tests/template_test_zuite/*
portal_tests/corporate_identity_test_zuite
portal_tests/corporate_identity_test_zuite/*
product_module/template_test_product
sale_opportunity_module/template_test_*
support_request_module/template_test_*
......
......@@ -252,8 +252,10 @@ else:
root_url = base_url_root_object.absolute_url()
base_url = base_url_object.absolute_url()
assert base_url_object.getRelativeUrl().startswith(base_url_root_object.getRelativeUrl())
base_path = base_url_object.getRelativeUrl()[len(base_url_root_object.getRelativeUrl()):]
if base_url_object.getRelativeUrl().startswith(base_url_root_object.getRelativeUrl()):
base_path = base_url_object.getRelativeUrl()[len(base_url_root_object.getRelativeUrl()):]
else:
base_path = base_url_object.getRelativeUrl()
if not base_path.startswith("/"):
base_path = "/" + base_path
......
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