Hallo werte Mituser!
Ich habe Spaß und Interesse daran gefunden euch und mir das Leben im Bisaboard einfacher zu machen. Daher habe ich mich entschlossen euch die Tools die ich entwickelt habe hier in diesem Topic zur Verfügung zu stellen und Support zu leisten, sollte dieser benötigt werden.
TabmenuWizard
Der größte Skandal im Jahr 2015 war wohl die Abschaffung der Tabmenüs. Dies führte dazu, dass viele User Bedenken dazu äußerten, da sie Tabmenüs in alten Themen benutzen und sie diese nun umwandeln müssen, sodass diese weiterhin existieren können - nur eben ohne Tabmenüs.
Ich - Gutmensch und stolz drauf - habe mir also die Mühe gemacht und ein Tool entwickelt welches Tabmenüs per Mausklick in ein Format umwandelt welches vom BisaBoard weiterhin unterstützt wird.
Ihr findet das Tool über den folgenden Link, wie genau ihr es benutzt wird euch direkt auf der Seite erklärt: http://snobilik.at/tabmenu/
Solltet ihr Interesse am Code hinter dem Tool haben, so findet ihr hier das Repository: https://github.com/iMarv23/TabmenuWizard
BisaBoardProfil+
Dieses Tool ist mehr aus eigenem Interesse entstanden, da ich schon ein paar Jahre im Bisaboard registriert bin und mittlerweile jede Menge Zahlen auf meinem Profil angehäuft habe, wollte ich herausfinden wie viele Zahlen ich so im Schnitt täglich angehäuft habe. Dies habe ich nun in Form eines Userscripts umgesetzt, welches berechnet wie viele Beiträge, Likes und Erfahrungspunkte ich pro Tag im Bisaboard erarbeitet habe.
Ihr könnt das Userscript über diesen Link installieren, vorausgesetzt dass ihr Greasemonkey bereits auf eurem Browser installiert habt: https://gist.github.com/iMarv2…ardprofilplus.min.user.js
Hier der (lesbare) Programmcode:
// ==UserScript==
// @id bisaboardprofilplus
// @name BisaboardProfil+
// @version 1.0
// @namespace at.snobilik
// @author Marv
// @description Enhances your bisaboard profil
// @include https://www.bisaboard.de/index.php/User/*
// @include http://www.bisaboard.de/index.php/User/*
// @run-at document-end
// ==/UserScript==
// definiert $ für jQuery, nicht zwingend Notwendig, hatte jedoch Probleme mit dem Kontext.
// $ war im Kontext des Profils vorhanden, im Kontext des Userscripts jedoch nicht.
var $ = unsafeWindow.jQuery;
// Funktion um einen Monats-String in die Zahl umzuwandeln die für das Date-Format benötigt wird.
// Argumente:
// monthString : Monat in Form eines Strings, also "Januar", "Februar", (...), "November" oder "Dezember"
// Rückgabe:
// Eine Zahl zwischen einschließlich 0 und 11
// Wird kein valider Monat übergeben, so ist die Ausgabe 11
var convertMonth = (function (monthString) {
switch (monthString) {
case "Januar":
return 0;
case "Februar":
return 1;
case "März":
return 2;
case "April":
return 3;
case "Mai":
return 4;
case "Juni":
return 5;
case "Juli":
return 6;
case "August":
return 7;
case "September":
return 8;
case "Oktober":
return 9;
case "November":
return 10;
case "Dezember":
return 11;
default:
return 11;
}
});
// Funktion welche die Anzahl an Tagen berechnet, die der User bereits im BisaBoard registriert ist.
// Argumente:
// regDateString : String welcher das Registrierungsdatum im Bisaboard enthält
// z.B.: "Bisafan seit 17. Juli 2008"
// Rückgabe:
// Anzahl an Tagen seit dem Registrierungsdatum
var getDaysInBoard = (function (regDateString) {
// Regulärer Ausdruck (Regular Expression) kurz: RegEx
// /([0-9]{1,2})\. (.+?) ([0-9]{4})/
// / / Ein Slash am Anfang und am Ende definieren einen regulären Ausdruck in Javascript
// ([0-9]{1,2}) Erste CaptureGroup, matched ein bis 2 Ziffern von 0-9
// \. Matched das Zeichen '.' und eine Leerstelle (Der Tag wird als "17." übergeben)
// (.+?) Zweite CaptureGroup, matched eine beliebige Zeichenfolge bis zum nächsten Zeichen nach der Capture Group (in diesem Fall eine weitere Leerstelle)
// ([0-9]{4}) Dritte CaptureGroup, matched eine 4-stellige Zahl
var match = /([0-9]{1,2})\. (.+?) ([0-9]{4})/.exec(regDateString);
// Aus dem Ergebnis des regulären Ausdrucks wird ein neues Datum generiert.
// Zur Definition des Monats wird die zuvor erstellte Funktion "convertMonth" genutzt.
var regDate = new Date(parseInt(match[3]), convertMonth(match[2]), parseInt(match[1]));
// Zieht man ein Datum von einem anderen ab, so erhält man in der Differenz die Millisekunden zwischen diesen
// Diese werden dann entsprechend geteilt und die Anzahl der Tage wird zurückgegeben.
return Math.round((new Date() - regDate) / (1000 * 60 * 60 * 24));
});
// Funktion welche dem Profil neue Elemente hinzufügt
// Argumente:
// parentElement : Element in welches die neuen Elemente eingefügt werden sollen
// text : Bezeichnungstext für den übergebenen Wert
// value : Wert passend zum Bezeichnungstext
var addElements = (function (parentElement, text, value) {
parentElement.append('<dt>' + text + '</dt><dd>' + value + '</dd>');
});
// Der Hauptteil des Userscripts wird erst ausgeführt, wenn das Dokument geladen wurde.
// $(function(){}) ist equivalent zu $(document).ready(function(){})
$(function () {
// Sammelt den Text "Bisafan seit __. _____ ____",
// übergibt ihn an die Funktion getDaysInBoard()
// und ermittelt somit die Anzahl an Tagen seit der Registrierung
var timeInBoard = getDaysInBoard($('.dataList').find('li').last().text());
// Speichert das Element $('.statsDataList') in einer Variable, für einfacheren Zugriff
var statBox = $('.statsDataList');
// Läuft durch jedes 'dt' Element in statBox
statBox.find('dt').each(function (index) {
// Speichert den Wert des zugehörigen 'dd' Elements in einer Variable, für einfacheren Zugriff
// Das 'dd' Element wird über den aktuellen Index ermittelt, da es die selbe Anzahl an 'dd' und 'dt' Elementen gibt
//
// Da Werte ab 1000 mit einem '.', also als 1.000, 10.000, etc. dargestellt werden, wird dieser Punkt entfernt
// um einen validen Zahlenwert zu erhalten
var value = parseInt(statBox.find('dd').eq(index).text().replace('.', ''));
// Switch-Anweisung welche sich mit dem Inhalt des 'a' Elements im 'dd' Element befasst
switch ($(this).find('a').first().text()) {
// Ist der Inhalt des Elements "Beiträge", so ist value die Anzahl von Beiträgen des Users
// value wird durch die Anzahl der Tage im Board geteilt und auf 2 Stellen gerundet und mit Bezeichnungstext dem Profil hinzugefügt.
case "Beiträge":
addElements(statBox, "Beiträge/Tag", Math.round((value / timeInBoard) * 100) / 100);
break;
// Ist der Inhalt des Elements "Erhaltene Danksagungen", so ist value die Anzahl von Danksagungen des Users
// value wird durch die Anzahl der Tage im Board geteilt und auf 2 Stellen gerundet und mit Bezeichnungstext dem Profil hinzugefügt.
case "Erhaltene Danksagungen":
addElements(statBox, "Bedankungen/Tag", Math.round((value / timeInBoard) * 100) / 100);
break;
// Ist der Inhalt des Elements "Erfahrungspunkte", so ist value die Anzahl von Erfahrungspunkten des Users
// value wird durch die Anzahl der Tage im Board geteilt und auf 2 Stellen gerundet und mit Bezeichnungstext dem Profil hinzugefügt.
case "Erfahrungspunkte":
addElements(statBox, "Erfahrungspunkte/Tag", Math.round((value / timeInBoard) * 100) / 100);
break;
}
});
});
Alles anzeigen
Anregungen und Wünsche sind immer gern gesehen, natürlich auch Feedback und Verbesserungsvorschläge.