Generate markdown files' table of contents or anchor links menu automatically

Generate markdown files' table of contents or anchor links menu automatically, make markdown files easy to read

Ekde 2020/01/14. Vidu La ĝisdata versio.

// ==UserScript==
// @name         Generate markdown files' table of contents or anchor links menu automatically
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Generate markdown files' table of contents or anchor links menu automatically, make markdown files easy to read
// @author       FWX
// @include      https://*.muc*.cn/*
// @grant        none
// @require      https://cdn.staticfile.org/jquery/3.4.1/jquery.min.js
// ==/UserScript==

(function () {
    'use strict';

    var links = $('a.anchor');
    var html = '';
    var $wrap = '';
    var winH = window.screen.availHeight || window.screen.height;

    if (!links || !links.length) {
        return false;
    }

    html = '<div id="wx-mkd-toc" style="z-index: 9999; position: fixed; bottom: 50px; right: 20px; background: #f2f2f2; padding: 10px; border: 1px solid #f2f2f2;"><h1 style="margin: 0; font-size: 16px;"><a href="javascript:;"><span>+</span>目录预览</a></h1><div class="wx-mkd-con" style="display: none; overflow: hidden; overflow-y: scroll; padding: 20px; max-height: '+ (winH*.5)+'px;"><ul style="margin: 0; padding: 0;">';
    $wrap = $('body');

    $.each(links, function (idx, item) {
        var $this = $(item);
        var $p = $this.parent();
        var tag = (($p[0] && $p[0].tagName) || '').toLowerCase();
        var tagNum = (tag || '').replace(/h/gi, '');
        var mLeft = tagNum * 15;

        html += '<li style="margin-left: ' + mLeft + 'px;" class="c_toc_' + tag + '"><a href="' + $this.attr('href') + '">' + $p.text() + '</a></li>'
    });

    html += '</ul></div></div>';

    $wrap.prepend(html);

    $wrap.on('click', '#wx-mkd-toc h1', function(){
        var $this = $(this);
        var $thisSpan = $this.find('span');
        var thisSpanTxt = $thisSpan.text();
        var $thisCon = $this.parent().find('.wx-mkd-con');

        if(thisSpanTxt.match(/\+/gi)){
            $thisCon.show();
            $thisSpan.text('-');
        } else {
            $thisCon.hide();
            $thisSpan.text('+');
        }
    });

})();