luci-theme-material: convert Lua templates to ucode
authorJo-Philipp Wich <jo@mein.io>
Mon, 26 Sep 2022 10:26:41 +0000 (12:26 +0200)
committerJo-Philipp Wich <jo@mein.io>
Mon, 24 Oct 2022 23:03:37 +0000 (01:03 +0200)
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
themes/luci-theme-material/luasrc/view/themes/material/footer.htm [deleted file]
themes/luci-theme-material/luasrc/view/themes/material/header.htm [deleted file]
themes/luci-theme-material/ucode/templates/material/footer.ut [new file with mode: 0644]
themes/luci-theme-material/ucode/templates/material/header.ut [new file with mode: 0644]

diff --git a/themes/luci-theme-material/luasrc/view/themes/material/footer.htm b/themes/luci-theme-material/luasrc/view/themes/material/footer.htm
deleted file mode 100644 (file)
index f572504..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-<%#
-       Material 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>
-
-       Have a bug? Please create an issue here on GitHub!
-       https://github.com/LuttyYang/luci-theme-material/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">Powered by <%= ver.luciname %> (<%= ver.luciversion %>)</a> / <%= ver.distversion %>
-       </footer>
-       </div>
-</div>
-
-<script type="text/javascript">L.require('menu-material')</script>
-
-</body>
-</html>
diff --git a/themes/luci-theme-material/luasrc/view/themes/material/header.htm b/themes/luci-theme-material/luasrc/view/themes/material/header.htm
deleted file mode 100644 (file)
index 48059fe..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-<%#
-       Material 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>
-
-       Have a bug? Please create an issue here on GitHub!
-       https://github.com/LuttyYang/luci-theme-material/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 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="#09c">
-<meta name="msapplication-tap-highlight" content="no">
-<meta name="msapplication-TileColor" content="#09c">
-<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="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 -%>
-<script src="<%=url('admin/translations', luci.i18n.context.lang)%><%# ?v=PKG_VERSION %>"></script>
-<script src="<%=resource%>/cbi.js"></script>
-<title><%=striptags( (boardinfo.hostname or "?") .. ( (node and node.title) and ' - ' .. translate(node.title) or '')) %> - 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 not (path == "") then %>node-<%= path %><% else %>node-main-login<% end %>" data-page="<%= pcdata(path) %>">
-<header>
-       <div class="fill">
-               <div class="container">
-                       <span class="showSide"></span>
-                       <a id="logo" href="<% if luci.dispatcher.context.authsession then %><%=url('admin/status/overview')%><% else %>#<% end %>"><img src="<%=media%>/brand.png" alt="OpenWrt"></a>
-                       <a class="brand" href="#"><%=striptags(boardinfo.hostname or "?")%></a>
-                       <span class="status" id="indicators"></span>
-               </div>
-       </div>
-</header>
-<div class="main">
-       <div style="" class="loading"><span><div class="loading-img"></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 -%>
-                               <%- end -%>
-
-                               <%- if 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>
diff --git a/themes/luci-theme-material/ucode/templates/material/footer.ut b/themes/luci-theme-material/ucode/templates/material/footer.ut
new file mode 100644 (file)
index 0000000..9249427
--- /dev/null
@@ -0,0 +1,32 @@
+{#
+       Material 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>
+
+       Have a bug? Please create an issue here on GitHub!
+       https://github.com/LuttyYang/luci-theme-material/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">Powered by {{ version.luciname }} ({{ version.luciversion }})</a> /
+                               {{ version.distname }} {{ version.distversion }} ({{ version.distrevision }})
+                       </footer>
+               </div>
+       </div>
+
+       <script type="text/javascript">L.require('menu-material')</script>
+
+</body>
+</html>
diff --git a/themes/luci-theme-material/ucode/templates/material/header.ut b/themes/luci-theme-material/ucode/templates/material/header.ut
new file mode 100644 (file)
index 0000000..24b2c73
--- /dev/null
@@ -0,0 +1,96 @@
+{#
+       Material 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>
+
+       Have a bug? Please create an issue here on GitHub!
+       https://github.com/LuttyYang/luci-theme-material/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 = 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="#09c">
+<meta name="msapplication-tap-highlight" content="no">
+<meta name="msapplication-TileColor" content="#09c">
+<meta name="application-name" content="{{ hostname }} - LuCI">
+<meta name="apple-mobile-web-app-title" content="{{ hostname }} - LuCI">
+<link rel="stylesheet" href="{{ media }}/cascade.css">
+<link rel="shortcut icon" href="{{ media }}/favicon.ico">
+{% if (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"></script>
+<title>{{ hostname }}{{ 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) }}">
+<header>
+       <div class="fill">
+               <div class="container">
+                       <span class="showSide"></span>
+                       <a id="logo" href="{{ ctx.authsession ? dispatcher.build_url('admin/status/overview') : '#' }}"><img src="{{ media }}/brand.png" alt="OpenWrt"></a>
+                       <a class="brand" href="#">{{ hostname }}</a>
+                       <span class="status" id="indicators"></span>
+               </div>
+       </div>
+</header>
+<div class="main">
+       <div style="" class="loading"><span><div class="loading-img"></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')?.pwdp === ''): %}
+                                       <!-- no password set -->
+                               {% endif %}
+
+                               {% if (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>