Commit b04070a4 authored by Tobias Zeumer's avatar Tobias Zeumer
Browse files

Tore-Scripts

parent 84a407b2
# tub-tampermonkey
# TUB-Tampermonkey
Tampermonkey-Scripts
\ No newline at end of file
[Tampermonkey](https://www.tampermonkey.net/) (früher Greasemonkey) ist eine Erweiterung, die es praktisch für alle Browser gibt. Beliebiges Javascript kann in (bestimmte) Seiten injiziert werden, um sie dem eigenen Bedarf anzupassen. Das kann auch nützlich sein, um "am lebenden Objekt" schnell alternative Darstellungen zu präsentieren.
\ No newline at end of file
// ==UserScript==
// @name TUB TORE: Autoren-Authority anpassen
// @namespace http://tampermonkey.net/
// @version 1.0
// @description Icons für Autoren, die sich selbst in der Personensuche ausgeblendete haben und Anpassung der Farben.
// @author Tobias Zeumer
// @match https://tore.tuhh.de/handle/*
// @grant none
// @ merker: require https://code.jquery.com/jquery-3.1.0.min.js
// ==/UserScript==
/* NOTES
* Elegante Lösungen
* - https://stackoverflow.com/questions/494143/creating-a-new-dom-element-from-an-html-string-using-built-in-dom-methods-or-pro/35385518#35385518
* - https://stackoverflow.com/a/4793630
*/
(function() {
'use strict';
// Alle Links mit class 'authority' finden
var lstAuthority = document.querySelectorAll('a.authority');
// Alle Links durchgehen und wenn auf einen Link mit 'author'-Class kein Link ohne 'author'-Class folgt, dann fehlt ein Typ-Link
var authorityLinkCount = lstAuthority.length - 1;
for (let i = 1; i <= authorityLinkCount; i++) {
let curAuthority = lstAuthority[i];
let prevAuthority = lstAuthority[i-1];
// Sind der letzte und der aktuelle Link beides Author-Links? Dann füge dem vorherigen einen People-Link an
if (prevAuthority.classList.contains('author') && curAuthority.classList.contains('author')) {
prevAuthority.parentNode.insertBefore(getAuthorityLink(prevAuthority), prevAuthority.nextSibling);
}
// Spezialfall - der letzte Autor (letztes Element mit 'author'-Class in <td>) hat kein Symbol
else if (curAuthority.parentElement.lastElementChild == curAuthority && curAuthority.classList.contains('author')) {
curAuthority.parentNode.insertBefore(getAuthorityLink(curAuthority), curAuthority.nextSibling);
}
}
// Link mit neuer Class 'staff-unlisted'
function getAuthorityLink(authorLink) {
let authorityID = authorLink.href.toString().match(/rp\d*/gi)[0];
let authorityLink = htmlToElement('<a href="/cris/rp/'+authorityID+'" class="authority"> <span data-toggle="tooltip" data-placement="top" title="" class="fa fa-user staff-unlisted" data-original-title="TUHH MitarbeiterIn (ungelistet)"></span></a>');
return authorityLink;
}
// Get real nodes from plaintext html
// https://stackoverflow.com/questions/494143/creating-a-new-dom-element-from-an-html-string-using-built-in-dom-methods-or-pro/35385518#35385518
function htmlToElement(html) {
var template = document.createElement('template');
html = html.trim(); // Never return a text node of whitespace as the result
template.innerHTML = html;
return template.content.firstChild;
}
// Eigenes Style-Element
var style = document.createElement('style');
style.type = 'text/css';
style.innerHTML = '\
.fa-user.staff {color: #00CCCC;} \
.fa-user.exstaff {color: #FFDD00;} \
.fa-user.externalstaff {color: #A49CCC;} \
.fa-user.undefinedstaff {color: gray;} \
.fa-user.staff-unlisted {color: #4065CC}; \
';
document.getElementsByTagName('head')[0].appendChild(style);
})();
\ No newline at end of file
// ==UserScript==
// @name TUB TORE: Fehlende DE-Übersetzungen
// @namespace http://tampermonkey.net/
// @version 1.0
// @description Fehlende Übersetzungen anpassen
// @author Tobias Zeumer
// @match https://tore.tuhh.de/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
// Superior? Vielleicht eher "head"? An anderer Stelle (http://vm028.tub.tuhh.de/browse?type=ouname&rpp=100) wird "Director" genutzt
// Da sollten die ganze HTML-Leerzeichen weg: <span class="dynaLabel">Affiliations&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
try {
translateToDe();
}
catch(err) {
console.log("Sollte mit wirklich allen Browsern kein Problem sein. Oder doch? ...: "+err);
}
/**
* Dumpf alles zum Übersetzen durchgehen
*/
function translateToDe() {
var enElements;
var i;
var translations = JSON.parse('{ \
"(All)": "(Alle)", \
"(Persons)": "(Personen)", \
"Affiliations": "Zugehörigkeit", \
"Amount": "Betrag", \
"Co-Investigator(s)": "Co-Schnüffler", \
"Coordinator": "Projektleitung", \
"Department": "Abteilung", \
"Description": "Bescheibung", \
"Director": "Leitung", \
"Email": "E-Mail", \
"Full Name": "Name", \
"Fullname": "Name", \
"Funding Program": "Förderprogramm", \
"Funding until": "Gefördert bis", \
"Grants": "Förderung", \
"Information": "Informationen", \
"Institute": "Institut", \
"Keyword(s)": "Schlagwörter", \
"P-Investigator": "P-Schnüffler", \
"Personal Site": "Webseite", \
"Projects": "Projekte", \
"Publications": "Veröffentlichungen", \
"Researcher": "Wissenschaftler", \
"Sponsor": "Förderer", \
"Subprojects": "Teilprojekte", \
"Superior": "Leitung", \
"Title": "Titel", \
"URL": "Webseite", \
"Variants": "Varianten", \
"xxx": "xxx", \
"xxx": "xxx", \
"xxx": "xxx", \
"xxx": "xxx", \
"Letze hat": "kein Komma ;)" \
}');
// Irgendwas um festzustellen, dass gerade kein Deutsch angezeigt wird
if (document.getElementById('designedby').innerHTML.indexOf('Ansprechpartner') < 1) return false;
// Alles auf einmal durchgehen (TEXT)
// Alle Tabs (.ui-tabs-anchor) durchgehen
// Alle grauen Abschnittsköpfe (.panel-title a) durchgehen
// Sortierbare Tabellen: sortierbarer Kopf (.table-hover th.sortable); z.B. http://vm028.tub.tuhh.de/cris/ou/ou00003/people.html?sort_bypersons=4&orderpersons=DESC&open=persons#persons
enElements = document.querySelectorAll(".ui-tabs-anchor, .panel-title a, .table-hover th.sortable a");
for (i = 0; i < enElements.length; i++) {
let txtEN = enElements[i].text.trim(); // Trim, weil die irgendwie unendlich Leerzeichen drumherum haben
if (translations[txtEN]) enElements[i].text = translations[txtEN];
}
// Alles auf einmal durchgehen (innerHTML)
// Alle Label (.dynaLabel) durchegehen
// Alle grauen Abschnittsköpfe die geklammerten Sachen (.panel-title .btn-group) durchgehen
// Sortierbare Tabellen: nicht sortierbarer Kopf (.table-hover th.sortable); z.B. http://vm028.tub.tuhh.de/cris/ou/ou00003/people.html?sort_bypersons=4&orderpersons=DESC&open=persons#persons
enElements = document.querySelectorAll(".dynaLabel, .panel-title .btn-group, .table-hover th");
for (i = 0; i < enElements.length; i++) {
let txtEN = enElements[i].innerHTML.trim(); // Trim, weil die irgendwie unendlich Leerzeichen drumherum haben
if (translations[txtEN]) enElements[i].innerHTML = translations[txtEN];
}
// Die Filterbuttons - ganz, ganz dumpf mit replace
enElements = document.getElementsByClassName('btn');
for (i = 0; i < enElements.length; i++) {
let txtEN = enElements[i].innerHTML;
console.log(txtEN);
txtEN = txtEN.replace('Show/Hide filters', 'Filter zeigen/verbergen')
txtEN = txtEN.replace('Close filters', 'Filter schließen')
enElements[i].innerHTML = txtEN;
}
}
})();
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment