Commit 37c8ca93 authored by Romain Courteaud's avatar Romain Courteaud

erp5_web_js_style: generate feed from the web section's document list

Generate a hfeed in the HTML rendering.
https://indieweb.org/feed

Provide a RSS feed automatically.

Only generate the feed when rendering the web section in view mode.

Extract all feed informations in Javascript to allow styling it as a blog.
parent 3379bd22
...@@ -26,9 +26,24 @@ def generateSectionListHTML(result_list, section_list): ...@@ -26,9 +26,24 @@ def generateSectionListHTML(result_list, section_list):
def generateDocumentListHTML(result_list, document_list): def generateDocumentListHTML(result_list, document_list):
if (document_list): if (document_list):
result_list.append('<aside id="document_list"><ul>') result_list.append('<aside id="document_list"><ul class="h-feed">')
for section in document_list: for section in document_list:
result_list.append('<li><a href="%s">%s</a></li>' % (__(section['url']), _(section['translated_title']))) result_list.append("""
<li class="h-entry">
<div class="e-content">
<h2 class="p-name">%s</h2>
%s
</div>
%s
<p><a class="u-url" rel="permalink" href="%s"><time class="dt-published" datetime="%s">%s</time></a></p>
</li>""" % (
_(section['translated_title']),
('<p class="p-summary">%s</p>' % _(section['description'])) if section.get('description', '') else '',
('<p class="p-author h-card">%s</p>' % _(section['contributor_title'])) if section.get('contributor_title', '') else '',
__(section['url']),
_(section['modification_date'].HTML4()),
_(section['modification_date'].rfc822())
))
result_list.append('</ul></aside>') result_list.append('</ul></aside>')
...@@ -59,6 +74,7 @@ generateSectionListHTML(result_list, web_site.WebSection_getSiteMapTree(include_ ...@@ -59,6 +74,7 @@ generateSectionListHTML(result_list, web_site.WebSection_getSiteMapTree(include_
result_list.append('</nav>') result_list.append('</nav>')
# Documents # Documents
generateDocumentListHTML(result_list, web_section.WebSection_getSiteMapTree(include_subsection=False, exclude_default_document=True, depth=1)) if include_document:
generateDocumentListHTML(result_list, web_section.WebSection_getSiteMapTree(include_subsection=False, exclude_default_document=True, depth=1, property_mapping=('translated_title', 'description', 'modification_date', 'contributor_title')))
return ''.join(result_list) return ''.join(result_list)
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
</item> </item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string></string> </value> <value> <string>include_document=False</string> </value>
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</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>_Cacheable__manager_id</string> </key>
<value> <string>caching_policy_manager</string> </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_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>application/rss+xml</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>feed.rss</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"?>
<tal:block xmlns:tal="http://xml.zope.org/namespaces/tal"
xmlns:metal="http://xml.zope.org/namespaces/metal"
xmlns:i18n="http://xml.zope.org/namespaces/i18n"
tal:define="
web_section python: here.getWebSectionValue();
include_document python: web_section.isSiteMapDocumentParent() and (here.getRelativeUrl() == web_section.getRelativeUrl());">
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title tal:content="python: web_section.getTranslatedTitle()"></title>
<link tal:content="python: web_section.absolute_url()"></link>
<lastBuildDate tal:content="python: DateTime().rfc822()"></lastBuildDate>
<description tal:condition="python: web_section.getDescription()" tal:content="python: web_section.getDescription()"></description>
</channel>
<tal:block tal:condition="include_document">
<tal:block tal:repeat="item python: web_section.WebSection_getSiteMapTree(include_subsection=False, exclude_default_document=True, depth=1, property_mapping=('translated_title', 'description', 'modification_date', 'contributor_title'))">
<item>
<author tal:condition="python: item.get('contributor_title', '')" tal:content="python: item['contributor_title']"></author>
<guid tal:content="python: item['url']"></guid>
<pubDate tal:content="python: item['modification_date'].rfc822()"></pubDate>
<title tal:content="python: item['translated_title']"></title>
<description tal:condition="python: item.get('description', '')" tal:content="python: item['description']"></description>
</item>
</tal:block>
</tal:block>
</rss>
</tal:block>
\ No newline at end of file
...@@ -109,6 +109,84 @@ ...@@ -109,6 +109,84 @@
return sitemap; return sitemap;
} }
function parseDate(date_string) {
var date = Date.parse(date_string);
if (isNaN(date)) {
// Hack to fix a specific non-ISO date format.
// "Mon, 07 Oct 2013 16:49:10 Z" = "D, d M Y H:i:s Z"
date_string = date_string.substring(0, date_string.length - 1);
date = Date.parse(date_string);
}
if (!isNaN(date)) {
return new Date(date).toUTCString();
}
return;
}
function parseMicroFormat(item) {
// http://indiewebcamp.com/page-name-discovery
// http://indiewebcamp.com/h-entry#How_to_consume_h-entry
// http://indiewebcamp.com/comment-presentation#How_to_display
var result = {},
element_name = item.querySelector(".p-name"),
element_content = item.querySelector(".e-content"),
element_summary = item.querySelector(".p-summary"),
element_permalink = item.querySelector("a[rel='permalink']"),
element_publication_date = item.querySelector("time.dt-published"),
element_author = item.querySelector(".p-author"),
element_link;
// publication date
if (element_publication_date !== null) {
result.date = element_publication_date.getAttribute('datetime');
if (result.date === null) {
// Get text content?
delete result.date;
} else {
result.date = parseDate(result.date);
}
}
// title
if (element_name !== null) {
result.text = element_name.textContent;
// Drop title from content
element_name.parentElement.removeChild(element_name);
}
// title
if (element_author !== null) {
result.author = element_author.textContent;
// Drop author from content
element_author.parentElement.removeChild(element_author);
}
// content
if (element_summary !== null) {
element_content = element_summary;
} else if (element_content === null) {
element_content = item;
}
if (element_content !== null) {
result.description = element_content.textContent;
}
// Search for the URL
if (element_permalink === null) {
element_link = item.querySelector(".u-url");
} else {
element_link = element_permalink;
}
if (element_link !== null) {
result.href = element_link.getAttribute('href');
}
return result;
}
function parseDocumentListElement(document_list_element) { function parseDocumentListElement(document_list_element) {
var document_list = [], var document_list = [],
li_list, li_list,
...@@ -117,12 +195,9 @@ ...@@ -117,12 +195,9 @@
return document_list; return document_list;
} }
li_list = document_list_element.querySelectorAll('a'); li_list = document_list_element.querySelectorAll('.h-entry');
for (i = 0; i < li_list.length; i += 1) { for (i = 0; i < li_list.length; i += 1) {
document_list.push({ document_list.push(parseMicroFormat(li_list[i]));
href: li_list[i].href,
text: li_list[i].textContent
});
} }
return document_list; return document_list;
} }
...@@ -145,13 +220,15 @@ ...@@ -145,13 +220,15 @@
return result; return result;
} }
function parsePageContent(body_element, language, base_uri) { function parsePageContent(body_element, language, alternate_element,
base_uri) {
var i, var i,
element, element,
element_list, element_list,
j, j,
url_attribute_list = ['src', 'href', 'srcset', 'action'], url_attribute_list = ['src', 'href', 'srcset', 'action'],
url_attribute; url_attribute,
feed_url = null;
if (base_uri !== undefined) { if (base_uri !== undefined) {
// Rewrite relative url (copied from renderjs) // Rewrite relative url (copied from renderjs)
...@@ -171,7 +248,15 @@ ...@@ -171,7 +248,15 @@
} }
if (alternate_element !== null) {
feed_url = alternate_element.getAttribute('href');
if (base_uri !== undefined) {
feed_url = new URL(feed_url, base_uri).href;
}
}
return { return {
feed_url: feed_url,
original_content: body_element.innerHTML, original_content: body_element.innerHTML,
html_content: body_element.querySelector('main').innerHTML, html_content: body_element.querySelector('main').innerHTML,
language: language, language: language,
...@@ -216,9 +301,12 @@ ...@@ -216,9 +301,12 @@
// consider this must be reloaded // consider this must be reloaded
throw new Error('Trigger an error to force reload'); throw new Error('Trigger an error to force reload');
} }
parsed_content = parsePageContent(dom_parser.body, parsed_content = parsePageContent(
dom_parser.documentElement.lang, dom_parser.body,
dom_parser.baseURI); dom_parser.documentElement.lang,
dom_parser.querySelector('link[rel=alternate]'),
dom_parser.baseURI
);
gadget.parsed_content = parsed_content; gadget.parsed_content = parsed_content;
parsed_content.page_title = dom_parser.title; parsed_content.page_title = dom_parser.title;
return result_dict.style_gadget.render(parsed_content.html_content, return result_dict.style_gadget.render(parsed_content.html_content,
...@@ -315,8 +403,11 @@ ...@@ -315,8 +403,11 @@
return rJS.declareCSS(style_css_url, document.head); return rJS.declareCSS(style_css_url, document.head);
} }
parsed_content = parsePageContent(gadget.element, parsed_content = parsePageContent(
document.documentElement.lang); gadget.element,
document.documentElement.lang,
document.querySelector('link[rel=alternate]')
);
gadget.parsed_content = parsed_content; gadget.parsed_content = parsed_content;
parsed_content.page_title = document.title; parsed_content.page_title = document.title;
gadget.style_gadget_url = gadget.style_gadget_url =
......
...@@ -22,7 +22,8 @@ ...@@ -22,7 +22,8 @@
keyword_list python: web_section.getSubjectList(); keyword_list python: web_section.getSubjectList();
og_locale_dict python: web_site.WebSite_getOgLocaleDict(); og_locale_dict python: web_site.WebSite_getOgLocaleDict();
current_language python: web_site.getPortalObject().Localizer.get_selected_language(); current_language python: web_site.getPortalObject().Localizer.get_selected_language();
global_definitions_macros here/global_definitions/macros;"> global_definitions_macros here/global_definitions/macros;
include_document python: web_section.isSiteMapDocumentParent() and (here.getRelativeUrl() == web_section.getRelativeUrl());">
<tal:block metal:use-macro="global_definitions_macros/header_definitions" /> <tal:block metal:use-macro="global_definitions_macros/header_definitions" />
<html tal:attributes="lang current_language"> <html tal:attributes="lang current_language">
<head> <head>
...@@ -32,6 +33,7 @@ ...@@ -32,6 +33,7 @@
<tal:block tal:condition="favicon_url"> <tal:block tal:condition="favicon_url">
<link rel="icon" tal:attributes="href favicon_url" /> <link rel="icon" tal:attributes="href favicon_url" />
</tal:block> </tal:block>
<link tal:condition="include_document" rel="alternate" type="application/rss+xml" href="feed.rss" />
<tal:block tal:condition="keyword_list"> <tal:block tal:condition="keyword_list">
<meta name="keywords" tal:attributes="content python: ','.join(keyword_list)"> <meta name="keywords" tal:attributes="content python: ','.join(keyword_list)">
</tal:block> </tal:block>
...@@ -75,7 +77,7 @@ ...@@ -75,7 +77,7 @@
</head> </head>
<body tal:attributes="data-nostyle-gadget-url no_style_gadget_url; <body tal:attributes="data-nostyle-gadget-url no_style_gadget_url;
data-nostyle-css-url no_style_css_url"> data-nostyle-css-url no_style_css_url">
<tal:block tal:content="structure python: web_section.WebSection_generateNavigationHTML()"></tal:block> <tal:block tal:content="structure python: web_section.WebSection_generateNavigationHTML(include_document=include_document)"></tal:block>
<p tal:content="request/portal_status_message | nothing" id="portal_status_message"/> <p tal:content="request/portal_status_message | nothing" id="portal_status_message"/>
<main><tal:block metal:define-slot="main"/></main> <main><tal:block metal:define-slot="main"/></main>
......
...@@ -69,7 +69,28 @@ ...@@ -69,7 +69,28 @@
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//aside[@id='document_list']//a[text()='erp5_web_js_style_test_contentpage']</td> <td>//p[@id='feed_url' and text()='feed.rss']</td>
<td></td>
</tr>
<tr>
<td>assertElementPresent</td>
<td>//aside[@id='document_list']//a[text()='erp5_web_js_style_test_contentpage title' and contains(@href, 'web_site_module/erp5_web_js_style_test_site/erp5_web_js_style_test_contentpage')]</td>
<td></td>
</tr>
<tr>
<td>assertElementPresent</td>
<td>//aside[@id='document_list']//p[text()='Author: erp5_web_js_style_test_contributor']</td>
<td></td>
</tr>
<tr>
<td>assertElementPresent</td>
<td>//aside[@id='document_list']//p[text()='Description: erp5_web_js_style_test_contentpage description']</td>
<td></td>
</tr>
<tr>
<td>assertElementPresent</td>
<td>//aside[@id='document_list']//p[contains(text(), 'Date: ') and contains(text(), 'GMT')]</td>
<td></td> <td></td>
</tr> </tr>
......
...@@ -37,6 +37,11 @@ ...@@ -37,6 +37,11 @@
<td>//head/link[@rel='prerender']</td> <td>//head/link[@rel='prerender']</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//head/link[@rel='alternate' and @type='application/rss+xml' and @href='feed.rss']</td>
<td></td>
</tr>
<tr> <tr>
<td>waitForElementPresent</td> <td>waitForElementPresent</td>
...@@ -63,7 +68,22 @@ ...@@ -63,7 +68,22 @@
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//aside[@id='document_list']//a[text()='erp5_web_js_style_test_contentpage']</td> <td>//aside[@id='document_list']//ul[@class="h-feed"]//li[@class="h-entry"]//div[@class="e-content"]//h2[@class="p-name" and text()='erp5_web_js_style_test_contentpage title']</td>
<td></td>
</tr>
<tr>
<td>assertElementPresent</td>
<td>//aside[@id='document_list']//ul[@class="h-feed"]//li[@class="h-entry"]//div[@class="e-content"]//p[@class="p-summary" and text()='erp5_web_js_style_test_contentpage description']</td>
<td></td>
</tr>
<tr>
<td>assertElementPresent</td>
<td>//aside[@id='document_list']//ul[@class="h-feed"]//li[@class="h-entry"]//p[@class="p-author h-card" and text()='erp5_web_js_style_test_contributor']</td>
<td></td>
</tr>
<tr>
<td>assertElementPresent</td>
<td>//aside[@id='document_list']//ul[@class="h-feed"]//li[@class="h-entry"]//a[@class="u-url" and @rel='permalink' and contains(@href, 'web_site_module/erp5_web_js_style_test_site/erp5_web_js_style_test_contentpage')]//time[@class="dt-published" and contains(@datetime, 'T')]</td>
<td></td> <td></td>
</tr> </tr>
......
<?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>testJsStyleNoStyleReference</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 JS Style No Style</title>
</head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
<thead>
<tr><td rowspan="1" colspan="3">Test JS Style No Style</td></tr>
</thead><tbody>
<tal:block metal:use-macro="here/Zuite_CommonTemplate/macros/init" />
<tr>
<td>open</td>
<td>${base_url}/ERP5Site_createWebJSStyleZuiteTestData?configuration=nostyle</td>
<td></td>
</tr>
<tr>
<td>assertTextPresent</td>
<td>Web Site created.</td>
<td></td>
</tr>
<tal:block metal:use-macro="here/Zuite_CommonTemplate/macros/wait_for_activities" />
<!-- Initialize -->
<tr>
<td>open</td>
<td>${base_url}/web_site_module/erp5_web_js_style_test_site/erp5_web_js_style_test_contentpage</td>
<td></td>
</tr>
<tr>
<td>assertElementNotPresent</td>
<td>//head/link[@rel='prerender']</td>
<td></td>
</tr>
<tr>
<td>assertElementNotPresent</td>
<td>//head/link[@rel='alternate' and @type='application/rss+xml' and @href='feed.rss']</td>
<td></td>
</tr>
<tr>
<td>waitForElementPresent</td>
<td>//head/link[@rel='stylesheet' and @href='jsstyle.css']</td>
<td></td>
</tr>
<tr>
<td>assertElementPresent</td>
<td>//head/link[@rel='stylesheet' and @href='jsstyle.css']</td>
<td></td>
</tr>
<tr>
<td>assertElementPresent</td>
<td>//nav[@id='sitemap']/a[text()='No Style']</td>
<td></td>
</tr>
<tr>
<td>assertElementPresent</td>
<td>//nav[@id='language']//a[@hreflang='en']</td>
<td></td>
</tr>
<tr>
<td>assertElementNotPresent</td>
<td>//aside[@id='document_list']</td>
<td></td>
</tr>
<tr>
<td>assertElementPresent</td>
<td>//div[@class='input']//p[text()='Subpage content']</td>
<td></td>
</tr>
</tbody></table>
</body>
</html>
\ No newline at end of file
...@@ -55,6 +55,11 @@ ...@@ -55,6 +55,11 @@
<td>//p[@id='current_language'][contains(text(), 'en')]</td> <td>//p[@id='current_language'][contains(text(), 'en')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td>
......
...@@ -60,6 +60,11 @@ ...@@ -60,6 +60,11 @@
<td>//p[@id='current_language'][contains(text(), 'en')]</td> <td>//p[@id='current_language'][contains(text(), 'en')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/erp5_web_js_style_test_section_form/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/erp5_web_js_style_test_section_form/jsstyle_demo.html')]</td>
...@@ -131,6 +136,11 @@ ...@@ -131,6 +136,11 @@
<td>//p[@id='current_language'][contains(text(), 'en')]</td> <td>//p[@id='current_language'][contains(text(), 'en')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/erp5_web_js_style_test_section_form/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/erp5_web_js_style_test_section_form/jsstyle_demo.html')]</td>
...@@ -203,6 +213,11 @@ ...@@ -203,6 +213,11 @@
<td>//p[@id='current_language'][contains(text(), 'en')]</td> <td>//p[@id='current_language'][contains(text(), 'en')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/erp5_web_js_style_test_section_form/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/erp5_web_js_style_test_section_form/jsstyle_demo.html')]</td>
......
...@@ -55,6 +55,11 @@ ...@@ -55,6 +55,11 @@
<td>//p[@id='current_language'][contains(text(), 'en')]</td> <td>//p[@id='current_language'][contains(text(), 'en')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/erp5_web_js_style_test_section_1/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/erp5_web_js_style_test_section_1/jsstyle_demo.html')]</td>
...@@ -89,6 +94,11 @@ ...@@ -89,6 +94,11 @@
<td>//p[@id='current_language'][contains(text(), 'en')]</td> <td>//p[@id='current_language'][contains(text(), 'en')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/erp5_web_js_style_test_section_1/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/erp5_web_js_style_test_section_1/jsstyle_demo.html')]</td>
...@@ -132,6 +142,11 @@ ...@@ -132,6 +142,11 @@
<td>//p[@id='current_language'][contains(text(), 'fr')]</td> <td>//p[@id='current_language'][contains(text(), 'fr')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/fr/erp5_web_js_style_test_section_1/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/fr/erp5_web_js_style_test_section_1/jsstyle_demo.html')]</td>
...@@ -166,6 +181,11 @@ ...@@ -166,6 +181,11 @@
<td>//p[@id='current_language'][contains(text(), 'fr')]</td> <td>//p[@id='current_language'][contains(text(), 'fr')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/fr/erp5_web_js_style_test_section_1/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/fr/erp5_web_js_style_test_section_1/jsstyle_demo.html')]</td>
......
...@@ -55,6 +55,11 @@ ...@@ -55,6 +55,11 @@
<td>//p[@id='current_language'][contains(text(), 'en')]</td> <td>//p[@id='current_language'][contains(text(), 'en')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/erp5_web_js_style_test_section_1/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/erp5_web_js_style_test_section_1/jsstyle_demo.html')]</td>
...@@ -89,6 +94,11 @@ ...@@ -89,6 +94,11 @@
<td>//p[@id='current_language'][contains(text(), 'en')]</td> <td>//p[@id='current_language'][contains(text(), 'en')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/erp5_web_js_style_test_section_1/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/erp5_web_js_style_test_section_1/jsstyle_demo.html')]</td>
...@@ -123,6 +133,11 @@ ...@@ -123,6 +133,11 @@
<td>//p[@id='current_language'][contains(text(), 'en')]</td> <td>//p[@id='current_language'][contains(text(), 'en')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/erp5_web_js_style_test_section_1/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/erp5_web_js_style_test_section_1/jsstyle_demo.html')]</td>
...@@ -166,6 +181,11 @@ ...@@ -166,6 +181,11 @@
<td>//p[@id='current_language'][contains(text(), 'fr')]</td> <td>//p[@id='current_language'][contains(text(), 'fr')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/fr/erp5_web_js_style_test_section_1/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/fr/erp5_web_js_style_test_section_1/jsstyle_demo.html')]</td>
...@@ -200,6 +220,11 @@ ...@@ -200,6 +220,11 @@
<td>//p[@id='current_language'][contains(text(), 'fr')]</td> <td>//p[@id='current_language'][contains(text(), 'fr')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/fr/erp5_web_js_style_test_section_1/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/fr/erp5_web_js_style_test_section_1/jsstyle_demo.html')]</td>
...@@ -234,6 +259,11 @@ ...@@ -234,6 +259,11 @@
<td>//p[@id='current_language'][contains(text(), 'fr')]</td> <td>//p[@id='current_language'][contains(text(), 'fr')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/fr/erp5_web_js_style_test_section_1/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/fr/erp5_web_js_style_test_section_1/jsstyle_demo.html')]</td>
......
...@@ -55,6 +55,11 @@ ...@@ -55,6 +55,11 @@
<td>//p[@id='current_language'][contains(text(), 'en')]</td> <td>//p[@id='current_language'][contains(text(), 'en')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td>
...@@ -100,6 +105,11 @@ ...@@ -100,6 +105,11 @@
<td>//p[@id='current_language'][contains(text(), 'fr')]</td> <td>//p[@id='current_language'][contains(text(), 'fr')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/fr/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/fr/jsstyle_demo.html')]</td>
......
...@@ -55,6 +55,11 @@ ...@@ -55,6 +55,11 @@
<td>//p[@id='current_language'][contains(text(), 'en')]</td> <td>//p[@id='current_language'][contains(text(), 'en')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td>
...@@ -100,6 +105,11 @@ ...@@ -100,6 +105,11 @@
<td>//p[@id='current_language'][contains(text(), 'fr')]</td> <td>//p[@id='current_language'][contains(text(), 'fr')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td>
......
...@@ -55,6 +55,11 @@ ...@@ -55,6 +55,11 @@
<td>//p[@id='current_language'][contains(text(), 'en')]</td> <td>//p[@id='current_language'][contains(text(), 'en')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td>
...@@ -98,6 +103,11 @@ ...@@ -98,6 +103,11 @@
<td>//p[@id='current_language'][contains(text(), 'en')]</td> <td>//p[@id='current_language'][contains(text(), 'en')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/erp5_web_js_style_test_section_1/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/erp5_web_js_style_test_section_1/jsstyle_demo.html')]</td>
...@@ -141,6 +151,11 @@ ...@@ -141,6 +151,11 @@
<td>//p[@id='current_language'][contains(text(), 'en')]</td> <td>//p[@id='current_language'][contains(text(), 'en')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/erp5_web_js_style_test_section_1/erp5_web_js_style_test_section_11/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/erp5_web_js_style_test_section_1/erp5_web_js_style_test_section_11/jsstyle_demo.html')]</td>
...@@ -184,6 +199,11 @@ ...@@ -184,6 +199,11 @@
<td>//p[@id='current_language'][contains(text(), 'en')]</td> <td>//p[@id='current_language'][contains(text(), 'en')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/erp5_web_js_style_test_section_1/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/erp5_web_js_style_test_section_1/jsstyle_demo.html')]</td>
...@@ -227,6 +247,11 @@ ...@@ -227,6 +247,11 @@
<td>//p[@id='current_language'][contains(text(), 'en')]</td> <td>//p[@id='current_language'][contains(text(), 'en')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/erp5_web_js_style_test_section_2/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/erp5_web_js_style_test_section_2/jsstyle_demo.html')]</td>
...@@ -270,6 +295,11 @@ ...@@ -270,6 +295,11 @@
<td>//p[@id='current_language'][contains(text(), 'en')]</td> <td>//p[@id='current_language'][contains(text(), 'en')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td>
......
...@@ -55,6 +55,11 @@ ...@@ -55,6 +55,11 @@
<td>//p[@id='current_language'][contains(text(), 'en')]</td> <td>//p[@id='current_language'][contains(text(), 'en')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td>
...@@ -93,6 +98,11 @@ ...@@ -93,6 +98,11 @@
<td>//p[@id='current_language'][contains(text(), 'en')]</td> <td>//p[@id='current_language'][contains(text(), 'en')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td>
...@@ -131,6 +141,11 @@ ...@@ -131,6 +141,11 @@
<td>//p[@id='current_language'][contains(text(), 'en')]</td> <td>//p[@id='current_language'][contains(text(), 'en')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td>
...@@ -169,6 +184,11 @@ ...@@ -169,6 +184,11 @@
<td>//p[@id='current_language'][contains(text(), 'en')]</td> <td>//p[@id='current_language'][contains(text(), 'en')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td>
...@@ -207,6 +227,11 @@ ...@@ -207,6 +227,11 @@
<td>//p[@id='current_language'][contains(text(), 'en')]</td> <td>//p[@id='current_language'][contains(text(), 'en')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td>
...@@ -245,6 +270,11 @@ ...@@ -245,6 +270,11 @@
<td>//p[@id='current_language'][contains(text(), 'en')]</td> <td>//p[@id='current_language'][contains(text(), 'en')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td>
......
...@@ -50,6 +50,11 @@ ...@@ -50,6 +50,11 @@
<td>//p[@id='current_language'][contains(text(), 'en')]</td> <td>//p[@id='current_language'][contains(text(), 'en')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//main//p[text()='Frontpage content']</td> <td>//main//p[text()='Frontpage content']</td>
...@@ -93,6 +98,11 @@ ...@@ -93,6 +98,11 @@
<td>//p[@id='current_language'][contains(text(), 'fr')]</td> <td>//p[@id='current_language'][contains(text(), 'fr')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//main//p[text()="Contenu de la page d'accueil"]</td> <td>//main//p[text()="Contenu de la page d'accueil"]</td>
...@@ -136,6 +146,11 @@ ...@@ -136,6 +146,11 @@
<td>//p[@id='current_language'][contains(text(), 'zh')]</td> <td>//p[@id='current_language'][contains(text(), 'zh')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//main//p[text()="主页内容"]</td> <td>//main//p[text()="主页内容"]</td>
...@@ -179,6 +194,11 @@ ...@@ -179,6 +194,11 @@
<td>//p[@id='current_language'][contains(text(), 'en')]</td> <td>//p[@id='current_language'][contains(text(), 'en')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//main//p[text()='Frontpage content']</td> <td>//main//p[text()='Frontpage content']</td>
......
...@@ -50,6 +50,11 @@ ...@@ -50,6 +50,11 @@
<td>//p[@id='current_language'][contains(text(), 'en')]</td> <td>//p[@id='current_language'][contains(text(), 'en')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//main//p[text()='Frontpage content']</td> <td>//main//p[text()='Frontpage content']</td>
...@@ -93,6 +98,11 @@ ...@@ -93,6 +98,11 @@
<td>//p[@id='current_language'][contains(text(), 'fr')]</td> <td>//p[@id='current_language'][contains(text(), 'fr')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//main//p[text()="Contenu de la page d'accueil"]</td> <td>//main//p[text()="Contenu de la page d'accueil"]</td>
...@@ -136,6 +146,11 @@ ...@@ -136,6 +146,11 @@
<td>//p[@id='current_language'][contains(text(), 'zh')]</td> <td>//p[@id='current_language'][contains(text(), 'zh')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//main//p[text()="主页内容"]</td> <td>//main//p[text()="主页内容"]</td>
...@@ -179,6 +194,11 @@ ...@@ -179,6 +194,11 @@
<td>//p[@id='current_language'][contains(text(), 'en')]</td> <td>//p[@id='current_language'][contains(text(), 'en')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//main//p[text()='Frontpage content']</td> <td>//main//p[text()='Frontpage content']</td>
......
...@@ -50,6 +50,11 @@ ...@@ -50,6 +50,11 @@
<td>//p[@id='current_language'][contains(text(), 'en')]</td> <td>//p[@id='current_language'][contains(text(), 'en')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//main//p[text()='Frontpage content']</td> <td>//main//p[text()='Frontpage content']</td>
...@@ -88,6 +93,11 @@ ...@@ -88,6 +93,11 @@
<td>//p[@id='current_language'][contains(text(), 'fr')]</td> <td>//p[@id='current_language'][contains(text(), 'fr')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//main//p[text()="Contenu de la page d'accueil"]</td> <td>//main//p[text()="Contenu de la page d'accueil"]</td>
...@@ -126,6 +136,11 @@ ...@@ -126,6 +136,11 @@
<td>//p[@id='current_language'][contains(text(), 'zh')]</td> <td>//p[@id='current_language'][contains(text(), 'zh')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//main//p[text()="主页内容"]</td> <td>//main//p[text()="主页内容"]</td>
...@@ -164,6 +179,11 @@ ...@@ -164,6 +179,11 @@
<td>//p[@id='current_language'][contains(text(), 'en')]</td> <td>//p[@id='current_language'][contains(text(), 'en')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//main//p[text()='Frontpage content']</td> <td>//main//p[text()='Frontpage content']</td>
......
...@@ -55,6 +55,11 @@ ...@@ -55,6 +55,11 @@
<td>//p[@id='current_language'][contains(text(), 'en')]</td> <td>//p[@id='current_language'][contains(text(), 'en')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and text()='feed.rss']</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td>
......
...@@ -60,6 +60,11 @@ ...@@ -60,6 +60,11 @@
<td>//p[@id='current_language'][contains(text(), 'en')]</td> <td>//p[@id='current_language'][contains(text(), 'en')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td>
...@@ -131,6 +136,11 @@ ...@@ -131,6 +136,11 @@
<td>//p[@id='current_language'][contains(text(), 'en')]</td> <td>//p[@id='current_language'][contains(text(), 'en')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td>
...@@ -203,6 +213,11 @@ ...@@ -203,6 +213,11 @@
<td>//p[@id='current_language'][contains(text(), 'en')]</td> <td>//p[@id='current_language'][contains(text(), 'en')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td>
......
...@@ -55,6 +55,11 @@ ...@@ -55,6 +55,11 @@
<td>//p[@id='current_language'][contains(text(), 'en')]</td> <td>//p[@id='current_language'][contains(text(), 'en')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td>
...@@ -89,6 +94,11 @@ ...@@ -89,6 +94,11 @@
<td>//p[@id='current_language'][contains(text(), 'en')]</td> <td>//p[@id='current_language'][contains(text(), 'en')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td>
...@@ -132,6 +142,11 @@ ...@@ -132,6 +142,11 @@
<td>//p[@id='current_language'][contains(text(), 'fr')]</td> <td>//p[@id='current_language'][contains(text(), 'fr')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/fr/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/fr/jsstyle_demo.html')]</td>
...@@ -166,6 +181,11 @@ ...@@ -166,6 +181,11 @@
<td>//p[@id='current_language'][contains(text(), 'fr')]</td> <td>//p[@id='current_language'][contains(text(), 'fr')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/fr/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/fr/jsstyle_demo.html')]</td>
......
...@@ -55,6 +55,11 @@ ...@@ -55,6 +55,11 @@
<td>//p[@id='current_language'][contains(text(), 'en')]</td> <td>//p[@id='current_language'][contains(text(), 'en')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td>
...@@ -89,6 +94,11 @@ ...@@ -89,6 +94,11 @@
<td>//p[@id='current_language'][contains(text(), 'en')]</td> <td>//p[@id='current_language'][contains(text(), 'en')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td>
...@@ -123,6 +133,11 @@ ...@@ -123,6 +133,11 @@
<td>//p[@id='current_language'][contains(text(), 'en')]</td> <td>//p[@id='current_language'][contains(text(), 'en')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/jsstyle_demo.html')]</td>
...@@ -166,6 +181,11 @@ ...@@ -166,6 +181,11 @@
<td>//p[@id='current_language'][contains(text(), 'fr')]</td> <td>//p[@id='current_language'][contains(text(), 'fr')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/fr/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/fr/jsstyle_demo.html')]</td>
...@@ -200,6 +220,11 @@ ...@@ -200,6 +220,11 @@
<td>//p[@id='current_language'][contains(text(), 'fr')]</td> <td>//p[@id='current_language'][contains(text(), 'fr')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/fr/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/fr/jsstyle_demo.html')]</td>
...@@ -234,6 +259,11 @@ ...@@ -234,6 +259,11 @@
<td>//p[@id='current_language'][contains(text(), 'fr')]</td> <td>//p[@id='current_language'][contains(text(), 'fr')]</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementPresent</td>
<td>//p[@id='feed_url' and not(text())]</td>
<td></td>
</tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/fr/jsstyle_demo.html')]</td> <td>//p[@id='gadget_style_url'][contains(text(), 'erp5_web_js_style_test_site/fr/jsstyle_demo.html')]</td>
......
...@@ -36,12 +36,26 @@ ...@@ -36,12 +36,26 @@
<td>//head/link[@rel='prerender']</td> <td>//head/link[@rel='prerender']</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>assertElementNotPresent</td>
<td>//head/link[@rel='alternate' and @type='application/rss+xml' and @href='feed.rss']</td>
<td></td>
</tr>
<tr> <tr>
<td>waitForTextPresent</td> <td>waitForTextPresent</td>
<td>No Style Form</td> <td>No Style Form</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td colspan="3"><b>Check no document list is rendered</b></td>
</tr>
<tr>
<td>assertElementNotPresent</td>
<td>//aside[@id='document_list']</td>
<td></td>
</tr>
<tr> <tr>
<td colspan="3"><b>Check the form content</b></td> <td colspan="3"><b>Check the form content</b></td>
</tr> </tr>
......
...@@ -6,10 +6,24 @@ portal = context.getPortalObject() ...@@ -6,10 +6,24 @@ portal = context.getPortalObject()
web_page_portal_type = "Web Page" web_page_portal_type = "Web Page"
web_site_portal_type = "Web Site" web_site_portal_type = "Web Site"
web_section_portal_type = "Web Section" web_section_portal_type = "Web Section"
person_portal_type = "Person"
web_site_id = "erp5_web_js_style_test_site" web_site_id = "erp5_web_js_style_test_site"
web_section_id_prefix = "erp5_web_js_style_test_section_" web_section_id_prefix = "erp5_web_js_style_test_section_"
contributor_title = "erp5_web_js_style_test_contributor"
contributor_id = "erp5_web_js_style_test_contributor"
### English web page
module = portal.getDefaultModule(person_portal_type)
if getattr(module, contributor_id, None) is not None:
module.manage_delObjects([contributor_id])
contributor = module.newContent(
portal_type=person_portal_type,
id=contributor_id,
title=contributor_title
)
web_page_frontend_reference = "erp5_web_js_style_test_frontpage" web_page_frontend_reference = "erp5_web_js_style_test_frontpage"
web_page_frontend_en_id = "erp5_web_js_style_test_frontpage_en" web_page_frontend_en_id = "erp5_web_js_style_test_frontpage_en"
web_page_frontend_fr_id = "erp5_web_js_style_test_frontpage_fr" web_page_frontend_fr_id = "erp5_web_js_style_test_frontpage_fr"
...@@ -28,6 +42,7 @@ web_page = module.newContent( ...@@ -28,6 +42,7 @@ web_page = module.newContent(
portal_type=web_page_portal_type, portal_type=web_page_portal_type,
id=web_page_frontend_en_id, id=web_page_frontend_en_id,
reference=web_page_frontend_reference, reference=web_page_frontend_reference,
contributor_value=contributor,
language="en", language="en",
version="001", version="001",
text_content=""" text_content="""
...@@ -45,6 +60,9 @@ web_page = module.newContent( ...@@ -45,6 +60,9 @@ web_page = module.newContent(
portal_type=web_page_portal_type, portal_type=web_page_portal_type,
id=web_page_content_en_id, id=web_page_content_en_id,
reference=web_page_content_reference, reference=web_page_content_reference,
contributor_value=contributor,
title="%s title" % web_page_content_reference,
description="%s description" % web_page_content_reference,
language="en", language="en",
version="001", version="001",
text_content=""" text_content="""
...@@ -60,6 +78,7 @@ web_page = module.newContent( ...@@ -60,6 +78,7 @@ web_page = module.newContent(
portal_type=web_page_portal_type, portal_type=web_page_portal_type,
id=web_page_frontend_fr_id, id=web_page_frontend_fr_id,
reference=web_page_frontend_reference, reference=web_page_frontend_reference,
contributor_value=contributor,
language="fr", language="fr",
version="001", version="001",
text_content=""" text_content="""
...@@ -77,6 +96,9 @@ web_page = module.newContent( ...@@ -77,6 +96,9 @@ web_page = module.newContent(
portal_type=web_page_portal_type, portal_type=web_page_portal_type,
id=web_page_content_fr_id, id=web_page_content_fr_id,
reference=web_page_content_reference, reference=web_page_content_reference,
contributor_value=contributor,
title="%s title" % web_page_content_reference,
description="%s description" % web_page_content_reference,
language="fr", language="fr",
version="001", version="001",
text_content=""" text_content="""
...@@ -92,6 +114,7 @@ web_page = module.newContent( ...@@ -92,6 +114,7 @@ web_page = module.newContent(
portal_type=web_page_portal_type, portal_type=web_page_portal_type,
id=web_page_frontend_zh_id, id=web_page_frontend_zh_id,
reference=web_page_frontend_reference, reference=web_page_frontend_reference,
contributor_value=contributor,
language="zh", language="zh",
version="001", version="001",
text_content=""" text_content="""
...@@ -109,6 +132,9 @@ web_page = module.newContent( ...@@ -109,6 +132,9 @@ web_page = module.newContent(
portal_type=web_page_portal_type, portal_type=web_page_portal_type,
id=web_page_content_zh_id, id=web_page_content_zh_id,
reference=web_page_content_reference, reference=web_page_content_reference,
contributor_value=contributor,
title="%s title" % web_page_content_reference,
description="%s description" % web_page_content_reference,
language="zh", language="zh",
version="001", version="001",
text_content=""" text_content="""
...@@ -214,10 +240,10 @@ web_site = module.newContent( ...@@ -214,10 +240,10 @@ web_site = module.newContent(
skin_selection_name="Jsstyle", skin_selection_name="Jsstyle",
layout_configuration_form_id="WebSection_viewJsstylePreference", layout_configuration_form_id="WebSection_viewJsstylePreference",
site_map_document_parent=True, site_map_document_parent=True,
criterion_property_list=('title',), criterion_property_list=('reference',),
**configuration_dict[configuration] **configuration_dict[configuration]
) )
web_site.setCriterion('title', identity='erp5_web_js_style_test_contentpage') web_site.setCriterion('reference', identity='erp5_web_js_style_test_contentpage')
web_section = web_site.newContent( web_section = web_site.newContent(
portal_type=web_section_portal_type, portal_type=web_section_portal_type,
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
<p id="render_count"></p> <p id="render_count"></p>
<p id="portal_status_message"></p> <p id="portal_status_message"></p>
<p id="current_language"></p> <p id="current_language"></p>
<p id="feed_url"></p>
<nav id="language"></nav> <nav id="language"></nav>
<nav id="sitemap"></nav> <nav id="sitemap"></nav>
<aside id="document_list"></aside> <aside id="document_list"></aside>
......
...@@ -35,6 +35,7 @@ ...@@ -35,6 +35,7 @@
}) })
.declareMethod("render", function (html_content, parsed_content) { .declareMethod("render", function (html_content, parsed_content) {
var state = { var state = {
feed_url: parsed_content.feed_url || "",
document_list: JSON.stringify(parsed_content.document_list || []), document_list: JSON.stringify(parsed_content.document_list || []),
current_language: parsed_content.language || "", current_language: parsed_content.language || "",
language_list: JSON.stringify(parsed_content.language_list || []), language_list: JSON.stringify(parsed_content.language_list || []),
...@@ -93,6 +94,11 @@ ...@@ -93,6 +94,11 @@
text: gadget.state.current_language text: gadget.state.current_language
}); });
} }
if (modification_dict.hasOwnProperty('feed_url')) {
domsugar(gadget.element.querySelector('p#feed_url'), {
text: gadget.state.feed_url
});
}
if (modification_dict.hasOwnProperty('language_list')) { if (modification_dict.hasOwnProperty('language_list')) {
language_list = JSON.parse(gadget.state.language_list); language_list = JSON.parse(gadget.state.language_list);
child_list = []; child_list = [];
...@@ -109,10 +115,16 @@ ...@@ -109,10 +115,16 @@
document_list = JSON.parse(gadget.state.document_list); document_list = JSON.parse(gadget.state.document_list);
child_list = []; child_list = [];
for (i = 0; i < document_list.length; i += 1) { for (i = 0; i < document_list.length; i += 1) {
child_list.push(domsugar('li', [domsugar('a', { child_list.push(domsugar('li', [
text: document_list[i].text, domsugar('a', {
href: document_list[i].href text: document_list[i].text,
})])); href: document_list[i].href
}),
domsugar('p', {text: 'Author: ' + document_list[i].author}),
domsugar('p', {text: 'Description: ' +
document_list[i].description}),
domsugar('p', {text: 'Date: ' + document_list[i].date})
]));
} }
domsugar(gadget.element.querySelector('aside#document_list'), domsugar(gadget.element.querySelector('aside#document_list'),
[domsugar('ul', child_list)]); [domsugar('ul', child_list)]);
......
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