Added feed to xhtml visitor.

Updated interfaces, mainly related to date attributes.
This commit is contained in:
2015-10-09 19:08:53 +02:00
parent 98c12b8fb9
commit c92b1b8c3b
5 changed files with 264 additions and 4 deletions

View File

@@ -4,6 +4,7 @@
<root all_classes="true"/> <root all_classes="true"/>
<library name="base" location="$ISE_LIBRARY\library\base\base-safe.ecf"/> <library name="base" location="$ISE_LIBRARY\library\base\base-safe.ecf"/>
<library name="base_extension" location="$ISE_LIBRARY\library\base_extension\base_extension-safe.ecf"/> <library name="base_extension" location="$ISE_LIBRARY\library\base_extension\base_extension-safe.ecf"/>
<library name="encoders" location="..\..\encoder\encoder-safe.ecf"/>
<library name="http" location="$ISE_LIBRARY\contrib\library\network\protocol\http\http-safe.ecf"/> <library name="http" location="$ISE_LIBRARY\contrib\library\network\protocol\http\http-safe.ecf"/>
<library name="time" location="$ISE_LIBRARY\library\time\time-safe.ecf"/> <library name="time" location="$ISE_LIBRARY\library\time\time-safe.ecf"/>
<library name="uuid" location="$ISE_LIBRARY\library\uuid\uuid-safe.ecf"/> <library name="uuid" location="$ISE_LIBRARY\library\uuid\uuid-safe.ecf"/>

View File

@@ -6,6 +6,7 @@
</option> </option>
<library name="base" location="$ISE_LIBRARY\library\base\base.ecf"/> <library name="base" location="$ISE_LIBRARY\library\base\base.ecf"/>
<library name="base_extension" location="$ISE_LIBRARY\library\base_extension\base_extension.ecf"/> <library name="base_extension" location="$ISE_LIBRARY\library\base_extension\base_extension.ecf"/>
<library name="encoders" location="..\..\encoder\encoder.ecf"/>
<library name="http" location="$ISE_LIBRARY\contrib\library\network\protocol\http\http.ecf"/> <library name="http" location="$ISE_LIBRARY\contrib\library\network\protocol\http\http.ecf"/>
<library name="time" location="$ISE_LIBRARY\library\time\time.ecf"/> <library name="time" location="$ISE_LIBRARY\library\time\time.ecf"/>
<library name="uuid" location="$ISE_LIBRARY\library\uuid\uuid.ecf"/> <library name="uuid" location="$ISE_LIBRARY\library\uuid\uuid.ecf"/>

View File

@@ -80,14 +80,28 @@ feature -- Element change
set_updated_date_with_text (a_date_text: detachable READABLE_STRING_32) set_updated_date_with_text (a_date_text: detachable READABLE_STRING_32)
-- Set `date' from date string representation `a_date_text'. -- Set `date' from date string representation `a_date_text'.
obsolete
"Use set_date_with_text [oct/2015]"
do
set_date_with_text (a_date_text)
end
set_date_with_text (a_date_text: detachable READABLE_STRING_32)
-- Set `date' from date string representation `a_date_text'.
do do
if a_date_text = Void then if a_date_text = Void then
date := Void set_date (Void)
else else
date := date_time (a_date_text) set_date (date_time (a_date_text))
end end
end end
set_date (a_date: detachable DATE_TIME)
-- Set `date' from `a_date'.
do
date := a_date
end
extend (a_item: FEED_ITEM) extend (a_item: FEED_ITEM)
-- Add item `a_item' to feed `items'. -- Add item `a_item' to feed `items'.
do do

View File

@@ -156,14 +156,29 @@ feature -- Element change
end end
set_updated_date_with_text (a_date_text: detachable READABLE_STRING_32) set_updated_date_with_text (a_date_text: detachable READABLE_STRING_32)
-- Set `date' from date string representation `a_date_text'.
obsolete
"Use set_date_with_text [oct/2015]"
do
set_date_with_text (a_date_text)
end
set_date_with_text (a_date_text: detachable READABLE_STRING_32)
-- Set `date' from date string representation `a_date_text'.
do do
if a_date_text = Void then if a_date_text = Void then
date := Void set_date (Void)
else else
date := date_time (a_date_text) set_date (date_time (a_date_text))
end end
end end
set_date (a_date: detachable DATE_TIME)
-- Set `date' from `a_date'.
do
date := a_date
end
set_author (a_author: detachable FEED_AUTHOR) set_author (a_author: detachable FEED_AUTHOR)
do do
author := a_author author := a_author

View File

