diff options
author | Rosy Song <rosysong@rosinson.com> | 2018-10-25 11:29:18 +0800 |
---|---|---|
committer | Rosy Song <rosysong@rosinson.com> | 2018-10-29 20:09:01 +0800 |
commit | cc957467785264062a1d2f73c3b607bd0b936744 (patch) | |
tree | c24ec944b9a74dd24c93dea985899ad3811ce20c /themes/luci-theme-rosy/luasrc/view | |
parent | 35b543e270428357d22ede5ceff39653b3371a1b (diff) |
theme: add initial commit for rosy theme
Signed-off-by: Rosy Song <rosysong@rosinson.com>
Signed-off-by: Yan Lan Shen <yanlan.shen@rosinson.com>
Diffstat (limited to 'themes/luci-theme-rosy/luasrc/view')
-rwxr-xr-x | themes/luci-theme-rosy/luasrc/view/themes/rosy/footer.htm | 50 | ||||
-rw-r--r-- | themes/luci-theme-rosy/luasrc/view/themes/rosy/header.htm | 304 |
2 files changed, 354 insertions, 0 deletions
diff --git a/themes/luci-theme-rosy/luasrc/view/themes/rosy/footer.htm b/themes/luci-theme-rosy/luasrc/view/themes/rosy/footer.htm new file mode 100755 index 000000000..3795d37cb --- /dev/null +++ b/themes/luci-theme-rosy/luasrc/view/themes/rosy/footer.htm @@ -0,0 +1,50 @@ +<%# + Rosy is a theme for LuCI. It is based on luci-theme-bootstrap + luci-theme-rosy + Copyright 2018 Rosy Song <rosysong@rosinson.com> + Copyright 2018 Yan Lan Shen <yanlan.shen@rosinson.com> + + Have a bug? Please create an issue here on GitHub! + https://github.com/rosywrt/luci-theme-rosy/issues + + luci-theme-bootstrap: + Copyright 2008 Steven Barth <steven@midlink.org> + Copyright 2008 Jo-Philipp Wich <jow@openwrt.org> + Copyright 2012 David Menting <david@nut-bolt.nl> + + Licensed to the public under the Apache License 2.0 + +-%> + +<% + local ver = require "luci.version" + local disp = require "luci.dispatcher" + local request = disp.context.path + local category = request[1] + local tree = disp.node() + local categories = disp.node_childs(tree) +%> + +</div> +<footer class="mobile-hide"> + <a href="https://github.com/openwrt/luci">Powered by<%= ver.luciname %> (<%= ver.luciversion %>)</a> / + <%= ver.distversion %> + <% if #categories > 1 then %> + <ul class="breadcrumb pull-right" id="modemenu"> + <% for i, r in ipairs(categories) do %> + <li<% if request[1]==r then %> class="active"<%end%>><a href="<%=controller%>/<%=r%>/"><%=striptags(translate(tree.nodes[r].title))%></a> <span class="divider">|</span></li> + <% end %> + </ul> + <% end %> +</footer> +</div> +</div> + +<script> + var luciLocation = <%= luci.http.write_json(luci.dispatcher.context.path) %>; +</script> +<script src="<%=media%>/js/jquery.min.js?v=git-18.247.71242-9541751"></script> +<script src="<%=media%>/js/script.js?v=git-18.247.71242-9541751"></script> +</body> + +</html>
\ No newline at end of file diff --git a/themes/luci-theme-rosy/luasrc/view/themes/rosy/header.htm b/themes/luci-theme-rosy/luasrc/view/themes/rosy/header.htm new file mode 100644 index 000000000..62a34c04b --- /dev/null +++ b/themes/luci-theme-rosy/luasrc/view/themes/rosy/header.htm @@ -0,0 +1,304 @@ +<%# + Rosy is a theme for LuCI. It is based on luci-theme-bootstrap + luci-theme-rosy + Copyright 2018 Rosy Song <rosysong@rosinson.com> + Copyright 2018 Yan Lan Shen <yanlan.shen@rosinson.com> + + Have a bug? Please create an issue here on GitHub! + https://github.com/rosywrt/luci-theme-rosy/issues + + luci-theme-bootstrap: + Copyright 2008 Steven Barth <steven@midlink.org> + Copyright 2008 Jo-Philipp Wich <jow@openwrt.org> + Copyright 2012 David Menting <david@nut-bolt.nl> + + Licensed to the public under the Apache License 2.0 + +-%> + +<% + 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 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>' %{ + title, + title + }) + + render_submenu(category .. "/" .. r, nnode) + write('</li>') + end + end + + write('</ul>') + end + end + + local function render_logout() + local childs = disp.node_childs(cattree) + if #childs > 0 then + + for i, r in ipairs(childs) do + local nnode = cattree.nodes[r] + local grandchildren = disp.node_childs(nnode) + + if #grandchildren > 0 then + + else + local title = pcdata(striptags(translate(nnode.title))) + + write('<span class="label logout"><a data-title="%s" href="%s">%s</a></span>' %{ + title, + nodeurl(category, r, nnode.query), + title + }) + end + end + + 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"><span class="mobile-hide">%s:</span> %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%>/cascade.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%>/cbi.js"></script> + <script src="<%=resource%>/xhr.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="fill"> + <div class="container"> + <span class="showSide"></span> + <a class="brand" href="#"><%=boardinfo.hostname or "?"%></a> + <div class="btn-con 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> + <% render_logout() %> + </div> + </div> + </div> + </header> + <div class="main"> + <div style="" class="loading"><span> + <div class="loading-img"> + <img src="<%=media%>/loading.svg"> + </div>Loading... + </span></div> + <div class="main-left"> + <div class="nav-container"> + <a class="brand" href="#"> + <%=boardinfo.hostname or "?"%></a> + <div class="navbar-container"> + <% render_topmenu() %> + </div> + </div> + </div> + <div class="main-right"> + <div id="maincontent"> + <div class="container"> + <div class="logoImg"> + <img src="<%=media%>/logo.png" alt="Rosy"> + <a class="brand" href="#"><%=boardinfo.hostname or "?"%></a> + </div> + <%- 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><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 %> |