Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ==UserScript==
- // @name TinyLlama : Room [Altered TES]
- // @namespace https://greasyfork.org/users/186041
- // @version 2018.32
- // @description Editing Overall Theme of TES/Tinychat. Install and refresh. All original code belongs to MutationObserver. https://greasyfork.org/en/scripts/32964-tinychat-enhancement-suite-tes
- // @author SmokeyLlama
- // @match https://tinychat.com/room/*
- // @exclude https://tinychat.com/room/*?1
- // @grant GM_setValue
- // @grant GM_getValue
- // @grant GM_listValues
- // ==/UserScript==
- /* jshint -W097 */
- 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 chatlogElem = webappElem.querySelector("tinychat-chatlog").shadowRoot;
- var titleElem = webappElem.querySelector("tinychat-title").shadowRoot;
- var sidemenuElem = webappElem.querySelector("tinychat-sidemenu").shadowRoot;
- var videomoderationElem = sidemenuElem.querySelector("tc-video-moderation").shadowRoot;
- var videolistElem = webappElem.querySelector("tinychat-videolist").shadowRoot;
- var chatlistElem = sidemenuElem.querySelector("tinychat-chatlist").shadowRoot;
- var userlistElem = sidemenuElem.querySelector("tinychat-userlist").shadowRoot;
- var userContextmenuElem = userlistElem.querySelector("tinychat-user-contextmenu").shadowRoot;
- var chatlogCSS = chatlogElem.querySelector("#chat-wrapper");
- var sidemenuCSS = sidemenuElem.querySelector("#sidemenu");
- var videomoderationCSS = videomoderationElem.querySelector("#moderatorlist");
- var webappCSS = webappElem.querySelector("#toast");
- var chatlistCSS = chatlistElem.querySelector("#header");
- var userlistCSS = userlistElem.querySelector("#header");
- 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 urlAddress = new URL(window.location.href);
- var urlPars = urlAddress.searchParams;
- var roomName = document.querySelector("tinychat-webrtc-app").getAttribute("roomname");
- 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");
- }
- 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),
- "NightMode" : (GM_getValue("tes-NightMode") == "true")
- };
- if (settingsQuick["ChangeFont"]) bodyElem.classList.add("tes-changefont");
- if (settingsQuick["NightMode"]) nightmodeToggle(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">Settings</a></p>
- <div id="tes-settings-mentions" class="tes-setting-container">
- <input type="checkbox">
- <span class="label">
- Alert phrases
- <span class="info" data-title='A comma-separated list of phrases to alert/highlight for. Example of 3 phrases: "hello,Google Chrome,sky"'>?</span>
- </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-nightmode" class="tes-setting-container">
- <input type="checkbox">
- <span class="label">
- Remove Borders
- </span>
- </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-settingsGear" title="Settings"><span><img src="https://cdn1.iconfinder.com/data/icons/MetroStation-PNG/128/MB__Llama.png" width="25px"></span></div>
- </div>
- `);
- titleElem.getElementById("tes-settingsGear").addEventListener("click", toggleSettingsDisplay);
- 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");});
- notificationHider();
- }
- }
- function nightmodeToggle(arg) {
- var camQueryString = ".videos-items:last-child > .js-video";
- var messageQueryString = "#chat-content .message";
- if (arg == true) {
- bodyElem.classList.add("tes-nightmode");
- titleCSS.classList.add("tes-nightmode");
- videolistCSS.classList.add("tes-nightmode");
- chatlistCSS.classList.add("tes-nightmode");
- chatlogCSS.classList.add("tes-nightmode");
- chatlogElem.querySelector("#chat-wider").classList.add("tes-nightmode");
- // 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("tes-nightmode");
- }
- }
- // 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("tes-nightmode");
- camItemCSShtml = `
- <style id="camItemCSS">
- .tes-nightmode.video:after { border-color: #2d373a; }
- </style>
- `;
- if (camItemCSS.querySelector("#camItemCSS") == null) camItemCSS.insertAdjacentHTML("afterbegin", camItemCSShtml);
- }
- }
- }
- if (arg == false) {
- bodyElem.classList.remove("tes-nightmode");
- titleCSS.classList.remove("tes-nightmode");
- videolistCSS.classList.remove("tes-nightmode");
- chatlistCSS.classList.remove("tes-nightmode");
- chatlogCSS.classList.remove("tes-nightmode");
- chatlogElem.querySelector("#chat-wider").classList.remove("tes-nightmode");
- // 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("tes-nightmode");
- }
- }
- // 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("tes-nightmode");
- }
- }
- }
- }
- function toggleSettingsDisplay(arg) {
- if (arg == "updateNotifier") {
- titleElem.querySelector("#tes-updateNotifier").classList.remove("visible");
- GM_setValue("tes-updateNotifSeen", "2018.05.30v29");
- }
- 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"];
- return;
- }
- 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);
- }
- }
- }
- var settingsWaitInterval = setInterval(waitForSettings,1000);
- function fontToggle(arg) {
- arg ? bodyElem.classList.add("tes-changefont") : bodyElem.classList.remove("tes-changefont");
- }
- function notificationHider() {
- chatlogContainer = chatlogElem.querySelector("#chat-content");
- settingsQuick["NotificationsOff"] ? chatlogContainer.classList.add("tes-notif-off") : chatlogContainer.classList.remove("tes-notif-off");
- }
- 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">
- @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: 0px;
- 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: 88px;
- right: 50%;#room-header *
- background: white;
- width: 60px;
- 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-headerCollapsed #tes-header-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-headerCollapsed:hover #tes-header-grabber {
- height: 29px;
- line-height: 43px;
- }
- 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: 0;
- }
- @media screen and (max-width: 1000px) {
- #tes-settings > div {
- height: 92px;
- }
- }
- #tes-settings .hidden { display: none; }
- #tes-settings #title { font-weight: bold;
- color:#ffffff;lll
- text-transform:uppercase; }
- #tes-settings {
- transition: all .4s ease-in-out;
- animation: ease-to-bottom-21px .2s ease 0s 1;
- /*max-height: 10%;*/
- font-size: 11px;
- flex: none;
- overflow: hidden;
- z-index: 9;
- position: absolute;
- top: 25px;
- /* right: ` + (giftsElemWidth + 10).toString() + `px; */
- }
- @media screen and (max-width: 1000px) {
- #tes-settings {
- right: 37px!important;
- top: -20px;
- }
- #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;
- }
- #tes-settingsGear {
- font-size: 40px;
- color: #53b6ef;
- float: right;
- }
- #tes-settingsGear:hover {
- cursor: pointer;
- color: #7ccefe;
- }
- .tes-open #tes-settingsGear {
- background: #53b6ef;
- border-bottom-right-radius: 15px;
- border-top-right-radius: 15px;
- border: #53b6ef 1px solid;
- border-left: 0;}
- .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;
- padding: 0px 10px 0px 10px;
- float: left;
- border: #53b6ef 1px solid;
- border-top-left-radius: 12px;
- border-bottom-left-radius: 12px;
- border-bottom-right-radius: 12px;
- animation: ease-to-left .2s ease 0s 1;
- right: 0;
- }
- #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: 15px;
- border-top-left-radius: 15px;
- }
- #tes-settingsGear {
- display: table;
- }
- #tes-settingsGear span {
- display: table-cell;
- vertical-align: middle;
- }
- /*** ************* ***/
- #tes-settings .tes-setting-container input[type=checkbox] {
- margin: 0;
- margin-right: 1px;
- float: left;
- position: absolute;
- left: 8px;
- }
- #tes-settings .label{
- margin-right: 4px;
- margin-left: 16px;
- color:#ffffff;
- }
- #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:visited, #tes-settings a:link {
- text-decoration: none;
- color: inherit;
- }
- #tes-settings a:hover {
- color: #53b6ef;
- }
- #room-header {
- height: 100px;
- max-height: unset;
- min-height: unset;
- transition: all .4s ease-in-out;
- background-color:#191919;
- border-bottom: 1px solid #313131;
- }
- #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 {
- height: 0px;
- }
- #room-header.tes-headerCollapsed:hover {
- height: 25px;
- }
- @media screen and (max-width: 600px) {
- #room-header {
- min-height: inherit;
- max-height: inherit;
- }
- }
- #room-header-info {
- padding: 0;
- color: #ffffff;
- }
- #room-header-info > h1 {
- color: #ffffff;
- text-transform: uppercase;
- }
- #room-header-info > h1:after {
- visibility: hidden;
- hidden: none;
- }
- #room-header-info-text:after{
- visibility: hidden;
- hidden: none;
- }
- #room-header-info-text {
- height: auto;
- }
- @media screen and (max-width: 600px) {
- #room-header-info-text {
- height: inherit;
- }
- }
- #room-header-avatar {
- margin: 2px 10px 0 35px;
- height: 90px;
- min-width: 90px;
- max-width: 90px;
- transition: all .5s linear;
- }
- .tes-headerCollapsed:hover #room-header-avatar:hover {
- z-index: 9;
- }
- #room-header-gifts {
- padding: 10px 10px;
- }
- #room-header-avatar:hover {
- border-radius: unset;
- }
- .tes-headerCollapsed #tes-settingsGear {
- font-size: 33px;
- }
- .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: 13px;
- right: 0;
- }
- </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: 170px;
- position: relative;
- bottom: 0;
- right: 150px;
- 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: 100%;
- width: 100%;
- top: 0;
- left: 0;
- border: 0px solid #fff;
- border-radius: 10px;
- box-sizing: border-box;
- pointer-events: none;
- }
- #video::after
- {
- border: 0px solid #fff;
- }
- #video:after
- {
- border: 0px solid #fff;
- }
- #videos > .video {
- position: relative;
- width: 100%;
- padding: 5px;
- box-sizing: border-box;
- font-size: 0;
- overflow: hidden;
- background-color: #ffffff !important;
- }
- .video > div > iframe {
- width:100%;
- }
- #videos-header {
- height: 10px;
- min-height: 10px;
- background-color:#111111;
- }
- #videos-content {
- background-color:#111111;
- }
- #videos-footer-youtube {
- background-color: #b20000;
- background-image: url('http://i63.tinypic.com/28gz12c.jpg');
- background-position: top center;
- background-position: 8px;
- background-size: 100px;
- background-repeat: no-repeat;
- }
- #videos-footer-youtube > svg, #videos-footer-soundcloud > svg {
- vertical-align: middle;
- display:none;
- }
- #videos-footer-push-to-talk > svg {
- vertical-align: middle;
- pointer-events: none;
- display:none;
- }
- #videos-footer-youtube, #videos-footer-soundcloud {
- height: 42px;
- width: 10px !important;
- min-width: 115px !important;
- margin-right: -63px !important;
- margin-top: -150px;
- border-radius: 11px;
- text-align: center;
- line-height: 50px;
- cursor: pointer;
- overflow: hidden;
- transition: .2s;
- }
- .tes-sidemenuCollapsed #videos-footer {
- right:0px;
- }
- #videos-footer-push-to-talk {
- height: 55px;
- margin-top: -34px;
- background-image: url('http://www.iconsplace.com/icons/preview/white/microphone-256.png');
- background-position: center center;
- background-size: 35px 35px;
- background-repeat: no-repeat;
- }
- #videos-footer-push-to-talk.tes-sidemenuCollapsed {
- height: 55px;
- margin-top: -14px;
- }
- #videos-footer-broadcast-wrapper.tes-sidemenuCollapsed {
- position: relative;
- right: 10px;
- }
- #videos-footer-broadcast-wrapper {
- position: relative;
- right: 140px;
- margin-top: -105px;
- display: unset;
- flex-direction: row;
- align-items: unset;
- width: unset;
- padding-left: 0px !important;
- }
- #videos-footer-broadcast-wrapper > #videos-footer-submenu-button {
- height: 39px;
- padding-left: 25px;
- background-color: #328332;
- position: relative;
- top: -39px;
- left: 155px;
- display: block;
- width: 10px;
- min-width: 10px;
- border-radius: 0px 11px 11px 0px;
- box-sizing: border-box;
- cursor: pointer;
- transition: .2s;
- }
- #videos-footer-submenu {
- position: absolute;
- width: 250px;
- bottom: 100px;
- left: 150px;
- right: 0px;
- padding: 7px;
- border-radius: 4px;
- background-color: #fff;
- font-size: 14px;
- color: #000;
- box-shadow: 0 1px 4px 0 rgba(0, 0, 0, .09);
- opacity: 0;
- visibility: hidden;
- z-index: 2;
- transition: .2s;
- }
- #videos-footer-submenu:before, #videos-footer-submenu:after {
- content: '';
- position: absolute;
- display: block;
- height: 0;
- width: 0;
- right: unset;
- bottom: unset;
- border-width: 7px 7px 0 7px;
- border-style: solid;
- border-color: rgba(0, 0, 0, .06) transparent;
- }
- #videos-footer-broadcast-wrapper > #videos-footer-submenu-button:before {
- content: '';
- position: absolute;
- display: block;
- height: 0;
- width: 0;
- top: 18px;
- right: 8px;
- border-width: 0 5px 6px;
- border-style: solid;
- border-color: #fff transparent;
- opacity: 1;
- visibility: visible;
- transition: .2s;
- }
- #videos-footer-broadcast {
- position: relative;
- display: block;
- right: 20px;
- height: 39px;
- width: 195px;
- padding-left: 0px;
- border-radius: 11px 11px 11px 11px;
- box-sizing: unset;
- background-color: #13a832;
- font-size: 15px;
- font-weight: 550;
- color: #fff;
- text-align: center;
- line-height: 38px;
- cursor: pointer;
- text-transform: uppercase;
- transition: .2s;
- }
- #videos-footer-broadcast-wrapper > .waiting {
- position: absolute;
- width: 125px;
- height: 55px;
- top: 45px;
- bottom: 0;
- left: 10px;
- 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 {
- line-height: initial;
- position: relative;
- top: 1px;
- background: none;
- }
- #videos-header > span > svg {
- height: 16px;
- padding: 0;
- }
- .videos-header-volume {
- position: absolute;
- height: 128px;
- width: 4px;
- top: 2px;
- left: 50%;
- margin-left: -24px;
- border-width: 50px 22px 22px;
- border-style: solid;
- border-color: #000;
- border-radius: 24px;
- box-shadow: 0 1px 4px 0 rgba(0, 0, 0, .09);
- opacity: 0;
- visibility: hidden;
- transition: .2s;
- }
- </style>
- `;
- videolistCSS.insertAdjacentHTML(insertPosition, videolistCSShtml);
- }
- if (cssName == "chatlistCSS" || cssName == null) {
- chatlistCSShtml = `
- <style id="chatlistCSS" scope="tinychat-chatlist">
- #chatlist > div > span {
- padding-left: 10px;
- }
- #chatlist > #header {
- top: 3px;
- height: auto;
- }
- /*** --- this block is in chatlistCSS & userlistCSS --- ***/
- .list-item > span > img {
- right: 13px;
- left: auto;
- }
- .list-item > span[data-status]:before {
- left: auto;
- right: 0;
- }
- .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: #2d373a!important;
- }
- </style>
- `;
- chatlistCSS.insertAdjacentHTML(insertPosition, chatlistCSShtml);
- }
- if (cssName == "userlistCSS" || cssName == null) {
- userlistCSShtml = `
- <style id="userlistCSS" scope="tinychat-userlist">
- #userlist > div > span {
- padding-left: 2px;
- padding-right: 2px;
- position: relative;
- display: inline-block;
- height: 30px;
- width: 100%;
- border-radius: 0 0 0 0;
- box-sizing: border-box;
- font-size: 14px;
- color: #7b868a;
- line-height: 30px;
- text-align: left;
- white-space: nowrap;
- overflow: hidden;
- transition: .2s;
- }
- .tes-sidemenuCollapsed #button-banlist {
- left: -100px;
- width: 10px;
- }
- #chatlist > div > span {
- position: relative;
- display: inline-block;
- height: 30px;
- width: 100%;
- padding-left: 36px;
- border-radius: 0 30px 30px 0;
- box-sizing: border-box;
- font-size: 14px;
- color: #02bcff;
- 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: 13px;
- left: auto;
- }
- .list-item > span[data-status]:before {
- left: auto;
- right: 0;
- }
- .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: black;
- background-color: #111111;
- text-align: center;
- top: 4px;
- }
- #chatlist > #header {
- color: #111111;
- }
- #button-banlist {
- padding: 0 12px;
- text-indent: -9999px;
- background-image: url(https://www.freeiconspng.com/uploads/red-x-png-4.png);
- background-size: 15px;
- background-position: center center;
- background-repeat: no-repeat;
- white-space: nowrap;
- }
- .list-item > span[data-status]:before {
- left: auto;
- right: 0;
- border-radius:10px;
- }
- </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">
- #nav-static-wrapper {
- width: 2px;
- opacity: .7;
- }
- @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: 21px;
- }
- }
- @media screen and (max-width: 600px) {
- #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 = `
- .message.system {
- font-size: 12px;
- font-weight: 600;
- color: cyan;
- left: 0px;
- }
- .o
- .tes-mention-message { color: red; }
- .on-white-scroll {
- padding-left: 16px;
- box-sizing: border-box;
- overflow-x: hidden;
- overflow-y: hidden;
- }
- .message {
- font-size: 14px;
- color: #ffffff;
- white-space: pre-line;
- word-wrap: break-word;
- position: relative;
- right: 12px;
- top: 3px;
- }
- `;
- if (cssName == "chatlogCSS" || cssName == null) {
- chatlogCSShtml = `
- <style id="chatlogCSS" scope="tinychat-chatlog">
- /* HERE IS THE OTHER GRABBER */
- #tes-chat-grabber {
- position: absolute;
- top: 80px;
- right: 50%;tinychat-chatlog *
- background: white;
- width: 80x;
- height: 15px;
- border: #ddd 1px solid;
- border-radius: 19px;
- text-align: center;
- color: #b4c1c5;
- cursor: pointer;
- transition: all .4s ease-in-out;
- }
- .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;
- }
- /* END */
- #chat-instant > a > .status-icon, #chat-content > .message > a > .status-icon {
- position: absolute;
- height: 15px;
- width: 15px;
- top: 0px;
- left: 315px;
- padding: 3px;
- border-radius: 100%;
- background-color: #fff;
- }
- #chat-content > .message.system > .content {
- font-size: 12px;
- font-weight: 600;
- color: #00ff00;
- margin:10px;
- }
- #chat-wrapper {
- min-width: 350px;
- border-left: 0px solid rgba(0, 0, 0, .1);
- box-sizing: border-box;
- background-color: #111111;
- transition: .8s;
- }
- #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: rgba(0, 0, 0, 0.03);
- color: #ffffff;
- }
- */
- #chat-content > .message.common {
- margin-bottom: 5px;
- margin-right: 10px;
- padding-bottom: 9px;
- color: #353535 !important;
- background-color: #2a2a2a;
- border: 1px solid;
- border-radius: 20px;
- }
- #chat-content > .message.system {
- box-sizing: border-box;
- background-color: #002f3e;
- cursor: default;
- border: 1px solid cyan;
- color: cyan;
- border-radius:24px;
- 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;
- }
- #chat-position #input:before {
- background: none;
- }
- #input {
- position: relative;
- display: block;
- padding-top: 10px;
- margin-right: 25px;
- overflow-wrap: break-word;
- }
- #input > textarea{
- overflow-y:auto;
- background-color:#111111;
- border:1px solid #313131;
- color:#ffffff;
- }
- #input:after {
- content: "";
- position: absolute;
- display: block;
- top: 10px;
- left: 0;
- right: 0;
- bottom: 0;
- border: 0px solid #cbcfcf;
- border-radius: 12px;
- box-sizing: border-box;
- pointer-events: none;
- }
- #input > .waiting {
- position: absolute;
- width: auto;
- top: 10px;
- bottom: 0;
- left: 0;
- right: 0;
- border-radius: 12px;
- 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: 20px;
- left: 10px;
- right: -20px;
- bottom: 19px;
- }
- #chat-wider {
- position: absolute;
- display: block;
- height: 25px;
- width: 16px;
- top: 94%;
- left: -10px;
- margin-top: 0px;
- border-radius: 16px;
- font-size: 0;
- background-color: transparent;
- border: 1px solid #313131;
- cursor: pointer;
- z-index: 1;
- }
- #chat-instant > a > .avatar,
- #chat-content > .message > a > .avatar {
- width:75%;
- height:100%;
- background-color: #666666;
- /* top: 0; */
- /* left: 5px; */
- /* float: left; */
- border-top-left-radius: 100%;
- border-bottom-left-radius: 100%;
- border-top-right-radius: 0%;
- border-bottom-right-radius: 0%;
- overflow: hidden;
- }
- #abovefiller
- { border-radius: unset;}
- #timestamp {
- font-size: 11px;
- color: #999999;
- float: right;
- position: absolute;
- right: 0;
- padding-top: 3px;
- padding-right: 20px;
- font-weight: 600;
- }
- #chat-content > .message > .nickname {
- overflow: initial;
- line-height: initial;
- position: relative;
- right: 15px;
- color: #000;
- }
- #chat-content div.message.common:last-of-type {
- margin-bottom: 10px;
- margin-right: 10px;
- }
- </style>
- `;
- chatlogCSS.insertAdjacentHTML(insertPosition, chatlogCSShtml);
- }
- if (cssName == "sidemenuCSS" || cssName == null) {
- sidemenuCSShtml = `
- <style id="sidemenuCSS" scope="tinychat-sidemenu">
- #sidemenu {
- min-width: 162px;
- max-width: 162px;
- left: 0px;
- background-color: #191919;
- /* background-image:url('http://i68.tinypic.com/2rp4ncm.png'); */
- background-position: right top;
- background-size: 100%;
- border-right:1px solid #313131;
- z-index:3;
- }
- #sidemenu-content {
- height: 100%;
- padding-top: 5px;
- box-sizing: border-box;
- padding-left: 0px;
- overflow-x: hidden;
- overflow-y: auto;
- background-color: #191919;
- /* background-image:url('http://i68.tinypic.com/2rp4ncm.png'); */
- background-position: right top;
- background-size: 100%;
- border-right:0px solid;
- }
- #user-info {
- position: absolute;
- height: 80px;
- width: 100%;
- 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: -188px;
- }
- }
- #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 {
- height: 25px;
- line-height: 25px;
- font-size: 13px;
- opacity: .8;
- margin-left:10px;
- width:175px;
- background-color:#111111;
- border:1px solid #313131;
- }
- #upgrade {
- height: 0px;
- line-height: 0px;
- font-size: 13px;
- opacity: .8;
- }
- #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: 1px;
- max-width: 1px;
- }
- .tes-sidemenuCollapsed #user-info { display: none; }
- .tes-sidemenuCollapsed #user-info { display: none; }
- #tes-sidemenu-grabber {
- position: absolute;
- top: 50%;
- right: 0;
- background: #111111;
- color: #536165;
- z-index: 3;
- border-radius: 10px 0 0 10px;
- height: 34px;
- padding-top: 19px;
- width: 16px;
- text-align: center;
- /* background: white;
- border: #dddddd 1px solid;
- border-right: 0;
- */ }
- #tes-sidemenu-grabber:hover {
- background: #434e51;
- color: #67797e;
- cursor: pointer;
- }
- .tes-sidemenuCollapsed #tes-sidemenu-grabber{
- border-radius: 0 10px 10px 0;
- right: -15px;
- }
- </style>
- `;
- sidemenuCSS.insertAdjacentHTML(insertPosition, sidemenuCSShtml);
- }
- if (cssName == "videomoderationCSS" || cssName == null) {
- videomoderationCSShtml = `
- <style id="videomoderationCSS" scope="tc-video-moderation">
- #moderatorlist {
- padding-left: 0;
- }
- #moderatorlist:hover {
- position: absolute;
- background: white;
- z-index: 1000;
- width: 300px;
- min-height: 155px;
- flex-direction: column;
- position: absolute;
- background: rgba(45, 55, 58, 0.8);
- z-index: 1000;
- width: 350px;
- max-height: fit-content!important;
- left: 15px;
- border-radius: 13px;
- border: #47575c 1px solid;
- }
- #moderatorlist:after {
- top: 47px;
- }
- </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: -161px;width: 110%;
- }
- @media screen and (max-width: 1000px) {
- :host > #room {
- padding-left: 82px;
- }
- }
- @media screen and (max-width: 600px) {
- :host > #room {
- padding-left: 0;
- }
- }
- </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);
- if (1 == 2) {
- selectAllButtonHTML = `<div id="tes-selectAllbutton">I<span>select all</span></div>`;
- selectAllButton = chatlogElem.querySelector("#chat-wrapper").insertAdjacentHTML("afterbegin", selectAllButtonHTML);
- chatlogElem.querySelector("#tes-selectAllbutton").addEventListener("click", copyChatlog);
- }
- 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 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");
- }
- }
- 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");
- }
- 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 x = new MutationObserver(function (e) {
- if (e[0].addedNodes) newMessageAdded();
- });
- x.observe(chatlogElem.querySelector("#chat-content"), { childList: true });
- var x = new MutationObserver(function (e) {
- if (e[0].addedNodes) newCamAdded();
- });
- x.observe(videolistElem.querySelector(".videos-items:last-child"), { childList: true });
- var x = new MutationObserver(function (e) {
- if (e[0].addedNodes) userContextmenuUpdated();
- });
- x.observe(userContextmenuCSS, { attributes: true });
- // var x = new MutationObserver(function (e) {
- // if (e[0].addedNodes) newUserAdded();
- // });
- // x.observe(userlistElem.querySelector("#userlist"), { childList: true });
- // function newUserAdded() {
- // var latestUser = userlistElem.querySelector("#userlist .list-item:last-of-type");
- // latestUser.querySelector(".nickname").innerHTML
- var scrollboxEvent = scrollbox.addEventListener("wheel", userHasScrolled);
- var unreadbubble = unreadbubble.addEventListener("click", function(){autoScrollStatus = true;} );
- function timestampAdd() {
- var queryString = "#chat-content div.message.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>");
- }
- }
- 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-resize > svg {
- top: 3px;
- left: 3px;
- display: none;
- }
- .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: #04caff; }
- .video:hover .icon-tes-max {
- top: 13px;
- left: 48%;
- transition: top .2s ease .2s,
- left .2s ease .2s,
- right .2s ease .2s,
- opacity .2s;
- }
- .tes-nightmode.video:after { border:0px; }
- </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: 15%!important; }
- .tes-max.tes-camCount2 .js-video { width: 30%!important; }
- .tes-max.tes-camCount10-11 .js-video { width: 14%!important; }
- .tes-max.tes-camCount12 .js-video { width: 12%!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: 30%!important; }
- :not(.hidden) + .tes-max.tes-camCount2 .js-video { width: 60%!important; }
- .tes-max .js-video.tes-maxedCam,
- :not(.hidden) + .tes-max .js-video.tes-maxedCam { width: 70%!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.icon-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..."); }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement