// ==UserScript==
// @name TINYCHAT ROOMTHEME
// @namespace
// @version 2019.119
// @description Editing Overall Theme of Tinychat. Install and refresh.
// @author LogicalStoner
//@match https://tinychat.com/*
// @match https://tinychat.com/room/*
// @exclude https://tinychat.com/room/*?1
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_listValues
// @namespace https://greasyfork.org/users/394583
// ==/UserScript==
/* jshint -W097 */
wsdata = [];
chatlogMain = "";
userlistLog = {};
userlistLogQuits = {};
function tcl(m) { console.log(m); };
newline = `
`;
(function () {
WebSocket.prototype._send = WebSocket.prototype.send;
WebSocket.prototype.send = function (data) {
this._send(data);
this.addEventListener('message', function (msg) {
try{
if (msg.data.includes('"tc":"msg"') && msg.data.includes('"handle"')) {
var messageArr = JSON.parse(msg.data);
var handle = messageArr["handle"];
chatlogAdd(userlistLog[handle]["nick"] + ": " + messageArr["text"]);
}
if (msg.data.includes('"item"')) {
if (msg.data.includes('tc":"yut_play"')) {
var youtubeArr = JSON.parse(msg.data);
var id = youtubeArr["item"]["id"];
chatlogAdd("- YouTube video started: " + "https://youtube.com/watch?v=" + id);
}
if (msg.data.includes('tc":"yut_stop"')) chatlogAdd("- YouTube video stopped.");
}
if (msg.data.match(/"tc":"(?:un)?publish"/)) {
var publishArr = JSON.parse(msg.data);
var action = (publishArr["tc"] == "publish") ? "is" : "stopped";
var handle = publishArr["handle"];
if (userlistLog[handle]) var nick = userlistLog[handle]["nick"];
else var nick = userlistLogQuits[handle]["nick"];
chatlogAdd("- " + nick + " " + action + " broadcasting.");
}
if (msg.data.includes('"tc":"sysmsg"')) {
var systext = JSON.parse(msg.data)["text"];
chatlogAdd("-- " + systext);
}
if (msg.data.includes('"tc":"userlist"')) {
userlistArr = JSON.parse(msg.data)["users"];
for (i=0; i < userlistArr.length; i++) {
var nick = userlistArr[i]["nick"];
var handle = userlistArr[i]["handle"];
var username = userlistArr[i]["username"];
userlistLog[handle] = {"nick":nick, "username":username};
}
}
if (msg.data.includes('"tc":"join","username":"')) {
var userArr = JSON.parse(msg.data)
var nick = userArr["nick"];
var handle = userArr["handle"];
var username = userArr["username"];
userlistLog[handle] = {"nick":nick, "username":username};
}
if (msg.data.includes('"tc":"quit"')) {
var userArr = JSON.parse(msg.data);
var handle = userArr["handle"];
userlistLogQuits[handle] = userlistLog[handle];
delete userlistLog[handle];
}
if (msg.data.includes('"tc":"nick"')) {
var userArr = JSON.parse(msg.data);
var handle = userArr["handle"];
var nick = userArr["nick"];
userlistLog[handle]["nick"] = nick;
}
}catch(e){console.log("TES error WS: " + e.message);}
}, false);
this.send = function (data) {
this._send(data);
wsdata.push(data);
};
wsdata.push(data);
}
function chatlogAdd(arg) {
var timestamp = new Date().toLocaleTimeString('en-US', { hour12: false });
chatlogMain += "[" + timestamp + "] " + arg + newline;
}
})();
var initInterval = setInterval(waitForInit, 500);
function waitForInit(){
if (document.querySelector("tinychat-webrtc-app").shadowRoot) {
clearInterval(initInterval);
(function() {
// Actual userscript starts here //
browserFirefox = (navigator.userAgent.includes("Firefox/") ? true : false);
var bodyElem = document.querySelector("body");
var webappElem = document.querySelector("tinychat-webrtc-app").shadowRoot;
var chatlogOuter = webappElem.querySelector("#room-content");
var chatlogOuter2 = webappElem.querySelector("#room-content");
var chatlogElem = webappElem.querySelector("tc-chatlog").shadowRoot;
var titleElem = webappElem.querySelector("tc-title").shadowRoot;
var sidemenuElem = webappElem.querySelector("tc-sidemenu").shadowRoot;
var videomoderationElem = sidemenuElem.querySelector("tc-video-moderation").shadowRoot;
var videolistElem = webappElem.querySelector("tc-videolist").shadowRoot;
var themeCSS = titleElem.querySelector("#tes-themes");
var chatlistElem = sidemenuElem.querySelector("tc-chatlist").shadowRoot;
var userlistElem = sidemenuElem.querySelector("tc-userlist").shadowRoot;
var userContextmenuElem = userlistElem.querySelector("tc-user-contextmenu").shadowRoot;
var chatlogCSS = chatlogElem.querySelector("#chat-wrapper");
var sidemenuCSS = sidemenuElem.querySelector("#sidemenu");
var videomoderationCSS = videomoderationElem.querySelector("#moderatorlist");
var webappCSS = webappElem.querySelector("#room");
var chatlistCSS = chatlistElem.querySelector("#chatlist");
var userlistCSS = userlistElem.querySelector("#userlist");
var userContextmenuCSS = userContextmenuElem.querySelector("#main");
var titleCSS = titleElem.querySelector("#room-header");
var videolistCSS = videolistElem.querySelector("#videolist");
var bodyCSS = document.querySelector("body");
var resourceDirectory = document.querySelector('link[rel="manifest"]').getAttribute("href").split("manifest")[0]; // \/([\d\.\-])+\/
var audioPop = new Audio(resourceDirectory + 'sound/pop.mp3');
var settingMentions = [];
var giftsElemWidth = 127;
var freshInstall = (GM_listValues().length == 0);
var isModerator = (!userlistElem.querySelector("#button-banlist").classList.contains("hidden"));
var isPaidAccount = (sidemenuElem.querySelector("#sidemenu-wider"));
var messageQueryString = "#chat-content .message";
var camQueryString = ".videos-items:last-child > .js-video";
var urlAddress = new URL(window.location.href);
var urlPars = urlAddress.searchParams;
var roomName = document.querySelector("tinychat-webrtc-app").getAttribute("roomname");
var joinTime = getFormattedDateTime(new Date(), "time");
var joinDate = getFormattedDateTime(new Date());
document.title = roomName + " - Tinychat";
var userinfoCont = sidemenuElem.querySelector("#user-info > div");
if (userinfoCont.hasAttribute("title")) {
bodyCSS.classList.add("logged-in");
sidemenuElem.querySelector("#sidemenu").classList.add("logged-in");
}
if (isModerator) {
userlistElem.querySelector("#userlist").classList.add("tes-mod");
chatlistElem.querySelector("#chatlist").classList.add("tes-mod");
}
var settingsQuick = {
"Autoscroll" : (GM_getValue("tes-Autoscroll") == "true" || GM_getValue("tes-Autoscroll") == undefined),
"MentionsMonitor" : (GM_getValue("tes-MentionsMonitor") == "true" || GM_getValue("tes-MentionsMonitor") == undefined),
"NotificationsOff" : (GM_getValue("tes-NotificationsOff") == "true"),
"ChangeFont" : (GM_getValue("tes-ChangeFont") == "true" || GM_getValue("tes-ChangeFont") == undefined),
"MaxedCamLeft" : (GM_getValue("tes-MaxedCamLeft") == "true" || GM_getValue("tes-MaxedCamLeft") == undefined),
"NightMode" : (GM_getValue("tes-NightMode") == "true"),
"NightModeBlack" : (GM_getValue("tes-NightModeBlack") == "true" || GM_getValue("tes-NightModeBlack") == undefined),
"DefaultMode" : (GM_getValue("tes-NighModeBlack") == "true" || GM_getValue("tes-DarkMode") == "false"),
"PinkMode" : (GM_getValue("tes-PinkMode") == "true" || GM_getValue("tes-DarkMode") == "false"),
"BlueMode" : (GM_getValue("tes-BlueMode") == "true" || GM_getValue("tes-DarkMode") == "false"),
"GreenMode" : (GM_getValue("tes-GreenMode") == "true" || GM_getValue("tes-DarkMode") == "false"),
"PurpleMode" : (GM_getValue("tes-PurpleMode") == "true" || GM_getValue("tes-DarkMode") == "false"),
"DarkPurpleMode" : (GM_getValue("tes-DarkPurpleMode") == "true" || GM_getValue("tes-DarkMode") == "false"),
"OrangeMode" : (GM_getValue("tes-OrangeMode") == "true" || GM_getValue("tes-DarkMode") == "false"),
"RedMode" : (GM_getValue("tes-RedMode") == "true" || GM_getValue("tes-DarkMode") == "false"),
"WhiteMode" : (GM_getValue("tes-WhiteMode") == "true" || GM_getValue("tes-DarkMode") == "false"),
"FeatureOneMode" : (GM_getValue("tes-FeatureOneMode") == "true" || GM_getValue("tes-DarkMode") == "false"),
"FeatureTwoMode" : (GM_getValue("tes-FeatureTwoMode") == "true" || GM_getValue("tes-DarkMode") == "false"),
"FeatureThreeMode" : (GM_getValue("tes-FeatureThreeMode") == "true" || GM_getValue("tes-DarkMode") == "false"),
"MaxedCamLeft" : (GM_getValue("tes-MaxedCamLeft") == "true" || GM_getValue("tes-MaxedCamLeft") == undefined),
"BorderlessCams" : (GM_getValue("tes-BorderlessCams") == "true"),
"ChatBelow" : (GM_getValue("tes-ChatBelow") == "true" || GM_getValue("tes-ChatBelow") == undefined)
};
if (settingsQuick["ChangeFont"]) bodyElem.classList.add("tes-changefont");
if (settingsQuick["MaxedCamLeft"]) videolistCSS.classList.add("tes-leftcam");
if (settingsQuick["NightMode"]) nightmodeToggle(true);
if (settingsQuick["DefaultMode"]) defaultmodeToggle(true) && whitemodeToggle(false) && greenmodeToggle(false) && bluemodeToggle(false) && pinkmodeToggle(false) && purplemodeToggle(false) && orangemodeToggle(false) && redmodeToggle(false) && featureonemodeToggle(false) && featuretwomodeToggle(false) && darkpurplemodeToggle(false) && featurethreemodeToggle(false);
if (settingsQuick["PinkMode"]) pinkmodeToggle(true) && whitemodeToggle(false) && greenmodeToggle(false) && bluemodeToggle(false) && purplemodeToggle(false) && defaultmodeToggle(false) && orangemodeToggle(false) && redmodeToggle(false) && featureonemodeToggle(false) && featuretwomodeToggle(false) && darkpurplemodeToggle(false) && featurethreemodeToggle(false);
if (settingsQuick["BlueMode"]) bluemodeToggle(true) && whitemodeToggle(false) && greenmodeToggle(false) && pinkmodeToggle(false) && purplemodeToggle(false) && defaultmodeToggle(false) && orangemodeToggle(false) && redmodeToggle(false) && featureonemodeToggle(false) && featuretwomodeToggle(false) && darkpurplemodeToggle(false) && featurethreemodeToggle(false);
if (settingsQuick["GreenMode"]) greenmodeToggle(true) && whitemodeToggle(false) && pinkmodeToggle(false) && bluemodeToggle(false) && purplemodeToggle(false) && defaultmodeToggle(false) && orangemodeToggle(false) && redmodeToggle(false) && featureonemodeToggle(false) && featuretwomodeToggle(false) && darkpurplemodeToggle(false) && featurethreemodeToggle(false);
if (settingsQuick["PurpleMode"]) purplemodeToggle(true) && whitemodeToggle(false) && greenmodeToggle(false) && bluemodeToggle(false) && pinkmodeToggle(false) && defaultmodeToggle(false) && orangemodeToggle(false) && redmodeToggle(false) && featureonemodeToggle(false) && featuretwomodeToggle(false) && darkpurplemodeToggle(false) && featurethreemodeToggle(false);
if (settingsQuick["DarkPurpleMode"]) darkpurplemodeToggle(true) && whitemodeToggle(false) && purplemodeToggle(false) && greenmodeToggle(false) && bluemodeToggle(false) && pinkmodeToggle(false) && defaultmodeToggle(false) && orangemodeToggle(false) && redmodeToggle(false) && featureonemodeToggle(false) && featuretwomodeToggle(false) && featurethreemodeToggle(false);
if (settingsQuick["OrangeMode"]) orangemodeToggle(true) && whitemodeToggle(false) && purplemodeToggle(false) && greenmodeToggle(false) && bluemodeToggle(false) && pinkmodeToggle(false) && defaultmodeToggle(false) && redmodeToggle(false) && featureonemodeToggle(false) && featuretwomodeToggle(false) && darkpurplemodeToggle(false) && featurethreemodeToggle(false);
if (settingsQuick["RedMode"]) redmodeToggle(true) && whitemodeToggle(false) && purplemodeToggle(false) && greenmodeToggle(false) && bluemodeToggle(false) && pinkmodeToggle(false) && defaultmodeToggle(false) && orangemodeToggle(false) && featureonemodeToggle(false) && featuretwomodeToggle(false) && darkpurplemodeToggle(false) && featurethreemodeToggle(false);
if (settingsQuick["FeatureOneMode"]) featureonemodeToggle(true) && whitemodeToggle(false) && redmodeToggle(false) && purplemodeToggle(false) && greenmodeToggle(false) && bluemodeToggle(false) && pinkmodeToggle(false) && defaultmodeToggle(false) && orangemodeToggle(false) && featuretwomodeToggle(false) && darkpurplemodeToggle(false) && featurethreemodeToggle(false);
if (settingsQuick["FeatureTwoMode"]) featuretwomodeToggle(true) && whitemodeToggle(false) && redmodeToggle(false) && purplemodeToggle(false) && greenmodeToggle(false) && bluemodeToggle(false) && pinkmodeToggle(false) && defaultmodeToggle(false) && orangemodeToggle(false) && featureonemodeToggle(false) && darkpurplemodeToggle(false) && featurethreemodeToggle(false);
if (settingsQuick["FeatureThreeMode"]) featurethreemodeToggle(true) && featuretwomodeToggle(false) && whitemodeToggle(false) && redmodeToggle(false) && purplemodeToggle(false) && greenmodeToggle(false) && bluemodeToggle(false) && pinkmodeToggle(false) && defaultmodeToggle(false) && orangemodeToggle(false) && featureonemodeToggle(false) && darkpurplemodeToggle(false);
if (settingsQuick["WhiteMode"]) whitemodeToggle(true) && featuretwomodeToggle(false) && redmodeToggle(false) && purplemodeToggle(false) && greenmodeToggle(false) && bluemodeToggle(false) && pinkmodeToggle(false) && defaultmodeToggle(false) && orangemodeToggle(false) && featureonemodeToggle(false) && darkpurplemodeToggle(false) && featurethreemodeToggle(false);
if (settingsQuick["ChatBelow"]) chatBelowToggle(true);
if (browserFirefox) {
titleElem.querySelector("#room-header-info").insertAdjacentHTML("afterend", `
<div id="tes-firefoxwarning" class="style-scope tinychat-title"
style="font-size: .75em; background: white; color: grey; width: 200px; padding: 5px; line-height: 13px;vertical-align: middle;border: #ddd 1px solid;border-width: 0px 1px 0px 1px;">
<div class="style-scope tinychat-title" style="display: table;height: 100%;">
<span style="display: table-cell; vertical-align: middle;top: 16%;" class="style-scope tinychat-title">
Tinychat Enhancement Suite only supports Chrome. Support for Firefox is coming, but for now it only has autoscrolling.
</span>
</div>
</div>
`);
}
function waitForSettings() {
if (browserFirefox) {
clearInterval(settingsWaitInterval);
return;
}
settingsVisible = false;
if (titleElem.querySelector("#room-header-gifts") != null) {
clearInterval(settingsWaitInterval);
giftsElemWidth = titleElem.querySelector("#room-header-gifts").offsetWidth;
if (titleElem.querySelector("#room-header-gifts-items") == null) {
giftsElemWidth1000 = giftsElemWidth + 45;
}
else { giftsElemWidth1000 = giftsElemWidth; }
if (titleCSS.querySelector("#titleCSS")) {
titleCSS.querySelector("#titleCSS").innerHTML += `
#tes-settings {
right: ` + giftsElemWidth + `px;
}
`;
}
settingsElem = titleElem.querySelector("#room-header-gifts").insertAdjacentHTML("beforebegin", `
<div id="tes-settings">
<div id="tes-settingsBox" class="hidden">
<p id="title">Theme Settings</p>
<div id="tes-settings-mentions" class="tes-setting-container">
<input type="checkbox">
</span>
<div class="inputcontainer">
<input class="text"><button class="save blue-button">save</button>
</div>
</div>
<div id="tes-settings-autoscroll" class="tes-setting-container">
<input type="checkbox">
<span class="label">
Autoscroll
</span>
</div>
<div id="tes-settings-notifications" class="tes-setting-container">
<input type="checkbox">
<span class="label">
Hide notifications
</span>
</div>
<div id="tes-settings-changefont" class="tes-setting-container">
<input type="checkbox">
<span class="label">
Improve font
<span class="info" data-title='The default font is too thin in some browsers'>?</span>
</span>
</div>
<div id="tes-settings-chatbelow" class="tes-setting-container">
<input type="checkbox">
</span>
</div>
<div id="tes-settings-nightmode" class="tes-setting-container">
<input type="checkbox">
<span class="label">
Remove Borders
</span>
</div>
<!-- RIGHT SIDE -->
<div id="modes" class="tes-setting-container right">
<div id="Theme Modes">
<div class="head">
Theme Modes
</div>
</div>
<div id="tes-settings-defaultmode"><label>
<input type="checkbox">
<span class="checkmark"></span>
<span class="label">
<div class="foo default">Dark</div></label>
</span>
</div>
<div id="tes-settings-pinkmode"><label>
<input type="checkbox">
<span class="checkmark"></span>
<span class="label">
<div class="foo pink">PINK</div></label>
</span>
</div>
<div id="tes-settings-greenmode"><label>
<input type="checkbox">
<span class="checkmark"></span>
<span class="label">
<div class="foo green">GREEN</div></label>
</span>
</div>
<div id="tes-settings-bluemode"><label>
<input type="checkbox">
<span class="checkmark"></span>
<span class="label">
<div class="foo blue">BLUE</div></label>
</span>
</div>
<div id="tes-settings-purplemode"><label>
<input type="checkbox">
<span class="checkmark"></span>
<span class="label">
<div class="foo purple">PURPLE</div></label>
</span>
</div>
</div>
<!--
<div id="tes-settings-messageanim" class="tes-setting-container">
<input type="checkbox">
<span class="label">
Disable message animation
</span>
</div>
-->
</div>
<div id="tes-updateNotifier"><a class="tes-closeButtonSmall">?</a><span>New Feature : Color Modes!</span></div>
<div id="tes-settingsGear" title="Settings"><span><img src="https://cdn.pixabay.com/photo/2014/03/24/17/20/gear-295455_960_720.png" width="40px"></span></div>
</div>
</div>
`);
titleElem.getElementById("tes-settingsGear").addEventListener("click", toggleSettingsDisplay);
titleElem.getElementById("tes-updateNotifier").addEventListener("click", function(){toggleSettingsDisplay("updateNotifier");} );
if (!freshInstall && GM_getValue("tes-updateNotifSeen") != "2018.112") titleElem.getElementById("tes-updateNotifier").classList.add("visible");
titleElem.querySelector("#tes-settings #tes-settings-mentions button.save").addEventListener("click", function(){mentionsManager("save");} );
!browserFirefox ? mentionsManager("load") : void(0);
settingsCheckboxUpdate();
titleElem.querySelector("#tes-settings-autoscroll input").addEventListener("click", function(){settingsCheckboxUpdate("tes-settings-autoscroll");});
titleElem.querySelector("#tes-settings-mentions input:first-of-type").addEventListener("click", function(){settingsCheckboxUpdate("tes-settings-mentions");});
titleElem.querySelector("#tes-settings-notifications input:first-of-type").addEventListener("click", function(){settingsCheckboxUpdate("tes-settings-notifications");});
titleElem.querySelector("#tes-settings-changefont input").addEventListener("click", function(){settingsCheckboxUpdate("tes-settings-changefont");});
titleElem.querySelector("#tes-settings-nightmode input").addEventListener("click", function(){settingsCheckboxUpdate("tes-settings-nightmode");});
titleElem.querySelector("#tes-settings-pinkmode input").addEventListener("click", function(){settingsCheckboxUpdate("tes-settings-pinkmode");});
titleElem.querySelector("#tes-settings-greenmode input").addEventListener("click", function(){settingsCheckboxUpdate("tes-settings-greenmode");});
titleElem.querySelector("#tes-settings-bluemode input").addEventListener("click", function(){settingsCheckboxUpdate("tes-settings-bluemode");});
titleElem.querySelector("#tes-settings-purplemode input").addEventListener("click", function(){settingsCheckboxUpdate("tes-settings-purplemode");});
titleElem.querySelector("#tes-settings-defaultmode input").addEventListener("click", function(){settingsCheckboxUpdate("tes-settings-defaultmode");});
titleElem.querySelector("#tes-settings-chatbelow input").addEventListener("click", function(){settingsCheckboxUpdate("tes-settings-chatbelow");});
notificationHider();
}
}
function nightmodeToggle(arg) {
try{
var nightmodeClasses = ["tes-nightmode"];
if (settingsQuick["NightModeBlack"]) nightmodeClasses.push("blacknight");
if (arg == true) {
bodyElem.classList.add(...nightmodeClasses);
titleCSS.classList.add(...nightmodeClasses);
sidemenuCSS.classList.add(...nightmodeClasses);
userlistCSS.classList.add(...nightmodeClasses);
webappCSS.classList.add(...nightmodeClasses);
videolistCSS.classList.add(...nightmodeClasses);
videomoderationCSS.classList.add(...nightmodeClasses);
chatlistCSS.classList.add(...nightmodeClasses);
chatlogCSS.classList.add(...nightmodeClasses);
chatlogElem.querySelector("#chat-wider").classList.add(...nightmodeClasses);
// Messages:
if (chatlogElem.querySelector(messageQueryString) != null) {
var messageElems = chatlogElem.querySelectorAll(messageQueryString);
for (i=0; i < messageElems.length; i++) {
var messageItem = messageElems[i].querySelector("tc-message-html").shadowRoot;
var messageItemCSS = messageItem.querySelector(".message");
messageItemCSS.classList.add(...nightmodeClasses);
}
}
// Cams:
if (videolistElem.querySelector(camQueryString) != null) {
var camElems = videolistElem.querySelectorAll(camQueryString);
for (i=0; i < camElems.length; i++) {
var camItem = camElems[i].querySelector("tc-video-item").shadowRoot;
var camItemCSS = camItem.querySelector(".video");
camItemCSS.classList.add(...nightmodeClasses);
if (camItemCSS.querySelector("#camItemCSS") == null) camItemCSS.insertAdjacentHTML("afterbegin", camItemCSShtml);
}
}
}
if (arg == false) {
if (!settingsQuick["NightModeBlack"] && settingsQuick["NightMode"]) nightmodeClasses = ["blacknight"];
bodyElem.classList.remove(...nightmodeClasses);
titleCSS.classList.remove(...nightmodeClasses);
sidemenuCSS.classList.remove(...nightmodeClasses);
userlistCSS.classList.remove(...nightmodeClasses);
webappCSS.classList.remove(...nightmodeClasses);
videolistCSS.classList.remove(...nightmodeClasses);
videomoderationCSS.classList.remove(...nightmodeClasses);
chatlistCSS.classList.remove(...nightmodeClasses);
chatlogCSS.classList.remove(...nightmodeClasses);
chatlogElem.querySelector("#chat-wider").classList.remove(...nightmodeClasses);
// Messages:
if (chatlogElem.querySelector(messageQueryString) != null) {
var messageElems = chatlogElem.querySelectorAll(messageQueryString);
for (i=0; i < messageElems.length; i++) {
var messageItem = messageElems[i].querySelector("tc-message-html").shadowRoot;
var messageItemCSS = messageItem.querySelector(".message");
messageItemCSS.classList.remove(...nightmodeClasses);
}
}
// Cams:
if (videolistElem.querySelector(camQueryString) != null) {
var camElems = videolistElem.querySelectorAll(camQueryString);
for (i=0; i < camElems.length; i++) {
var camItem = camElems[i].querySelector("tc-video-item").shadowRoot;
var camItemCSS = camItem.querySelector(".video");
camItemCSS.classList.remove(...nightmodeClasses);
}
}
}
}catch(e){tcl("error nightmodeToggle: " + e.message);}
}
function pinkmodeToggle(arg) {
try{
var pinkmodeClasses = ["tes-pinkmode"];
if (settingsQuick["PinkModeBlack"]) pinkmodeClasses.push("pinknight");
if (arg == true) {
bodyElem.classList.add(...pinkmodeClasses);
titleCSS.classList.add(...pinkmodeClasses);
sidemenuCSS.classList.add(...pinkmodeClasses);
userlistCSS.classList.add(...pinkmodeClasses);
webappCSS.classList.add(...pinkmodeClasses);
videolistCSS.classList.add(...pinkmodeClasses);
videomoderationCSS.classList.add(...pinkmodeClasses);
chatlistCSS.classList.add(...pinkmodeClasses);
chatlogCSS.classList.add(...pinkmodeClasses);
chatlogElem.querySelector("#chat-wider").classList.add(...pinkmodeClasses);
// Messages:
if (chatlogElem.querySelector(messageQueryString) != null) {
var messageElems = chatlogElem.querySelectorAll(messageQueryString);
for (i=0; i < messageElems.length; i++) {
var messageItem = messageElems[i].querySelector("tc-message-html").shadowRoot;
var messageItemCSS = messageItem.querySelector(".message");
messageItemCSS.classList.add(...pinkmodeClasses);
}
}
// Cams:
if (videolistElem.querySelector(camQueryString) != null) {
var camElems = videolistElem.querySelectorAll(camQueryString);
for (i=0; i < camElems.length; i++) {
var camItem = camElems[i].querySelector("tc-video-item").shadowRoot;
var camItemCSS = camItem.querySelector(".video");
camItemCSS.classList.add(...pinkmodeClasses);
if (camItemCSS.querySelector("#camItemCSS") == null) camItemCSS.insertAdjacentHTML("afterbegin", camItemCSShtml);
}
}
}
if (arg == false) {
if (!settingsQuick["PinkModeBlack"] && settingsQuick["PinkMode"]) nightmodeClasses = ["pinknight"];
bodyElem.classList.remove(...pinkmodeClasses);
titleCSS.classList.remove(...pinkmodeClasses);
sidemenuCSS.classList.remove(...pinkmodeClasses);
userlistCSS.classList.remove(...pinkmodeClasses);
webappCSS.classList.remove(...pinkmodeClasses);
videolistCSS.classList.remove(...pinkmodeClasses);
videomoderationCSS.classList.remove(...pinkmodeClasses);
chatlistCSS.classList.remove(...pinkmodeClasses);
chatlogCSS.classList.remove(...pinkmodeClasses);
chatlogElem.querySelector("#chat-wider").classList.remove(...pinkmodeClasses);
// Messages:
if (chatlogElem.querySelector(messageQueryString) != null) {
var messageElems = chatlogElem.querySelectorAll(messageQueryString);
for (i=0; i < messageElems.length; i++) {
var messageItem = messageElems[i].querySelector("tc-message-html").shadowRoot;
var messageItemCSS = messageItem.querySelector(".message");
messageItemCSS.classList.remove(...pinkmodeClasses);
}
}
// Cams:
if (videolistElem.querySelector(camQueryString) != null) {
var camElems = videolistElem.querySelectorAll(camQueryString);
for (i=0; i < camElems.length; i++) {
var camItem = camElems[i].querySelector("tc-video-item").shadowRoot;
var camItemCSS = camItem.querySelector(".video");
camItemCSS.classList.remove(...pinkmodeClasses);
}
}
}
}catch(e){tcl("error pinkmodeToggle: " + e.message);}
}
function greenmodeToggle(arg) {
try{
var greenmodeClasses = ["tes-greenmode"];
if (settingsQuick["GreenModeBlack"]) greenmodeClasses.push("greennight");
if (arg == true) {
bodyElem.classList.add(...greenmodeClasses);
titleCSS.classList.add(...greenmodeClasses);
sidemenuCSS.classList.add(...greenmodeClasses);
userlistCSS.classList.add(...greenmodeClasses);
webappCSS.classList.add(...greenmodeClasses);
videolistCSS.classList.add(...greenmodeClasses);
videomoderationCSS.classList.add(...greenmodeClasses);
chatlistCSS.classList.add(...greenmodeClasses);
chatlogCSS.classList.add(...greenmodeClasses);
chatlogElem.querySelector("#chat-wider").classList.add(...greenmodeClasses);
// Messages:
if (chatlogElem.querySelector(messageQueryString) != null) {
var messageElems = chatlogElem.querySelectorAll(messageQueryString);
for (i=0; i < messageElems.length; i++) {
var messageItem = messageElems[i].querySelector("tc-message-html").shadowRoot;
var messageItemCSS = messageItem.querySelector(".message");
messageItemCSS.classList.add(...greenmodeClasses);
}
}
// Cams:
if (videolistElem.querySelector(camQueryString) != null) {
var camElems = videolistElem.querySelectorAll(camQueryString);
for (i=0; i < camElems.length; i++) {
var camItem = camElems[i].querySelector("tc-video-item").shadowRoot;
var camItemCSS = camItem.querySelector(".video");
camItemCSS.classList.add(...greenmodeClasses);
if (camItemCSS.querySelector("#camItemCSS") == null) camItemCSS.insertAdjacentHTML("afterbegin", camItemCSShtml);
}
}
}
if (arg == false) {
if (!settingsQuick["GreenModeBlack"] && settingsQuick["GreenMode"]) nightmodeClasses = ["greennight"];
bodyElem.classList.remove(...greenmodeClasses);
titleCSS.classList.remove(...greenmodeClasses);
sidemenuCSS.classList.remove(...greenmodeClasses);
userlistCSS.classList.remove(...greenmodeClasses);
webappCSS.classList.remove(...greenmodeClasses);
videolistCSS.classList.remove(...greenmodeClasses);
videomoderationCSS.classList.remove(...greenmodeClasses);
chatlistCSS.classList.remove(...greenmodeClasses);
chatlogCSS.classList.remove(...greenmodeClasses);
chatlogElem.querySelector("#chat-wider").classList.remove(...greenmodeClasses);
// Messages:
if (chatlogElem.querySelector(messageQueryString) != null) {
var messageElems = chatlogElem.querySelectorAll(messageQueryString);
for (i=0; i < messageElems.length; i++) {
var messageItem = messageElems[i].querySelector("tc-message-html").shadowRoot;
var messageItemCSS = messageItem.querySelector(".message");
messageItemCSS.classList.remove(...greenmodeClasses);
}
}
// Cams:
if (videolistElem.querySelector(camQueryString) != null) {
var camElems = videolistElem.querySelectorAll(camQueryString);
for (i=0; i < camElems.length; i++) {
var camItem = camElems[i].querySelector("tc-video-item").shadowRoot;
var camItemCSS = camItem.querySelector(".video");
camItemCSS.classList.remove(...greenmodeClasses);
}
}
}
}catch(e){tcl("error greenmodeToggle: " + e.message);}
}
function bluemodeToggle(arg) {
try{
var bluemodeClasses = ["tes-bluemode"];
if (settingsQuick["BlueModeBlack"]) bluemodeClasses.push("bluenight");
if (arg == true) {
bodyElem.classList.add(...bluemodeClasses);
titleCSS.classList.add(...bluemodeClasses);
sidemenuCSS.classList.add(...bluemodeClasses);
userlistCSS.classList.add(...bluemodeClasses);
webappCSS.classList.add(...bluemodeClasses);
videolistCSS.classList.add(...bluemodeClasses);
videomoderationCSS.classList.add(...bluemodeClasses);
chatlistCSS.classList.add(...bluemodeClasses);
chatlogCSS.classList.add(...bluemodeClasses);
chatlogElem.querySelector("#chat-wider").classList.add(...bluemodeClasses);
// Messages:
if (chatlogElem.querySelector(messageQueryString) != null) {
var messageElems = chatlogElem.querySelectorAll(messageQueryString);
for (i=0; i < messageElems.length; i++) {
var messageItem = messageElems[i].querySelector("tc-message-html").shadowRoot;
var messageItemCSS = messageItem.querySelector(".message");
messageItemCSS.classList.add(...bluemodeClasses);
}
}
// Cams:
if (videolistElem.querySelector(camQueryString) != null) {
var camElems = videolistElem.querySelectorAll(camQueryString);
for (i=0; i < camElems.length; i++) {
var camItem = camElems[i].querySelector("tc-video-item").shadowRoot;
var camItemCSS = camItem.querySelector(".video");
camItemCSS.classList.add(...bluemodeClasses);
if (camItemCSS.querySelector("#camItemCSS") == null) camItemCSS.insertAdjacentHTML("afterbegin", camItemCSShtml);
}
}
}
if (arg == false) {
if (!settingsQuick["BlueModeBlack"] && settingsQuick["BlueMode"]) nightmodeClasses = ["bluenight"];
bodyElem.classList.remove(...bluemodeClasses);
titleCSS.classList.remove(...bluemodeClasses);
sidemenuCSS.classList.remove(...bluemodeClasses);
userlistCSS.classList.remove(...bluemodeClasses);
webappCSS.classList.remove(...bluemodeClasses);
videolistCSS.classList.remove(...bluemodeClasses);
videomoderationCSS.classList.remove(...bluemodeClasses);
chatlistCSS.classList.remove(...bluemodeClasses);
chatlogCSS.classList.remove(...bluemodeClasses);
chatlogElem.querySelector("#chat-wider").classList.remove(...bluemodeClasses);
// Messages:
if (chatlogElem.querySelector(messageQueryString) != null) {
var messageElems = chatlogElem.querySelectorAll(messageQueryString);
for (i=0; i < messageElems.length; i++) {
var messageItem = messageElems[i].querySelector("tc-message-html").shadowRoot;
var messageItemCSS = messageItem.querySelector(".message");
messageItemCSS.classList.remove(...bluemodeClasses);
}
}
// Cams:
if (videolistElem.querySelector(camQueryString) != null) {
var camElems = videolistElem.querySelectorAll(camQueryString);
for (i=0; i < camElems.length; i++) {
var camItem = camElems[i].querySelector("tc-video-item").shadowRoot;
var camItemCSS = camItem.querySelector(".video");
camItemCSS.classList.remove(...bluemodeClasses);
}
}
}
}catch(e){tcl("error bluemodeToggle: " + e.message);}
}
function purplemodeToggle(arg) {
try{
var purplemodeClasses = ["tes-purplemode"];
if (settingsQuick["PurpleModeBlack"]) purplemodeClasses.push("purplenight");
if (arg == true) {
bodyElem.classList.add(...purplemodeClasses);
titleCSS.classList.add(...purplemodeClasses);
sidemenuCSS.classList.add(...purplemodeClasses);
userlistCSS.classList.add(...purplemodeClasses);
webappCSS.classList.add(...purplemodeClasses);
videolistCSS.classList.add(...purplemodeClasses);
videomoderationCSS.classList.add(...purplemodeClasses);
chatlistCSS.classList.add(...purplemodeClasses);
chatlogCSS.classList.add(...purplemodeClasses);
chatlogElem.querySelector("#chat-wider").classList.add(...purplemodeClasses);
// Messages:
if (chatlogElem.querySelector(messageQueryString) != null) {
var messageElems = chatlogElem.querySelectorAll(messageQueryString);
for (i=0; i < messageElems.length; i++) {
var messageItem = messageElems[i].querySelector("tc-message-html").shadowRoot;
var messageItemCSS = messageItem.querySelector(".message");
messageItemCSS.classList.add(...purplemodeClasses);
}
}
// Cams:
if (videolistElem.querySelector(camQueryString) != null) {
var camElems = videolistElem.querySelectorAll(camQueryString);
for (i=0; i < camElems.length; i++) {
var camItem = camElems[i].querySelector("tc-video-item").shadowRoot;
var camItemCSS = camItem.querySelector(".video");
camItemCSS.classList.add(...purplemodeClasses);
if (camItemCSS.querySelector("#camItemCSS") == null) camItemCSS.insertAdjacentHTML("afterbegin", camItemCSShtml);
}
}
}
if (arg == false) {
if (!settingsQuick["PurpleModeBlack"] && settingsQuick["PurpleMode"]) nightmodeClasses = ["purplenight"];
bodyElem.classList.remove(...purplemodeClasses);
titleCSS.classList.remove(...purplemodeClasses);
sidemenuCSS.classList.remove(...purplemodeClasses);
userlistCSS.classList.remove(...purplemodeClasses);
webappCSS.classList.remove(...purplemodeClasses);
videolistCSS.classList.remove(...purplemodeClasses);
videomoderationCSS.classList.remove(...purplemodeClasses);
chatlistCSS.classList.remove(...purplemodeClasses);
chatlogCSS.classList.remove(...purplemodeClasses);
chatlogElem.querySelector("#chat-wider").classList.remove(...purplemodeClasses);
// Messages:
if (chatlogElem.querySelector(messageQueryString) != null) {
var messageElems = chatlogElem.querySelectorAll(messageQueryString);
for (i=0; i < messageElems.length; i++) {
var messageItem = messageElems[i].querySelector("tc-message-html").shadowRoot;
var messageItemCSS = messageItem.querySelector(".message");
messageItemCSS.classList.remove(...purplemodeClasses);
}
}
// Cams:
if (videolistElem.querySelector(camQueryString) != null) {
var camElems = videolistElem.querySelectorAll(camQueryString);
for (i=0; i < camElems.length; i++) {
var camItem = camElems[i].querySelector("tc-video-item").shadowRoot;
var camItemCSS = camItem.querySelector(".video");
camItemCSS.classList.remove(...purplemodeClasses);
}
}
}
}catch(e){tcl("error purplemodeToggle: " + e.message);}
}
function toggleSettingsDisplay(arg) {
if (arg == "updateNotifier") {
titleElem.querySelector("#tes-updateNotifier").classList.remove("visible");
GM_setValue("tes-updateNotifSeen", "2018.112");
}
if (settingsVisible == true) {
titleElem.getElementById("tes-settingsBox").classList.add("hidden");
titleElem.getElementById("tes-settings").classList.remove("tes-open");
settingsVisible = false;
}
else {
titleElem.getElementById("tes-settingsBox").classList.remove("hidden");
titleElem.getElementById("tes-settings").classList.add("tes-open");
settingsVisible = true;
}
}
function settingsCheckboxUpdate(settingName=null, value=null) {
if (settingName == null && value == null) {
titleElem.getElementById("tes-settings-autoscroll").querySelector("input").checked = settingsQuick["Autoscroll"];
titleElem.getElementById("tes-settings-mentions").querySelector("input").checked = settingsQuick["MentionsMonitor"];
titleElem.getElementById("tes-settings-notifications").querySelector("input").checked = settingsQuick["NotificationsOff"];
titleElem.getElementById("tes-settings-changefont").querySelector("input").checked = settingsQuick["ChangeFont"];
titleElem.getElementById("tes-settings-nightmode").querySelector("input").checked = settingsQuick["NightMode"];
titleElem.getElementById("tes-settings-defaultmode").querySelector("input").checked = settingsQuick["DefaultMode"];
titleElem.getElementById("tes-settings-chatbelow").querySelector("input").checked = settingsQuick["ChatBelow"];
titleElem.getElementById("tes-settings-defaultmode").querySelector("input").checked = settingsQuick["DefaultMode"];
titleElem.getElementById("tes-settings-pinkmode").querySelector("input").checked = settingsQuick["PinkMode"];
titleElem.getElementById("tes-settings-greenmode").querySelector("input").checked = settingsQuick["GreenMode"];
titleElem.getElementById("tes-settings-bluemode").querySelector("input").checked = settingsQuick["BlueMode"];
titleElem.getElementById("tes-settings-purplemode").querySelector("input").checked = settingsQuick["PurpleMode"];
return;
}
if (settingName == "tes-settings-chatbelow") {
if (value == null) {
var newValue = titleElem.getElementById("tes-settings-chatbelow").querySelector("input").checked;
settingsQuick["ChatBelow"] = newValue;
GM_setValue("tes-ChatBelow", newValue.toString());
chatBelowToggle(newValue);
}
}
if (settingName == "tes-settings-autoscroll") {
if (value == null) {
var newValue = titleElem.getElementById("tes-settings-autoscroll").querySelector("input").checked;
settingsQuick["Autoscroll"] = newValue;
GM_setValue("tes-Autoscroll", newValue.toString());
}
}
if (settingName == "tes-settings-mentions") {
if (value == null) {
var newValue = titleElem.getElementById("tes-settings-mentions").querySelector("input:first-of-type").checked;
// if (newValue) {
// titleElem.getElementById("tes-settings-mentions").getAttribute("class").includes("setting-disabled");
// }
settingsQuick["MentionsMonitor"] = newValue;
GM_setValue("tes-MentionsMonitor", newValue.toString());
}
}
if (settingName == "tes-settings-notifications") {
if (value == null) {
var newValue = titleElem.getElementById("tes-settings-notifications").querySelector("input").checked;
settingsQuick["NotificationsOff"] = newValue;
GM_setValue("tes-NotificationsOff", newValue.toString());
notificationHider();
}
}
if (settingName == "tes-settings-changefont") {
if (value == null) {
var newValue = titleElem.getElementById("tes-settings-changefont").querySelector("input").checked;
settingsQuick["ChangeFont"] = newValue;
GM_setValue("tes-ChangeFont", newValue.toString());
fontToggle(newValue);
}
}
if (settingName == "tes-settings-nightmode") {
if (value == null) {
var newValue = titleElem.getElementById("tes-settings-nightmode").querySelector("input").checked;
settingsQuick["NightMode"] = newValue;
GM_setValue("tes-NightMode", newValue.toString());
nightmodeToggle(newValue);
}
}
if (settingName == "tes-settings-pinkmode") {
if (value == null) {
var newValue = titleElem.getElementById("tes-settings-pinkmode").querySelector("input").checked;
titleElem.querySelector("#tes-settings-greenmode input").checked = null;
titleElem.querySelector("#tes-settings-bluemode input").checked = null;
titleElem.querySelector("#tes-settings-purplemode input").checked = null;
titleElem.querySelector("#tes-settings-defaultmode input").checked = (!newValue);
settingsQuick["PinkMode"] = newValue;
GM_setValue("tes-PinkMode", newValue.toString());
pinkmodeToggle(newValue);
pinkmodeToggle(true);
greenmodeToggle(false);
bluemodeToggle(false);
purplemodeToggle(false);
}
}
if (settingName == "tes-settings-greenmode") {
if (value == null) {
var newValue = titleElem.getElementById("tes-settings-greenmode").querySelector("input").checked;
titleElem.querySelector("#tes-settings-pinkmode input").checked = null;
titleElem.querySelector("#tes-settings-bluemode input").checked = null;
titleElem.querySelector("#tes-settings-purplemode input").checked = null;
titleElem.querySelector("#tes-settings-defaultmode input").checked = (!newValue);
settingsQuick["GreenMode"] = newValue;
GM_setValue("tes-GreenMode", newValue.toString());
greenmodeToggle(newValue);
greenmodeToggle(true);
pinkmodeToggle(false);
bluemodeToggle(false);
purplemodeToggle(false);
}
}
if (settingName == "tes-settings-bluemode") {
if (value == null) {
var newValue = titleElem.getElementById("tes-settings-bluemode").querySelector("input").checked;
titleElem.querySelector("#tes-settings-pinkmode input").checked = null;
titleElem.querySelector("#tes-settings-greenmode input").checked = null;
titleElem.querySelector("#tes-settings-purplemode input").checked = null;
titleElem.querySelector("#tes-settings-defaultmode input").checked = (!newValue);
settingsQuick["BlueMode"] = newValue;
GM_setValue("tes-BlueMode", newValue.toString());
bluemodeToggle(newValue);
bluemodeToggle(true);
purplemodeToggle(false);
pinkmodeToggle(false);
greenmodeToggle(false);
}
}
if (settingName == "tes-settings-purplemode") {
if (value == null) {
var newValue = titleElem.getElementById("tes-settings-purplemode").querySelector("input").checked;
titleElem.querySelector("#tes-settings-pinkmode input").checked = null;
titleElem.querySelector("#tes-settings-greenmode input").checked = null;
titleElem.querySelector("#tes-settings-bluemode input").checked = null;
titleElem.querySelector("#tes-settings-defaultmode input").checked = (!newValue);
settingsQuick["PurpleMode"] = newValue;
GM_setValue("tes-PurpleMode", newValue.toString());
purplemodeToggle(newValue);
purplemodeToggle(true);
pinkmodeToggle(false);
greenmodeToggle(false);
bluemodeToggle(false);
}
}
if (settingName == "tes-settings-defaultmode") {
if (value == null) {
var newValue = titleElem.getElementById("tes-settings-defaultmode").querySelector("input").checked;
titleElem.querySelector("#tes-settings-purplemode input").checked = null;
titleElem.querySelector("#tes-settings-pinkmode input").checked = null;
titleElem.querySelector("#tes-settings-greenmode input").checked = null;
titleElem.querySelector("#tes-settings-bluemode input").checked = null;
settingsQuick["DefaultMode"] = newValue;
GM_setValue("tes-DefaultMode", newValue.toString());
purplemodeToggle(false);
pinkmodeToggle(false);
greenmodeToggle(false);
bluemodeToggle(false);
}
}
}
var settingsWaitInterval = setInterval(waitForSettings,1000);
function fontToggle(arg) {
arg ? bodyElem.classList.add("tes-changefont") : bodyElem.classList.remove("tes-changefont");
}
function maxCamPositionToggle(arg) {
try{
arg ? videolistCSS.classList.add("tes-leftcam") : videolistCSS.classList.remove("tes-leftcam");
}catch(e){tcl("error maxCamPositionToggle: " + e.message);}
}
function notificationHider() {
chatlogContainer = chatlogElem.querySelector("#chat-content");
settingsQuick["NotificationsOff"] ? chatlogContainer.classList.add("tes-notif-off") : chatlogContainer.classList.remove("tes-notif-off");
}
function chatBelowToggle(arg) {
arg ? chatlogOuter.classList.add("tes-chatbelow") : chatlogOuter.classList.remove("tes-chatbelow");
}
function copyChatlog(opt=null) {
try{
if (opt == "close") {
chatlogDisplayElem.classList.remove("show");
chatlogDisplayClose.classList.remove("show");
setTimeout(function(){chatlogDisplayCont.classList.remove("show");}, 300);
return;
}
var filename = "tinychat_" + roomName + "_" + joinDate + "_" + joinTime.replace(/:/g, ".") + "-chatlog.log";
var chatlogText = "Tinychat room " + roomName + " on " + joinDate + " " + joinTime + newline + chatlogMain;
var downloadLink = 'data:text/plain;charset=utf-8,' + encodeURIComponent(chatlogText);
var downloadElem = document.createElement('a');
downloadElem.setAttribute("href", downloadLink);
downloadElem.setAttribute("download", filename);
if (opt == "download") downloadElem.click();
if (opt == "view" || opt == null) {
if (typeof chatlogDisplayCont == "undefined") {
chatlogDisplayCont = chatlogElem.querySelector("#tes-chatlogDisplay");
chatlogDisplayElem = chatlogDisplayCont.querySelector("textarea");
chatlogDisplayClose = chatlogDisplayCont.querySelector("#close");
}
chatlogDisplayElem.value = chatlogText;
chatlogDisplayCont.classList.add("show");
setTimeout(function(){
chatlogDisplayElem.classList.add("show");
chatlogDisplayClose.classList.add("show");
}, 50);
chatlogDisplayElem.scrollTop = chatlogDisplayElem.scrollHeight;
}
}catch(e){console.log("TES error copyChatlog: " + e.message);}
}
function getFormattedDateTime(d, opt=null) {
if (opt == "time") return d.toLocaleTimeString('en-US', { hour12: false });
else return d.toLocaleDateString('zh-CN', {'year':'numeric', 'month':'2-digit', 'day':'2-digit'}).replace(/\//g, "-");
}
function mentionsManager(mode) {
var inputElem = titleElem.querySelector("#tes-settings #tes-settings-mentions input.text");
// phrases = inputElem.value.split(",");
var phrase = inputElem.value;
if (phrase.endsWith(",")) { phrase = phrase.slice(0, -1); }
if (phrase.startsWith(",")) { phrase = phrase.slice(1); }
if (mode == "save") {
GM_setValue("tes-Mentions", phrase);
settingMentions = phrase.split(",");
inputElem.value = phrase;
}
if (mode == "load") {
var loadedMentions = GM_getValue("tes-Mentions");
if (loadedMentions != undefined) {
inputElem.value = loadedMentions;
settingMentions = loadedMentions.split(",");
}
}
return;
var phrase = phrase.toString();
if (mode == "save") {
settingMentions.push(phrases);
GM_setValue("tes-Mentions", JSON.stringify(setting_Mentions));
console.log("Mention add:" + phrases);
}
if (mode == "load") {
var mentions = JSON.parse(GM_getValue("tes-Mentions"));
console.log("Mention load:" + mentions);
settingMentions = mentions;
inputElem.value = settingMentions.join();
}
}
!browserFirefox ? injectCSS() : void(0);
function injectCSS(cssName=null) {
// Indenting is purposely wrong, for readability
var insertPosition = "beforeend";
if (browserFirefox) {
headElem = document.querySelector("head");
titleCSS = videolistCSS = chatlistCSS = userlistCSS = userContextmenuCSS = bodyCSS = chatlogCSS = sidemenuCSS = videomoderationCSS = webappCSS = headElem;
headElem.querySelector('[scope="tinychat-title"]').innerHTML += ` #room-header { min-height: 10%; max-height: 10%; } `;
}
if (cssName == "titleCSS" || cssName == null) {
titleCSShtml = `
<style id="titleCSS" scope="tinychat-title">
#tes-ColorChoice {position:absolute;top:10pxbackground-color:#00ff00;}
.foo {
float: left;
width: 100px;
height: 17px;
margin-left: 25px;
border: 1px solid rgba(0, 0, 0, .2);
border-radius: 10px;
text-align: center;
font-weight: bold;
}
.pink {
background: #e76bb6;
}
.green {
background: #042500;
}
.blue {
background: #2a388b;
}
.purple {
background: #BF8FE5;
}
.default {
background: #111111;
}
@keyframes ease-to-left {
0% {right: -50px; opacity: 0;}
100% {right: 0; opacity: 1;}
}
@keyframes ease-to-right {
0% {right:auto;}
100% {right:0;}
}
@keyframes ease-to-bottom-21px {
0% {top:-300px; opacity: 0;}
100% {top:0; opacity: 1;}
}
#content {
padding: -20px;
background-color:#111111;
}
#room-header-gifts-buttons > #get-coins {
background-color: #111111;
border-color: #313131;
color: #313131;
}
#room-header-gifts-buttons > #get-coins:hover {
background-color: #313131;
border-color: #111111;
color: #111111;
}
#room-header-gifts-buttons > a
{
background-color: #111111;
border-color: #313131;
color: #313131;
}
#room-header-gifts-buttons > a:hover {
background-color: #313131;
border-color: #111111;
color: #111111;
}
#tes-header-grabber {
position: absolute;
top: 7rem;
right: 23rem;
width: 27px;
height: 20px;
border: #313131 1px solid;
border-radius: 1px;
text-align: center;
color: #b4c1c5;
cursor: pointer;
transition: all .5s ease-in-out;
background-color: #111111;
box-shadow: 0 0 1.9px 1px white;
}
#tes-fullscreen-grabber {
position: absolute;
top: 50px;
right: 18%;#room-header *
background: white;
width: 20px;
height: 20px;
border: #313131 1px solid;
border-radius: 19px;
text-align: center;
color: #b4c1c5;
cursor: pointer;
transition: all .4s ease-in-out;
background-color:#111111;
}
#tes-header-grabber:before{ content: '';
position: absolute;
display: block;
height: 0;
width: 0;
top: 50%;
left: 50%;
margin: -7px 0 0 -2px;
border-width: 4px 4px 4px 0;
border-style: solid;
border-left: 4px solid transparent;
border-right: 4px solid transparent;
border-top: 4px solid transparent;
transition: .2s;
}
.tes-headerCollapsed #tes-header-grabber:before {
transform: rotate(180deg);
-webkit-transform: rotate(180deg);
top: 12px;
}
.tes-headerCollapsed #tes-header-grabber {
top: 0px;
background: #111111;
border-top: 0;
z-index: 9;
border-radius: 0px;
line-height: 15px;
border-top-left-radius: 0;
border-top-right-radius: 0;
height: 15px;
}
.tes-headerCollapsed:hover #tes-header-grabber {
height: 29px;
border-radius: 0px;
line-height: 43px;
}
.tes-nightmode #tes-settings > div#tes-updateNotifier { border-color: #5d7883; }
.tes-nightmode #tes-settings > div#tes-updateNotifier {
background-color: transparent;
border-color: #145876;
color:#191919;
top: -100px;
}
-------
#tes-settings > div#tes-updateNotifier {
top: -200px;
margin-right: -33px;
float: left;
border: #53b6ef 1px solid;
border-radius: 8px 0 0px 8px;
padding: 5px;
padding-right: 32px;
height: auto;
transition: visibility 0s, opacity 0.5s linear;
background: white;
}
#tes-settings.tes-open > div#tes-updateNotifier {
visibility: hidden;
opacity: 0;
width: 0;
height: 0;
padding: 0;
}
#tes-settings > div#tes-updateNotifier:hover { cursor: pointer; }
.tes-closeButtonSmall {
float: left;
padding-right: 5px;
color: #191919;
padding-left: 5px;
background-color: #fff;
border-radius: 50px;
height: 20px;
margin-right: 7px;
position: relative;
top: -5px;
font-size: 12pt;
font-weight: bold;
}
#tes-settings > div#tes-updateNotifier.visible {
top: 38px;
color: #ffffff !important;
text-transform: uppercase;
background-color: #002F3E;
padding: 5px;
padding-top: 10px;
padding-right: 40px;
padding-bottom: 10px;
border-radius: 20px; }
.tes-closeButtonSmall:hover { color: #7ccefe; background-color: #2b2b2b;
border-radius: 50px;
height: 20px;
margin-right: 7px;}
------
input {
border: 1px solid #c4d4dc;
line-height: 16px;
padding-left: 3px;
}
.label ~ input {
border-bottom-left-radius: 6px;
border-top-left-radius: 6px;
}
input ~ button {
border-bottom-right-radius: 6px;
border-top-right-radius: 6px;
}
input[type="button"], button {
display: inline;
padding: 0 15px;
border: 0;
box-sizing: border-box;
letter-spacing: 1px;
font-size: 12px;
font-weight: bold;
line-height: 20px;
text-align: center;
transition: .2s;
outline: none;
}
.blue-button {
color: #fff;
background-color: #333333;
}
.blue-button:hover {
background-color: #54ccf3;
}
.blue-button:active {
background-color: #38a8dd;
}
.tes-setting-container {
line-height: initial;
}
#tes-settings > div {
/*animation: ease-to-bottom-21px .2s ease 0s 1;*/
position: relative;
top:1.5rem;
left: -1rem;
}
@media screen and (max-width: 0px) {
#tes-settings > div {
height: 0px;
}
}
#tes-settings .hidden { display: none; }
#tes-settings #title { font-weight: bold;
color:#ffffff;lll
text-transform:uppercase; }
#tes-settings {
width:28rem;
transition: all .4s ease-in-out;
animation: ease-to-bottom-21px .2s ease 0s 1;
/*max-height: 10%;*/
font-size: 11px;
flex: none;
z-index: 9;
position: absolute;
top: 25px;
/* right: ` + (giftsElemWidth + 10).toString() + `px; */
}
@media screen and (max-width: 1000%) {
#tes-settings {
right: -7px!important;
top: -11px;
}
#tes-settings.tes-open {
top: 6px;
}
#tes-settingsGear {
font-size: 52px!important;
}
#room-header-gifts-items {
padding: 0 11px;
border-radius: 12px;
background-color: #2a2a2a;
font-size: 0;
text-align: center;
white-space: nowrap;
}
}
@media screen and (max-width: 600px) {
#tes-settings {
right: -4px!important;
top: 19px;
}
}
#tes-settings:hover {
overflow: visible;
}
#tes-settings-mentions .inputcontainer {
float: right;
position: relative;
top: -3px;
opacity: 0;
}
#tes-settingsGear {
font-size: 55px;
color: #53b6ef;
float: right;
}
#tes-settingsGear:hover {
cursor: pointer;
color: #7ccefe;
}
.tes-open #tes-settingsGear {
background:#00000000;
border-bottom-right-radius: 0px;
border-top-right-radius: 0px;
border: #53b6ef 1px solid;
border-left: 0;
top: -6rem;
}
.tes-open #tes-settingsGear span img{
fill: red;}
/*transition: all .2s linear;*/
}
#tes-settingsGear span {
display: block;
transition: transform 0.4s ease-in-out;
}
.tes-open #tes-settingsGear span {
transform: rotate(90deg);
fill: red;
}
#tes-settingsBox {
background: #111111;
border: #53b6ef 1px solid;
border-bottom-right-radius: 0px;
border-top-right-radius: 0px;
right: 27rem;
width:28em;
transition: all .4s ease-in-out;
animation: ease-to-bottom-21px .2s ease 0s 1;
font-size: 0.9rem;
flex: none;
z-index: 9;
}
#tes-settingsBox.hidden {
animation: ease-to-right .2s ease 0s 1;
display: visible;
/*position: relative; right: -1000px;*/
}
/*** Inline with header ***/
#tes-settingsBox {
border-bottom-left-radius: 0px;
border-top-left-radius: 0px;
}
#tes-settingsGear {
display: table;
}
#tes-settingsGear span {
display: table-cell;
vertical-align: middle;
}
/*** ************* ***/
#tes-settings .right {
position: absolute;
left: 189px;
top:72px;
}
#tes-settings .right .label {
margin-left: unset;
}
#tes-settings .right .head {
position: relative;
top: -5px;
left: 12px;
width: 7rem;
align-items: center;
overflow: hidden;
color: #000;
background-color: #fff;
border-top-left-radius: 0px;
border-top-right-radius: 0px;
text-transform: uppercase;
text-align: center;
font-weight: bold;
}
#tes-settings-defaultmode {
top: 77px !important;
}
#tes-settings-pinkmode {
top: 95px !important;
}
#tes-settings-greenmode {
top: 113px !important;
}
#tes-settings-bluemode {
top: 131px !important;
}
#tes-settings-purplemode {
top: 149px !important;
}
#tes-settings-nightmode {
top: 92px !important;
}
#tes-settings-defaultmode > label > input[type=checkbox],#tes-settings-purplemode > label > input[type=checkbox],#tes-settings-bluemode > label > input[type=checkbox],#tes-settings-greenmode > label > input[type=checkbox],#tes-settings-pinkmode > label > input[type=checkbox]
{ position: absolute;
opacity: 0;
cursor: pointer;
}
#tes-settings-defaultmode > label > span.checkmark:after,#tes-settings-purplemode > label > span.checkmark:after,#tes-settings-bluemode > label > span.checkmark:after,#tes-settings-greenmode > label > span.checkmark:after,#tes-settings-pinkmode > label > span.checkmark:after {
content: "";
position: absolute;
display: none;
}
/* Show the checkmark when checked */
#tes-settings .tes-setting-container input:checked ~ .checkmark:after {
display: block;
}
#tes-settings-defaultmode > label > span.checkmark:after,#tes-settings-purplemode > label > span.checkmark:after, #tes-settings-bluemode > label > span.checkmark:after, #tes-settings-greenmode > label > span.checkmark:after, #tes-settings-pinkmode > label > span.checkmark:after {
content: "";
position: absolute;
display: none;
}
#tes-settings-defaultmode > label > span.checkmark:after,#tes-settings-purplemode > label > span.checkmark:after, #tes-settings-bluemode > label > span.checkmark:after, #tes-settings-greenmode > label > span.checkmark:after, #tes-settings-pinkmode > label > span.checkmark:after {
left: 15px;
width: 5px;
height: 10px;
border: solid white;
border-width: 0 3px 3px 0;
-webkit-transform: rotate(45deg);
-ms-transform: rotate(45deg);
transform: rotate(45deg);
}
label {
border:0px solid #ccc;
padding:0px;
display:block;
}
label:hover {
background:#53b6ef;
border-radius:10px;
cursor:pointer;
}
#modes {
padding: 5px;
background-color: #111111;
border: #ffffff 1px solid;
border-radius: 10px;
box-shadow: 0 4px 8px 0 rgba(255,255,255,0.27), 0 6px 20px 0 rgba(255,255,255,0.27);
}
.tes-pinkmode #modes {
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
}
.tes-greenmode #modes {
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
}
.tes-bluemode #modes {
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
}
#tes-settings .tes-setting-container input[type=checkbox] {
margin: 0;
margin-right: 1px;
float: left;
position: absolute;
left: 8px;
}
#tes-settings .label{
margin-right: 17px;
margin-left: 26px;
color:#ffffff;
position: relative;
top: -5px;
}
#tes-settings .info{
margin-left: 3px;
color: #0d94e3;
font-weight: bold;
font-family: Arial;
border: #0d94e3 1px solid;
border-radius: 16px;
height: 1em;
width: 1em;
text-align: center;
display: inline-block;
}
#tes-settings .info:hover:after{
font-weight: normal;
padding: 4px 7px 4px 7px;
border-radius: 7px;
color: white;
background: #61787f;
content: attr(data-title);
display: inline-block;
position: absolute;
top: 52px;
left: 0;
z-index: 9;
}
/*#tes-settings .label:hover:before{
border: solid;
border-color: #61787f transparent;
border-width: 0px 6px 6px 6px;
top: 10px;
content: "";
left: 8%;
position: relative;
display: inline-block;
}*/
}
#tes-settings a:hover {
color: #53b6ef;
}
#room-header {
align-self:auto;
max-height: 1%;
min-height: 1%;
transition: all .4s ease-in-out;
background-color:#00000000;
}
#room-header-gifts-items {
padding: 0 11px;
border-radius: 12px;
background-color: transparent;
font-size: 0;
text-align: center;
white-space: nowrap;
}
#room-header-gifts-items > a > img {
height: 75%;
width: 75%;
border-radius: 50px;
border: 4px solid #313131;
}
#room-header.tes-headerCollapsed {
margin-top: -10px;
margin-top: -150px;
width:100%;
}
#room-header.tes-headerCollapsed:hover {
/* height: 25px;*/
}
@media screen and (max-width: 1000px) {
#room-header {
min-height: inherit;
max-height: inherit;
}
}
#room-header-info {
padding: 0;
color: #ffffff;
}
#room-header-info > h1 {
color: #ffffff;
align-self: auto;
text-transform: uppercase;
font-family: inherit;
left: 0.1rem;
text-shadow: 0 0 4px #00c4ff;
}
#room-header-info > h1:after {
visibility: hidden;
hidden: none;
}
#room-header-info-text:after{
visibility: hidden;
hidden: none;
}
#room-header-info-text {
position: relative;
font-family: sans-serif;
left: 0.3rem;
color: white;
font-size: 0.7rem;
line-height: 0.9rem;
letter-spacing: 0.1rem;
overflow: hidden;
align-self: auto;
cursor: default;
text-shadow: 0 0 2px #00c4ff;
}
#room-header-info-details > a {
color: #dcdcdc;
cursor: pointer;
text-shadow: 0 0 2px #00c4ff;
font-size: 1rem;
}
#room-header-info-details {
font-size: 0.9rem;
letter-spacing: 0.1rem
white-space: nowrap;
cursor: default;
color: white;
line-height: 3.9rem;
text-shadow: 0 0 2px #00c4ff;
}
#room-header-info > span {
display: inline-block;
margin-left: 1.3rem;
box-sizing: border-box;
/* right: 25rem; */
font-size: 0;
text-align: center;
cursor: pointer;
/* width: 5rem; */
-webkit-border-horizontal-spacing: inherit;
}
#room-header-avatar {
position: relative;
height: 100px;
min-width: 100px;
max-width: 100px;
margin: 11px 0 0 36px;
border-radius: 100%;
overflow: hidden
align-self:auto;;
}
}
#room-header-avatar > img {
position: relative;
align-self: auto;
height: 100%;
left: -25%;
}
.tes-headerCollapsed:hover #room-header-avatar:hover {
z-index: 9;
}
#room-header-gifts {
padding: 1% 1%;
}
#room-header-avatar:hover {
border-radius: unset;
}
.tes-headerCollapsed #tes-settingsGear {
font-size: 33px;
left:-19px;
}
.tes-headerCollapsed #tes-settings > div {
height: fit-content;
}
.tes-headerCollapsed #tes-settingsBox {
border-width: 1px;
border-radius: 7px;
border-top-right-radius: 0;
padding-bottom: 7px;
}
.tes-headerCollapsed #tes-settings {
top: -10px;
right: 0;
}
/*** --- COLORSSSSSSS --- ***/
/*** --- PINKK --- ***/
/*** --- TES BOX --- ***/
.tes-pinkmode #tes-settingsBox {
background: #e76bb6;
right: 0;
width: 28em;
transition: all .4s ease-in-out;
animation: ease-to-bottom-21px .2s ease 0s 1;
font-size: 0.9rem;
flex: none;
}
/*** --- END TES BOX --- ***/
#room-header.tes-pinkmode {
background-color:#e76bb6;
border-bottom: 1px solid #e76bb6;
}
.tes-pinkmode #tes-header-grabber {
border: #ffd1dc 1px solid;
background-color: #fb2db0;
box-shadow: 0 0 3px 0.9px white;
}
.tes-pinkmode #room-header-info > h1 {
color: #ffffff;
text-transform: uppercase;
font-family: inherit;
left: -1rem;
align-self: auto;
}
.tes-pinkmode #room-header-info {
padding: 0;
color: #ffffff;
}
.tes-pinkmode #room-header-gifts-buttons > a
{
background-color: #ffd1dc;
border-color: #ffd1dc;
color: #ffadc1;
}
.tes-pinkmode #room-header-gifts-buttons > a:hover {
background-color: #ffd1dc;
border-color: #ffd1dc;
color: #111111;
}
.tes-pinkmode #room-header-gifts-buttons > #get-coins {
background-color: #ffd1dc;
border-color: #ffd1dc;
color: #ffadc1;
}
.tes-pinkmode #room-header-gifts-buttons > #get-coins:hover {
background-color: #ffd1dc;
border-color: #ffd1dc;
color: #111111;
}
.tes-pinkmode #room-header-gifts-items > a > img {
border: 4px solid #ffd1dc;
}
.tes-pinkmode #tes-header-grabber:before {border-color:#ffadc1;
border-width: 4px 4px 4px 0;
border-style: solid;
border-left: 4px solid transparent;
border-right: 4px solid transparent;
border-top: 4px solid transparent;}
#tes-settings-pinkmode .pinkmode-colors {
width: 0px;
height: 0px;
}
#tes-settings-pinkmode .pinkmode-colors:after {
content: " ";
border-radius: 3px;
height: 11px;
width: 11px;
margin-left: 3px;
top: -9px;
position: relative;
display: block;
}
#tes-settings-pinkmode .pinkmode-colors:checked:after {
border: #41a9c1 1px solid;
}
#pink .pinkmode-colors:after { background: #e76bb6; }
#tes-settings-pinkmode .sublabel { margin-left: 15px; }
/*** --- GREENNN --- ***/
/*** --- TES BOX --- ***/
.tes-greenmode #tes-settingsBox {
background: #00500d;
border: #042500 1px solid;
right: 0;
width: 28em;
transition: all .4s ease-in-out;
animation: ease-to-bottom-21px .2s ease 0s 1;
font-size: 0.9rem;
flex: none;
}
/*** --- END TES BOX --- ***/
#room-header.tes-greenmode {
background-color:#00500d;
border-bottom: 1px solid #00500d;
}
.tes-greenmode #tes-header-grabber {
border: #042500 1px solid;
background-color:#042500;
}
.tes-greenmode #room-header-info > h1 {
color:#ffffff;
text-transform: uppercase;
}
.tes-greenmode #room-header-info {
padding: 0;
color:#ffffff;
}
.tes-greenmode #room-header-gifts-buttons > a
{
background-color: #042500;
border-color: #042500;
color: #00570a;
}
.tes-greenmode #room-header-gifts-buttons > a:hover {
background-color: #042500;
border-color: #042500;
color: #111111;
}
.tes-greenmode #room-header-gifts-buttons > #get-coins {
background-color: #042500;
border-color: #042500;
color: #00570a;
}
.tes-greenmode #room-header-gifts-buttons > #get-coins:hover {
background-color: #042500;
border-color: #042500;
color: #111111;
}
.tes-greenmode #room-header-gifts-items > a > img {
border: 4px solid #042500;
}
.tes-greenmode #tes-header-grabber:before {border-color:#00570a;
border-width: 4px 4px 4px 0;
border-style: solid;
border-left: 4px solid transparent;
border-right: 4px solid transparent;
border-top: 4px solid transparent;}
/*** --- BLUEEE --- ***/
/*** --- TES BOX --- ***/
.tes-bluemode #tes-settingsBox {
background: #2a388b;
border: #fffbfc 1px solid;
right: 0;
width: 28em;
transition: all .4s ease-in-out;
font-size: 0.9rem;
flex: none;
z-index: 9;
animation: ease-to-left .2s ease 0s 1;
}
/*** --- END TES BOX --- ***/
#room-header.tes-bluemode {
background-color:#2a388b;
border-bottom: 1px solid #2a388b;
}
.tes-bluemode #tes-header-grabber {
border: #111949 1px solid;
background-color:#111949;
}
.tes-bluemode #room-header-info > h1 {
color:#ffffff;
text-transform: uppercase;
}
.tes-bluemode #room-header-info {
padding: 0;
color:#ffffff;
}
.tes-bluemode #room-header-gifts-buttons > a
{
background-color: #111949;
border-color: #111949;
color: #2a388b;
}
.tes-bluemode #room-header-gifts-buttons > a:hover {
background-color: #111949;
border-color: #111949;
color: #111111;
}
.tes-bluemode #room-header-gifts-buttons > #get-coins {
background-color: #111949;
border-color: #111949;
color: #2a388b;
}
.tes-bluemode #room-header-gifts-buttons > #get-coins:hover {
background-color: #111949;
border-color: #111949;
color: #111111;
}
.tes-bluemode #room-header-gifts-items > a > img {
border: 4px solid #111949;
}
.tes-bluemode #tes-header-grabber:before {border-color:#2a388b;
border-width: 4px 4px 4px 0;
border-style: solid;
border-left: 4px solid transparent;
border-right: 4px solid transparent;
border-top: 4px solid transparent;}
/*** --- PURPLEEE --- ***/
/*** --- TES BOX --- ***/
.tes-purplemode #tes-settingsBox {
background: #BF8FE5;
border: #ffadc1 1px solid;
width: 28em;
transition: all .4s ease-in-out;
font-size: 0.9rem;
flex: none;
z-index: 9;
animation: ease-to-left .2s ease 0s 1;
}
/*** --- END TES BOX --- ***/
#room-header.tes-purplemode {
background-color:#BF8FE5;
border-bottom: 1px solid #BF8FE5;
}
.tes-purplemode #tes-header-grabber {
border: #9168b2 1px solid;
background-color:#9168b2;
}
.tes-purplemode #room-header-info > h1 {
color:#fff;
text-transform: uppercase;
}
.tes-purplemode #room-header-info {
padding: 0;
color: #000;
}
.tes-purplemode #room-header-gifts-buttons > a
{
background-color: #9168b2;
border-color: #9168b2;
color: #BF8FE5;
}
.tes-purplemode #room-header-gifts-buttons > a:hover {
background-color: #9168b2;
border-color: #9168b2;
color: #111111;
}
.tes-purplemode #room-header-gifts-buttons > #get-coins {
background-color: #9168b2;
border-color: #9168b2;
color: #BF8FE5;
}
.tes-purplemode #room-header-gifts-buttons > #get-coins:hover {
background-color: #9168b2;
border-color: #9168b2;
color: #111111;
}
.tes-purplemode #room-header-gifts-items > a > img {
border: 4px solid #9168b2;
}
.tes-purplemode #tes-header-grabber:before {border-color:#BF8FE5;
border-width: 4px 4px 4px 0;
border-style: solid;
border-left: 4px solid transparent;
border-right: 4px solid transparent;
border-top: 4px solid transparent;}
</style>
`;
titleCSS.insertAdjacentHTML(insertPosition, titleCSShtml);
}
if (cssName == "videolistCSS" || cssName == null) {
videolistCSShtml = `
<style id="videolistCSS" scope="tinychat-videolist">
#videolist.tes-sidemenuCollapsed { width: 100%; }
#videos-footer {
display: flex;
flex-direction: row;
align-items: stretch;
height: 0px;
min-height: 0px;
width: 1px;
position: fixed;
bottom: 0;
left: 10px !important;
padding: 0 30px 0px;
box-sizing: border-box;
font-size: 0;
z-index: 3;
left: auto;
background-color:#111111;
}
#videos-footer.tes-sidemenuCollapsed{ position: relative;
bottom: 0;
right: 50px;
}
.tes-sidemenuCollapsed#videos-footer{ position: relative;
bottom: 0;
right: 50px;
}
.video:after {
content: '';
position: absolute;
display: block;
height: 0%;
width: 0%;
top: 0;
left: 0;
border: 0px solid #111;
border-radius: 10px;
box-sizing: border-box;
pointer-events: none;
}
#video::after
{
border: 5px solid #111;
}
#video:after
{
border: 5px solid #111;
}
#videos > .video {
position: relative;
width: 20%;
padding: 5px;
box-sizing: border-box;
font-size: 0;
overflow: hidden;
background-color: #ffffff !important;
}
.video > div > iframe {
width:100%;
}
#videos-header {
height: 0px;
min-height: 0px;
background-color:#111111;
}
#videos-content {
background-color: #111111;
position: relative;
height: 100%;
width: 114%;
left: -10%;
align-self: auto;
}
#videos {
position: absolute;
display: flex;
flex-direction: row;
flex-wrap: wrap;
align-content: center;
justify-content: center;
align-items: center;
top: 6%;
right: 5%;
bottom: 6%;
width: 90%;
left: 25px;
box-sizing: border-box;
font-size: 0;
}
#videos-footer-youtube:hover {
background-color: #e04e5e;
}
#videos-footer-youtube {
background-color: #e04f5f;
background-image: url(https://png.icons8.com/flat_round/40/000000/youtube-play.png);
background-repeat: no-repeat;
background-position: 6px;
background-size: 70%;
background-repeat: no-repeat;
position: relative;
left: -27px;
top: 99px;
transform: matrix3d(1,0,1,0,0,1,0,0,0,0,1,0,-4,0,0,1);
}
#videos-footer-youtube > svg, #videos-footer-soundcloud > svg {
vertical-align: ;
display:none;
}
#videos-footer-broadcast-wrapper.show-ptt > #videos-footer-push-to-talk {
width: 60px;
min-width: 60px;
margin-left: 14px;
opacity: 1;
overflow: visible;
background-color:#33393b;
}
#videos-footer-push-to-talk > svg {
vertical-align: left;
pointer-events: none;
display:none;
}
#videos-footer-youtube, #videos-footer-soundcloud {
height: 40px;
width: -92px !important;
min-width: 40px !important;
margin-right: -7px !important;
margin-top: -250px;
border-radius: 40px;
text-align: center;
line-height: 54px;
cursor: pointer;
overflow: hidden;
transition: .2s;
box-shadow: 0 0 10px 3px #df4e5e;
}
.tes-sidemenuCollapsed #videos-footer {
right:0px;
}
#videos-footer-push-to-talk {
height: 60px;
border-radius: 60px;
width: 80px;
min-width: 70px;
margin-top: -145px;
background-image: url(https://png.icons8.com/ios/100/000000/microphone-filled.png);
background-position: 5px;
background-size: 83%;
background-repeat: no-repeat;
display: block;
background-color: #33393b;
background-blend-mode: soft-light;
text-shadow: 0 0 5px white;
box-shadow: 0 0 3px 2px white;
transition: .5s;
transform: matrix3d(1,0,5.1,0,0,1,0,0,0,0,1,0,124,69,0,2);
}
#videos-footer-broadcast-wrapper.active-ptt > #videos-footer-push-to-talk {
background-color: #2d373a;
background-size: 94%;
background-position: 2px;
background-image: url(https://png.icons8.com/ios/100/000000/microphone-filled.png);
box-shadow: 0 0px 10px 4px #eee;
transform:matrix3d(1,0,1,0,0,1,0,0,0,0,1,0,60,39,0,1);
overflow: hidden;
}
#videos-footer-push-to-talk.tes-sidemenuCollapsed {
height: 100px;
margin-top: -20px;
}
#videos-footer-broadcast-wrapper.tes-sidemenuCollapsed {
position: relative;
right: 0px;
}
#videos-footer-broadcast-wrapper {
position: relative;
right: 122px;
margin-top: -104px;
display: unset;
flex-direction: row;
align-items: flex;
width: unset;
padding-left: 0px !important;
}
#videos-footer-broadcast-wrapper > #videos-footer-submenu-button {
height: 43px;
padding-left: 0px;
background-color: #13a832;
position: relative;
top: -75px;
left: 24px;
display: block;
width: 40px;
min-width: 20px;
border-radius: 30px;
box-sizing: border-round;
cursor: pointer;
transition: .2s;
box-shadow: 0 0 13px 1px #ffff;
transform: matrix3d(1,0,5.1,0,0,1,0,0,0,0,1,0,0,-3,0,1);
}
#videos-footer-submenu {
position: absolute;
width: 130px;
bottom: 120px;
left: 25x;
right: -62px;
padding: 2px;
border-radius:0px;
background-color: #fff;
font-size: 150px;
color: #000;
box-shadow: 0 1px 4px 0 #00000017;
opacity: 0;
box-shadow: 0 0 4px 2px #eee;
visibility: hidden;
z-index: 1;
transition: .2s;
}
#videos-footer-broadcast-wrapper.show-ptt > #videos-footer-submenu {
right: -62px;
}
#videos-footer-submenu:before, #videos-footer-submenu:after {
content: '';
position: absolute;
display: block;
height: 300;
width: 50;
right: unset;
bottom: unset;
border-width: 17px 17px 17px;
border-style: solid;
border-color: #0000000f transparent;
}
#videos-footer-broadcast-wrapper > #videos-footer-submenu-button:before {
content: '';
position: absolute;
display: block;
height: 245;
width: 90;
top: 9px;
right: 2px;
border-width:0px 18px 26px;
border-style: solid;
border-color: #fff transparent;
border-image:url(http://www.iconarchive.com/download/i45239/iconleak/stainless/preferences.ico);
opacity: 1;
/* border-image-width: auto; */
border-image-repeat: inherit;
visibility: visible;
transition: .2s;
}
#videos-footer-broadcast {
grid-auto-columns: auto;
position: relative;
display: block;
padding-inline-start: 20px;
padding-inline-end: 0px;
right: -19px;
top: 38px;
height: 83px;
min-width: 90px;
max-width: 30%;
padding-left: 0px;
border-radius: 50px;
box-sizing: unset;
background-color: #13a832;
color: #fff;
background-image:url(https://png.icons8.com/ios/40/000000/camcorder-pro.png);
background-repeat: no-repeat;
background-blend-mode: color-burn;
background-position: 16px;
background-size: 70%;
cursor: pointer;
font-size:0px;
transition: .2s;
transform: matrix3d(1,0,1.1,0,0,1,0,0,1,0,1,0,-42,0,0,2);
box-shadow: 0 0 7px 2px white;
}
#videos-footer-broadcast-wrapper.active > #videos-footer-submenu-button {
z-index: 1;
box-shadow: 0 0 5px 1px white;
}
#videos-footer-broadcast-wrapper > .waiting {
position: absolute;
width: 90px;
height: 30px;
top: 70px;
bottom: 0;
left: 75px;
right: 0;
border-radius: 11px;
background-color: #38cd57;
opacity: 0;
visibility: hidden;
transition: .2s;
}
#videos-footer-youtube.hidden, #videos-footer-soundcloud.hidden {
width: 0;
min-width: 0;
margin-right: 0;
visibility: hidden;
}
}
#Fvideolist * {
width: 75%!important;
display: contents;
float: right;
flex-direction: column;
}
#Fvideos {
flex-direction: unset;
flex-wrap: unset;
}
#videos-header > span {
position: relative;
align-self: auto;
top: -9.4rem;
right: -19.2rem;
height: 0px;
width: 2.1rem;
color: #0000000f;
}
#videos-header > span > svg {
height: 16px;
padding: 0;
}
.videos-header-volume {
position: absolute;
height: 128px;
width: 24px;
top: 2px;
left: 50%;
margin-left: -14px;
margin-top: -7px;
border-width: 50px 22px 22px;
border-style: solid;
border-color: rgba(0, 0, 0, 0.55);
border-radius: 5px;
box-shadow: 10px 1px 4px 0 rgba(0, 0, 0, .09);
opacity: 0;
visibility: hidden;
transition: .2s;
}
.videos-header-volume-level > div {
position: absolute;
display: block;
height: 12px;
width: 24px;
top: 0px;
left: 0px;
border-radius: 0;
background-color:#5fc2f0b3;
}
.videos-header-volume:before {
background-color: #111;
}
/*** --- PINKKK --- ***/
.tes-pinkmode #videos-header {
height: 0px;
min-height: 0px;
background-color: #e76bb6;
}
.tes-pinkmode #videos-content {
background-color:#ef54b2;
}
.tes-pinkmode #videos-footer-broadcast-wrapper.active > #videos-footer-broadcast, .tes-pinkmode #videos-footer-broadcast-wrapper.active > #videos-footer-submenu-button, .tes-pinkmode #videos-footer-broadcast-wrapper.active > #videos-footer-submenu-button:focus { background-color:#ef54b2;}
/*** --- GREENNN --- ***/
.tes-greenmode #videos-header {
height: 10px;
min-height: 10px;
background-color:#042500;
}
.tes-greenmode #videos-content {
background-color:#042500;
}
.tes-greenmode #videos-footer-broadcast-wrapper.active > #videos-footer-broadcast { background-color:#042500;border:1px solid #00570a;}
.tes-greenmode #videos-footer-broadcast-wrapper.active > #videos-footer-submenu-button, .tes-greenmode #videos-footer-broadcast-wrapper.active > #videos-footer-submenu-button:focus { background-color:#042500;border:0px solid #042500;}
/*** --- BLUEEE --- ***/
.tes-bluemode #videos-header {
height: 10px;
min-height: 10px;
background-color:#111949;
}
.tes-bluemode #videos-content {
background-color:#111949;
}
.tes-bluemode #videos-footer-broadcast-wrapper.active > #videos-footer-broadcast { background-color:#111949;border:1px solid #2a388b;}
.tes-bluemode #videos-footer-broadcast-wrapper.active > #videos-footer-submenu-button, .tes-bluemode #videos-footer-broadcast-wrapper.active > #videos-footer-submenu-button:focus { background-color:#111949;border:0px solid #111949;}
/*** --- PURPLEEE --- ***/
.tes-purplemode #videos-header {
height: 10px;
min-height: 10px;
background-color:#9168b2;
}
.tes-purplemode #videos-content {
background-color:#9168b2;
}
.tes-purplemode #videos-footer-broadcast-wrapper.active > #videos-footer-broadcast { background-color:#9168b2;border:1px solid #BF8FE5;}
.tes-purplemode #videos-footer-broadcast-wrapper.active > #videos-footer-submenu-button, .tes-purplemode #videos-footer-broadcast-wrapper.active > #videos-footer-submenu-button:focus { background-color:#9168b2;border:0px solid #9168b2;}
</style>
`;
videolistCSS.insertAdjacentHTML(insertPosition, videolistCSShtml);
}
if (cssName == "chatlistCSS" || cssName == null) {
chatlistCSShtml = `
<style id="chatlistCSS" scope="tinychat-chatlist">
#chatlist > div > span {
padding-left: 10px;
color:#ffffff;
}
#chatlist > #header {
top: 3px;
height: auto;
}
/*** --- this block is in chatlistCSS & userlistCSS --- ***/
.list-item > span > img {
right: 32px;
left: auto;
}
.list-item > span > span > .send-gift {
position: absolute;
display: inline-block;
height: 70%;
width: 70%;
top: 14%;
right: 4%;
padding: 0;
background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9I…EzM1YxNEguOTMzeiIgZmlsbD0iIzA0Y2FmZiIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);
background-repeat: no-repeat;
opacity: 0;
visibility: hidden;
cursor: pointer;
transition: .2s;
}
.list-item > span[data-status]:before {
left: auto;
right: 36px;
}
.list-item > span > span {
background: none!important;
box-shadow: none!important;
}
/*** --- --- ***/
.close-instant > path {
fill: white;
}
.list-item > span > span { /* gift and close buttons */
right: 16px;
}
.list-item > span:hover > span { /* gift and close buttons */
right: 16px;
background: none!important;
}
</style>
`;
chatlistCSS.insertAdjacentHTML(insertPosition, chatlistCSShtml);
}
if (cssName == "userlistCSS" || cssName == null) {
userlistCSShtml = `
<style id="userlistCSS" scope="tinychat-userlist">
#userlist > div > span {
padding-left: 0%;
padding-right: 40%;
position: relative;
display: inline-block;
height: 72%;
width: 100%;
border-radius: 0 0 0 0;
box-sizing: border-box;
font-size: 0.7rem;
color: #ffffff;
line-height: 100%;
text-align: left;
white-space: nowrap;
overflow: hidden;
transition: .2s;
text-shadow: 0 0 2px white;
font-family: sans-serif;
}
.tes-sidemenuCollapsed #button-banlist {
left: -100px;
width: 10px;
right: 94px;
}
#chatlist > div > span {
position: relative;
display: inline-block;
height: 30px;
width: 100%;
padding-left: 36px;
border-radius: 0 0px 0px 0;
box-sizing: border-box;
font-size: 14px;
color: #ffffff;
line-height: 30px;
text-align: left;
white-space: nowrap;
overflow: hidden;
transition: .2s;
}
.list-item > span > span {
right: auto;
padding: 0 5px;
}
.list-item > span > .nickname {
padding-right: 3px;
}
/*** --- this block is in chatlistCSS & userlistCSS --- ***/
.list-item > span > img {
right: 14px;
left: auto;
}
.list-item > span > img {
position: sticky;
display: inline-block;
height: 48%;
top: 2%;
opacity: 1;
visibility: visible;
transition: .2s;
}
.list-item > span[data-status]:before {
top: 1%;
border-radius: 60%;
position: inherit;
}
.list-item > span > span {
background: none;
box-shadow: none;
}
/*** --- --- ***/
.list-item > span > span[data-moderator="1"]:before {
filter: hue-rotate(226deg) saturate(4000%);
}
#userlist > #header {
top: auto;
height: auto;
}
#userlist > #header > span {
display: block;
border-color: transparent;
background-color: #ffffff00;
text-align: center;
height: 4rem;
width: 100%;
top: 1em;
text-shadow: 0 0 3px white;
left:0rem;
}
#chatlist > #header {
color: #111111;
}
#button-banlist {
display: block;
top: 1rem;
width: 1em;
align-self: auto;
right:9.5rem;
padding: 7px 22px;
font-size: 1.2rem;
font-weight: 150;
color: #04caff;
background-color: #3dff0000;
background-size: 100%;
text-shadow: 0 0 3px #04caff;
text-transform: uppercase;
cursor: pointer;
overflow: visible;
opacity: 1;
transition: .2s;
}
#button-banlist:hover {
color: #fff;
background-color: #04caff00;
}
.list-item > span[data-status]:before {
left: auto;
right: 0;
border-radius:10px;
}
/*** --- COLORSSSSSSS --- ***/
/*** --- PINKKK --- ***/
#userlist.tes-pinkmode > div > span:hover{
display: block;
border-color: black;
background-color: #e76bb6;
color:#ffffff;
font-weight:bold;
}
.tes-pinkmode .list-item > span > span {
background: none;
box-shadow: none;
}
.tes-pinkmode .list-item > span:hover > span {
background: none;
box-shadow: none;
}
.list-item.tes-pinkmode > span > span > .send-gift:hover{
background-color: #ffd1dc;
font-weight:bold;}
#userlist.tes-pinkmode > #header > span {
display: block;
align-self: auto;
border-color#ffffff: ;
background-color:#ef54b2;
color: #ffffff;
font-weight: bold;
text-align: center;
top: 1.01rem;
}
#chatlist.tes-pinkmode > #header > span {
color: #000 !important;
}
/*** --- GREENNN --- ***/
#userlist.tes-greenmode > div > span{
color:#ffffff;
}
#userlist.tes-greenmode > div > span:hover{
display: block;
border-color: black;
background-color: #042500;
color:#ffffff;
font-weight:bold;
}
.tes-greenmode .list-item > span > span {
background: none;
box-shadow: none;
}
.tes-greenmode .list-item > span:hover > span {
background: none;
box-shadow: none;
}
.list-item.tes-greenmode > span > span > .send-gift:hover{
background-color: #042500;
font-weight:bold;}
#userlist.tes-greenmode > #header > span {
display: block;
border-color: black;
background-color:#00500d;
color:#fff;
font-weight:bold;
text-align: center;
top: 1.01rem;
align-self: auto;
}
#chatlist.tes-greenmode > #header > span {
color: #000 !important;
}
/*** --- BLUEEE --- ***/
#userlist.tes-bluemode > div > span:hover{
display: block;
border-color: black;
background-color: #111949;
color:#ffffff;
font-weight:bold;
}
.tes-bluemode .list-item > span > span {
background: none;
box-shadow: none;
}
.tes-bluemode .list-item > span:hover > span {
background: none;
box-shadow: none;
}
.list-item.tes-bluemode > span > span > .send-gift:hover{
background-color: #111949;
font-weight:bold;}
#userlist.tes-bluemode > #header > span {
display: block;
border-color: black;
background-color: #2a388b;
color: #fff;
font-weight: bold;
text-align: center;
top: 1.01rem;
align-self: auto;
}
#chatlist.tes-bluemode > #header > span {
color: #000 !important;
}
/*** --- PURPLEEE --- ***/
#userlist.tes-purplemode > div > span {
color:#ffffff;
font-weight:bold;
}
.tes-purplemode #chatlist > div > span {
color:#ffffff;
font-weight:bold;
}
#userlist.tes-purplemode > div > span:hover{
display: block;
border-color: black;
background-color: #9168b2;
color:#ffffff;
font-weight:bold;
}
.tes-purplemode .list-item > span > span {
background: none;
box-shadow: none;
}
.tes-purplemode .list-item > span:hover > span {
background: none;
box-shadow: none;
}
.list-item.tes-purplemode > span > span > .send-gift:hover{
background-color: #9168b2;
font-weight:bold;}
#userlist.tes-purplemode > #header > span {
display: block;
border-color: black;
background-color: #bf8fe5;
color: #fff;
font-weight: bold;
text-align: center;
top: 1.01rem;
align-self: auto;
}
#chatlist.tes-purplemode > #header > span {
color: #000 !important;
}
</style>
`;
userlistCSS.insertAdjacentHTML(insertPosition, userlistCSShtml);
}
if (cssName == "userContextmenuCSS" || cssName == null) {
userContextmenuCSShtml = `
<style id="userContextmenuCSS" scope="tinychat-user-contextmenu">
#main {
border: 1px solid rgba(0, 0, 0, .1);
}
</style>
`;
userContextmenuCSS.insertAdjacentHTML(insertPosition, userContextmenuCSShtml);
}
if (cssName == "bodyCSS" || cssName == null) {
bodyCSShtml = `
<style id="bodyCSS">
/*** --- COLORSSSSSSS --- ***/
/*** --- PINKKK --- ***/
body.tes-pinkmode{overflow: hidden;background-color:#ef54b2;}
/*** --- GREENNN --- ***/
body.tes-greenmode{overflow: hidden;background-color:#042500;}
/*** --- BLUEEE --- ***/
body.tes-bluemode{overflow: hidden;background-color:#111949;}
/*** --- PURPLEEE --- ***/
body.tes-purplemode{overflow: hidden;background-color:#9168b2;}
body{overflow: hidden;background-color:#111111;}
#nav-static-wrapper {
width: 2px;
opacity: .7;
display:none;
visibility:hidden;
}
#nav-static-wrapper {
width: 2px;
opacity: .7;
display:none;
visibility:hidden;
}
#nav-static-wrapper.tes-sidemenuCollapsed{
display:none;
visibility:hidden;
}
@media screen and (max-width: 1000px) {
#nav-static-wrapper {
width: 82px;
opacity: 1;
}
}
#menu-icon { transition: 1s; display:none;}
.tes-sidemenuCollapsed #menu-icon {
z-index: -1;
opacity: 0;
display:none;
}
.tes-sidemenuCollapsed #header-user { display: none; }
@media screen and (max-width: 1000px) {
#header-user {
left: 21px;
}
#videos-footer-youtube.tes-sidemenuCollapsed{
padding: 0px;
left:100px;
background-color:#f07629;
}
body.tes-changefont {
font-family: sans-serif;
}
#header-user {
left: 62px;
}
@media screen and (max-width: 1000px) {
#header-user {
left: 20px;
}
}
@media screen and (max-width: 700px) {
#header-user {
left: auto;
right: 54px;
}
}
@media screen and (min-width: 1000px) {
#menu-icon:hover { opacity: 1; }
#menu-icon {
top: 4px;
left: 19px;
height: 12px;
width: 109px;
font-size: 10px;
background: #04caff;
border-radius: 6px;
opacity: .8;
visibility: hidden;
display:none;
}
#menu-icon:after {
position: absolute;
top: 3px;
left: 51px;
content: "";
height: 7px;
width: 7px;
border-width: 2px 2px 0px 0px;
border-style: solid;
border-color: #fff;
box-sizing: border-box;
transform: rotate(45deg);
transition: .2s;
visibility: hidden;
}
#menu-icon:hover:after {
border-width: 0px 0px 2px 2px;
visibility: hidden;
}
#menu-icon > svg {
opacity: 0;
visibility: hidden;
}
}
#menu-icon {
visibility: hidden;
display:none;}
</style>
`;
bodyCSS.insertAdjacentHTML(insertPosition, bodyCSShtml);
}
messageCSS = `
body.tes-pinkmode{overflow: hidden;background-color:#F33AA6 !important;}
.message.system {
font-size: 0.8rem;
font-weight: 600;
color: white;
left: 0px;
text-shadow:0 0 2px #00c4ff;
align-self: auto;
}
.o
.tes-mention-message { color: red; }
.on-black-scroll {
padding-left: 16px;
box-sizing: border-box;
overflow-x: hidden;
overflow-y: hidden;
}
.message {
font-size: 15px;
color: #eee;
white-space: pre-line;
word-wrap: break-word;
position: relative;
right: 0px;
top:1px;
}
`;
if (cssName == "chatlogCSS" || cssName == null) {
chatlogCSShtml = `
<style id="chatlogCSS" scope="tinychat-chatlog">
/* HERE IS THE OTHER GRABBER */
#tes-chat-grabber {
position: absolute;
top: 88px;
right: 50%;tinychat-chatlog *
background: white;
width: 100px;
height: 20px;
border: #313131 1px solid;
border-radius: 19px;
text-align: center;
color: #b4c1c5;
cursor: pointer;
transition: all .3s ease-in-out;
background-color:a#3131317;
}
.tes-chatCollapsed #tes-chat-grabber {
top: 0px;
background: #111111;
border-top: 0;
z-index: 9;
border-radius: 11px;
line-height: 15px;
border-top-left-radius: 0;
border-top-right-radius: 0;
height: 15px;
}
.tes-chatCollapsed:hover #tes-chat-grabber {
height: 29px;
line-height: 43px;
}
:host, #chat-wrapper.tes-chatCollapsed {
}
/* END */
#chat-instant > a > .avatar, #chat-content > .message > a > .avatar {
display: block;
margin-left: auto;
margin-right: auto;
max-height: none;
max-width: 100%;
align-self: auto;
}
#chat-instant {
position: relative;
height: 0;
min-height: 0;
width: 100%;
padding-left: 106px;
box-sizing: border-box;
background-color:#10101000;
overflow: hidden;
}
#chat-instant > .nickname {
white-space: nowrap;
font-size: 1rem;
font-weight: 700;
color:#53b6ef;
line-height: 44px;
overflow: hidden;
text-overflow: ellipsis;
cursor: default;
text-shadow: 0 0 1px white;
}
#chat-instant > a > .status-icon, #chat-content > .message > a > .status-icon {
position: relative;
height: 0;
min-height: 0;
width: 100%;
font-size: 1rem;
padding-left: 110px;
box-sizing: border-box;
background-color: #111111;
overflow: hidden;
}
#chat-content > .message.system > .content {
font-size: 12px;
font-weight: 600;
color: #00ff00;
margin:10px;
}
#chat-wrapper {
border-left: 0px solid rgba(0, 0, 0, .1);
box-sizing: border-box;
background-color: #111111;
transition: .2s;
}
#chat-content > .message {
padding-bottom: 0;
padding-top: 0!important;
margin-bottom: 5px;
min-height: 0px!important;
color: #ff0000 !important;
}
/*
#chat-content > .message:hover {
background: #00000008;
color: #ffffff;
}
*/
#chat-content > .message.common {
margin-bottom: 3px;
margin-right: 20px;
padding-bottom: 9px;
color: #ffffff00 !important;
background-color: #ffffff00;
border: 0px solid;
border-radius: 0px;
}
#chat-content > .message.system {
box-sizing: border-box;
background-color: #ffffff00;
cursor: default;
border: 1px solid #ffffff00;
color: #ffffff00;
border-radius:0px;
padding: 0px 0px;
}
}
#chat-content.tes-notif-off > .message.system {
display: none;
}
#chat-content.tes-notif-off > .message.system.dontHide {
display: initial;
}
#chat-instant > a:first-child,
#chat-content > .message > a:first-child {
top: auto;
background-color: #fff0;
}
#chat-position #input:before {
background: none;
}
#input {
position: relative;
display: block;
padding-top: 10px;
margin-right: 35px;
overflow-wrap: break-word;
}
#input > textarea{
overflow-y:auto;
background-color:#333333bd;
border:2px solid ##111111;
color:#ffffff;
}
#input #input-unread.show {
right: 0;
opacity: 0;
}
#input-unread {
position: absolute;
display: inline-block;
height: 3rem;
top: -11%;
width: 15rem;
left: 7px;
border-radius: 0px;
font-size: 12px;
line-height: 24px;
white-space: nowrap;
opacity: 0;
cursor: pointer;
transition: .2s;
}
#input:after {
content: "";
position: absolute;
display: block;
top: 10px;
left: 0;
right: 0;
bottom: 0;
border: 0px solid #cbcfcf;
border-radius: 0px;
box-sizing: border-box;
pointer-events: none;
}
#input > .waiting {
position: absolute;
width: auto;
top: 10px;
bottom: 0;
left: 0;
right: 0;
border-radius: 0px;
background-color: #e9eaea;
z-index: 1;
opacity: 0;
visibility: hidden;
transition: .2s;
}
#chat-position {
position: absolute;
display: flex;
flex-direction: column;
align-items: stretch;
top: 50px;
left: -47px;
right: 50px;
bottom: 30px;
width: 90%;
padding: 0 0 0 80px;
}
#chat-wider {
font-size: 0;
background-color: #313131;
border: 1px solid #eee;
border-radius: 0px;
height:9px;
top:42px;
cursor: pointer;
wrapper z-index: 1;
padding-top: 20px;
width:20px;
color: #3b3b3b;
position: absolute;
top: 8%;
left:10px;
}
#chat-wider.active + #chat-wrapper {
min-width: 20px;
width;16px
height:14px;
padding-top: 10px;;
}
#chat-wider.active {
border-radius: 0px 0 0 0px;
width: 16px;
height: 10px;
padding-top: 13px;
top: 66px;
left: 2px;
}
#chat-wider:before {
transform: rotate(180deg);
-webkit-transform: rotate(180deg);
}
#chat-wider.active:before {
transform: rotate(360deg);
-webkit-transform: rotate(360deg);
}
#chat-wider:hover {
background: #333;
color: #5c5c5c;
cursor: pointer;'
border:0px;
}
#chat-instant > a > .avatar,
#chat-content > .message > a > .avatar {
display: block;
margin-left: auto;
margin-right: auto;
max-height: none;
max-width: 100%;
align-self: auto;
overflow: hidden;
}
#abovefiller
{ border-radius: unset;}
#timestamp {
font-size: 0.6rem;
color: #ffffff;
float: right;
position: absolute;
right: -20px;
top: -8px;
padding-right: 21px;
font-weight: 1000;
text-shadow: 0 0 1px #00c4ff;
}
#chat-content > .message > .nickname {
overflow: initial;
line-height: initial;
position: relative;
align-self: auto;
right: 4px;
top: -2px;
font-size: 0.9rem;
color:#00c4ff;
text-shadow:0 0 2px #00c4ff;
}
#chat-content div.message.common:last-of-type {
margin-bottom: 10px;
margin-right: 20px;
}
#chat-instant-button.tes-loading {
border: 0;
font-size: x-large;
animation: spin .5s linear infinite;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
#tes-chatlogDisplay {
display: none;
position: fixed;
top: 97px;
left: 100px;
width: 100%;
height: 80%;
z-index: 7;
cursor: default;
}
#tes-chatlogDisplay.show { display: unset; }
#tes-chatlogDisplay * {
float: left;
height: 100%;
}
#tes-chatlogDisplay textarea {
transition: .2s;
opacity: 0;
border-radius: 0px;
width: 90%;
}
#tes-chatlogDisplay textarea.show {
opacity: .8;
}
#tes-chatlogDisplay textarea.show {
background-color:#111111;
color:#fff;
}
#tes-chatlogDisplay #close {
opacity: 0;
transition: .2s;
width: 40px;
background: #41b7ef;
height: 40px;
border-top-right-radius:0px;
border-bottom-right-radius: 0px;
position: relative;
color: white;
top: 40%;
vertical-align: middle;
font-size: 22px;
text-align: center;
padding-top: 8px;
cursor: pointer;
}
#tes-chatlogDisplay #close:hover {
background: #72caf3;
}
#tes-chatlogDisplay #close.show {
opacity: 1;
}
#tes-chatlogButtons {
position: absolute;
top: 2px;
left: 6px;
font: 0.9rem monospace;
}
.tes-chatlogBut {
padding: 2px;
border-radius: 4px;
border: silver 1px solid;
color: silver;
transition: .3s;
width: 2rem;
height: 1.5rem;
overflow: hidden;
cursor: pointer;
opacity: 1;
float: left;
box-shadow: 0 0 2.1px 1px white;
}
}
.tes-chatlogBut ~ .tes-chatlogBut { margin-left: 2px; }
.tes-chatlogBut .icon { width: auto; }
.tes-chatlogBut .label {
width: 0;
opacity: 0;
overflow: hidden;
transition: .3s;
display: block;
position: relative;
top: -2px;
left: 28px;
font: 11px sans-serif;
color: white;
}
.tes-chatlogBut:hover .label {
opacity: 1;
width: 8rem;
color:white;
}
.tes-chatboxPM #tes-chatlogSave {
opacity: 0;
z-index: -5;
}
#tes-chatlogSave .icon {
/* transform: scaleY(.6); */
position: absolute;
top: -1px;
left: 4px;
font-size: 1.3rem;
}
#tes-chatlogSave .icon svg {
width: 19px;
height: 19px;
position: relative;
left: -3px;
}
#tes-chatlogSave .icon path {
transform: scale(.08) scaleX(1.2) rotate(180deg);
10%: 10px
height:;
fill: #ccc;
transform-origin: 11px 12px;
}
#tes-chatlogSave:hover .icon path { fill: lightblue; }
#tes-chatlogSave:hover { width: 6.3em; }
#tes-chatlogSave:hover .label { width: 4.3em; }
#tes-chatlogView .icon {
font-size: 1.4em;
top: 0px;
position: absolute;
}
#tes-chatlogView:hover { width: 6.5rem; color:white;}
/*** --- COLORSSSSSSS --- ***/
/*** --- PINKKK --- ***/
.tes-pinkmode #input > textarea{
overflow-y:auto;
background-color:#ffadc1;
border:1px solid #ffadc1;
color:#ffffff;
}
.tes-pinkmode #chat-wider:before {
background-color: #ffadc1;
border-color: #ffadc1 !important;
color:#00ff00;
}
#chat-wrapper.tes-pinkmode {
background-color:#ef54b2;
}
.tes-pinkmode #chat-content > .message.common {
border-color: #ef54b2;
background-color: #ef54b2;
}
.tes-pinkmode.message {color:#000000;}
#chat-wider.tes-pinkmode {
border: 1px solid #fdfdfd;
background-color: #fb2db0;
color: #ffffff;
box-shadow: 0 0 2px 1px white;
}
/*** --- GREENNN --- ***/
.tes-greenmode #input > textarea{
overflow-y:auto;
background-color:#00570a;
border:1px solid #00570a;
color:#000000;
}
.tes-greenmode #chat-wider:before {
background-color: #00570a;
border-color: #00570a !important;
color:#00ff00;
}
#chat-wrapper.tes-greenmode {
background-color: #042500;
}
.tes-greenmode #chat-content > .message.common {
border-color: #042500;
background-color: #042500;
}
.tes-greenmode.message {color:#000000;}
#chat-wider.tes-greenmode {
border: 1px solid #00570a;
background-color:#042500;
color: #042500;
}
/*** --- BLUEEE --- ***/
.tes-bluemode #input > textarea{
overflow-y:auto;
background-color:#2a388b;
border:1px solid #2a388b;
color:#000000;
}
.tes-bluemode #chat-wider:before {
background-color: #2a388b;
border-color: #2a388b !important;
color:#00ff00;
}
#chat-wrapper.tes-bluemode {
background-color: #111949;
}
.tes-bluemode #chat-content > .message.common {
border-color: #111949;
background-color: #111949;
}
.tes-bluemode.message {color:#000000;}
#chat-wider.tes-bluemode {
border: 1px solid #2a388b;
background-color:#111949;
color: #111949;
}
/*** --- PURPLEEE --- ***/
.tes-purplemode #input > textarea{
overflow-y:auto;
background-color:#BF8FE5;
border:1px solid #BF8FE5;
color:#000000;
}
.tes-purplemode #chat-wider:before {
background-color: #BF8FE5;
border-color: #BF8FE5 !important;
color:#00ff00;
}
#chat-wrapper.tes-purplemode {
background-color: #9168b2;
}
.tes-purplemode #chat-content > .message.common {
border-color: #9168b2;
background-color: #9168b2;
}
.tes-purplemode.message {color:#000000;}
#chat-wider.tes-purplemode {
border: 1px solid #BF8FE5;
background-color:#9168b2;
color: #9168b2;
}
</style>
`;
chatlogCSS.insertAdjacentHTML(insertPosition, chatlogCSShtml);
}
if (cssName == "sidemenuCSS" || cssName == null) {
sidemenuCSShtml = `
<style id="sidemenuCSS" scope="tinychat-sidemenu">
#sidemenu {
position: fixed;
min-width: 188px;
max-width: 170px;
left: 0rem;
background-color: #191919;
background-position: right top;
background-size: 0%;
border-right: 1px solid #31313100;
z-index: 3;
align-self: auto;
}
#sidemenu-content {
height: 86%;
padding-top: 3px;
box-sizing: border-box;
padding-left: 0px;
overflow-x: hidden;
overflow-y: auto;
background-color:#0000000f;
border-right:0px solid;
text-shadow: 0 0 2px #ffffff;
}
#user-info {
position: absolute;
height: 40px;
width: 70%;
bottom: 0;
left: 0;
padding: 20px 30px 20px 20px;
border-top: 1px solid rgba(0, 0, 0, .1);
box-sizing: border-box;
background-color: #2a2a2a;
display: none; visibility:hidden;
}
@media screen and (max-width: 1000px) {
#sidemenu {
left: -158px;
}
}
#live-directory-wrapper {
padding: 0;
}
#top-buttons-wrapper {
padding: 0;
}
.logged-in #user-info {
padding: 0;
height: auto;
text-align: center;
visibility: hidden;
display: none;
}
#user-info button { opacity: .8; }
#user-info:hover button { opacity: 1; }
.logged-in #user-info > a { display: none; visibility:hidden;}
@media screen and (min-width: 1000px) {
#live-directory {
background-color:#111111;
border-radius:0px;
height: 25px;
line-height: 25px;
font-size: 13px;
opacity: .8;
margin-left: 4px;
width: 155px;
background-color: #111111;
border: 0px solid #31313100;
text-shadow: 0 0 2px white;
box-shadow: 0 0 5px 2px white;
}
#upgrade {
height: 0px;
line-height: 0px;
font-size: 13px;
opacity: .8;
#live-directory:active {
background-color: #7ce5ecba;
box-shadow: 0 0 3px 0px #61aeb3;
}
}
#live-directory:before {
height: 8px;
width: 8px;
top: 0px;
}
#upgrade {
margin-top: 0px;
visibility: hidden;
display: none;
}
#live-directory:hover, #upgrade:hover {
opacity: 1;
}
}
#sidemenu.tes-sidemenuCollapsed {
min-width: 0px;
max-width: 0px;
border:0px;
}
.tes-sidemenuCollapsed #user-info { display: none; }
.tes-sidemenuCollapsed #user-info { display: none; }
#tes-sidemenu-grabber {
position: absolute;
top: 7rem;
left: 10.4rem;
z-index: 3;
height: 20px;
padding-top: 19px;
width: 20px;
text-align: center;
border: #ffffff 1px solid;
}
#tes-sidemenu-grabber:before {
content: '';
position: absolute;
display: block;
height: 0;
width: 0;
top: 1.2rem;
left: 0.7rem;
margin: -4px 0 0 -2px;
border-width: 4px 4px 4px 0;
border-style: solid;
border-color: transparent #bcc2c2;
transition: .8s;
}
#tes-sidemenu-grabber:hover {
background: #333;
color: #5c5c5c;
cursor: pointer;
}
.tes-sidemenuCollapsed #tes-sidemenu-grabber{
border-radius: 0 10px 10px 0;
right: 10px;
left: -4px;
}
#sidemenu.tes-nightmode,
.tes-nightmode #sidemenu-content::-webkit-scrollbar-track {
background: #191919;
}
.tes-nightmode #tes-sidemenu-grabber {
background: #141414;
color: #3b3b3b;
}
.tes-nightmode #tes-sidemenu-grabber:hover {
background: #333;
color: #5c5c5c;
}
.tes-sidemenuCollapsed #tes-sidemenu-grabber:before {
transform: rotate(180deg);
-webkit-transform: rotate(180deg);
}
.tes-nightmode #user-info { background: black; }
.tes-nightmode #user-info > button {
background: #e76bb6;
color: #e76bb6;
}
.tes-nightmode #user-info > button:hover {
background: #0080a3;
color: white;
}
.tes-nightmode #sidemenu-content::-webkit-scrollbar-thumb {
border: 1px solid #191919;
width:50%;
background-color: #111;
}
.tes-nightmode #sidemenu-content::-webkit-scrollbar {
width: 5px;
}
/*** --- COLORSSSSSSS --- ***/
/*** --- PINKKK --- ***/
.tes-pinkmode #tes-sidemenu-grabber:before {
top: 1.2rem;
left: 0.7rem;
}
#sidemenu.tes-pinkmode > #tes-sidemenu-grabber {
background-color: #fb2db0;
color: #ffadc1;
border-color: #ffffff;
box-shadow: 0 0 3px 0.9px white;
}
#sidemenu.tes-pinkmode {
background-color:#ef54b2;
border-right:1px solid #ffd1dc;
}
#sidemenu.tes-pinkmode > #sidemenu-content {
background-color:#ef54b2;
}
@media screen and (min-width: 1000px) {
.tes-pinkmode #live-directory {
height: 25px;
line-height: 25px;
font-size: 13px;
opacity: .8;
margin-left:10px;
width:175px;
background-color:#fe24b0;
border:1px solid #ffadc1;
}
#room-header.tes-pinkmode, .tes-pinkmode #tes-header-grabber {
background-color:#ffadc1;
box-shadow: 0 0 3px 1px white;
position: absolute;
top: 7.1rem;
right: 14.9rem;
}
.tes-pinkmode #tes-sidemenu-grabber{
background-color:#ffd1dc;
}
#chat-wrapper.tes-pinkmode { background-color:#ffd1dc;}
/*** --- GREENNN --- ***/
.tes-greenmode #tes-sidemenu-grabber:before {
border-color: transparent #00570a;
}
#sidemenu.tes-greenmode > #tes-sidemenu-grabber {
background-color: #042500;
color: #00570a;
border-color:#00570a;
}
#sidemenu.tes-greenmode {
background-color: #00500d;
border-right:1px solid #042500;
}
#sidemenu.tes-greenmode > #sidemenu-content {
background-color: #00500d;
}
@media screen and (min-width: 1000px) {
.tes-greenmode #live-directory {
height: 25px;
line-height: 25px;
font-size: 13px;
opacity: .8;
margin-left:10px;
width:175px;
background-color:#042500;
border:1px solid #042500;
}
#room-header.tes-greenmode, .tes-greenmode #tes-header-grabber {
background-color:#00570a;
}
.tes-greenmode #tes-sidemenu-grabber{
background-color:#042500;
}
#chat-wrapper.tes-greenmode { background-color:#042500;}
/*** --- BLUEEE --- ***/
.tes-bluemode #tes-sidemenu-grabber:before {
border-color: transparent #2a388b;
}
#sidemenu.tes-bluemode > #tes-sidemenu-grabber {
background-color: #111949;
color: #2a388b;
border-color:#2a388b;
}
#sidemenu.tes-bluemode {
background-color: #2a388b;
border-right:1px solid #111949;
}
#sidemenu.tes-bluemode > #sidemenu-content {
background-color: #2a388b;
}
@media screen and (min-width: 1000px) {
.tes-bluemode #live-directory {
height: 25px;
line-height: 25px;
font-size: 13px;
opacity: .8;
margin-left:10px;
width:175px;
background-color:#111949;
border:1px solid #111949;
}
#room-header.tes-bluemode, .tes-bluemode #tes-header-grabber {
background-color:#2a388b;
}
.tes-bluemode #tes-sidemenu-grabber{
background-color:#111949;
}
#chat-wrapper.tes-bluemode { background-color:#111949;}
/*** --- PURPLEEE --- ***/
.tes-purplemode #tes-sidemenu-grabber:before {
border-color: transparent #BF8FE5;
}
#sidemenu.tes-purplemode > #tes-sidemenu-grabber {
background-color: #9168b2;
color: #BF8FE5;
border-color:#BF8FE5;
}
#sidemenu.tes-purplemode {
background-color: #BF8FE5;
border-right:1px solid #9168b2;
}
#sidemenu.tes-purplemode > #sidemenu-content {
background-color: #BF8FE5;
}
@media screen and (min-width: 1000px) {
.tes-purplemode #live-directory {
height: 25px;
line-height: 25px;
font-size: 13px;
opacity: .8;
margin-left:10px;
width:175px;
background-color:#9168b2;
border:1px solid #9168b2;
}
#room-header.tes-purplemode, .tes-purplemode #tes-header-grabber {
border: #ffffff 1px solid;
background-color: #9168b2;
box-shadow: 0 0 1px 1px white;
}
.tes-purplemode #tes-sidemenu-grabber{
background-color:#9168b2;
}
#chat-wrapper.tes-purplemode { background-color:#9168b2;}
</style>
`;
sidemenuCSS.insertAdjacentHTML(insertPosition, sidemenuCSShtml);
}
if (cssName == "videomoderationCSS" || cssName == null) {
videomoderationCSShtml = `
<style id="videomoderationCSS" scope="tc-video-moderation">
#moderatorlist {
padding-left: 0;
z-index: 7;
max-height:22px;
}
#moderatorlist:hover {
position: absolute;
background: white;
z-index: 1000;
width: 300px;
min-height: 155px;
flex-direction: column;
position: absolute;
background: #111;
z-index: 1000;
width: 350px;
max-height: fit-content!important;
left: 15px;
border-radius: 13px;
border: #fff 1px solid;
top: 30px;
left:0px;
}
#moderatorlist:after {
top: 2px;
right: 1px;
}
#moderatorlist:hover #header {
height: unset;
top: unset;
padding-left:0 !important;
}
#moderatorlist > #header {
top: 2px !important;
width: 100%;
height:20px;
}
#moderatorlist > #header > span > button {
border-radius:10px;
width: unset !important;
height:unset !important;
background-color: unset;
}
#moderatorlist.tes-nightmode > #header > span > button {
background: var(--nightmodeBlack-bgcolor);
}
#moderatorlist.tes-nightmode:hover {
border-color: #333;
}
.video:after{border:0px;}
</style>
`;
videomoderationCSS.insertAdjacentHTML(insertPosition, videomoderationCSShtml);
}
if (cssName == "webappCSS" || cssName == null) {
webappCSShtml = `
<style id="webappCSS" scope="tinychat-webrtc-app">
.input-menu{display:none;}
#room {
padding: 0;
padding-left: 80px;
}
#room.tes-sidemenuCollapsed { margin-left: -21px;width: 100%;
}
@media screen and (max-width: 1000px) {
:host > #room {
padding-left: 70px;
}
}
@media screen and (max-width: 600px) {
:host > #room {
padding-left: 0;
}
}
#room-content.tes-chatbelow {
flex-direction: row !important;
margin-left: 150px !important;
margin-top: 10px !important;
margin-bottom: 2px !important;
background-color: rgba(0,0,0,.3);
}
</style>
`;
webappCSS.insertAdjacentHTML(insertPosition, webappCSShtml);
}
}
function injectElements() {
headerGrabberParElem = titleElem.querySelector("#room-header");
headerGrabberParElem.insertAdjacentHTML("beforeend", `<div id="tes-header-grabber"></div>`);
headerGrabberElem = headerGrabberParElem.querySelector("#tes-header-grabber");
headerGrabberElem.addEventListener("click", headerGrabber);
sidemenuOverlayElem = bodyElem.querySelector("#menu-icon");
sidemenuOverlayElem.addEventListener("click", function(){sidemenuOverlayElem.classList.toggle("expanded");});
chatlogButtonsHTML = `
<div id="tes-chatlogButtons">
<div id="tes-chatlogSave" class="tes-chatlogBut">
<span class="icon">📁
</svg>
</span><!-- ? -->
<span class="label">Save Logs</span>
</div>
<div id="tes-chatlogView" class="tes-chatlogBut">
<span class="icon">📜</span>
<span class="label">Chat Logs</span>
</div>
<div id="tes-chatlogDisplay">
<textarea spellcheck="false"></textarea>
<div id="close">X</div>
</div>
</div>`;
selectAllButton = chatlogElem.querySelector("#chat-wrapper").insertAdjacentHTML("afterbegin", chatlogButtonsHTML);
chatlogElem.querySelector("#tes-chatlogSave").addEventListener("click", function(){copyChatlog("download")} );
chatlogElem.querySelector("#tes-chatlogView").addEventListener("click", function(){copyChatlog("view")} );
chatlogElem.querySelector("#tes-chatlogDisplay #close").addEventListener("click", function(){copyChatlog("close")} );
if (!isPaidAccount) {
sidemenuGrabberParElem = sidemenuElem.querySelector("#sidemenu");
sidemenuGrabberElem = document.createElement("div");
sidemenuGrabberElem.setAttribute("id", "tes-sidemenu-grabber");
sidemenuGrabberElem.innerHTML = "";
sidemenuGrabberElem.addEventListener("click", sidemenuGrabber);
sidemenuGrabberParElem.appendChild(sidemenuGrabberElem);
sidemenuGrabberElem = sidemenuElem.querySelector("#tes-sidemenu-grabber");
}
}
function sidemenuGrabber() {
sidemenuGrabberParElem.classList.toggle("tes-sidemenuCollapsed");
sidemenuGrabberParElem.classList.contains("tes-sidemenuCollapsed") ? sidemenuGrabberElem.innerHTML = "" : sidemenuGrabberElem.innerHTML = "";
userlistElem.querySelector("#userlist").classList.toggle("tes-sidemenuCollapsed");
videolistElem.querySelector("#videolist").classList.toggle("tes-sidemenuCollapsed");
webappElem.querySelector("#room").classList.toggle("tes-sidemenuCollapsed");
bodyElem.classList.toggle("tes-sidemenuCollapsed");
}
function chatlogGrabber() {
chatlogGrabberParElem.classList.toggle("tes-chatCollapsed");
chatlogGrabberParElem.classList.contains("tes-chatCollapsed") ? chatlogGrabberElem.innerHTML = "?" : chatlogGrabberElem.innerHTML = "?";
}
function headerGrabber() {
headerGrabberParElem.classList.toggle("tes-headerCollapsed");
headerGrabberParElem.classList.contains("tes-headerCollapsed") ? headerGrabberElem.innerHTML = "" : headerGrabberElem.innerHTML = "";
}
!browserFirefox ? injectElements() : void(0);
var scrollbox = chatlogElem.querySelector("#chat");
var unreadbubble = chatlogElem.querySelector("#input-unread");
var autoScrollStatus = true;
function updateScroll() {
scrollbox.scrollTop = scrollbox.scrollHeight;
scrollbox.scrollTop = scrollbox.scrollTop + 5;
}
function userHasScrolled(e) {
var scrollwheelAmount = e.deltaY;
if (scrollwheelAmount < 0) {
autoScrollStatus = false;
}
if (autoScrollStatus === false && scrollbox.scrollHeight - scrollbox.scrollTop == scrollbox.offsetHeight) {
autoScrollStatus = true;
}
}
function newMessageAdded() {
if (autoScrollStatus === true && settingsQuick["Autoscroll"]) { updateScroll(); }
timestampAdd();
messageParser();
}
function userContextmenuUpdated() {
var elemBottom = 0;
var topPos = userContextmenuCSS.getBoundingClientRect().top;
var elemBottom = topPos + userContextmenuCSS.offsetHeight;
if (elemBottom > (window.innerHeight - 82)) {
// userContextmenuCSS.style.top = (userContextmenuCSS.style.top - userlistElem.querySelector("#userlist").scrollTop - 200) + "px";
// userContextmenuCSS.style.top = (userlistElem.querySelector("#userlist").scrollTop - window.innerHeight) + "px";
userContextmenuCSS.style.top = (window.innerHeight - 82 - userContextmenuCSS.offsetHeight - 15) + "px";
// console.log("Change: " + userContextmenuCSS.style.top);
}
// console.log("elemBottom: " + elemBottom + ". Max: " + (window.innerHeight - 82) + ". offsetHeight: " + userContextmenuCSS.offsetHeight + ". New top: " + (window.innerHeight - 82 - userContextmenuCSS.offsetHeight));
}
function messageParserCheckCSS() {
var messages = chatlogElem.querySelectorAll("#chat-content .message")
for (i=0; i < messages.length; i++) {
var tcMessageHtmlElem = messages[i].querySelector("tc-message-html").shadowRoot;
if (!tcMessageHtmlElem.querySelector("#messageCSS")) tcMessageHtmlElem.appendChild(messageParserAddCSS());
if (settingsQuick["NightMode"]) tcMessageHtmlElem.querySelector("#html").classList.add("tes-nightmode");
if (settingsQuick["PinkMode"]) tcMessageHtmlElem.querySelector("#html").classList.add("tes-pinkmode");
}
}
function messageParserAddCSS(elem=null) {
var node = document.createElement("style");
var textnode = document.createTextNode(messageCSS);
node.appendChild(textnode);
node.setAttribute("id", "messageCSS");
if (elem) { elem.appendChild(node); }
else { return node; }
}
messageCount = 0;
function messageParser() {
latestMessageElem = chatlogElem.querySelector("#chat-content div.message:last-of-type");
var typeSystem = false;
if (latestMessageElem != null) {
if (latestMessageElem.classList.contains("system")) typeSystem = true;
latestMessageElem.setAttribute("id", "msg-"+messageCount);
messageCount++;
tcMessageHtmlElem = latestMessageElem.querySelector("tc-message-html").shadowRoot;
latestMessageContentElem = tcMessageHtmlElem.querySelector("#html");
if (!browserFirefox) {
if (!tcMessageHtmlElem.querySelector("#messageCSS")) {
messageParserAddCSS(tcMessageHtmlElem);
}
if (settingsQuick["NightMode"]) latestMessageContentElem.classList.add("tes-nightmode");
if (settingsQuick["PinkMode"]) latestMessageContentElem.classList.add("tes-pinkmode");
}
latestMessageContent = latestMessageContentElem.innerHTML;
latestMessageContent.includes(" banned ") || latestMessageContent.includes(" kicked ") ? latestMessageElem.classList.add("dontHide") : void(0);
if (!browserFirefox && settingsQuick["MentionsMonitor"]) {
for (i=0; i < settingMentions.length; i++) {
if (latestMessageContent.toLowerCase().includes(settingMentions[i].toLowerCase())) {
latestMessageContentElem.classList.add("tes-mention-message");
audioPop.play();
break;
}
}
}
}
}
var messagesMO = new MutationObserver(function (e) {
if (e[0].addedNodes) newMessageAdded();
});
messagesMO.observe(chatlogElem.querySelector("#chat-content"), { childList: true });
var camsMO = new MutationObserver(function (e) {
if (e[0].addedNodes) newCamAdded();
});
camsMO.observe(videolistElem.querySelector(".videos-items:last-child"), { childList: true });
var userContextmenuMO = new MutationObserver(function (e) {
if (e[0].addedNodes) userContextmenuUpdated();
});
userContextmenuMO.observe(userContextmenuCSS, { attributes: true });
var chatTextboxMO = new MutationObserver(function (e) {
if (e[0].addedNodes) chatboxSwitch();
});
chatTextboxMO.observe(chatlogElem.querySelector("#chat-instant"), { attributes: true, attributeFilter: ['class'], childList: false, characterData: false });
var userlistMO = new MutationObserver(function (e) {
if (e[0].addedNodes) newUserAdded();
});
userlistMO.observe(userlistElem.querySelector("#userlist"), { childList: true });
var scrollboxEvent = scrollbox.addEventListener("wheel", userHasScrolled);
var unreadbubble = unreadbubble.addEventListener("click", function(){autoScrollStatus = true;} );
function chatboxSwitch() { messageParserCheckCSS(); }
function timestampAdd() {
var queryString = messageQueryString + ".common:last-of-type .nickname";
var SHOW_SECONDS = true;
var date = new Date();
var hours = date.getHours();
var minutes = date.getMinutes().toString();
var secs = date.getSeconds().toString();
if (hours > 11) {
hours = (hours % 12 || 12);
var period = "pm";
}
else { var period = "am"; }
if (hours == "0") { hours = "12"; }
if (minutes == "0") { minutes = "00"; }
if (minutes.length == 1) { minutes = "0" + minutes; }
if (secs.length == 1) { secs = "0" + secs; }
if (SHOW_SECONDS == true) {
var timestamp = hours + ":" + minutes + ":" + secs + "" + period;
}
else {
var timestamp = hours + ":" + minutes + period;
}
if (chatlogElem.querySelector(queryString) != null) {
var recentMsgNickname = chatlogElem.querySelector(queryString);
recentMsgNickname.insertAdjacentHTML("afterend", "<span id='timestamp'> " + timestamp + "</span>");
}
}
var userCount = 0;
function newUserAdded() {
if (!userlistElem.querySelector("#userlist .list-item:last-of-type")) return;
var latestUserElem = userlistElem.querySelector("#userlist .list-item:last-of-type");
var lastestUserNick = latestUserElem.querySelector(".nickname").innerHTML;
var usersElems = userlistElem.querySelectorAll("#userlist .list-item");
userCount = usersElems.length;
users = [];
for (i=0; i < usersElems.length; i++) {
users += usersElems[i].querySelector(".nickname").innerHTML;
}
if (!userlistElem.querySelector("#tes-userCount")) {
userCountParElem = userlistElem.querySelector("#header > span");
userCountElem = document.createElement("span");
userCountElem.setAttribute("id", "tes-userCount");
userCountElem.innerHTML = "(" + userCount + ")";
userCountParElem.appendChild(userCountElem);
userCountElem = userlistElem.querySelector("#tes-userCount");
}
else {
userCountElem.innerHTML = "(" + userCount + ")";
}
}
camsMaxed = null;
function newCamAdded() {
var queryString = ".videos-items:last-child > .js-video"
if (videolistElem.querySelector(queryString)) var camElems = videolistElem.querySelectorAll(queryString);
else return;
camsCount = 0;
for (i=0; i < camElems.length; i++) {
camsCount = i + 1;
var camItem = camElems[i].querySelector("tc-video-item").shadowRoot;
var camItemCSS = camItem.querySelector(".video");
if (settingsQuick["NightMode"]) camItemCSS.classList.add("tes-nightmode");
else camItemCSS.classList.remove("tes-nightmode");
camItemCSShtml = `
<style id="camItemCSS">
.icon-tes-max {
position: absolute;
top: -40%;
right: 0;
z-index: 9;
background: none;
border: 0;
}
.icon-tes-max:hover {
cursor: pointer;
}
.icon-tes-max path {
fill: #f07629;
}
.video:hover .icon-tes-max {
top: 50%;
/*left: 48%;*/
transition: top .2s ease .2s,
left .2s ease .2s,
right .2s ease .2s,
opacity .2s;
}
.tes-nightmode.video:after {
border:5px solid rgba(0,0,0,.06);
}
.tes-pinkmode.video:after {
border:5px solid # rgba(0,0,0,.06) !important;
}
.tes-greenmode.video:after {
border:5px solid # rgba(0,0,0,.06) !important;
}
.tes-bluemode.video:after {
border:5px solid rgba(0,0,0,.06) !important;
}
.tes-purplemode.video:after {
border:5px solid rgba(0,0,0,.06) !important;
}
.icon-resize > svg {
top: 3px;
left: 3px;
display: none;
}
</style>
`;
if (!camItem.querySelector("#camItemCSS")) camItemCSS.insertAdjacentHTML("afterbegin", camItemCSShtml);
var camName = camItem.querySelector(".nickname").getAttribute("title");
camElems[i].setAttribute("id", "camUser-"+camName);
// Cam maxing
try {
if (camItem.querySelector(".icon-tes-max")) {
var maxbutton = camItem.querySelector(".icon-tes-max");
maxbutton.parentNode.removeChild(maxbutton);
}
var camMaxButtonHtml = `
<button class="icon-tes-max" id="maxbutton-` + camName + `">
<svg width="18" height="18" viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg">
<path d="M14.37 12.95l3.335 3.336a1.003 1.003 0 1 1-1.42 1.42L12.95 14.37a8.028 8.028 0 1 1 1.42-1.42zm-6.342 1.1a6.02 6.02 0 1 0 0-12.042 6.02 6.02 0 0 0 0 12.042zM6.012 9.032a.996.996 0 0 1-.994-1.004c0-.554.452-1.003.994-1.003h4.033c.55 0 .994.445.994 1.003 0 .555-.454 1.004-.995 1.004H6.012z" fill-rule="evenodd"></path>
<path d="M0 .99C0 .445.444 0 1 0a1 1 0 0 1 1 .99v4.02C2 5.555 1.556 6 1 6a1 1 0 0 1-1-.99V.99z" transform="translate(7 5)" fill-rule="evenodd"></path></svg>
</button>`;
camItem.querySelector(".icon-resize").insertAdjacentHTML("beforebegin", camMaxButtonHtml);
var maxCamVar = function(maxCamVarArg){ maximizeCam(maxCamVarArg); };
camItem.querySelector("#maxbutton-"+camName).addEventListener("click", maxCamVar.bind(this, camName));
if (camsMaxed == camName) {
camElems[i].classList.add("tes-maxedCam");
camElems[i].parentElement.classList.add("tes-max");
}
if (!videolistElem.querySelector(".tes-maxedCam")) camElems[i].parentElement.classList.remove("tes-max");
camMaxCSShtml = `
<style id="camMaxCSS">
.tes-max .js-video {
width: 10%!important;
z-index: 1;
}
.tes-leftcam .tes-max .js-video {
float: right;
order: 2;
}
.tes-leftcam .tes-max .tes-maxedCam {
float: left;
order: 1;
}
div[data-video-count="5"] .tes-max .js-video:not(.tes-maxedCam),
div[data-video-count="6"] .tes-max .js-video:not(.tes-maxedCam),
div[data-video-count="7"] .tes-max .js-video:not(.tes-maxedCam)
{ width: 19%!important; }
.tes-max.tes-camCount2 .js-video { width: 10%!important; }
.tes-max.tes-camCount10-11 .js-video { width:8%!important; }
.tes-max.tes-camCount12 .js-video { width: 8%!important; }
:not(.hidden) + .tes-max.tes-camCount12 .js-video,
:not(.hidden) + .tes-max.tes-camCount10-11 .js-video,
:not(.hidden) + .tes-max .js-video
{ width: 14%!important; }
:not(.hidden) + .tes-max.tes-camCount2 .js-video { width: 10%!important; }
.tes-max .js-video.tes-maxedCam,
:not(.hidden) + .tes-max .js-video.tes-maxedCam { width: 65%!important; }
@media screen and (max-width: 100px) {
.tes-max .js-video { width: 10%!important; }
.tes-max.tes-camCount2 .js-video { width: 10%!important; }
.tes-max.tes-camCount10-11 .js-video { width: 0%!important; }
.tes-max.tes-camCount12 .js-video { width: 0%!important; }
.tes-max .js-video.tes-maxedCam,
:not(.hidden) + .tes-max .js-video.tes-maxedCam { width: 0%!important; }
</style>
`;
if (videolistCSS.querySelector("#camMaxCSS")) {
var maxcss = videolistCSS.querySelector("#camMaxCSS");
maxcss.parentNode.removeChild(maxcss);
}
videolistCSS.insertAdjacentHTML("beforeend", camMaxCSShtml);
}
catch(e) { console.log("TES ERROR newCamAdded: " + e.message); }
if (settingsQuick["HideAllCams"] == "true" || urlPars.get("hideallcams") == "") {
camItem.querySelector("button.checkbox-visibility").click();
console.log("Cam hide: " + camName);
}
camCounter(camElems[i]);
}
// console.log("camsCount: " + camsCount);
}
function maximizeCam(camName) {
try {
if (camName != camsMaxed && camsMaxed != null) {
maximizeCam(camsMaxed);
maximizeCam(camName);
return;
}
var camElem = videolistElem.querySelector("#camUser-" + camName);
if (camElem == null) {
camsMaxed = null;
return;
}
if (camElem.classList.contains("tes-maxedCam")) {
camElem.classList.remove("tes-maxedCam");
camElem.parentElement.classList.remove("tes-max");
camsMaxed = null;
}
else {
camElem.classList.add("tes-maxedCam");
camElem.parentElement.classList.add("tes-max");
camsMaxed = camName;
}
camCounter(camElem);
}
catch(e) { console.log("TES ERROR maximizeCam: " + e.message); }
}
function camCounter(camElem) {
if (camsCount == 12) {
camElem.parentElement.classList.remove("tes-camCount10-11");
camElem.parentElement.classList.remove("tes-camCount2");
camElem.parentElement.classList.add("tes-camCount12");
}
else if (camsCount > 9 && camsCount < 12) {
camElem.parentElement.classList.remove("tes-camCount12");
camElem.parentElement.classList.remove("tes-camCount2");
camElem.parentElement.classList.add("tes-camCount10-11");
}
else if (camsCount == 2) {
camElem.parentElement.classList.remove("tes-camCount12");
camElem.parentElement.classList.remove("tes-camCount10-11");
camElem.parentElement.classList.add("tes-camCount2");
}
else {
camElem.parentElement.classList.remove("tes-camCount12");
camElem.parentElement.classList.remove("tes-camCount10-11");
camElem.parentElement.classList.remove("tes-camCount2");
}
}
// Userscript ends here //
})();
}
else { console.log("Waiting for init..."); }
}