【推荐版本】智慧职教 | 职教云 —— 课件下载

专门用于对智慧职教旗下的职教云、MOOC学院和资源库的课件下载

// ==UserScript==
// @name         【推荐版本】智慧职教 | 职教云 —— 课件下载
// @namespace    https://greasyfork.org/zh-CN/users/856720
// @version      0.9.1
// @description  专门用于对智慧职教旗下的职教云、MOOC学院和资源库的课件下载
// @license      GPL License
// @author       a我还是少年a
// @match        *://zjy2.icve.com.cn/common/directory/directory.html?*
// @match        *://www.zjy2.icve.com.cn/common/directory/directory.html?*
// @match        *://mooc-old.icve.com.cn/study/courseLearn/resourcesStudy.html?*
// @match        *://www.icve.com.cn/study/directory/dir_course.html?*
// @match        *://www.icve.com.cn/portal_new/sourcematerial/edit_seematerial.html?*
// @match        *://www.icve.com.cn/portal/manage-sourcematerialofindex-editmaterial?*
// @match        *://www.icve.com.cn/portal/sourcematerial/edit_seematerial.html?*
// @match        *://zyk.icve.com.cn/icve-study/coursePreview/courseware?*
// @match        *://user.icve.com.cn/learning/u/*
// @match        *://icve-mooc.icve.com.cn/learning/u/*
// @match        *://mooc.icve.com.cn/learning/u/*
// @match        *://course.icve.com.cn/learnspace/learn/learn/templateeight/content_video.action*
// @match        *://course.icve.com.cn/learnspace/learn/learn/templateeight/content_text.action*
// @match        *://course.icve.com.cn/learnspace/learn/learn/templateeight/content_audio.action*
// @match        *://course.icve.com.cn/learnspace/learn/learn/templateeight/content_doc.action*
// @match        *://course.icve.com.cn/learnspace/learn/learn/templateeight/courseware_index.action*
// @match        *://mooc.icve.com.cn/patch/zhzj/studentMooc_selectMoocCourse.action
// @require      https://cdn.jsdelivr.net/npm/[email protected]/dist/ponyfill.min.js
// @require      https://cdn.jsdelivr.net/npm/[email protected]/StreamSaver.min.js
// @require      https://cdn.jsdelivr.net/npm/[email protected]/dist/clipboard.min.js
// @icon         https://zjy2.icve.com.cn/favicon.ico
// @connect      spoc-yunpan.icve.com.cn
// @connect      spoc-res.icve.com.cn
// @connect      zyk.icve.com.cn
// @grant        GM_addStyle
// @grant        GM_xmlhttpRequest
// ==/UserScript==

