This commit is contained in:
Jocelyn Fiat
2013-03-01 12:55:54 +01:00
10 changed files with 603 additions and 10 deletions

View File

@@ -10,6 +10,10 @@ class
inherit inherit
CMS_MODULE CMS_MODULE
CMS_HOOK_MENU_ALTER
CMS_HOOK_AUTO_REGISTER
create create
make make
@@ -30,19 +34,29 @@ feature {CMS_SERVICE} -- Registration
register (a_service: CMS_SERVICE) register (a_service: CMS_SERVICE)
do do
service := a_service service := a_service
a_service.map_uri_template ("/demo/widget{/args}", agent handle_widget_demo (a_service, ?, ?))
a_service.map_uri_template ("/demo/date/{arg}", agent handle_date_time_demo (a_service, ?, ?)) a_service.map_uri_template ("/demo/date/{arg}", agent handle_date_time_demo (a_service, ?, ?))
a_service.map_uri_template ("/demo/format/{arg}", agent handle_format_demo (a_service, ?, ?)) a_service.map_uri_template ("/demo/format/{arg}", agent handle_format_demo (a_service, ?, ?))
end end
menu_alter (a_menu_system: CMS_MENU_SYSTEM; a_execution: CMS_EXECUTION)
local
lnk: CMS_LOCAL_LINK
-- opts: CMS_API_OPTIONS
do
create lnk.make ("Demo::widget", "/demo/widget/")
a_menu_system.management_menu.extend (lnk)
end
feature -- Hooks feature -- Hooks
links: HASH_TABLE [CMS_MODULE_LINK, STRING] links: HASH_TABLE [CMS_MODULE_LINK, STRING]
-- Link indexed by path -- Link indexed by path
local local
-- lnk: CMS_MODULE_LINK lnk: CMS_MODULE_LINK
do do
create Result.make (0) create Result.make (0)
-- create lnk.make ("Date/time demo") create lnk.make ("Date/time demo")
-- lnk.set_callback (agent process_date_time_demo, <<"arg">>) -- lnk.set_callback (agent process_date_time_demo, <<"arg">>)
-- Result["/demo/date/{arg}"] := lnk -- Result["/demo/date/{arg}"] := lnk
end end
@@ -57,4 +71,9 @@ feature -- Hooks
(create {ANY_CMS_EXECUTION}.make_with_text (req, res, cms, "<h1>Demo::format</h1>")).execute (create {ANY_CMS_EXECUTION}.make_with_text (req, res, cms, "<h1>Demo::format</h1>")).execute
end end
handle_widget_demo (cms: CMS_SERVICE; req: WSF_REQUEST; res: WSF_RESPONSE)
do
(create {DEMO_WIDGET_CMS_EXECUTION}.make (req, res, cms)).execute
end
end end

View File

@@ -0,0 +1,97 @@
note
description : "Objects that ..."
author : "$Author$"
date : "$Date$"
revision : "$Revision$"
class
DEMO_WIDGET_CMS_EXECUTION
inherit
CMS_EXECUTION
create
make
feature -- Execution
process
local
args: like arguments
l_table: like new_table
s: STRING
do
args := arguments
if args.is_empty then
set_title ("Widgets")
set_main_content ("...")
else
end
l_table := new_table
create s.make_empty
l_table.append_to_html (theme, s)
set_main_content (s)
end
new_table: CMS_WIDGET_TABLE [READABLE_STRING_8]
local
l_table: CMS_WIDGET_TABLE [READABLE_STRING_8]
do
create l_table.make
l_table.add_css_style ("width: 85%%; border: solid 1px #999; padding: 2px;")
l_table.set_column_count (3)
l_table.column (1).set_title ("First")
l_table.column (2).set_title ("Second")
l_table.column (3).set_title ("Third")
l_table.column (1).add_css_style ("width: 20%%")
l_table.column (2).add_css_style ("width: 40px")
l_table.column (3).add_css_style ("width: 40px")
l_table.set_data (<<"foo", "bar", "foobar">>)
l_table.set_foot_data (<<"abc", "def">>)
l_table.set_compute_item_function (agent (d: READABLE_STRING_8): CMS_WIDGET_TABLE_ROW
local
i: INTEGER
w: CMS_WIDGET_TABLE_ITEM
do
create Result.make (d.count)
if d.is_case_insensitive_equal ("bar") then
Result.add_css_style ("background-color: #ccf;")
end
across
d as c
loop
i := i + 1
create w.make_with_text (c.item.out)
if i = 1 then
w.add_css_style ("background-color: #333; color: white; font-weight: bold;")
elseif i > 3 then
w.add_css_style ("color: red; border: solid 1px red; padding: 3px;")
end
Result.force (w)
end
end)
Result := l_table
end
arguments: ARRAY [READABLE_STRING_32]
-- Path parameters arguments related to {/vars}
do
if
attached {WSF_TABLE} request.path_parameter ("args") as lst and then
attached lst.as_array_of_string as arr
then
Result := arr
else
create Result.make_empty
end
Result.rebase (1)
end
end

View File

