With the version
![]()
I get the following in one of my browsers:
In another browser with the version
![]()
I get what I actually like to see
How can I enable/reenable that view ?
With the version
![]()
I get the following in one of my browsers:
In another browser with the version
![]()
I get what I actually like to see
How can I enable/reenable that view ?
go to your collections, scroll down to the place tab settings.
if you want the place event list on the overview pqge you just select overview.
have you tried putting the place schedule on a different page? like details or something?
Yes .. it doesn’t help
So as a summary: it works in Chrome and Firefox on all of my two machines, but on Vivaldi in one Machine saving the preferences doesn’t have any effect, the other one works (all is on Windows 10 with Tampermonkey 5.3.3)
i assume then that there is an issue with the localstorage wich the script uses to save the settings.
oke, so i made some change, i know use browsing where possible to get more stuff at a faster rate (when viewing events for an artist or venue this will reduce the amount of request by a factor of 100; i tested on the boss since that is one of the artists with the most added events and now it only takes 42 requests)
i have also added paging to some schedules / lists. i notices that once there is alot of stuff the browser cannot visualise the full table i create. so now i make pages per 100 items and that works fine.
during the testing with the boss i notices that a bunch of stuff is missing. so i created an extra list with unknown items. i cannot sort items if they don’t have a type since i don’t know where to sort it. for this i made a list that shows the name of the items that don’t have a type and then i make links to the pages that it could be. to easily adjust the errors.
Very cool, I will test it out as soon as I’m on my home machine
Works like a charm… I also like the “unknow list” … would it be possible to sort it by date (if it starts with a date) ?
i have pushed a fix that sortes the unkown stuff by the [‘life-span’].begin date
Works perfectly… thx for the prompt reply
Bug: Uncaught TypeError: Cannot set properties of null (setting 'style') on unsupported pages
On pages/tabs the script doesn’t handle (e.g. /release/<mbid> → overview, which logs "release & overview not allowed yet"), doStuff() returns early and never calls prepareDivs(). That means the #bottom1–#bottom3 (and other) divs are never created on the page.
However, window.onresize is registered unconditionally at script load and blindly does document.getElementById('bottom' + i).style = ... — so any window resize on one of these unsupported pages throws, because the element is null:
Uncaught TypeError: Cannot set properties of null (setting 'style')
at window.onresize (sanojjonas-visualise-stuff.user.js:1238:15)
updateText() has the exact same pattern (document.getElementById(div).innerHTML = ... with no null check) and is likewise called in code paths that don’t guarantee the target div exists.
Both are simple null-guards, no behavior change on supported pages:
--- a/sanojjonas-visualise-stuff.user.js
+++ b/sanojjonas-visualise-stuff.user.js
@@ -1232,9 +1232,11 @@ window.onresize = () => {
const amount = 3;
const width = document.body.clientWidth - 285;
for (let i = 1; i <= amount; i++) {
const div = document.getElementById(`bottom${i}`);
- div.style = `overflow-x: auto; width: ${width}px;`;
+ if (div) {
+ div.style = `overflow-x: auto; width: ${width}px;`;
+ }
}
}
--- a/sanojjonas-visualise-stuff.user.js
+++ b/sanojjonas-visualise-stuff.user.js
@@ -1609,6 +1609,9 @@ function updateText(div, text, scroll) {
function updateText(div, text, scroll) {
const element = document.getElementById(div);
+ if (!element) {
+ return;
+ }
element.innerHTML = text;
if (scroll === true) {
Tested against https://musicbrainz.org/release/a24eb845-0b82-44a7-8227-d13d4c1200dd (release/overview) — error no longer appears on resize.
should be solved in the last version
Yap, thx… it seems to be fixed
I get another error now, e.g. on 2026‐10‐03: Merriweather Post Pavilion, Columbia, MD, USA - MusicBrainz
userscript.html?name=sanojjonas-visualise-stuff.user.js&id=39cb5d25-a89a-401b-9c61-6d1089d68abe:2290 Uncaught (in promise) TypeError: eventValue.playType.get is not a function
at getCalenderDescription (userscript.html?name=sanojjonas-visualise-stuff.user.js&id=39cb5d25-a89a-401b-9c61-6d1089d68abe:2290:58)
at createCalenderButton (userscript.html?name=sanojjonas-visualise-stuff.user.js&id=39cb5d25-a89a-401b-9c61-6d1089d68abe:2169:18)
at userscript.html?name=sanojjonas-visualise-stuff.user.js&id=39cb5d25-a89a-401b-9c61-6d1089d68abe:2774:19
at Map.forEach (<anonymous>)
at generateEventSchedule (userscript.html?name=sanojjonas-visualise-stuff.user.js&id=39cb5d25-a89a-401b-9c61-6d1089d68abe:2727:15)
at updateStuff (userscript.html?name=sanojjonas-visualise-stuff.user.js&id=39cb5d25-a89a-401b-9c61-6d1089d68abe:1981:5)
at searchImages (userscript.html?name=sanojjonas-visualise-stuff.user.js&id=39cb5d25-a89a-401b-9c61-6d1089d68abe:1605:7)
Looking at a saved copy of a rendered event page, the script currently injects <div id="load">, <div id="load2">, <div id="load3">, <div id="bottom1"> … <div id="bottom7"> (divAmount), and <div id="load4"> as direct siblings inside MusicBrainz’s own #content, separated only by bare <br> elements (prepareDivs()), with no shared wrapper. The generated <table> elements already carry class="sanojjonas", which is great and already usable as a coarse selector — but the surrounding divs, the pagination buttons, and the <br> spacers carry no script-identifying attribute at all.
For anyone else’s userscript that wants to detect, hide, move, or strip your output (mine included), that means falling back to generic, collision-prone ids like #bottom1. A single wrapping container would make that trivial:
function prepareDivs(place, amount, load) {
const root = document.getElementById("sanojjonas-root") || document.createElement("div");
root.id = "sanojjonas-root";
root.className = "sanojjonas";
document.getElementById(place).appendChild(root);
// append load/load2/load3/bottomN/load4 into root instead of place
}
Then other scripts can do one document.querySelector('.sanojjonas') / #sanojjonas-root instead of enumerating every internal id, and it’d let you remove()/rebuild the whole block in one call on navigation instead of re-querying each div individually. It’s backward compatible — the existing child ids (#bottom1 etc.) don’t need to change, they’d just gain a parent.
Another console log error on e.g BoDeans - Events - MusicBrainz when on the final rendered page and clciking the “play count” button:
helpers.js:119 Uncaught TypeError: artistValue.events.forEach is not a function
(anonymous) @ userscript.html?name…1-6d1089d68abe:3264
generatePlayCountList @ userscript.html?name…1-6d1089d68abe:3250
updateStuff @ userscript.html?name…1-6d1089d68abe:1993
(anonymous) @ userscript.html?name…61-6d1089d68abe:505
i don’t understand why another script would need to remove stuff from my script. the settings should make it so that you could decide what tables you want to show and which ones you want to hide.
either way, i still added a root component
and i solved the error when you switch after the script is done loading stuff