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.result;
/* 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;
});
}