@@ -7,26 +7,81 @@ note
class class
CMS_CSS_STYLE CMS_CSS_STYLE
inherit
ITERABLE [READABLE_STRING_8]
create create
make, make,
make_from_string make_with_string,
make_with_items
convert convert
make_from_string ({READABLE_STRING_8, STRING_8}) make_with_string ({READABLE_STRING_8, STRING_8})
feature {NONE} -- Initialization feature {NONE} -- Initialization
make make
do do
create {ARRAYED_LIST [READABLE_STRING_8]} items.make (3) make_with_items (create {like items}.make (3))
end end
make_from_string (s: READABLE_STRING_8) make_with_string (s: READABLE_STRING_8)
do do
items := s.split (';') make_with_items (s.split (';'))
end end
items: LIST [READABLE_STRING_8] make_with_items (lst: ITERABLE [READABLE_STRING_8])
do
create items.make (5)
across
lst as c
loop
if attached {IMMUTABLE_STRING_8} c.item as imm then
items.force (imm)
else
items.force (create {IMMUTABLE_STRING_8}.make_from_string (c.item))
end
end
end
items: ARRAYED_LIST [IMMUTABLE_STRING_8]
feature -- Access
count: INTEGER
-- Count of style entities.
new_cursor: ITERATION_CURSOR [READABLE_STRING_8]
do
Result := items.new_cursor
end
feature -- Element change
plus alias "+" (a_other: CMS_CSS_STYLE): like Current
-- <Precursor>
local
lst: ARRAYED_LIST [READABLE_STRING_8]
do
create lst.make (count + a_other.count)
lst.append (items)
across
a_other as c
loop
lst.force (c.item)
end
create Result.make_with_items (lst)
end
append (a_other: CMS_CSS_STYLE)
-- Append style from `a_other' into Current
do
across
a_other as c
loop
items.force (c.item)
end
end
feature -- Change feature -- Change

View File

@@ -12,9 +12,21 @@ feature -- Status report
feature -- Change feature -- Change
set_css_style (a_style: like css_style) reset_css_style
do do
css_style := a_style css_style := Void
end
add_css_style (a_style: like css_style)
local
s: like css_style
do
s := css_style
if s = Void then
css_style := a_style
elseif a_style /= Void then
css_style := s + a_style
end
end end
feature -- Conversion feature -- Conversion

View File

@@ -0,0 +1,16 @@
note
description: "Summary description for {CMS_WIDGET}."
author: ""
date: "$Date$"
revision: "$Revision$"
deferred class
CMS_WIDGET
feature -- Conversion
append_to_html (a_theme: CMS_THEME; a_html: STRING_8)
deferred
end
end

View File

@@ -0,0 +1,177 @@
note
description: "Summary description for {CMS_WIDGET_TABLE}."
author: ""
date: "$Date$"
revision: "$Revision$"
class
CMS_WIDGET_TABLE [G]
inherit
CMS_WIDGET
WITH_CSS_ID
WITH_CSS_CLASS
WITH_CSS_STYLE
create
make
feature {NONE} -- Initialization
make
do
create columns.make_empty
end
feature -- Access
column_count: INTEGER
do
Result := columns.count
end
columns: ARRAY [CMS_WIDGET_TABLE_COLUMN]
column (c: INTEGER): CMS_WIDGET_TABLE_COLUMN
do
if c > column_count then
set_column_count (c)
end
Result := columns[c]
end
has_title: BOOLEAN
do
Result := across columns as c some c.item.title /= Void end
end
head_data: detachable ITERABLE [G]
-- thead
foot_data: detachable ITERABLE [G]
-- tfoot
data: detachable ITERABLE [G]
-- tbody
compute_item_function: detachable FUNCTION [ANY, TUPLE [data: G], CMS_WIDGET_TABLE_ROW]
feature -- Change
set_head_data (d: like head_data)
do
head_data := d
end
set_foot_data (d: like foot_data)
do
foot_data := d
end
set_data (d: like data)
do
data := d
end
set_compute_item_function (fct: like compute_item_function)
do
compute_item_function := fct
end
set_column_count (nb: INTEGER)
do
if nb > columns.count then
-- columns.conservative_resize_with_default (create {CMS_WIDGET_TABLE_COLUMN}, 1, nb)
from
until
columns.count = nb
loop
columns.force (create {CMS_WIDGET_TABLE_COLUMN}.make (columns.upper + 1), columns.upper + 1)
end
else
columns.remove_tail (columns.count - nb)
end
end
set_column_title (c: INTEGER; t: READABLE_STRING_32)
do
if c > column_count then
set_column_count (c)
end
if attached column (c) as col then
col.set_title (t)
end
end
feature -- Conversion
append_to_html (a_theme: CMS_THEME; a_html: STRING_8)
local
l_use_tbody: BOOLEAN
do
a_html.append ("<table")
append_css_id_to (a_html)
append_css_class_to (a_html, Void)
append_css_style_to (a_html)
a_html.append (">")
if has_title then
a_html.append ("<tr>")
across
columns as c
loop
c.item.append_table_header_to_html (a_theme, a_html)
end
a_html.append ("</tr>")
end
if attached head_data as l_head_data then
l_use_tbody := True
a_html.append ("<thead>")
append_data_to_html (l_head_data, a_theme, a_html)
a_html.append ("</thead>")
end
if attached foot_data as l_foot_data then
l_use_tbody := True
a_html.append ("<tfoot>")
append_data_to_html (l_foot_data, a_theme, a_html)
a_html.append ("</tfoot>")
end
if attached data as l_data then
if l_use_tbody then
a_html.append ("<tbody>")
end
append_data_to_html (l_data, a_theme, a_html)
if l_use_tbody then
a_html.append ("</tbody>")
end
end
a_html.append ("</table>")
end
append_data_to_html (lst: ITERABLE [G]; a_theme: CMS_THEME; a_html: STRING_8)
local
fct: like compute_item_function
do
fct := compute_item_function
across
lst as d
loop
if fct /= Void and then attached fct.item ([d.item]) as r then
r.append_to_html (a_theme, a_html)
else
a_html.append ("<tr>")
a_html.append ("<td>")
if attached d.item as g then
a_html.append (g.out)
end
a_html.append ("</td>")
a_html.append ("</tr>")
end
end
end
end

View File

@@ -0,0 +1,52 @@
note
description: "Summary description for {CMS_WIDGET_COLUMN}."
author: ""
date: "$Date$"
revision: "$Revision$"
class
CMS_WIDGET_TABLE_COLUMN
inherit
WITH_CSS_CLASS
WITH_CSS_STYLE
create
make
feature {NONE} -- Initialization
make (i: like index)
do
index := i
end
feature -- Access
index: INTEGER
title: detachable READABLE_STRING_32
feature -- Change
set_title (t: like title)
do
title := t
end
feature -- Conversion
append_table_header_to_html (a_theme: CMS_THEME; a_html: STRING_8)
do
a_html.append ("<th")
append_css_class_to (a_html, Void)
append_css_style_to (a_html)
a_html.append_character ('>')
if attached title as l_title then
a_html.append (a_theme.html_encoded (l_title))
end
a_html.append ("</th>")
end
end

View File

@@ -0,0 +1,49 @@
note
description: "Summary description for {CMS_WIDGET_TABLE_ITEM}."
author: ""
date: "$Date$"
revision: "$Revision$"
class
CMS_WIDGET_TABLE_ITEM
inherit
CMS_WIDGET
WITH_CSS_CLASS
WITH_CSS_STYLE
create
make_with_text,
make_with_content
feature {NONE} -- Initialization
make_with_text (a_text: READABLE_STRING_8)
do
make_with_content (create {CMS_WIDGET_TEXT}.make_with_text (a_text))
end
make_with_content (a_widget: CMS_WIDGET)
do
content := a_widget
end
feature -- Access
content: CMS_WIDGET
feature -- Conversion
append_to_html (a_theme: CMS_THEME; a_html: STRING_8)
do
a_html.append ("<td")
append_css_class_to (a_html, Void)
append_css_style_to (a_html)
a_html.append_character ('>')
content.append_to_html (a_theme, a_html)
a_html.append ("</td>")
end
end

View File

@@ -0,0 +1,75 @@
note
description: "Summary description for {CMS_WIDGET_TABLE_ROW}."
author: ""
date: "$Date$"
revision: "$Revision$"
class
CMS_WIDGET_TABLE_ROW
inherit
WITH_CSS_CLASS
WITH_CSS_STYLE
ITERABLE [CMS_WIDGET_TABLE_ITEM]
create
make,
make_with_items
feature {NONE} -- Initialization
make (n: INTEGER)
do
create items.make (n)
end
make_with_items (lst: ITERABLE [CMS_WIDGET_TABLE_ITEM])
local
n: INTEGER
do
across lst as c loop
n := n + 1
end
make (n)
across
lst as c
loop
add_item (c.item)
end
end
items: ARRAYED_LIST [CMS_WIDGET_TABLE_ITEM]
feature -- Access
new_cursor: ITERATION_CURSOR [CMS_WIDGET_TABLE_ITEM]
do
Result := items.new_cursor
end
feature -- Change
force, add_item (w: CMS_WIDGET_TABLE_ITEM)
do
items.force (w)
end
feature -- Conversion
append_to_html (a_theme: CMS_THEME; a_html: STRING_8)
do
a_html.append ("<tr")
append_css_class_to (a_html, Void)
append_css_style_to (a_html)
a_html.append_character ('>')
across
items as c
loop
c.item.append_to_html (a_theme, a_html)
end
a_html.append ("</tr>")
end
end

View File

@@ -0,0 +1,41 @@
note
description: "Summary description for {CMS_WIDGET_TEXT}."
author: ""
date: "$Date$"
revision: "$Revision$"
class
CMS_WIDGET_TEXT
inherit
CMS_WIDGET
create
make_with_text
feature {NONE} -- Initialization
make_with_text (a_text: READABLE_STRING_8)
do
text := a_text
end
feature -- Access
text: READABLE_STRING_8
feature -- Change
set_text (a_text: like text)
do
text := a_text
end
feature -- Conversion
append_to_html (a_theme: CMS_THEME; a_html: STRING_8)
do
a_html.append (text)
end
end