OnePlusBBS QuickKey

一加社区快捷键

目前为 2019-12-08 提交的版本。查看 最新版本

// ==UserScript==
// @name         OnePlusBBS QuickKey
// @description  一加社区快捷键
// @namespace    https://greasyfork.org/
// @author       choosezzz
// @version      1.1
// @match        https://www.oneplusbbs.com/forum*
// @match        https://www.oneplusbbs.com/thread*
// @match        https://www.oneplusbbs.com/homemod-space-uid*
// @icon         https://static.oneplus.cn/data/attachment/common/4c/common_121_icon.png
// @grant        none
// ==/UserScript==

(function() {
	//65-90 [a-z]
	//keyCode 48 96 = 0
	//keyCode 49 97 = 1
	//keyCode 50 98 = 2
	//keyCode 51 99 = 3
	//keyCode 52 100 = 4
	//keyCode 53 101 = 5
	//keyCode 54 102 = 6
	//keyCode 55 103 = 7
	//keyCode 56 104 = 8
	//keyCode 57 105 = 9
	//event.ctrlKey,event.shiftKey,event .altKey

	//判断是否已显示操作选项
	var cateShow = false;
	//分类选项索引
	var cateIndex = 0;

	//移动操作
	var moveShow = false;
	//游乐园
	var moveIndex = 21;
	document.onkeydown = function(event) {
		var href = window.location.href;
		var e = event || window.event;
		if (!e) {
			return;
		}
		//个人主页
		if (href.search("homemod-space-uid*") != -1) {
			//Ctrl+Alt
			if (e.altKey && e.ctrlKey) {
				var uid = href.replace(/https:\/\/www.oneplusbbs.com\/homemod-space-uid-/g, "").replace(/.html/g, "");
				$("a_sendpm_" + uid).click();
			}
		}

		//Ctrl+number
		if (((e.keyCode >= 49 && e.keyCode <= 57) || (e.keyCode >= 97 && e.keyCode <= 105)) && e.ctrlKey) {
			var msgId = e.keyCode - 96 < 0 ? e.keyCode - 48 : e.keyCode - 96;
			quickPaste(e, msgId);
		}

		//普通帖子页
		if (href.indexOf("thread-") != -1 || href.indexOf("viewthread") != -1) {
			handlePost(e);
		}

		//列表页
		if (href.indexOf("forum-") != -1) {
			handleList(e);
		}

	}
	//屏蔽默认快捷键
	function stopDefault(e) {

		// W3C标准
		if (e.preventDefault) {
			e.preventDefault();
		} else {
			//IE
			window.event.returnValue = false;
		}
		return false;
	}

	function quickPaste(e, id) {

		var href = window.location.href;
		stopDefault(e);
		var quickMsg = new Array(
			// Ctrl + 1
			"请勿灌水或回复与帖子无关的内容",
			// Ctrl + 2
			"请文明用语",
			// Ctrl + 3
			"请勿发布纯标题无内容贴",
			// Ctrl + 4
			"请勿发交易帖",
			// Ctrl + 5
			"请勿发布违规翻墙、梯子、SSR等违规内容",
			// Ctrl + 6
			"请勿发布不实信息,蛊惑加油,扰乱社区秩序",
			// Ctrl + 7
			"违规广告",
			// Ctrl + 8
			"请勿使用暴露、二维码、广告性质的头像,本次删除,下次将永久禁言",
			// Ctrl + 9
			"违规ID"
		);

		//帖子页
		if (href.search("thread-") != -1 || href.indexOf("viewthread") != -1) {
			//操作说明输入
			var mods = $("fwin_mods");
			if (mods && mods.style.display != "none") {
				var reason = $("reason");
				if (reason && quickMsg.length >= id) {
					reason.value = quickMsg[id - 1];
					//reason.select();
				}
			}
			//回帖输入
			var reply = $("fwin_reply");
			if (reply && reply.style.display != "none") {
				var postmessage = $("postmessage");
				if (postmessage && quickMsg.length >= id) {
					postmessage.value = quickMsg[id - 1];
				}
			}
		}
		//个人页,快速发送消息内容
		if (href.search("homemod-space-uid-") != -1) {
			var showMsgBox = $("fwin_showMsgBox");
			if (showMsgBox && showMsgBox.style.display != "none") {
				var pmmessage = $("pmmessage");
				if (pmmessage && quickMsg.length >= id) {
					pmmessage.value = quickMsg[id - 1];
				}
			}
		}
	}

	function handlePost(e) {

		// Ctrl + z 快速回复
		if (e.keyCode == 90 && e.ctrlKey) {
			stopDefault(e);
			$("post_reply").click();
			return;
		}

		//获取操作列表
		var modMenu = $("modmenu");
		if (!modmenu) {
			console.log("当前板块无权限," + href);
			return;
		}
		var links = modMenu.getElementsByTagName("a");
		//Ctrl+Alt 快速分类功能
		if (e.altKey && e.ctrlKey) {
			stopDefault(e);
			//快捷点击分类链接
			if (!cateShow) {
				let type = links[10];
				if (type) {
					type.click();
					cateShow = true;
				}
			} else {
				let types = $("typeid");
				if (types && types.options.length > 0) {
					types.options[cateIndex].selected = "true";
					cateIndex++;
				}
				if (cateIndex == types.options.length) {
					cateIndex = 0;
				}
			}
			return;
		}
		//Ctrl+X 快速移动功能
		if (e.ctrlKey && e.keyCode == 88) {
			stopDefault(e);
			//快捷点击移动链接
			if (!moveShow) {
				let type = links[9];
				if (type) {
					type.click();
					moveShow = true;
				}
			} else {
				var moveTo = $("moveto");
				if (moveTo && moveTo.options.length > 0) {
					moveTo.options[moveIndex].selected = "true";
					moveTo.onchange();
					//游乐园 <--> 轻摄影
					moveIndex = moveIndex == 21 ? 13 : 21;
				}

			}
		} else {
			//重置
			moveIndex = 21;
			cateIndex = 0;
			moveShow = false;
			cateShow = false;
		}
	}

	function handleList(e) {
		var checkBoxs = document.getElementsByClassName("o");
		if (!checkBoxs || checkBoxs.length < 5) {
			console.log("此版块权限");
		}
		var mdly = $("mdly");
		if (mdly) {
			var ops = mdly.getElementsByTagName("p")[0].getElementsByTagName("a");
			if (e.altKey && e.ctrlKey) {
				stopDefault(e);
				ops[2].click();
			}
			if (e.ctrlKey && e.keyCode == 88) {
				stopDefault(e);
				ops[1].click();
			}
			if (e.keyCode == 90 && e.ctrlKey) {
				stopDefault(e);
				ops[0].click();
			}
		}
	}
})();