diff --git a/draft/application/cms/example/src/module/demo/demo_module.e b/draft/application/cms/example/src/module/demo/demo_module.e
index 685a310d..5edae43e 100644
--- a/draft/application/cms/example/src/module/demo/demo_module.e
+++ b/draft/application/cms/example/src/module/demo/demo_module.e
@@ -10,6 +10,10 @@ class
inherit
CMS_MODULE
+ CMS_HOOK_MENU_ALTER
+
+ CMS_HOOK_AUTO_REGISTER
+
create
make
@@ -30,19 +34,29 @@ feature {CMS_SERVICE} -- Registration
register (a_service: CMS_SERVICE)
do
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/format/{arg}", agent handle_format_demo (a_service, ?, ?))
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
links: HASH_TABLE [CMS_MODULE_LINK, STRING]
-- Link indexed by path
local
--- lnk: CMS_MODULE_LINK
+ lnk: CMS_MODULE_LINK
do
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">>)
-- Result["/demo/date/{arg}"] := lnk
end
@@ -57,4 +71,9 @@ feature -- Hooks
(create {ANY_CMS_EXECUTION}.make_with_text (req, res, cms, "
Demo::format
")).execute
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
diff --git a/draft/application/cms/example/src/module/demo/demo_widget_cms_execution.e b/draft/application/cms/example/src/module/demo/demo_widget_cms_execution.e
new file mode 100644
index 00000000..d808bfe2
--- /dev/null
+++ b/draft/application/cms/example/src/module/demo/demo_widget_cms_execution.e
@@ -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