您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
readds seen/watched functionality to youtube subscriptions
// ==UserScript== // @name YouTube Mark As Watched // @namespace http://www.youtube.com/ // @version 1.0 // @description readds seen/watched functionality to youtube subscriptions // @match http://www.youtube.com/feed/subscriptions // @match https://www.youtube.com/feed/subscriptions // @copyright 2013+, panni / Fixed by TheVirus // @nocompat Chrome // @run-at document-idle // ==/UserScript== (function () { 'use strict'; var jq, jQueryLoaded, main, script, store; // fire on jquery load jQueryLoaded = function (event) { jq = unsafeWindow.jQuery.noConflict(); if (jq !== undefined && jq !== null) { main(jq); } }; main = function ($) { var seen, clicked, reflect, addBtn, $btn = $('<img src="//s.ytimg.com/yts/img/pixel-vfl3z5WfW.gif" class="yt-channel-title-icon-verified" alt="" title="click to unwatch" style="cursor:pointer;" />'); // append stylesheet $('head').append('<style id="dynamicStylesheet"></style>'); $('#dynamicStylesheet').text(".seen { opacity: 0.3; }"); // allow caching of our dynamically loaded scripts $.ajaxSetup({ cache: true }); // get totalStorage and continue $.getScript(location.protocol+"//nigl.it/static/jquery.total-storage.min.js", function() { store = $.totalStorage; seen = (store("seen") || []); // limit to 100 seen IDs if (seen.length > 100) { seen = seen.slice(seen.length - 100); } // item has been clicked, handle clicked = function(e) { var $this = $(e.target), feedParent, vidID; // not left or middle mouse? (new tab) if (e.button > 1) { return; } vidID = $this.parents(".yt-lockup-video"); vidID = vidID.find('.addto-watch-later-button').attr('data-video-ids'); feedParent = $this.parents(".feed-item-dismissable").addClass("seen"); if ($.inArray(vidID, seen) === -1) { seen.push(vidID); store("seen", seen); } // add an unwatch button addBtn(feedParent, vidID); }; addBtn = function(feedParent, vidID) { var btn, fpPosition = feedParent.position(); btn = $btn.clone().on("click", function(e) { feedParent.removeClass("seen"); // remove item from storage seen.splice(seen.indexOf(vidID), 1); store("seen", seen); // remove the button $(this).remove(); e.stopPropagation(); return false; }).css({position: "absolute", right: -1, top: fpPosition.top - 1}); btn.insertAfter(feedParent); }; // reflect seen statuses in the DOM reflect = function(els) { els.each(function(k, el) { var $this = $(el), feedParent; var vidID = $this.find('.addto-watch-later-button').attr('data-video-ids'); if ($.inArray(vidID, seen) !== -1) { feedParent = $this.parents(".feed-item-dismissable").addClass("seen"); // add an unwatch button addBtn(feedParent, vidID); } }); }; // bind all current and future video links to clicked handler $(document).on("mousedown", '#content .yt-lockup-title .yt-uix-sessionlink, #content .yt-lockup-thumbnail .yt-uix-sessionlink', function(e) { return clicked(e); }); // collect all newly added videos after endlessscroll and set their seen statuses $('#browse-items-primary').on("DOMNodeInserted", function(e) { var item = e.target; if ($(item).hasClass('feed-item-container')) { if (!$(item).hasClass('handled')) { var $this = $(item); reflect($this.find(".yt-lockup-video")); $this.addClass("handled"); } } }); // collect all current videos before endlessscroll and set their seen statuses $('#feed .browse-items-primary').not('.handled').each(function(k, el) { var $this = $(this); reflect($this.find(".yt-lockup-video")); $this.addClass("handled"); }); }); }; // add jQuery script = document.createElement('script'); script.src = '//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js'; script.addEventListener('load', jQueryLoaded, false); document.body.appendChild(script); }());