diff options
author | Jo-Philipp Wich <jow@openwrt.org> | 2016-01-17 17:59:37 +0100 |
---|---|---|
committer | Jo-Philipp Wich <jow@openwrt.org> | 2016-01-17 18:02:32 +0100 |
commit | b3c69b123a698e596a5df4797378d976718247f0 (patch) | |
tree | 8ea14d251425042977d8f4484fe5153e123d1f6b | |
parent | a5e43323e7dd58c329350e7fcddc280b2de266ca (diff) |
luci-theme-bootstrap: fix menu url generation (#625)
Also untangle Lua code and markup for better readability, use tabs for
indentation and build_url() to construct paths instead of concatenating
them manually.
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
-rw-r--r-- | themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm | 238 |
1 files changed, 120 insertions, 118 deletions
diff --git a/themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm b/themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm index 3b40ad4380..d4d0a2b125 100644 --- a/themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm +++ b/themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm @@ -1,6 +1,6 @@ <%# Copyright 2008 Steven Barth <steven@midlink.org> - Copyright 2008 Jo-Philipp Wich <jow@openwrt.org> + Copyright 2008-2016 Jo-Philipp Wich <jow@openwrt.org> Copyright 2012 David Menting <david@nut-bolt.nl> Licensed to the public under the Apache License 2.0. -%> @@ -36,31 +36,28 @@ c._menu_selected = true end end - - -- send as HTML5 + + -- send as HTML5 http.prepare_content("text/html") local function nodeurl(prefix, name, query) - local url = controller .. prefix .. name .. "/" + local u = url(prefix, name) if query then - url = url .. http.build_querystring(query) + u = u .. http.build_querystring(query) end - return pcdata(url) + return pcdata(u) end - local function subtree(prefix, node, level) + local function render_tabmenu(prefix, node, level) if not level then level = 1 end local childs = disp.node_childs(node) if #childs > 0 then - - if level > 2 then -%> - <ul class="tabs"> - <% - end + if level > 2 then + write('<ul class="tabs">') + end local selected_node local selected_name @@ -72,99 +69,70 @@ selected_node = nnode selected_name = v end - if level > 2 then - %> - <li class="tabmenu-item-<%=v%><%- if nnode._menu_selected or (node.leaf and v == leaf) then %> active<% end %>"> - <a href="<%=nodeurl(prefix, v, nnode.query)%>"><%=striptags(translate(nnode.title))%></a> - </li> - <% end + + if level > 2 then + write('<li class="tabmenu-item-%s %s"><a href="%s">%s</a></li>' %{ + v, (nnode._menu_selected or (node.leaf and v == leaf)) and 'active' or '', + nodeurl(prefix, v, nnode.query), + striptags(translate(nnode.title)) + }) + end + end + + if level > 2 then + write('</ul>') end - - if level > 2 then - %> - </ul> -<% end if selected_node then - subtree(prefix .. selected_name .. "/", selected_node, level + 1) + render_tabmenu(prefix .. "/" .. selected_name, selected_node, level + 1) end end end --%> -<!DOCTYPE html> -<html lang="<%=luci.i18n.context.lang%>"> - <head> - <meta charset="utf-8"> - <title><%=striptags( (boardinfo.hostname or "?") .. ( (node and node.title) and ' - ' .. translate(node.title) or '')) %> - LuCI</title> - <!--[if lt IE 9]><script src="<%=media%>/html5.js"></script><![endif]--> - <meta name="viewport" content="initial-scale=1.0"> - <link rel="stylesheet" href="<%=media%>/cascade.css"> - <link rel="stylesheet" media="only screen and (max-device-width: 854px)" href="<%=media%>/mobile.css" type="text/css" /> - <link rel="shortcut icon" href="<%=media%>/favicon.ico"> - <% if node and node.css then %><link rel="stylesheet" href="<%=resource%>/<%=node.css%>"> - <% end -%> - <% if css then %><style title="text/css"> - <%-= css %> - </style> - <% end -%> - <script src="<%=resource%>/xhr.js"></script> - </head> - - <body class="lang_<%=luci.i18n.context.lang%> <%- if node then %><%= striptags( node.title ) %><%- end %>"> - <header> - <div class="fill"> - <div class="container"> - <a class="brand" href="#"><%=boardinfo.hostname or "?"%></a> - <ul class="nav"> - <%- - local function submenu(prefix, node) - local childs = disp.node_childs(node) - if #childs > 0 then - %> - <ul class="dropdown-menu"> - <%- - for i, r in ipairs(childs) do - local nnode = node.nodes[r] - local href = controller .. prefix .. r .. - (nnode.query and http.build_querystring(nnode.query) or "") - %> - <li><a href="<%=pcdata(href)%>"><%=pcdata(striptags(translate(nnode.title)))%></a></li> - <%- - end - %> - </ul> - <%- + + local function render_submenu(prefix, node) + local childs = disp.node_childs(node) + if #childs > 0 then + write('<ul class="dropdown-menu">') + + for i, r in ipairs(childs) do + local nnode = node.nodes[r] + write('<li><a href="%s">%s</a></li>' %{ + nodeurl(prefix, r, nnode.query), + pcdata(striptags(translate(nnode.title))) + }) end - end - childs = disp.node_childs(cattree) + write('</ul>') + end + end + local function render_topmenu() + local childs = disp.node_childs(cattree) if #childs > 0 then + write('<ul class="nav">') + for i, r in ipairs(childs) do local nnode = cattree.nodes[r] - local href = controller .. "/" .. category .. "/" .. r .. - (nnode.query and http.build_querystring(k.query) or "") - local grandchildren = disp.node_childs(nnode) - - if #grandchildren > 0 then - %> - <li class="dropdown"> - <a class="menu" href="#"><%=pcdata(striptags(translate(nnode.title)))%></a> - <%- submenu("/" .. category .. "/" .. r .. "/", nnode) %> - </li> - <% else %> - <li> - <a href="<%=pcdata(href)%>"><%=pcdata(striptags(translate(nnode.title)))%></a> - </li> - <% - end + local grandchildren = disp.node_childs(nnode) + + if #grandchildren > 0 then + write('<li class="dropdown"><a class="menu" href="#">%s</a>' % pcdata(striptags(translate(nnode.title)))) + render_submenu(category .. "/" .. r, nnode) + write('</li>') + else + write('<li><a href="%s">%s</a></li>' %{ + nodeurl(category, r, nnode.query), + pcdata(striptags(translate(nnode.title))) + }) + end end + + write('</ul>') end - %> - </ul> + end - <% - -- calculate the number of unsaved changes + local function render_changes() + -- calculate the number of unsaved changes if tree.nodes[category] and tree.nodes[category].ucidata then local ucichanges = 0 @@ -175,30 +143,64 @@ end end end - %> - <div class="pull-right"> - <% if ucichanges > 0 then %> - <a class="label notice" href="<%=controller%>/<%=category%>/uci/changes?redir=<%=http.urlencode(http.formvalue("redir") or REQUEST_URI)%>"><%:Unsaved Changes%>: <%=ucichanges%></a> - <% end %> - <span id="xhr_poll_status" style="display:none" onclick="XHR.running() ? XHR.halt() : XHR.run()"> - <span class="label success" id="xhr_poll_status_on"><%:Auto Refresh%> <%:on%></span> - <span class="label" id="xhr_poll_status_off" style="display:none"><%:Auto Refresh%> <%:off%></span> - </span> - </div> - <% end %> - </div> - </div> - </header> - -<%- if luci.sys.process.info("uid") == 0 and luci.sys.user.getuser("root") and not luci.sys.user.getpasswd("root") then -%> -<div class="container"> - <div class="alert-message warning"> - <h4><%:No password set!%></h4> - <%:There is no password set on this router. Please configure a root password to protect the web interface and enable SSH.%><br> - <a href="<%=pcdata(luci.dispatcher.build_url("admin/system/admin"))%>"><%:Go to password configuration...%></a> - </div> -</div> -<%- end -%> - -<div id="maincontent" class="container"> -<% if category then subtree("/" .. category .. "/", cattree) end %> + + if ucichanges > 0 then + write('<a class="label notice" href="%s?redir=%s">%s: %d</a>' %{ + url(category, 'uci/changes'), + http.urlencode(http.formvalue('redir') or REQUEST_URI), + translate('Unsaved Changes'), + ucichanges + }) + end + end + end +-%> +<!DOCTYPE html> +<html lang="<%=luci.i18n.context.lang%>"> + <head> + <meta charset="utf-8"> + <title><%=striptags( (boardinfo.hostname or "?") .. ( (node and node.title) and ' - ' .. translate(node.title) or '')) %> - LuCI</title> + <!--[if lt IE 9]><script src="<%=media%>/html5.js"></script><![endif]--> + <meta name="viewport" content="initial-scale=1.0"> + <link rel="stylesheet" href="<%=media%>/cascade.css"> + <link rel="stylesheet" media="only screen and (max-device-width: 854px)" href="<%=media%>/mobile.css" type="text/css" /> + <link rel="shortcut icon" href="<%=media%>/favicon.ico"> + <% if node and node.css then %> + <link rel="stylesheet" href="<%=resource%>/<%=node.css%>"> + <% end -%> + <% if css then %> + <style title="text/css"><%= css %></style> + <% end -%> + <script src="<%=resource%>/xhr.js"></script> + <script src="<%=resource%>/jql.min.js"></script> + </head> + + <body class="lang_<%=luci.i18n.context.lang%> <%- if node then %><%= striptags( node.title ) %><%- end %>"> + <header> + <div class="fill"> + <div class="container"> + <a class="brand" href="#"><%=boardinfo.hostname or "?"%></a> + <% render_topmenu() %> + <div class="pull-right"> + <% render_changes() %> + <span id="xhr_poll_status" style="display:none" onclick="XHR.running() ? XHR.halt() : XHR.run()"> + <span class="label success" id="xhr_poll_status_on"><%:Auto Refresh%> <%:on%></span> + <span class="label" id="xhr_poll_status_off" style="display:none"><%:Auto Refresh%> <%:off%></span> + </span> + </div> + </div> + </div> + </header> + + <%- if luci.sys.process.info("uid") == 0 and luci.sys.user.getuser("root") and not luci.sys.user.getpasswd("root") then -%> + <div class="container"> + <div class="alert-message warning"> + <h4><%:No password set!%></h4> + <%:There is no password set on this router. Please configure a root password to protect the web interface and enable SSH.%><br> + <a href="<%=pcdata(luci.dispatcher.build_url("admin/system/admin"))%>"><%:Go to password configuration...%></a> + </div> + </div> + <%- end -%> + + <div id="maincontent" class="container"> + <% if category then render_tabmenu(category, cattree) end %> |