Greasy Fork is available in English.

慕课小助手

慕课网问答区快速查看问答详情、自动播放下一节视频

/*!
// ==UserScript==
// @name         慕课小助手
// @namespace    https://github.com/maomao1996/tampermonkey-scripts
// @version      0.3.10
// @description  慕课网问答区快速查看问答详情、自动播放下一节视频
// @icon         https://coding.m.imooc.com/static/wap/static/favicon.ico
// @author       maomao1996
// @include      *://coding.imooc.com/learn/qa/*
// @include      *://coding.imooc.com/lesson/*
// @grant        GM_addStyle
// ==/UserScript==
*/
;
(function () {
    'use strict';
    var STYLE_MAP = {
        'learn/qa': ".mm-modal {\n      position: fixed;\n      top: 0;\n      right: 0;\n      bottom: 0;\n      left: 0;\n      z-index: 1996;\n      display: none;\n      overflow-y: auto;\n    }\n    .mm-mask {\n      position: fixed;\n      top: 0;\n      right: 0;\n      bottom: 0;\n      left: 0;\n      z-index: 1;\n      background-color: rgba(0, 0, 0, 0.5);\n    }\n    .mm-modal-x {\n      overflow: hidden;\n      position: absolute;\n      top: 10%;\n      bottom: 5%;\n      left: 50%;\n      z-index: 2;\n      border-radius: 20px;\n      padding: 25px;\n      width: 836px;\n      min-height: 480px;\n      background: #fff;\n      transform: translateX(-50%);\n    }\n    .mm-modal-x::before {\n      position: absolute;\n      top: 0;\n      left: 0;\n      z-index: -1;\n      width: 100%;\n      content: '\u6570\u636E\u52A0\u8F7D\u4E2D...';\n      font-size: 24px;\n      text-align: center;\n      line-height: 480px;\n    }"
    };
    function addStyle(type) {
        var rules = STYLE_MAP[type];
        if (!rules) {
            return;
        }
        GM_addStyle(rules);
    }
    function getBntHtml(link) {
        return "<a class=\"mm-btn\" href=\"javascript:void(0)\" data-link=\"".concat(link, "\">\u5F39\u7A97\u67E5\u770B</a>");
    }
    function appendModal() {
        var modalHtml = '<div class="mm-modal" id="mm-modal"><div class="mm-mask"></div><div class="mm-modal-x"><iframe id="mm-content" width="100%" height="100%" frameborder="0"></iframe></div></div>';
        $('body').append(modalHtml);
    }
    function handleClick() {
        var link = $(this).data('link');
        $('#mm-modal').show().scrollTop(0);
        var $content = $('iframe#mm-content');
        $content.attr('src', link).on('load', function () {
            var iframeCtx = $(this).contents();
            var style = "<style id=\"mm-style\">\n      html, body {\n        overflow-x: hidden;\n        width: 836px!important;\n        min-width: 836px!important;\n        padding-bottom: 0!important\n      }\n      #footer, #globalTopBanner, #new_header, #J_GotoTop,html .col-aside.wenda-col-aside, .detail-r {\n        display: none!important\n      }\n      html .quedetail-wrap {\n        margin: 2px;\n      }\n      html .wenda-answer .cmt-post {\n        margin-bottom: 2px;\n      }\n      </style>";
            iframeCtx.find('head').append(style);
        });
    }
    function qaInit() {
        $('#qa-list .nwenda-box').each(function () {
            var link = $(this).attr('href');
            $(this).find('h3').append(getBntHtml(link));
        });
        appendModal();
        $(document).on('click', '.mm-mask', function () {
            $('#mm-modal').hide();
            $('#mm-content').attr({ src: '' });
        });
        $('#qa-list').on('click', '.mm-btn', handleClick);
    }
    function videoInit() {
        setTimeout(function () {
            $('#video-container-mocoplayer-hls-video_html5_api').on('ended', function () {
                var _a;
                console.log('当前视频播放完毕,即将播放下一节');
                (_a = $('.next-btn.js-next-media')[0]) === null || _a === void 0 ? void 0 : _a.click();
            });
        }, 3e3);
    }
    $(window).on('load', function () {
        var pathname = location.pathname;
        var TYPE = pathname.substr(1, pathname.lastIndexOf('/') - 1);
        addStyle(TYPE);
        switch (TYPE) {
            case 'learn/qa':
                console.log('问答区');
                qaInit();
                break;
            case 'lesson':
                console.log('视频详情');
                videoInit();
                $(window).on('hashchange', videoInit);
                break;
            default:
                break;
        }
    });
})();