2022-05-28 20:17:16 +08:00
< %#
2023-02-03 17:09:06 +08:00
ifit is a clean HTML5 theme for LuCI. It is based on luci-theme-material.
2022-05-28 20:17:16 +08:00
luci-theme-ifit
2023-02-03 17:09:06 +08:00
2022-05-28 20:17:16 +08:00
Have a bug? Please create an issue here on GitHub!
https://github.com/kenzok8/luci-theme-ifit/issues
luci-theme-material:
Copyright 2015 Lutty Yang
luci-theme-bootstrap:
Copyright 2008 Steven Barth < steven @ midlink . org >
Copyright 2008-2016 Jo-Philipp Wich < jow @ openwrt . org >
Copyright 2012 David Menting < david @ nut-bolt . nl >
MUI:
https://github.com/muicss/mui
Licensed to the public under the Apache License 2.0
-%>
< %
local ver = require "luci.version"
local sys = require "luci.sys"
local util = require "luci.util"
local http = require "luci.http"
local disp = require "luci.dispatcher"
local boardinfo = util.ubus("system", "board")
local boardinfo={}
boardinfo.hostname=sys.hostname()
local request = disp.context.path
local request2 = disp.context.request
local category = request[1]
local cattree = category and disp.node(category)
local leaf = request2[#request2]
local tree = disp.node()
local node = disp.context.dispatched
local categories = disp.node_childs(tree)
local c = tree
local i, r
-- tag all nodes leading to this page
for i, r in ipairs(request) do
if c.nodes and c.nodes[r] then
c = c.nodes[r]
c._menu_selected = true
end
end
-- send as HTML5
http.prepare_content("text/html")
local function nodeurl(prefix, name, query)
local u = url(prefix, name)
if query then
u = u .. http.build_querystring(query)
end
return pcdata(u)
end
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
write('< ul class = "tabs" > ')
end
local selected_node
local selected_name
local i, v
for i, v in ipairs(childs) do
local nnode = node.nodes[v]
if nnode._menu_selected then
selected_node = nnode
selected_name = v
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 selected_node then
render_tabmenu(prefix .. "/" .. selected_name, selected_node, level + 1)
end
end
end
local function render_submenu(prefix, node)
local childs = disp.node_childs(node)
if #childs > 0 then
write('< ul class = "slide-menu" > ')
for i, r in ipairs(childs) do
local nnode = node.nodes[r]
local title = pcdata(striptags(translate(nnode.title)))
write('< li > < a data-title = "%s" href = "%s" > %s< / a > < / li > ' %{
title,
nodeurl(prefix, r, nnode.query),
title
})
end
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 grandchildren = disp.node_childs(nnode)
if #grandchildren > 0 then
local title = pcdata(striptags(translate(nnode.title)))
write('< li class = "slide" > < a class = "menu" data-title = "%s" href = "#" > %s< / a > ' %{
pcdata(striptags(nnode.title)),
title
})
render_submenu(category .. "/" .. r, nnode)
write('< / li > ')
else
local title = pcdata(striptags(translate(nnode.title)))
write('< li > < a data-title = "%s" href = "%s" > %s< / a > < / li > ' %{
pcdata(striptags(nnode.title)),
nodeurl(category, r, nnode.query),
title
})
end
end
write('< / ul > ')
end
end
local function render_changes()
-- calculate the number of unsaved changes
if tree.nodes[category] and tree.nodes[category].ucidata then
local ucichanges = 0
for i, j in pairs(require("luci.model.uci").cursor():changes()) do
for k, l in pairs(j) do
for m, n in pairs(l) do
ucichanges = ucichanges + 1;
end
end
end
if ucichanges > 0 then
write('< a class = "uci_change_indicator label notice" href = "%s?redir=%s" > %s: %d< / a > ' %{
url(category, 'uci/changes'),
http.urlencode(http.formvalue('redir') or table.concat(disp.context.request, "/")),
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 >
< meta content = "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name = "viewport" / >
< meta name = "format-detection" content = "telephone=no, email=no" / >
< meta name = "apple-mobile-web-app-capable" content = "yes" >
< meta name = "mobile-web-app-capable" content = "yes" >
< meta name = "x5-fullscreen" content = "true" >
< meta name = "full-screen" content = "yes" >
< meta name = "x5-page-mode" content = "app" >
< meta name = "browsermode" content = "application" >
< meta name = "theme-color" content = "#0099CC" >
< meta name = "msapplication-tap-highlight" content = "no" >
< meta name = "msapplication-TileColor" content = "#0099CC" >
< meta name = "application-name" content = "<%=striptags( (boardinfo.hostname or " ? " ) ) % > - LuCI">
< meta name = "apple-mobile-web-app-title" content = "<%=striptags( (boardinfo.hostname or " ? " ) ) % > - LuCI">
< meta name = "msapplication-TileImage" content = "<%=media%>/logo.png" / >
< link rel = "icon" href = "<%=media%>/logo.png" sizes = "144x144" >
< link rel = "apple-touch-icon-precomposed" href = "<%=media%>/logo.png" sizes = "144x144" >
< link rel = "stylesheet" href = "<%=media%>/css/style.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 = "<%=media%>/js/jquery.min.js" > < / script >
< / head >
< body class = "lang_<%=luci.i18n.context.lang%> <%- if node then %><%= striptags( node.title ) %><%- end %> <% if luci.dispatcher.context.authsession then %>logged-in<% end %>" >
< header >
< div class = "container" >
< span class = "showSide" > < / span >
< a class = "brand" href = "#" > < %="OpenWrt"%>< / a >
< 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" > < span class = "mobile-hide" > < %:Auto Refresh%>< / span > < %:on%>< / span >
< span class = "label" id = "xhr_poll_status_off" style = "display:none" > < span class = "mobile-hide" > < %:Auto Refresh%>< / span > < %:off%>< / span >
< / span >
< / div >
< / div >
< / header >
< script >
var brandurl = '/luci-static/ifit/images/brand.png';
$.ajax({
url : brandurl,
type : 'HEAD',
error : function() {
var brand = $("body > header > div > a.brand");
brand.addClass('brandMark');
},
success : function() {
var brandContainer = $("header > .container > .brand");
brandContainer.addClass("brandWithBackground");
var brand = $("body > header > div > a.brand");
brand.html('');
}
});
< / script >
< div class = "main" >
< div style = "" class = "loading" > < span > < div class = "loading-img" > < / div > Loading...< / span > < / div >
< div class = "main-left" >
< % render_topmenu() %>
< / div >
< div class = "main-right" >
< div class = "darkMask" > < / div >
< div id = "maincontent" >
< div class = "container" >
< %- if luci.sys.process.info("uid") == 0 and luci.sys.user.getuser("root") and not luci.sys.user.getpasswd("root") then -%>
< div class = "alert-message warning" >
< h4 > < %:No password set!%>< / h4 >
< p > < %:There is no password set on this router. Please configure a root password to protect the web interface and enable SSH.%>< / p >
< div class = "right" > < a class = "btn" href = "<%=url(" admin / system / admin " ) % > ">< %:Go to password configuration...%>< / a > < / div >
< / div >
< %- end -%>
< noscript >
< div class = "alert-message warning" >
< h4 > < %:JavaScript required!%>< / h4 >
< p > < %:You must enable JavaScript in your browser or LuCI will not work properly.%>< / p >
< / div >
< / noscript >
< % if category then render_tabmenu(category, cattree) end %>