Merge pull request #27 from nuttylmao/beta

Beta
This commit is contained in:
nuttylmao
2026-03-26 05:16:39 +11:00
committed by GitHub
38 changed files with 115 additions and 69 deletions
+2 -2
View File
@@ -12,7 +12,7 @@
<body> <body>
<!-- Header --> <!-- Header -->
<div id="header"> <div id="header">
<img src="../../resources/logo.png" style="height: 40px;" /> <img src="/.common/resources/logo.png" style="height: 40px;" />
<button id="membershipsButton" onclick="OpenMembershipPage()">Check out my member exclusive widgets!</button> <button id="membershipsButton" onclick="OpenMembershipPage()">Check out my member exclusive widgets!</button>
<div id="widgetUrlInputWrapper"> <div id="widgetUrlInputWrapper">
<span id="urlLabel">Click to copy URL</span> <span id="urlLabel">Click to copy URL</span>
@@ -64,5 +64,5 @@
</html> </html>
<script src="../../../.common/utils/helpers.js"></script> <script src="/.common/utils/helpers.js"></script>
<script src="script.js"></script> <script src="script.js"></script>
+3 -3
View File
@@ -3,7 +3,7 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<link rel="shortcut icon" href="#" /> <link rel="shortcut icon" href="#" />
<link rel="stylesheet" href="../../styles/global.css" /> <link rel="stylesheet" href="/.common/styles/global.css" />
<link rel="stylesheet" href="./style.css" /> <link rel="stylesheet" href="./style.css" />
<script type="text/javascript" src="https://unpkg.com/@streamerbot/client/dist/streamerbot-client.js"></script> <script type="text/javascript" src="https://unpkg.com/@streamerbot/client/dist/streamerbot-client.js"></script>
<script src="https://cdn.jsdelivr.net/npm/luxon@3/build/global/luxon.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/luxon@3/build/global/luxon.min.js"></script>
@@ -13,7 +13,7 @@
<!-- Header --> <!-- Header -->
<div id="header"> <div id="header">
<img src="../../resources/logo.png" style="height: 40px;" /> <img src="/.common/resources/logo.png" style="height: 40px;" />
<label id="title" class="title"></label> <label id="title" class="title"></label>
<div id="header-end"> <div id="header-end">
<button id="sb-actions-button" class="icon-button" onclick="OpenRequiredActionsDialog()"> <button id="sb-actions-button" class="icon-button" onclick="OpenRequiredActionsDialog()">
@@ -60,7 +60,7 @@
<button class="dialog-nav-button" onclick="ClosenConnectDialog()">×</button> <button class="dialog-nav-button" onclick="ClosenConnectDialog()">×</button>
<div style="display: flex; flex-direction: row; align-items: center; gap: 1em"> <div style="display: flex; flex-direction: row; align-items: center; gap: 1em">
<img src="../../resources/streamer.bot.png" style="height: 40px;" /> <img src="/.common/resources/streamer.bot.png" style="height: 40px;" />
<label class="title">Streamer.bot</label> <label class="title">Streamer.bot</label>
</div> </div>
+17
View File
@@ -15,6 +15,8 @@
--error-color: #c65e5e; --error-color: #c65e5e;
--mandatory-field-color: #c93f3f; --mandatory-field-color: #c93f3f;
--error-text-color: #c93f3f; --error-text-color: #c93f3f;
--danger-color: #c93f3f;
--blur-intensity: 20px;
} }
@@ -49,6 +51,10 @@ body {
gap: 0.5em; gap: 0.5em;
} }
.setting-label {
font-weight: 500;
}
.setting-description { .setting-description {
font-size: 0.9em; font-size: 0.9em;
font-weight: 100; font-weight: 100;
@@ -59,6 +65,17 @@ body {
font-weight: 200; font-weight: 200;
} }
.time-pill {
background-color: #333;
color: #ccc;
border-radius: 1em;
padding: 0.2em 0.5em;
font-size: 0.8em;
font-weight: 200;
display: inline-block;
white-space: nowrap;
}
/***************/ /***************/
+52 -17
View File
@@ -159,6 +159,15 @@ async function GetPronouns(platform, username) {
} }
} }
function RenderKickEmotes(message) {
const emoteRegex = /\[emote:(\d+):([^\]]+)\]/g;
return message.replace(emoteRegex, (_, id, name) => {
const imgUrl = `https://files.kick.com/emotes/${id}/fullsize`;
return `<img src="${imgUrl}" alt="${name}" title="${name}" class="emote" />`;
});
}
function GetCurrentTimeFormatted() { function GetCurrentTimeFormatted() {
const now = new Date(); const now = new Date();
let hours = now.getHours(); let hours = now.getHours();
@@ -178,6 +187,14 @@ function DecodeHTMLString(html) {
return txt.value; return txt.value;
} }
// Simple HTML escape function to prevent XSS attacks
function EscapeHTML(str) {
return str.replace(/[&<>"']/g, match => {
const escape = { "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#39;" };
return escape[match];
});
}
function TranslateToFurry(sentence) { function TranslateToFurry(sentence) {
// Split on <img ...> tags, keeping them in the result // Split on <img ...> tags, keeping them in the result
const parts = sentence.split(/(<img\b[^>]*>)/gi); const parts = sentence.split(/(<img\b[^>]*>)/gi);
@@ -273,24 +290,26 @@ function RandomHex(str) {
function ConstructMessageFromParts(parts) { function ConstructMessageFromParts(parts) {
return parts.map(part => { return parts.map(part => {
if (part.emoji) if (part.emoji)
return ` <img src="${part.image}" alt="${part.text}" title="${part.text}" class="emote"> `; return ` <img src="${EscapeHTML(part.image)}" alt="${EscapeHTML(part.text)}" title="${EscapeHTML(part.text)}" class="emote"> `;
if (!part.type) if (!part.type)
return part.text; return EscapeHTML(part.text);
if (part.source == 'Twemoji')
return EscapeHTML(part.text);
switch (part.type) switch (part.type)
{ {
case "text": case "text":
return part.text; return EscapeHTML(part.text);
case "cheer": case "cheer":
// Render the cheer emote image // Render the cheer emote image
const emoteImg = `<img src="${part.imageUrl}" alt="${part.text}" title="${part.text}" class="emote">`; const emoteImg = `<img src="${EscapeHTML(part.imageUrl)}" alt="${EscapeHTML(part.text)}" title="${EscapeHTML(part.text)}" class="emote">`;
// Render the bits count // Render the bits count
const bitLabel = `<span class="bits">${part.bits}</span>`; const bitLabel = `<span class="bits">${EscapeHTML(part.bits.toString())}</span>`;
return emoteImg + bitLabel; return emoteImg + bitLabel;
default: default:
return `<img src="${part.imageUrl}" alt="${part.text}" title="${part.text}" class="emote">`; return `<img src="${EscapeHTML(part.imageUrl)}" alt="${EscapeHTML(part.text)}" title="${EscapeHTML(part.text)}" class="emote">`;
} }
}).join(''); }).join('');
} }
@@ -308,27 +327,43 @@ function RenderMessageWithEmotesHTML(originalMessage, emotes) {
emotes.forEach(emote => { emotes.forEach(emote => {
// Add text before the emote // Add text before the emote
if (emote.startIndex > cursor) { if (emote.startIndex > cursor) {
html += escapeHTML(originalMessage.slice(cursor, emote.startIndex)); html += EscapeHTML(originalMessage.slice(cursor, emote.startIndex));
} }
// Add emote image // Add emote image
html += `<img src="${emote.imageUrl}" alt="${escapeHTML(emote.name)}" title="${escapeHTML(emote.name)}" class="emote">`; html += `<img src="${EscapeHTML(emote.imageUrl)}" alt="${EscapeHTML(emote.name)}" title="${EscapeHTML(emote.name)}" class="emote">`;
cursor = emote.endIndex + 1; cursor = emote.endIndex + 1;
}); });
// Add remaining text after last emote // Add remaining text after last emote
if (cursor < originalMessage.length) { if (cursor < originalMessage.length) {
html += escapeHTML(originalMessage.slice(cursor)); html += EscapeHTML(originalMessage.slice(cursor));
}
// Simple HTML escape function
function escapeHTML(str) {
return str.replace(/[&<>"']/g, match => {
const escape = { "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#39;" };
return escape[match];
});
} }
return html; return html;
} }
async function LoadHTMLTemplate(name) {
const response = await fetch(name);
if (!response.ok) {
throw new Error(`Failed to load template: ${name}`);
}
const html = await response.text();
const tempDiv = document.createElement("div");
tempDiv.innerHTML = html;
const template = tempDiv.querySelector("template");
if (!template) {
throw new Error(`No <template> found in ${name}.html`);
}
// Avoid duplicate registration
if (!document.getElementById(template.id)) {
document.body.appendChild(template.cloneNode(true));
}
}
+1 -1
View File
@@ -2,7 +2,7 @@
<html lang="en"> <html lang="en">
<head> <head>
<link rel="stylesheet" href="../../../.common/styles/global.css" /> <link rel="stylesheet" href="/.common/styles/global.css" />
<link rel="stylesheet" href="./style.css" /> <link rel="stylesheet" href="./style.css" />
</head> </head>
+2 -2
View File
@@ -1,8 +1,8 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<link rel="stylesheet" href="../.common/styles/global.css" /> <link rel="stylesheet" href="/.common/styles/global.css" />
<link rel="icon" href="../../.common/resources/logo.png" type="image/png"> <link rel="icon" href="/.common/resources/logo.png" type="image/png">
<title>nutty</title> <title>nutty</title>
<style> <style>
#dock-wrapper { #dock-wrapper {
+1 -1
View File
@@ -9,7 +9,7 @@ const configJson = "?config=" + baseURL + "config.json";
// Implement widget dock core // Implement widget dock core
window.dockWrapper = document.getElementById('dock-wrapper'); window.dockWrapper = document.getElementById('dock-wrapper');
dockWrapper.src = `../../.common/core/widget-dock-core${configJson}`; dockWrapper.src = `/.common/core/widget-dock-core${configJson}`;
dockWrapper.addEventListener('load', () => { dockWrapper.addEventListener('load', () => {
dockWrapper.contentWindow.content.src = baseURL + '/contents'; dockWrapper.contentWindow.content.src = baseURL + '/contents';
+1 -1
View File
@@ -4,7 +4,7 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" href="../../.common/resources/logo.png" type="image/png"> <link rel="icon" href="/.common/resources/logo.png" type="image/png">
<title>nutty</title> <title>nutty</title>
<style> <style>
body { body {
+1 -1
View File
@@ -1,6 +1,6 @@
const widgetContainer = document.getElementById('widgetContainer'); const widgetContainer = document.getElementById('widgetContainer');
const settingsPageURL = '../../.common/core/settings-core'; const settingsPageURL = '/.common/core/settings-core';
const currentURL = window.location.href; const currentURL = window.location.href;
+1 -1
View File
@@ -38,5 +38,5 @@
</template> </template>
</body> </body>
<script src="../.common/utils/helpers.js"></script> <script src="/.common/utils/helpers.js"></script>
<script src="./script.js"></script> <script src="./script.js"></script>
+1 -3
View File
@@ -125,6 +125,7 @@ const client = new StreamerbotClient({
console.log(`Streamer.bot successfully connected to ${sbServerAddress}:${sbServerPort}`) console.log(`Streamer.bot successfully connected to ${sbServerAddress}:${sbServerPort}`)
console.debug(data); console.debug(data);
SetConnectionStatus(true); SetConnectionStatus(true);
KickConnect();
}, },
onDisconnect: () => { onDisconnect: () => {
@@ -433,9 +434,6 @@ async function KickConnect() {
} }
} }
// Try connect when window is loaded
window.addEventListener('load', KickConnect);
////////////////////// //////////////////////
// TIKFINITY CLIENT // // TIKFINITY CLIENT //
+1 -1
View File
@@ -4,7 +4,7 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" href="../../.common/resources/logo.png" type="image/png"> <link rel="icon" href="/.common/resources/logo.png" type="image/png">
<title>nutty</title> <title>nutty</title>
<style> <style>
body { body {
+1 -1
View File
@@ -1,6 +1,6 @@
const widgetContainer = document.getElementById('widgetContainer'); const widgetContainer = document.getElementById('widgetContainer');
const settingsPageURL = '../../.common/core/settings-core'; const settingsPageURL = '/.common/core/settings-core';
const currentURL = window.location.href; const currentURL = window.location.href;
+1 -1
View File
@@ -107,5 +107,5 @@
</template> </template>
</body> </body>
<script src="../.common/utils/helpers.js"></script> <script src="/.common/utils/helpers.js"></script>
<script src="./script.js"></script> <script src="./script.js"></script>
+4 -6
View File
@@ -145,6 +145,7 @@ const client = new StreamerbotClient({
console.log(`Streamer.bot successfully connected to ${sbServerAddress}:${sbServerPort}`) console.log(`Streamer.bot successfully connected to ${sbServerAddress}:${sbServerPort}`)
console.debug(data); console.debug(data);
SetConnectionStatus(true); SetConnectionStatus(true);
KickConnect();
}, },
onDisconnect: () => { onDisconnect: () => {
@@ -473,9 +474,6 @@ async function KickConnect() {
} }
} }
// Try connect when window is loaded
window.addEventListener('load', KickConnect);
////////////////////// //////////////////////
@@ -2303,11 +2301,11 @@ async function KickChatMessage(data) {
const isReply = data.isReply; const isReply = data.isReply;
if (isReply && showMessage) { if (isReply && showMessage) {
const replyUser = data.reply.sender.name; const replyUser = data.reply.sender.name;
const replyMsg = data.reply.sender.content; const replyMsg = data.reply.content;
replyDiv.style.display = 'block'; replyDiv.style.display = 'block';
replyUserDiv.innerText = replyUser; replyUserDiv.innerText = replyUser;
replyMsgDiv.innerHTML = replaceEmotes(replyMsg);; replyMsgDiv.innerHTML = RenderKickEmotes(replyMsg);
} }
// Set timestamp // Set timestamp
@@ -2616,7 +2614,7 @@ async function KickRewardRedeemed(data) {
// Set the text // Set the text
const username = data.username; const username = data.username;
const rewardName = data.reward_title; const rewardName = data.reward_title;
const userInput = data.userInput; const userInput = data.user_input;
titleDiv.innerHTML = `${username} redeemed ${rewardName}`; titleDiv.innerHTML = `${username} redeemed ${rewardName}`;
contentDiv.innerText = `${userInput}`; contentDiv.innerText = `${userInput}`;
+1 -1
View File
@@ -4,7 +4,7 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" href="../../.common/resources/logo.png" type="image/png"> <link rel="icon" href="/.common/resources/logo.png" type="image/png">
<title>nutty</title> <title>nutty</title>
<style> <style>
body { body {
+1 -1
View File
@@ -1,6 +1,6 @@
const widgetContainer = document.getElementById('widgetContainer'); const widgetContainer = document.getElementById('widgetContainer');
const settingsPageURL = '../../.common/core/settings-core'; const settingsPageURL = '/.common/core/settings-core';
const currentURL = window.location.href; const currentURL = window.location.href;
+1 -1
View File
@@ -44,5 +44,5 @@
</div> </div>
</body> </body>
<script src="../.common/utils/helpers.js"></script> <script src="/.common/utils/helpers.js"></script>
<script src="./script.js"></script> <script src="./script.js"></script>
+1 -3
View File
@@ -172,6 +172,7 @@ const client = new StreamerbotClient({
console.log(`Streamer.bot successfully connected to ${sbServerAddress}:${sbServerPort}`) console.log(`Streamer.bot successfully connected to ${sbServerAddress}:${sbServerPort}`)
console.debug(data); console.debug(data);
SetConnectionStatus(true); SetConnectionStatus(true);
KickConnect();
}, },
onDisconnect: () => { onDisconnect: () => {
@@ -405,9 +406,6 @@ async function KickConnect() {
} }
} }
// Try connect when window is loaded
window.addEventListener('load', KickConnect);
////////////////////// //////////////////////
+1 -1
View File
@@ -4,7 +4,7 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" href="../../.common/resources/logo.png" type="image/png"> <link rel="icon" href="/.common/resources/logo.png" type="image/png">
<title>nutty</title> <title>nutty</title>
<style> <style>
body { body {
+1 -1
View File
@@ -1,6 +1,6 @@
const widgetContainer = document.getElementById('widgetContainer'); const widgetContainer = document.getElementById('widgetContainer');
const settingsPageURL = '../../.common/core/settings-core'; const settingsPageURL = '/.common/core/settings-core';
const currentURL = window.location.href; const currentURL = window.location.href;
@@ -2,7 +2,7 @@
<html lang="en"> <html lang="en">
<head> <head>
<link rel="stylesheet" href="../../../.common/styles/global.css" /> <link rel="stylesheet" href="/.common/styles/global.css" />
<link rel="stylesheet" href="./style.css" /> <link rel="stylesheet" href="./style.css" />
</head> </head>
+2 -2
View File
@@ -1,8 +1,8 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<link rel="stylesheet" href="../.common/styles/global.css" /> <link rel="stylesheet" href="/.common/styles/global.css" />
<link rel="icon" href="../../.common/resources/logo.png" type="image/png"> <link rel="icon" href="/.common/resources/logo.png" type="image/png">
<title>nutty</title> <title>nutty</title>
<style> <style>
#dock-wrapper { #dock-wrapper {
+1 -1
View File
@@ -9,7 +9,7 @@ const configJson = "?config=" + baseURL + "config.json";
// Implement widget dock core // Implement widget dock core
window.dockWrapper = document.getElementById('dock-wrapper'); window.dockWrapper = document.getElementById('dock-wrapper');
dockWrapper.src = `../../.common/core/widget-dock-core${configJson}`; dockWrapper.src = `/.common/core/widget-dock-core${configJson}`;
dockWrapper.addEventListener('load', () => { dockWrapper.addEventListener('load', () => {
dockWrapper.contentWindow.content.src = baseURL + '/contents'; dockWrapper.contentWindow.content.src = baseURL + '/contents';
+1 -1
View File
@@ -4,7 +4,7 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" href="../../.common/resources/logo.png" type="image/png"> <link rel="icon" href="/.common/resources/logo.png" type="image/png">
<title>nutty</title> <title>nutty</title>
<style> <style>
body { body {
+1 -1
View File
@@ -1,6 +1,6 @@
const widgetContainer = document.getElementById('widgetContainer'); const widgetContainer = document.getElementById('widgetContainer');
const settingsPageURL = '../../.common/core/settings-core'; const settingsPageURL = '/.common/core/settings-core';
const currentURL = window.location.href; const currentURL = window.location.href;
+2 -2
View File
@@ -2,7 +2,7 @@
<html lang="en"> <html lang="en">
<head> <head>
<link rel="stylesheet" href="../../../.common/styles/global.css" /> <link rel="stylesheet" href="/.common/styles/global.css" />
<link rel="stylesheet" href="./style.css" /> <link rel="stylesheet" href="./style.css" />
<script src="https://cdn.jsdelivr.net/npm/luxon@3/build/global/luxon.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/luxon@3/build/global/luxon.min.js"></script>
</head> </head>
@@ -73,5 +73,5 @@
</div> </div>
</template> </template>
<script src="../../../.common/utils/helpers.js"></script> <script src="/.common/utils/helpers.js"></script>
<script src="script.js"></script> <script src="script.js"></script>
+2 -2
View File
@@ -1,8 +1,8 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<link rel="stylesheet" href="../.common/styles/global.css" /> <link rel="stylesheet" href="/.common/styles/global.css" />
<link rel="icon" href="../../.common/resources/logo.png" type="image/png"> <link rel="icon" href="/.common/resources/logo.png" type="image/png">
<title>nutty</title> <title>nutty</title>
<style> <style>
#dock-wrapper { #dock-wrapper {
+1 -1
View File
@@ -9,7 +9,7 @@ const configJson = "?config=" + baseURL + "config.json";
// Implement widget dock core // Implement widget dock core
window.dockWrapper = document.getElementById('dock-wrapper'); window.dockWrapper = document.getElementById('dock-wrapper');
dockWrapper.src = `../../.common/core/widget-dock-core${configJson}`; dockWrapper.src = `/.common/core/widget-dock-core${configJson}`;
dockWrapper.addEventListener('load', () => { dockWrapper.addEventListener('load', () => {
dockWrapper.contentWindow.content.src = baseURL + '/contents'; dockWrapper.contentWindow.content.src = baseURL + '/contents';
+1 -1
View File
@@ -4,7 +4,7 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" href="../../.common/resources/logo.png" type="image/png"> <link rel="icon" href="/.common/resources/logo.png" type="image/png">
<title>nutty</title> <title>nutty</title>
<style> <style>
body { body {
+1 -1
View File
@@ -1,6 +1,6 @@
const widgetContainer = document.getElementById('widgetContainer'); const widgetContainer = document.getElementById('widgetContainer');
const settingsPageURL = '../../.common/core/settings-core'; const settingsPageURL = '/.common/core/settings-core';
const currentURL = window.location.href; const currentURL = window.location.href;
+1 -1
View File
@@ -4,7 +4,7 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" href="../../.common/resources/logo.png" type="image/png"> <link rel="icon" href="/.common/resources/logo.png" type="image/png">
<title>nutty</title> <title>nutty</title>
<style> <style>
body { body {
+1 -1
View File
@@ -1,6 +1,6 @@
const widgetContainer = document.getElementById('widgetContainer'); const widgetContainer = document.getElementById('widgetContainer');
const settingsPageURL = '../../.common/core/settings-core'; const settingsPageURL = '/.common/core/settings-core';
const currentURL = window.location.href; const currentURL = window.location.href;
+1 -1
View File
@@ -25,5 +25,5 @@
</div> </div>
</body> </body>
<script src="../.common/utils/helpers.js"></script> <script src="/.common/utils/helpers.js"></script>
<script src="./script.js"></script> <script src="./script.js"></script>
@@ -4,7 +4,7 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" href="../../.common/resources/logo.png" type="image/png"> <link rel="icon" href="/.common/resources/logo.png" type="image/png">
<title>nutty</title> <title>nutty</title>
<style> <style>
body { body {
+1 -1
View File
@@ -1,6 +1,6 @@
const widgetContainer = document.getElementById('widgetContainer'); const widgetContainer = document.getElementById('widgetContainer');
const settingsPageURL = '../../.common/core/settings-core'; const settingsPageURL = '/.common/core/settings-core';
const currentURL = window.location.href; const currentURL = window.location.href;
+1 -1
View File
@@ -4,7 +4,7 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" href="../../.common/resources/logo.png" type="image/png"> <link rel="icon" href="/.common/resources/logo.png" type="image/png">
<title>nutty</title> <title>nutty</title>
<style> <style>
body { body {
+1 -1
View File
@@ -1,6 +1,6 @@
const widgetContainer = document.getElementById('widgetContainer'); const widgetContainer = document.getElementById('widgetContainer');
const settingsPageURL = '../../.common/core/settings-core'; const settingsPageURL = '/.common/core/settings-core';
const currentURL = window.location.href; const currentURL = window.location.href;