(function() {
    'use strict';
    let icveStyle = `
        /*资源库的CSS样式*/
        .resource-bank-download {
            float: right;
            padding: 1.5em 20px;
        }

        .download-btn {
            border: none;
            outline: none;
            appearance: none;
            -webkit-appearance: none;
            cursor: pointer;
            font-size: 1.5em;
            padding: .5em 1em;
            border-radius: 6px;
            box-shadow: 0 5px 0 0 #2e8b57;
            background: #8fbc8f;
            color: #fff;
            transition: all .1s ease-out;
            -moz-user-select: none;
            -webkit-user-select: none;
            -ms-user-select: none;
            user-select: none;
        }

        .download-btn:hover {
            background: #73b173;
            box-shadow: 0 4px 0 0 #2e8b57;
            transform: translateY(1px);
        }

        .download-btn:hover:active {
            box-shadow: 0 1px 0 0 #2e8b57;
            transform: translateY(4px);
        }

        /*旧版职教云的CSS样式*/
        .icve-director {
            position:absolute;
            top:8px;
            right:10px;
            z-index:999;
        }

        .icve-resourcesStudy{
            position:absolute;
            top:12px;
            right:10px;
            z-index:999;
        }

        /*权限激活界面*/
        .icve-active-download {
            width: 150px;
            margin-left: 10px;
        }

        /*新版音频下载界面*/
        .audio-download{
            position: absolute;
            top: 5px;
            right: 50px;
        }

        /*新版文档下载界面*/
        .doc_download{
            position: absolute;
            top: 25px;
            right: 25px;
            z-index: 999;
        }

        .doc-areat{
            position: absolute;
            top: 100px;
            left:0;
            right:0;
            margin:0 auto;
            z-index: 999999999;
            width: 400px;
            height: 200px;
            background-color: #2b2b2b;
            opacity:0.8;
            filter: Alpha(opacity=80);
            -moz-opacity:0.8;
            color: #9876aa;
            border-radius: 10px;
        }

        .text-center {
            text-align: center;
            margin: 10px 0;
        }

        .areat-title {
            margin: 40px 0;
            font-size: 18px;
        }

        .areat-text a {
            font-size: 14px;
            color: #f7fff7;
        }

        /*新版图文下载界面*/
        .icve-img-download {
            margin: -10px 0 0 10px;
        }


        /*新版视频下载界面*/
        .video-setting-btn {
            position: absolute;
            right: 0px;
            bottom: 100px;
            z-index: 99999;
            width: 30px;
            height: 30px;
            background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjczNTc1NjUxMDcxIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjUgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjEwNDMiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwLjE5NTMxMjUiIGhlaWdodD0iMjAwIj48cGF0aCBkPSJNNjE2LjU5NjQ4IDMzLjkzNDg2NUM2MTYuNTk2NDggMTUuMTkzMTU2IDYwMS40MDMzMjEgMCA1ODIuNjYxNjUgMEw0NDEuMzQwODIyIDBDNDIyLjU5OTE1IDAgNDA3LjQwNTk5MiAxNS4xOTMxNTYgNDA3LjQwNTk5MiAzMy45MzQ4NjVMNDA3LjQwNTk5MiAxMzYuNjEyNzcxIDQzNS4yMzA1NDMgMTAzLjIzMjU1NkMzNjMuMjA2MjY4IDExNi40MTY4MDEgMjk2LjQ3OTQyNiAxNDkuMDUyNTkyIDI0MS4yOTk5NSAxOTcuMzA2OTk1TDI4NC45OTQ5MTMgMTk2LjQ3OTU4NyAyMDcuNzExNjkxIDEzMy44OTY5MDVDMTkzLjE0NjcwMyAxMjIuMTAyMzY2IDE3MS43Nzc5NDIgMTI0LjM0ODMwMyAxNTkuOTgzNDA0IDEzOC45MTMzNDZMNzEuMDQ3NDE1IDI0OC43NDAyNDFDNTkuMjUyODc3IDI2My4zMDUyODUgNjEuNDk4NzkyIDI4NC42NzM5NDcgNzYuMDYzNzc5IDI5Ni40Njg0ODdMMTU0Ljc3MTA2OCAzNjAuMjA0NDQzIDE0Ni4wOTQ5NjMgMzE4LjAzMTY5NEMxMTQuMTUwNzUzIDM3OC43NDg0NDIgOTcuMTkyMDc3IDQ0Ni43NTkxMTUgOTcuMTkyMDc3IDUxNy4xOTQ2OTIgOTcuMTkyMDc3IDUyMy4xNTk0MDIgOTcuMzEzNzIxIDUyOS4xMTA0MTcgOTcuNTU1OTUgNTM1LjA0NTE0MUwxMzEuNDYyNzA5IDUzMy42NjAyOTggMTIzLjgyODk2NiA1MDAuNTk1MTgyIDI2LjMwOTkxNCA1MjMuMTA5MjE3QzguMDQ4NjQgNTI3LjMyNTE4NC0zLjMzNzUzNCA1NDUuNTQ2NjU3IDAuODc4NTIxIDU2My44MDgwMTZMMzIuNjY4Nzc4IDcwMS41MDY3ODJDMzYuODg0NjU3IDcxOS43NjgxNDIgNTUuMTA2MjA3IDczMS4xNTQxODEgNzMuMzY3NjU4IDcyNi45MzgyMTRMMTcwLjAwMTY1NSA3MDQuNjI4NDk0IDEzMS4xMzY0NDEgNjg0LjgzNjQ5N0MxNjAuMzY3MjI4IDc1My42MTU3NjQgMjA3LjIxNDY5OCA4MTMuMjUxNDU3IDI2Ni40MzA0OTkgODU3LjM4Njc3NUwyNTYuMjA5NTY3IDgxNS4zMDE5NTIgMjExLjczNzc3NyA5MDYuNDgyNDUzQzIwMy41MjE5NDIgOTIzLjMyNzM4OSAyMTAuNTE3Mjc0IDk0My42NDMxNDggMjI3LjM2MjI1MSA5NTEuODU4OTcyTDM1NC4zODA0NDcgMTAxMy44MDk5MzhDMzcxLjIyNTQyMyAxMDIyLjAyNTc2MiAzOTEuNTQxMjMgMTAxNS4wMzA0ODYgMzk5Ljc1NzA2NSA5OTguMTg1NTVMNDQ0LjQ1MjE5MyA5MDYuNTQ3MDY0IDQxMy45NTE2NDcgODkxLjY3MDk5OSA0MDUuMzA1MjAzIDkyNC40ODU4NTZDNDM4LjU4OTk3IDkzMy4yNTYwNTMgNDczLjAxMjc4OSA5MzcuNzM3NDE5IDUwNy45ODI1NjYgOTM3LjczNzQxOSA1NDUuNjgwNzcyIDkzNy43Mzc0MTkgNTgyLjczNjY4NCA5MzIuNTI5MjkgNjE4LjQwNTQyOSA5MjIuMzYxNjQ0TDYwOS4xMDI1NjYgODg5LjcyNjgwOCA1NzguNjAyMDE5IDkwNC42MDI4NzUgNjI0LjI0NTQwNyA5OTguMTg1NTVDNjMyLjQ2MTI0MSAxMDE1LjAzMDQ4NiA2NTIuNzc3MDQ4IDEwMjIuMDI1NzYyIDY2OS42MjIwMjUgMTAxMy44MDk5MzhMNzk2LjY0MDIyMSA5NTEuODU4OTcyQzgxMy40ODUxOTcgOTQzLjY0MzE0OCA4MjAuNDgwNTMgOTIzLjMyNzM4OSA4MTIuMjY0Njk1IDkwNi40ODI0NTNMNzY1LjYxODE0MSA4MTAuODQyOTk4IDc1NS45MjIwOTcgODUyLjUyODU5MUM4MTIuNjc3NDczIDgwOC40ODU4OTMgODU3LjQ5NDQyMiA3NTAuMDE2MDc0IDg4NS42MDQ0NTggNjgyLjk5ODQ0OUw4NDYuNjc3Mjc0IDcwMi45Mzc3MDYgOTUwLjYzNDgxNCA3MjYuOTM4MjE0Qzk2OC44OTYyNjUgNzMxLjE1NDE4MSA5ODcuMTE3ODE1IDcxOS43NjgxNDIgOTkxLjMzMzY5NCA3MDEuNTA2NzgyTDEwMjMuMTIzOTUgNTYzLjgwODAxNkMxMDI3LjM0MDAwNiA1NDUuNTQ2NjU3IDEwMTUuOTUzODMyIDUyNy4zMjUxODQgOTk3LjY5MjU1NyA1MjMuMTA5MjE3TDg5Mi4yMDY5NjMgNDk4Ljc1NTk0OSA4ODQuNTczMjE5IDUzMS44MjEwNjcgOTE4LjQ4NTgwNCA1MzMuMDUwNjI5QzkxOC42NzcwMSA1MjcuNzc3MjkxIDkxOC43NzI4NzcgNTIyLjQ5MTM3MyA5MTguNzcyODc3IDUxNy4xOTQ2OTIgOTE4Ljc3Mjg3NyA0NDguNjk5NjY0IDkwMi43MzcyMTQgMzgyLjQ4NTI1MyA4NzIuNDUxMTc4IDMyMy4wMTc4MTNMODYzLjU2Nzk3OCAzNjQuNzkwNTU2IDk0Ny45Mzg2OTIgMjk2LjQ2ODQ4N0M5NjIuNTAzNjggMjg0LjY3Mzk0NyA5NjQuNzQ5NTk0IDI2My4zMDUyODUgOTUyLjk1NTA1NyAyNDguNzQwMjQxTDg2NC4wMTkwNjggMTM4LjkxMzM0NkM4NTIuMjI0NTMgMTI0LjM0ODMwMyA4MzAuODU1NzY4IDEyMi4xMDIzNjYgODE2LjI5MDc4MSAxMzMuODk2OTA1TDczNC44MDczOTMgMTk5Ljg4MDkzMiA3NzguODQzMjc3IDIwMS4wMTA1ODJDNzI1LjE0ODYwMSAxNTIuNzY3MjA1IDY2MC4wNDg2ODQgMTE5LjQ4NzY1NyA1ODkuNTE1OTE3IDEwNC45NDE1NDNMNjE2LjU5NjQ4IDEzOC4xNzY5OTEgNjE2LjU5NjQ4IDMzLjkzNDg2NVpNNTc1LjgwNzM4MiAxNzEuNDEyNDM5QzYzNC40NDUzMyAxODMuNTA1NDI3IDY4OC42NTIzNTkgMjExLjIxNjUxMSA3MzMuNDgzMjU1IDI1MS40OTU5NyA3NDUuODg5NzIxIDI2Mi42NDI5MzUgNzY0LjU1NzQxOCAyNjMuMTIxODE0IDc3Ny41MTkxMzkgMjUyLjYyNTYxOEw4NTkuMDAyNTI3IDE4Ni42NDE1OTIgODExLjI3NDQxNyAxODEuNjI1MTUgOTAwLjIxMDQwNiAyOTEuNDUyMDQ1IDkwNS4yMjY5NDYgMjQzLjcyMzgwMSA4MjAuODU2MDU1IDMxMi4wNDU4N0M4MDguNDA2MTU3IDMyMi4xMjc3MiA4MDQuNzAyNjMyIDMzOS41NDMxMjEgODExLjk3MzAzMiAzNTMuODE4NjEzIDgzNy40MjIwOCA0MDMuNzg4NTE4IDg1MC45MDMwNCA0NTkuNDU0NjMyIDg1MC45MDMwNCA1MTcuMTk0NjkyIDg1MC45MDMwNCA1MjEuNjcxNDA4IDg1MC44MjIxNzkgNTI2LjEzNzQ4MiA4NTAuNjYwNjM0IDUzMC41OTE1MDQgODUwLjA3MTQ4MSA1NDYuODQzMDE2IDg2MS4wOTQxMzUgNTYxLjIyNzk4NiA4NzYuOTM5NjUyIDU2NC44ODYxODJMOTgyLjQyNTI0NyA1ODkuMjM5NDUgOTU2Ljk5MzY3NyA1NDguNTQwNjQ5IDkyNS4yMDM0MjEgNjg2LjIzOTQxNCA5NjUuOTAyMzAxIDY2MC44MDc5ODIgODYxLjk0NDU4NSA2MzYuODA3NDcyQzg0NS44NDUwMSA2MzMuMDkwNTgxIDgyOS40MDgzOTcgNjQxLjUwOTY4NSA4MjMuMDE3NDAxIDY1Ni43NDY3MjkgNzk5LjQyNzA5IDcxMi45ODg2NDIgNzYxLjgzNTg3MyA3NjIuMDMxNTQ5IDcxNC4zMTMyNjkgNzk4LjkwOTUzOSA3MDEuNjIxODQ4IDgwOC43NTgxNjQgNjk3LjU3NTEwNiA4MjYuMTU2NDk2IDcwNC42MTcyMjUgODQwLjU5NTEyOUw3NTEuMjYzNzc5IDkzNi4yMzQ1ODQgNzY2Ljg4ODA3NyA4OTAuODU4MDYzIDYzOS44Njk4ODEgOTUyLjgwOTAyOSA2ODUuMjQ2MzIzIDk2OC40MzM0MTkgNjM5LjYwMjkzNSA4NzQuODUwNzQ0QzYzMi4zOTI1NjMgODYwLjA2NzAyMyA2MTUuNjE4MDMgODUyLjU4Mjg0OCA1OTkuNzk5NzAyIDg1Ny4wOTE5NzIgNTcwLjE2NTMxOSA4NjUuNTM5NTI2IDUzOS4zNzAyODQgODY5Ljg2NzY4OSA1MDcuOTgyNTY2IDg2OS44Njc2ODkgNDc4Ljg2NDA2NiA4NjkuODY3Njg5IDQ1MC4yNTI4IDg2Ni4xNDI5MDkgNDIyLjU5ODA5MSA4NTguODU2MTQxIDQwNi45NDA0MjUgODU0LjczMDUyMiAzOTAuNTQ5MzYzIDg2Mi4yNDE2NzUgMzgzLjQ1MTI3NyA4NzYuNzk0OTMzTDMzOC43NTYxNDkgOTY4LjQzMzQxOSAzODQuMTMyNTkgOTUyLjgwOTAyOSAyNTcuMTE0Mzk0IDg5MC44NTgwNjMgMjcyLjczODY5MiA5MzYuMjM0NTg0IDMxNy4yMTA0ODMgODQ1LjA1NDA4M0MzMjQuMzYxMzU3IDgzMC4zOTI1NzEgMzIwLjA2ODY3OSA4MTIuNzE3NTgyIDMwNi45ODk1NSA4MDIuOTY5MjU5IDI1Ny40MTg5NDYgNzY2LjAyMjc4NSAyMTguMTI4NTk2IDcxNi4wMDcxMzYgMTkzLjU5OTIwNiA2NTguMjkwMjU5IDE4Ny4xNjAxODggNjQzLjEzOTA0MiAxNzAuNzc0OTUyIDYzNC43OTQ5NDggMTU0LjczNDE2OCA2MzguNDk4MjYyTDU4LjEwMDE3MSA2NjAuODA3OTgyIDk4Ljc5OTA1MSA2ODYuMjM5NDE0IDY3LjAwODc5NCA1NDguNTQwNjQ5IDQxLjU3NzIyNSA1ODkuMjM5NDUgMTM5LjA5NjI3NiA1NjYuNzI1NDE1QzE1NC45OTg2NDMgNTYzLjA1NDA1NSAxNjYuMDM1MjQ0IDU0OC41ODI1NjQgMTY1LjM2OTI5MSA1MzIuMjc1NDU2IDE2NS4xNjQ0OTEgNTI3LjI2MzQwNSAxNjUuMDYxOTE0IDUyMi4yMzU4MSAxNjUuMDYxOTE0IDUxNy4xOTQ2OTIgMTY1LjA2MTkxNCA0NTcuODIxODM1IDE3OS4zMTc5MzcgNDAwLjY0OTg4NyAyMDYuMTU5MDk1IDM0OS42MzI1MDggMjEzLjY5Njk3MSAzMzUuMzA1MDY0IDIxMC4wNjQ0MTkgMzE3LjY0ODA2OCAxOTcuNDgyOTkgMzA3LjQ1OTc1OUwxMTguNzc1NTI2IDI0My43MjM4MDEgMTIzLjc5MjA2NiAyOTEuNDUyMDQ1IDIxMi43MjgwNTUgMTgxLjYyNTE1IDE2NC45OTk5NDUgMTg2LjY0MTU5MiAyNDIuMjgyOTkgMjQ5LjIyNDI3M0MyNTUuMTEwODg2IDI1OS42MTIwMzMgMjczLjU1MjU5NiAyNTkuMjYyODIxIDI4NS45Nzc5NTMgMjQ4LjM5Njg2NSAzMzIuMDM2NTkgMjA4LjExODY4NSAzODcuNTgwMTE2IDE4MC45NTI1NDggNDQ3LjQ1MTEwMSAxNjkuOTkyOTg2IDQ2My41NjgzMzEgMTY3LjA0MjY5NSA0NzUuMjc1NjUyIDE1Mi45OTc3MzEgNDc1LjI3NTY1MiAxMzYuNjEyNzcxTDQ3NS4yNzU2NTIgMzMuOTM0ODY1IDQ0MS4zNDA4MjIgNjcuODY5NzI5IDU4Mi42NjE2NSA2Ny44Njk3MjkgNTQ4LjcyNjgxOSAzMy45MzQ4NjUgNTQ4LjcyNjgxOSAxMzguMTc2OTkxQzU0OC43MjY4MTkgMTU0LjI3Njc4OSA1NjAuMDM5NTQ4IDE2OC4xNjA1ODUgNTc1LjgwNzM4MiAxNzEuNDEyNDM5Wk03MzAuMzQ1MDQ4IDUxNy4xOTQ2OTJDNzMwLjM0NTA0OCAzOTEuODg1NDY5IDYzMC45ODY2ODEgMjg5Ljk1NTg5NiA1MDcuOTgyNTY2IDI4OS45NTU4OTYgMzg0Ljk3ODI3MyAyODkuOTU1ODk2IDI4NS42MTk5MDYgMzkxLjg4NTQ2OSAyODUuNjE5OTA2IDUxNy4xOTQ2OTIgMjg1LjYxOTkwNiA2NDIuNTAzOTE1IDM4NC45NzgyNzMgNzQ0LjQzMzQ4NyA1MDcuOTgyNTY2IDc0NC40MzM0ODcgNjMwLjk4NjY4MSA3NDQuNDMzNDg3IDczMC4zNDUwNDggNjQyLjUwMzkxNSA3MzAuMzQ1MDQ4IDUxNy4xOTQ2OTJaTTM1My40ODk1NjcgNTE3LjE5NDY5MkMzNTMuNDg5NTY3IDQyOC45ODYyODkgNDIyLjg1NTE1IDM1Ny44MjU2MjYgNTA3Ljk4MjU2NiAzNTcuODI1NjI2IDU5My4xMDk4MDQgMzU3LjgyNTYyNiA2NjIuNDc1Mzg4IDQyOC45ODYyODkgNjYyLjQ3NTM4OCA1MTcuMTk0NjkyIDY2Mi40NzUzODggNjA1LjQwMzA5NSA1OTMuMTA5ODA0IDY3Ni41NjM3NTggNTA3Ljk4MjU2NiA2NzYuNTYzNzU4IDQyMi44NTUxNSA2NzYuNTYzNzU4IDM1My40ODk1NjcgNjA1LjQwMzA5NSAzNTMuNDg5NTY3IDUxNy4xOTQ2OTJaIiBmaWxsPSIjMzg5QkZGIiBwLWlkPSIxMDQ0Ij48L3BhdGg+PC9zdmc+');
            background-repeat: no-repeat;
            background-size: 100% 100%;
        }

        .icve-video-download {
            position:fixed;
            top:0px;
            left:0px;
            font-size:14px;
            border-radius: 5px;
            background-color: #2b2b2b;
            opacity:0.99;
            filter: Alpha(opacity=99);
            -moz-opacity:0.99;
            box-shadow:  20px 20px 60px #bebebe,-20px -20px 60px #ffffff;
            width:100%;
            height:100%;
            overflow:auto;
            z-index:9999999999;
        }

        .close-btn {
            position: absolute;
            top: 20px;
            right: 20px;
            width: 30px;
            height: 30px;
            background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjc0Mzg1OTQ2Mjc1IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjExODQiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCI+PHBhdGggZD0iTTU4MC4xOTggNTA5LjQ4N2wxNzYuNzc3LTE3Ni43NzZMNjg2LjI2NSAyNjIgNTA5LjQ4NiA0MzguNzc3IDMzMi43MTEgMjYyIDI2MiAzMzIuNzFsMTc2Ljc3NyAxNzYuNzc3TDI2MiA2ODYuMjY0bDcwLjcxIDcwLjcxIDE3Ni43NzctMTc2Ljc3NiAxNzYuNzc3IDE3Ni43NzcgNzAuNzEtNzAuNzEtMTc2Ljc3Ni0xNzYuNzc4ek01MTIgOTYyQzI2My40NzIgOTYyIDYyIDc2MC41MjggNjIgNTEyUzI2My40NzIgNjIgNTEyIDYyczQ1MCAyMDEuNDcyIDQ1MCA0NTAtMjAxLjQ3MiA0NTAtNDUwIDQ1MHoiIGZpbGw9IiMxQUE1RkYiIHAtaWQ9IjExODUiPjwvcGF0aD48L3N2Zz4=');
            background-repeat: no-repeat;
            background-size: 100% 100%;
        }

        .video-title {
            margin-top: 100px;
            text-align: center;
            font-size: 2em;
            color: #fff;
        }

        .icve-video-content {
            width: 600px;
            margin: 40px auto;
        }

        .icve-content-item {
            margin: 40px 0;
        }

        .icve-content-item-name {
            display: inline-block;
            width: 180px;
            padding: 10px 0;
            border-radius: 10px;
            text-align: center;
            background-color: #999999;
            color: #fff;
            cursor: text;
        }

        .video-url-btn {
            margin-left: 100px;
            display: inline-block;
            width:140px;
            padding: 10px 0;
            border-radius: 10px;
            cursor: pointer;
            background-color: #313335;
            text-align: center;
            color: #979797;
            font-weight: bold;
        }

        .video-url-btn:hover {
            background-color: #3c3f41;
        }

        .video-url-btn:hover:active{
            box-shadow: 0 0 5px 0 #999999;
        }

        .m3u8-btn {
            float: right;
            display: inline-block;
            width: 160px;
            padding: 10px 0;
            border-radius: 10px;
            background-color: #313335;
            color: #588759;
            cursor: pointer;
            font-weight: bold;
            text-align: center;
        }

        .m3u8-btn:hover {
            background-color: #3c3f41;
        }

        .m3u8-btn:hover:active{
            box-shadow: 0 0 5px 0 #999999;
        }

        .msgs {
            position: absolute;
            bottom: 0.5rem;
            right: 0.5rem;
            display: flex;
            flex-direction: column;
            align-items: end;
        }

        .msgsAreat {
            margin: 0.8rem;
            padding: 1rem 2rem;
            border-radius: 0.5rem;
            box-shadow: rgba(0, 0, 0, 0.3) 0px 19px 38px,rgba(0, 0, 0, 0.22) 0px 15px 12px;
        }

        .copyTitle {
            width: 150px;
            margin: 50px auto;
        }

        .videoDownloadApi {
            display: block;
            text-align:center;
            width: 150px;
            padding: 15px 0;
            font-size: 16px;
            border-radius: 10px;
            background-color: #e8c627;
            color: #fff;
        }

        .btnTitleText {
            width: 150px;
            padding: 15px 0;
            font-size: 16px;
            border-radius: 10px;
            background-color: #428ce9;
            color: #fff;
        }

        .msgs-copy-title {
            background-color: #1bc1a1;
            color: #fff;
        }

        .msgs-copy-title-error{
            background-color: #ff5627;
        }

        .msgs-copy-url {
            background-color: #438eec;
            color: #fff;
        }

        .msgs-copy-url-error {
            background-color: #555555;
        }

        .msgs-m3u8-post-ok {
            background-color: #fdfd34;
            color: #fa5a57;
        }

        .msgs-m3u8-post-error {
            background-color: #92d5fe;
        }
    `
    GM_addStyle(icveStyle);

    // 下载文件
    function DownloadFile(url,name,hrefType="_self"){
        let aDom = document.createElement('a');
        aDom.style.display = 'none';
        aDom.href = url;
        aDom.target = hrefType;
        aDom.setAttribute('download',name);
        document.body.appendChild(aDom);
        aDom.click();
        document.body.removeChild(aDom);
    }

    // 保存文件
    function SaveFile(url,name){
        const fileStream = streamSaver.createWriteStream(name);
        fetch(url).then(res => {
          const readableStream = res.body
          if (window.WritableStream && readableStream.pipeTo) {
            return readableStream.pipeTo(fileStream)
              .then(() => console.log('done writing'));
          }
          window.writer = fileStream.getWriter()
          const reader = res.body.getReader()
          const pump = () => reader.read()
            .then(res => res.done
              ? writer.close()
              : writer.write(res.value).then(pump))
          pump()
        })
    }

    // 发送POST请求
    function postUrl(url,value){
        let a = $.ajax({
            url : url,
            type : "post",
            data :value,
            dataType : 'json',
            async: false,
            success: function(data){
            }
        });
        return a.responseText;
    }

    // 获取链接中的对应参数
    function getQueryVariable(query,variable){
        var vars = query.split("&");
        for (var i=0;i<vars.length;i++) {
                var pair = vars[i].split("=");
                if(pair[0] == variable){return pair[1];}
        }
        return(false);
    }

    function areatDom(dom){
        let docAreat = document.createElement("div");
        dom.appendChild(docAreat);
        docAreat.className = "doc-areat";
        docAreat.innerHTML = `
            <p class="text-center areat-title">暂无权限,请前往首页激活权限!</p>
            <p class="text-center areat-text">
                <a href="https://user.icve.com.cn/learning/u/student/teaching/index.action"
                    target="_blank">
                    职教云首页
                </a>
            </p>
            <p class="text-center areat-text">
                <a href="https://mooc.icve.com.cn/learning/u/student/student/mooc_index.action"
                    target="_blank">
                    MOOC首页
                </a>
            </p>
        `;
        setTimeout(() => {
            docAreat.remove();
        }, 10000);
    }

    // 判断文件名是否是图片
    function checkImgType(fileName) {
        if (!/\.(jpg|jpeg|png|gif|webp|svg|GIF|JPG|PNG|JPEG)$/.test(fileName)) {
            return false;
        } else {
            return true;
        }
    }

    // 获取清晰度
    function getVideo(b) {
        var a = "";
        switch (b) {
        case "FD":
            a = "流畅";
            break;
        case "LD":
            a = "标清";
            break;
        case "SD":
            a = "高清";
            break;
        case "HD":
            a = "超清";
            break;
        case "FHD":
            a = "全高清";
            break;
        case "OD":
            a = "原画";
            break;
        case "2K":
            a = "2K";
            break;
        case "4K":
            a = "4K"
        }
        return a
    }

    // M3U8下载器推送
    function m3u8Post(name,url){
        let a = $.ajax({
            url : 'http://127.0.0.1:8787/',
            type : "post",
            data: {
                'data':name+','+url,
                'type':'2',
            },
            dataType : 'json',
            async: false,
            success: function(data){
            }
        });
        return a.responseJSON;
    }

    // 消息提示
    function sendMsg(msgsDom, msg, classname, type = "info", duration = 10000) {
        const newMsgDom = document.createElement("div");
        newMsgDom.innerText = msg;
        newMsgDom.className = "msgsAreat " + classname;
        newMsgDom.classList.add("msg");
        newMsgDom.classList.add(type);
        msgsDom.appendChild(newMsgDom);
        setTimeout(() => {
            newMsgDom.remove();
        }, duration);
    }

    // 判断文件名是否是视频
    function checkVideoType(fileName) {
        if (!/\.(mp4|flv|wmv|avi|mov|rmvb|webm|asf)$/.test(fileName)) {
            return false;
        } else {
            return true;
        }
    }

    // 新版MOOC过期课程处理
    function newMoocClass(){
        let classLength = document.getElementsByClassName("class-foot clearfix").length;
        for(let i = 0; i < classLength; i++)
        {
            let divElement = document.getElementsByClassName("class-foot clearfix")[i];
            let contentElement = divElement.getElementsByClassName("pull-right")[0];
            let classElement = divElement.getElementsByClassName("appointment-btn")[0];
            let a = document.createElement("a");
            contentElement.appendChild(a);
            a.className = "btn btn-solid-warning btn-sm rounded class-enterbtn mr10";
            let url = classElement.href;
            url = url.replace("已结束", "进行中");
            url = url.replace("%E5%B7%B2%E7%BB%93%E6%9D%9F", "进行中");
            a.href = url;
            a.text = '观看课程';
        }
    }

    // 新版智慧职教和MOOC视频官方接口下载
    function newVideoDownload(title)
    {
        let url = document.getElementById("captionUrl").value;
        var metaId,downUrl;
        if(url.indexOf("?") == -1){
            let docUrlLength = url.split('\/').length;
            metaId = url.split('\/')[docUrlLength-1];
            downUrl = 'https://spoc-res.icve.com.cn/front/fileops/generateDownloadUrl?metaId='+metaId;
        }else{
            metaId = getQueryVariable(url,"metaId");
            downUrl = 'https://spoc-yunpan.icve.com.cn/cloud/operation/fileops/generateDownloadUrl?metaId='+metaId;
        }
        GM_xmlhttpRequest({
            method: "GET",
            url: downUrl,
            onload: function(response){
                let data = response.responseText;
                if(data.length >= 300 && data.length <= 500){
                    let docData = $.parseJSON(data),
                        downloadUrl = docData.currentPath;
                    const regex = /.*\.([^\.?]+)\?/;
                    const match = regex.exec(downloadUrl);
                    var videoType
                    if (match) {
                        videoType = match[1];
                    }
                    SaveFile(downloadUrl,title+"."+videoType);
                }
            },
        });
    }

    // 获取指定cookie值
    function getCookie(cookieName) {
        const strCookie = document.cookie
        const cookieList = strCookie.split(';')

        for(let i = 0; i < cookieList.length; i++) {
            const arr = cookieList[i].split('=')
            if (cookieName === arr[0].trim()) {
                return arr[1]
            }
        }

        return ''
    }


    let path = window.location.pathname.split("/"),
    pathLength = path.length,
    page = path[pathLength-1].split(".")[0];

    // 资源库-素材
    if(page == 'edit_seematerial'|| page == 'manage-sourcematerialofindex-editmaterial'){
        window.onload = function () {
            let gold = document.getElementsByClassName("gold")[0];
            if(gold == undefined){
                let download = document.getElementsByClassName("download clefix")[0],
                    data_id = document.getElementsByClassName("Collection")[0].getAttribute('data-id');
                download.innerHTML = `<div class = "gold"></div>
                    <a href="#" class="downloadMaterial" data-id="`+data_id+`">
                       <div class="download-icon" data-id="`+data_id+`">下载 </div>
                    </a>`;
            }
        }
    }

    // 职业教育专业教学资源库
    if(page == "courseware")
    {

        let url = window.location.href;
        let id = url.split("=")[1];
        var Date = setTimeout(function() {
            let courseBtn = document.getElementsByClassName("courseBtn")[0];
            let div = document.createElement("div");
            courseBtn.appendChild(div);
            div.className = "customBtn";
            div.innerText = "下载";
            let auth = getCookie("Token");
            auth = "Bearer " + auth;
            div.onclick = ()=>{
                let url = "https://zyk.icve.com.cn/prod-api/teacher/courseContent/" + id;
                GM_xmlhttpRequest({
                    method: "GET",
                    url: url,
                    headers: {
                        Authorization: auth,
                    },
                    onload: function(response){
                        let data = response.responseText;
                        data = JSON.parse(data)
                        let name = data.data.name;
                        let downloadUrl = data.data.fileUrl;
                        let type = data.data.fileType;
                        let groupUrl = downloadUrl + "?response-content-disposition=attachment;filename=" + name + "." + type;
                        window.open(groupUrl);
                    },
                });
            }
        },1000)
    }

    // 资源库-课程、技能培训
    if(page == "dir_course"){
        let header_draw = document.getElementsByClassName("header-draw")[0],
            div = document.createElement("div");
        div.innerHTML = '<button class="resource-bank-btn download-btn">点击下载</button>';
        div.className = 'resource-bank-download';
        header_draw.appendChild(div);
        document.getElementsByClassName("resource-bank-btn")[0].addEventListener("click", downloadData);
        function downloadData(){
            let url = document.querySelector("[data-downloadurl]").getAttribute('data-downloadurl'),
                name = url.split("=")[2];
            DownloadFile(url,name);
        }
    }

    // 旧版职教云
    if(page == "directory"){
        let web = document.getElementById("directoryData");
        if(web != null){
            let div = document.createElement("div");
            div.className = 'icve-director';
            div.innerHTML = `<a class="directory-btn" href="javascript:;">
                <button class="download-btn">点击下载</button>
            </a>`;
            document.body.appendChild(div);
            document.getElementsByClassName("directory-btn")[0].addEventListener("click", downloadData);
        }
        function downloadData(){
            let courseOpenId = document.querySelector("input[name=courseOpenId]").value,
                openClassId = document.querySelector("input[name=openClassId]").value,
                moduleId = document.querySelector("input[name=moduleId]").value,
                cellId = document.querySelector("input[name=cellId]").value,
                value = {'courseOpenId':courseOpenId,'openClassId':openClassId,'moduleId':moduleId,'cellId':cellId};
            let data = postUrl('https://zjy2.icve.com.cn/api/common/Directory/viewDirectory',value),
                url = $.parseJSON(data).downLoadUrl,
                name = url.split("=")[2];
            DownloadFile(url,name);
        }
    }

    // 旧版MOOC
    if(page == "resourcesStudy"){
        let web = document.getElementById("directoryData");
        if(web != null){
            let div = document.createElement("div");
            div.className = 'icve-resourcesStudy';
            div.innerHTML = `<a class="resourcesStudy-btn" href="javascript:;">
                <button class="download-btn">点击下载</button>
            </a>`;
            document.body.appendChild(div);
            document.getElementsByClassName("resourcesStudy-btn")[0].addEventListener("click", downloadData);
        }
        function downloadData(){
            let courseOpenId = document.querySelector("input[name=courseOpenId]").value,
                moduleId = document.querySelector("input[name=moduleId]").value,
                processCellId = document.querySelector("input[name=processCellId]").value,
                value = {"courseOpenId":courseOpenId,"cellId":processCellId,"moduleId":moduleId};
            let data = postUrl('https://mooc.icve.com.cn/study/learn/viewDirectory',value),
                url = $.parseJSON(data).downLoadUrl,
                name = url.split("=")[2];
            SaveFile(url,name);
       }
    }

    // 激活新版职教云和MOOC学院的文档下载权限
    if(window.location.hostname == 'user.icve.com.cn' || window.location.hostname == 'icve-mooc.icve.com.cn' || window.location.hostname == 'mooc.icve.com.cn'){
        let loginToken = {'token':loginIdToken};
        let CloudUrl = 'https://'+window.location.hostname+'/zhzj/zhzjTeacher_generateEnterCloudUrl.action';
        let security = postUrl(CloudUrl,loginToken),
            securityToken = $.parseJSON(security).data.token;
        let url = 'https://spoc-res.icve.com.cn/login/authorizeByToken?securityToken='+securityToken + '&indexType=1';
        document.getElementsByClassName("logoarea pull-left")[0].style = "";
        let icveElement = document.getElementsByClassName("logoarea pull-left")[0];
        let a = document.createElement("a");
        icveElement.appendChild(a);
        a.className = "icve-active-download btn btn-solid-warning";
        a.href = url;
        a.target = "_blank";
        a.text = '激活本次下载权限';
    }

    // 新版MOOC学院过期课程进入页面
    if(page == "mooc_index"){
        let modeHead = document.getElementsByClassName("mode-head")[0];
        let a = document.createElement("a");
        modeHead.appendChild(a);
        a.className = "icve-active-download btn btn-solid-primary";
        a.onclick = ()=>{
            newMoocClass();
        }
        a.text = "过期课程刷新观看";

    }

    // 新版职教云和MOOC学院的音频下载
    if(page == "content_audio"){
        let audioData = $.parseJSON(resource),
            audioKbsName = resource.split(":")[0].replace(/\"/g, "").replace("{","");
        let audio160 = audioData[audioKbsName],
            dom = document.getElementsByClassName("kj webWidth2")[0],
            div = document.createElement("div");
        dom.appendChild(div);
        div.className = "audio-download";
        div.innerHTML = '<button class="download-btn" id="$start" >下载音频</button>';
        let name = document.getElementsByClassName("h3 audio-title ell")[0].textContent;
        name += '.mp3';
        $start.onclick = () => {
            SaveFile(audio160,name);
        }
    }

    // 新版职教云和MOOC学院的文件下载
    if(page == 'content_doc'){
        let url = document.getElementById("mainFrame_doc").src;
        var metaId,downUrl;
        if(url.indexOf("?") == -1){
            let docUrlLength = url.split('\/').length;
            metaId = url.split('\/')[docUrlLength-1];
            downUrl = 'https://spoc-res.icve.com.cn/front/fileops/generateDownloadUrl?metaId='+metaId;
        }else{
            metaId = getQueryVariable(url,"metaId");
            downUrl = 'https://spoc-yunpan.icve.com.cn/cloud/operation/fileops/generateDownloadUrl?metaId='+metaId;
        }
        let dom = document.getElementsByClassName("shadow")[0];
        let div = document.createElement("div");
        dom.appendChild(div);
        div.className = "doc_download";
        div.innerHTML = '<button class="download-btn" id="$start" >下载文档</button>';
        $start.onclick = () => {
            GM_xmlhttpRequest({
                method: "GET",
                url: downUrl,
                onload: function(response){
                    let data = response.responseText;
                    if(data.length >= 300 && data.length <= 500){
                        let docData = $.parseJSON(data),
                            downloadUrl = docData.currentPath;
                        DownloadFile(downloadUrl,"文档");
                    }else{
                        areatDom(dom);
                    }
                },
                onerror: function(response){
                    areatDom(dom);
                }
            });
        }
    }

    // 新版职教云和MOOC学院的图片下载
    if(page == "content_text"){
        let op = document.getElementsByClassName("op")[0],
            button = document.createElement("button");
        op.appendChild(button);
        button.className = "download-btn icve-img-download";
        button.id = "$start";
        button.innerText = "下载全部图片";
        $start.onclick = () => {
            let img = document.getElementsByTagName("img");
            let imgLength = img.length;
            for(let i = 0; i < imgLength; i++){
                let name = img[i].title,
                    url = img[i].src;
                if(name.indexOf(".") == -1 || !checkImgType(name)){
                    let urlLength = url.split('.').length,
                        urlSuffix = url.split('.')[urlLength-1];
                    name += '.'+urlSuffix;
                }
                SaveFile(url,name);
            }
        }
    }

    // 新版职教云与智慧职教目录下载功能调用
    if(page == "courseware_index")
    {
        let course_root = document.getElementsByClassName("s_point"),
            course_length = document.getElementsByClassName("s_point").length;
        for(let i = 0; i < course_length; i++)
        {
            let text = course_root[i].id,
                course_resource_id = text.split('_')[2];
            let div_length = course_root[i].getElementsByTagName("div").length;
            if(div_length<4)
            {
                let div = document.createElement("div");
                course_root[i].appendChild(div);
                div.className = "s_download";
                div.setAttribute("onclick","download('"+course_resource_id+"')");
            }
        }
    }

    // 新版职教云和MOOC学院的视频下载
    if(page == "content_video"){
        let sp = document.getElementsByClassName("sp")[0],
            set_up = document.createElement("div");
        sp.appendChild(set_up);
        set_up.id = "set_up";
        set_up.className = "video-setting-btn";
        set_up.title = "设置";
        let div = document.createElement("div");
        sp.appendChild(div);
        div.className = "icve-video-download";
        div.style = "display:none;";
        let title = document.getElementsByTagName("title")[0].textContent,
            closeBtn = `<div id="closebtn" class="close-btn" title="关闭"></div>`,
            videoTitle = `<h3 class="video-title">`+title+`</h3>`,
            videoData = $.parseJSON(resource),
            videoContent = `<div class="icve-video-content"></div>`,
            msgs = '<div class="msgs"></div>',
            copyTitle = `<div class="copyTitle">
                <button class="btnTitleText" data-clipboard-text="`+title+`">点击复制标题</botton>
            </div>`;
        let aElement = `<div class="copyTitle">
            <a class="videoDownloadApi">官方接口下载</a>
        </div>`;

        div.innerHTML = videoTitle+copyTitle+aElement+closeBtn+videoContent+msgs;
        const msgsDom = document.querySelector(".msgs");
        for(let key in videoData){
            let content = document.getElementsByClassName("icve-video-content")[0];
            let contentItem = document.createElement("div"),
                name = getVideo(key);
            content.appendChild(contentItem);
            contentItem.className = "icve-content-item";
            let classname = "video-url-btn " + key,
                videoFormatLength = videoData[key].split('.').length,
                videoFormat = videoData[key].split('.')[videoFormatLength-1];
            contentItem.innerHTML = `<span class="icve-content-item-name">`+name+`-`+videoFormat+`</span>
            <button class="`+classname+`" data-clipboard-text="`+videoData[key]+`">点此复制视频地址</button>
            `;
            if(videoFormat == "m3u8"){
                let m3u8Btn = document.createElement("botton");
                contentItem.appendChild(m3u8Btn);
                m3u8Btn.className = "m3u8-btn m3u8Btn"+key;
                m3u8Btn.innerText = "发送信息到M3U8下载器";
                document.getElementsByClassName("m3u8Btn"+key)[0].onclick = function() {
                    let isok = m3u8Post(title,videoData[key]);
                    if(isok == undefined){
                        sendMsg(msgsDom,"发送失败,请查看是否打开M3U8下载器","msgs-m3u8-post-ok");
                    }else{
                        sendMsg(msgsDom,"已成功发送,正在下载","msgs-m3u8-post-error");
                    }
                }
            }else{
                let videoDownBtn = document.createElement("botton");
                contentItem.appendChild(videoDownBtn);
                videoDownBtn.className = "m3u8-btn";
                videoDownBtn.innerText = "点击下载视频";
                videoDownBtn.onclick = () => {
                    if(!checkVideoType(title)){
                        title += "."+videoFormat
                    }
                    SaveFile(videoData[key],title);
                }
            }
            let btnclass = "."+key,
                btnName = name + "视频地址复制成功",
                btnVideoUrl = new ClipboardJS(btnclass);
            btnVideoUrl.on('success', function(e) {
                sendMsg(msgsDom,btnName,"msgs-copy-url");
            });
            btnVideoUrl.on('error', function(e) {
                sendMsg(msgsDom,"地址复制失败","msgs-copy-url-error");
            });
        }
        let btnTitleText = new ClipboardJS('.btnTitleText');
        btnTitleText.on('success', function(e) {
            sendMsg(msgsDom,"标题复制成功","msgs-copy-title");
        });
        btnTitleText.on('error', function(e) {
            sendMsg(msgsDom,"标题复制失败","msgs-copy-title-error");
        });

        var close_btn=document.getElementById("closebtn");
        close_btn.addEventListener('click', function(){
            div.style = "display:none;";
            document.documentElement.style.overflow = 'auto';
            $('.back-top-button').fadeIn();
        })
        set_up.addEventListener('click',function(){
            div.style = "display:block;";
            document.documentElement.style.overflow = 'hidden';
            $('.back-top-button').fadeOut();
        })

        let downloadApi = document.getElementsByClassName("videoDownloadApi")[0];
        downloadApi.onclick = () => {
            newVideoDownload(title);
        }
    }
})();