// ==UserScript==
// @name MaiJZ-AcFun小助手
// @namespace https://github.com/maijz128
// @version 22.11.13
// @description 文章区:评论区域居中、文章内容始终显示、高亮楼主名字;视频:在简介栏中可以显示封面;
// @author MaiJZ
// @match *://*.acfun.cn/*
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_cookie
// @grant GM.cookie
// @grant GM_setClipboard
// @grant GM_xmlhttpRequest
// @grant unsafeWindow
// @grant window.close
// @grant window.focus
// @downloadURL https://update.greasyfork.icu/scripts/37009/MaiJZ-AcFun%E5%B0%8F%E5%8A%A9%E6%89%8B.user.js
// @updateURL https://update.greasyfork.icu/scripts/37009/MaiJZ-AcFun%E5%B0%8F%E5%8A%A9%E6%89%8B.meta.js
// ==/UserScript==
(function () {
setTimeout(function () {
main();
}, 10);
})();
function main() {
if (matchURL("/a/ac")) {
//Article();
} else if (matchURL("/v/ac")) {
VideoPage();
VideoTitle();
} else if (matchURL("live.acfun")) {
//LivePage();
} else if (isHomePage()) {
//HomePage();
} else if (IsImage()) {
AcFunImage();
}
}
// 首页
function isHomePage() {
var href = window.location.href;
return href === 'http://www.acfun.cn/' || href === 'https://www.acfun.cn/';
}
function HomePage() {
}
//直播
function LivePage() {
// 删除TV
var tv = document.querySelector('.tv-wrapper');
if (tv) {
tv.remove();
}
}
// 视频
function VideoPage() {
// 观影模式时:输入弹幕栏改变CSS
var style = ".container-player[data-bind-attr='web'] .container-video .container-plugins-inner .container-controls .control-bar-bottom, .container-player[data-bind-attr='screen'] .container-video .container-plugins-inner .container-controls .control-bar-bottom, .container-player.film-mode .container-video .container-plugins-inner .container-controls .control-bar-bottom";
style += "{left: 180px !important; }";
addStyle(style);
var coverURL = getVideoCoverURL();
//addCoverLink(coverURL);
console.log('Cover URL');
console.log(coverURL);
// 自动宽屏播放
setTimeout(function () {
var btn = document.querySelector('.film-model .btn-film-model');
if (btn) {
eventFire(btn, 'click');
}
}, 2000);
function addCoverLink(url) {
var style = '.video-cover:hover img { display: block !important; }';
style += '.video-cover img { position: absolute; z-index: 99; }';
addStyle(style);
var elTitle = document.querySelector("#main div.introduction section div.title");
if (elTitle) {
var strHtml = '简介';
strHtml += ' 封面';
strHtml += '
';
strHtml += '';
elTitle.innerHTML = strHtml;
}
}
function getVideoCoverURL() {
var result = null;
// var player = document.getElementById("ACFlashPlayer");
var pageInfo = document.querySelector('#main #pageInfo');
if (pageInfo) {
var value = pageInfo.getAttribute('data-pic');
result = value;
}
return result;
}
}
function VideoTitle(){
// var titleDiv = $("#main-content div.video-description h1.title");
var titleDiv = document.querySelector("#main-content div.video-description h1.title");
if (titleDiv) {
var btn = document.createElement("button");
btn.textContent = "复制";
btn.onclick = function(){
var title = document.querySelector("h1.title span").innerHTML;
console.log(title);
GM_setClipboard(title);
};
titleDiv.appendChild(btn);
}
}
// 文章
function Article() {
this.upId = null;
this.upName = null;
this.time = null;
this._init = function () {
var elArticleUp = document.getElementById('article-up');
var elUpName = elArticleUp.querySelector('.up-name a');
this.upName = elUpName.innerHTML;
var href = elUpName.getAttribute('href');
this.upId = href.replace('/u/', '').replace('.aspx', '');
var elTime = elArticleUp.querySelector('.up-time');
this.time = elTime.innerHTML;
//var style = '.display-block{display: block !important;}';
// style += '.comment-content{width: 850px !important; margin: 0 auto !important;}';
// addStyle(style);
};
// 高亮楼主名字
this.highlightUp = function () {
var COLOR = "#008000";
var style = 'a[data-uid="' + this.upId + '"]{';
style += 'color: ' + COLOR + ' !important;';
style += 'font-weight: bold !important;}';
// 楼主标志
style += 'a[data-uid="' + this.upId + '"]:before {';
// 样式1
// style += 'content: "UP: "; color: #c66;';
// 样式2
style += 'content: "UP主"; padding: 1px 2px; margin-right: 4px; font-size: 12px; background-color: #4a8eff; border-radius: 2px; color: #fff;';
style += '}';
addStyle(style);
};
// 在查看下一页评论时,文章内容也一直显示
this.alwaysShowContent = function () {
$('#article-content').addClass('display-block');
};
// 让评论区域居中显示
this.centerComments = function () {
var style = '.columen-left { width: 850px !important; padding-top: 20px;';
style += 'float: none !important; margin: 0 auto !important; }';
addStyle(style);
};
// 评论区域元素上移
this.moveUpComments = function () {
var contentArea = $('.content:first');
var elCommentArea = $('.comment-area:first');
contentArea.append(elCommentArea);
};
// 文章内容
this.articleContent = function () {
var style = '#article-content>.article-content { min-height: 400px; }';
addStyle(style);
};
this._init();
this.highlightUp();
//this.alwaysShowContent();
this.centerComments();
this.moveUpComments();
this.articleContent();
}
function IsImage(){
if (matchURL("/kimg/") || matchURL("image/resize")) {
return true;
}
return false;
}
function AcFunImage(){
if ( matchURL("image/resize")) {
var href = window.location.href;
var newhref = href.split("?")[0];
window.location.href = newhref;
}
}
//########################################################################
function matchURL(url) {
const URL = window.location.href;
return URL.indexOf(url) > -1;
}
function addStyle(styleContent) {
var elStyle = document.createElement("style");
elStyle.innerHTML = styleContent;
document.head.appendChild(elStyle);
}
// Usage: fireKeyEvent(input元素, 'keydown', 13);
// http://blog.csdn.net/lovelyelfpop/article/details/52471878
function fireKeyEvent(el, evtType, keyCode) {
var doc = el.ownerDocument;
var win = doc.defaultView || doc.parentWindow,
evtObj;
if (doc.createEvent) {
if (win.KeyEvent) {
evtObj = doc.createEvent('KeyEvents');
evtObj.initKeyEvent(evtType, true, true, win, false, false, false, false, keyCode, 0);
} else {
evtObj = doc.createEvent('UIEvents');
Object.defineProperty(evtObj, 'keyCode', {
get: function () {
return this.keyCodeVal;
}
});
Object.defineProperty(evtObj, 'which', {
get: function () {
return this.keyCodeVal;
}
});
evtObj.initUIEvent(evtType, true, true, win, 1);
evtObj.keyCodeVal = keyCode;
if (evtObj.keyCode !== keyCode) {
console.log("keyCode " + evtObj.keyCode + " 和 (" + evtObj.which + ") 不匹配");
}
}
el.dispatchEvent(evtObj);
} else if (doc.createEventObject) {
evtObj = doc.createEventObject();
evtObj.keyCode = keyCode;
el.fireEvent('on' + evtType, evtObj);
}
}
function eventFire(el, eType) {
if (el.fireEvent) {
el.fireEvent('on' + eType);
} else {
var evObj = document.createEvent('Events');
evObj.initEvent(eType, true, false);
el.dispatchEvent(evObj);
}
}