// ==UserScript==
// @name Forenputze
// @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.*/*
// @exclude http*://forum.the-west.*/admin.php*
// @exclude http*://forum.beta.the-west.*/admin.php*
// @version 1.48
// @grant none
// @author stayawayknight
// @downloadURL none
// ==/UserScript==
//************************************
// Great thanks to WojcieszyPL (@.the-west.pl) for translating the script into Polish!
//************************************
//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 = 'Forenputze';
Forenputze.version = '1.48';
Forenputze.lang = 'net';
Forenputze.conversationsStorageKey = 'forenputze_conversations';
Forenputze.collapseStorageKey = 'forenputze_collapse';
Forenputze.collapseCookieExpireDays = 365;
Forenputze.collapseCookieName = 'xf_express';
Forenputze.mainPage = 'index.php';
Forenputze.dzikiLink = 'https://dzikitw.wordpress.com/';
//************************************
//************************************
//Language
Forenputze.langs = {
de: {
read: 'Gelesen markieren',
markAllRead: 'Alle Foren als gelesen markieren',
gameLogin: 'Login im Spiel',
login: 'Login',
registration: 'Registrieren',
conversations: 'Unterhaltungen',
settings: 'Grundeinstellungen',
logout: 'Logout',
scrollUp: 'Nach oben springen',
goToLastPost: 'Zum letzten Beitrag gehen',
registered: 'Registriert',
confirmConversationCheck: 'Du hast neue ungelesene private Nachrichten. Soll die Unterhaltungsübersicht geöffnet werden?',
dziki: 'DzikiTW',
collapse: 'Zuklappen',
expand: 'Aufklappen',
forum: 'Forum'
},
net: {
read: 'Mark as read',
markAllRead: 'Mark all forums as read',
gameLogin: 'Login into the game',
login: 'Login',
registration: 'Register',
conversations: 'Conversations',
settings: 'Basic settings',
logout: 'Logout',
scrollUp: 'Back to top',
goToLastPost: 'Go to last post',
registered: 'Registered',
confirmConversationCheck: 'You have new unread private messages. Do you want to open the conversation overview?',
dziki: 'DzikiTW',
collapse: 'Collapse',
expand: 'Expand',
forum: 'Forum'
},
pl: {
read: 'Oznacz jako przeczytane',
markAllRead: 'Oznacz wszystkie fora jako przeczytane',
gameLogin: 'Zaloguj się do gry',
login: 'Zaloguj się',
registration: 'Rejestracja',
conversations: 'Prywatne wiadomości',
settings: 'Podstawowe ustawienia',
logout: 'Wyloguj się',
scrollUp: 'Powrót do góry',
goToLastPost: 'Idź do ostatniego postu',
registered: 'Zarejestrowany',
confirmConversationCheck: 'Masz nową prywatną wiadomość. Chcesz otworzyć podgląd rozmowy?',
dziki: 'DzikiTW',
collapse: 'Zwiń',
expand: 'Rozwiń',
forum: 'Forum'
}
};
//************************************
//************************************
//Main function, runs the other functions
Forenputze.run = function () {
Forenputze.resolveLang();
Forenputze.changeHomeLinks();
Forenputze.addLinks();
Forenputze.formatLogo();
Forenputze.addPageUp();
Forenputze.removeShareSections();
Forenputze.changeReadIconColor();
Forenputze.highlightLastPost();
Forenputze.addLastPostButton();
Forenputze.addForumReadButton();
Forenputze.setCollapseCookieTime();
Forenputze.addForumCollapse();
Forenputze.formatPosts();
Forenputze.changeDesign();
Forenputze.checkConversations();
};
//************************************
//************************************
Forenputze.resolveLang = function () {
var tld = getTLD();
if (Forenputze.langs[tld]) {
Forenputze.lang = tld;
}
};
//************************************
//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 () {
//Get quick links bar:
var quickLinksBar = $('.quickLinksBar');
//Add link to DzikiTW for PL players
if (Forenputze.lang == 'pl') {
var dzikiMenu = $('
');
dzikiMenu.append('' + Forenputze.langs[Forenputze.lang].dziki + '')
quickLinksBar.append(dzikiMenu);
} //Check whether logged in
if (!isLoggedIn()) {
//Extend menu for guests
var registerLink = $('#adm_right2.navTab.login').find('a').attr('href');
var ownMenu = $('');
ownMenu.append($('' + Forenputze.langs[Forenputze.lang].login + ''));
ownMenu.append($('' + Forenputze.langs[Forenputze.lang].registration + ''));
quickLinksBar.append(ownMenu);
return;
} //When cookie set, add game login link
if (getCookie('ig_conv_last_site') != '') {
var gameLogin = $('' + Forenputze.langs[Forenputze.lang].gameLogin + '');
quickLinksBar.find('.section').find('ul').prepend(gameLogin);
} //Extend menu for users
//Create own menu section
var ownMenu = $('');
//Create forum link to mark all forums als read
var forumReadLink = $('' + Forenputze.langs[Forenputze.lang].markAllRead + '');
forumReadLink.click(function () {
//Send ajax request to mark all forums as read
XenForo.ajax('index.php?forums/-/mark-read', {
'_xfConfirm': 1
}, function (data) {
//Redirect needed?
if (data._redirectStatus == 'ok') {
//Redirect/reload page
location.href = data._redirectTarget;
}
});
});
ownMenu.append($('').append(forumReadLink));
ownMenu.append($('' + Forenputze.langs[Forenputze.lang].conversations + ''));
ownMenu.append($('' + Forenputze.langs[Forenputze.lang].settings + ''));
ownMenu.append($('' + Forenputze.langs[Forenputze.lang].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
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');
pageUpButton.css('margin-right', '5px');
//Add class for recognition
pageUpButton.addClass('page-up-button');
//Add click listener
pageUpButton.click(function () {
window.scrollTo(0, 0);
});
if (container.find('.sidebarCollapse').exists()) {
container.find('.sidebarCollapse').after(pageUpButton);
} else {
container.find('.OverlayTrigger.jumpMenuTrigger').after(pageUpButton);
}
};
//Removes the share section above each thread
Forenputze.removeShareSections = function () {
//Overall share section with facebook and twitter
$('.sharePage').remove();
//Follow us section on the right hand side
$('.userList:first div.primaryContent').parent().remove();
//**Thanks to stewue (@forum.the-west.de)**
};
//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, .pageNodeInfo').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.langs[Forenputze.lang].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($(''));
});
};
//Adds onclick listeners to the category collapse buttons that ensure that the remembering cookie lasts one year and do not expire with the session
Forenputze.setCollapseCookieTime = function () {
//Function for persisting the cookie
persist = function () {
setCookie(Forenputze.collapseCookieName, getCookie(Forenputze.collapseCookieName), Forenputze.collapseCookieExpireDays);
};
//Add onclick listeners to persist the cookie always when a category is clicked
$('.CatTrigger').click(function () {
persist();
});
//Persist cookie for the first time
if (getCookie(Forenputze.collapseCookieName) && getCookie(Forenputze.collapseCookieName) != '') {
persist();
}
};
//Implement collapse possibility for forums
Forenputze.addForumCollapse = function () {
//Functions to collapse and expand forums:
//Collapses a forum with animation, given by the forum's DOM node
collapseAnim = function (forum) {
forum.children().first().slideUp();
forum.find('.collapsed_forum_header').show();
};
//Collapses a forum fastly without animation, given by the forum's DOM node
collapse = function (forum) {
forum.children().first().hide();
forum.find('.collapsed_forum_header').show();
};
//Expands a forum with animation, given by the forum's DOM node
expandAnim = function (forum) {
//Remove button header
forum.children().first().slideDown();
forum.find('.collapsed_forum_header').hide();
};
//Begin of the executive part
//Read forums that are saved as collapsed from the local storage und parse it
var collapsedForums = localStorage.getItem(Forenputze.collapseStorageKey);
if (collapsedForums != null) {
collapsedForums = JSON.parse(collapsedForums);
}
$('.node.forum.level_2').each(function () {
var node_id = $(this).attr('class').match(/node_(\d+)/) [1];
//Create collapse button
var button_collapse = $('');
//Styles
button_collapse.css('width', '9px');
button_collapse.css('height', '9px');
button_collapse.css('padding', '3px');
button_collapse.css('font-size', '12px');
button_collapse.css('border-radius', '50%');
button_collapse.css('color', '#ffeecc');
button_collapse.css('background-color', '#371902');
button_collapse.css('margin-left', '8px');
button_collapse.css('cursor', 'pointer');
//Add collapse functionality to the collapse button
button_collapse.click({
forum: $(this),
id: node_id
}, function (event) {
collapseAnim(event.data.forum);
var stored = localStorage.getItem(Forenputze.collapseStorageKey);
if (stored == null) {
stored = {
};
} else {
stored = JSON.parse(stored);
}
stored[event.data.id] = true;
localStorage.setItem(Forenputze.collapseStorageKey, JSON.stringify(stored));
});
$(this).find('.nodeTitle').append(button_collapse);
//Add forum header for collapsed forum and expand button
var forumTitle = $(this).find('.nodeTitle').children().first().text();
var unread = $(this).children().first().hasClass('unread');
//Exact match with sheriff icon: margin-left: 55px
var forumHeader = $('');
//Add forum title to the header and make it bold when unread
if (unread) {
forumHeader.append($('' + Forenputze.langs[Forenputze.lang].forum + ': ' + forumTitle + ''));
} else {
forumHeader.append($('' + Forenputze.langs[Forenputze.lang].forum + ': ' + forumTitle + ''));
} //Create expand button
var button_expand = $('');
//Styles
button_expand.css('width', '9px');
button_expand.css('height', '9px');
button_expand.css('padding', '3px');
button_expand.css('font-size', '12px');
button_expand.css('border-radius', '50%');
button_expand.css('color', '#ffeecc');
button_expand.css('background-color', '#371902');
button_expand.css('margin-left', '5px');
button_expand.css('cursor', 'pointer');
//Add expand functionality to the expand button
button_expand.click({
forum: $(this),
id: node_id
}, function (event) {
expandAnim(event.data.forum);
var stored = localStorage.getItem(Forenputze.collapseStorageKey);
if (stored == null) {
return;
}
stored = JSON.parse(stored);
delete stored[event.data.id];
localStorage.setItem(Forenputze.collapseStorageKey, JSON.stringify(stored));
});
forumHeader.append(button_expand);
//Hide collapse header by default
forumHeader.hide();
//Append forum header to the ui
$(this).append(forumHeader);
//Are there collapsed forums and is the current forum saved as collapsed?
if ((collapsedForums != null) && collapsedForums[node_id]) {
//Collapse forum in UI
collapse($(this));
}
});
};
//Formats the posts so that they become smaller
Forenputze.formatPosts = function () {
//Replace long usernames with ellipsis
$('.username').each(function () {
$(this).attr('title', $(this).text());
$(this).css('text-overflow', 'ellipsis').css('white-space', 'nowrap');
});
//Increase the width of user profile section every post a little bit
$('.messageUserInfo').css('padding-left', '5px').css('width', '160px');
//Removes the "agreement" section in user profiles in posts
var userInfo = $('.extraUserInfo');
userInfo.each(function () {
$(this).find('.pairsJustified').eq(0).find('dt').text(Forenputze.langs[Forenputze.lang].registered + ':');
$(this).find('.pairsJustified').eq(2).remove();
});
//Format the pairs in the user vocabulary for better readability
var pairs = userInfo.find('.pairsJustified');
pairs.css('font-size', '12px');
pairs.find('dt').css('font-weight', 100).css('text-transform', 'none');
pairs.find('dd').css('text-transform', 'none');
};
//Do same changes to the design, including a change of the background
Forenputze.changeDesign = function () {
//Wooden background
$('body').css('background-image', 'url(https://westde.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://westde.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://westde.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');
//Let buttons look like west buttons
$('').appendTo('head');
//Change breadcrumb bars to western bars
$('.breadcrumb').css({
'background-image': 'url("https://westde.innogamescdn.com/images/tw2gui/window/window2_title.png?13")',
'background-size': '100% 100%',
'background-color': 'rgba(0,0,0,0)',
'box-shadow': 'none',
'border-radius': '0px',
'padding-left': '15px',
'padding-right': '15px',
});
$('.crumb, .sidebarCollapse, .icon-room, .page-up-button').css({
'color': '#ffeecc',
'background-color': 'rgba(0,0,0,0)',
'border-bottom': 'none'
});
$('').appendTo('head');
};
Forenputze.checkConversations = function () {
//Init local storage
if (localStorage.getItem(Forenputze.conversationsStorageKey) == null) {
localStorage.setItem(Forenputze.conversationsStorageKey, 0);
}
var numberConversations = parseInt($('#ConversationsMenu_Counter').find('span.Total').text());
var savedConversations = parseInt(localStorage.getItem(Forenputze.conversationsStorageKey));
//Alert neccessary?
if (numberConversations > savedConversations) {
localStorage.setItem(Forenputze.conversationsStorageKey, numberConversations);
if (confirm(Forenputze.langs[Forenputze.lang].confirmConversationCheck)) {
//Navigate
location.href = 'index.php?conversations/';
}
}
localStorage.setItem(Forenputze.conversationsStorageKey, numberConversations);
};
//Checks whether the user is logged (true) in or not (false)
isLoggedIn = function () {
return $('li#adm_right.navTab.login').size() < 1;
};
//Returns the top level domain of the current site
getTLD = function () {
var tld = window.location.hostname;
tld = tld.split('.');
pos = tld.length - 1;
return tld[pos];
};
//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 '';
};
//Sets a cookie with name, value and days
setCookie = function (name, value, days) {
var expires;
if (days) {
var date = new Date();
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
expires = '; expires=' + date.toUTCString();
}
else {
expires = '';
}
document.cookie = name + '=' + value + expires + '; path=/';
};
//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);
});