// ==UserScript==
// @name mySteamCN
// @namespace http://tampermonkey.net/
// @version 0.1
// @description md化SteamCN
// @author marioplus
// @match https://steamcn.com/*
// @require https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js
// @run-at document-end
// @downloadURL none
// ==/UserScript==
(function() {
// 加载css/js资源
function loadResource() {
$('head')
.append('')
// mdui
.append('')
.append('')
.append(initCss())
}
// 初始需要的css
function initCss() {
return `
`
}
// 解析数据
function parseData() {
// 初始主题
function initColor() {
const colors = [
['red', 'white'],
['pink', 'white'],
['purple', 'white'],
['deep-purple', 'white'],
['indigo', 'white'],
['teal', 'white'],
['blue', 'black'],
['light-blue', 'black'],
['cyan', 'black'],
['green', 'black'],
['light-green', 'black'],
['lime', 'black'],
['yellow', 'black'],
['amber', 'black'],
['orange', 'black'],
['deep-orange', 'black'],
]
const index = Math.floor(Math.random() * colors.length)
return {
theme: colors[index][0],
nav: colors[index][1]
}
}
// 导航条
function parseNav() {
let tmpNavs = []
$('.subforum_left_title_left_up>div>a').each((i, e) => {
let tmpNav = {}
tmpNav.href = e.getAttribute('href')
tmpNav.text = e.innerText
tmpNavs.push(tmpNav)
})
return tmpNavs
}
// 头像
function parseAvatar() {
return $('img.avatar.img-circle').attr('src')
}
// 消息
function parseMessage() {
// TODO:需要测试有消息的情况
}
// 提醒
function parseRemind() {
// TODO:需要测试有提醒的情况
}
// 帖子标题
function parsePostTitle() {
return $('a#thread_subject').attr('title')
}
// 帖子属性
function parsePostAttr() {
const $postData = $('div.subforum_right_title > div div:odd')
const $postFavorite = $('#k_favorite')
const $postReply = $('#post_reply')
return {
reply: {
text: '回复',
amount: $postData[0].innerText,
onclick: $postReply.attr('onclick')
},
view: {
text: '查看',
amount: $postData[1].innerText
},
favorite: {
text: '收藏',
amount: $postData[2].innerText,
onclick: `showWindow('k_favorite', '${$postFavorite.attr('href')}', 'get', 0);`
}
}
}
return {
// 颜色
color: initColor(),
// 工具条
appbar: {
// 导航栏
nav: parseNav(),
// 头像
avatar: parseAvatar(),
// 消息
message: parseMessage(),
// 提醒
remind: parseRemind()
},
// 帖子
post: {
// 标题
title: parsePostTitle(),
// 访问数据
attr: parsePostAttr()
}
}
}
// 初始主题
function initTheme(data) {
$('body').addClass(`mdui-theme-primary-${data.color.theme} mdui-theme-accent-${data.color.nav} mdui-text-`)
// .addClass(`mdui-drawer-body-left mdui-appbar-with-toolbar mdui-theme-primary-teal mdui-theme-accent-${data.color.nav} mdui-loaded`)
.append(`
`)
}
// appbar
function generateAppbar(data) {
// 面包屑导航
function generateNav() {
let tmp = ''
data.appbar.nav.forEach((e, i) => {
tmp += `${e.text}`
// html += `${e.text}`
if (i < data.appbar.nav.length - 1) {
tmp += `>`
}
})
return tmp
}
// 消息和提醒
function generateMsgAndRemind() {
let messageCountStr = $('a.btn.btn-user-action:first > span').text()
let remindCountStr = $('a.btn.btn-user-action:last > span').text()
function gen(countStr, icon, href) {
return `${icon} ${countStr}`
}
return gen(messageCountStr, 'email', 'home.php?mod=space&do=pm') + gen(remindCountStr, 'notifications', 'home.php?mod=space&do=notice&view=system')
}
// 个人中心
function parseProfileHref() {
return $('.avatar').parent()[0].href
}
// 生成
$('body').prepend(`
`)
$('#nav-menu').remove()
$('.tb-container').remove()
}
// 帖子标题 浏览数据
function generatePostTitleAndAttr(data) {
$('#pgt, div.subforum').remove()
$('body').prepend(`
${data.post.title}
`)
}
// 帖子内容 md化
function mdPost() {
mdContent()
generateBtnGroup()
// 帖子
function mdContent() {
// 鼠标悬浮加深阴影 阴影
$('#postlist').addClass('mdui-hoverable mdui-shadow-5')
// 回复间隙 改为主题色
$('.ad').addClass('mdui-color-theme')
// 帖子-回复按钮
$('.pob.cl a').addClass('mdui-btn mdui-ripple mdui-btn-dense')
}
// 回复页数 按钮组
function generateBtnGroup() {
//
// 查找特殊节点
function findPage(cName) {
const tmpNode = $(`.pg .${cName}`)
if (tmpNode === undefined) {
return undefined
}
return {
text: tmpNode.text(),
href: tmpNode.attr('href')
}
}
function addTextBtn(data, isActive) {
return `${data.text}`
}
function addIconBtn(data, icon) {
return `${icon}`
}
let pervPage = findPage('prev')
let firstPage = findPage('first')
let lastPage = findPage('last')
let nextPage = findPage('nxt')
let pageGroupHtml = ``
if (pervPage.href) {
pageGroupHtml += addIconBtn(pervPage, 'chevron_left')
}
if (firstPage.href) {
pageGroupHtml += addTextBtn(firstPage, false)
}
$('.pg > a:not(.first,.prev,.nxt,.last),.pg > strong').each((i, e) => {
const date = {
href: e.href === undefined ? 'javascript:;' : e.href,
text: e.innerText
}
pageGroupHtml += addTextBtn(date, e.href === undefined)
})
if (lastPage.href) {
pageGroupHtml += addTextBtn(lastPage, false)
}
if (nextPage.href) {
pageGroupHtml += addIconBtn(nextPage, 'chevron_right')
}
pageGroupHtml += `
`
$('#postlist').append(pageGroupHtml)
// 隐藏默认
$('.pgbtn,.pgs.mtm.mbm.cl').remove()
}
// 回复按钮
$('#f_pst').appendTo('#postlist')
.prepend('')
$('#fastpostsubmit').replaceWith('')
// $('p.ptm.pnpost').addClass('mdui-valign')
$('p.ptm.pnpost a.y').appendTo('p.ptm.pnpost')
// 回帖跳转最后一页
$('label[for=fastpostrefresh]').addClass('mdui-checkbox')
.append('')
}
function mdOther() {
generateScrollTopBtn()
// 返回顶部按钮
function generateScrollTopBtn() {
$('body').append('')
let scrollTopHide = true
$(window).scroll(() => {
if ($(window).scrollTop() > 100) {
// 显示
if (scrollTopHide) {
scrollTopHide = !scrollTopHide
$('#my_ScrollTopBtn').removeClass('mdui-fab-hide')
}
} else {
// 隐藏
if (!scrollTopHide) {
scrollTopHide = !scrollTopHide
$('#my_ScrollTopBtn').addClass('mdui-fab-hide')
}
}
})
$(window).trigger('scroll')
$('#my_ScrollTopBtn').on('click', () => {
$('html,body').finish().animate({'scrollTop': '0px'}, 500)
})
}
}
// 判断4类不同的页面
const locationHref = window.location
if (/^https:\/\/steamcn.com\/(forum.php(\?gid=\d+)?)?$/.test(locationHref)) {
/*
* 首页
* https://steamcn.com/
* https://steamcn.com/forum.php/
*/
console.log('home')
} else if (/^https:\/\/steamcn.com\/(f\d+)|(forum.php\?mod=forumdisplay)/.test(locationHref)) {
/*
* 目录
* https://steamcn.com/f274-1
* https://steamcn.com/forum.php?mod=forumdisplay&fid=274&filter=typeid&typeid=348
*/
console.log('forum display')
} else if (/^https:\/\/steamcn.com\/(t\d+)|(forum.php\?mod=viewthread)/.test(locationHref)) {
/*
* 帖子
* https://steamcn.com/t368540-1-1
* https://steamcn.com/forum.php?mod=viewthread&tid=368540&page=1#pid6102860
*/
console.log('post')
loadResource()
const data = parseData()
initTheme(data)
generateAppbar(data)
generatePostTitleAndAttr(data)
mdPost()
mdOther()
} else if (/^https:\/\/steamcn.com\/home.php/.test(locationHref)) {
/*
* 个人页面
* https://steamcn.com/t368540-1-1
* https://steamcn.com/forum.php?mod=viewthread&tid=368540&page=1#pid6102860
*/
console.log('profile')
} else {
console.log('unknown')
}
})();