Douban Movie ReleaseDate

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

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 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 = "";
        }
    }
})();