Commit 8d158b9e authored by Ivan Tyagov's avatar Ivan Tyagov

Improve Feed reeder to support better:

- images
- marking a feed as read
- RSS provider logo
Move some generic CSS from KM to gadgets' core.

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@39480 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent 04d7ed29
...@@ -2,10 +2,7 @@ ...@@ -2,10 +2,7 @@
<ZopeData> <ZopeData>
<record id="1" aka="AAAAAAAAAAE="> <record id="1" aka="AAAAAAAAAAE=">
<pickle> <pickle>
<tuple>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/> <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
<tuple/>
</tuple>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
...@@ -76,12 +73,22 @@ results = context.Base_getRssDataAsDict(url = feed_url, username = username, pas ...@@ -76,12 +73,22 @@ results = context.Base_getRssDataAsDict(url = feed_url, username = username, pas
readItemList = {}\n readItemList = {}\n
md5_list = []\n md5_list = []\n
message_list = []\n message_list = []\n
context.REQUEST.set(\'rss_title\',results.get(\'title\',\'No title for this feed\'))\n
context.REQUEST.set(\'rss_link\',results.get(\'link\',None))\n
context.REQUEST.set(\'rss_logo\',results.get(\'logo\',None))\n
items = results.get(\'items\',None)\n items = results.get(\'items\',None)\n
\n
rss_title = results.get(\'title\',\'No title for this feed\')\n
if items is not None:\n
rss_title = \'%s (%s)\' %(rss_title, len(items))\n
\n
rss_logo = results.get(\'logo\', None)\n
if rss_logo not in (\'\', None):\n
context.REQUEST.set(\'rss_logo\',rss_logo)\n
\n
context.REQUEST.set(\'rss_title\', rss_title)\n
context.REQUEST.set(\'rss_link\',results.get(\'link\',None))\n
\n
if items is None:\n if items is None:\n
return []\n return []\n
\n
for result in items:\n for result in items:\n
md5_list.append(result[\'md5\'])\n md5_list.append(result[\'md5\'])\n
date = context.Base_getDiffBetweenDateAndNow(result.get(\'date\',None))\n date = context.Base_getDiffBetweenDateAndNow(result.get(\'date\',None))\n
...@@ -95,12 +102,9 @@ for result in items:\n ...@@ -95,12 +102,9 @@ for result in items:\n
field_md5 = result.get(\'md5\',\'\')\n field_md5 = result.get(\'md5\',\'\')\n
)\n )\n
message_list.append(message)\n message_list.append(message)\n
if selection:\n # export to request so rendering form can use \n
params = selection.getParams()\n context.REQUEST.set(\'rss_documents_count\', len(message_list))\n
readItemList = params.get(\'rss_read_item:list\', {})\n \n
for readItem in readItemList.keys():\n
if readItem not in md5_list:\n
del(readItemList[readItem])\n
return message_list\n return message_list\n
</string> </value> </string> </value>
</item> </item>
...@@ -160,14 +164,14 @@ return message_list\n ...@@ -160,14 +164,14 @@ return message_list\n
<string>message_list</string> <string>message_list</string>
<string>None</string> <string>None</string>
<string>items</string> <string>items</string>
<string>rss_title</string>
<string>len</string>
<string>rss_logo</string>
<string>_getiter_</string> <string>_getiter_</string>
<string>result</string> <string>result</string>
<string>_getitem_</string> <string>_getitem_</string>
<string>date</string> <string>date</string>
<string>message</string> <string>message</string>
<string>params</string>
<string>readItem</string>
<string>_write_</string>
</tuple> </tuple>
</value> </value>
</item> </item>
......
...@@ -2,10 +2,7 @@ ...@@ -2,10 +2,7 @@
<ZopeData> <ZopeData>
<record id="1" aka="AAAAAAAAAAE="> <record id="1" aka="AAAAAAAAAAE=">
<pickle> <pickle>
<tuple>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/> <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
<tuple/>
</tuple>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
...@@ -56,10 +53,12 @@ ...@@ -56,10 +53,12 @@
<value> <string>portal_selection = getattr(context,\'portal_selections\')\n <value> <string>portal_selection = getattr(context,\'portal_selections\')\n
selection = portal_selection.getSelectionFor(selection_name)\n selection = portal_selection.getSelectionFor(selection_name)\n
params = selection.getParams()\n params = selection.getParams()\n
readItemList = params.get(\'rss_read_item:list\', {})\n readItemList = params.get(\'rss_read_item_list\', [])\n
readItemList[item]=\'\'\n if item not in readItemList:\n
params[\'rss_read_item:list\'] = readItemList\n readItemList.append(item)\n
params[\'rss_read_item_list\'] = readItemList\n
portal_selection.setSelectionParamsFor(selection_name, params)\n portal_selection.setSelectionParamsFor(selection_name, params)\n
return item\n
</string> </value> </string> </value>
</item> </item>
<item> <item>
......
...@@ -2,10 +2,7 @@ ...@@ -2,10 +2,7 @@
<ZopeData> <ZopeData>
<record id="1" aka="AAAAAAAAAAE="> <record id="1" aka="AAAAAAAAAAE=">
<pickle> <pickle>
<tuple>
<global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/> <global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/>
<tuple/>
</tuple>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
...@@ -37,7 +34,7 @@ ...@@ -37,7 +34,7 @@
</item> </item>
<item> <item>
<key> <string>_text</string> </key> <key> <string>_text</string> </key>
<value> <string encoding="cdata"><![CDATA[ <value> <unicode encoding="cdata"><![CDATA[
<div class=\'gadget_advertisement\'>\n <div class=\'gadget_advertisement\'>\n
<h4>Management Solutions</h4>\n <h4>Management Solutions</h4>\n
...@@ -54,7 +51,7 @@ ...@@ -54,7 +51,7 @@
</div>\n </div>\n
]]></string> </value> ]]></unicode> </value>
</item> </item>
<item> <item>
<key> <string>content_type</string> </key> <key> <string>content_type</string> </key>
...@@ -68,9 +65,13 @@ ...@@ -68,9 +65,13 @@
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>ERP5Site_viewAnonymousAdvertisementGadget</string> </value> <value> <string>ERP5Site_viewAnonymousAdvertisementGadget</string> </value>
</item> </item>
<item>
<key> <string>output_encoding</string> </key>
<value> <string>utf-8</string> </value>
</item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string></string> </value> <value> <unicode></unicode> </value>
</item> </item>
</dictionary> </dictionary>
</pickle> </pickle>
......
...@@ -2,10 +2,7 @@ ...@@ -2,10 +2,7 @@
<ZopeData> <ZopeData>
<record id="1" aka="AAAAAAAAAAE="> <record id="1" aka="AAAAAAAAAAE=">
<pickle> <pickle>
<tuple>
<global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/> <global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/>
<tuple/>
</tuple>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
...@@ -37,7 +34,7 @@ ...@@ -37,7 +34,7 @@
</item> </item>
<item> <item>
<key> <string>_text</string> </key> <key> <string>_text</string> </key>
<value> <string encoding="cdata"><![CDATA[ <value> <unicode encoding="cdata"><![CDATA[
<div class=\'gadget_documentation\'>\n <div class=\'gadget_documentation\'>\n
<h4>Join ERP5 Network !</h4>\n <h4>Join ERP5 Network !</h4>\n
...@@ -54,7 +51,7 @@ ...@@ -54,7 +51,7 @@
</div>\n </div>\n
]]></string> </value> ]]></unicode> </value>
</item> </item>
<item> <item>
<key> <string>content_type</string> </key> <key> <string>content_type</string> </key>
...@@ -68,9 +65,13 @@ ...@@ -68,9 +65,13 @@
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>ERP5Site_viewAnonymousDocumentationGadget</string> </value> <value> <string>ERP5Site_viewAnonymousDocumentationGadget</string> </value>
</item> </item>
<item>
<key> <string>output_encoding</string> </key>
<value> <string>utf-8</string> </value>
</item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string></string> </value> <value> <unicode></unicode> </value>
</item> </item>
</dictionary> </dictionary>
</pickle> </pickle>
......
...@@ -192,6 +192,10 @@ ...@@ -192,6 +192,10 @@
<key> <string>css_class</string> </key> <key> <string>css_class</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item>
<key> <string>default_display_style</string> </key>
<value> <string></string> </value>
</item>
<item> <item>
<key> <string>default_params</string> </key> <key> <string>default_params</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
...@@ -200,6 +204,10 @@ ...@@ -200,6 +204,10 @@
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item>
<key> <string>display_style_list</string> </key>
<value> <string></string> </value>
</item>
<item> <item>
<key> <string>domain_root_list</string> </key> <key> <string>domain_root_list</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
...@@ -228,6 +236,10 @@ ...@@ -228,6 +236,10 @@
<key> <string>global_attributes</string> </key> <key> <string>global_attributes</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item>
<key> <string>global_search_column</string> </key>
<value> <string></string> </value>
</item>
<item> <item>
<key> <string>hidden</string> </key> <key> <string>hidden</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
...@@ -254,6 +266,10 @@ ...@@ -254,6 +266,10 @@
<key> <string>meta_types</string> </key> <key> <string>meta_types</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item>
<key> <string>page_navigation_mode</string> </key>
<value> <string></string> </value>
</item>
<item> <item>
<key> <string>page_template</string> </key> <key> <string>page_template</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
...@@ -308,6 +324,10 @@ ...@@ -308,6 +324,10 @@
<key> <string>stat_method</string> </key> <key> <string>stat_method</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item>
<key> <string>style_columns</string> </key>
<value> <string></string> </value>
</item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <value>
......
...@@ -152,9 +152,7 @@ ...@@ -152,9 +152,7 @@
</item> </item>
<item> <item>
<key> <string>enabled</string> </key> <key> <string>enabled</string> </key>
<value> <value> <string></string> </value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item> </item>
<item> <item>
<key> <string>external_validator</string> </key> <key> <string>external_validator</string> </key>
...@@ -217,7 +215,7 @@ ...@@ -217,7 +215,7 @@
</item> </item>
<item> <item>
<key> <string>css_class</string> </key> <key> <string>css_class</string> </key>
<value> <string>left gadget-rss-reader-logo</string> </value> <value> <string>gadget-rss-reader-logo</string> </value>
</item> </item>
<item> <item>
<key> <string>default</string> </key> <key> <string>default</string> </key>
...@@ -257,7 +255,7 @@ ...@@ -257,7 +255,7 @@
</item> </item>
<item> <item>
<key> <string>image_display</string> </key> <key> <string>image_display</string> </key>
<value> <string>thumbnail</string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>image_format</string> </key> <key> <string>image_format</string> </key>
...@@ -305,20 +303,7 @@ ...@@ -305,20 +303,7 @@
<dictionary> <dictionary>
<item> <item>
<key> <string>_text</string> </key> <key> <string>_text</string> </key>
<value> <string>python: request.get(\'rss_logo\',\'\')</string> </value> <value> <string>python: request.get(\'rss_logo\',\'images/transparent-image.gif\')</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="TALESMethod" module="Products.Formulator.TALESField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>python: request.get(\'rss_logo\',\'\') not in (\'\', None)</string> </value>
</item> </item>
</dictionary> </dictionary>
</pickle> </pickle>
......
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
</item> </item>
<item> <item>
<key> <string>_text</string> </key> <key> <string>_text</string> </key>
<value> <string encoding="cdata"><![CDATA[ <value> <unicode encoding="cdata"><![CDATA[
<tal:block tal:define="request python: context.REQUEST;\n <tal:block tal:define="request python: context.REQUEST;\n
box_relative_url python: request.get(\'box_relative_url\',\'\');\n box_relative_url python: request.get(\'box_relative_url\',\'\');\n
...@@ -74,7 +74,7 @@ ...@@ -74,7 +74,7 @@
</tal:block>\n </tal:block>\n
]]></string> </value> ]]></unicode> </value>
</item> </item>
<item> <item>
<key> <string>content_type</string> </key> <key> <string>content_type</string> </key>
...@@ -88,9 +88,13 @@ ...@@ -88,9 +88,13 @@
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>ERP5Site_viewWorklistGadget</string> </value> <value> <string>ERP5Site_viewWorklistGadget</string> </value>
</item> </item>
<item>
<key> <string>output_encoding</string> </key>
<value> <string>utf-8</string> </value>
</item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string></string> </value> <value> <unicode></unicode> </value>
</item> </item>
</dictionary> </dictionary>
</pickle> </pickle>
......
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
</item> </item>
<item> <item>
<key> <string>_text</string> </key> <key> <string>_text</string> </key>
<value> <string encoding="cdata"><![CDATA[ <value> <unicode encoding="cdata"><![CDATA[
<tal:block \n <tal:block \n
tal:define="title here/field_title;\n tal:define="title here/field_title;\n
...@@ -45,30 +45,33 @@ ...@@ -45,30 +45,33 @@
link here/field_link;\n link here/field_link;\n
md5 here/field_md5;\n md5 here/field_md5;\n
box_relative_url python: request.get(\'box_relative_url\', \'\');\n box_relative_url python: request.get(\'box_relative_url\', \'\');\n
dom_id python: (\'%s-%s\' %(box_relative_url.replace(\'/\',\'_\'), md5))">\n dom_id python: (\'%s-%s\' %(box_relative_url.replace(\'/\',\'_\'), md5));\n
selection_name python: context.Base_getListboxGadgetSelectionName(context.REQUEST.get(\'box_relative_url\', \'\'));\n
selection python: context.portal_selections.getSelectionFor(selection_name);\n
selection_params python: selection.getParams();\n
read_item_list python:selection_params.get(\'rss_read_item_list\', []);\n
is_read python: md5 in read_item_list">\n
\n
\n
<div class="document-gadget-quick-preview">\n <div class="document-gadget-quick-preview">\n
\n \n
<div class="teaser"\n <div class="teaser"\n
tal:attributes="onclick string:toggle(\'${dom_id}\');">\n tal:attributes="class python: test(is_read, \'teaser read\', \'teaser unread\');\n
\n onclick string:if(this.className!=\'teaser read\'){this.className=\'teaser read\';;MochiKit.Async.doSimpleXMLHttpRequest(\'Base_setRssItemReadInSelection\', {\'selection_name\':\'${selection_name}\',\'item\':\'${md5}\'})};;toggle(\'${dom_id}\');">\n
<img class="thumbnail-image"\n
tal:condition="python: image not in ((), None,)"\n
tal:attributes="src python: image[0]" alt="Thumbnail"/>\n
<span class="document-title"\n <span class="document-title"\n
tal:content="title"/> - \n tal:content="title"/> - \n
\n
<span class="modification-date"\n <span class="modification-date"\n
tal:content="date"/>\n tal:content="date"/>\n
\n
</div>\n </div>\n
\n \n
<!-- Hidden thumbnail & description -->\n <!-- Hidden description -->\n
<div class="body" style="display:none;"\n <div class="body" style="display:none;"\n
tal:attributes="id dom_id">\n tal:attributes="id dom_id">\n
<div class="document-thumbnail"\n
tal:condition="python: image not in ((), None,)"\n
tal:content="structure image"/>\n
<br/>\n
<div class="rss-description"\n <div class="rss-description"\n
tal:content="structure description"/>\n tal:content="structure description"/>\n
<br/>\n
<a target="_blank" \n <a target="_blank" \n
class="document-link"\n class="document-link"\n
title="Original Document"\n title="Original Document"\n
...@@ -80,7 +83,7 @@ ...@@ -80,7 +83,7 @@
</tal:block>\n </tal:block>\n
]]></string> </value> ]]></unicode> </value>
</item> </item>
<item> <item>
<key> <string>content_type</string> </key> <key> <string>content_type</string> </key>
...@@ -94,9 +97,13 @@ ...@@ -94,9 +97,13 @@
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>RssFeed_getSummaryAsHTML</string> </value> <value> <string>RssFeed_getSummaryAsHTML</string> </value>
</item> </item>
<item>
<key> <string>output_encoding</string> </key>
<value> <string>utf-8</string> </value>
</item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string></string> </value> <value> <unicode></unicode> </value>
</item> </item>
</dictionary> </dictionary>
</pickle> </pickle>
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
</item> </item>
<item> <item>
<key> <string>_EtagSupport__etag</string> </key> <key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts84987054.12</string> </value> <value> <string>ts87752153.8</string> </value>
</item> </item>
<item> <item>
<key> <string>__name__</string> </key> <key> <string>__name__</string> </key>
...@@ -478,10 +478,28 @@ div.block div.worklist_list ul li a:hover{\n ...@@ -478,10 +478,28 @@ div.block div.worklist_list ul li a:hover{\n
text-decoration:none;\n text-decoration:none;\n
}\n }\n
\n \n
/* RSS Feed gadget */\n /* Some gadgets share same Document_getSummaryAsHTML or RssFeed_getSummaryAsHTML */\n
div.document-gadget-quick-preview div.teaser{\n div.document-gadget-quick-preview div.teaser{\n
cursor: pointer;\n cursor: pointer;\n
}\n }\n
\n
div.document-gadget-quick-preview span.document-title,\n
div.document-gadget-quick-preview span.modification-date{\n
font-size:1em;\n
color: #000;\n
}\n
\n
/* Some items can be marked as read and we need a way to visualize it */\n
div.document-gadget-quick-preview div.read span.document-title,\n
div.document-gadget-quick-preview div.read span.modification-date{\n
color: #969696;\n
}\n
\n
div.document-gadget-quick-preview a.document-link{\n
color:#000;\n
font-weight:bold;\n
}\n
\n
/* Rss Feed reader gadget needs no listbox headers or \n /* Rss Feed reader gadget needs no listbox headers or \n
show number of records or show \'No results\' as listbox title is used for this */\n show number of records or show \'No results\' as listbox title is used for this */\n
div.gadget-rss-reader table.listbox thead,\n div.gadget-rss-reader table.listbox thead,\n
...@@ -489,6 +507,22 @@ div.gadget-rss-reader div.listbox-number-of-records,\n ...@@ -489,6 +507,22 @@ div.gadget-rss-reader div.listbox-number-of-records,\n
div.gadget-rss-reader table.listbox td.listbox-table-no-result-row{\n div.gadget-rss-reader table.listbox td.listbox-table-no-result-row{\n
display: none;\n display: none;\n
}\n }\n
\n
div.rss-description{\n
padding-top:4px;\n
}\n
\n
div.teaser .thumbnail-image{\n
margin:4px;\n
float:left;\n
}\n
\n
div.gadget-rss-reader-logo img{\n
float:right;\n
margin:4px;\n
width:auto;\n
}\n
\n
</string> </value> </string> </value>
</item> </item>
<item> <item>
...@@ -497,7 +531,7 @@ div.gadget-rss-reader table.listbox td.listbox-table-no-result-row{\n ...@@ -497,7 +531,7 @@ div.gadget-rss-reader table.listbox td.listbox-table-no-result-row{\n
</item> </item>
<item> <item>
<key> <string>size</string> </key> <key> <string>size</string> </key>
<value> <int>8086</int> </value> <value> <int>8792</int> </value>
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
......
576 579
\ No newline at end of file \ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment