Douban Movie ReleaseDate

豆瓣电影我看,增加上映时间排序,移除修改按钮。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Douban Movie ReleaseDate
// @namespace    https://greasyfork.org/users/34380
// @version      20200422
// @description  豆瓣电影我看,增加上映时间排序,移除修改按钮。
// @match        https://movie.douban.com/people/*/wish
// @match        https://movie.douban.com/people/*/collect
// @grant        none
// ==/UserScript==

(function () {
    'use strict';

    document.querySelector("head").insertAdjacentHTML("beforeend", `<style>
        .grid-view {
            display: flex;
            flex-direction: column;
        }
    </style>`);

    document.querySelector(".article").insertAdjacentHTML("afterbegin", `<div><a id="run-dmrd">运行上映排序脚本</a><span class="gray-dot">·</span><a id="reverse-order">排序反转</a></div>`);

    document.querySelector("#run-dmrd").addEventListener("click", runDmrd);
    document.querySelector("#reverse-order").addEventListener("click", reverseItemsOrder);

    var $grid_view = document.querySelector(".grid-view");
    var items_all = document.querySelectorAll(".grid-view > .item");

    function runDmrd () {
        orderItems(items_all);
        removeItemsEditButton(items_all);
        load_page_queue.next();
        document.querySelector("#run-dmrd").outerHTML = "";
    };
    function reverseItemsOrder () {
        items_all = document.querySelectorAll(".grid-view > .item");
        for (var item of items_all) {
            item.style.order = -item.style.order;
        }
    };

    function orderItems(items) {
        for (var item of items) {
            var intro = item.querySelector(".intro").innerText;
            var date = (intro.match(/\d{4}-\d{2}-\d{2}/) || ["0"])[0];
            item.style.order = parseInt(date.replace(/-/g, ""), 10);
        }
    }

    var total_page = document.querySelector(".thispage").getAttribute("data-total-page");
    var page_href = document.querySelector(".paginator > a").getAttribute("href");
    var parameters = page_href.match(/(.+start=)\d+(&sort=.+)$/);

    var load_page_queue = loadPageQueue();

    function* loadPageQueue() {
        for (var i = 0; i < total_page; i++) {
            console.log(i);
            yield loadPage(i + 1);
        }
    }

    function loadPage(index) {
        fetch("https://movie.douban.com" + parameters[1] + 15 * index + parameters[2])
            .then(function (response) {
                return response.text();
            })
            .then(function (text) {
                var el = (new DOMParser()).parseFromString(text, 'text/html');
                var items = el.querySelectorAll(".grid-view > .item");
                orderItems(items);
                insertNodelist("beforeend", items, $grid_view);
                addItemsEvent(items);
                removeItemsEditButton(items);
                load_page_queue.next();
            });
    }

    function insertNodelist(position, nodelist, parentnode) {
        for (var node of nodelist) {
            parentnode.insertAdjacentElement(position, node);
        }
    }

    function delMovie () {
        $(this).parents("div.item").hide();
        var url = "/j/mine/j_cat_ui";
        if (/\/location\//.test(location.href)) {
            url = "/location" + url;
        }
        $.post_withck(url, {
            sid: this.rel
        }, function (sjson) {
            var ret = eval("(" + sjson + ")");
            if (!ret.result) {
                alert("出错了,请稍后重试!");
            }
        });
    }

    function addItemsEvent(items) {
        for (var item of items) {
            item.querySelector(".d_link").addEventListener("click", delMovie);
        }
    }

    function removeItemsEditButton(items) {
        for (var item of items) {
            item.querySelector(".j.a_collect_btn").outerHTML = "";
        }
    }
})();