mirror of
				https://github.com/Ysurac/openmptcprouter-feeds.git
				synced 2025-03-09 15:40:03 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			282 lines
		
	
	
	
		
			11 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			282 lines
		
	
	
	
		
			11 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<%#
 | 
						|
	Argon is a clean HTML5 theme for LuCI. It is based on luci-theme-material Argon Template
 | 
						|
 | 
						|
	luci-theme-argon
 | 
						|
	Copyright 2020 Jerrykuku <jerrykuku@qq.com>
 | 
						|
 | 
						|
	Have a bug? Please create an issue here on GitHub!
 | 
						|
	https://github.com/jerrykuku/luci-theme-argon/issues
 | 
						|
 | 
						|
	luci-theme-material:
 | 
						|
	Copyright 2015 Lutty Yang <lutty@wcan.in>
 | 
						|
 | 
						|
	Argon Theme
 | 
						|
	https://demos.creative-tim.com/argon-dashboard/index.html
 | 
						|
 | 
						|
	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 node = disp.context.dispatched
 | 
						|
 | 
						|
	local fs = require "nixio.fs"
 | 
						|
	local nutil = require "nixio.util"
 | 
						|
	local uci = require 'luci.model.uci'.cursor()
 | 
						|
 | 
						|
	-- send as HTML5
 | 
						|
	http.prepare_content("text/html")
 | 
						|
 | 
						|
	math.randomseed(os.time())
 | 
						|
 | 
						|
	-- Custom settings
 | 
						|
	local mode = 'normal'
 | 
						|
	local dark_css = fs.readfile('/www/luci-static/argon/css/dark.css')
 | 
						|
	local bar_color = '#5e72e4'
 | 
						|
	local primary, dark_primary, blur_radius, blur_radius_dark, blur_opacity
 | 
						|
	if fs.access('/etc/config/argon') then
 | 
						|
		primary = uci:get_first('argon', 'global', 'primary')
 | 
						|
		dark_primary = uci:get_first('argon', 'global', 'dark_primary')
 | 
						|
		blur_radius = uci:get_first('argon', 'global', 'blur')
 | 
						|
		blur_radius_dark = uci:get_first('argon', 'global', 'blur_dark')
 | 
						|
		blur_opacity = uci:get_first('argon', 'global', 'transparency')
 | 
						|
		blur_opacity_dark = uci:get_first('argon', 'global', 'transparency_dark')
 | 
						|
		mode = uci:get_first('argon', 'global', 'mode')
 | 
						|
		bar_color = mode == 'dark' and dark_primary or primary
 | 
						|
	end
 | 
						|
 | 
						|
	-- Brand name
 | 
						|
	local brand_name = boardinfo.hostname or "?"
 | 
						|
-%>
 | 
						|
