VK Quick Ban

Добавляет пункт "забанить" в контекстные меню на записях и комментариях.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey, Greasemonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Userscripts.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een gebruikersscriptbeheerder nodig.

(Ik heb al een user script manager, laat me het downloaden!)

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

(Ik heb al een beheerder - laat me doorgaan met de installatie!)

// ==UserScript==
// @name         VK Quick Ban
// @namespace    https://yal.cc
// @version      1.0
// @description  Добавляет пункт "забанить" в контекстные меню на записях и комментариях.
// @author       YellowAfterlife
// @match        https://vk.com/*
// @grant        none
// ==/UserScript==

(function() {
	'use strict';
	var css = `
	.reply .ui_actions_menu_wrap {
		position: relative;
	}
	.reply .ui_actions_menu {
		right: -24px;
		top: 26px;
	}
	.reply .ui_actions_menu_wrap.shown .ui_actions_menu {
		top: 16px;
	}
	`;
	(function() {
		var q = document.createElement("style");
		q.type = "text/css";
		q.innerHTML = css;
		document.head.appendChild(q);
	})();
	function add(menu, text, func) {
		var item = document.createElement("a");
		item.className = "ui_actions_menu_item";
		item.appendChild(document.createTextNode(text));
		item.onclick = func;
		menu.appendChild(item);
	}
	function addBan(menu, post, text) {
		add(menu, text, function(_) {
			var gid = post.getAttribute("data-post-id");
			gid = parseInt(gid.substring(0, gid.indexOf("_")));
			if (gid < 0) gid *= -1;
			var uid = parseInt(post.querySelector(".author").getAttribute("data-from-id"));
			Wall.blockEx(gid, uid);
		});
	}
	function patch(menu, post) {
		menu.classList.add("cc_yal_quick_actions");
		addBan(menu, post, "Забанить");
	}
	function patchReply(button, reply){
		button.classList.add("cc_yal_quick_actions");
		// добавление 
		button.setAttribute("onmouseover", "uiActionsMenu.show(this);");
		button.setAttribute("onmouseout", "uiActionsMenu.hide(this);");
		button.classList.add("ui_actions_menu_wrap");
		var menu = document.createElement("div");
		menu.className = "ui_actions_menu _ui_menu cc_yal_quick_actions";
		//
		button.appendChild(menu);
		addBan(menu, reply, "Забанить");
	}
	function check() {
		var i;
		//
		var menus = document.querySelectorAll(".post .ui_actions_menu:not(.cc_yal_quick_actions)");
		for (i = 0; i < menus.length; i++) {
			var menu = menus[i];
			var post = menu;
			while (post) {
				if (post.classList.contains("post")) break;
				post = post.parentElement;
			}
			if (post) patch(menu, post);
		}
		//
		var reply_buttons = document.querySelectorAll(".reply .post_actions:not(.cc_yal_quick_actions)");
		for (i = 0; i < reply_buttons.length; i++) {
			var button = reply_buttons[i];
			var reply = button;
			while (reply) {
				if (reply.classList.contains("reply")) break;
				reply = reply.parentElement;
			}
			if (reply) patchReply(button, reply);
		}
	}
	check();
	setInterval(check, 7000);
})();