HisInOne GreaseMonkey Script zum direkten Anzeigen der Raum-IDs
Quick and Dirty Script, um im His automatisch die roomId in den Suchergebnissen und Detailseiten zu Räumen anzuzeigen (direkt neben Raumname).
@match anpassen nicht vergessen!
// ==UserScript==
// @name Show HISinOne room ids
// @version 0.2
// @description try to take over the world!
// @author You
// @match https://campus.uni-freiburg.de/*
// ==/UserScript==
(function() {
'use strict';
var COMPLETED_READY_STATE = 4;
var RealXHRSend = XMLHttpRequest.prototype.send;
function proxifyOnReadyStateChange(xhr) {
if (xhr.hasMyProxy) return;
xhr.hasMyProxy = true;
var realOnReadyStateChange = xhr.onreadystatechange;
xhr.onreadystatechange = function() {
var r;
if (realOnReadyStateChange) {
r = realOnReadyStateChange();
}
if( xhr.readyState === COMPLETED_READY_STATE ) {
ajaxCompleted(xhr);
}
return r;
};
}
// Wire
(function() {
// Override send method of all XHR requests
console.log('Patching send');
XMLHttpRequest.prototype.send = function() {
// Wire response callbacks
var r = RealXHRSend.apply(this, arguments);
proxifyOnReadyStateChange(this);
return r;
};
})();
function ajaxCompleted(xhr) {
setTimeout(showRoomIds, 100);
}
function showRoomIds() {
var btns = document.querySelectorAll('BUTTON.linkTable');
var data;
for (var b = 0; b < btns.length; ++b) {
if (!btns[b].onclick) continue;
if (btns[b].hasRid) continue;
btns[b].hasRid = true;
if (btns[b].getElementsByTagName('SPAN').length === 0) continue;
data = btns[b].onclick.toString().match(/\['(?:room|entity)Id','(\d+)']/);
if (!data || data.length < 2) continue;
btns[b].parentNode.appendChild(document.createTextNode(' (RID: ' + data[1] + ')'));
}
data = false;
var txt = document.getElementById('plan:permalink:permalinkPopup:permalink')
|| document.getElementById('roomDetail:top:permalink:permalinkPopup:permalink');
if (txt && txt.value) {
data = txt.value.match(/roomId=(\d+)(&|$)/);
}
if (!data || data.length < 2) {
txt = document.querySelectorAll('optgroup option[selected]');
if (txt && txt.length) {
for (b = 0; b < txt.length; ++b) {
if (txt[b].value && txt[b].value.match(/^\d+$/)) {
data = [ 0, txt[b].value ];
break;
}
}
}
}
if (data && data.length > 1) {
var dst = document.getElementById('hisinoneTitle') || txt.parentNode;
if (!dst.hasRid) {
dst.hasRid = true;
dst.appendChild(document.createTextNode(' (RID: ' + data[1] + ')'));
}
}
}
showRoomIds();
})();