luci-theme-openwrt-2020: convert Lua templates to ucode
authorJo-Philipp Wich <jo@mein.io>
Wed, 26 Oct 2022 20:43:56 +0000 (22:43 +0200)
committerJo-Philipp Wich <jo@mein.io>
Wed, 26 Oct 2022 20:43:56 +0000 (22:43 +0200)
Convert the theme's Lua templates to ucode to avoid the implicit dependency
on the luci-lua-runtime package.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
themes/luci-theme-openwrt-2020/luasrc/view/themes/openwrt2020/footer.htm [deleted file]
themes/luci-theme-openwrt-2020/luasrc/view/themes/openwrt2020/header.htm [deleted file]
themes/luci-theme-openwrt-2020/ucode/template/themes/openwrt2020/footer.ut [new file with mode: 0644]
themes/luci-theme-openwrt-2020/ucode/template/themes/openwrt2020/header.ut [new file with mode: 0644]

diff --git a/themes/luci-theme-openwrt-2020/luasrc/view/themes/openwrt2020/footer.htm b/themes/luci-theme-openwrt-2020/luasrc/view/themes/openwrt2020/footer.htm
deleted file mode 100644 (file)
index e9122f0..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<%#
- Copyright 2020 Jo-Philipp Wich <jo@mein.io>
- Licensed to the public under the Apache License 2.0.
--%>
-
-</div>
-</div>
-
-<p class="luci">
-       <% local ver = require "luci.version" -%>
-       Powered by <%= ver.luciname %> (<%= ver.luciversion %>)
-</p>
-
-<script type="text/javascript">L.require('menu-openwrt2020')</script>
-
-</body>
-</html>
diff --git a/themes/luci-theme-openwrt-2020/luasrc/view/themes/openwrt2020/header.htm b/themes/luci-theme-openwrt-2020/luasrc/view/themes/openwrt2020/header.htm
deleted file mode 100644 (file)
index ba0945a..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-<%#
- Copyright 2020 Jo-Philipp Wich <jo@mein.io>
- 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 http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta http-equiv="Content-Script-Type" content="text/javascript" />
-<meta name="viewport" content="width=device-width, initial-scale=1" />
-<meta name="apple-mobile-web-app-capable" content="yes" />
-<link rel="stylesheet" type="text/css" media="screen" href="<%=media%>/cascade.css" />
-<link rel="icon" href="<%=media%>/logo.svg" type="image/svg+xml" />
-<link rel="apple-touch-icon" href="<%=media%>/logo.png" />
-<script type="text/javascript" src="<%=url('admin/translations', luci.i18n.context.lang)%><%# ?v=PKG_VERSION %>"></script>
-<script type="text/javascript" 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%>" data-page="<%= pcdata(path) %>">
-
-<p class="skiplink">
-<span id="skiplink1"><a href="#navigation"><%:Skip to navigation%></a></span>
-<span id="skiplink2"><a href="#content"><%:Skip to content%></a></span>
-</p>
-
-<div id="menubar">
-       <h2 class="navigation"><a id="navigation" name="navigation"><%:Navigation%></a></h2>
-
-       <span class="hostname"><a href="/"><%=striptags(boardinfo.hostname or "?")%></a></span>
-       <span class="distversion"><%=ver.distversion%></span>
-       <span id="indicators"></span>
-</div>
-
-<div id="modemenu" style="display:none"></div>
-
-<div id="maincontainer">
-       <div id="mainmenu"></div>
-
-       <div id="maincontent">
-               <%- 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.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 -%>
-
-               <div id="tabmenu" style="display:none"></div>
diff --git a/themes/luci-theme-openwrt-2020/ucode/template/themes/openwrt2020/footer.ut b/themes/luci-theme-openwrt-2020/ucode/template/themes/openwrt2020/footer.ut
new file mode 100644 (file)
index 0000000..5899f2a
--- /dev/null
@@ -0,0 +1,16 @@
+{#
+ Copyright 2020 Jo-Philipp Wich <jo@mein.io>
+ Licensed to the public under the Apache License 2.0.
+-#}
+
+</div>
+</div>
+
+<p class="luci">
+       Powered by {{ version.luciname }} ({{ version.luciversion }})
+</p>
+
+<script type="text/javascript">L.require('menu-openwrt2020')</script>
+
+</body>
+</html>
diff --git a/themes/luci-theme-openwrt-2020/ucode/template/themes/openwrt2020/header.ut b/themes/luci-theme-openwrt-2020/ucode/template/themes/openwrt2020/header.ut
new file mode 100644 (file)
index 0000000..2b7c581
--- /dev/null
@@ -0,0 +1,72 @@
+{#
+ Copyright 2020 Jo-Philipp Wich <jo@mein.io>
+ Licensed to the public under the Apache License 2.0.
+-#}
+
+{%
+       import { getuid, getspnam } from 'luci.core';
+
+       const boardinfo = ubus.call('system', 'board');
+
+       http.prepare_content('text/html; charset=UTF-8');
+-%}
+
+<!DOCTYPE html>
+<html lang="{{ dispatcher.lang }}">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta http-equiv="Content-Script-Type" content="text/javascript" />
+<meta name="viewport" content="width=device-width, initial-scale=1" />
+<meta name="apple-mobile-web-app-capable" content="yes" />
+<link rel="stylesheet" type="text/css" media="screen" href="{{ media }}/cascade.css" />
+<link rel="icon" href="{{ media }}/logo.svg" type="image/svg+xml" />
+<link rel="apple-touch-icon" href="{{ media }}/logo.png" />
+<script type="text/javascript" src="{{ dispatcher.build_url('admin/translations', dispatcher.lang) }}"></script>
+<script type="text/javascript" src="{{ resource }}/cbi.js"></script>
+<title>{{ striptags(`${boardinfo.hostname ?? '?'}${node ? ` - ${node.title}` : ''}`) }} - LuCI</title>
+{% if (css): %}
+<style title="text/css">{{ css }}</style>
+{% endif %}
+</head>
+<body class="lang_{{ dispatcher.lang }}" data-page="{{ entityencode(join('-', ctx.request_path), true) }}">
+
+<p class="skiplink">
+<span id="skiplink1"><a href="#navigation">{{ _('Skip to navigation') }}</a></span>
+<span id="skiplink2"><a href="#content">{{ _('Skip to content') }}</a></span>
+</p>
+
+<div id="menubar">
+       <h2 class="navigation"><a id="navigation" name="navigation">{{ _('Navigation') }}</a></h2>
+
+       <span class="hostname"><a href="/">{{ striptags(boardinfo.hostname ?? '?') }}</a></span>
+       <span class="distversion">{{ version.distversion }} {{ version.distrevision }}</span>
+       <span id="indicators"></span>
+</div>
+
+<div id="modemenu" style="display:none"></div>
+
+<div id="maincontainer">
+       <div id="mainmenu"></div>
+
+       <div id="maincontent">
+               {% if (getuid() == 0 && getspnam('root')?.pwdp === '' && join('-', ctx.request_path) != 'admin-system-admin'): %}
+               <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.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 %}
+
+               <div id="tabmenu" style="display:none"></div>