mirror of
https://github.com/processone/ejabberd.git
synced 2024-06-14 22:00:16 +02:00
* src/web/ejabberd_web_admin.erl: Improve Web Admin navigation
menu for vhosts and nodes (EJAB-734) SVN Revision: 1642
This commit is contained in:
parent
9a66082998
commit
42115a8cfb
|
@ -1,5 +1,8 @@
|
||||||
2008-10-12 Badlop <badlop@process-one.net>
|
2008-10-12 Badlop <badlop@process-one.net>
|
||||||
|
|
||||||
|
* src/web/ejabberd_web_admin.erl: Improve Web Admin navigation
|
||||||
|
menu for vhosts and nodes (EJAB-734)
|
||||||
|
|
||||||
* doc/guide.tex: Explain the new ejabberdctl command 'help'
|
* doc/guide.tex: Explain the new ejabberdctl command 'help'
|
||||||
* doc/guide.html: Likewise
|
* doc/guide.html: Likewise
|
||||||
|
|
||||||
|
|
|
@ -104,60 +104,15 @@ get_auth(Auth) ->
|
||||||
unauthorized
|
unauthorized
|
||||||
end.
|
end.
|
||||||
|
|
||||||
make_xhtml(Els, global, Lang) ->
|
|
||||||
MenuItems1 = ejabberd_hooks:run_fold(webadmin_menu_main, [], [Lang]),
|
|
||||||
MenuItems2 = [?LI([?AC("/admin/"++MI_uri++"/", MI_name)]) || {MI_uri, MI_name} <- MenuItems1],
|
|
||||||
{200, [html],
|
|
||||||
{xmlelement, "html", [{"xmlns", "http://www.w3.org/1999/xhtml"},
|
|
||||||
{"xml:lang", Lang},
|
|
||||||
{"lang", Lang}],
|
|
||||||
[{xmlelement, "head", [],
|
|
||||||
[?XCT("title", "ejabberd Web Admin"),
|
|
||||||
{xmlelement, "meta", [{"http-equiv", "Content-Type"},
|
|
||||||
{"content", "text/html; charset=utf-8"}], []},
|
|
||||||
{xmlelement, "link", [{"href", "/admin/favicon.ico"},
|
|
||||||
{"type", "image/x-icon"},
|
|
||||||
{"rel", "shortcut icon"}], []},
|
|
||||||
{xmlelement, "link", [{"href", "/admin/style.css"},
|
|
||||||
{"type", "text/css"},
|
|
||||||
{"rel", "stylesheet"}], []}]},
|
|
||||||
?XE("body",
|
|
||||||
[?XAE("div",
|
|
||||||
[{"id", "container"}],
|
|
||||||
[?XAE("div",
|
|
||||||
[{"id", "header"}],
|
|
||||||
[?XE("h1",
|
|
||||||
[?ACT("/admin/", "Administration")]
|
|
||||||
)]),
|
|
||||||
?XAE("div",
|
|
||||||
[{"id", "navigation"}],
|
|
||||||
[?XE("ul",
|
|
||||||
[?LI([?ACT("/admin/acls/", "Access Control Lists")]),
|
|
||||||
?LI([?ACT("/admin/access/", "Access Rules")]),
|
|
||||||
?LI([?ACT("/admin/vhosts/", "Virtual Hosts")]),
|
|
||||||
?LI([?ACT("/admin/nodes/", "Nodes")]),
|
|
||||||
?LI([?ACT("/admin/stats/", "Statistics")])
|
|
||||||
] ++ MenuItems2
|
|
||||||
)]),
|
|
||||||
?XAE("div",
|
|
||||||
[{"id", "content"}],
|
|
||||||
Els),
|
|
||||||
?XAE("div",
|
|
||||||
[{"id", "clearcopyright"}],
|
|
||||||
[{xmlcdata, ""}])]),
|
|
||||||
?XAE("div",
|
|
||||||
[{"id", "copyrightouter"}],
|
|
||||||
[?XAE("div",
|
|
||||||
[{"id", "copyright"}],
|
|
||||||
[?XC("p",
|
|
||||||
"ejabberd (c) 2002-2008 ProcessOne")
|
|
||||||
])])])
|
|
||||||
]}};
|
|
||||||
|
|
||||||
make_xhtml(Els, Host, Lang) ->
|
make_xhtml(Els, Host, Lang) ->
|
||||||
Base = "/admin/server/" ++ Host ++ "/",
|
make_xhtml(Els, Host, cluster, Lang).
|
||||||
MenuItems1 = ejabberd_hooks:run_fold(webadmin_menu_host, Host, [], [Host, Lang]),
|
|
||||||
MenuItems2 = [?LI([?AC(Base ++ MI_uri ++ "/", MI_name)]) || {MI_uri, MI_name} <- MenuItems1],
|
%% @spec (Els, Host, Node, Lang)
|
||||||
|
%% where Host = global | string()
|
||||||
|
%% Node = cluster | atom()
|
||||||
|
make_xhtml(Els, Host, Node, Lang) ->
|
||||||
|
Base = get_base_path(Host, cluster), %% Enforcing 'cluster' on purpose here
|
||||||
|
MenuItems = make_navigation(Host, Node, Lang),
|
||||||
{200, [html],
|
{200, [html],
|
||||||
{xmlelement, "html", [{"xmlns", "http://www.w3.org/1999/xhtml"},
|
{xmlelement, "html", [{"xmlns", "http://www.w3.org/1999/xhtml"},
|
||||||
{"xml:lang", Lang},
|
{"xml:lang", Lang},
|
||||||
|
@ -166,7 +121,7 @@ make_xhtml(Els, Host, Lang) ->
|
||||||
[?XCT("title", "ejabberd Web Admin"),
|
[?XCT("title", "ejabberd Web Admin"),
|
||||||
{xmlelement, "meta", [{"http-equiv", "Content-Type"},
|
{xmlelement, "meta", [{"http-equiv", "Content-Type"},
|
||||||
{"content", "text/html; charset=utf-8"}], []},
|
{"content", "text/html; charset=utf-8"}], []},
|
||||||
{xmlelement, "link", [{"href", "/admin/favicon.ico"},
|
{xmlelement, "link", [{"href", Base ++ "favicon.ico"},
|
||||||
{"type", "image/x-icon"},
|
{"type", "image/x-icon"},
|
||||||
{"rel", "shortcut icon"}], []},
|
{"rel", "shortcut icon"}], []},
|
||||||
{xmlelement, "link", [{"href", Base ++ "style.css"},
|
{xmlelement, "link", [{"href", Base ++ "style.css"},
|
||||||
|
@ -183,18 +138,7 @@ make_xhtml(Els, Host, Lang) ->
|
||||||
?XAE("div",
|
?XAE("div",
|
||||||
[{"id", "navigation"}],
|
[{"id", "navigation"}],
|
||||||
[?XE("ul",
|
[?XE("ul",
|
||||||
[?LI([?XAE("div",
|
MenuItems
|
||||||
[{"id", "navheadhost"}],
|
|
||||||
[?AC(Base, Host)]
|
|
||||||
)]),
|
|
||||||
?LI([?ACT(Base ++ "acls/", "Access Control Lists")]),
|
|
||||||
?LI([?ACT(Base ++ "access/", "Access Rules")]),
|
|
||||||
?LI([?ACT(Base ++ "users/", "Users")]),
|
|
||||||
?LI([?ACT(Base ++ "online-users/", "Online Users")]),
|
|
||||||
?LI([?ACT(Base ++ "last-activity/", "Last Activity")]),
|
|
||||||
?LI([?ACT(Base ++ "nodes/", "Nodes")]),
|
|
||||||
?LI([?ACT(Base ++ "stats/", "Statistics")])
|
|
||||||
] ++ MenuItems2
|
|
||||||
)]),
|
)]),
|
||||||
?XAE("div",
|
?XAE("div",
|
||||||
[{"id", "content"}],
|
[{"id", "content"}],
|
||||||
|
@ -211,13 +155,13 @@ make_xhtml(Els, Host, Lang) ->
|
||||||
])])])
|
])])])
|
||||||
]}}.
|
]}}.
|
||||||
|
|
||||||
|
get_base_path(global, cluster) -> "/admin/";
|
||||||
|
get_base_path(Host, cluster) -> "/admin/server/" ++ Host ++ "/";
|
||||||
|
get_base_path(global, Node) -> "/admin/node/" ++ atom_to_list(Node) ++ "/";
|
||||||
|
get_base_path(Host, Node) -> "/admin/server/" ++ Host ++ "/node/" ++ atom_to_list(Node) ++ "/".
|
||||||
|
|
||||||
css(Host) ->
|
css(Host) ->
|
||||||
Base = case Host of
|
Base = get_base_path(Host, cluster),
|
||||||
global ->
|
|
||||||
"/admin/";
|
|
||||||
_ ->
|
|
||||||
"/admin/server/" ++ Host ++ "/"
|
|
||||||
end,
|
|
||||||
"
|
"
|
||||||
html,body {
|
html,body {
|
||||||
background: white;
|
background: white;
|
||||||
|
@ -298,7 +242,7 @@ html>body #container {
|
||||||
|
|
||||||
#navigation ul {
|
#navigation ul {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 54px;
|
top: 65px;
|
||||||
left: 0;
|
left: 0;
|
||||||
padding: 0 1px 1px 1px;
|
padding: 0 1px 1px 1px;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
@ -306,7 +250,7 @@ html>body #container {
|
||||||
font-size: 8pt;
|
font-size: 8pt;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
background: #d47911;
|
background: #d47911;
|
||||||
width: 13em;
|
width: 17em;
|
||||||
}
|
}
|
||||||
|
|
||||||
#navigation ul li {
|
#navigation ul li {
|
||||||
|
@ -340,9 +284,20 @@ html>body #container {
|
||||||
background: #332;
|
background: #332;
|
||||||
}
|
}
|
||||||
|
|
||||||
#navheadhost {
|
ul li #navhead a, ul li #navheadsub a, ul li #navheadsubsub a {
|
||||||
text-align: left;
|
text-align: center;
|
||||||
border-bottom: 2px solid #d47911;
|
border-top: 2px solid #d47911;
|
||||||
|
border-bottom: 1px solid #d47911;
|
||||||
|
}
|
||||||
|
|
||||||
|
#navheadsub, #navitemsub {
|
||||||
|
border-left: 7px solid white;
|
||||||
|
margin-left: 2px solid #d47911;
|
||||||
|
}
|
||||||
|
|
||||||
|
#navheadsubsub, #navitemsubsub {
|
||||||
|
border-left: 14px solid white;
|
||||||
|
margin-left: 4px solid #d47911;
|
||||||
}
|
}
|
||||||
|
|
||||||
#lastactivity li {
|
#lastactivity li {
|
||||||
|
@ -550,7 +505,7 @@ h3 {
|
||||||
#content {
|
#content {
|
||||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
font-family: Verdana, Arial, Helvetica, sans-serif;
|
||||||
font-size: 10pt;
|
font-size: 10pt;
|
||||||
padding-left: 13em;
|
padding-left: 17em;
|
||||||
padding-top: 5px;
|
padding-top: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -595,11 +550,12 @@ logo_fill() ->
|
||||||
"1c5dvhSU2BpKqBXl6R0ljYGS50R5zVC+tVD+vfE6YyUexE9x7g4AAAAASUVO"
|
"1c5dvhSU2BpKqBXl6R0ljYGS50R5zVC+tVD+vfE6YyUexE9x7g4AAAAASUVO"
|
||||||
"RK5CYII=").
|
"RK5CYII=").
|
||||||
|
|
||||||
|
|
||||||
process_admin(global,
|
process_admin(global,
|
||||||
#request{path = [],
|
#request{path = [],
|
||||||
lang = Lang}) ->
|
lang = Lang}) ->
|
||||||
MenuItems1 = ejabberd_hooks:run_fold(webadmin_menu_main, [], [Lang]),
|
Base = get_base_path(global, cluster),
|
||||||
MenuItems2 = [?LI([?AC("/admin/"++MI_uri++"/", MI_name)]) || {MI_uri, MI_name} <- MenuItems1],
|
MenuItems2 = make_menu_items(global, cluster, Base, Lang),
|
||||||
make_xhtml([?XCT("h1", "Administration"),
|
make_xhtml([?XCT("h1", "Administration"),
|
||||||
?XE("ul",
|
?XE("ul",
|
||||||
[?LI([?ACT("/admin/acls/", "Access Control Lists"), ?C(" "),
|
[?LI([?ACT("/admin/acls/", "Access Control Lists"), ?C(" "),
|
||||||
|
@ -616,9 +572,8 @@ process_admin(global,
|
||||||
process_admin(Host,
|
process_admin(Host,
|
||||||
#request{path = [],
|
#request{path = [],
|
||||||
lang = Lang}) ->
|
lang = Lang}) ->
|
||||||
Base = "/admin/server/" ++ Host ++ "/",
|
Base = get_base_path(Host, cluster),
|
||||||
MenuItems1 = ejabberd_hooks:run_fold(webadmin_menu_host, Host, [], [Host, Lang]),
|
MenuItems2 = make_menu_items(Host, cluster, Base, Lang),
|
||||||
MenuItems2 = [?LI([?AC(Base ++ MI_uri ++ "/", MI_name)]) || {MI_uri, MI_name} <- MenuItems1],
|
|
||||||
make_xhtml([?XCT("h1", "Administration"),
|
make_xhtml([?XCT("h1", "Administration"),
|
||||||
?XE("ul",
|
?XE("ul",
|
||||||
[?LI([?ACT(Base ++ "acls/", "Access Control Lists"), ?C(" "),
|
[?LI([?ACT(Base ++ "acls/", "Access Control Lists"), ?C(" "),
|
||||||
|
@ -971,7 +926,7 @@ process_admin(Host,
|
||||||
make_xhtml([?XCT("h1", "Node not found")], Host, Lang);
|
make_xhtml([?XCT("h1", "Node not found")], Host, Lang);
|
||||||
Node ->
|
Node ->
|
||||||
Res = get_node(Host, Node, NPath, Query, Lang),
|
Res = get_node(Host, Node, NPath, Query, Lang),
|
||||||
make_xhtml(Res, Host, Lang)
|
make_xhtml(Res, Host, Node, Lang)
|
||||||
end;
|
end;
|
||||||
|
|
||||||
process_admin(Host, #request{lang = Lang} = Request) ->
|
process_admin(Host, #request{lang = Lang} = Request) ->
|
||||||
|
@ -1661,8 +1616,8 @@ search_running_node(SNode, [Node | Nodes]) ->
|
||||||
|
|
||||||
get_node(global, Node, [], Query, Lang) ->
|
get_node(global, Node, [], Query, Lang) ->
|
||||||
Res = node_parse_query(Node, Query),
|
Res = node_parse_query(Node, Query),
|
||||||
MenuItems1 = ejabberd_hooks:run_fold(webadmin_menu_node, [], [Node, Lang]),
|
Base = get_base_path(global, Node),
|
||||||
MenuItems2 = [?LI([?AC(MI_uri++"/", MI_name)]) || {MI_uri, MI_name} <- MenuItems1],
|
MenuItems2 = make_menu_items(global, Node, Base, Lang),
|
||||||
[?XC("h1", ?T("Node ") ++ atom_to_list(Node))] ++
|
[?XC("h1", ?T("Node ") ++ atom_to_list(Node))] ++
|
||||||
case Res of
|
case Res of
|
||||||
ok -> [?CT("Submitted"), ?P];
|
ok -> [?CT("Submitted"), ?P];
|
||||||
|
@ -1670,11 +1625,11 @@ get_node(global, Node, [], Query, Lang) ->
|
||||||
nothing -> []
|
nothing -> []
|
||||||
end ++
|
end ++
|
||||||
[?XE("ul",
|
[?XE("ul",
|
||||||
[?LI([?ACT("db/", "Database")]),
|
[?LI([?ACT(Base ++ "db/", "Database")]),
|
||||||
?LI([?ACT("backup/", "Backup")]),
|
?LI([?ACT(Base ++ "backup/", "Backup")]),
|
||||||
?LI([?ACT("ports/", "Listened Ports")]),
|
?LI([?ACT(Base ++ "ports/", "Listened Ports")]),
|
||||||
?LI([?ACT("stats/", "Statistics")]),
|
?LI([?ACT(Base ++ "stats/", "Statistics")]),
|
||||||
?LI([?ACT("update/", "Update")])
|
?LI([?ACT(Base ++ "update/", "Update")])
|
||||||
] ++ MenuItems2),
|
] ++ MenuItems2),
|
||||||
?XAE("form", [{"action", ""}, {"method", "post"}],
|
?XAE("form", [{"action", ""}, {"method", "post"}],
|
||||||
[?INPUTT("submit", "restart", "Restart"),
|
[?INPUTT("submit", "restart", "Restart"),
|
||||||
|
@ -1683,11 +1638,11 @@ get_node(global, Node, [], Query, Lang) ->
|
||||||
];
|
];
|
||||||
|
|
||||||
get_node(Host, Node, [], _Query, Lang) ->
|
get_node(Host, Node, [], _Query, Lang) ->
|
||||||
MenuItems1 = ejabberd_hooks:run_fold(webadmin_menu_hostnode, Host, [], [Host, Node, Lang]),
|
Base = get_base_path(Host, Node),
|
||||||
MenuItems2 = [?LI([?AC(MI_uri++"/", MI_name)]) || {MI_uri, MI_name} <- MenuItems1],
|
MenuItems2 = make_menu_items(global, Node, Base, Lang),
|
||||||
[?XC("h1", ?T("Node ") ++ atom_to_list(Node)),
|
[?XC("h1", ?T("Node ") ++ atom_to_list(Node)),
|
||||||
?XE("ul",
|
?XE("ul",
|
||||||
[?LI([?ACT("modules/", "Modules")])] ++ MenuItems2)
|
[?LI([?ACT(Base ++ "modules/", "Modules")])] ++ MenuItems2)
|
||||||
];
|
];
|
||||||
|
|
||||||
get_node(global, Node, ["db"], Query, Lang) ->
|
get_node(global, Node, ["db"], Query, Lang) ->
|
||||||
|
@ -2276,3 +2231,134 @@ last_modified() ->
|
||||||
{"Last-Modified", "Mon, 25 Feb 2008 13:23:30 GMT"}.
|
{"Last-Modified", "Mon, 25 Feb 2008 13:23:30 GMT"}.
|
||||||
cache_control_public() ->
|
cache_control_public() ->
|
||||||
{"Cache-Control", "public"}.
|
{"Cache-Control", "public"}.
|
||||||
|
|
||||||
|
|
||||||
|
%%%
|
||||||
|
%%% Navigation Menu
|
||||||
|
%%%
|
||||||
|
|
||||||
|
%% @spec (Host, Node, Lang) -> [LI]
|
||||||
|
make_navigation(Host, Node, Lang) ->
|
||||||
|
HostNodeMenu = make_host_node_menu(Host, Node, Lang),
|
||||||
|
HostMenu = make_host_menu(Host, HostNodeMenu, Lang),
|
||||||
|
NodeMenu = make_node_menu(Host, Node, Lang),
|
||||||
|
Menu = make_server_menu(HostMenu, NodeMenu, Lang),
|
||||||
|
make_menu_items(Lang, Menu).
|
||||||
|
|
||||||
|
%% @spec (Host, Node, Base, Lang) -> [LI]
|
||||||
|
make_menu_items(global, cluster, Base, Lang) ->
|
||||||
|
HookItems = get_menu_items_hook(server, Lang),
|
||||||
|
make_menu_items(Lang, {Base, "", HookItems});
|
||||||
|
|
||||||
|
make_menu_items(global, _Node, Base, Lang) ->
|
||||||
|
HookItems = get_menu_items_hook(node, Lang),
|
||||||
|
make_menu_items(Lang, {Base, "", HookItems});
|
||||||
|
|
||||||
|
make_menu_items(Host, cluster, Base, Lang) ->
|
||||||
|
HookItems = get_menu_items_hook({host, Host}, Lang),
|
||||||
|
make_menu_items(Lang, {Base, "", HookItems});
|
||||||
|
|
||||||
|
make_menu_items(Host, _Node, Base, Lang) ->
|
||||||
|
HookItems = get_menu_items_hook({hostnode, Host}, Lang),
|
||||||
|
make_menu_items(Lang, {Base, "", HookItems}).
|
||||||
|
|
||||||
|
|
||||||
|
make_host_node_menu(global, _, _Lang) ->
|
||||||
|
{"", "", []};
|
||||||
|
make_host_node_menu(_, cluster, _Lang) ->
|
||||||
|
{"", "", []};
|
||||||
|
make_host_node_menu(Host, Node, Lang) ->
|
||||||
|
HostNodeBase = get_base_path(Host, Node),
|
||||||
|
HostNodeFixed = [{"modules/", "Modules"}],
|
||||||
|
HostNodeHook = get_menu_items_hook({hostnode, Host}, Lang),
|
||||||
|
{HostNodeBase, atom_to_list(Node), HostNodeFixed ++ HostNodeHook}.
|
||||||
|
|
||||||
|
make_host_menu(global, _HostNodeMenu, _Lang) ->
|
||||||
|
{"", "", []};
|
||||||
|
make_host_menu(Host, HostNodeMenu, Lang) ->
|
||||||
|
HostBase = get_base_path(Host, cluster),
|
||||||
|
HostFixed = [{"acls", "Access Control Lists"},
|
||||||
|
{"access", "Access Rules"},
|
||||||
|
{"users", "Users"},
|
||||||
|
{"online-users", "Online Users"},
|
||||||
|
{"last-activity", "Last Activity"},
|
||||||
|
{"nodes", "Nodes", HostNodeMenu},
|
||||||
|
{"stats", "Statistics"}],
|
||||||
|
HostHook = get_menu_items_hook({host, Host}, Lang),
|
||||||
|
{HostBase, Host, HostFixed ++ HostHook}.
|
||||||
|
|
||||||
|
make_node_menu(_Host, cluster, _Lang) ->
|
||||||
|
{"", "", []};
|
||||||
|
make_node_menu(global, Node, Lang) ->
|
||||||
|
NodeBase = get_base_path(global, Node),
|
||||||
|
NodeFixed = [{"db/", "Database"},
|
||||||
|
{"backup/", "Backup"},
|
||||||
|
{"ports/", "Listened Ports"},
|
||||||
|
{"stats/", "Statistics"},
|
||||||
|
{"update/", "Update"}],
|
||||||
|
NodeHook = get_menu_items_hook(node, Lang),
|
||||||
|
{NodeBase, atom_to_list(Node), NodeFixed ++ NodeHook};
|
||||||
|
make_node_menu(_Host, _Node, _Lang) ->
|
||||||
|
{"", "", []}.
|
||||||
|
|
||||||
|
make_server_menu(HostMenu, NodeMenu, Lang) ->
|
||||||
|
Base = get_base_path(global, cluster),
|
||||||
|
Fixed = [{"acls", "Access Control Lists"},
|
||||||
|
{"access", "Access Rules"},
|
||||||
|
{"vhosts", "Virtual Hosts", HostMenu},
|
||||||
|
{"nodes", "Nodes", NodeMenu},
|
||||||
|
{"stats", "Statistics"}],
|
||||||
|
Hook = get_menu_items_hook(server, Lang),
|
||||||
|
{Base, "ejabberd", Fixed ++ Hook}.
|
||||||
|
|
||||||
|
|
||||||
|
get_menu_items_hook({hostnode, Host}, Lang) ->
|
||||||
|
ejabberd_hooks:run_fold(webadmin_menu_hostnode, Host, [], [Host, Lang]);
|
||||||
|
get_menu_items_hook({host, Host}, Lang) ->
|
||||||
|
ejabberd_hooks:run_fold(webadmin_menu_host, Host, [], [Host, Lang]);
|
||||||
|
get_menu_items_hook(node, Lang) ->
|
||||||
|
ejabberd_hooks:run_fold(webadmin_menu_node, [], [Lang]);
|
||||||
|
get_menu_items_hook(server, Lang) ->
|
||||||
|
ejabberd_hooks:run_fold(webadmin_menu_main, [], [Lang]).
|
||||||
|
|
||||||
|
|
||||||
|
%% @spec (Lang::string(), Menu) -> [LI]
|
||||||
|
%% where Menu = {MURI::string(), MName::string(), Items::[Item]}
|
||||||
|
%% Item = {IURI::string(), IName::string()} | {IURI::string(), IName::string(), Menu}
|
||||||
|
make_menu_items(Lang, Menu) ->
|
||||||
|
lists:reverse(make_menu_items2(Lang, 1, Menu)).
|
||||||
|
|
||||||
|
make_menu_items2(Lang, Deep, {MURI, MName, _} = Menu) ->
|
||||||
|
Res = case MName of
|
||||||
|
"" -> [];
|
||||||
|
_ -> [make_menu_item(header, Deep, MURI, MName, Lang) ]
|
||||||
|
end,
|
||||||
|
make_menu_items2(Lang, Deep, Menu, Res).
|
||||||
|
|
||||||
|
make_menu_items2(_, _Deep, {_, _, []}, Res) ->
|
||||||
|
Res;
|
||||||
|
|
||||||
|
make_menu_items2(Lang, Deep, {MURI, MName, [Item | Items]}, Res) ->
|
||||||
|
Res2 = case Item of
|
||||||
|
{IURI, IName} ->
|
||||||
|
[make_menu_item(item, Deep, MURI++IURI++"/", IName, Lang) | Res];
|
||||||
|
{IURI, IName, SubMenu} ->
|
||||||
|
%%ResTemp = [?LI([?ACT(MURI ++ IURI ++ "/", IName)]) | Res],
|
||||||
|
ResTemp = [make_menu_item(item, Deep, MURI++IURI++"/", IName, Lang) | Res],
|
||||||
|
ResSubMenu = make_menu_items2(Lang, Deep+1, SubMenu),
|
||||||
|
ResSubMenu ++ ResTemp
|
||||||
|
end,
|
||||||
|
make_menu_items2(Lang, Deep, {MURI, MName, Items}, Res2).
|
||||||
|
|
||||||
|
make_menu_item(header, 1, URI, Name, _Lang) ->
|
||||||
|
?LI([?XAE("div", [{"id", "navhead"}], [?AC(URI, "~ "++Name++" ~")] )]);
|
||||||
|
make_menu_item(header, 2, URI, Name, _Lang) ->
|
||||||
|
?LI([?XAE("div", [{"id", "navheadsub"}], [?AC(URI, "~ "++Name++" ~")] )]);
|
||||||
|
make_menu_item(header, 3, URI, Name, _Lang) ->
|
||||||
|
?LI([?XAE("div", [{"id", "navheadsubsub"}], [?AC(URI, "~ "++Name++" ~")] )]);
|
||||||
|
make_menu_item(item, 1, URI, Name, Lang) ->
|
||||||
|
?LI([?XAE("div", [{"id", "navitem"}], [?ACT(URI, Name)] )]);
|
||||||
|
make_menu_item(item, 2, URI, Name, Lang) ->
|
||||||
|
?LI([?XAE("div", [{"id", "navitemsub"}], [?ACT(URI, Name)] )]);
|
||||||
|
make_menu_item(item, 3, URI, Name, Lang) ->
|
||||||
|
?LI([?XAE("div", [{"id", "navitemsubsub"}], [?ACT(URI, Name)] )]).
|
||||||
|
|
Loading…
Reference in New Issue
Block a user