17 comments

[ 2.8 ms ] story [ 44.9 ms ] thread
wow, i started writing something similar yesterday.

mine will fade out all that have been "seen" (not visited) and in a generic manner so it will work on all sites. I'm not sure yet if automatically or with a button press.

maybe with a button press and only those links that have been visible in the viewport (if performance allows tracking the position of every link)

is yours open source? if love to steal how you save all the links.

I wrote https://github.com/raszpl/hackahackernews to do it on HN. Tracks posts and comments.
I'll check that out :) I currently use a chrome webextention for HN I somehow managed to get in to firefox:

https://github.com/guiambros/HNMarkAllRead

For my endavour I guess I should use a DB and never really had to before. For a generic solution I don't wint to push it all in to one big array but split by domain or something.

It says it works on mobile, but the button only says Add to Desktop when I visit from mobile chrome. How do I get it working on mobile? Does Chrome on Android even support extensions?
I know this fades them out, whether you've clicked on them or not, but it makes me think about how so many sites no longer use a:visited properly, and just style it the same colour as un-visited links. Each day, web usability takes a step backwards. How many extra extensions do we have to start installing before it becomes usable again?! Sometimes I really miss HTML 2.0.
I hate it soo much. Pervasive spying doesnt help either. YT for example loves to generate custom redirects for all offsite links posted in video description/comments :(.

You can fix videos by injecting

    // make visited links distinct
    injectStyle('.yt-lockup-title a:visited {color: black;}');
    injectStyle('#watch7-sidebar .video-list-item a .title {color: #167ac6;}');
    injectStyle('#watch7-sidebar .video-list-item a:visited .title {color: #141761;}');
    injectStyle('a.yt-uix-sessionlink {color: #167ac6 !important;}');
    injectStyle('a.yt-uix-sessionlink:visited {color: #141761 !important;}');
but things like external links and playlists require looping over document.getElementsByClassName("yt-uix-sessionlink"), monitoring DOMNodeInserted, and injecting history.pushState(null, null, 'https://www.youtube.com/watch?v='+videoID) for all the garbage filled YT links (what you get when clicking on playlist video). I pack all of it into my custom tempermonkey script.
I added a script on greasemonkey for HN visited linked with : I dont remember where did I get that code, but it work for me.

    // ==UserScript==
    // @name     HN visited link
    // @version  1
    // @grant    all
    // ==/UserScript==
    
    let aCss = `
        .news-list a:visited {
    			color: lightgray;
        }
    `
    
    addGlobalStyle(aCss);
    function addGlobalStyle(css) {
        var head, style;
        head = document.getElementsByTagName('head')[0];
        if (!head) { return; }
        style = document.createElement('style');
        style.type = 'text/css';
        style.innerHTML = css;
        head.appendChild(style);
    }
How much work would it be to support all websites by default with this feature?
Probably the web is trying to align behaviour with native apps? I don't know much apps that express if you have seen something through the UI.
I can offer my partial explanation why this happens. When a site wants to stylize the underline using a background property, it cannot change this property for :visited. This includes sites trying to have a different color for the underline (CSS text decoration module 4, supported by both Firefox and Chromium now) or trying to ensure the underline do not touch a glyph (not supported natively in Firefox, CSS text decoration module 4 too) or wanting to control the width of the underline (still CSS text decoration module 4, not supported by anything). Hopefully, this will go away in the future.

Some sites may also just don't see the value of distinguishing visited links from unvisited ones. That's a shame.

Is there source code available? Would like to get this working on Firefox
This a fantastic UX idea.