118
Figured I'd cobble together a quick-n-dirty greasemonkey/tapermonkey script to slighly modify the CSS to feel a little more like old.reddit with RES. Still not quite as compact as I'd like, but it's getting there.
**edit/update: **
- I've created a more aggressive and tighter CSS formatting script here: https://github.com/soundjester/lemmy_monkey/blob/main/old.reddit
- I'll update all future versions on github, rather than re-editing this post over and over.
- This is primarily for HD widescreen/desktop.
- Please suggest/make edits as you like.
changelog
- All future versions on github: https://github.com/soundjester/lemmy_monkey/
- v0.4 - reformatted to remove greater-than signs; added observer to catch and reformat new comments;
- v0.3 - added script to move the comment collapse button to be in front of user name (thanks @DarkwingDuck); tightened up the code, removed unneeded function call.
- v0.2 - modified to work on any lemmy instance (thank you, God!)
// ==UserScript==
// @name Lemmy to Old.Reddit Re-format (Observer)
// @namespace http://tampermonkey.net/
// @version 0.4
// @description Reformat widescreen desktop to look more like Reddit
// @author mershed_perderders, DarkwingDuck
// @match https://*/*
// ==/UserScript==
(function() {
'use strict';
var isLemmy = document.head.querySelector("[name~=Description][content]").content === "Lemmy";
function GM_addStyle(css) {
const style = document.getElementById("GM_addStyleBy8626") || (function() {
const style = document.createElement('style');
style.type = 'text/css';
style.id = "GM_addStyleBy8626";
document.head.appendChild(style);
return style;
})();
const sheet = style.sheet;
sheet.insertRule(css, (sheet.rules || sheet.cssRules || []).length);
}
function MoveCommentCollapseButton(container) {
var firstTargDiv = container.querySelector(".btn.btn-sm.text-muted");
var secondTargDiv = container.querySelector(".mr-2");
//-- Swap last to first.
container.insertBefore(firstTargDiv, secondTargDiv);
}
function ApplyMoveCommentCollapseButton(element) {
const observer = new MutationObserver(function(mutationsList) {
for (let mutation of mutationsList) {
if (mutation.type === 'childList') {
for (let addedNode of mutation.addedNodes) {
if (addedNode.matches('.d-flex.flex-wrap.align-items-center.text-muted.small')) {
MoveCommentCollapseButton(addedNode);
}
}
}
}
});
observer.observe(element, { childList: true, subtree: true });
}
//Lemmy to old.Reddit style reformats (to be used for custom stylesheet at a later date)
if (isLemmy) {
GM_addStyle(".container-fluid, .container-lg, .container-md, .container-sm, .container-xl { margin-right: unset !important; margin-left: unset !important;}");
GM_addStyle(".container, .container-lg, .container-md, .container-sm, .container-xl { max-width: 100% !important; }");
GM_addStyle(".col-md-4 { flex: 0 0 20% !important; max-width: 20%; }");
GM_addStyle(".col-md-8 { flex: 0 0 80% !important; max-width: 80%; }");
GM_addStyle(".col-sm-2 { flex: 0 0 9% !important; max-width: 10%; }");
GM_addStyle(".col-1 { flex: 0 0 4% !important; max-width: 5%; }");
GM_addStyle(".mb-2, .my-2 { margin-bottom: 0.3rem !important; }");
GM_addStyle(".mb-3, .my-3 { margin-bottom: .2rem !important; }");
GM_addStyle(".mt-3, .my-3 { margin-top: .2rem !important; }");
GM_addStyle(".thumbnail { min-height: 100px; max-height: 125px; }");
GM_addStyle(".vote-bar { margin-top: 15px !important; }");
GM_addStyle(".comments { margin-left: 20px; }");
// Move comment collapse buttons for existing elements
var divList = document.querySelectorAll(".d-flex.flex-wrap.align-items-center.text-muted.small");
divList.forEach(MoveCommentCollapseButton);
// Apply MoveCommentCollapseButton to dynamically loaded elements
ApplyMoveCommentCollapseButton(document.documentElement);
}
})();
Screenshot
>
I’ll have to give this a try! Does it work on any instance or just the one that you use?
The script is written to work on "sh.itjust.works" but you can easily change it to whatever instance you use by editing the
@match https://sh.itjust.works/*
to use that instance's URL.Just drop in the top-level name, similar to what you see used here. Easy-peasy.
I guess it IS a good argument to create a style like that other comment suggested. I'll look at doing that.
just so you know, you can make it universal by adding something very simple to your script:
just wrap the script with this:
that way ppl don't have to modify their script and it just works by default :)
Thank you God! Edit made!
I wanna put this here later, if you get around to doing it before I stop being busy, lmk
This took way too long.
Edited because I screwed up and only moved the first comment's collapse button. Whoopsie.
@mershed_perderders care to add this?
This is amazing! Nice work
an elegant solution. I gave up on it after an hour.
Also, this is super awesome. I will test it as soon as I'm on desktop tomorrow.
The only issue is this only works on page load, so comments loaded dynamically while you're on the page already won't get the collapse button moved.
Ahh. I made something for this. It uses some observer. Well, chatgpt made it. I'll find it and send it to you in a sec.
Here you go. Check the last lines about the observer. I don't know how that works. Honestly I didn't even read it. Chatgpt did that whole part for me. https://sh.itjust.works/post/42893
It doesn't work 100% but it works way better than without it.
Hello, I made [email protected], when you join and post a comment or make a post, I will mod you.
Do mentions work?
@[email protected]
I got notified, yup.
But I didn't mention you lol. Or are you talking about another mention?
I'm sorry, it's late and I'm a bit tired. Indeed you did not mention me, the reason I got notified is because your comment is a response to mine.
@[email protected] @[email protected] I got it. Code changed. Will await the other code, but I'm going to bed now (such a weakling, I know).
@[email protected] @[email protected] what do you guys think would be a good name for a community hosting this kind of augmentations? I was thinking of making something like /c/userscripts or /c/plugins. The latter sounds pretty cool.
I lost this in the comment chain. I think this is a good idea. I think plugins would be good - the next item I want to tackle is an infinite scroll script... pagination is for the birds.
[email protected]
Feel free to share anything there, I will share a couple of things myself. Once you post or comment I'll mod you.
I ran across a script the other day that essentially functioned as an auto-subscribe. The use case was subscribing to a federated community just by visiting and it was super useful. I had it installed, then uninstalled it and now I can't find it (sadface).
I was thinking of making it hahah. I actually made the basis for it but then had some trouble because of CORS. Was thinking of implementing an iframe to run the API fetch from within but that's so much trouble that I ended up giving up for now. If you find it please let me know.
Nooo how can you go to bed now! :c (am literally in bed lights off about to sleep) lol
yup lol
Thank you too :) I bless you for your awesome share.
Instead of querying the description (which I'm not sure is hardcoded or not), a better way to do this would probably be just
if (window.lemmyConfig)
. To me it seems pretty unused and might be gone in later versions, but it exists now and we can take advantage of it.There is also
window.isoData
which is probably bit more reliable, but no idea if that naming is Lemmy's or from a framework Lemmy happens to use. UnlikelemmyConfig
though it has plenty of data inside which might make it a lot more reliable if you dig deep enough.What I use I've tested all throughout many instances and it hasn't failed once yet. I didn't understand the first thing but yeah I might go with your suggestion Anyway at least to try it because it seems a tiny bit better practice.
Got it working! Thanks!