mirror of
https://github.com/nuttylmao/nutty.gg.git
synced 2026-09-18 19:50:58 -04:00
@@ -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,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>
|
||||||
|
|
||||||
|
|||||||
@@ -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
@@ -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 = { "&": "&", "<": "<", ">": ">", '"': """, "'": "'" };
|
||||||
|
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 = { "&": "&", "<": "<", ">": ">", '"': """, "'": "'" };
|
|
||||||
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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -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>
|
||||||
|
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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,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;
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
@@ -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 //
|
||||||
|
|||||||
@@ -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,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;
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
@@ -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}`;
|
||||||
|
|||||||
@@ -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,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;
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
@@ -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);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//////////////////////
|
//////////////////////
|
||||||
|
|||||||
@@ -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,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>
|
||||||
|
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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,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" />
|
||||||
<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>
|
||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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,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;
|
||||||
|
|
||||||
|
|||||||
@@ -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,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;
|
||||||
|
|
||||||
|
|||||||
@@ -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,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;
|
||||||
|
|
||||||
|
|||||||
@@ -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,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;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user