Disable Disqus URL Tracking

Remove the http[s]://disq.us/url?url= Disqus added in 2016-12

// ==UserScript==
// @name         Disable Disqus URL Tracking
// @namespace    http://tampermonkey.net/
// @version      0.4
// @description  Remove the http[s]://disq.us/url?url= Disqus added in 2016-12
// @author       Luke Breuer
// @match        *://disqus.com/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // not using jquery because:
    // https://statuscode.ch/2017/03/CSP-unsafe-eval-and-jquery/
    // but we can apparently trust that Disqus included it

    function post_count() {
        return $("#conversation li.post").length;
        //return document.evaluate("count(//*[@id='conversation']//li[@class='post'])", document, null, XPathResult.NUMBER_TYPE, null).numberValue;
    }

    function fix_urls() {
        // As of 2016-12-20, Disqus uses http tracking for http links, and https tracking for https links
        var urls = $("a[href^='http://disq.us/url?url='], a[href^='https://disq.us/url?url=']");
        //console.log("Offending URL count: " + urls.length);
        //console.log(post_count());

        urls.each(function() {
            var new_url = /^https?:\/\/disq.us\/url\?url=(https?:.*?)(:.+)?(&.+)?$/i.exec(decodeURIComponent(this.href))[1];
            //console.log(decodeURIComponent(this.href));
            //console.log(new_url);
            this.href = new_url;
        });
    }

    function wait_for_min_posts(min, max_tries, f) {
        var try_wait = 200; // ms
        var tid = setInterval(function() {
            if (post_count() >= min) {
                clearInterval(tid);
                f();
            }
            if (--max_tries <= 0)
                clearInterval(tid);
        }, try_wait);
    }

    //console.log("UserScript entered");

    var lastCount = 0;
    var iteration = 0;
    setInterval(function() {
        var count = post_count();
        iteration++;
        if (count != lastCount) {
            console.log(iteration, count);
            lastCount = count;
        }
    }, 50);

    wait_for_min_posts(1, 200, function() {
        fix_urls();
        // catch additional comments loaded from navigation to specific comment (#comment-)
        wait_for_min_posts(post_count() + 1, 100, function() { fix_urls(); });

        $('#posts > div.load-more > a').click(function() {
                wait_for_min_posts(post_count() + 1, 100, function() { fix_urls(); });
            });
    });
})();