@@ -0,0 +1,229 @@
note
description: "[
Convert a FEED to XHTML representation.
]"
date: "$Date: 2015-10-08 10:45:13 +0200 (jeu., 08 oct. 2015) $"
revision: "$Revision: 97964 $"
class
FEED_TO_XHTML_VISITOR
inherit
FEED_VISITOR
SHARED_HTML_ENCODER
create
make
feature {NONE} -- Initialization
make (a_buffer: STRING_8)
do
buffer := a_buffer
create today.make_now_utc
description_enabled := False
limit := -1
end
buffer: STRING_8
-- Output buffer.
today: DATE_TIME
-- Current date.
feature -- Access
header: detachable READABLE_STRING_8
-- Optional header.
footer: detachable READABLE_STRING_8
-- Optional footer.
feature -- Settings
limit: INTEGER
-- Number of item to include in XHTML generation.
-- Default: -1 => No limit
description_enabled: BOOLEAN
-- Generate description?
-- Default: False
feature -- Element change
set_limit (nb: INTEGER)
-- Set `limit' to `nb'.
do
limit := nb
end
set_description_enabled (b: BOOLEAN)
-- Set `description_enabled' to `b'.
do
description_enabled := b
end
set_header (h: like header)
do
header := h
end
set_footer (f: like footer)
do
footer := f
end
feature -- Visitor
visit_feed (a_feed: FEED)
local
nb: INTEGER
do
append ("<div class=%"feed%">")
if attached header as h then
append (h)
append ("%N")
end
if attached a_feed.date as dt then
append ("<!-- date:")
append (dt.out)
append (" -->%N")
end
append ("<ul>%N")
if
description_enabled and then
attached a_feed.description as l_desc and then
l_desc.is_valid_as_string_8
then
append ("<div class=%"description%">")
append (l_desc.to_string_8)
append ("</div>")
end
nb := limit
across
a_feed as ic
until
nb = 0
loop
ic.item.accept (Current)
nb := nb - 1
end
if attached footer as f then
append (f)
append ("%N")
end
append ("</ul>%N")
end
visit_item (a_entry: FEED_ITEM)
local
lnk: detachable FEED_LINK
do
append ("<li>%N")
lnk := a_entry.link
if attached a_entry.date as dt then
append ("<div class=%"date%">")
append_date_time_to (dt, today.date, buffer)
append ("</div>%N")
end
if lnk /= Void then
append ("<a href=%"" + lnk.href + "%">")
else
check has_link: False end
append ("<a href=%"#%">")
end
append_as_html_encoded (a_entry.title)
append ("</a>%N")
debug
if attached a_entry.categories as l_categories and then not l_categories.is_empty then
append ("<div class=%"category%">")
across
l_categories as cats_ic
loop
append_as_html_encoded (cats_ic.item)
append (" ")
end
append ("</div>%N")
end
end
if
description_enabled and then
attached a_entry.description as l_entry_desc
then
if l_entry_desc.is_valid_as_string_8 then
append ("<div class=%"description%">")
append (l_entry_desc.as_string_8)
append ("</div>%N")
else
check is_html: False end
end
end
append ("</li>%N")
end
visit_link (a_link: FEED_LINK)
do
append ("<a href=%"" + a_link.href + "%">")
append_as_html_encoded (a_link.relation)
append ("</a>%N")
end
visit_author (a_author: FEED_AUTHOR)
do
end
feature -- Helper
append_as_html_encoded (s: READABLE_STRING_GENERAL)
do
buffer.append (html_encoder.general_encoded_string (s))
end
append (s: READABLE_STRING_8)
do
buffer.append (s)
end
append_date_time_to (dt: DATE_TIME; a_today: DATE; a_output: STRING_GENERAL)
do
if dt.year /= a_today.year then
a_output.append (dt.year.out)
a_output.append (",")
end
a_output.append (" ")
append_month_mmm_to (dt.month, a_output)
a_output.append (" ")
if dt.day < 10 then
a_output.append ("0")
end
a_output.append (dt.day.out)
end
append_month_mmm_to (m: INTEGER; s: STRING_GENERAL)
require
1 <= m and m <= 12
do
inspect m
when 1 then s.append ("Jan")
when 2 then s.append ("Feb")
when 3 then s.append ("Mar")
when 4 then s.append ("Apr")
when 5 then s.append ("May")
when 6 then s.append ("Jun")
when 7 then s.append ("Jul")
when 8 then s.append ("Aug")
when 9 then s.append ("Sep")
when 10 then s.append ("Oct")
when 11 then s.append ("Nov")
when 12 then s.append ("Dec")
else
-- Error
end
end
end