Greasy Fork

Kinopoisk - Add to folder

Добавить фильм в папку

目前为 2025-01-05 提交的版本。查看 最新版本

// ==UserScript==
// @name         Kinopoisk - Add to folder
// @namespace    scriptomatika
// @author       mouse-karaganda
// @description  Добавить фильм в папку
// @license      MIT
// @match        https://www.kinopoisk.ru/film/*
// @match        https://www.kinopoisk.ru/series/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=kinopoisk.ru
// @version      1.3
// @grant        none
// ==/UserScript==

(function() {
    let $ = window.jQuery;
    console.log('kinoscript :: Userscript run at == ', location.href);

    let poisk = {};

    let plugin = {
        insertStyle: function() {
            let styleText = [
                '.styles_userFoldersContainer { margin-bottom: 24px; }',
                '.styles_userFoldersContainer .btn_outer { display: flex; justify-content: center; }',
                '.styles_userFoldersContainer .btn_outer .button { color: #3bb33b; font-weight: bold; cursor: pointer; margin-left: 8px; }',
                '.styles_userFoldersContainer .btn_outer .button:hover { color: #266fff; }',
                '.styles_userFoldersContainer .btn_outer .arrow_right { transform: rotate(90deg); }',
                '.styles_userFoldersContainer .btn_outer.opened .arrow_right, .styles_userFoldersContainer .btn_outer:not(.opened) .arrow_down { display: none; }',
                '.styles_userFoldersContainer .menu_outer { position: absolute; left: 0; right: 0; height: 250px; overflow-x: none; overflow-y: scroll; scrollbar-width: thin; z-index: 10; border: 2px dotted #3bb33b; background-color: #ffffff; }',
                '.styles_userFoldersContainer .menu_outer .item { display: flex; justify-content: space-between; padding: 8px 20px; margin: 4px 0; cursor: pointer; }',
                '.styles_userFoldersContainer .menu_outer .item:hover { background-color: rgba(0, 0, 0, 0.04) }',
                '.styles_userFoldersContainer .menu_outer .item:hover .button { color: #266fff; }',
                '.styles_userFoldersContainer .menu_outer .item:not(.select) span:not(.button) { display: none; }'
            ];
            $('<style type="text/css">').appendTo(document.head)
                .text(styleText.join('\n'));
        },

        createFolders: function() {
            let foldersMenu = $('div[class*=styles_foldersMenu]').parents('div[class*=styles_userControlsContainer]');
            console.log('kinoscript :: foldersMenu = ', foldersMenu);
            if (foldersMenu.length == 0) {
                return;
            }
            poisk.section = $('<div />').insertBefore(foldersMenu).addClass('styles_userFoldersContainer styles_section');
            poisk.link = $('<div" />').addClass('btn_outer').appendTo(poisk.section).on('click', plugin.openFolderList);
            $('<span />').addClass('arrow_down').text('🔻').appendTo(poisk.link);
            $('<span />').addClass('arrow_right').text('🔺').appendTo(poisk.link);
            $('<span />').addClass('button').text('Список папок').appendTo(poisk.link);

            poisk.menu = $('<div />').addClass('menu_outer').appendTo(poisk.section);
        },

        openFolderList: function(evt) {
            evt.preventDefault();
            evt.stopPropagation();

            let random = Math.round(Math.random() * 1e8);
            $.post('/handler_mustsee_ajax.php?mode=multiple&rnd=' + random, {
                //mode: multiple | single
                token: $.cookie('_csrf_csrf_token'),
                id_films: plugin.getCurrentFilm()
            }, function(data) {
                console.log('kinoscript :: openFolderList POST = ', data);
                if (data.folders.length == 0) {
                    return;
                }
                poisk.link.toggleClass('opened');
                let filmId = plugin.getCurrentFilm();

                data.folders.forEach((folder, index) => {
                    let info = {
                        'data-id': folder.id,
                        'data-url': `/handler_mykp/folders/${folder.id}/film/${filmId}/`
                    };
                    let div = $('<div />').addClass('item').attr(info).appendTo(poisk.menu);
                    $('<span />').addClass('button').html(folder.name).appendTo(div);
                    $('<span />').text('✔️').appendTo(div);

                    if (filmId in data.objFolders) {
                        if (folder.id in data.objFolders[filmId]) {
                            div.addClass('select');
                        }
                    }
                });
            });
        },

        getCurrentFilm: function() {
            let match = location.href.match(/\/(film|series)\/(\d+)/);
            if (match) {
                return match[2];
            }
            return '0';
        },

        missingElement: function(elemGetter, callback) {
            // Итерации 10 раз в секунду
            let missingOne = 100;
            // Ограничим количество попыток разумными пределами
            let maxIterCount = 3000;

            let elemTimer;
            let iterCount = 0;

            let missingHandler = () => {
                let elemList = elemGetter();
                // Определим, что вышел элемент
                let elemStop = (elemList.length > 0);
                // Определим, что кончилось количество попыток
                let iterStop = (iterCount >= maxIterCount);

                if (elemStop || iterStop) {
                    clearInterval(elemTimer);

                    // Если элемент так и не появился
                    if (!elemStop && iterStop) {
                        console.log('kinoscript :: Нет элемента = ', elemGetter.toString());
                        return;
                    }
                    if (elemList.length == 1) {
                        elemList = elemList.eq(0);
                    }
                    callback.call(window, elemList);
                }
                iterCount++;
            };
            elemTimer = setInterval(missingHandler, missingOne);
        },

        checkLibrary: function () {
            if ($) {
                plugin.afterLoad();
            } else {
                let tagJS = document.createElement('script');
                tagJS.src = [
                    'https://kinopoisk-ru.clstorage.net/y14jW9200/2e7f125Abj/j-wGvp0kfqLwDa29G0MN_FJDWTAcbisVPvX4ta-ytMC3jApXxnNGOpsuEQMMaHvj5JQK57-KpH4BrrZLGe5FosamC6KKZGnL',
                    'gSec0T1tMdFwcjkpDm0qFCS04aCuv6jZ6tAVe6YlESb6PDVyOR887sTrBrjd-fMCS9SpJgLKNNC00kzo6B5-0JARsMUzYSL3Q1MZOT9bVwYkuO2IrJyw4Kf7LEapTBoN9SASTAoHCMjNyT6I2_fnIkvE',
                    'hiYJxAPevfdT4PkZW8CwLo_wN3YR81N-NhwMXHE-KrnItomQrceP6SRpunUyN8srFmITCQb9z9MdlOXK8R9S37IlM8sn8LT0UfzVAWfelh62wRVbNctkSjgzMW5iJQuWxoGUnILwj-gWYJFRHBDUDilb',
                    'BxYPzcX6HofZ7sUPWuu7JBDEKN250Vfy-Dpr1pIzjPINcwfuWWwnJC1DVgoisv6DrIWP-5D4NmqrYQwSyS0GVCQBO-rqyT6V3vHYA1DTgiEz3hzEkdRbwv4FZtyJI7D1DVYb2WVPAjQDY34lC6nvnqu_',
                    'ifes1il1k1YeENQwBGQMPhjM4uM_vcXNyTR_6rwhEsUkz4rbTPr_G2zBjSyk-il7Est7bQANC3hUKTmPwpGAvp35gNgET7tBGi3IBDlQBgIZx_XvDbL61tM6RO2kPBfgEeSt3V7k8Q5b_KcHq9YncC76',
                    'eVQtOy9gSg0rseWFkpmi57XMGmayczQvyzAHYiogEN3I0BiS3uTRKlXPiiYv_Tbht_dq4PEYYeayB6rjCXIz-3RxBA0KU1U4OrXHtKaTuPCMzwlKg1EeG98mOUcsFBnq6fk8hcjn0jxS5p0FPcQC77fr',
                    'c-v6JGj6nSqY0gNWJ-JwbD0EDVx-Dyuy4qWXvrL0vfctUJJfCRTjMCFMMScEy8jKBrHA0vgmaPC0OineOPiW8nvH-CFBzYgei9oGVzTCUmgYFy9rVBI-k8eajIe416PJBXSOVik93i0fdCc_Der36B6_',
                    '-dzIAWP6qwku_RfGuM5p5sQvbPKbArjFFk4h3FZMORAPQ2A8O7LAqpGHlcex9QVNk0g9BukuIUMIHQHu_ugahuj-8gJc8IYWD-8L5q3Ye8nnElvQrCea9BJYDMtFbC4fPU5oES6v7JuQuY3TkPAEdZV8',
                    'Ky7CDydjOjAu5-_QAKPu8M4_YNe9ADbeBu-76k_66zp_9bQhrN4xQw_wZFkyOjtwTjUem8u8rL642K34NGKfSg0ZxjIxZiAlGfTt9SW-2u_eCkT3lRsUwDrEiOxM2N42TdabLK39B0kV4l5cBi8IT3Ed',
                    'GZfanoa5of-VzjNGt381K8MJHl0PJivM1_crocXH2BhpxqcZKN041YbaTcfbP0T_lAWn0BRaFuFnVgYfMF5NJQWuzb6xlLjKpccwbJtmDRvrLTNuIDsC5vboPbjn7NQ8Sc-eOhjuCvmt7V7AyBt41oo3',
                    'q_4aWjDocFIDGTdWRhsDvcyAg5m39ovwJ0yvRjcN3S8RfBEiA_HcxAe22cv_JWfKpwcc3xXuufhL-N4_ReC4J7jQDUcX31xPFAgQS04qP7Xvuq-9t_W-7DBHk0cjHPw4JHUoOB3M_uMVnMfQ8ghIxqIq',
                    'COsf_ZzzctzLGmPEvQS1-CNbLc9EbhA5OnJPDACXzKWukJ_2oecYZrFNDhXLGhR0JzUKwun1DoTs5fYfUPacBxnpJN-J3ljp1wVhxLU3v9UMZCD6ZFcvLB5cdTE3j9abo7Ws8I_1BEmMcRU33hsXczo7',
                    'OvXv9wKT4fTtHkP3uwovwTHlmNVTw8EgRdKSMar5EE0Z4HldJisJYkszBJfqtoC-n8qqyRJSvVA_K_4bBkEIIxHT0csmkv3W3wlXz4c9DfUV2ZzXRPnbDUPVpDGx8itlKM5xdDITK0xXFAi747Ssnpn8',
                    'kOwPYZVuOSXbLBxgBTAhy-7RP6b__OwpSeudNCLaIfGv9FfC6h5kxqcHjPwlcgbaXlUGFBRDfh46q96zkL-595zDA0G1bA8O4S8SbBghJfDCwjyF_ufTGnP9giU92ALAkNF23tUWS8CuLbb8JFos21JC',
                    'Ng8SUn0JG7fEh6-Hi-GD9BRcn0oMPtgEN1wEOyDcw-EpttPT6A1-3IQZEOkU_Zvbaeb6L3_OigGx2jdmKuxeQxwTKlZrLRiV4J2Jjo3IoechbrBDMjPkCx13DQUTy-HnCZrs8OgHYNOLNR7NGMOuxl_0',
                    '9RZi3LcQmtcaagvfQ04eLjhoTzIkk8SRtqOv_K7WJk-NTjM46AI5RCgUCOHIyymqxsf3B3TphD8P2Qf2qtNlwus_ZdCPJKnnIHsP02VyMQkKSkYxO6jrgqmeruaQxwxctXUdHsgLAV4YNQ3wzNYMhf7L',
                    'zwpD9Z8fHdU39I3oW8X3JmL6igG1xxtpM_pkUDkaFn5pERuD97G0gJHEsOAyRa5oEBX1OR19JyEh4u_HAJnd9e0CYd2eITDDAvmY_H_Q0RFDxq4qldYSZTfWQXkFGBt_TBMZjeGEkZ2RxK_BB06TSxcT',
                    '5CAjTxgzDOD_ySqm-_LtBljUvx8Q3wLapt1r-9E_Z_qxL7TdKVMR0mdTLjYadUAOJLnpnrmTqeGp1ghwqUINGv8OIX05FSDOwuoHvP_7yipFyYo1CdgG8pbaRebXFkPBuien4wdFOuxaTRAWLW9KOAWV',
                    '4IKsnpL4pvoLVJpwNSboBhhgPRoj49z2F5fA1tACXN-5GyDvF-Gx1UvX2yJvxLEku8cJZyLofmwZNg1OThQMicifq7ev8YjpGEGUUT8a9CY0eDo7M_fg4wmy3fb8PEvshQk8zgLkhcl32Pg_QOO6Fp71',
                    'KngL3nBsGjk8U146Ca_DhbSXmMON-glGiEIBO9onEmcAGTzsycUsgvHSyAtB1pUEKvg42Jr1Wv_RLXPMsQuM6xh4LP9Qaxk7HFNxGTmu-pyQuLD5ntYMQ61DMAjdIhlvLDcPz9_QJrno-dQDfeo'
                ].join();
                tagJS.onload = plugin.afterLoad;
                document.body.append(tagJS);
            }
        },

        afterLoad: function () {
            //window.jQuery.noConflict();
            $ = window.jQuery;
            console.log('kinoscript :: jQuery = ', $);

            plugin.insertStyle();
            plugin.createFolders();
        },

        start: function() {
            plugin.checkLibrary();
        }
    };

    plugin.start();

    console.log('Kinopoisk - Add to folder 💬 1.3');
})();