// ==UserScript== // @name Forum cleaner // @description Applies changes to the user interface of The-West's XenForo forum including design changes, addition of useful links like "Forum read"-buttons and other features. // @namespace fktext.bplaced.net/forenputze // @include http*://forum.the-west.*/* // @include http*://forum.beta.the-west.*/* // @version 1.40 // @grant none // @author stayawayknight // @downloadURL none // ==/UserScript== //Add new JS source function contentEval(source) { if ('function' == typeof source) { source = '(' + source + ')();'; } var script = document.createElement('script'); script.setAttribute('type', 'application/javascript'); script.textContent = source; document.body.appendChild(script); document.body.removeChild(script); } Forenputze = function () { Forenputze = { initialized: false }; //************************************ //General settings Forenputze.name = 'Forum cleaner'; Forenputze.version = '1.40'; Forenputze.updateURL = 'https://greasyfork.org/scripts/22679-forenputze/code/Forenputze.user.js'; Forenputze.updateCheckURL = 'https://greasyfork.org/de/scripts/22679-forenputze'; Forenputze.updateStorageKey = 'forenputze_last_check'; Forenputze.checkUpdateIntervall = 60 * 60 * 1000; Forenputze.mainPage = 'index.php'; Forenputze.read = 'Gelesen markieren'; Forenputze.gameLogin = 'Login im Spiel'; Forenputze.login = 'Login'; Forenputze.registration = 'Registrieren'; Forenputze.conversations = 'Unterhaltungen'; Forenputze.settings = 'Grundeinstellungen'; Forenputze.logout = 'Logout'; Forenputze.registrationLink = 'https://www.the-west.de/?page=create_forum_account'; Forenputze.scrollUp = 'Nach oben springen'; Forenputze.goToLastPost = 'Zum letzten Beitrag gehen'; Forenputze.askUpdate = 'Für das Benutzerskript "' + Forenputze.name + '" ist eine neuere Version verfügbar. Soll sie installiert werden?'; //************************************ //************************************ //Language //************************************ //************************************ //Main function, runs the other functions Forenputze.run = function () { Forenputze.checkUpdate(); Forenputze.changeHomeLinks(); Forenputze.addLinks(); Forenputze.formatLogo(); Forenputze.addPageUp(); Forenputze.changeReadIconColor(); Forenputze.highlightLastPost(); Forenputze.addLastPostButton(); Forenputze.changeDesign(); Forenputze.addForumReadButton(); }; //************************************ //************************************ //Update check Forenputze.checkUpdate = function () { //Check whether it is time for an update check or not (to avoid long loading times) if(localStorage.getItem(Forenputze.updateStorageKey)){ var lastTime = localStorage.getItem(Forenputze.updateStorageKey); var curTime = Date.now() + ''; //Compare if((curTime - lastTime) < Forenputze.checkUpdateIntervall){ //No update check necessary return; } } //Update last check time in local storage localStorage.setItem(Forenputze.updateStorageKey, Date.now() + ''); $.get(Forenputze.updateCheckURL, function (data, textStatus, jqxhr) { //Check for success if((jqxhr.status != 200) || (textStatus != 'success')){ console.log("Forenputze: Cannot check for update; Status: " + jqxhr.status); return; } var versionContainer = $(data).find('dd.script-show-version').find('span'); //Version on remote server found? if(!versionContainer.exists()){ console.log("Forenputze: Cannot get remote version.") return; } //Get remote version from container var versionRemote = versionContainer.text(); //Compare remote and own version if(versionRemote != Forenputze.version){ //Update possible var choice = confirm(Forenputze.askUpdate); //Perform update if(choice){ window.location = Forenputze.updateURL; } } }); }; //************************************ //Functions to adjust the forum ui //Change links that lead to TW to forum links Forenputze.changeHomeLinks = function () { //Logo: $('#logo').find('a').attr('href', Forenputze.mainPage); //Home: $('.homeCrumb').find('a').attr('href', Forenputze.mainPage); //Navigation: $('.navTab.home.PopupClosed').find('a').attr('href', Forenputze.mainPage); }; //Adds a logout button to the Quick link list Forenputze.addLinks = function () { //Check whether logged in if (!isLoggedIn()) { //Extend menu for guests var ownMenu = $(''); ownMenu.append($('
  • ' + Forenputze.login + '
  • ')); ownMenu.append($('
  • ' + Forenputze.registration + '
  • ')); $('.quickLinksBar').append(ownMenu); return; } //When cookie set, add game login link if (getCookie('ig_conv_last_site') != '') { var gameLogin = $('' + Forenputze.gameLogin + ''); $('.quickLinksBar').find('.section').find('ul').prepend(gameLogin); } //Extend menu for users var ownMenu = $(''); ownMenu.append($('
  • ' + Forenputze.conversations + '
  • ')); ownMenu.append($('
  • ' + Forenputze.settings + '
  • ')); ownMenu.append($('
  • ' + Forenputze.logout + '
  • ')); $('.quickLinksBar').append(ownMenu); }; //Resize main logo Forenputze.formatLogo = function () { $('#header').css('background', 'rgba(0,0,0,0) url("styles/west_mx/xenforo/headbg.png") no-repeat scroll center top'); $('#header').css('background-size', '100%'); $('#header').css('height', '250px'); $('#headerProxy').css('height', '255px'); }; //Add a page up button to the lower bar of the page Forenputze.addPageUp = function () { //Wait till everything is loaded $(document).ready(function () { var container = $('.breadBoxBottom').find('fieldset.breadcrumb'); var pageUpButton = $(''); //Set CSS properties pageUpButton.css('cursor', 'pointer'); pageUpButton.css('color', '#371902'); pageUpButton.css('display', 'block'); pageUpButton.css('float', 'right'); pageUpButton.css('font-size', '18px'); pageUpButton.css('height', '24px'); pageUpButton.css('line-height', '24px'); //Add click listener pageUpButton.click(function () { window.scrollTo(0, 0); }); if (container.find('.sidebarCollapse.icon-hdr_strong').exists()) { container.find('.sidebarCollapse.icon-hdr_strong').after(pageUpButton); } else { container.find('.OverlayTrigger.jumpMenuTrigger').after(pageUpButton); } }); }; //Saturate the non-read forum icons to create a bigger difference betweeen read and unread elements Forenputze.changeReadIconColor = function () { var icons = $('.nodeInfo').not('.unread, .linkNodeInfo').find('span.nodeIcon'); //Usual: icons.css('filter', 'saturate(20%)'); //Chrome, Opera, Safari: icons.css('-webkit-filter', 'saturate(20%)'); }; //Make the "Latest" text bold Forenputze.highlightLastPost = function () { $('.lastThreadTitle').find('span').css('font-weight', 'bold'); }; //Add a "mark read" button to each forum Forenputze.addForumReadButton = function () { //Check whehther logged in if (!isLoggedIn()) { return; } $('.nodeInfo.forumNodeInfo.primaryContent.unread').each(function (i, obj) { //Get link and add mark-read option var link = $(this).find('.nodeTitle').find('a').attr('href'); link += '-/mark-read'; //Add link near topic $(this).find('.nodeTitle').append(' ').append($('[' + Forenputze.read + ']')); //Add link to forum icon $(this).find('span.nodeIcon').wrap($('')); }); }; //Add a "go to last post" button to each thread in the overview Forenputze.addLastPostButton = function () { $('.discussionListItem').each(function (index, obj) { //Get latest post link var link = $(this).find('.listBlock.lastPost').find('.muted').find('a').attr('href'); if ((typeof link === 'undefined') || !isLoggedIn()) { return; } //Add button $(this).find('.title').append(' ').append($('')); }); }; //Do same changes to the design, including a change of the background Forenputze.changeDesign = function () { //Wooden background $('body').css('background-image', 'url(https://westdes.innogamescdn.com/images/interface/wood_texture_dark.jpg)'); //Remove footer color $('footer').find('.footer').find('.pageContent').css('background-color', 'rgba(0, 0, 0, 0.0)'); //Wooden moderator bar $('#moderatorBar').css('background-image', 'url(https://westdes.innogamescdn.com/images/interface/wood_texture_dark.jpg)'); //Moderator items color $('.modLink').css('background-color', '#ffeecc'); //Searchbar $('').appendTo('head'); //Forum content texture $('#content').find('.pageContent').css('background-image', 'url(https://westdes.innogamescdn.com/images/window/forum/external_bg.jpg)'); //Rounded corners $('#content').find('.pageContent').css('border-radius', '10px'); //Message background $('').appendTo('head'); //Rounded corners in message user block $('.messageUserBlock ').css('border-radius', '20px'); }; //Checks whether the user is logged (true) in or not (false) isLoggedIn = function () { return $('li#adm_right.navTab.login').size() < 1; }; //Reads a cookie getCookie = function (c_name) { if (document.cookie.length > 0) { c_start = document.cookie.indexOf(c_name + '='); if (c_start != - 1) { c_start = c_start + c_name.length + 1; c_end = document.cookie.indexOf(';', c_start); if (c_end == - 1) { c_end = document.cookie.length; } return unescape(document.cookie.substring(c_start, c_end)); } } return ''; }; //Query extension to check whether a exception is empty or not $.fn.exists = function () { return this.length !== 0; }; //Run main function Forenputze.run(); //Let XenForo crawl the overlays $('body').xfActivate(); }; $(document).ready(function () { contentEval(Forenputze); });