<!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="msapplication-tap-highlight" content="no">
 | 
						|
    <meta name="msapplication-TileColor" content="<%=bar_color%>">
 | 
						|
    <meta name="application-name" content="<%=striptags( (boardinfo.hostname or "?") ) %> - LuCI">
 | 
						|
    <meta name="apple-mobile-web-app-title" content="<%=striptags( (boardinfo.hostname or "?") ) %> - LuCI">
 | 
						|
    <link rel="apple-touch-icon" sizes="60x60" href="<%=media%>/icon/apple-icon-60x60.png">
 | 
						|
    <link rel="apple-touch-icon" sizes="72x72" href="<%=media%>/icon/apple-icon-72x72.png">
 | 
						|
    <link rel="apple-touch-icon" sizes="144x144" href="<%=media%>/icon/apple-icon-144x144.png">
 | 
						|
    <link rel="icon" type="image/png" sizes="192x192" href="<%=media%>/icon/android-icon-192x192.png">
 | 
						|
    <link rel="icon" type="image/png" sizes="32x32" href="<%=media%>/icon/favicon-32x32.png">
 | 
						|
    <link rel="icon" type="image/png" sizes="96x96" href="<%=media%>/icon/favicon-96x96.png">
 | 
						|
    <link rel="icon" type="image/png" sizes="16x16" href="<%=media%>/icon/favicon-16x16.png">
 | 
						|
    <link rel="manifest" href="<%=media%>/icon/manifest.json">
 | 
						|
    <meta name="msapplication-TileColor" content="<%=bar_color%>">
 | 
						|
    <meta name="msapplication-TileImage" content="<%=media%>/icon/ms-icon-144x144.png">
 | 
						|
    <meta name="theme-color" content="<%=bar_color%>">
 | 
						|
    <link rel="stylesheet" href="<%=media%>/css/cascade.css?v=<%=math.random(1,100000)%>">
 | 
						|
    <style title="text/css">
 | 
						|
        <% if mode == 'normal' then %>
 | 
						|
            @media (prefers-color-scheme: dark) {
 | 
						|
                <%=dark_css%>
 | 
						|
            }
 | 
						|
        <% elseif mode == 'dark' then %>
 | 
						|
            <%=dark_css%>
 | 
						|
        <% end -%>
 | 
						|
        <% if fs.access('/etc/config/argon') then %>
 | 
						|
        :root {
 | 
						|
            --primary: <%=primary%>;
 | 
						|
            --dark-primary: <%=dark_primary%>;
 | 
						|
            --blur-radius:<%=blur_radius%>px;
 | 
						|
            --blur-opacity:<%=blur_opacity%>;
 | 
						|
            --blur-radius-dark:<%=blur_radius_dark%>px;
 | 
						|
            --blur-opacity-dark:<%=blur_opacity_dark%>;
 | 
						|
        }
 | 
						|
        <% end -%>
 | 
						|
    </style>
 | 
						|
	<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="<%=media%>/js/polyfill.min.js"></script>
 | 
						|
	<script src="<%=url('admin/translations', luci.i18n.context.lang)%>?v=2.2.4"></script>
 | 
						|
	<script src="<%=resource%>/cbi.js?v=2.2.4"></script>
 | 
						|
	<script src="<%=resource%>/luci.js?v=2.2.4"></script>
 | 
						|
	<script src="<%=media%>/js/jquery.min.js?v=2.2.4"></script>
 | 
						|
		<script type="text/javascript">//<![CDATA[
 | 
						|
	function EF() { return L.dom.create.apply(L.dom, arguments) }
 | 
						|
		(function() {
 | 
						|
			function get_children(node) {
 | 
						|
				var children = [];
 | 
						|
				for (var k in node.children) {
 | 
						|
					if (!node.children.hasOwnProperty(k))
 | 
						|
						continue;
 | 
						|
					if (!node.children[k].satisfied)
 | 
						|
						continue;
 | 
						|
					if (!node.children[k].hasOwnProperty('title'))
 | 
						|
						continue;
 | 
						|
					children.push(Object.assign(node.children[k], { name: k }));
 | 
						|
				}
 | 
						|
				return children.sort(function(a, b) {
 | 
						|
					return ((a.order || 1000) - (b.order || 1000));
 | 
						|
				});
 | 
						|
			}
 | 
						|
			function render_mainmenu(tree, url, level) {
 | 
						|
				var l = (level || 0) + 1,
 | 
						|
				    ul = EF('ul', { 'class': level ? 'slide-menu' : 'nav' }),
 | 
						|
				    children = get_children(tree);
 | 
						|
				if (children.length == 0 || l > 2)
 | 
						|
					return EF([]);
 | 
						|
				for (var i = 0; i < children.length; i++) {
 | 
						|
					var submenu = render_mainmenu(children[i], url + '/' + children[i].name, l),
 | 
						|
					    hasChildren = submenu.children.length;
 | 
						|
					ul.appendChild(EF('li', { 'class': hasChildren ? 'slide' : null }, [
 | 
						|
						EF('a', {
 | 
						|
							'href': hasChildren ? '#' : L.url(url, children[i].name),
 | 
						|
							'class': hasChildren ? 'menu' : null,
 | 
						|
							'data-title': hasChildren ?  children[i].title.replace(" ", "_") :  children[i].title.replace(" ", "_"),
 | 
						|
						}, [ _(children[i].title) ]),
 | 
						|
						submenu
 | 
						|
					]));
 | 
						|
				}
 | 
						|
				if (l == 1) {
 | 
						|
					var container = document.querySelector('#mainmenu');
 | 
						|
					container.appendChild(ul);
 | 
						|
					container.style.display = '';
 | 
						|
				}
 | 
						|
				return ul;
 | 
						|
			}
 | 
						|
			function render_modemenu(tree) {
 | 
						|
				var ul = document.querySelector('#modemenu'),
 | 
						|
				    children = get_children(tree);
 | 
						|
				for (var i = 0; i < children.length; i++) {
 | 
						|
					var isActive = (L.env.requestpath.length ? children[i].name == L.env.requestpath[0] : i == 0);
 | 
						|
					ul.appendChild(EF('li', {}, [
 | 
						|
						EF('a', {
 | 
						|
							'href': L.url(children[i].name),
 | 
						|
							'class': isActive ? 'active' : null
 | 
						|
						}, [ _(children[i].title) ])
 | 
						|
					]));
 | 
						|
					if (isActive)
 | 
						|
						render_mainmenu(children[i], children[i].name);
 | 
						|
				}
 | 
						|
				if (ul.children.length > 1)
 | 
						|
					ul.style.display = '';
 | 
						|
			}
 | 
						|
			function render_tabmenu(tree, url, level) {
 | 
						|
				var container = document.querySelector('#tabmenu'),
 | 
						|
				    l = (level || 0) + 1,
 | 
						|
				    ul = EF('ul', { 'class': 'tabs' }),
 | 
						|
				    children = get_children(tree),
 | 
						|
				    activeNode = null;
 | 
						|
				if (children.length == 0)
 | 
						|
					return EF([]);
 | 
						|
				for (var i = 0; i < children.length; i++) {
 | 
						|
					var isActive = (L.env.dispatchpath[l + 2] == children[i].name),
 | 
						|
					    activeClass = isActive ? ' active' : '',
 | 
						|
					    className = 'tabmenu-item-%s %s'.format(children[i].name, activeClass);
 | 
						|
					ul.appendChild(EF('li', { 'class': className }, [
 | 
						|
						EF('a', { 'href': L.url(url, children[i].name) }, [ _(children[i].title) ] )
 | 
						|
					]));
 | 
						|
					if (isActive)
 | 
						|
						activeNode = children[i];
 | 
						|
				}
 | 
						|
				container.appendChild(ul);
 | 
						|
				container.style.display = '';
 | 
						|
				if (activeNode)
 | 
						|
					container.appendChild(render_tabmenu(activeNode, url + '/' + activeNode.name, l));
 | 
						|
				return ul;
 | 
						|
			}
 | 
						|
			document.addEventListener('luci-loaded', function(ev) {
 | 
						|
				var tree = <%= luci.http.write_json(luci.dispatcher.menu_json() or {}) %>,
 | 
						|
				    node = tree,
 | 
						|
				    url = '';
 | 
						|
				render_modemenu(tree);
 | 
						|
				if (L.env.dispatchpath.length >= 3) {
 | 
						|
					for (var i = 0; i < 3 && node; i++) {
 | 
						|
						node = node.children[L.env.dispatchpath[i]];
 | 
						|
						url = url + (url ? '/' : '') + L.env.dispatchpath[i];
 | 
						|
					}
 | 
						|
					if (node)
 | 
						|
						render_tabmenu(node, url);
 | 
						|
				}
 | 
						|
			});
 | 
						|
		})();
 | 
						|
	//]]></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 %>"
 | 
						|
	data-page="<%= table.concat(disp.context.requestpath, "-") %>">
 | 
						|
 | 
						|
	<div class="main">
 | 
						|
		<div class="main-left" id="mainmenu" style="display:none">
 | 
						|
			<div class="sidenav-header d-flex align-items-center">
 | 
						|
				<a class="brand" href="#"><%=brand_name%></a>
 | 
						|
				<div class="ml-auto">
 | 
						|
					<!-- Sidenav toggler -->
 | 
						|
					<div class="sidenav-toggler d-none d-xl-block active" data-action="sidenav-unpin"
 | 
						|
						data-target="#sidenav-main">
 | 
						|
						<div class="sidenav-toggler-inner">
 | 
						|
							<i class="sidenav-toggler-line"></i>
 | 
						|
							<i class="sidenav-toggler-line"></i>
 | 
						|
							<i class="sidenav-toggler-line"></i>
 | 
						|
						</div>
 | 
						|
					</div>
 | 
						|
				</div>
 | 
						|
			</div>
 | 
						|
		</div>
 | 
						|
		<div class="main-right">
 | 
						|
			<header class="bg-primary">
 | 
						|
				<div class="fill">
 | 
						|
					<div class="container">
 | 
						|
						<a class="showSide"></a>
 | 
						|
						<a class="brand" href="#"><%=brand_name%></a>
 | 
						|
						<div class="status" id="indicators">
 | 
						|
						<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>
 | 
						|
				</div>
 | 
						|
			</header>
 | 
						|
			<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 error">
 | 
						|
						<h4><%:No password set!%></h4>
 | 
						|
						<p><%:There is no password set on this router. Please configure a root password to protect the web interface.%>
 | 
						|
						</p>
 | 
						|
						<% if disp.lookup("admin/system/admin") then %>
 | 
						|
						<div class="right"><a class="btn"
 | 
						|
								href="<%=url("admin/system/admin")%>"><%:Go to password configuration...%></a></div>
 | 
						|
						<% end %>
 | 
						|
					</div>
 | 
						|
					<%- end -%>
 | 
						|
 | 
						|
					<noscript>
 | 
						|
						<div class="alert-message error">
 | 
						|
							<h4><%:JavaScript required!%></h4>
 | 
						|
							<p><%:You must enable JavaScript in your browser or LuCI will not work properly.%></p>
 | 
						|
						</div>
 | 
						|
					</noscript>
 | 
						|
 | 
						|
					<div id="tabmenu" style="display:none"></div>
 |