TPS Campus Extension

TPS Markdown Renderer!

// ==UserScript==
// @name         TPS Campus Extension
// @namespace    http://tampermonkey.net/
// @version      2024-11-29
// @description  TPS Markdown Renderer!
// @author       Ivan He
// @match        https://campus.at-tps.org/user/*/?profiletab=*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=at-tps.org
// @grant        GM_addStyle
// @require      https://cdnjs.cloudflare.com/ajax/libs/markdown-it/13.0.2/markdown-it.min.js
// @require      https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.10.0/highlight.min.js
// @copyright 2024, Ivan He (https://greasyfork.org/en/users/1404078-ivan-he)
// @license MIT
// ==/UserScript==

(function() {
    'use strict';
    let msgl = -1;
    let msgll = -1;
    // Register the language for highlight.js
    //hljs.registerLanguage('javascript', window.hljs_languages.javascript);
    GM_addStyle("pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#f3f3f3;color:#444}.hljs-comment{color:#697070}.hljs-punctuation,.hljs-tag{color:#444a}.hljs-tag .hljs-attr,.hljs-tag .hljs-name{color:#444}.hljs-attribute,.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-name,.hljs-selector-tag{font-weight:700}.hljs-deletion,.hljs-number,.hljs-quote,.hljs-selector-class,.hljs-selector-id,.hljs-string,.hljs-template-tag,.hljs-type{color:#800}.hljs-section,.hljs-title{color:#800;font-weight:700}.hljs-link,.hljs-operator,.hljs-regexp,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-symbol,.hljs-template-variable,.hljs-variable{color:#ab5656}.hljs-literal{color:#695}.hljs-addition,.hljs-built_in,.hljs-bullet,.hljs-code{color:#397300}.hljs-meta{color:#1f7199}.hljs-meta .hljs-string{color:#38a}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}")
    var checker = setInterval(function() {
        var messages = document.getElementsByClassName("um-activity-bodyinner-txt");
        var comments = document.getElementsByClassName("um-activity-comment-text");
        if (messages[0] != undefined) {
            if (messages.length != msgl || comments.length != msgll) {
                var md = window.markdownit();
                md.set({
                    highlight: function (str, lang) {
                        if (lang && hljs.getLanguage(lang)) {
                            try {
                                return '<pre class="hljs"><code>' +
                                    hljs.highlight(lang, str, true).value +
                                    '</code></pre>';
                            } catch (__) {}
                        }

                        return '<pre class="hljs"><code>' + md.utils.escapeHtml(str) + '</code></pre>';
                    }
                });
                for (let i = 0; i < messages.length; i++) {

                    const markdownText = messages[i].textContent.replace("						", "").replace("(See more)","");
                    console.log(markdownText)
                    if (!markdownText.includes("<|rendered|>")){

                        let endes = messages[i].innerHTML.split('<span class="post-meta">')[1];
                        if (endes){

                            const renderedMarkdown = md.render(markdownText).replaceAll("\n","<br>")+endes+"<p style='display:none'><|rendered|></p>";
                            messages[i].innerHTML = renderedMarkdown;
                        }else{
                            const renderedMarkdown = md.render(markdownText).replaceAll("\n","<br>")+"<p style='display:none'><|rendered|></p>";
                            messages[i].innerHTML = renderedMarkdown;
                        }

                        
                    }
                }
                for (let i = 0; i < comments.length; i++) {
                    const markdownText = comments[i].textContent.replace("						", "").replace("				","");
                    if (!markdownText.includes("<|rendered|>")){
                       

                        const renderedMarkdown = md.render(markdownText);
                        comments[i].innerHTML = renderedMarkdown+"<p style='display:none'><|rendered|></p>";
                    }
                }
                msgl = messages.length;
                msgll = comments.length;
            }

        }
    }, 1000);
})();