mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-10-30 17:25:13 +08:00
💋 Sync 2026-10-04 04:16:09
This commit is contained in:
1 parent
f6b2df73ec
commit
f62992fd80
745 files changed
+212416
-1173
No files matched your search
@@ -0,0 +1,36 @@
|
||||
<%#
|
||||
Luxe is a clean HTML5 theme for LuCI. It is based on luci-theme-bootstrap and MUI
|
||||
|
||||
luci-theme-material
|
||||
Copyright 2015 Lutty Yang <lutty@wcan.in>
|
||||
|
||||
luci-theme-luxe
|
||||
Copyright 2026 de-quenx | xidz_x
|
||||
|
||||
Have a bug? Please create an issue here on GitHub!
|
||||
https://github.com/de-quenx/luci-theme-luxe/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>
|
||||
|
||||
MUI:
|
||||
https://github.com/muicss/mui
|
||||
|
||||
Licensed to the public under the Apache License 2.0
|
||||
-%>
|
||||
<% local ver = require "luci.version" %>
|
||||
</div>
|
||||
<footer class="mobile-hide">
|
||||
<a href="https://github.com/openwrt/luci" target="_blank" rel="noreferrer">Powered by <%= ver.luciname %> (<%= ver.luciversion %>)</a> /
|
||||
<%= ver.distname %> <%= ver.distversion %> (<%= ver.distrevision %>)
|
||||
</footer>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>L.require('menu-luxe')</script>
|
||||
<div id="tempcpu"></div>
|
||||
<div id="cpuusage"></div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,35 @@
|
||||
{#
|
||||
Luxe is a clean HTML5 theme for LuCI. It is based on luci-theme-bootstrap and MUI
|
||||
|
||||
luci-theme-material
|
||||
Copyright 2015 Lutty Yang <lutty@wcan.in>
|
||||
|
||||
luci-theme-luxe
|
||||
Copyright 2026 de-quenx | xidz_x
|
||||
|
||||
Have a bug? Please create an issue here on GitHub!
|
||||
https://github.com/de-quenx/luci-theme-luxe/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>
|
||||
|
||||
MUI:
|
||||
https://github.com/muicss/mui
|
||||
|
||||
Licensed to the public under the Apache License 2.0
|
||||
-#}
|
||||
</div>
|
||||
<footer class="mobile-hide">
|
||||
<a href="https://github.com/openwrt/luci" target="_blank" rel="noreferrer">Powered by {{ version.luciname }} ({{ version.luciversion }})</a> /
|
||||
{{ version.distname }} {{ version.distversion }} ({{ version.distrevision }})
|
||||
</footer>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>L.require('menu-luxe')</script>
|
||||
<div id="tempcpu"></div>
|
||||
<div id="cpuusage"></div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,193 @@
|
||||
<%#
|
||||
Luxe is a clean HTML5 theme for LuCI. It is based on luci-theme-bootstrap and MUI
|
||||
|
||||
luci-theme-material
|
||||
Copyright 2015-2017 Lutty Yang <lutty@wcan.in>
|
||||
|
||||
luci-theme-luxe
|
||||
Copyright 2026 de-quenx | xidz_x
|
||||
|
||||
Have a bug? Please create an issue here on GitHub!
|
||||
https://github.com/de-quenx/luci-theme-luxe/issues
|
||||
|
||||
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 sys = require "luci.sys"
|
||||
local util = require "luci.util"
|
||||
local http = require "luci.http"
|
||||
local disp = require "luci.dispatcher"
|
||||
local ver = require "luci.version"
|
||||
|
||||
local boardinfo = util.ubus("system", "board") or { }
|
||||
local hostname = striptags(boardinfo.hostname or "?")
|
||||
|
||||
local node = disp.context.dispatched
|
||||
local path = table.concat(disp.context.path, "-")
|
||||
|
||||
http.prepare_content("text/html; charset=UTF-8")
|
||||
-%>
|
||||
<!DOCTYPE html>
|
||||
<html lang="<%=luci.i18n.context.lang%>">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport"/>
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<meta name="mobile-web-app-capable" content="yes">
|
||||
<meta name="theme-color" content="#24315e">
|
||||
<meta name="msapplication-tap-highlight" content="no">
|
||||
<meta name="msapplication-TileColor" content="#24315e">
|
||||
<meta name="application-name" content="<%= hostname %> - LuCI">
|
||||
<meta name="apple-mobile-web-app-title" content="<%= hostname %> - LuCI">
|
||||
<link rel="stylesheet" href="<%=media%>/css/cascade.css?v=26.167.08541~ffc779e">
|
||||
<link rel="icon" href="<%=media%>/luxe.png" sizes="64x64">
|
||||
<link rel="icon" href="<%=media%>/luxe.svg" sizes="any">
|
||||
<% if node and node.css then %>
|
||||
<link rel="stylesheet" href="<%=resource%>/<%=node.css%>">
|
||||
<% end %>
|
||||
<script src="<%=url('admin/translations', luci.i18n.context.lang)%>"></script>
|
||||
<script src="<%=resource%>/cbi.js?v=26.167.08541~ffc779e"></script>
|
||||
<title><%=hostname%><% if node and node.title then %> - <%=striptags(node.title)%><% end %> - LuCI</title>
|
||||
<% if css then %>
|
||||
<style title="text/css">
|
||||
<%= css %>
|
||||
</style>
|
||||
<% end %>
|
||||
</head>
|
||||
<body class="lang_<%=luci.i18n.context.lang%> <% if luci.dispatcher.context.authsession then %>logged-in<% end %> <% if path ~= "" then %>node-<%= path %><% else %>node-main-login<% end %>" data-page="<%= pcdata(path) %>">
|
||||
<script>
|
||||
document.body.setAttribute('data-theme', localStorage.getItem('luxe-theme') || 'normal');
|
||||
let mMode = localStorage.getItem('luxe-mode') || 'normal';
|
||||
if(mMode !== 'normal') document.body.setAttribute('data-force-scheme', mMode);
|
||||
let flt = localStorage.getItem('luxe-floating') || '0';
|
||||
document.body.setAttribute('data-enable-navbar', flt);
|
||||
document.body.setAttribute('data-navbar-enabled', flt);
|
||||
if(localStorage.getItem('luxe-slider') === '1') document.body.setAttribute('data-slider', 'true');
|
||||
document.body.setAttribute('data-icon', localStorage.getItem('luxe-icon') || '5');
|
||||
document.body.setAttribute('data-autohide', localStorage.getItem('luxe-autohide') || '0');
|
||||
document.body.setAttribute('data-show-hostname', localStorage.getItem('luxe-hostname') || '0');
|
||||
</script>
|
||||
<header>
|
||||
<div class="fill">
|
||||
<div class="container" style="display: flex; align-items: center; justify-content: space-between; width: 100%;">
|
||||
<div style="display:flex;align-items:center;">
|
||||
<span class="showSide"></span>
|
||||
<a class="brand hostname" href="#"><%= hostname %></a>
|
||||
</div>
|
||||
<div id="luxe-settings-wrapper" class="cfg-wrap">
|
||||
<span id="settings-toggle" class="cfg-tgl">
|
||||
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"></circle><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"></path></svg>
|
||||
</span>
|
||||
<div id="luxe-settings-menu" class="cfg-menu">
|
||||
<div class="cfg-row" id="row-hostname">
|
||||
<span class="cfg-lbl">Tampilkan Hostname</span>
|
||||
<label class="luxe-switch"><input type="checkbox" id="set-hostname"><span class="luxe-slider"></span></label>
|
||||
</div>
|
||||
<div class="cfg-row">
|
||||
<span class="cfg-lbl">Floating Navbar</span>
|
||||
<label class="luxe-switch"><input type="checkbox" id="set-floating"><span class="luxe-slider"></span></label>
|
||||
</div>
|
||||
<div class="cfg-row" id="row-autohide-navbar">
|
||||
<span class="cfg-lbl">Sembunyi Otomatis Navbar</span>
|
||||
<label class="luxe-switch"><input type="checkbox" id="set-autohide-navbar"><span class="luxe-slider"></span></label>
|
||||
</div>
|
||||
<div class="cfg-row" id="row-slider-navbar">
|
||||
<span class="cfg-lbl">Slider Navbar</span>
|
||||
<label class="luxe-switch"><input type="checkbox" id="set-slider-navbar"><span class="luxe-slider"></span></label>
|
||||
</div>
|
||||
<div class="cfg-blk" id="row-icon-count">
|
||||
<span class="cfg-lbl-blk">Jumlah Icon</span>
|
||||
<div class="style-scroll" style="justify-content: center;">
|
||||
<div class="icon-card" data-icon="4">4</div><div class="icon-card active" data-icon="5">5</div><div class="icon-card" data-icon="6">6</div><div class="icon-card" data-icon="7">7</div><div class="icon-card" data-icon="8">8</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cfg-blk">
|
||||
<span class="cfg-lbl-blk">Gaya / Style</span>
|
||||
<div class="style-scroll">
|
||||
<div class="style-card active" data-style="normal">LuxeOs</div><div class="style-card" data-style="glass-liquid">Glass Liquid</div><div class="style-card" data-style="glass-luxe">Glass Luxe</div><div class="style-card" data-style="glass-crystal">Glass Crystal</div><div class="style-card" data-style="glass-dark">Glass Dark</div><div class="style-card" data-style="neo">Neobrutalism</div><div class="style-card" data-style="neox">Neomorphism</div><div class="style-card" data-style="neon">Neon</div><div class="style-card" data-style="rgb">Rgb</div><div class="style-card" data-style="glaze">Glaze</div><div class="style-card" data-style="onyx">Onyx</div><div class="style-card" data-style="liquid-metal">Liquid Neo</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="mode-selection-container" style="display:none; margin-bottom:4px;">
|
||||
<span class="cfg-lbl-blk">Mode Tema</span>
|
||||
<div style="display:flex; gap:8px;">
|
||||
<div class="mode-card active" data-mode="normal">Auto</div><div class="mode-card" data-mode="light">Light</div><div class="mode-card" data-mode="dark">Dark</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="display:flex;align-items:center; justify-content:flex-end;">
|
||||
<span class="status" id="indicators"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div id="floating-navbar" class="navbar">
|
||||
<div class="nav-arrow" id="prevArrow">❮</div>
|
||||
<div class="floating-icons-wrapper" id="iconWrapper">
|
||||
<a href='/cgi-bin/luci/admin/status/overview'><img src="<%=media%>/navbar/home.png"></a>
|
||||
<a href='/cgi-bin/luci/admin/network/network'><img src="<%=media%>/navbar/interface.png"></a>
|
||||
<a href='/cgi-bin/luci/admin/system/tinyfm'><img src="<%=media%>/navbar/tinyfm.png"></a>
|
||||
<a href='/cgi-bin/luci/admin/services/ttyd'><img src="<%=media%>/navbar/terminal.png"></a>
|
||||
<a href='/cgi-bin/luci/admin/services/openclash'><img src="<%=media%>/navbar/openclash.png"></a>
|
||||
<a href='/cgi-bin/luci/admin/status/netmonitor'><img src="<%=media%>/navbar/netmon.png"></a>
|
||||
<a href='/cgi-bin/luci/admin/services/nikki'><img src="<%=media%>/navbar/nikki.png"></a>
|
||||
<a href='/cgi-bin/luci/admin/modem/andromodem'><img src="<%=media%>/navbar/droidnet.png"></a>
|
||||
<a href='/cgi-bin/luci/admin/services/fusiontunx'><img src="<%=media%>/navbar/insomclash.png"></a>
|
||||
<a href='/cgi-bin/luci/admin/modem/3ginfo-lite'><img src="<%=media%>/navbar/modem.png"></a>
|
||||
<a href='/cgi-bin/luci/admin/services/passwall'><img src="<%=media%>/navbar/passwall.png"></a>
|
||||
<a href='/cgi-bin/luci/admin/modem/modemdata'><img src="<%=media%>/navbar/mikhom.png"></a>
|
||||
<a href='/cgi-bin/luci/admin/services/AdGuardHome'><img src="<%=media%>/navbar/adguard.png"></a>
|
||||
<a href='/cgi-bin/luci/admin/vpn/tailscale'><img src="<%=media%>/navbar/tailscale.png"></a>
|
||||
<a href='/cgi-bin/luci/admin/services/neko'><img src="<%=media%>/navbar/neko.png"></a>
|
||||
<a href='/cgi-bin/luci/admin/modem/rakitanmanager'><img src="<%=media%>/navbar/rakitanmanager.png"></a>
|
||||
<a href='/cgi-bin/luci/admin/modem/luci-app-sms-tool-js/sendat'><img src="<%=media%>/navbar/at.png"></a>
|
||||
</div>
|
||||
<div class="nav-arrow" id="nextArrow">❯</div>
|
||||
</div>
|
||||
|
||||
<div class="main">
|
||||
<div style="" class="loading"><span><div class="loader"></div><%:Collecting data...%></span></div>
|
||||
<div class="main-left" id="mainmenu" style="display:none"></div>
|
||||
<div class="main-right">
|
||||
<div class="modemenu-buttons" style="display:none"><ul id="modemenu"></ul></div>
|
||||
<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") and path ~= "admin-system-admin-password" 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.%></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 -%>
|
||||
|
||||
<% if boardinfo and boardinfo.rootfs_type == "initramfs" then %>
|
||||
<div class="alert-message warning">
|
||||
<h4><%:System running in recovery (initramfs) mode.%></h4>
|
||||
<p><%:No changes to settings will be stored and are lost after rebooting. This mode should only be used to install a firmware upgrade%></p>
|
||||
<% if disp.lookup("admin/system/flash") then %>
|
||||
<div class="right"><a class="btn" href="<%=url("admin/system/flash")%>"><%:Go to firmware upgrade...%></a></div>
|
||||
<% end %>
|
||||
</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>
|
||||
|
||||
<div id="tabmenu" style="display:none"></div>
|
||||
@@ -0,0 +1,186 @@
|
||||
{#
|
||||
Luxe is a clean HTML5 theme for LuCI. It is based on luci-theme-bootstrap and MUI
|
||||
|
||||
luci-theme-material
|
||||
Copyright 2015-2017 Lutty Yang <lutty@wcan.in>
|
||||
|
||||
luci-theme-luxe
|
||||
Copyright 2026 de-quenx | xidz_x
|
||||
|
||||
Have a bug? Please create an issue here on GitHub!
|
||||
https://github.com/de-quenx/luci-theme-luxe/issues
|
||||
|
||||
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
|
||||
-#}
|
||||
|
||||
{%
|
||||
import { getuid, getspnam } from 'luci.core';
|
||||
|
||||
const boardinfo = ubus.call('system', 'board');
|
||||
const hostname = (boardinfo && boardinfo.hostname) ? striptags(boardinfo.hostname) : '?';
|
||||
|
||||
http.prepare_content('text/html; charset=UTF-8');
|
||||
-%}
|
||||
<!DOCTYPE html>
|
||||
<html lang="{{ dispatcher.lang }}">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport"/>
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<meta name="mobile-web-app-capable" content="yes">
|
||||
<meta name="theme-color" content="#24315e">
|
||||
<meta name="msapplication-tap-highlight" content="no">
|
||||
<meta name="msapplication-TileColor" content="#24315e">
|
||||
<meta name="application-name" content="{{ hostname }} - LuCI">
|
||||
<meta name="apple-mobile-web-app-title" content="{{ hostname }} - LuCI">
|
||||
<link rel="stylesheet" href="{{ media }}/css/cascade.css?v=26.167.08541~ffc779e">
|
||||
<link rel="icon" href="{{ media }}/luxe.png" sizes="64x64">
|
||||
<link rel="icon" href="{{ media }}/luxe.svg" sizes="any">
|
||||
{% if (node && node.css): %}
|
||||
<link rel="stylesheet" href="{{ resource }}/{{ node.css }}">
|
||||
{% endif %}
|
||||
<script src="{{ dispatcher.build_url('admin/translations', dispatcher.lang) }}"></script>
|
||||
<script src="{{ resource }}/cbi.js?v=26.167.08541~ffc779e"></script>
|
||||
<title>{{ hostname }}{{ (node && node.title) ? ' - ' + striptags(node.title) : '' }} - LuCI</title>
|
||||
{% if (css): %}
|
||||
<style title="text/css">
|
||||
{{ css }}
|
||||
</style>
|
||||
{% endif %}
|
||||
</head>
|
||||
<body class="lang_{{ dispatcher.lang }} {{ ctx.authsession ? 'logged-in' : '' }} {{ length(ctx.path) ? 'node-' + join('-', ctx.path) : 'node-main-login' }}" data-page="{{ entityencode(join('-', ctx.path), true) }}">
|
||||
<script>
|
||||
document.body.setAttribute('data-theme', localStorage.getItem('luxe-theme') || 'normal');
|
||||
let mMode = localStorage.getItem('luxe-mode') || 'normal';
|
||||
if(mMode !== 'normal') document.body.setAttribute('data-force-scheme', mMode);
|
||||
let flt = localStorage.getItem('luxe-floating') || '0';
|
||||
document.body.setAttribute('data-enable-navbar', flt);
|
||||
document.body.setAttribute('data-navbar-enabled', flt);
|
||||
if(localStorage.getItem('luxe-slider') === '1') document.body.setAttribute('data-slider', 'true');
|
||||
document.body.setAttribute('data-icon', localStorage.getItem('luxe-icon') || '5');
|
||||
document.body.setAttribute('data-autohide', localStorage.getItem('luxe-autohide') || '0');
|
||||
document.body.setAttribute('data-show-hostname', localStorage.getItem('luxe-hostname') || '0');
|
||||
</script>
|
||||
<header>
|
||||
<div class="fill">
|
||||
<div class="container" style="display: flex; align-items: center; justify-content: space-between; width: 100%;">
|
||||
<div style="display:flex;align-items:center;">
|
||||
<span class="showSide"></span>
|
||||
<a class="brand hostname" href="#">{{ hostname }}</a>
|
||||
</div>
|
||||
<div id="luxe-settings-wrapper" class="cfg-wrap">
|
||||
<span id="settings-toggle" class="cfg-tgl">
|
||||
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"></circle><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"></path></svg>
|
||||
</span>
|
||||
<div id="luxe-settings-menu" class="cfg-menu">
|
||||
<div class="cfg-row" id="row-hostname">
|
||||
<span class="cfg-lbl">Tampilkan Hostname</span>
|
||||
<label class="luxe-switch"><input type="checkbox" id="set-hostname"><span class="luxe-slider"></span></label>
|
||||
</div>
|
||||
<div class="cfg-row">
|
||||
<span class="cfg-lbl">Floating Navbar</span>
|
||||
<label class="luxe-switch"><input type="checkbox" id="set-floating"><span class="luxe-slider"></span></label>
|
||||
</div>
|
||||
<div class="cfg-row" id="row-autohide-navbar">
|
||||
<span class="cfg-lbl">Sembunyi Otomatis Navbar</span>
|
||||
<label class="luxe-switch"><input type="checkbox" id="set-autohide-navbar"><span class="luxe-slider"></span></label>
|
||||
</div>
|
||||
<div class="cfg-row" id="row-slider-navbar">
|
||||
<span class="cfg-lbl">Slider Navbar</span>
|
||||
<label class="luxe-switch"><input type="checkbox" id="set-slider-navbar"><span class="luxe-slider"></span></label>
|
||||
</div>
|
||||
<div class="cfg-blk" id="row-icon-count">
|
||||
<span class="cfg-lbl-blk">Jumlah Icon</span>
|
||||
<div class="style-scroll" style="justify-content: center;">
|
||||
<div class="icon-card" data-icon="4">4</div><div class="icon-card active" data-icon="5">5</div><div class="icon-card" data-icon="6">6</div><div class="icon-card" data-icon="7">7</div><div class="icon-card" data-icon="8">8</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cfg-blk">
|
||||
<span class="cfg-lbl-blk">Gaya / Style</span>
|
||||
<div class="style-scroll">
|
||||
<div class="style-card active" data-style="normal">LuxeOs</div><div class="style-card" data-style="glass-liquid">Glass Liquid</div><div class="style-card" data-style="glass-luxe">Glass Luxe</div><div class="style-card" data-style="glass-crystal">Glass Crystal</div><div class="style-card" data-style="glass-dark">Glass Dark</div><div class="style-card" data-style="neo">Neobrutalism</div><div class="style-card" data-style="neox">Neomorphism</div><div class="style-card" data-style="neon">Neon</div><div class="style-card" data-style="rgb">Rgb</div><div class="style-card" data-style="glaze">Glaze</div><div class="style-card" data-style="onyx">Onyx</div><div class="style-card" data-style="liquid-metal">Liquid Neo</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="mode-selection-container" style="display:none; margin-bottom:4px;">
|
||||
<span class="cfg-lbl-blk">Mode Tema</span>
|
||||
<div style="display:flex; gap:8px;">
|
||||
<div class="mode-card active" data-mode="normal">Auto</div><div class="mode-card" data-mode="light">Light</div><div class="mode-card" data-mode="dark">Dark</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="display:flex;align-items:center; justify-content:flex-end;">
|
||||
<span class="status" id="indicators"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div id="floating-navbar" class="navbar">
|
||||
<div class="nav-arrow" id="prevArrow">❮</div>
|
||||
<div class="floating-icons-wrapper" id="iconWrapper">
|
||||
<a href='/cgi-bin/luci/admin/status/overview'><img src="{{ media }}/navbar/home.png"></a>
|
||||
<a href='/cgi-bin/luci/admin/network/network'><img src="{{ media }}/navbar/interface.png"></a>
|
||||
<a href='/cgi-bin/luci/admin/system/tinyfm'><img src="{{ media }}/navbar/tinyfm.png"></a>
|
||||
<a href='/cgi-bin/luci/admin/services/ttyd'><img src="{{ media }}/navbar/terminal.png"></a>
|
||||
<a href='/cgi-bin/luci/admin/services/openclash'><img src="{{ media }}/navbar/openclash.png"></a>
|
||||
<a href='/cgi-bin/luci/admin/status/netmonitor'><img src="{{ media }}/navbar/netmon.png"></a>
|
||||
<a href='/cgi-bin/luci/admin/services/nikki'><img src="{{ media }}/navbar/nikki.png"></a>
|
||||
<a href='/cgi-bin/luci/admin/modem/andromodem'><img src="{{ media }}/navbar/droidnet.png"></a>
|
||||
<a href='/cgi-bin/luci/admin/services/fusiontunx'><img src="{{ media }}/navbar/insomclash.png"></a>
|
||||
<a href='/cgi-bin/luci/admin/modem/3ginfo-lite'><img src="{{ media }}/navbar/modem.png"></a>
|
||||
<a href='/cgi-bin/luci/admin/services/passwall'><img src="{{ media }}/navbar/passwall.png"></a>
|
||||
<a href='/cgi-bin/luci/admin/modem/modemdata'><img src="{{ media }}/navbar/mikhom.png"></a>
|
||||
<a href='/cgi-bin/luci/admin/services/AdGuardHome'><img src="{{ media }}/navbar/adguard.png"></a>
|
||||
<a href='/cgi-bin/luci/admin/vpn/tailscale'><img src="{{ media }}/navbar/tailscale.png"></a>
|
||||
<a href='/cgi-bin/luci/admin/services/neko'><img src="{{ media }}/navbar/neko.png"></a>
|
||||
<a href='/cgi-bin/luci/admin/modem/rakitanmanager'><img src="{{ media }}/navbar/rakitanmanager.png"></a>
|
||||
<a href='/cgi-bin/luci/admin/modem/luci-app-sms-tool-js/sendat'><img src="{{ media }}/navbar/at.png"></a>
|
||||
</div>
|
||||
<div class="nav-arrow" id="nextArrow">❯</div>
|
||||
</div>
|
||||
|
||||
<div class="main">
|
||||
<div style="" class="loading"><span><div class="loader"></div>{{ _('Collecting data...') }}</span></div>
|
||||
<div class="main-left" id="mainmenu" style="display:none"></div>
|
||||
<div class="main-right">
|
||||
<div class="modemenu-buttons" style="display:none"><ul id="modemenu"></ul></div>
|
||||
<div class="darkMask"></div>
|
||||
<div id="maincontent">
|
||||
<div class="container">
|
||||
{% if (getuid() == 0 && getspnam('root') && getspnam('root').pwdp === '' && ctx.authsession): %}
|
||||
<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.') }}</p>
|
||||
{% if (dispatcher.lookup("admin/system/admin")): %}
|
||||
<div class="right"><a class="btn" href="{{ dispatcher.build_url("admin/system/admin") }}">{{ _('Go to password configuration...') }}</a></div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if (boardinfo && boardinfo.rootfs_type == "initramfs"): %}
|
||||
<div class="alert-message warning">
|
||||
<h4>{{ _('System running in recovery (initramfs) mode.') }}</h4>
|
||||
<p>{{ _('No changes to settings will be stored and are lost after rebooting. This mode should only be used to install a firmware upgrade') }}</p>
|
||||
{% if (dispatcher.lookup("admin/system/flash")): %}
|
||||
<div class="right"><a class="btn" href="{{ dispatcher.build_url("admin/system/flash") }}">{{ _('Go to firmware upgrade...') }}</a></div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<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>
|
||||
|
||||
<div id="tabmenu" style="display:none"></div>
|
||||
@@ -0,0 +1,71 @@
|
||||
<%#
|
||||
Luxe is a clean HTML5 theme for LuCI. It is based on luci-theme-bootstrap and MUI
|
||||
|
||||
luci-theme-material
|
||||
Copyright 2015-2017 Lutty Yang <lutty@wcan.in>
|
||||
|
||||
luci-theme-luxe
|
||||
Copyright 2026 de-quenx | xidz_x
|
||||
|
||||
Have a bug? Please create an issue here on GitHub!
|
||||
https://github.com/de-quenx/luci-theme-luxe/issues
|
||||
|
||||
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 util = require "luci.util"
|
||||
local fs = require "nixio.fs"
|
||||
|
||||
local boardinfo = util.ubus("system", "board") or { }
|
||||
local hn_file = fs.readfile("/proc/sys/kernel/hostname")
|
||||
local hostname = (hn_file and hn_file ~= "") and hn_file:gsub("\n", "") or (boardinfo.hostname or "OpenWrt")
|
||||
-%>
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" class="luxe-login-auth">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
||||
<title><%= hostname %></title>
|
||||
<link rel="stylesheet" href="<%=media%>/css/cascade.css?v=1.0.1">
|
||||
<link rel="shortcut icon" href="<%=media%>/luxe.ico">
|
||||
</head>
|
||||
<body class="luxe-login light">
|
||||
<div class="theme-pages-toggle">
|
||||
<button class="theme-pages-btn" id="b" type="button">LIGHT</button>
|
||||
</div>
|
||||
<form method="post" action="<%=luci.http.getenv('REQUEST_URI')%>">
|
||||
<% if fuser then %>
|
||||
<div class="alert-message" id="a">
|
||||
Invalid username / password! Please try again.
|
||||
</div>
|
||||
<% end %>
|
||||
<div class="login_form_container">
|
||||
<div class="login_form">
|
||||
<h2 id="hostname" data-text="<%= hostname %>"><%= hostname %></h2>
|
||||
<div class="date-time">
|
||||
<span id="d"></span> | <span id="t"></span>
|
||||
</div>
|
||||
<div class="input_group">
|
||||
<input class="input_text pwd_input" id="u_in" type="text" name="luci_username" placeholder="Username" value="<%= duser or '' %>" required autofocus>
|
||||
<div class="t_eye" id="u_eye"></div>
|
||||
</div>
|
||||
<div class="input_group">
|
||||
<input class="input_text pwd_input" id="p_in" type="password" name="luci_password" placeholder="Password">
|
||||
<div class="t_eye" id="t_eye"></div>
|
||||
</div>
|
||||
<input type="submit" value="LOGIN">
|
||||
<div class="footer"></div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<script src="<%=media%>/js/luxe.js?v=1.0.1"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,75 @@
|
||||
{#
|
||||
Luxe is a clean HTML5 theme for LuCI. It is based on luci-theme-bootstrap and MUI
|
||||
|
||||
luci-theme-material
|
||||
Copyright 2015-2017 Lutty Yang <lutty@wcan.in>
|
||||
|
||||
luci-theme-luxe
|
||||
Copyright 2026 de-quenx | xidz_x
|
||||
|
||||
Have a bug? Please create an issue here on GitHub!
|
||||
https://github.com/de-quenx/luci-theme-luxe/issues
|
||||
|
||||
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
|
||||
-#}
|
||||
|
||||
{%
|
||||
let fs = require("fs");
|
||||
let binfo = (type(boardinfo) == 'object') ? boardinfo : {};
|
||||
let hn_file = fs.readfile("/proc/sys/kernel/hostname");
|
||||
let hostname = (type(hn_file) == 'string' && length(hn_file) > 0) ? replace(hn_file, "\n", "") : (binfo.hostname || "OpenWrt");
|
||||
let e = (type(env) == 'object') ? env : {};
|
||||
let req_uri = e.REQUEST_URI || '';
|
||||
let user = (type(duser) == 'string') ? duser : '';
|
||||
let is_failed = (type(fuser) != 'undefined' && fuser) ? true : false;
|
||||
let m = (type(media) == 'string') ? media : '';
|
||||
-%}
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" class="luxe-login-auth">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
||||
<title>{{ hostname }}</title>
|
||||
<link rel="stylesheet" href="{{ m }}/css/cascade.css?v=1.0.1">
|
||||
<link rel="shortcut icon" href="{{ m }}/luxe.ico">
|
||||
</head>
|
||||
<body class="luxe-login light">
|
||||
<div class="theme-pages-toggle">
|
||||
<button class="theme-pages-btn" id="b" type="button">LIGHT</button>
|
||||
</div>
|
||||
<form method="post" action="{{ req_uri }}">
|
||||
{% if (is_failed): %}
|
||||
<div class="alert-message" id="a">
|
||||
Invalid username / password! Please try again.
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="login_form_container">
|
||||
<div class="login_form">
|
||||
<h2 id="hostname" data-text="{{ hostname }}">{{ hostname }}</h2>
|
||||
<div class="date-time">
|
||||
<span id="d"></span> | <span id="t"></span>
|
||||
</div>
|
||||
<div class="input_group">
|
||||
<input class="input_text pwd_input" id="u_in" type="text" name="luci_username" placeholder="Username" value="{{ user }}" required autofocus>
|
||||
<div class="t_eye" id="u_eye"></div>
|
||||
</div>
|
||||
<div class="input_group">
|
||||
<input class="input_text pwd_input" id="p_in" type="password" name="luci_password" placeholder="Password">
|
||||
<div class="t_eye" id="t_eye"></div>
|
||||
</div>
|
||||
<input type="submit" value="LOGIN">
|
||||
<div class="footer"></div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<script src="{{ m }}/js/luxe.js?v=1.0.1"></script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in new issue
Block a user