Greasy Fork is available in English.
btnull设置已看,用来找电影
- // ==UserScript==
- // @name btnull设置已看
- // @namespace 设置已看
- // @version 1.0.0
- // @description btnull设置已看,用来找电影
- // @author 蓝白社野怪
- // @include *btnull*
- // @icon https://www.google.com/s2/favicons?sz=64&domain=greasyfork.org
- // @require https://cdnjs.cloudflare.com/ajax/libs/jquery/1.9.1/jquery.min.js
- // @require https://cdn.sheetjs.com/xlsx-0.20.3/package/dist/xlsx.mini.min.js
- // @license GPLv3
- // @grant unsafeWindow
- // @grant GM_setValue
- // @grant GM_getValue
- // @grant GM_deleteValue
- // @grant GM_listValues
- // ==/UserScript==
- // 透明度设置修改下面三个变量:数值越小越透明,1不透明、0完全透明
- // ***********************************************************
- // 全局:视频封面(已看):透明度 设定(0.0-1.0)
- var opacityIsViewCover = 0.1;
- // 全局:未看按钮:透明度 设定(0.0-1.0)
- var opacitybtnView = 0.7;
- // 全局:已看按钮:透明度 设定(0.0-1.0)
- var opacitybtnIsView = 0.3;
- // ***********************************************************
- // 添加自定义样式
- var GM_addStyle = GM_addStyle || function(css) {
- var style = document.createElement("style");
- style.type = "text/css";
- style.appendChild(document.createTextNode(css));
- document.getElementsByTagName("head")[0].appendChild(style);
- };
- $(document).ready(function() {
- 'use strict';
- gateway();
- obServerPicture2();
- });
- // 方法入口
- var gateway = function(){
- setUploadList();
- setVideoIsViewed();
- setBtnView();
- }
- // 网站的列表,翻页只替换元素,不刷新,无法执行脚本,所以要监听元素变化
- var obServerPicture2 = function(){
- // 目标元素
- const targetElement = document.querySelector('.content-list');
- // 创建一个MutationObserver实例
- const observer = new MutationObserver((mutations) => {
- if(mutations){
- gateway();
- }
- });
- // 配置观察器
- const config = {
- childList: true,
- };
- // 启动观察器
- observer.observe(targetElement, config);
- }
- // 自定义样式
- var staticStyle = `
- .btnView{opacity:`+opacitybtnView+`;width:40px;height: 25px;line-height:16px;font-size:12px;text-align:center;cursor:pointer;display:inline-block;position:absolute;right:0;top:0;z-index:2;border:1px solid #999;border-radius:3px;padding:3px 5px;background:#fff;color:black;}
- .btnIsView{opacity:`+opacitybtnIsView+`;background:rgba(255,255,255,0.5);}
- .btnView:hover{opacity:1;background:#aaa;color:#fff;}
- .btnIsView:hover{background:rgba(255,255,255,1);opacity:1;color:#999;}
- .btnRefresh{display:inline-block;position:absolute;z-index:1;right:52px;top:18px;background:#fff;border:1px solid #999;border-radius:5px;color:#999;padding:1px 5px;}
- .btnRefresh:hover{background:#aaa;color:#fff;}
- .btnList{display:inline-block;position:absolute;z-index:1;right:97px;top:18px;background:#fff;border:1px solid #999;border-radius:5px;color:#999;padding:1px 5px;}
- .btnList:hover{background:#aaa;color:#fff;}
- .btnListSave{display:inline-block;position:absolute;z-index:1;right:170px;top:18px;background:#fff;border:1px solid #999;border-radius:5px;color:#999;padding:1px 5px;display:none;}
- .btnListSave:hover{background:#aaa;color:#fff;}
- .viewList{width:100%;height:120px;display:none;color:#999;padding:1px 5px;}
- /*通用属性*/
- .__scale-wrap .btnView{right:unset;width:40px;line-height:16px;}`;
- GM_addStyle(staticStyle);
- // bvid 影片id,bname 影片名称
- var bvid = null;
- var bname = null;
- // viewGroupArr存影片时间,viewNameGroupArr存影片名称
- var viewGroupArr = [];
- var viewNameGroupArr = [];
- viewGroupArr = GM_getValue("BtnullViewIdList",null);
- if(!viewGroupArr)
- viewGroupArr = [];
- viewNameGroupArr = GM_getValue("BtnullViewNameList",null);
- if(!viewNameGroupArr)
- viewNameGroupArr = [];
- // 设置上传按钮
- var setUploadList = function(){
- if($("#viewListUpload").length>0)
- return;
- else{
- $(".sort div:first").before("<input type='file' id='viewListUpload' >");
- $("#viewListUpload").bind("change", handleFile);
- }
- }
- // 读取上传的文件内容
- var handleFile = function(e) {
- var nameArray = [];
- var timeArray = [];
- var file = e.target.files[0];
- var reader = new FileReader();
- reader.readAsArrayBuffer(file);
- //reader.readAsText(file,'GB2312');
- reader.onload = function(e) {
- var data = e.target.r###lt;
- /* reader.readAsArrayBuffer(file) -> data will be an ArrayBuffer */
- //var workbook = XLSX.read(data,{ type: "binary", codepage: 936 });
- var workbook = XLSX.read(data);
- var mySheet = workbook.Sheets.Sheet1;
- let s = mySheet['!ref'];
- var sheetHeight = s.slice(s.indexOf(':')+2);
- //循环读取数据
- for(let i = 2;i<=sheetHeight;i++){
- var name = mySheet["A"+i].w;
- var time = null;
- var timecol = mySheet["E"+i];
- if(timecol == undefined){
- time = "0/";
- }else{
- time = timecol.w;
- }
- let a = name.indexOf('/');
- if(a!=-1){
- name = name.slice(0,name.indexOf('/')-1);
- }
- time = time.slice(0,time.indexOf('/'));
- nameArray.unshift(name);
- timeArray.unshift(time);
- }
- // 存储到GM
- GM_setValue("BtnullViewIdList",timeArray);
- GM_setValue("BtnullViewNameList",nameArray);
- alert("上传成功");
- };
- }
- // 设置封面样式
- var setVideoIsViewed = function(){
- // 获取内容列表
- var content_list = $(".content-list li");
- $.each(content_list,function(index,item){
- // 获取封面的 a标签
- var coverObj0 = $(item).find("a")[0];
- var coverObj = $(coverObj0);
- // bvid = coverObj.attr("href");
- // bvid = bvid.replace("/mv/","");
- var timeObj = coverObj.parent().next().find("div");
- var text = timeObj.text();
- bvid = text.slice(0,text.indexOf('/')-1);
- bname = coverObj.attr("title");
- // 添加已看/未看按钮、设置封面透明度
- if(getBvIsViewed(bvid,bname)){
- // 已看
- coverObj.before("<button class='btnView btnIsView' data-view='1' data-av='"+bvid+"' data-bname='"+bname+"'>已看</button>");
- coverObj.css("opacity",opacityIsViewCover);
- }else{
- // 未看
- coverObj.before("<button class='btnView btnNotView' data-view='0' data-av='"+bvid+"' data-bname='"+bname+"'>未看</button>");
- coverObj.css("opacity","1");
- }
- });
- }
- // 判断视频是否已看,判断同年且同名的
- var getBvIsViewed = function(bvid,bname){
- bvid = bvid + "";
- bname = bname + "";
- if(!viewNameGroupArr)
- return false;
- for(var i = 0 ; i < viewNameGroupArr.length;i++){
- if(bname == viewNameGroupArr[i] && bvid == viewGroupArr[i]){
- return true;
- }
- }
- return false;
- }
- // 更新和保存GM本地存储的列表
- var saveGMVideoList = function(bvid,bname,isViewed){
- bvid = bvid + "";
- bname = bname + "";
- if(isViewed){
- //列表非空
- if(viewNameGroupArr){
- // 防止没刷新重复插入
- for(let i = 0 ; i < viewNameGroupArr.length ;i++){
- if(viewNameGroupArr[i] == bname && viewGroupArr[i] == bvid){
- return;
- }
- }
- }
- viewGroupArr.unshift(bvid); // 添加新的ID到数组中
- viewNameGroupArr.unshift(bname);
- }else{
- if(!viewNameGroupArr)
- return;
- for(let i = 0 ; i < viewNameGroupArr.length;i++){
- if(viewNameGroupArr[i] == bname && viewGroupArr[i] == bvid){
- viewGroupArr.splice(i,1); // 删除数组上指定位置的数据
- viewNameGroupArr.splice(i,1);
- }
- }
- }
- // 存储到GM
- GM_setValue("BtnullViewIdList",viewGroupArr);
- GM_setValue("BtnullViewNameList",viewNameGroupArr);
- }
- // 设置已看/未看按钮响应
- //var coverItemClass = "img";
- var setBtnView = function(){
- $(".btnView").unbind("click").click(function(e){
- var avId = $(this).data("av");
- var view = $(this).data("view");
- var avName = $(this).data("bname");
- var coverObjs = $(this).next();
- // 先读再存(跨页操作)
- // not:类.block-list-item-info-player--img为课堂分区封面上面的播放小图标
- // not:类.cover为热门-全站排行榜的唱片封面
- // var coverObjs = $(this).parent().find(coverItemClass+":not(.block-list-item-info-player--img):not(.cover):first");
- // 已看标志
- var setIsViewed = false;
- if(view == 0){
- // 未看 -> 已看
- setIsViewed = true;
- $(this).text("已看");
- $(this).removeClass("btnNotView");
- $(this).addClass("btnIsView");
- $(this).data("view","1");
- coverObjs.css("opacity",opacityIsViewCover);
- }else{
- // 已看 -> 未看
- $(this).text("未看");
- $(this).removeClass("btnIsView");
- $(this).addClass("btnNotView");
- $(this).data("view","0");
- coverObjs.css("opacity","1");
- }
- // 删除所有按钮
- // $(".btnView").remove();
- // 即时存储
- saveGMVideoList(avId,avName,setIsViewed);
- // 重新读取
- // setMethod();
- return false;
- });
- }