Moved more components from CMS to wsf_html.

This includes WSF_PAGER, and feature in WSF_THEME .. including WSF_API_OPTIONS
used to compute url and link.
This commit is contained in:
Jocelyn Fiat
2013-03-26 14:17:10 +01:00
parent 2eb9abeb37
commit a23871ff5b
18 changed files with 593 additions and 438 deletions

View File

@@ -0,0 +1,98 @@
note
description: "Summary description for {WSF_API_OPTIONS}."
author: ""
date: "$Date$"
revision: "$Revision$"
class
WSF_API_OPTIONS
inherit
TABLE_ITERABLE [detachable ANY, STRING]
create
make,
make_from_manifest
convert
make_from_manifest ({ ARRAY [TUPLE [key: STRING; value: detachable ANY]],
ARRAY [TUPLE [STRING_8, ARRAY [TUPLE [STRING_8, STRING_32]]]],
ARRAY [TUPLE [STRING_8, ARRAY [TUPLE [STRING_8, STRING_8]]]]
})
feature {NONE} -- Initialization
make (n: INTEGER)
do
create table.make (n)
end
make_from_manifest (lst: ARRAY [TUPLE [key: STRING; value: detachable ANY]])
do
make (lst.count)
across
lst as c
loop
force (c.item.value, c.item.key)
end
end
feature -- Access
item (k: STRING): detachable ANY
do
Result := table.item (k)
end
force (v: detachable ANY; k: STRING)
do
table.force (v, k)
end
boolean_item (k: STRING; dft: BOOLEAN): BOOLEAN
do
if attached {BOOLEAN} item (k) as b then
Result := b
else
Result := dft
end
end
string_general_item (k: STRING): detachable READABLE_STRING_GENERAL
do
if attached {READABLE_STRING_GENERAL} item (k) as s then
Result := s
end
end
string_item, string_8_item (k: STRING): detachable READABLE_STRING_8
do
if attached {READABLE_STRING_8} item (k) as s then
Result := s
end
end
table: HASH_TABLE [detachable ANY, STRING]
feature -- Change
import (a_opts: WSF_API_OPTIONS)
do
across
a_opts as c
loop
force (c.item, c.key)
end
end
feature -- Access
new_cursor: TABLE_ITERATION_CURSOR [detachable ANY, STRING]
-- Fresh cursor associated with current structure
do
Result := table.new_cursor
end
invariant
end

View File

@@ -0,0 +1,208 @@
note
description: "Summary description for {WSF_API_UTILITIES}."
author: ""
date: "$Date$"
revision: "$Revision$"
deferred class
WSF_API_UTILITIES
feature -- Core
site_url: READABLE_STRING_8
deferred
end
base_url: detachable READABLE_STRING_8
-- Base url if any.
deferred
end
based_path (p: STRING): STRING
-- Path `p' in the context of the `base_url'
do
if attached base_url as l_base_url then
create Result.make_from_string (l_base_url)
if p.is_empty then
else
if p[1] = '/' then
Result.append (p.substring (2, p.count))
else
Result.append (p)
end
end
else
Result := p
end
end
feature -- Conversion
link (a_text: detachable READABLE_STRING_GENERAL; a_path: READABLE_STRING_8; opts: detachable WSF_API_OPTIONS): STRING
do
create Result.make (32)
append_link_to_html (a_text, a_path, opts, Result)
end
link_with_raw_text (a_raw_text: detachable READABLE_STRING_8; a_path: READABLE_STRING_8; opts: detachable WSF_API_OPTIONS): STRING
do
create Result.make (32)
append_link_with_raw_text_to_html (a_raw_text, a_path, opts, Result)
end
append_link_to_html (a_text: detachable READABLE_STRING_GENERAL; a_path: READABLE_STRING_8; opts: detachable WSF_API_OPTIONS; a_html: STRING_8)
local
l_html: BOOLEAN
t: READABLE_STRING_GENERAL
do
l_html := True
if opts /= Void then
l_html := opts.boolean_item ("html", l_html)
end
a_html.append ("<a href=%"" + checked_url (url (a_path, opts)) + "%">")
if a_text = Void then
t := a_path
else
t := a_text
end
if l_html then
a_html.append (html_encoded (t))
else
a_html.append (checked_plain (t))
end
a_html.append ("</a>")
end
append_link_with_raw_text_to_html (a_raw_text: detachable READABLE_STRING_8; a_path: READABLE_STRING_8; opts: detachable WSF_API_OPTIONS; a_html: STRING_8)
local
l_html: BOOLEAN
t: READABLE_STRING_8
do
l_html := True
if opts /= Void then
l_html := opts.boolean_item ("html", l_html)
end
a_html.append ("<a href=%"" + checked_url (url (a_path, opts)) + "%">")
if a_raw_text = Void then
t := a_path
else
t := a_raw_text
end
a_html.append (t)
a_html.append ("</a>")
end
absolute_url (a_path: STRING; opts: detachable WSF_API_OPTIONS): STRING
local
l_opts: detachable WSF_API_OPTIONS
do
l_opts := opts
if l_opts = Void then
create l_opts.make (1)
end
l_opts.force (True, "absolute")
Result := url (a_path, l_opts)
end
url (a_path: READABLE_STRING_8; opts: detachable WSF_API_OPTIONS): STRING
local
q,f: detachable STRING_8
l_abs: BOOLEAN
do
l_abs := False
if opts /= Void then
l_abs := opts.boolean_item ("absolute", l_abs)
if attached opts.item ("query") as l_query then
if attached {READABLE_STRING_8} l_query as s_value then
q := s_value
elseif attached {ITERABLE [TUPLE [key, value: READABLE_STRING_GENERAL]]} l_query as lst then
create q.make_empty
across
lst as c
loop
if q.is_empty then
else
q.append_character ('&')
end
q.append (url_encoded (c.item.key))
q.append_character ('=')
q.append (url_encoded (c.item.value))
end
end
end
if attached opts.string_item ("fragment") as s_frag then
f := s_frag
end
end
if l_abs then
if a_path.substring_index ("://", 1) = 0 then
create Result.make_from_string (site_url)
if a_path.is_empty then
elseif Result.ends_with ("/") then
if a_path[1] = '/' then
Result.append_string (a_path.substring (2, a_path.count))
else
Result.append_string (a_path)
end
else
if a_path[1] = '/' then
Result.append_string (a_path)
else
Result.append_character ('/')
Result.append_string (a_path)
end
end
else
Result := a_path
end
else
Result := based_path (a_path)
end
if q /= Void then
Result.append ("?" + q)
end
if f /= Void then
Result.append ("#" + f)
end
end
checked_url (a_url: READABLE_STRING_8): READABLE_STRING_8
do
Result := a_url
end
checked_plain (a_text: READABLE_STRING_GENERAL): STRING_8
do
Result := html_encoded (a_text)
end
feature -- Encoding
url_encoded (s: detachable READABLE_STRING_GENERAL): STRING_8
local
enc: URL_ENCODER
do
create enc
if s /= Void then
Result := enc.general_encoded_string (s)
else
create Result.make_empty
end
end
html_encoded (s: detachable READABLE_STRING_GENERAL): STRING_8
local
enc: HTML_ENCODER
do
create enc
if s /= Void then
Result := enc.general_encoded_string (s)
else
create Result.make_empty
end
end
end

View File

@@ -0,0 +1,40 @@
note
description: "[
WF_THEME associated with a request
]"
date: "$Date$"
revision: "$Revision$"
class
WSF_REQUEST_THEME
inherit
WSF_THEME
create
make_with_request
feature {NONE} -- Initialization
make_with_request (req: WSF_REQUEST)
do
request := req
end
request: WSF_REQUEST
-- Associated request
feature -- Core
site_url: READABLE_STRING_8
do
Result := request.absolute_script_url ("")
end
base_url: detachable READABLE_STRING_8
-- Base url if any.
do
Result := request.script_url ("")
end
end

View File

@@ -0,0 +1,14 @@
note
description: "Summary description for {WSF_THEME}."
author: ""
date: "$Date$"
revision: "$Revision$"
deferred class
WSF_THEME
inherit
WSF_API_UTILITIES
end

View File

@@ -0,0 +1,25 @@
note
description: "Summary description for {WSF_URL_API_OPTIONS}."
author: ""
date: "$Date$"
revision: "$Revision$"
class
WSF_URL_API_OPTIONS
inherit
WSF_API_OPTIONS
create
make,
make_absolute
feature {NONE} -- Initialization
make_absolute
do
make (1)
force (True, "absolute")
end
end