Net Disk Helper

Easy to get material ids in net disk of Tianyi(189)

// ==UserScript==
// @name                Net Disk Helper
// @name:zh-CN          网盘助手
// @name:ug             تور دىسكا ياردەمچىسى
// @namespace           https://github.com/ShererInc/NetDiskHelper
// @version             1.1.2
// @author              Sherer(شەرەر)
// @description         Easy to get material ids in net disk of Tianyi(189)
// @description:zh-CN   一键获取天翼云盘(189)素材ID
// @description:ug      ‫تىيەنيى (189) تور دىسكىسىدىكى ماتېرىياللارنىڭ نومۇرىغا ئاسانلا ئېرىشكىلى بولىدۇ
// @license             MIT
// @supportURL          https://github.com/ShererInc/NetDiskHelper
// @match               *://cloud.189.cn/web/main/*
// @require             https://unpkg.com/[email protected]/dist/jquery.min.js
// @require             https://unpkg.com/[email protected]/dist/sweetalert2.all.min.js
// @run-at              document-idle
// @grant               GM_setClipboard
// @icon                data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgwIiBoZWlnaHQ9IjE3OSIgdmlld0JveD0iMCAwIDE4MCAxNzkiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxtYXNrIGlkPSJtYXNrMF83MDlfMTEiIHN0eWxlPSJtYXNrLXR5cGU6YWxwaGEiIG1hc2tVbml0cz0idXNlclNwYWNlT25Vc2UiIHg9IjYwIiB5PSI0MiIgd2lkdGg9IjYyIiBoZWlnaHQ9Ijk1Ij4KPHBhdGggZD0iTTYxLjExOTcgODkuODkzOUM1OC4zMjggNzcuMDAwOSA5NS45ODExIDQyLjI0NTEgOTUuOTgxMSA0Mi4yNDUxQzk1Ljk4MTEgNDIuMjQ1MSA4NS43MzI4IDY5LjI1NzggODkuMzc4NyA4MS40MTA1QzkzLjAyNDUgOTMuNTYzMiAxMTguMTMzIDc2LjU5NDMgMTIxLjU4OCA4OS44OTM5QzEyNS4wNDQgMTAzLjE5NCA3Ni44OTI0IDEzNi42MDEgNzYuODkyNCAxMzYuNjAxQzc2Ljg5MjQgMTM2LjYwMSA5Ny44NzMxIDExMS4xNzIgODguNTY1MyA5OC43NTM0QzgxLjg1NTkgODkuODAyMSA2My45MTE0IDEwMi43ODcgNjEuMTE5NyA4OS44OTM5WiIgZmlsbD0iI0M0QzRDNCIvPgo8L21hc2s+CjxnIG1hc2s9InVybCgjbWFzazBfNzA5XzExKSI+CjxwYXRoIGQ9Ik03MC40Mzc1IDg5LjcxODRDNjkuNTEzOCA3Ni44NTU5IDk2LjMxNDkgNDIuOTY3MiA5Ni4zMTQ5IDQyLjk2NzJDOTYuMzE0OSA0Mi45NjcyIDkwLjIxNDEgNjguNzYyMSA5MS43NDI0IDgwLjkwMzdDOTMuMjcwNyA5My4wNDUzIDEwOC4zMTUgNzcuNDkwNyAxMDkuNjQxIDkwLjc2ODhDMTEwLjk2NyAxMDQuMDQ3IDc3LjQ1MjYgMTM2LjQxMyA3Ny40NTI2IDEzNi40MTNDNzcuNDUyNiAxMzYuNDEzIDkyLjgwMzMgMTExLjUwNCA4Ny42MjI0IDk5LjAwMDRDODMuODg3OCA4OS45ODczIDcxLjM2MTEgMTAyLjU4MSA3MC40Mzc1IDg5LjcxODRaIiBmaWxsPSJ1cmwoI3BhaW50MF9saW5lYXJfNzA5XzExKSIvPgo8L2c+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjQuNTUwNiA5OS4xMzQ4QzIzLjY4NzQgOTMuNDc4NiAyMy41ODY5IDg3Ljc4MjcgMjQuMjE3MiA4Mi4xODY3QzI1LjAzMyA3NC45NDMyIDI3LjA3MzIgNjcuODY3MiAzMC4yNjgzIDYxLjI2MTJDMzEuNDY2NSA1OC43ODQgMzIuODI3MSA1Ni4zNzI4IDM0LjM0NjQgNTQuMDQzOEMzNC42MTkyIDUzLjYyNTUgMzQuODk3MiA1My4yMDk5IDM1LjE4MDMgNTIuNzk3MUwzOS43OTk1IDU1Ljg4NjZMNDEuMTg3MSA1Ni44MTQ3TDQxLjE0MDIgNTYuODgzMkM0MC45MDQ0IDU3LjIyODIgNDAuNjcyNiA1Ny41NzUzIDQwLjQ0NDggNTcuOTI0NkMzOC41NTA4IDYwLjgyNzkgMzYuOTM0IDYzLjg3NDUgMzUuNjAzMiA2Ny4wMjU0QzMxLjQ5NDYgNzYuNzUyOSAzMC4xMTI0IDg3LjQ3NCAzMS43MjAxIDk4LjA0MDZMMzEuNzI0MSA5OC4wNjY4QzMzLjkyMjkgMTEyLjQ3NSA0MS41MjA1IDEyNS41NDEgNTMuMDEgMTM0LjY3N0w1My4wNzgxIDEzNC43MzFDNjQuNjA1NiAxNDMuODY5IDc5LjE5MyAxNDguMzg4IDkzLjkzOTcgMTQ3LjM4OUw5My45NTE4IDE0Ny4zODhDOTguMTE1NSAxNDcuMTA1IDEwMi4yMDYgMTQ2LjM4OCAxMDYuMTYxIDE0NS4yNjVDMTA3LjMzMSAxNDcuNTMgMTA4LjgyNCAxNDkuNjAxIDExMC41NzkgMTUxLjQxN0MxMDUuMzkxIDE1My4xMDQgOTkuOTcxMiAxNTQuMTYyIDk0LjQzNjMgMTU0LjUzN0w5NC40MjQyIDE1NC41MzhDNzcuODkyNyAxNTUuNjU1IDYxLjU0MDIgMTUwLjU5OSA0OC42MDU0IDE0MC4zNzNMNDguNTM3MiAxNDAuMzE5QzM1LjU5NTUgMTMwLjA1OSAyNy4wMzQ2IDExNS4zNjcgMjQuNTU0NiA5OS4xNjA5TDI0LjU1MDYgOTkuMTM0OFpNMTQ5LjY5NyAxMTcuMjVDMTUzLjcwMSAxMDguODYzIDE1NS44ODUgOTkuNjU3OSAxNTYuMDA1IDkwLjIyNzlMMTU2LjAwNSA5MC4yMjU3QzE1Ni4yMTUgNzMuODI3NCAxNTAuMTY4IDU3Ljk1MjEgMTM5LjA2NyA0NS43NTYzTDEzOS4wMDggNDUuNjkwN0MxMjcuOTEyIDMzLjUzMzIgMTEyLjU5NyAyNS45MzQ5IDk2LjA5NTQgMjQuNDAzM0w5Ni4wNzkgMjQuNDAxOEM4Ny42NTUgMjMuNjIyMSA3OS4yMzY4IDI0LjQ1MjUgNzEuMjU4NyAyNi43NzA0QzY2LjkzNDEgMjguMDI2OCA2Mi43Mzg4IDI5LjcyMDMgNTguNzQyIDMxLjgzMTNDNTguMjk3MyAzMi4wNjYxIDU3Ljg1NTEgMzIuMzA2MSA1Ny40MTU1IDMyLjU1MTNDNTQuOTkxNCAzMy45MDMxIDUyLjY0NDkgMzUuNDExMSA1MC4zOTE5IDM3LjA3MDlDNTAuMjEwMSAzNy4yMDQ4IDUwLjAyODkgMzcuMzM5OCA0OS44NDgzIDM3LjQ3NTdMNTIuMzI5MSA0MC4xNTYxTDU0LjM5IDQyLjM4MjhDNTcuNzYxNiAzOS44NDUxIDYxLjM2MzEgMzcuNzU4NyA2NS4xMzI2IDM2LjEwNTZDNzQuNTA3MyAzMS45OTQyIDg0LjkyMDUgMzAuNTYzIDk1LjQxNjcgMzEuNTM3Mkw5NS40MzMyIDMxLjUzODhDMTEwLjE0MyAzMi45MDgyIDEyMy43OTQgMzkuNjkzNCAxMzMuNjcyIDUwLjU0NjdMMTMzLjczMiA1MC42MTI0QzE0My41NzYgNjEuNDYwNCAxNDguOTM3IDc1LjU2NDkgMTQ4Ljc1MiA5MC4xMzMyTDE0OC43NTIgOTAuMTM1NUMxNDguNjU1IDk3LjcxNjkgMTQ3LjA2IDEwNS4xMzUgMTQ0LjEyNiAxMTIuMDAxQzE0Ni4yMzEgMTEzLjQ2OSAxNDguMTA5IDExNS4yMzkgMTQ5LjY5NyAxMTcuMjVaIiBmaWxsPSIjODA4NDhBIi8+CjxlbGxpcHNlIGN4PSI0NC42ODU5IiBjeT0iNDcuMjY1NyIgcng9IjUuMTI2ODEiIHJ5PSI1LjA2Mzc4IiBmaWxsPSJ1cmwoI3BhaW50MV9saW5lYXJfNzA5XzExKSIvPgo8Y2lyY2xlIGN4PSIxMjkuMzYzIiBjeT0iMTMzLjQ4MyIgcj0iMjAuNzQ2MSIgZmlsbD0idXJsKCNwYWludDJfbGluZWFyXzcwOV8xMSkiLz4KPHBhdGggZD0iTTExNS41MTYgMTM0LjkyMkMxMTUuMDg3IDEzNC43MTMgMTE0Ljg3MyAxMzQuMzMzIDExNC44NzMgMTMzLjc4M0MxMTQuODczIDEzMy4yMzMgMTE1LjA5MyAxMzIuODQ3IDExNS41MzMgMTMyLjYyN0MxMTkuMzA3IDEzMC4zOTMgMTIxLjQ3NSAxMjkuMTA2IDEyMi4wMzYgMTI4Ljc2NUMxMjIuNTk4IDEyOC40MjQgMTIyLjkzMyAxMjguMjM3IDEyMy4wNDMgMTI4LjIwNEMxMjMuMTY0IDEyOC4xNDkgMTIzLjMwNyAxMjguMTIxIDEyMy40NzIgMTI4LjEyMUMxMjMuNzcgMTI4LjEyMSAxMjQuMDc4IDEyOC4zOTEgMTI0LjM5NyAxMjguOTNDMTI0LjYwNiAxMjkuMjcxIDEyNC43MSAxMjkuNTMgMTI0LjcxIDEyOS43MDZDMTI0LjcxIDEyOS44NzEgMTI0LjY3MiAxMzAuMDE0IDEyNC41OTUgMTMwLjEzNUMxMjQuNDk2IDEzMC4zMTEgMTI0LjI3IDEzMC41MTUgMTIzLjkxOCAxMzAuNzQ2QzEyMC42MzkgMTMyLjY4MiAxMTguOTMzIDEzMy42OTUgMTE4LjgwMSAxMzMuNzgzTDEyMy45MTggMTM2LjgyQzEyNC4xMjcgMTM2Ljk0MSAxMjQuMjc2IDEzNy4wNCAxMjQuMzY0IDEzNy4xMTdDMTI0LjYwNiAxMzcuMzE1IDEyNC43MjcgMTM3LjUzIDEyNC43MjcgMTM3Ljc2MUMxMjQuNzI3IDEzNy45ODEgMTI0LjYyOCAxMzguMjUxIDEyNC40MyAxMzguNTdDMTI0LjI0MyAxMzguODc4IDEyNC4wNzIgMTM5LjA5OCAxMjMuOTE4IDEzOS4yM0MxMjMuNzY0IDEzOS4zNjIgMTIzLjYwNSAxMzkuNDI4IDEyMy40MzkgMTM5LjQyOEMxMjMuMjE5IDEzOS40MjggMTIyLjkzMyAxMzkuMzI0IDEyMi41ODEgMTM5LjExNEwxMTUuNTE2IDEzNC45MjJaTTEyNy44NzkgMTM5LjU5M0MxMjcuNzkxIDEzOS43OCAxMjcuNzE5IDEzOS45MTggMTI3LjY2NCAxNDAuMDA2QzEyNy42MiAxNDAuMDk0IDEyNy41MzggMTQwLjE3NiAxMjcuNDE3IDE0MC4yNTNDMTI3LjMwNyAxNDAuMzQxIDEyNy4xNTggMTQwLjM4NSAxMjYuOTcxIDE0MC4zODVDMTI2Ljc4NCAxNDAuMzg1IDEyNi41MDkgMTQwLjMwMyAxMjYuMTQ2IDE0MC4xMzhDMTI1Ljc4MyAxMzkuOTczIDEyNS41MzUgMTM5LjgyNCAxMjUuNDAzIDEzOS42OTJDMTI1LjI4MiAxMzkuNTcxIDEyNS4yMjEgMTM5LjQzNCAxMjUuMjIxIDEzOS4yNzlDMTI1LjIyMSAxMzkuMTI1IDEyNS4yODcgMTM4Ljg1IDEyNS40MTkgMTM4LjQ1NEwxMzAuNzM1IDEyNy4zNDVDMTMwLjk0NCAxMjYuOTI3IDEzMS4xMzEgMTI2LjY4NSAxMzEuMjk2IDEyNi42MTlDMTMxLjM4NCAxMjYuNTc1IDEzMS41MSAxMjYuNTUzIDEzMS42NzUgMTI2LjU1M0MxMzEuODUyIDEyNi41NTMgMTMyLjEzMiAxMjYuNjQxIDEzMi41MTcgMTI2LjgxN0MxMzMuMTEyIDEyNy4xMDMgMTMzLjQwOSAxMjcuNDE3IDEzMy40MDkgMTI3Ljc1OEMxMzMuNDA5IDEyNy45MDEgMTMzLjMzMiAxMjguMTc2IDEzMy4xNzggMTI4LjU4M0wxMjcuODc5IDEzOS41OTNaTTE0My4wODggMTMyLjYyN0MxNDMuNTI4IDEzMi44NDcgMTQzLjc0OCAxMzMuMjMzIDE0My43NDggMTMzLjc4M0MxNDMuNzQ4IDEzNC4zMzMgMTQzLjUzMyAxMzQuNzEzIDE0My4xMDQgMTM0LjkyMkwxMzYuMDU2IDEzOS4xMTRDMTM1LjQ5NSAxMzkuNDc4IDEzNS4wNDMgMTM5LjUxNiAxMzQuNzAyIDEzOS4yM0MxMzQuNTQ4IDEzOS4wOTggMTM0LjM4OSAxMzguOSAxMzQuMjI0IDEzOC42MzZDMTM0LjAwMyAxMzguMjczIDEzMy44OTMgMTM4LjAwOCAxMzMuODkzIDEzNy44NDNDMTMzLjg5MyAxMzcuNjc4IDEzMy45MjYgMTM3LjUzNSAxMzMuOTkyIDEzNy40MTRDMTM0LjExMyAxMzcuMjI3IDEzNC4zNSAxMzcuMDI5IDEzNC43MDIgMTM2LjgyTDEzOS44MzYgMTMzLjc4M0wxMzQuNzE5IDEzMC43NDZDMTM0LjUyMSAxMzAuNjI1IDEzNC4zNzIgMTMwLjUyNiAxMzQuMjczIDEzMC40NDhDMTM0LjAzMSAxMzAuMjM5IDEzMy45MSAxMzAuMDE0IDEzMy45MSAxMjkuNzcyQzEzMy45MSAxMjkuNTUyIDEzNC4wMDMgMTI5LjI4OCAxMzQuMTkxIDEyOC45NzlDMTM0LjUzMiAxMjguNDA3IDEzNC44NTEgMTI4LjEyMSAxMzUuMTQ4IDEyOC4xMjFDMTM1LjQxMiAxMjguMTIxIDEzNS43MDkgMTI4LjIyNiAxMzYuMDM5IDEyOC40MzVMMTQzLjA4OCAxMzIuNjI3WiIgZmlsbD0id2hpdGUiLz4KPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl83MDlfMTEiIHgxPSI5NC43ODMzIiB5MT0iNDIuODE4IiB4Mj0iODUuNTg5NyIgeTI9IjEzNy4yMDUiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0iI0ZGOTkwMCIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNGQkFDNzMiLz4KPC9saW5lYXJHcmFkaWVudD4KPGxpbmVhckdyYWRpZW50IGlkPSJwYWludDFfbGluZWFyXzcwOV8xMSIgeDE9IjQ0LjY4NTkiIHkxPSI0Mi4yMDE5IiB4Mj0iNDQuNjg1OSIgeTI9IjUyLjMyOTUiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0iI0ZGOTkwMCIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNGQkFDNzMiLz4KPC9saW5lYXJHcmFkaWVudD4KPGxpbmVhckdyYWRpZW50IGlkPSJwYWludDJfbGluZWFyXzcwOV8xMSIgeDE9IjExNi42OTMiIHkxPSIxMTcuNzUyIiB4Mj0iMTQ2LjM5OSIgeTI9IjE1MS4yMjkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0iIzJEQzBGRiIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMzODU4RkYiLz4KPC9saW5lYXJHcmFkaWVudD4KPC9kZWZzPgo8L3N2Zz4K
// ==/UserScript==

