Improved theming for admin vs site.

- Added $theme_path, $base_path
- Added CMS_RESPONSE.module_resource_url (...) instead of using hardcoded "/module/" + name + ...
- Use base_path rather than base_url  (note ROC CMS is not yet working with EWF standalone "base" url option)
This commit is contained in:
Jocelyn Fiat
2017-04-11 11:56:04 +02:00
parent 3dc478b4a0
commit 1f6fce1278
19 changed files with 198 additions and 40 deletions

View File

@@ -1,5 +1,4 @@
.messaging-box fieldset {
resize: both;
display: flex;
flex-wrap: wrap;
align-items: flex-start;

View File

@@ -1,6 +1,5 @@
.messaging-box {
fieldset {
resize: both;
display: flex;
flex-wrap: wrap;
align-items: flex-start;

View File

@@ -4,11 +4,11 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- EWF CMS -->
<link rel="stylesheet" href="{$site_url/}theme/css/style.css">
<link rel="stylesheet" href="{$theme_path/}css/style.css">
<!-- jQuery dep -->
<script src="{$site_url/}theme/js/jquery-1.10.2.min.js"></script>
<script src="{$site_url/}theme/js/popup_search.js"></script>
<script src="{$theme_path/}js/jquery-1.10.2.min.js"></script>
<script src="{$theme_path/}js/popup_search.js"></script>
{if isset="$head"}{$head/}{/if}
{if isset="$styles"}{$styles/}{/if}

View File

@@ -133,7 +133,7 @@ feature -- Hooks
response_alter (a_response: CMS_RESPONSE)
-- <Precursor>
do
a_response.add_style (a_response.url ("/module/" + name + "/files/css/admin.css", Void), Void)
a_response.add_style (a_response.module_resource_url (Current, "/files/css/admin.css", Void), Void)
end
menu_system_alter (a_menu_system: CMS_MENU_SYSTEM; a_response: CMS_RESPONSE)

View File

@@ -1157,7 +1157,7 @@ feature -- Response Alter
response_alter (a_response: CMS_RESPONSE)
do
a_response.add_javascript_url ("https://www.google.com/recaptcha/api.js")
a_response.add_style (a_response.url ("/module/" + name + "/files/css/auth.css", Void), Void)
a_response.add_style (a_response.module_resource_url (Current, "/files/css/auth.css", Void), Void)
end
feature {NONE} -- Implementation

View File

@@ -139,7 +139,7 @@ feature -- Hooks
response_alter (a_response: CMS_RESPONSE)
do
a_response.add_style (a_response.url ("/module/" + name + "/files/css/blog.css", Void), Void)
a_response.add_style (a_response.module_resource_url (Current, "/files/css/blog.css", Void), Void)
end
menu_system_alter (a_menu_system: CMS_MENU_SYSTEM; a_response: CMS_RESPONSE)

View File

@@ -90,7 +90,7 @@ feature -- Hooks
response_alter (a_response: CMS_RESPONSE)
do
a_response.add_style (a_response.url ("/module/" + name + "/files/css/comments.css", Void), Void)
a_response.add_style (a_response.module_resource_url (Current, "/files/css/comments.css", Void), Void)
end
end

View File

@@ -186,7 +186,7 @@ feature -- Hooks
l_tpl_block.set_value (l_recaptcha_site_key, "recaptcha_site_key")
end
a_response.add_block (l_tpl_block, "content")
a_response.add_style (a_response.url ("/module/" + name + "/files/css/contact.css", Void), Void)
a_response.add_style (a_response.module_resource_url (Current, "/files/css/contact.css", Void), Void)
else
debug ("cms")
a_response.add_warning_message ("Error with block [" + a_block_id + "]")
@@ -200,7 +200,7 @@ feature -- Hooks
local
f: CMS_FORM
do
a_response.add_style (a_response.url ("/module/" + name + "/files/css/contact.css", Void), Void)
a_response.add_style (a_response.module_resource_url (Current, "/files/css/contact.css", Void), Void)
if attached smarty_template_block (Current, "contact", api) as l_tpl_block then
if attached recaptcha_site_key (api) as l_recaptcha_site_key then
l_tpl_block.set_value (l_recaptcha_site_key, "recaptcha_site_key")
@@ -281,7 +281,7 @@ feature -- Hooks
do
write_information_log (generator + ".handle_post_contact")
create {GENERIC_VIEW_CMS_RESPONSE} r.make (req, res, api)
r.add_style (r.url ("/module/" + name + "/files/css/contact.css", Void), Void)
r.add_style (r.module_resource_url (Current, "/files/css/contact.css", Void), Void)
r.values.force (False, "has_error")
create vars.make_caseless (5)

View File

@@ -326,7 +326,7 @@ feature -- Hook
response_alter (a_response: CMS_RESPONSE)
do
a_response.add_style (a_response.url ("/module/" + name + "/files/css/feed_aggregator.css", Void), Void)
a_response.add_style (a_response.module_resource_url (Current, "/files/css/feed_aggregator.css", Void), Void)
end
menu_system_alter (a_menu_system: CMS_MENU_SYSTEM; a_response: CMS_RESPONSE)

View File

@@ -146,7 +146,7 @@ feature -- Handler
create {GENERIC_VIEW_CMS_RESPONSE} r.make (req, res, api)
-- add style
r.add_style (r.url ("/module/" + name + "/files/css/files.css", Void), Void)
r.add_style (r.module_resource_url (Current, "/files/css/files.css", Void), Void)
create body.make_empty
@@ -245,7 +245,7 @@ feature -- Handler
body.append ("<h1> Upload files </h1>%N")
-- set style
r.add_style (r.url ("/module/" + name + "/files/css/files.css", Void), Void)
r.add_style (r.module_resource_url (Current, "/files/css/files.css", Void), Void)
if api.has_permission (upload_files_permission) then
body.append ("<p>Please choose file(s) to upload.</p>")
@@ -269,8 +269,8 @@ feature -- Handler
body.append ("<a href=%""+ r.url (uploads_location, Void) +"?basic_upload=no%">Use advanced file uploading.</a>%N")
else
-- add JS for dropzone
r.add_javascript_url (r.url ("/module/" + name + "/files/js/dropzone.js", Void))
r.add_style (r.url ("/module/" + name + "/files/js/dropzone.css", Void), Void)
r.add_javascript_url (r.module_resource_url (Current, "/files/js/dropzone.js", Void))
r.add_style (r.module_resource_url (Current, "/files/js/dropzone.css", Void), Void)
-- create form to choose files and upload them
body.append ("<form action=%"" + r.url (uploads_location, Void) + "%" class=%"dropzone%">")

View File

@@ -109,7 +109,7 @@ feature -- Hooks
local
f: CMS_FORM
do
a_response.add_style (a_response.url ("/module/" + name + "/files/css/messaging.css", Void), Void)
a_response.add_style (a_response.module_resource_url (Current, "/files/css/messaging.css", Void), Void)
-- TODO: use template to overwrite/customize
-- if attached smarty_template_block (Current, "messaging", api) as l_tpl_block then
-- across
@@ -215,7 +215,7 @@ $(document).ready(function() {
});
});
</script>
]")
]")
Result := f
end
@@ -249,7 +249,7 @@ $(document).ready(function() {
do
if api.has_permission ("message any user") then
create {GENERIC_VIEW_CMS_RESPONSE} r.make (req, res, api)
r.add_style (r.url ("/module/" + name + "/files/css/messaging.css", Void), Void)
r.add_style (r.module_resource_url (Current, "/files/css/messaging.css", Void), Void)
create s.make_empty

View File

@@ -224,7 +224,7 @@ feature -- Hooks
response_alter (a_response: CMS_RESPONSE)
-- <Precursor>
do
a_response.add_style (a_response.url ("/module/" + name + "/files/css/node.css", Void), Void)
a_response.add_style (a_response.module_resource_url (Current, "/files/css/node.css", Void), Void)
end
block_list: ITERABLE [like {CMS_BLOCK}.name]

View File

@@ -147,7 +147,7 @@ feature -- Hooks
response_alter (a_response: CMS_RESPONSE)
do
a_response.add_style (a_response.url ("/module/" + name + "/files/css/taxonomy.css", Void), Void)
a_response.add_style (a_response.module_resource_url (Current, "/files/css/taxonomy.css", Void), Void)
end
end

View File

@@ -64,7 +64,7 @@ feature -- Hooks
response_alter (a_response: CMS_RESPONSE)
do
a_response.add_style (a_response.url ("/module/" + name + "/files/css/wikitext.css", Void), Void)
a_response.add_style (a_response.module_resource_url (Current, "/files/css/wikitext.css", Void), Void)
end
end

View File

@@ -99,7 +99,7 @@ feature {NONE} -- Initialization
end
-- Selected theme's name
site_theme_name := text_item_or_default ("theme", "default")
site_theme_name := text_item_or_default ("site.theme", "default")
set_theme (site_theme_name)
-- Administration
@@ -325,6 +325,18 @@ feature -- Settings
is_debug: BOOLEAN
-- Is debug mode enabled?
set_site_mode
-- Switch to site mode.
--| - Change theme
--| - ..
do
if is_theme_valid (site_theme_name) then
set_theme (site_theme_name)
else
-- Keep previous theme!
end
end
set_administration_mode
-- Switch to administration mode.
--| - Change theme
@@ -341,7 +353,7 @@ feature -- Settings
-- Set theme to `a_name`.
do
theme_name := a_name.as_string_32
theme_location := themes_location.extended (theme_name)
theme_location := theme_location_for (theme_name)
end
feature -- Query
@@ -417,7 +429,7 @@ feature -- Access: theme
local
fu: FILE_UTILITIES
do
Result := fu.directory_path_exists (themes_location.extended (a_theme_name))
Result := fu.directory_path_exists (theme_location_for (a_theme_name))
end
theme_information_location: PATH
@@ -437,6 +449,12 @@ feature -- Access: theme
-- Default: same as site theme.
-- TODO: change to builtin "admin" theme?
theme_location_for (a_theme_name: READABLE_STRING_GENERAL): PATH
-- Theme directory location for theme `a_theme_name`.
do
Result := themes_location.extended (a_theme_name)
end
feature -- Access
mailer: NOTIFICATION_MAILER

View File

@@ -116,6 +116,7 @@ feature {NONE} -- Initialize
initialize_site_url
-- Initialize site and base url.
local
l_base_url: detachable READABLE_STRING_8
l_url: detachable STRING_8
i,j: INTEGER
do
@@ -134,12 +135,23 @@ feature {NONE} -- Initialize
if i > 0 then
j := l_url.index_of ('/', i + 3)
if j > 0 then
base_url := l_url.substring (j, l_url.count)
l_base_url := l_url.substring (j, l_url.count)
end
end
if l_base_url /= Void then
base_url := l_base_url
if l_base_url.ends_with_general ("/") then
create base_path.make_from_string (l_base_url)
else
create base_path.make_from_string (l_base_url + "/")
end
else
create base_path.make_from_string ("/")
end
ensure
site_url_set: site_url /= Void
site_url_ends_with_slash: site_url.ends_with_general ("/")
base_path_set: base_path /= Void and then base_path.ends_with_general ("/")
end
initialize_content_types
@@ -380,6 +392,9 @@ feature -- Access: url
--| Usually it is Void, but it could be
--| /project/demo/
base_path: IMMUTABLE_STRING_8
-- Base path, default to "/"
site_url: IMMUTABLE_STRING_8
-- Site url
@@ -493,10 +508,20 @@ feature -- Helpers: html links
feature -- Settings
switch_to_site_mode
do
if is_administration_mode then
setup.set_site_mode
is_administration_mode := False
end
end
switch_to_administration_mode
do
setup.set_administration_mode
is_administration_mode := True
if not is_administration_mode then
setup.set_administration_mode
is_administration_mode := True
end
end
is_administration_mode: BOOLEAN
@@ -1101,6 +1126,14 @@ feature -- Environment/ theme
Result := setup.files_location
end
files_path: STRING_8
do
create Result.make_from_string (base_path)
Result.append ("files/")
ensure
ends_with_slash: Result.ends_with ("/")
end
cache_location: PATH
-- CMS internal cache location.
do
@@ -1118,16 +1151,44 @@ feature -- Environment/ theme
Result := setup.theme_name
end
theme_path: STRING_8
-- URL path to the theme.
do
Result := theme_path_for (theme_name)
ensure
ends_with_slash: Result.ends_with ("/")
end
theme_assets_location: PATH
-- assets (js, css, images, etc).
do
debug ("refactor_fixme")
fixme ("Check if we really need it")
end
-- Check how to get this path from the CMS_THEME information.
Result := theme_location.extended ("assets")
end
feature -- Theming path helpers
theme_location_for (a_theme_name: READABLE_STRING_GENERAL): PATH
do
Result := setup.theme_location_for (a_theme_name)
end
theme_path_for (a_theme_name: READABLE_STRING_GENERAL): STRING_8
-- URL path to the theme `a_theme_name`.
do
create Result.make_from_string (base_path)
Result.append ("theme/")
Result.append (url_encoded (a_theme_name))
Result.append_character ('/')
ensure
ends_with_slash: Result.ends_with ("/")
end
theme_assets_location_for (a_theme_name: READABLE_STRING_GENERAL): PATH
do
Result := theme_location_for (a_theme_name).extended ("assets")
end
feature -- Environment/ module
module_configuration (a_module: CMS_MODULE; a_name: detachable READABLE_STRING_GENERAL): detachable CONFIG_READER

View File

@@ -195,16 +195,17 @@ feature -- Settings: router
configure_api_file_handler (a_router: WSF_ROUTER)
local
fhdl: WSF_FILE_SYSTEM_HANDLER
themehdl: CMS_THEME_FILE_SYSTEM_HANDLER
do
api.logger.put_information (generator + ".configure_api_file_handler", Void)
create fhdl.make_hidden_with_path (api.theme_assets_location)
fhdl.disable_index
fhdl.set_not_found_handler (agent (ia_uri: READABLE_STRING_8; ia_req: WSF_REQUEST; ia_res: WSF_RESPONSE)
create themehdl.make (api)
themehdl.set_not_found_handler (agent (ia_uri: READABLE_STRING_8; ia_req: WSF_REQUEST; ia_res: WSF_RESPONSE)
do
execute_default (ia_req, ia_res)
end)
a_router.handle ("/theme/", fhdl, router.methods_GET)
-- See CMS_API.api.theme_path_for (...) for the hardcoded "/theme/" path.
a_router.handle ("/theme/{theme_id}{/vars}", themehdl, router.methods_GET)
-- "/files/.."
create fhdl.make_hidden_with_path (api.files_location)
@@ -213,7 +214,7 @@ feature -- Settings: router
do
execute_default (ia_req, ia_res)
end)
a_router.handle ("/files/", fhdl, router.methods_GET)
a_router.handle (api.files_path, fhdl, router.methods_GET)
-- files folder from specific module.
a_router.handle ("/module/{modname}/files{/vars}", create {WSF_URI_TEMPLATE_AGENT_HANDLER}.make (agent handle_module_files), a_router.methods_get)
@@ -244,6 +245,7 @@ feature -- Request execution
initialize_site_execution
-- Initialize for site execution.
do
api.switch_to_site_mode
api.initialize_execution
setup_router
end

View File

@@ -0,0 +1,59 @@
note
description: "Summary description for {CMS_THEME_FILE_SYSTEM_HANDLER}."
author: ""
date: "$Date$"
revision: "$Revision$"
class
CMS_THEME_FILE_SYSTEM_HANDLER
inherit
WSF_URI_TEMPLATE_HANDLER
create
make
feature -- Initialization
make (a_cms_api: CMS_API)
do
api := a_cms_api
end
api: CMS_API
feature -- Execution
execute (req: WSF_REQUEST; res: WSF_RESPONSE)
-- Execute `req' responding in `res'.
local
fhdl: WSF_FILE_SYSTEM_HANDLER
not_found: NOT_FOUND_ERROR_CMS_RESPONSE
do
if attached {WSF_STRING} req.path_parameter ("theme_id") as l_theme_id then
create fhdl.make_hidden_with_path (api.theme_assets_location_for (l_theme_id.value))
fhdl.disable_index
fhdl.set_not_found_handler (not_found_handler)
fhdl.execute_starts_with (api.theme_path_for (l_theme_id.value), req, res)
-- a_router.handle (api.theme_path, fhdl, router.methods_GET)
elseif attached not_found_handler as h then
h.call (req.percent_encoded_path_info, req, res)
else
create not_found.make (req, res, api)
not_found.execute
end
end
feature -- Not found handling
not_found_handler: detachable PROCEDURE [READABLE_STRING_8, WSF_REQUEST, WSF_RESPONSE]
set_not_found_handler (h: like not_found_handler)
do
not_found_handler := h
end
note
copyright: "2011-2017, Jocelyn Fiat, Javier Velilla, Eiffel Software and others"
license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
end

View File

@@ -25,7 +25,10 @@ feature {NONE} -- Initialization
create header.make
create values.make (3)
site_url := a_api.site_url
base_url := a_api.base_url
if attached a_api.base_url as l_base_url then
base_url := l_base_url
end
base_path := a_api.base_path
initialize
end
@@ -124,8 +127,8 @@ feature -- URL utilities
if attached setup.front_page_path as l_front_page_path then
Result := l_front_page_path.same_string (l_path_info)
else
if attached base_url as l_base_url then
Result := l_path_info.same_string (l_base_url)
if base_path.same_string (l_path_info) then
Result := True
else
Result := l_path_info.is_empty or else l_path_info.same_string ("/")
end
@@ -134,12 +137,18 @@ feature -- URL utilities
site_url: IMMUTABLE_STRING_8
-- Absolute site url.
-- Always ends with '/'
base_url: detachable IMMUTABLE_STRING_8
-- Base url if any.
--| Usually it is Void, but it could be
--| /project/demo/
base_path: IMMUTABLE_STRING_8
-- Base path, default to "/".
-- Always ends with '/'
-- Could be /project/demo/
feature -- Access: CMS
site_name: STRING_32
@@ -1242,6 +1251,7 @@ feature -- Generation
-- Variables
page.register_variable (absolute_url ("", Void), "site_url")
page.register_variable (base_path, "base_path")
page.register_variable (absolute_url ("", Void), "host") -- Same as `site_url'.
page.register_variable (request.is_https, "is_https")
if attached title as l_title then
@@ -1253,6 +1263,8 @@ feature -- Generation
page.set_is_https (request.is_https)
-- Variables/Misc
page.register_variable (is_administration_mode, "is_administration_mode")
page.register_variable (api.theme_path, "theme_path")
-- FIXME: logo .. could be a settings of theme, managed by admin front-end/database.
-- if attached logo_location as l_logo then
@@ -1398,6 +1410,14 @@ feature -- Helpers: URLs
Result := api.location_url (a_location, opts)
end
module_resource_url (a_module: CMS_MODULE; a_path: READABLE_STRING_8; opts: detachable CMS_API_OPTIONS): STRING_8
-- Url for resource `a_path` associated with module `a_module`.
require
a_valid_valid: a_path.is_empty or else a_path.starts_with ("/")
do
Result := url ("/module/" + a_module.name + a_path, opts)
end
user_url (u: CMS_USER): like url
require
u_with_id: u.has_id