// ==UserScript==
// @name Fiction.Live Merged-
// @namespace http://tampermonkey.net/
// @version 24
// @description An attempt to improve fiction.live through the addition of various features.
// @author You
// @match https://fiction.live/*
// @grant none
// @run-at document-idle
// @noframes
// ==/UserScript==
//console.clear();
//(http[s]?:\/\/)?(www.)?((\w+(\.)?)+\/?)*
//Regex for links, maybe turn links into clickable crap idk
(function() {
'use strict';
var rolled=false;
var lastURL = window.location.href;
try{
var alertBlacklist = JSON.parse(localStorage.getItem('alertBlacklist'));
alertBlacklist = [...new Set(alertBlacklist)];
}
catch(error){
};
var settings = JSON.parse(localStorage.getItem('FL_Settings'));
var defaultSettings = {'imageResize':true,
'questRemove':true,
'questAuthorRemove':true,
'anonToggle':false,
'removeUsernames':false,
'autoRoller':false,
'removeTopicForm':true,
'removeBlankTopics':true,
'authorHighlight':true,
'authorBlacklist':[],
'chatBlacklist':false,
'chatBlacklisted':[],
'tagBlacklist':[],
'alertBlacklist':[],
'highlightColor':'#393c59',
'highlightLight':'#fc8c03',
'highlightLightToggle':false,
'liveRestore':true,
'liveLight':false
};
//Updates settings when there is a change between versions.
if (!settings){
console.log('Settings set to defaults.');
settings = defaultSettings
}
else if (Object.keys(settings).length !== Object.keys(defaultSettings).length){
console.log('Settings differ in length.');
Object.keys(defaultSettings).forEach(
function(key){
if (!(key in settings)){
settings[key] = defaultSettings[key];
console.log('Added '+key+' to the current settings.');
};
}
);
if (Object.keys(settings).length > Object.keys(defaultSettings).length){
Object.keys(settings).forEach(
function(key){
if (!(key in defaultSettings)){
console.log(`Removed invalid variable and value from settings, ${key}:${settings[key]}.`);
delete settings[key]
};
}
);
}
};
//For handling merge and deletion of alertBlacklist storage item.
if (typeof alertBlacklist != ('undefined' || 'null')){
if (settings.alertBlacklist.length == 0 && alertBlacklist.length > 0){
console.log('set and remove alert bl');
settings.alertBlacklist = alertBlacklist;
try{
localStorage.removeItem('alertBlacklist');
}catch(error){console.log(error);};
}
else if(settings.alertBlacklist.length == 0 && alertBlacklist.length == 0){
try{
localStorage.removeItem('alertBlacklist');
}catch(error){console.log(error);};
}
};
localStorage.setItem('FL_Settings', JSON.stringify(settings));
function sortQuestTags(){
//ignore this
var list = document.querySelector('span.tags');
var l2 = [...list.children];
var l3 = l2.filter(
function(value, index, arr){
if (value.className !== 'tag more ng-scope'){
return value
};
}
);
l3.sort((a,b)=>a.innerText>b.innerText?1:-1).forEach(node=>list.appendChild(node));
};
function blacklistRemove(item){
if (settings.alertBlacklist.includes(item)){
let position = settings.alertBlacklist.indexOf(item);
settings.alertBlacklist.splice(position, 1);
localStorage.setItem('FL_Settings', JSON.stringify(settings));
};
};
function repeatChecker(){
try{
let thisPage = window.location.href;
if (thisPage !== lastURL){
try{
questCheck.observerQst.disconnect();
}catch(error){
}
try{
questCheck.observerTopic.disconnect();
}catch(error){
}
pageCheck();
lastURL = window.location.href;
};
}catch(error){
console.log('Error with repeatChecker',error);
};
};
setInterval(repeatChecker,500);
function chatSend(info){
let body = info[1]
try{
//var encodedBody = encodeURI(body);
fetch("https://fiction.live/api/anonkun/dice", {
"credentials": "include",
"headers": {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0",
"Accept": "*/*",
"Accept-Language": "en-GB,en;q=0.5",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"X-Requested-With": "XMLHttpRequest"
},
"referrer": window.location.href,
"body": body,
"method": "POST",
"mode": "cors"
}
);
}catch(error){
console.log('Error with chatSend',error);
}
try{
let chapterID = info[0][0]
let dataID = info[0][1]
let roll = info[0][2]
var cookies = document.cookie;
cookies=cookies.split("; ")
for (let i = 0; i < cookies.length; i++){
var cookie = cookies[i].split("=")
if (/.*distinct_id.*/.test(cookie)){
var cookieName = cookie[0].replace(/_posthog/,'')
cookieName = cookieName.replace('ph_','')
}
}
fetch("https://fiction.live/api/node", {
"credentials": "include",
"headers": {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0",
"Accept": "*/*",
"Accept-Language": "en-GB,en;q=0.5",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"X-Requested-With": "XMLHttpRequest"
},
"referrer": `https://fiction.live/stories/${body}`,
"body": encodeURI(`r[]=${chapterID}&r[]=${dataID}&nt=chat&b=/roll+`)+encodeURIComponent(`${roll}`)+encodeURI(`&ra[hide]=true&ra[_id]=${dataID}&ra[b]=chapter+${dataID}&token=${cookieName}`),
"method": "POST",
"mode": "cors"
});
}catch(error){
console.log('Error with RollSend',error);}
}
function autoRoll(change){
if (settings.autoRoller != true){
return;
};
try{
//console.log(change)
var rollRegex = /[0-9]+d[0-9]+(\+[0-9]+)?( ?)(([ie]+)?([ut][0-9]+)?)+[^1d1]/
if (rollRegex.test(change.innerText)){
var roll = change.innerText.match(rollRegex)[0];
var qewq = document.querySelector('div#storyPosts').firstChild.lastChild;
if (qewq.firstChild.firstChild.classList.contains('closed')){return}
else if(qewq.firstChild.firstChild.classList.contains('inner') && !(qewq.firstChild.firstChild.classList.contains('closed'))){
var dataID = qewq.getAttribute('data-id');
var chapterID = document.querySelector('article.threads').getAttribute('threads');
chapterID = chapterID.replace(/\/.*/,'');
var rollSend = `/roll ${roll}`;
var template = `sid=${chapterID}&dice=${encodeURIComponent(rollSend)}`;
//var template = `r[]=${chapterID}&r[]=${dataID}&nt=chat&b=${rollSend}&ra[hide]=true&ra[_id]=${dataID}&ra[b]=chapter ${dataID}&token=dat11sq-MLuO9XeGqWK6KfToFuu2YCbcfXq97iNA604`;
if (rolled == false){
chatSend([[chapterID,dataID,roll],template]);
rolled = true;
setTimeout(function (){rolled = false},5000);
}
}
}
}catch(error){}
}
function authorCheck(quest){
let author = quest.querySelector('div.authorPane');
if (author == null){
try{
author = quest.parentNode.parentNode.querySelector('span.name').innerText
quest = quest.parentNode.parentNode.parentNode
}catch(error){
console.log('authorCheck Null',error)
};
}
else{
author = author.innerText;
}
if (settings.authorBlacklist.includes(author)){
try{
while (true){
if(quest.parentNode == null){
break
}
if (quest.parentNode.classList.contains('ng-scope') && quest.parentNode.tagName == 'LI'){
quest.parentNode.remove()
break
}
else{
quest = quest.parentNode
}
}
return
}catch(error){console.log('authorCheck remove',error)};
return;
};
};
function tagCheck(quest){
let tags = quest.querySelector('div.tags');
if (tags == null){
let tag = quest.parentNode.parentNode.querySelector('div.displayedTag');
if (tag){
if (settings.tagBlacklist.includes(tag.innerText)){
try{
while (true){
if(quest.parentNode == null){
break
}
if (quest.parentNode.classList.contains('ng-scope') && quest.parentNode.tagName == 'LI'){
quest.parentNode.remove()
break
}
else{
quest = quest.parentNode
}
}
return
}catch(error){
console.log('tagCheck remove',error)
};
};
return
}
else{return}
};
tags = tags.children;
for (let i = 0; i < tags.length; i++){
let tag = tags[i]
if (settings.tagBlacklist.includes(tag.innerText)){
try{
quest.parentNode.parentNode.remove();
}catch(error){
console.log('tagCheck remove',error)
};
return;
};
};
};
function removeBlacklisted(){
let quests = document.querySelectorAll('div.storyListItem');
for (let i = 0; i < quests.length; i++){
if (settings.questRemove == true){
tagCheck(quests[i].children[0]);
}
if (settings.questAuthorRemove == true){
authorCheck(quests[i].children[0]);
}
//console.log(quests[i].children[0])
};
};
function liveRestore() {
if (document.querySelector('div#liveBox')) {
return
};
var navBar = document.querySelector('[id="mainMenuReplacement"][class="navbar navbar-default navbar-fixed-top"]');
var liveTimer = document.querySelectorAll('[class="next-live ng-scope"]');
var myLive = document.createElement('div');
myLive.setAttribute('id', 'liveBox');
myLive.style.display = 'block';
myLive.style.height = '100%';
myLive.style.width = 'auto';
myLive.style.float = 'right';
myLive.style.paddingLeft = '1%';
myLive.style.paddingRight = '1%';
myLive.style.borderLeft = 'solid';
myLive.style.borderRight = 'solid';
myLive.style.borderColor = '#323448';
myLive.style.boxSizing = 'border-box';
myLive.style.fontWeight = 'bold';
if (settings.liveLight == true){
myLive.style.color = 'black';
myLive.style.textShadow = '-1px -1px 0 #fff, 1px -1px 0 #fff, -1px 1px 0 #fff, 1px 1px 0 #fff';
} else{
myLive.style.color = 'white';
myLive.style.textShadow = '-1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000';
}
while (liveTimer[0].childNodes.length > 0) {
myLive.appendChild(liveTimer[0].childNodes[0]);
}
navBar.appendChild(myLive);
liveTimer[0].style.display = 'none';
};
function waitForTimer() {
if (settings.liveRestore == false){return};
var options = {
childList: true,
subtree: true
};
var observerTimer = new MutationObserver(awaitTimer);
function awaitTimer(mutations) {
for (let mutation of mutations) {
try {
var canvas = document.querySelector('header[class="next-live ng-scope"]');
} catch (error) {}
if (canvas && (canvas !== undefined && canvas.length != 0)) {
observerTimer.disconnect(); // stop observing
liveRestore()
return;
};
};
};
observerTimer.observe(document, options);
setTimeout(function(){
try{
observerTimer.disconnect();
}catch(error){}
},1000);
};
function questCheck(){
if ((settings.questRemove && settings.questAuthorRemove) !== true){
return;
}
try{
var options = {
childList: true,
subtree: true
};
function qstMod(mutations) {
for (let mutation of mutations) {
try{
let quest = mutation.addedNodes[0];
if (quest){
try{
if (quest.parentNode.classList.contains('storyListItem')){
if (settings.questRemove == true){
tagCheck(quest);
}
if (settings.questAuthorRemove == true){
authorCheck(quest);
}
}else if (quest.parentNode.parentNode.parentNode.parentNode.classList.contains('storyListItem') && /.*fiction.live\/$/.test(URL)){
if (settings.questRemove == true){
if (quest){
tagCheck(quest);
}
}
try{
if (settings.questAuthorRemove == true){
console.log('xxxxxx')
if (quest){
authorCheck(quest);
}
}
}catch(error){console.log(error)}
}
}catch(error){
//console.log('If this appears more than twice, make an issue.')
if (error instanceof TypeError){}
else{
console.log(error)}
}
}
//observerMessage.disconnect();
}catch(error){
console.log('New quest Error',error);
}
};
};
let observerQst = new MutationObserver(qstMod);
observerQst.observe(document, options);
questCheck.observerQst = observerQst;
removeBlacklisted();
}
catch(error){console.log('questCheck',error)};
};
function pageCheck() {
try{
let URL = window.location.href;
if ((/.*(fiction.live\/stories\/).*/.test(URL))) {
//console.log('quest');
chatThings();
waitForTimer();
//questThings();
} else if (/.*(fiction.live\/stories\?).*/.test(URL)) {
//console.log('main/search page');
//mainThings();
questCheck();
} else if (/.*(fiction.live\/live\?).*/.test(URL)) {
//console.log('live page');
//LiveThings();
questCheck();
} else if (/.*(fiction.live\/social).*/.test(URL)){
//console.log('thread page');
removeBlankTopics();
} else if (/.*fiction.live\/$/.test(URL)){
questCheck();
} else {
console.log('Page currently has no specific functions.');
}
}catch(error){
console.log('Error with pageCheck',error)
}
};
function removeBlankTopics(){
if (settings.removeBlankTopics !== true){
return;
}
try{
var options = {
childList: true,
subtree: true
};
function topicWatch(mutations) {
for (let mutation of mutations) {
try{
let topic = mutation.addedNodes[0];
if (topic){
try{
if (typeof(topic.classList)=='undefined'){}
else if (topic.classList.contains('threadList')){
//observerTopic.disconnect();
let topicItem = topic.querySelectorAll('li.threadListItem')
for (let i = 0; i < topicItem.length; i++){
if (topicItem[i].querySelector('div.row.title.header').innerText.length == 0){
topicItem[i].remove();
};
};
};
//if (!(topic.querySelector('div.row.title.header').innerText)){console.log('empty',topic)}
}catch(error){
console.log(error)
}
}
}catch(error){
console.log('New quest Error',error);
}
};
};
let observerTopic = new MutationObserver(topicWatch);
observerTopic.observe(document, options);
questCheck.observerTopic = observerTopic;
}catch(error){
console.log('topicCheck',error)
};
};
function chatBlacklist(message){
function delMSG(name){
if (name == message.querySelector('span.name').innerText){
//message.remove();
message.style.display = 'none';
return;
};
}
if (settings.chatBlacklist != true && settings.chatBlacklisted.length == 0){
return;
}
else{
settings.chatBlacklisted.forEach(name=>delMSG(name));
};
};
function chatThings() {
waitForChat();
function removeUsernames(message){
//return;
//console.log('this shouldnt be seen')
if (settings.removeUsernames == true && message.querySelector('span.name')){
message.querySelector('span.name').style.display = 'none';
let authorList = document.querySelectorAll('span.author.ng-scope');
let authors=[]
authorList.forEach(element=>authors.push(element.querySelector('span.name').innerText))
try {
console.log(authors)
console.log(message.querySelector('span.name'))
if (authors.includes(message.querySelector('span.name').innerText)) {
message.querySelector('span.name').style.display = 'initial';
return;
}
else {
console.log('ac')
setTimeout(function(){
try{
message.querySelector('img.avater').remove()
}catch(error){
};
try{
message.querySelector('span.name').innerText='anon'
message.querySelector('span.name').style.display = 'initial';
}catch(error){
console.log('Error forcing anon',error);
};
setTimeout(function(){
if (message.querySelector('span.name').innerText!='anon'){
message.querySelector('span.name').innerText='anon'
}
},100);
},100);
}
} catch (error) {
console.log('Author highlighter failed',error);
};
}
else return
};
function authorHighlight(message){
if (settings.authorHighlight == true && message.querySelector('span.name')){
var currentColor = settings.highlightColor;
if (settings.highlightLightToggle == true){
currentColor = settings.highlightLight;
}
let authorList = document.querySelectorAll('span.author.ng-scope');
let authors=[]
authorList.forEach(element=>authors.push(element.querySelector('span.name').innerText))
try {
if (authors.includes(message.querySelector('span.name').innerText)) {
if (settings.highlightColor){
try{
message.style.backgroundColor = currentColor;
}catch(error){
console.log('Failed using custom color',error);
message.style.backgroundColor = '#393c59';
settings.highlightColor = '#393c59';
}
}
else{
message.style.backgroundColor = '#393c59';
};
};
} catch (error) {
console.log('Author highlighter failed',error);
};
}
else return
};
function imageResize(message){
if (settings.imageResize == true){
let msgImage = message.querySelector('div.message').querySelector('img');
if (msgImage !== null && msgImage !== undefined) {
let image = message.querySelector('div.message').querySelector('img');
image.src = image.src.replace(/(h[0-9]+\-w[0-9]+)/, 'h5600-w5600');
let page = image.src;
image.setAttribute('onclick', "window.open('" + page + "', '_blank');")
try {
image.onerror = (function () {
setTimeout(this.src = this.src, 100)
})
} catch (error) {
'img error add fail'
};
};}
else return
};
function whenNewMessage(chat) {
var options = {
childList: true
};
function messageMod(mutations) {
for (let mutation of mutations) {
try{
let message = mutation.addedNodes[0];
chatBlacklist(message);
removeUsernames(message);
authorHighlight(message);
imageResize(message);
autoRoll(message);
//observerMessage.disconnect();
}catch(error){
console.log('New Message Error',error);
}
};
};
let observerMessage = new MutationObserver(messageMod);
observerMessage.observe(chat, options);
};
function withOldMessage(chat) {
let messages = chat.childNodes;
try {
messages.forEach(messageMod);
} catch (error) {
console.log('tried running msgmod',error)
};
function messageMod(message) {
try {
imageResize(message);
authorHighlight(message);
} catch (error) {
console.log('messageMod', error);
};
};
};
function waitForChat() {
//waits for chat to exist
var options = {
childList: true,
subtree: true
};
var observerChat = new MutationObserver(awaitChat);
observerChat.observe(document, options)
function awaitChat(mutations) {
for (let mutation of mutations) {
try {
var chat = document.querySelector('article.chatLog').querySelector('div.jadeRepeat');
} catch (TypeError) {};
if (chat && (chat !== (undefined || null) && chat.length != 0)) {
observerChat.disconnect();
if (/.*(fiction.live\/stories\/).*/.test(window.location.href)) {
whenNewMessage(chat);
withOldMessage(chat);
};
break;
};
};
};
};
};
function deleteTopicCreate(){
try{
if (settings.removeTopicForm == true){
let formItem = document.querySelector('div.formItem');
if (formItem){
formItem.parentNode.remove();
};
};
}catch(error){
console.log('Error with removing topic form',error);
};
};
function blacklistAdd(){
let title = this.parentNode.querySelector('[set-text="item.value.value"]').textContent.replace(' went live', '');
let author = this.parentNode.querySelector('span.user').innerText;
let entry = title+'___'+author;
settings.alertBlacklist.push(entry);
localStorage.setItem('FL_Settings', JSON.stringify(settings));
let dismiss = this.parentNode.querySelector('a.dismiss');
simClick(dismiss);
document.querySelector('div#settingsBlacklist').appendChild(elementBlacklisted(entry));
};
function alertBlacklistButton(alert){
function createBlacklistButton(){
var blacklistButton = document.createElement('a');
blacklistButton.setAttribute('class', 'blacklist');
blacklistButton.style.height = 'auto';
blacklistButton.style.width = '0px';
blacklistButton.innerText = '∅';
blacklistButton.onclick = blacklistAdd;
return blacklistButton
}
alert.childNodes[0].after(createBlacklistButton());
};
function blacklistCheck(alert){
try{
var title = alert.querySelector('[set-text="item.value.value"]').textContent.replace(' went live', '');
var author = alert.querySelector('span.user').innerText;
var dismiss = alert.querySelector('a.dismiss');
if (settings.alertBlacklist.includes(title+'___'+author)){
simClick(dismiss);
}
else{
alertBlacklistButton(alert);
};}
catch(error){
console.log('blacklist checker error',error)
};
};
function simClick(elem) {
var evt = new MouseEvent('click', {
bubbles: true,
cancelable: true,
view: window
});
var canceled = !elem.dispatchEvent(evt);
};
function monitorAlerts() {
try {
let alertContainer = document.getElementsByClassName('feedType')[0];
alertContainer.querySelectorAll('li').forEach(alert => blacklistCheck(alert))
var observer = new MutationObserver(function (mutations, me) {
try {
for (let mutation of mutations) {
if (mutation.addedNodes[0] !== undefined) {
if (mutation.addedNodes[0].className == ('feedItem ng-scope ng-animate')) {
blacklistCheck(mutation.addedNodes[0]);
};
};
};
} catch (error) {
console.log('Alert monitor error',error)
};
});
observer.observe(alertContainer, {
childList: true
});
} catch (error) {
console.log('watcher ded',error)
};
};
function awaitMainMenu(){
try{
var options = {
childList: true,
subtree: true
};
let observerMenu = new MutationObserver(awaitMenu);
observerMenu.observe(document, options);
function awaitMenu(mutations){
for (let mutation of mutations) {
try {
var mainMenu = document.querySelector('nav#mainMenu');
} catch (error) {};
if (mainMenu){
observerMenu.disconnect();
settingsContainer();
deleteTopicCreate();
};
};
};
}catch (error){console.log('Error awaiting main menu',error)};
};
function elementBlacklisted(element){
var settingsBlacklisted = document.createElement('div');
settingsBlacklisted.innerText = element
settingsBlacklisted.innerText = settingsBlacklisted.innerText.replace('___',' Author: ')
settingsBlacklisted.style.fontSize = '20px'
settingsBlacklisted.style.float = 'left'
settingsBlacklisted.style.minWidth = '50%'
settingsBlacklisted.style.color = 'white'
settingsBlacklisted.style.display = 'inline-block'
settingsBlacklisted.style.border = 'thin solid silver'
settingsBlacklisted.style.padding = '5px'
var settingsBlacklistRemove = document.createElement('a');
settingsBlacklisted.setAttribute('class','script')
settingsBlacklistRemove.innerText = 'Remove'
settingsBlacklistRemove.style.color = 'white'
settingsBlacklistRemove.style.fontSize = '20px'
settingsBlacklistRemove.style.display = 'inline-block'
settingsBlacklistRemove.style.border = '3px solid red'
settingsBlacklistRemove.style.backgroundColor = 'red'
settingsBlacklistRemove.style.float = 'right'
settingsBlacklistRemove.style.paddingLeft = '5px'
settingsBlacklistRemove.style.paddingRight = '5px'
settingsBlacklistRemove.onclick = function(){
blacklistRemove(element);
this.parentNode.remove();
}
settingsBlacklisted.appendChild(settingsBlacklistRemove)
return settingsBlacklisted
};
function settingsContainer(){
function settingsDisplay(){
try{
if (!document.querySelector('#confDisp')){
function configDisplay(){
var confDisp = document.createElement('div');
confDisp.setAttribute('id', 'confDisp');
confDisp.style.height = '100%';
confDisp.style.position = 'fixed';
confDisp.style.top = '0';
confDisp.style.bottom = '0';
confDisp.style.left = '0';
confDisp.style.right = '0';
confDisp.style.zIndex = '9999';
confDisp.style.display = 'none';
confDisp.style.overflowY = 'auto';
confDisp.style.pointerEvents = 'auto';
return confDisp
};
function configBox(){
var confBox = document.createElement('div');
confBox.setAttribute('id', 'confBox');
confBox.style.height = 'auto';
confBox.style.minHeight = '60%';
confBox.style.width = 'auto';
confBox.style.minWidth = '60%';
confBox.style.position = 'relative';
confBox.style.top = '10px';
confBox.style.margin = '10%';
confBox.style.padding = '1%';
confBox.style.display = 'flex';
confBox.style.flexFlow = 'column';
confBox.style.background = '#2a2c3b';
confBox.style.boxShadow = '0 0 10px #000000';
confBox.style.pointerEvents = 'auto';
return confBox
};
//Toggles features here
function settingsImageResize(){
var settingsImageResize = document.createElement('div');
settingsImageResize.innerText = 'Resize images in chat.';
settingsImageResize.style.minWidth = '25%';
settingsImageResize.style.fontSize = '20px';
settingsImageResize.style.color = 'white';
settingsImageResize.style.border = 'thin solid silver';
settingsImageResize.style.padding = '5px';
settingsImageResize.style.maxWidth = '25%';
settingsImageResize.style.float = 'left';
var settingsImageResizeCheckbox = document.createElement('input');
settingsImageResizeCheckbox.setAttribute("type", "checkbox");
if (settings.imageResize == true){
settingsImageResizeCheckbox.checked = true;
};
settingsImageResizeCheckbox.addEventListener('change', (event) => {
if (event.target.checked) {
settings.imageResize = true;
} else {
settings.imageResize = false;
};
localStorage.setItem('FL_Settings', JSON.stringify(settings));
settings = JSON.parse(localStorage.getItem('FL_Settings'));
});
settingsImageResize.appendChild(settingsImageResizeCheckbox);
return settingsImageResize
};
function settingsRemoveBlankTopics(){
var settingsRemoveBlankTopics = document.createElement('div');
settingsRemoveBlankTopics.innerText = 'Remove blank topics.';
settingsRemoveBlankTopics.style.minWidth = '25%';
settingsRemoveBlankTopics.style.fontSize = '20px';
settingsRemoveBlankTopics.style.color = 'white';
settingsRemoveBlankTopics.style.border = 'thin solid silver';
settingsRemoveBlankTopics.style.padding = '5px';
settingsRemoveBlankTopics.style.maxWidth = '25%';
settingsRemoveBlankTopics.style.float = 'left';
var settingsRemoveBlankTopicsCheckbox = document.createElement('input');
settingsRemoveBlankTopicsCheckbox.setAttribute("type", "checkbox");
if (settings.removeBlankTopics == true){
settingsRemoveBlankTopicsCheckbox.checked = true;
};
settingsRemoveBlankTopicsCheckbox.addEventListener('change', (event) => {
if (event.target.checked) {
settings.removeBlankTopics = true;
} else {
settings.removeBlankTopics = false;
};
localStorage.setItem('FL_Settings', JSON.stringify(settings));
settings = JSON.parse(localStorage.getItem('FL_Settings'));
});
settingsRemoveBlankTopics.appendChild(settingsRemoveBlankTopicsCheckbox);
return settingsRemoveBlankTopics
};
function settingsFormRemove(){
var settingsFormRemove = document.createElement('div');
settingsFormRemove.innerText = 'Remove topic submission form.';
settingsFormRemove.style.minWidth = '25%';
settingsFormRemove.style.fontSize = '20px';
settingsFormRemove.style.color = 'white';
settingsFormRemove.style.border = 'thin solid silver';
settingsFormRemove.style.padding = '5px';
settingsFormRemove.style.maxWidth = '25%';
settingsFormRemove.style.float = 'left';
var settingsFormRemoveCheckbox = document.createElement('input');
settingsFormRemoveCheckbox.setAttribute("type", "checkbox");
if (settings.removeTopicForm == true){
settingsFormRemoveCheckbox.checked = true;
};
settingsFormRemoveCheckbox.addEventListener('change', (event) => {
if (event.target.checked) {
settings.removeTopicForm = true;
} else {
settings.removeTopicForm = false;
};
localStorage.setItem('FL_Settings', JSON.stringify(settings));
settings = JSON.parse(localStorage.getItem('FL_Settings'));
});
settingsFormRemove.appendChild(settingsFormRemoveCheckbox);
return settingsFormRemove
};
function settingsChatBlacklist(){
var settingsChatBlacklist = document.createElement('div');
settingsChatBlacklist.innerText = 'Hide blacklisted users in chat. ';
settingsChatBlacklist.style.minWidth = '25%';
settingsChatBlacklist.style.fontSize = '20px';
settingsChatBlacklist.style.color = 'white';
settingsChatBlacklist.style.border = 'thin solid silver';
settingsChatBlacklist.style.padding = '5px';
settingsChatBlacklist.style.maxWidth = '25%';
settingsChatBlacklist.style.float = 'left';
var settingsChatBlacklistCheckbox = document.createElement('input');
settingsChatBlacklistCheckbox.setAttribute("type", "checkbox");
if (settings.chatBlacklist == true){
settingsChatBlacklistCheckbox.checked = true;
};
settingsChatBlacklistCheckbox.addEventListener('change', (event) => {
if (event.target.checked) {
settings.chatBlacklist = true;
} else {
settings.chatBlacklist = false;
};
localStorage.setItem('FL_Settings', JSON.stringify(settings));
settings = JSON.parse(localStorage.getItem('FL_Settings'));
});
settingsChatBlacklist.appendChild(settingsChatBlacklistCheckbox);
return settingsChatBlacklist
};
function settingsUserBlacklist() {
function chatBlacklistRemove(item) {
if (settings.chatBlacklisted.includes(item)) {
let position = settings.chatBlacklisted.indexOf(item);
settings.chatBlacklisted.splice(position, 1);
localStorage.setItem('FL_Settings', JSON.stringify(settings));
settings = JSON.parse(localStorage.getItem('FL_Settings'));
};
};
function chatBlacklisted(element) {
try {
var chatBlacklisted = document.createElement('div');
chatBlacklisted.innerText = element;
chatBlacklisted.style.fontSize = '20px';
chatBlacklisted.style.float = 'left';
chatBlacklisted.style.minWidth = '50%';
chatBlacklisted.style.color = 'white';
chatBlacklisted.style.display = 'inline-block';
chatBlacklisted.style.border = 'thin solid silver';
chatBlacklisted.style.padding = '5px';
var settingsUserRemove = document.createElement('a');
settingsUserRemove.setAttribute('class', 'script');
settingsUserRemove.innerText = 'Remove';
settingsUserRemove.style.color = 'white';
settingsUserRemove.style.fontSize = '20px';
settingsUserRemove.style.display = 'inline-block';
settingsUserRemove.style.border = '3px solid red';
settingsUserRemove.style.backgroundColor = 'red';
settingsUserRemove.style.float = 'right';
settingsUserRemove.style.paddingLeft = '5px';
settingsUserRemove.style.paddingRight = '5px';
settingsUserRemove.onclick = function () {
try {
chatBlacklistRemove(element);
this.parentNode.remove();
} catch (error) {
console.log('Error removing user', error)
}
};
chatBlacklisted.appendChild(settingsUserRemove);
return chatBlacklisted;
} catch (error) {
console.log('', error)
}
};
function userAddBlacklist() {
var settingsUserBox = document.createElement('div');
settingsUserBox.setAttribute('id', 'settingsUserBox');
settingsUserBox.style.marginBottom = '5px';
var settingsUserInput = document.createElement('input');
settingsUserInput.setAttribute("type", "text");
settingsUserInput.setAttribute("class", "settingsUserInput");
settingsUserInput.setAttribute("placeholder", "Input username here.");
settingsUserInput.style.color = 'white';
settingsUserInput.style.maxWidth = '40%';
settingsUserInput.style.height = '30px';
settingsUserInput.style.marginBottom = '0';
var settingsUserAdd = document.createElement('input');
settingsUserAdd.setAttribute("type", "button");
settingsUserAdd.style.height = '30px';
settingsUserAdd.value = 'Add User';
settingsUserAdd.onclick = function () {
settings.chatBlacklisted.push(this.parentNode.childNodes[0].value);
this.parentNode.parentNode.appendChild(chatBlacklisted(this.parentNode.childNodes[0].value));
this.parentNode.childNodes[0].value = "";
localStorage.setItem('FL_Settings', JSON.stringify(settings));
settings = JSON.parse(localStorage.getItem('FL_Settings'));
removeBlacklisted();
};
settingsUserBox.appendChild(settingsUserInput);
settingsUserBox.appendChild(settingsUserAdd);
return settingsUserBox
};
var settingsUserBlacklist = document.createElement('div');
settingsUserBlacklist.setAttribute('id', 'settingsUserBlacklist');
settingsUserBlacklist.style.borderBottom = 'thin solid white';
settingsUserBlacklist.style.padding = '5px';
settings.chatBlacklisted.forEach(element => settingsUserBlacklist.appendChild(chatBlacklisted(element)));
var settingsUserBlacklistText = document.createElement('div');
settingsUserBlacklistText.innerText = 'Chat User Blacklist';
settingsUserBlacklistText.style.minWidth = '100%';
settingsUserBlacklistText.style.fontSize = '20px';
settingsUserBlacklistText.style.color = 'white';
settingsUserBlacklist.prepend(userAddBlacklist());
settingsUserBlacklist.prepend(settingsUserBlacklistText);
return settingsUserBlacklist;
};
function settingsAuthorBlacklist(){
var settingsAuthorBlacklist = document.createElement('div');
settingsAuthorBlacklist.innerText = 'Hide quests with blacklisted authors. ';
settingsAuthorBlacklist.style.minWidth = '25%';
settingsAuthorBlacklist.style.fontSize = '20px';
settingsAuthorBlacklist.style.color = 'white';
settingsAuthorBlacklist.style.border = 'thin solid silver';
settingsAuthorBlacklist.style.padding = '5px';
settingsAuthorBlacklist.style.maxWidth = '25%';
settingsAuthorBlacklist.style.float = 'left';
var settingsAuthorBlacklistCheckbox = document.createElement('input');
settingsAuthorBlacklistCheckbox.setAttribute("type", "checkbox");
if (settings.questAuthorRemove == true){
settingsAuthorBlacklistCheckbox.checked = true;
};
settingsAuthorBlacklistCheckbox.addEventListener('change', (event) => {
if (event.target.checked) {
settings.questAuthorRemove = true;
} else {
settings.questAuthorRemove = false;
};
localStorage.setItem('FL_Settings', JSON.stringify(settings));
settings = JSON.parse(localStorage.getItem('FL_Settings'));
});
settingsAuthorBlacklist.appendChild(settingsAuthorBlacklistCheckbox);
return settingsAuthorBlacklist
};
function settingsAuthorsBlacklist() {
function authorBlacklistRemove(item) {
if (settings.authorBlacklist.includes(item)) {
let position = settings.authorBlacklist.indexOf(item);
settings.authorBlacklist.splice(position, 1);
localStorage.setItem('FL_Settings', JSON.stringify(settings));
settings = JSON.parse(localStorage.getItem('FL_Settings'));
};
};
function authorBlacklisted(element) {
try {
var authorBlacklisted = document.createElement('div');
authorBlacklisted.innerText = element;
authorBlacklisted.style.fontSize = '20px';
authorBlacklisted.style.float = 'left';
authorBlacklisted.style.minWidth = '50%';
authorBlacklisted.style.color = 'white';
authorBlacklisted.style.display = 'inline-block';
authorBlacklisted.style.border = 'thin solid silver';
authorBlacklisted.style.padding = '5px';
var settingsAuthorRemove = document.createElement('a');
settingsAuthorRemove.setAttribute('class', 'script');
settingsAuthorRemove.innerText = 'Remove';
settingsAuthorRemove.style.color = 'white';
settingsAuthorRemove.style.fontSize = '20px';
settingsAuthorRemove.style.display = 'inline-block';
settingsAuthorRemove.style.border = '3px solid red';
settingsAuthorRemove.style.backgroundColor = 'red';
settingsAuthorRemove.style.float = 'right';
settingsAuthorRemove.style.paddingLeft = '5px';
settingsAuthorRemove.style.paddingRight = '5px';
settingsAuthorRemove.onclick = function () {
try {
authorBlacklistRemove(element);
this.parentNode.remove();
} catch (error) {
console.log('Error removing author', error)
}
};
authorBlacklisted.appendChild(settingsAuthorRemove);
return authorBlacklisted;
} catch (error) {
console.log('', error)
}
};
function authorAddBlacklist() {
var settingsAuthorBox = document.createElement('div');
settingsAuthorBox.setAttribute('id', 'settingsAuthorBox');
settingsAuthorBox.style.marginBottom = '5px';
var settingsAuthorsInput = document.createElement('input');
settingsAuthorsInput.setAttribute("type", "text");
settingsAuthorsInput.setAttribute("class", "settingsAuthorsInput");
settingsAuthorsInput.setAttribute("placeholder", "Input author here.");
settingsAuthorsInput.style.color = 'white';
settingsAuthorsInput.style.maxWidth = '40%';
settingsAuthorsInput.style.height = '30px';
settingsAuthorsInput.style.marginBottom = '0';
var settingsAuthorsAdd = document.createElement('input');
settingsAuthorsAdd.setAttribute("type", "button");
settingsAuthorsAdd.style.height = '30px';
settingsAuthorsAdd.value = 'Add Author';
settingsAuthorsAdd.onclick = function () {
settings.authorBlacklist.push(this.parentNode.childNodes[0].value);
this.parentNode.parentNode.appendChild(authorBlacklisted(this.parentNode.childNodes[0].value));
this.parentNode.childNodes[0].value = "";
localStorage.setItem('FL_Settings', JSON.stringify(settings));
settings = JSON.parse(localStorage.getItem('FL_Settings'));
removeBlacklisted();
};
settingsAuthorBox.appendChild(settingsAuthorsInput);
settingsAuthorBox.appendChild(settingsAuthorsAdd);
return settingsAuthorBox
};
var settingsAuthorsBlacklist = document.createElement('div');
settingsAuthorsBlacklist.setAttribute('id', 'settingsAuthorsBlacklist');
settingsAuthorsBlacklist.style.borderBottom = 'thin solid white';
settingsAuthorsBlacklist.style.padding = '5px';
settings.authorBlacklist.forEach(element => settingsAuthorsBlacklist.appendChild(authorBlacklisted(element)));
var settingsAuthorsBlacklistText = document.createElement('div');
settingsAuthorsBlacklistText.innerText = 'Authors Blacklist';
settingsAuthorsBlacklistText.style.minWidth = '100%';
settingsAuthorsBlacklistText.style.fontSize = '20px';
settingsAuthorsBlacklistText.style.color = 'white';
settingsAuthorsBlacklist.prepend(authorAddBlacklist());
settingsAuthorsBlacklist.prepend(settingsAuthorsBlacklistText);
return settingsAuthorsBlacklist;
};
function settingsTagBlacklist(){
var settingsTagBlacklist = document.createElement('div');
settingsTagBlacklist.innerText = 'Hide quests with blacklisted tags. ';
settingsTagBlacklist.style.minWidth = '25%';
settingsTagBlacklist.style.fontSize = '20px';
settingsTagBlacklist.style.color = 'white';
settingsTagBlacklist.style.border = 'thin solid silver';
settingsTagBlacklist.style.padding = '5px';
settingsTagBlacklist.style.maxWidth = '25%';
settingsTagBlacklist.style.float = 'left';
var settingsTagBlacklistCheckbox = document.createElement('input');
settingsTagBlacklistCheckbox.setAttribute("type", "checkbox");
if (settings.questRemove == true){
settingsTagBlacklistCheckbox.checked = true;
};
settingsTagBlacklistCheckbox.addEventListener('change', (event) => {
if (event.target.checked) {
settings.questRemove = true;
} else {
settings.questRemove = false;
};
localStorage.setItem('FL_Settings', JSON.stringify(settings));
settings = JSON.parse(localStorage.getItem('FL_Settings'));
});
settingsTagBlacklist.appendChild(settingsTagBlacklistCheckbox);
return settingsTagBlacklist
};
function settingsTagsBlacklist(){
function tagBlacklistRemove(item){
if (settings.tagBlacklist.includes(item)){
let position = settings.tagBlacklist.indexOf(item);
settings.tagBlacklist.splice(position, 1);
localStorage.setItem('FL_Settings', JSON.stringify(settings));
settings = JSON.parse(localStorage.getItem('FL_Settings'));
};
};
function tagBlacklisted(element){
try{
var tagBlacklisted = document.createElement('div');
tagBlacklisted.innerText = element;
tagBlacklisted.style.fontSize = '20px';
tagBlacklisted.style.float = 'left';
tagBlacklisted.style.minWidth = '50%';
tagBlacklisted.style.color = 'white';
tagBlacklisted.style.display = 'inline-block';
tagBlacklisted.style.border = 'thin solid silver';
tagBlacklisted.style.padding = '5px';
var settingsTagRemove = document.createElement('a');
settingsTagRemove.setAttribute('class','script');
settingsTagRemove.innerText = 'Remove';
settingsTagRemove.style.color = 'white';
settingsTagRemove.style.fontSize = '20px';
settingsTagRemove.style.display = 'inline-block';
settingsTagRemove.style.border = '3px solid red';
settingsTagRemove.style.backgroundColor = 'red';
settingsTagRemove.style.float = 'right';
settingsTagRemove.style.paddingLeft = '5px';
settingsTagRemove.style.paddingRight = '5px';
settingsTagRemove.onclick = function(){
try{
tagBlacklistRemove(element);
this.parentNode.remove();
}catch(error){
console.log('Error removing tag',error)}
};
tagBlacklisted.appendChild(settingsTagRemove);
return tagBlacklisted;
}catch(error){console.log('',error)}
};
function tagAddBlacklist(){
var settingsTagBox = document.createElement('div');
settingsTagBox.setAttribute('id', 'settingsTagBox');
settingsTagBox.style.marginBottom = '5px';
var settingsTagsInput = document.createElement('input');
settingsTagsInput.setAttribute("type", "text");
settingsTagsInput.setAttribute("class", "settingsTagsInput");
settingsTagsInput.setAttribute("placeholder", "Input tag here.");
settingsTagsInput.style.color = 'white';
settingsTagsInput.style.maxWidth = '40%';
settingsTagsInput.style.height = '30px';
settingsTagsInput.style.marginBottom = '0';
var settingsTagsAdd = document.createElement('input');
settingsTagsAdd.setAttribute("type", "button");
settingsTagsAdd.style.height = '30px';
settingsTagsAdd.value = 'Add Tag';
settingsTagsAdd.onclick = function (){
settings.tagBlacklist.push(this.parentNode.childNodes[0].value);
this.parentNode.parentNode.appendChild(tagBlacklisted(this.parentNode.childNodes[0].value));
this.parentNode.childNodes[0].value = "";
localStorage.setItem('FL_Settings', JSON.stringify(settings));
settings = JSON.parse(localStorage.getItem('FL_Settings'));
removeBlacklisted();
};
settingsTagBox.appendChild(settingsTagsInput);
settingsTagBox.appendChild(settingsTagsAdd);
return settingsTagBox
};
var settingsTagsBlacklist = document.createElement('div');
settingsTagsBlacklist.setAttribute('id', 'settingsTagsBlacklist');
settingsTagsBlacklist.style.borderBottom = 'thin solid white';
settingsTagsBlacklist.style.padding = '5px';
settings.tagBlacklist.forEach(element => settingsTagsBlacklist.appendChild(tagBlacklisted(element)));
var settingsTagsBlacklistText = document.createElement('div');
settingsTagsBlacklistText.innerText = 'Tags Blacklist';
settingsTagsBlacklistText.style.minWidth = '100%';
settingsTagsBlacklistText.style.fontSize = '20px';
settingsTagsBlacklistText.style.color = 'white';
settingsTagsBlacklist.prepend(tagAddBlacklist());
settingsTagsBlacklist.prepend(settingsTagsBlacklistText);
return settingsTagsBlacklist;
};
//Toggles for features start here
function settingsNamefagToggle(){
var settingsNamefagToggle = document.createElement('div');
settingsNamefagToggle.innerText = 'Make everyone Anon ';
settingsNamefagToggle.style.minWidth = '25%';
settingsNamefagToggle.style.fontSize = '20px';
settingsNamefagToggle.style.color = 'white';
settingsNamefagToggle.style.border = 'thin solid silver';
settingsNamefagToggle.style.padding = '5px';
settingsNamefagToggle.style.maxWidth = '25%';
settingsNamefagToggle.style.float = 'left';
var settingsNamefagToggleCheckbox = document.createElement('input');
settingsNamefagToggleCheckbox.setAttribute("type", "checkbox");
if (settings.removeUsernames == true){
settingsNamefagToggleCheckbox.checked = true;
};
settingsNamefagToggle.addEventListener('change', (event) => {
if (event.target.checked) {
settings.removeUsernames = true;
} else {
settings.removeUsernames = false;
};
localStorage.setItem('FL_Settings', JSON.stringify(settings));
settings = JSON.parse(localStorage.getItem('FL_Settings'));
});
settingsNamefagToggle.appendChild(settingsNamefagToggleCheckbox);
return settingsNamefagToggle
};
function settingsRollerToggle(){
var settingsRollerToggle = document.createElement('div');
settingsRollerToggle.innerText = 'Toggle Auto Roller ';
settingsRollerToggle.style.minWidth = '25%';
settingsRollerToggle.style.fontSize = '20px';
settingsRollerToggle.style.color = 'white';
settingsRollerToggle.style.border = 'thin solid silver';
settingsRollerToggle.style.padding = '5px';
settingsRollerToggle.style.maxWidth = '25%';
settingsRollerToggle.style.float = 'left';
var settingsRollerToggleCheckbox = document.createElement('input');
settingsRollerToggleCheckbox.setAttribute("type", "checkbox");
if (settings.autoRoller == true){
settingsRollerToggleCheckbox.checked = true;
};
settingsRollerToggle.addEventListener('change', (event) => {
if (event.target.checked) {
settings.autoRoller = true;
} else {
settings.autoRoller = false;
};
localStorage.setItem('FL_Settings', JSON.stringify(settings));
settings = JSON.parse(localStorage.getItem('FL_Settings'));
});
settingsRollerToggle.appendChild(settingsRollerToggleCheckbox);
return settingsRollerToggle
};
function settingsAnonToggle(){
function toggleAnonStatus(){
var x=1
try{
try{
var username = localStorage.getItem('username');
var refURL = "https://fiction.live/user/"+username;
var profile = window.ty.currentUser.profile;
profile.asAnon = settings.anonToggle;
//console.log(refURL,JSON.stringify(profile));
}catch(error){
console.log('Toggle Anon Prep',error);x=2;
};
if (x=1){
fetch("https://fiction.live/api/user", {
"credentials": "include",
"headers": {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0",
"Accept": "application/json, text/javascript, */*; q=0.01",
"Accept-Language": "en-GB,en;q=0.5",
"Content-Type": "application/json",
"X-Requested-With": "XMLHttpRequest"
},
"referrer": refURL,
"body": JSON.stringify(profile),
"method": "PUT",
"mode": "cors"
});};
}catch(error){
console.log('Toggle Anon Set',error);
};
};
var settingsAnonToggle = document.createElement('div');
settingsAnonToggle.innerText = 'Toggle Anon status ';
settingsAnonToggle.style.minWidth = '25%';
settingsAnonToggle.style.fontSize = '20px';
settingsAnonToggle.style.color = 'white';
settingsAnonToggle.style.border = 'thin solid silver';
settingsAnonToggle.style.padding = '5px';
settingsAnonToggle.style.maxWidth = '25%';
settingsAnonToggle.style.float = 'left';
var settingsAnonToggleCheckbox = document.createElement('input');
settingsAnonToggleCheckbox.setAttribute("type", "checkbox");
if (settings.anonToggle == true){
settingsAnonToggleCheckbox.checked = true;
};
settingsAnonToggleCheckbox.addEventListener('change', (event) => {
if (event.target.checked) {
settings.anonToggle = true;
toggleAnonStatus();
} else {
settings.anonToggle = false;
toggleAnonStatus();
};
localStorage.setItem('FL_Settings', JSON.stringify(settings));
settings = JSON.parse(localStorage.getItem('FL_Settings'));
});
settingsAnonToggle.appendChild(settingsAnonToggleCheckbox);
return settingsAnonToggle
};
function settingsLiveRestore(){
var settingsLiveRestore = document.createElement('div');
settingsLiveRestore.innerText = 'Restore live timer to nav bar. ';
settingsLiveRestore.style.minWidth = '25%';
settingsLiveRestore.style.fontSize = '20px';
settingsLiveRestore.style.color = 'white';
settingsLiveRestore.style.border = 'thin solid silver';
settingsLiveRestore.style.padding = '5px';
settingsLiveRestore.style.maxWidth = '25%';
settingsLiveRestore.style.float = 'left';
var settingsLiveRestoreCheckbox = document.createElement('input');
settingsLiveRestoreCheckbox.setAttribute("type", "checkbox");
if (settings.liveRestore == true){
settingsLiveRestoreCheckbox.checked = true;
};
settingsLiveRestoreCheckbox.addEventListener('change', (event) => {
if (event.target.checked) {
settings.liveRestore = true;
} else {
settings.liveRestore = false;
};
localStorage.setItem('FL_Settings', JSON.stringify(settings));
settings = JSON.parse(localStorage.getItem('FL_Settings'));
});
settingsLiveRestore.appendChild(settingsLiveRestoreCheckbox);
return settingsLiveRestore
};
function settingsLiveLight(){
var settingsLiveLight = document.createElement('div');
settingsLiveLight.innerText = 'Light mode live timer. ';
settingsLiveLight.style.minWidth = '25%';
settingsLiveLight.style.fontSize = '20px';
settingsLiveLight.style.color = 'white';
settingsLiveLight.style.border = 'thin solid silver';
settingsLiveLight.style.padding = '5px';
settingsLiveLight.style.maxWidth = '25%';
settingsLiveLight.style.float = 'left';
var settingsLiveLightCheckbox = document.createElement('input');
settingsLiveLightCheckbox.setAttribute("type", "checkbox");
if (settings.liveLight == true){
settingsLiveLightCheckbox.checked = true;
};
settingsLiveLightCheckbox.addEventListener('change', (event) => {
if (event.target.checked) {
settings.liveLight = true;
} else {
settings.liveLight = false;
};
localStorage.setItem('FL_Settings', JSON.stringify(settings));
settings = JSON.parse(localStorage.getItem('FL_Settings'));
});
settingsLiveLight.appendChild(settingsLiveLightCheckbox);
return settingsLiveLight
};
function settingsAuthorHighlight(){
var settingsAuthorHighlight = document.createElement('div');
settingsAuthorHighlight.innerText = 'Highlight author(s) in chat. ';
settingsAuthorHighlight.style.minWidth = '25%';
settingsAuthorHighlight.style.fontSize = '20px';
settingsAuthorHighlight.style.color = 'white';
settingsAuthorHighlight.style.border = 'thin solid silver';
settingsAuthorHighlight.style.padding = '5px';
settingsAuthorHighlight.style.maxWidth = '25%';
settingsAuthorHighlight.style.float = 'left';
var settingsAuthorHighlightCheckbox = document.createElement('input');
settingsAuthorHighlightCheckbox.setAttribute("type", "checkbox");
if (settings.authorHighlight == true){
settingsAuthorHighlightCheckbox.checked = true;
};
settingsAuthorHighlightCheckbox.addEventListener('change', (event) => {
if (event.target.checked) {
settings.authorHighlight = true;
} else {
settings.authorHighlight = false;
};
localStorage.setItem('FL_Settings', JSON.stringify(settings));
settings = JSON.parse(localStorage.getItem('FL_Settings'));
});
settingsAuthorHighlight.appendChild(settingsAuthorHighlightCheckbox);
return settingsAuthorHighlight
};
function settingsLightHighlight(){
var settingsLightHighlight = document.createElement('div');
settingsLightHighlight.innerText = 'Light mode highlighting. ';
settingsLightHighlight.style.minWidth = '25%';
settingsLightHighlight.style.fontSize = '20px';
settingsLightHighlight.style.color = 'white';
settingsLightHighlight.style.border = 'thin solid silver';
settingsLightHighlight.style.padding = '5px';
settingsLightHighlight.style.maxWidth = '25%';
settingsLightHighlight.style.float = 'left';
var settingsLightHighlightCheckbox = document.createElement('input');
settingsLightHighlightCheckbox.setAttribute("type", "checkbox");
if (settings.highlightLightToggle == true){
settingsLightHighlightCheckbox.checked = true;
};
settingsLightHighlightCheckbox.addEventListener('change', (event) => {
if (event.target.checked) {
settings.highlightLightToggle = true;
} else {
settings.highlightLightToggle = false;
};
localStorage.setItem('FL_Settings', JSON.stringify(settings));
settings = JSON.parse(localStorage.getItem('FL_Settings'));
});
settingsLightHighlight.appendChild(settingsLightHighlightCheckbox);
return settingsLightHighlight
};
var settingsActual = document.createElement('div');
settingsActual.style.borderBottom = 'thin solid white';
settingsActual.style.padding = '5px';
var settingsActualText = document.createElement('div');
settingsActualText.innerText = 'Script Settings';
settingsActualText.style.minWidth = '100%';
settingsActualText.style.fontSize = '20px';
settingsActualText.style.color = 'white';
//Settings Checkboxes
settingsActual.appendChild(settingsAnonToggle());
settingsActual.appendChild(settingsRollerToggle());
settingsActual.appendChild(settingsNamefagToggle());
settingsActual.appendChild(settingsImageResize());
settingsActual.appendChild(settingsLiveRestore());
settingsActual.appendChild(settingsLiveLight());
settingsActual.appendChild(settingsAuthorHighlight());
settingsActual.appendChild(settingsLightHighlight());
settingsActual.appendChild(settingsRemoveBlankTopics());
settingsActual.appendChild(settingsFormRemove());
settingsActual.appendChild(settingsTagBlacklist());
settingsActual.appendChild(settingsChatBlacklist());
settingsActual.appendChild(settingsAuthorBlacklist());
settingsActual.prepend(settingsActualText);
var settingsTop = document.createElement('div');
settingsTop.innerText = 'Script Config';
settingsTop.style.fontSize = '30px';
settingsTop.style.color = 'white';
settingsTop.style.borderBottom = 'thin solid white';
settingsTop.style.padding = '5px';
function settingsBlacklist(){
var settingsAlertBox = document.createElement('div');
settingsAlertBox.setAttribute('id', 'settingsAlertBox');
settingsAlertBox.style.marginBottom = '5px';
var settingsAlertAdd = document.createElement('input');
settingsAlertAdd.setAttribute("type", "button");
settingsAlertAdd.style.height = '30px';
settingsAlertAdd.value = 'Blacklist Current Quest';
settingsAlertAdd.onclick = function (){
try{
let author = document.querySelector('span.author span.name').innerText;
let title = document.querySelector('header.page-title').innerText;
let entry = title + '___' + author;
settings.alertBlacklist.push(entry);
localStorage.setItem('FL_Settings', JSON.stringify(settings));
settingsBlacklist.appendChild(elementBlacklisted(entry));
}catch(error){
console.log('Something went wrong when trying to blacklist this quest. You did try it on a quest, RIGHT?',error);
}
};
var settingsBlacklist = document.createElement('div');
settingsBlacklist.setAttribute('id', 'settingsBlacklist');
settingsBlacklist.style.borderBottom = 'thin solid white';
settingsBlacklist.style.padding = '5px';
settings.alertBlacklist.forEach(element => settingsBlacklist.appendChild(elementBlacklisted(element)));
var settingsBlacklistText = document.createElement('div');
settingsBlacklistText.innerText = 'Alert Blacklist';
settingsBlacklistText.style.marginBottom = '5px';
settingsBlacklistText.style.minWidth = '100%';
settingsBlacklistText.style.fontSize = '20px';
settingsBlacklistText.style.color = 'white';
settingsAlertBox.prepend(settingsAlertAdd);
settingsBlacklist.prepend(settingsAlertBox);
settingsBlacklist.prepend(settingsBlacklistText);
return settingsBlacklist;
};
var settingsExit = document.createElement('a');
settingsExit.innerText = 'Exit'
settingsExit.style.color = 'white'
settingsExit.style.fontSize = '30px'
settingsExit.style.border = '3px solid red'
settingsExit.style.backgroundColor = 'red'
settingsExit.style.float = 'right'
settingsExit.style.paddingLeft = '5px'
settingsExit.style.paddingRight = '5px'
settingsExit.onclick = function(){document.querySelector('#confDisp').style.display = 'none'};
settingsTop.appendChild(settingsExit)
var confDisp = configDisplay();
var confBox = configBox();
confBox.appendChild(settingsTop);
confBox.appendChild(settingsActual);
confBox.appendChild(settingsTagsBlacklist());
confBox.appendChild(settingsUserBlacklist());
confBox.appendChild(settingsAuthorsBlacklist());
confBox.appendChild(settingsBlacklist());
confDisp.appendChild(confBox);
document.querySelector('body').prepend(confDisp);
}
}catch (error){
console.log('Settings Display Error',error);
};
};
function settingsOpen(){
var myLive = document.createElement('li');
myLive.setAttribute('id', 'confScript');
myLive.style.textShadow = '-1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000';
myLive.style.fontWeight = 'bold';
var configOpen = document.createElement('a');
configOpen.innerText = 'Config';
configOpen.onclick = function(){document.querySelector('#confDisp').style.display = 'block'};
myLive.appendChild(configOpen);
return myLive
};
function settingsInsert(){
try{
let mainMenu = document.querySelector('nav#mainMenu');
settingsDisplay()
if (!(mainMenu.querySelector('#confScript'))){
mainMenu.childNodes[2].appendChild(settingsOpen());
}
}catch (error){console.log('Errors inserting Settings',error)};
};
settingsInsert()
};
pageCheck();
monitorAlerts();
awaitMainMenu();
// Your code here...
})();