Add advanced custom CSS/JS file support per template (#7361)

Introduces a new 'customFiles' array in the config schema for granular domain-level CSS and JavaScript customization. Updates webserver logic to inject custom CSS/JS tags based on template scope, replacing static custom.css/custom.js references in all Handlebars views. Also updates meshctrl.js to support the new config property.
This commit is contained in:
TheDevRyan
2025-10-24 11:53:37 +01:00
committed by GitHub
parent e5205f285b
commit c7d1c0e18f
27 changed files with 176 additions and 21 deletions

View File

@@ -8,11 +8,11 @@
<meta name="format-detection" content="telephone=no" />
<meta name="robots" content="noindex,nofollow" />
<link type="text/css" href="styles/style.css" media="screen" rel="stylesheet" title="CSS" />
<link type="text/css" href="styles/custom.css" media="screen" rel="stylesheet" title="CSS" />
{{{customCSSTags}}}
<link rel="apple-touch-icon" href="/favicon-303x303.png" />
<script type="text/javascript" src="scripts/common-0.0.1{{min}}.js"></script>
<script type="text/javascript" src="scripts/qrcode.min.js"></script>
<script type="text/javascript" src="scripts/custom.js"></script>
{{{customJSTags}}}
<title>Agent Installation</title>
<style>
.tab {

View File

@@ -13,6 +13,7 @@
<link rel="icon" type="image/png" sizes="32x32" href="{{{domainurl}}}favicon-32x32.png">
<link rel="apple-touch-icon" href="/favicon-303x303.png" />
<link type="text/css" href="styles/xterm.css" media="screen" rel="stylesheet" title="CSS" />
{{{customCSSTags}}}
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="#ffffff">
<meta name="apple-mobile-web-app-title" content="{{{title}}}">
@@ -30,6 +31,7 @@
<script type="text/javascript" src="scripts/zlib-adler32{{{min}}}.js"></script>
<script type="text/javascript" src="scripts/zlib-crc32{{{min}}}.js"></script>
<script keeplink=1 type="text/javascript" src="scripts/filesaver.min.js"></script>
{{{customJSTags}}}
<meta name="msapplication-TileColor" content="#00aba9">
<meta name="theme-color" content="#ffffff">
<title>{{{title}}}</title>

View File

@@ -14,7 +14,7 @@
<link type="text/css" href="styles/ol3-contextmenu.min.css" media="screen" rel="stylesheet" title="CSS" />
<link type="text/css" href="styles/xterm.css" media="screen" rel="stylesheet" title="CSS" />
<link type="text/css" href="styles/flatpickr.min.css" media="screen" rel="stylesheet" title="CSS">
<link type="text/css" href="styles/custom.css" media="screen" rel="stylesheet" title="CSS" />
{{{customCSSTags}}}
<link rel="apple-touch-icon" href="/favicon-303x303.png" />
<script type="text/javascript" src="scripts/common-0.0.1{{{min}}}.js"></script>
<script type="text/javascript" src="scripts/meshcentral{{{min}}}.js"></script>
@@ -50,7 +50,7 @@
<script keeplink=1 type="text/javascript" src="scripts/ol3-contextmenu{{{min}}}.js"></script>
<script keeplink=1 type="text/javascript" src="scripts/purify{{{min}}}.js"></script>
<script keeplink=1 type="text/javascript" src="scripts/marked{{{min}}}.js"></script>
<script type="text/javascript" src="scripts/custom.js"></script>
{{{customJSTags}}}
<title>{{{title}}}</title>
</head>
<body id="body" oncontextmenu="handleContextMenu(event)" style="display:none;min-width:495px" onload="if (typeof(startup) !== 'undefined') startup();">

View File

@@ -18,7 +18,7 @@
<link id="theme-stylesheet" href="styles/bootstrap{{{min}}}.css" rel="stylesheet" title="CSS">
<link href="styles/select2.min.css" rel="stylesheet" title="CSS">
<link href="styles/select2-bootstrap-5-theme.min.css" rel="stylesheet" title="CSS">
<link type="text/css" href="styles/custom.css" media="screen" rel="stylesheet" title="CSS" />
{{{customCSSTags}}}
<link rel="apple-touch-icon" href="/favicon-303x303.png" />
<script type="text/javascript" src="scripts/common-0.0.1{{{min}}}.js"></script>
<script type="text/javascript" src="scripts/meshcentral{{{min}}}.js"></script>
@@ -59,7 +59,7 @@
<script keeplink=1 type="text/javascript" src="scripts/ol3-contextmenu{{{min}}}.js"></script>
<script keeplink=1 type="text/javascript" src="scripts/purify{{{min}}}.js"></script>
<script keeplink=1 type="text/javascript" src="scripts/marked{{{min}}}.js"></script>
<script type="text/javascript" src="scripts/custom.js"></script>
{{{customJSTags}}}
<title>{{{title}}}</title>
</head>

View File

@@ -8,7 +8,9 @@
<meta name=format-detection content="telephone=no" />
<meta name="robots" content="noindex,nofollow">
<link type=text/css href="/styles/style.css" media="screen" rel="stylesheet" title="CSS" />
{{{customCSSTags}}}
<link rel="apple-touch-icon" href="/favicon-303x303.png" />
{{{customJSTags}}}
<title>{{{title1}}} - Download</title>
</head>
<body>

View File

@@ -8,7 +8,9 @@
<meta name=format-detection content="telephone=no" />
<meta name="robots" content="noindex,nofollow">
<link type=text/css href="/styles/style.css" media="screen" rel="stylesheet" title="CSS" />
{{{customCSSTags}}}
<link rel="apple-touch-icon" href="/favicon-303x303.png" />
{{{customJSTags}}}
<title>{{{title1}}} - Download</title>
<style>
body {

View File

@@ -7,7 +7,9 @@
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="format-detection" content="telephone=no" />
<meta name="robots" content="noindex,nofollow" />
{{{customCSSTags}}}
<link rel="apple-touch-icon" href="/favicon-303x303.png" />
{{{customJSTags}}}
<title>{{{title}}}</title>
<style nonce="{{{cspNonce}}}">
body {

View File

@@ -8,7 +8,9 @@
<meta name="format-detection" content="telephone=no" />
<meta name="robots" content="noindex,nofollow" />
<link type="text/css" href="/styles/style.css" media="screen" rel="stylesheet" title="CSS" />
{{{customCSSTags}}}
<link rel="apple-touch-icon" href="/favicon-303x303.png" />
{{{customJSTags}}}
<title>{{{title}}}</title>
<style nonce="{{{cspNonce}}}">
#xbody {

View File

@@ -8,7 +8,9 @@
<meta name=format-detection content="telephone=no" />
<meta name="robots" content="noindex,nofollow">
<link type=text/css href="/styles/style.css" media="screen" rel="stylesheet" title="CSS" />
{{{customCSSTags}}}
<link rel="apple-touch-icon" href="/favicon-303x303.png" />
{{{customJSTags}}}
<title>{{{title1}}} - Download</title>
<style nonce="{{{cspNonce}}}">
body {

View File

@@ -8,10 +8,10 @@
<meta name="format-detection" content="telephone=no" />
<meta name="robots" content="noindex,nofollow" />
<link type="text/css" href="styles/style.css" media="screen" rel="stylesheet" title="CSS" />
<link type="text/css" href="styles/custom.css" media="screen" rel="stylesheet" title="CSS" />
{{{customCSSTags}}}
<link rel="apple-touch-icon" href="/favicon-303x303.png" />
<script type="text/javascript" src="scripts/common-0.0.1{{min}}.js"></script>
<script type="text/javascript" src="scripts/custom.js"></script>
{{{customJSTags}}}
<title>Agent Installation</title>
<style>
.tab {

View File

@@ -12,10 +12,12 @@
<link rel="icon" type="image/png" sizes="16x16" href="{{{domainurl}}}favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="{{{domainurl}}}favicon-32x32.png">
<link rel="apple-touch-icon" href="/favicon-303x303.png" />
{{{customCSSTags}}}
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="#ffffff">
<meta name="apple-mobile-web-app-title" content="{{{title}}}">
<script type="text/javascript" src="scripts/common-0.0.1{{min}}.js"></script>
{{{customJSTags}}}
<script type="text/javascript" src="scripts/u2f-api{{min}}.js"></script>
<meta name="msapplication-TileColor" content="#00aba9">
<meta name="theme-color" content="#ffffff">

View File

@@ -10,8 +10,10 @@
<link rel="manifest" href="{{{domainurl}}}manifest.json">
<link rel="shortcut icon" type="image/x-icon" href="{{{domainurl}}}favicon.ico" />
<link keeplink=1 type="text/css" href="styles/style.css" media="screen" rel="stylesheet" title="CSS" />
{{{customCSSTags}}}
<link rel="apple-touch-icon" href="/favicon-303x303.png" />
<script type="text/javascript" src="scripts/common-0.0.1{{min}}.js"></script>
{{{customJSTags}}}
<script keeplink=1 type="text/javascript" src="scripts/u2f-api{{min}}.js"></script>
<title>{{{title}}} - Login</title>
</head>

View File

@@ -10,11 +10,11 @@
<link rel="manifest" href="{{{domainurl}}}manifest.json">
<link rel="shortcut icon" type="image/x-icon" href="{{{domainurl}}}favicon.ico" />
<link keeplink=1 type="text/css" href="styles/style.css" media="screen" rel="stylesheet" title="CSS" />
<link type="text/css" href="styles/custom.css" media="screen" rel="stylesheet" title="CSS" />
{{{customCSSTags}}}
<link rel="apple-touch-icon" href="/favicon-303x303.png" />
<script type="text/javascript" src="scripts/common-0.0.1{{min}}.js"></script>
<script keeplink=1 type="text/javascript" src="scripts/u2f-api{{min}}.js"></script>
<script type="text/javascript" src="scripts/custom.js"></script>
{{{customJSTags}}}
<title>{{{title}}} - Login</title>
<style>
#body {

View File

@@ -8,8 +8,10 @@
<meta name=format-detection content="telephone=no" />
<meta name="robots" content="noindex,nofollow">
<link type=text/css href="/styles/style.css" media="screen" rel="stylesheet" title="CSS" />
{{{customCSSTags}}}
<link rel="apple-touch-icon" href="/favicon-303x303.png" />
<script type="text/javascript" src="scripts/common-0.0.1{{min}}.js"></script>
{{{customJSTags}}}
<title id="topTitle">{{{title}}}</title>
</head>
<body>

View File

@@ -8,10 +8,10 @@
<meta name=format-detection content="telephone=no" />
<meta name="robots" content="noindex,nofollow">
<link type=text/css href="/styles/style.css" media="screen" rel="stylesheet" title="CSS" />
<link type="text/css" href="styles/custom.css" media="screen" rel="stylesheet" title="CSS" />
{{{customCSSTags}}}
<link rel="apple-touch-icon" href="/favicon-303x303.png" />
<script type="text/javascript" src="scripts/common-0.0.1{{min}}.js"></script>
<script type="text/javascript" src="scripts/custom.js"></script>
{{{customJSTags}}}
<title id="topTitle">{{{title1}}}</title>
<style>
body {

View File

@@ -9,11 +9,11 @@
<meta name="robots" content="noindex,nofollow">
<link type="text/css" href="styles/style.css" media="screen" rel="stylesheet" title="CSS" />
<link type="text/css" href="styles/messenger.css" media="screen" rel="stylesheet" title="CSS" />
<link type="text/css" href="styles/custom.css" media="screen" rel="stylesheet" title="CSS" />
{{{customCSSTags}}}
<link rel="apple-touch-icon" href="/favicon-303x303.png" />
<script type="text/javascript" src="scripts/common-0.0.1{{min}}.js"></script>
<script type="text/javascript" src="scripts/filesaver.min.js"></script>
<script type="text/javascript" src="scripts/custom.js"></script>
{{{customJSTags}}}
</head>
<body style="font-family:Arial,Helvetica,sans-serif">
<div id="xtop" style="position:absolute;left:0;right:0;top:0;height:38px;background-color:#036;color:#EEE;box-shadow:3px 3px 10px gray">

View File

@@ -7,12 +7,14 @@
<meta name="robots" content="noindex,nofollow">
<link rel="icon" href="/favicon.ico">
<link rel="apple-touch-icon" href="/favicon-303x303.png" />
{{{customCSSTags}}}
<title>RDP</title>
<script type="text/javascript" src="mstsc/mstsc.js"></script>
<script type="text/javascript" src="mstsc/keyboard.js"></script>
<script type="text/javascript" src="mstsc/rle.js"></script>
<script type="text/javascript" src="mstsc/client.js"></script>
<script type="text/javascript" src="mstsc/canvas.js"></script>
{{{customJSTags}}}
<style>
:focus {
outline: 0;

View File

@@ -9,7 +9,7 @@
<meta name="robots" content="noindex,nofollow">
<link type="text/css" href="styles/style.css" media="screen" rel="stylesheet" title="CSS" />
<link type="text/css" href="styles/xterm.css" media="screen" rel="stylesheet" title="CSS" />
<link type="text/css" href="styles/custom.css" media="screen" rel="stylesheet" title="CSS" />
{{{customCSSTags}}}
<link rel="apple-touch-icon" href="/favicon-303x303.png" />
<script type="text/javascript" src="scripts/common-0.0.1{{min}}.js"></script>
<script type="text/javascript" src="scripts/agent-desktop-0.0.2{{min}}.js"></script>
@@ -23,7 +23,7 @@
<script type="text/javascript" src="scripts/xterm-addon-fit-min.js"></script>
<script keeplink=1 type="text/javascript" src="scripts/webm-writer.js"></script>
<script keeplink=1 type="text/javascript" src="scripts/filesaver.min.js"></script>
<script type="text/javascript" src="scripts/custom.js"></script>
{{{customJSTags}}}
</head>
<body style="overflow:hidden;background-color:black">
<div id=p11 class="noselect" style="overflow:hidden">

View File

@@ -13,6 +13,7 @@
<link rel="icon" type="image/png" sizes="32x32" href="{{{domainurl}}}favicon-32x32.png">
<link rel="apple-touch-icon" href="/favicon-303x303.png" />
<link type="text/css" href="styles/xterm.css" media="screen" rel="stylesheet" title="CSS" />
{{{customCSSTags}}}
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="#ffffff">
<meta name="apple-mobile-web-app-title" content="{{{title}}}">
@@ -30,6 +31,7 @@
<script type="text/javascript" src="scripts/zlib-adler32{{{min}}}.js"></script>
<script type="text/javascript" src="scripts/zlib-crc32{{{min}}}.js"></script>
<script keeplink=1 type="text/javascript" src="scripts/filesaver.min.js"></script>
{{{customJSTags}}}
<meta name="msapplication-TileColor" content="#00aba9">
<meta name="theme-color" content="#ffffff">
<title>{{{title}}}</title>

View File

@@ -10,7 +10,7 @@
<link type="text/css" href="styles/style.css" media="screen" rel="stylesheet" title="CSS" />
<link type="text/css" href="styles/style-sharing.css" media="screen" rel="stylesheet" title="CSS" />
<link type="text/css" href="styles/xterm.css" media="screen" rel="stylesheet" title="CSS" />
<link type="text/css" href="styles/custom.css" media="screen" rel="stylesheet" title="CSS" />
{{{customCSSTags}}}
<link rel="apple-touch-icon" href="/favicon-303x303.png" />
<script type="text/javascript" src="scripts/common-0.0.1{{min}}.js"></script>
<script type="text/javascript" src="scripts/amt-redir-ws-0.1.0{{{min}}}.js"></script>
@@ -28,7 +28,7 @@
<script type="text/javascript" src="scripts/xterm{{{min}}}.js"></script>
<script type="text/javascript" src="scripts/xterm-addon-fit{{{min}}}.js"></script>
<script keeplink=1 type="text/javascript" src="scripts/filesaver.min.js"></script>
<script type="text/javascript" src="scripts/custom.js"></script>
{{{customJSTags}}}
<title>{{{title}}}</title>
</head>
<body style="overflow:hidden;background-color:black">

View File

@@ -9,6 +9,7 @@
<meta name="robots" content="noindex,nofollow">
<link type="text/css" href="styles/style.css" media="screen" rel="stylesheet" title="CSS" />
<link type="text/css" href="styles/xterm.css" media="screen" rel="stylesheet" title="CSS" />
{{{customCSSTags}}}
<link rel="apple-touch-icon" href="/favicon-303x303.png" />
<script type="text/javascript" src="scripts/common-0.0.1{{min}}.js"></script>
<script type="text/javascript" src="scripts/meshcentral{{min}}.js"></script>
@@ -16,6 +17,7 @@
<script type="text/javascript" src="scripts/agent-redir-rtc-0.1.0{{min}}.js"></script>
<script type="text/javascript" src="scripts/xterm-min.js"></script>
<script type="text/javascript" src="scripts/xterm-addon-fit-min.js"></script>
{{{customJSTags}}}
<title>SSH</title>
</head>
<body style="overflow:hidden;background-color:black" onload="start()">

View File

@@ -8,6 +8,8 @@
<meta name="format-detection" content="telephone=no" />
<meta name="robots" content="noindex,nofollow" />
<link rel="apple-touch-icon" href="/favicon-303x303.png" />
{{{customCSSTags}}}
{{{customJSTags}}}
<title>{{{title}}} - Terms of use</title>
<style type="text/css">
:focus {

View File

@@ -8,8 +8,10 @@
<meta name="format-detection" content="telephone=no" />
<meta name="robots" content="noindex,nofollow" />
<link type="text/css" href="styles/style.css" media="screen" rel="stylesheet" title="CSS" />
{{{customCSSTags}}}
<link rel="apple-touch-icon" href="/favicon-303x303.png" />
<script type="text/javascript" src="scripts/common-0.0.1{{min}}.js"></script>
{{{customJSTags}}}
<title>{{{title}}} - Terms of use</title>
</head>
<body id="body" onload="if (typeof(startup) !== 'undefined') startup();" style="display:none;overflow:hidden">

View File

@@ -9,6 +9,7 @@
<meta name="robots" content="noindex,nofollow">
<link type="text/css" href="styles/style.css" media="screen" rel="stylesheet" title="CSS" />
<link type="text/css" href="styles/xterm.css" media="screen" rel="stylesheet" title="CSS" />
{{{customCSSTags}}}
<link rel="apple-touch-icon" href="/favicon-303x303.png" />
<script type="text/javascript" src="scripts/common-0.0.1{{min}}.js"></script>
<script type="text/javascript" src="scripts/meshcentral{{min}}.js"></script>
@@ -16,6 +17,7 @@
<script type="text/javascript" src="scripts/agent-redir-rtc-0.1.0{{min}}.js"></script>
<script type="text/javascript" src="scripts/xterm-min.js"></script>
<script type="text/javascript" src="scripts/xterm-addon-fit-min.js"></script>
{{{customJSTags}}}
<title>{{{name}}}</title>
</head>
<body style="overflow:hidden;background-color:black" oncontextmenu="handleContextMenu(event)">