fix edx

Fixing UX problems of Edx

// ==UserScript==
// @name         fix edx
// @namespace    http://tampermonkey.net/
// @version      0.5
// @description  Fixing UX problems of Edx
// @author       Yaroslav Shepilov
// @match        https://courses.edx.org/*
// @match        https://inginious-lti.info.ucl.ac.be/*
// @grant        none
// ==/UserScript==

if (window.top === window.self) {

    window.onmessage = function(e){
        if (e.data.includes('"height"') && e.data.includes('"index"')) {
            var message = JSON.parse(e.data);
            var height = message.height;
            var index = message.index;

            //console.log("READ " + e.data);

            if (height > 0) {
                var iframe = document.getElementsByTagName('iframe')[index];

                var currentHeight = iframe.offsetHeight;

                var heightDiff = height - currentHeight;

                if ((heightDiff > 0) || (currentHeight == 800) || (heightDiff < -50)) {
                    iframe.style.height = height + "px";
                }
            }
        }
    };


} else {
    MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
    var currentFrame = window;

    var observer = new MutationObserver(function(mutations, observer) {
        var height = document.body.offsetHeight;

        var index = 0;
        for (var i = 0; i < parent.frames.length; i++) {
            if (parent.frames[i] === currentFrame) {
                index = i;
                break;
            }
        }

        var message = {"index": index, "height": height};
        var jsonMessage = JSON.stringify(message);
        //console.log("WRITE " + jsonMessage);
        window.parent.postMessage(jsonMessage, "https://courses.edx.org/");
    });

    observer.observe(document, {
        subtree: true,
        childList: true
    });
}