(function () {
    'use strict';

    // global variables
    const debug = false;
    const lang = navigator.language || navigator.userLanguage; // e.g. "en-US"

    // Language pack
    const languages = {
        'zh-CN': {
            dir: 'ltr',
            copy: '复制',
            copyed: '内容已复制',
            copy_url: '复制链接',
        },
        'ug': {
            dir: 'rtl',
            copy: 'كۆچۈرۈش',
            copyed: 'ئۇچۇر كۆچۈرۈلدى',
            copy_url: 'ئۇلانمىنى كۆچۈرۈش',
        },
        'default': {
            dir: 'ltr',
            copy: 'Copy',
            copyed: 'content has been copied',
            copy_url: 'Copy url',
        },
    };

    // Use i18n
    let tc = (key, locale = lang) => {
        if (languages[locale] && languages[locale][key]) {
            return languages[locale][key];
        } else if (languages['default'] && languages['default'][key]) {
            return languages['default'][key];
        } else {
            return key;
        }
    };

    // Toast
    let toast = Swal.mixin({
        toast: true,
        position: 'top',
        showConfirmButton: false,
        timer: 3500,
        timerProgressBar: false,
        customClass: {
            container: `${tc('dir')} sherer-font`,
        },
    });

    // Useful toast
    const message = {
        success: (text) => {
            toast.fire({ title: text, icon: 'success' });
        },
        error: (text) => {
            toast.fire({ title: text, icon: 'error' });
        },
        warning: (text) => {
            toast.fire({ title: text, icon: 'warning' });
        },
        info: (text) => {
            toast.fire({ title: text, icon: 'info' });
        },
        question: (text) => {
            toast.fire({ title: text, icon: 'question' });
        }
    };

    // Add style
    let style = document.createElement('style');
    style.innerHTML = `
        .ltr { direction: ltr !important; }
        .rtl { direction: rtl !important; }
        .sherer-btn { cursor: pointer; background-color: #f5f5f5; padding: 5px 8px; border-radius: 3px; white-space: nowrap; }
        .sherer-btn:hover { background-color: #e9e9e9; }
        .sherer-btn-tianyi { margin-right: 20px; padding: 4px 12px; border-radius: 4px; color: #fff; font-size: 12px; border: 1px solid #0073e3; background: #2b89ea; cursor: pointer; }
        .sherer-font { font-family: 'UKIJ Ekran', 'UKIJ Tor', 'UKIJ Basma', 'ALKATIP Tor', 'ALKATIP', 'Microsoft YaHei', '微软雅黑', 'PingFang SC', 'Helvetica Neue', Helvetica, Arial, sans-serif !important; }
        .sherer-flex-column { display: flex; flex-direction: column; }
        .sherer-justify-between { justify-content: space-between; }
        .sherer-position-none { position: static !important; }
        .sherer-center { text-align: center; }
        .sherer-m-5,.sherer-ml-5 { margin-left: 5px !important; }
        .sherer-m-5,.sherer-mr-5 { margin-right: 5px !important; }
        .sherer-m-5,.sherer-mt-5 { margin-top: 5px !important; }
        .sherer-m-5,.sherer-mb-5 { margin-bottom: 5px !important; }
        .sherer-my-5 { margin-top: 5px !important;margin-bottom: 5px !important; }
        .sherer-mx-5 {margin-left:5px !important;margin-right:5px !important;}
        .sherer-mx-auto {margin-left:auto;margin-right:auto;}
    `;
    document.head.appendChild(style);

    // Tianyi net disk
    const tianyi = () => {
        // $('.sherer-fileid').remove();
        let list = [];
        debug && console.log($('.file-list-ul .c-file-item[data-isfolder!="true"]').length);
        $('.file-list-ul .c-file-item[data-isfolder!="true"]').each(function () {
            let li = $(this);
            let fileid = li ? li.attr('data-fileid') : undefined;
            debug && console.log(fileid);
            if (!fileid) { return; }

            let _fieldid = `tianyi_${fileid}`;
            list.push(_fieldid)

            if (li.find(".sherer-fileid").length) { return; }
            li.find('.file-item').after(`<p class="sherer-fileid sherer-btn sherer-font sherer-center sherer-m-5" data-content="${_fieldid}">${tc('copy_url')}</p>`);
        });

        // Remove copy all button
        $('.sherer-copy-all').remove();

        // Add copy all data button
        if (list.length > 0) {
            // Add new copy all button
            let output = list.join('\n');
            $('.nav-opea').prepend(`<button type="button" class="sherer-btn-tianyi sherer-copy sherer-copy-all sherer-font" data-content="${output}">${tc('copy')}</button>`);
        }

        activeCopyEvent();
    };

    const copyContent = (content) => {
        if (!content) { return; }
        debug && console.log('copy text', content);
        GM_setClipboard(content, 'text');
        message.success(tc('copyed'));
    };

    // Add click event for copy content
    const activeCopyEvent = () => {
        $('.sherer-btn,.sherer-copy').off('click');
        $('.sherer-btn,.sherer-copy').on('click', function () {
            copyContent($(this).data('content'));
        });
    }

    // Analysis net disks
    if (/cloud.189.cn/.test(location.host)) {
        let observe = new MutationObserver(function (mutationsList, observer) {
            debug && console.log(mutationsList);
            let doWork = true;
            for (let i = 0; i < mutationsList.length; i++) {
                let mutation = mutationsList[i];
                if (mutation && mutation.addedNodes && mutation.addedNodes.length) {
                    let count = 0;
                    for (let j = 0; j < mutation.addedNodes.length; j++) {
                        let node = mutation.addedNodes[j];
                        if (node && node.classList && node.classList.contains('sherer-fileid')) {
                            count += 1;
                            break;
                        }
                    }
                    if (count > 0) { doWork = false; break; }
                }
            }
            doWork && tianyi();
        });

        let nodes = document.getElementsByClassName("p-view-box");
        debug && console.log(nodes);
        if (nodes && nodes.length) observe.observe(nodes.item(0), { attributes: false, childList: true, subtree: true });
        tianyi();
    }

    // active event
    activeCopyEvent();
})();