Greasy Fork is available in English.

chatft

makes chat great

Version au 29/06/2017. Voir la dernière version.

// ==UserScript==
// @name         chatft
// @description  makes chat great
// @author       foxie
// @match        https://epicmafia.com/lobby
// @match        https://epicmafia.com/game/*
// @version 0.0.1.20170629170332
// @namespace https://greasyfork.org/users/4723
// ==/UserScript==

const VALID_IMG=".bmp.gif.jpeg.jpg.png.svg.tiff";
const EM_OATS={
	angel: "http://i.imgur.com/vmBnXfBh.png",
	arrgh: "http://i.imgur.com/yWRnfdWh.png",
	bird: "http://i.imgur.com/q99FCfN.gif",
	blush: "http://i.imgur.com/vUyEPUPh.png",
	buffufu: "http://i.imgur.com/VHsQvSlh.png",
	charlotte: "http://i.imgur.com/i3hauTe.gif",
	chefufu: "http://i.imgur.com/nl1GQIkh.png",
	chill: "http://i.imgur.com/aI5U9aY.gif",
	coffufu: "http://i.imgur.com/5VRMdrqh.png",
	cryfu: "http://i.imgur.com/fhR3Gulh.png",
	cthfulfu: "http://i.imgur.com/6ueysCDh.png",
	dalek: "http://i.imgur.com/W325y1s.gif",
	dikdik: "http://i.imgur.com/Dj8FRrp.png",
	eful: "http://i.imgur.com/WGExCALh.png",
	feels: "http://i.imgur.com/1UqALYB.gif",
	flufu: "http://i.imgur.com/EA3HECZh.png",
	fufixit: "http://i.imgur.com/SKUyzs1h.png",
	fuflex: "http://i.imgur.com/YDwbjQVh.png",
	fuflower: "http://i.imgur.com/I4zw3iMh.png",
	fufool: "http://i.imgur.com/e0uk1ddh.png",
	fufruit: "http://i.imgur.com/6yBMrqAh.png",
	fufu: "http://i.imgur.com/cmsntv2h.png",
	fufuf: "http://i.imgur.com/4h8NEEKh.png",
	fufull: "http://i.imgur.com/1CYf6dz.png",
	fufunky: "http://i.imgur.com/7aNzKPjh.png",
	fufuroll: "http://i.imgur.com/R2Ll0jL.gif",
	fufuu: "http://i.imgur.com/qXk1mb0h.png",
	fufuzela: "http://i.imgur.com/fyH1ZBoh.png",
	fuuf: "http://i.imgur.com/vp9LsSbh.png",
	gaws: "http://i.imgur.com/NIennRF.gif",
	gay: "http://i.imgur.com/ILvlbCc.gif",
	glad: "http://i.imgur.com/rbeyeW8h.png",
	gorf: "http://i.imgur.com/PkMTk1g.gif",
	hamtaro: "http://i.imgur.com/ZE2xLAL.gif",
	isay: "http://i.imgur.com/2GpbA1G.gif",
	kappa: "http://i.imgur.com/FyOZi55.gif",
	knifufu: "http://i.imgur.com/905e8hI.gif",
	kungfufu: "http://i.imgur.com/aMyCgYZh.png",
	leafufu: "http://i.imgur.com/8kRR9Dgh.png",
	licky: "http://i.imgur.com/PF9fOmc.gif",
	lub: "http://i.imgur.com/hCsYezmh.png",
	michael: "http://i.imgur.com/o5pnGish.png",
	nerdfufu: "http://i.imgur.com/Fk0YGAXh.png",
	mudkip: "http://img.pokemondb.net/sprites/black-white/anim/normal/mudkip.gif",
	ohno: "http://i.imgur.com/NEHVkJUh.png",
	omg: "http://i.imgur.com/8d9wCyyh.png",
	pikachu: "http://img.pokemondb.net/sprites/black-white/anim/normal/pikachu.gif",
	pengfufu: "http://i.imgur.com/LGXq6Kbh.png",
	pepe: "http://i.imgur.com/ejJtTvC.gif",
	poutyfufu: "http://i.imgur.com/Fvn5nBPh.png",
	rainfu: "http://i.imgur.com/2XtLgsWh.png",
	roadkill: "http://i.imgur.com/G6VFBZfh.png",
	seedot: "http://i.imgur.com/DlZPUkW.gif",
	sleepy: "http://i.imgur.com/7HegR95h.png",
	snoop: "http://i.imgur.com/F5HViqt.gif",
	swag: "http://i.imgur.com/6uOsLKH.gif",
	tofufu: "http://i.imgur.com/XSR8Ceeh.png",
	uffu: "http://i.imgur.com/JfMlPzAh.png",
	ufuf: "http://i.imgur.com/ZbFG7JMh.png",
	ufufu: "http://i.imgur.com/yf55yezh.png",
	waifufu: "http://i.imgur.com/FfwoAACh.png",
	wat: "http://i.imgur.com/m9bboaI.png",
	weed: "http://i.imgur.com/G5EYfSL.png",
	whimsicott: "http://img.pokemondb.net/sprites/black-white/anim/normal/whimsicott.gif",
	wink: "http://i.imgur.com/ChIkWIr.png",
	wwybwds: "http://i.imgur.com/B1q0Y3b.png"
	};
const EMOJI_LIST=[[], [128512, 128513, 128514, 129315, 128515, 128516, 128517, 128518, 128521, 128522, 128523, 128526, 128525, 128536, 128535, 128537, 128538, 9786, 128578, 129303, 129300, 128528, 128529, 128566, 128580, 128527, 128547, 128549, 128558, 129296, 128559, 128554, 128555, 128564, 128524, 128539, 128540, 128541, 129316, 128530, 128531, 128532, 128533, 128579, 129297, 128562, 9785, 128577, 128534, 128542, 128543, 128548, 128546, 128557, 128550, 128551, 128552, 128553, 128556, 128560, 128561, 128563, 128565, 128545, 128544, 128567, 129298, 129301, 129314, 129319, 128519, 129312, 129313, 129317, 129299, 128520, 128127, 128121, 128122, 128128, 9760, 128123, 128125, 128126, 129302, 128169], [128118, 128102, 128103, 128104, 128105, 128116, 128117, 128110, 128373, 128130, 128119, 129332, 128120, 128115, 128114, 128113, 129333, 128112, 128124, 127877, 129334, 128589, 128590, 128581, 128582, 128129, 128587, 129318, 129335, 128134, 128135, 129328, 128583, 128694, 127939, 128131, 128378, 128111, 128704, 128716, 128372, 128483, 128100, 128101, 129338, 127943, 9975, 127938, 127948, 127940, 128675, 127946, 9977, 127947, 128692, 128693, 127950, 127949, 129336, 129340, 129341, 129342, 129337, 128107, 128108, 128109, 128143, 128145, 128106], [129331, 128170, 128072, 128073, 9757, 128070, 128405, 128071, 9996, 129310, 128406, 129304, 129305, 128400, 9995, 128076, 128077, 128078, 9994, 128074, 129307, 129308, 129306, 128075, 9997, 128079, 128080, 128588, 128591, 129309, 128133, 128066, 128067, 128099, 128064, 128065, 128069, 128068, 128139, 128152, 10084, 128147, 128148, 128149, 128150, 128151, 128153, 128154, 128155, 128156, 128420, 128157, 128158, 128159, 10083, 128140, 128164, 128162, 128163, 128165, 128166, 128168, 128171, 128172, 128488, 128495, 128173, 128371, 128083, 128374, 128084, 128085, 128086, 128087, 128088, 128089, 128090, 128091, 128092, 128093, 128717, 127890, 128094, 128095, 128096, 128097, 128098, 128081, 128082, 127913, 127891, 9937, 128255, 128132, 128141, 128142], [128584, 128585, 128586, 128570, 128568, 128569, 128571, 128572, 128573, 128576, 128575, 128574, 128053, 128018, 129421, 128054, 128021, 128041, 128058, 129418, 128049, 128008, 129409, 128047, 128005, 128006, 128052, 128014, 129412, 129420, 128046, 128002, 128003, 128004, 128055, 128022, 128023, 128061, 128015, 128017, 128016, 128042, 128043, 128024, 129423, 128045, 128001, 128000, 128057, 128048, 128007, 128063, 129415, 128059, 128040, 128060, 128062, 129411, 128020, 128019, 128035, 128036, 128037, 128038, 128039, 128330, 129413, 129414, 129417, 128056, 128010, 128034, 129422, 128013, 128050, 128009, 128051, 128011, 128044, 128031, 128032, 128033, 129416, 128025, 128026, 129408, 129424, 129425, 128012, 129419, 128027, 128028, 128029, 128030, 128375, 128376, 129410], [128144, 127800, 128174, 127989, 127801, 129344, 127802, 127803, 127804, 127799, 127793, 127794, 127795, 127796, 127797, 127806, 127807, 9752, 127808, 127809, 127810, 127811, 127815, 127816, 127817, 127818, 127819, 127820, 127821, 127822, 127823, 127824, 127825, 127826, 127827, 129373, 127813, 129361, 127814, 129364, 129365, 127805, 127798, 129362, 127812, 129372, 127792, 127838, 129360, 129366, 129374, 129472, 127830, 127831, 129363, 127828, 127839, 127829, 127789, 127790, 127791, 129369, 129370, 127859, 129368, 127858, 129367, 127871, 127857, 127832, 127833, 127834, 127835, 127836, 127837, 127840, 127842, 127843, 127844, 127845, 127841, 127846, 127847, 127848, 127849, 127850, 127874, 127856, 127851, 127852, 127853, 127854, 127855, 127868, 129371, 9749, 127861, 127862, 127870, 127863, 127864, 127865, 127866, 127867, 129346, 129347, 127869, 127860, 129348, 128298, 127994], [127757, 127758, 127759, 127760, 128506, 128510, 127956, 9968, 127755, 128507, 127957, 127958, 127964, 127965, 127966, 127967, 127963, 127959, 127960, 127961, 127962, 127968, 127969, 127970, 127971, 127972, 127973, 127974, 127976, 127977, 127978, 127979, 127980, 127981, 127983, 127984, 128146, 128508, 128509, 9962, 128332, 128333, 9961, 128331, 9970, 9978, 127745, 127747, 127748, 127749, 127750, 127751, 127753, 9832, 127756, 127904, 127905, 127906, 128136, 127914, 127917, 128444, 127912, 127920, 128642, 128643, 128644, 128645, 128646, 128647, 128648, 128649, 128650, 128669, 128670, 128651, 128652, 128653, 128654, 128656, 128657, 128658, 128659, 128660, 128661, 128662, 128663, 128664, 128665, 128666, 128667, 128668, 128690, 128756, 128757, 128655, 128739, 128740, 9981, 128680, 128677, 128678, 128679, 128721, 9875, 9973, 128758, 128676, 128755, 9972, 128741, 128674, 9992, 128745, 128747, 128748, 128186, 128641, 128671, 128672, 128673, 128752, 128640, 128718, 128682, 128719, 128715, 128701, 128703, 128705, 8987, 9203, 8986, 9200, 9201, 9202, 128368, 128347, 128359, 128336, 128348, 128337, 128349, 128338, 128350, 128339, 128351, 128340, 128352, 128341, 128353, 128342, 128354, 128343, 128355, 128344, 128356, 128345, 128357, 128346, 128358], [127761, 127762, 127763, 127764, 127765, 127766, 127767, 127768, 127769, 127770, 127771, 127772, 127777, 9728, 127773, 127774, 11088, 127775, 127776, 9729, 9925, 9928, 127780, 127781, 127782, 127783, 127784, 127785, 127786, 127787, 127788, 127744, 127752, 127746, 9730, 9748, 9969, 9889, 10052, 9731, 9924, 9732, 128293, 128167, 127754, 127875, 127876, 127878, 127879, 10024, 127880, 127881, 127882, 127883, 127885, 127886, 127887, 127888, 127889, 127872, 127873, 127895, 127903, 127915, 127894, 127942, 127941, 129351, 129352, 129353, 9917, 9918, 127936, 127952, 127944, 127945, 127934, 127921, 127923, 127951, 127953, 127954, 127955, 127992, 129354, 129355, 129349, 127919, 9971, 9976, 127907, 127933, 127935, 127918, 128377, 127922, 9824, 9829, 9830, 9827, 127183, 126980, 127924], [128263, 128264, 128265, 128266, 128226, 128227, 128239, 128276, 128277, 127932, 127925, 127926, 127897, 127898, 127899, 127908, 127911, 128251, 127927, 127928, 127929, 127930, 127931, 129345, 128241, 128242, 9742, 128222, 128223, 128224, 128267, 128268, 128187, 128421, 128424, 9000, 128433, 128434, 128189, 128190, 128191, 128192, 127909, 127902, 128253, 127916, 128250, 128247, 128248, 128249, 128252, 128269, 128270, 128300, 128301, 128225, 128367, 128161, 128294, 127982, 128212, 128213, 128214, 128215, 128216, 128217, 128218, 128211, 128210, 128195, 128220, 128196, 128240, 128478, 128209, 128278, 127991, 128176, 128180, 128181, 128182, 128183, 128184, 128179, 128185, 128177, 128178, 9993, 128231, 128232, 128233, 128228, 128229, 128230, 128235, 128234, 128236, 128237, 128238, 128499, 9999, 10002, 128395, 128394, 128396, 128397, 128221, 128188, 128193, 128194, 128450, 128197, 128198, 128466, 128467, 128199, 128200, 128201, 128202, 128203, 128204, 128205, 128206, 128391, 128207, 128208, 9986, 128451, 128452, 128465, 128274, 128275, 128271, 128272, 128273, 128477, 128296, 9935, 9874, 128736, 128481, 9876, 128299, 127993, 128737, 128295, 128297, 9881, 128476, 9879, 9878, 128279, 9939, 128137, 128138, 128684, 9904, 9905, 128511, 128738, 128302, 128722], [127975, 128686, 128688, 9855, 128697, 128698, 128699, 128700, 128702, 128706, 128707, 128708, 128709, 9888, 128696, 9940, 128683, 128691, 128685, 128687, 128689, 128695, 128245, 128286, 9762, 9763, 11014, 8599, 10145, 8600, 11015, 8601, 11013, 8598, 8597, 8596, 8617, 8618, 10548, 10549, 128259, 128260, 128281, 128282, 128283, 128284, 128285, 128720, 9883, 128329, 10017, 9784, 9775, 10013, 9766, 9770, 9774, 128334, 128303, 9800, 9801, 9802, 9803, 9804, 9805, 9806, 9807, 9808, 9809, 9810, 9811, 9934, 128256, 128257, 128258, 9654, 9193, 9197, 9199, 9664, 9194, 9198, 128316, 9195, 128317, 9196, 9208, 9209, 9210, 127910, 128261, 128262, 128246, 128243, 128244, 9877, 9851, 9884, 128305, 128219, 128304, 11093, 9989, 9745, 10004, 10006, 10060, 10062, 10133, 10134, 10135, 10160, 10175, 12349, 10035, 10036, 10055, 8252, 8265, 10067, 10068, 10069, 10071, 12336, 169, 174, 8482, 128287, 128175, 128288, 128289, 128290, 128291, 128292, 127344, 127374, 127345, 127377, 127378, 127379, 8505, 127380, 9410, 127381, 127382, 127358, 127383, 127359, 127384, 127385, 127386, 127489, 127490, 127543, 127542, 127535, 127568, 127545, 127514, 127538, 127569, 127544, 127540, 127539, 12951, 12953, 127546, 127541, 9642, 9643, 9723, 9724, 9725, 9726, 11035, 11036, 128310, 128311, 128312, 128313, 128314, 128315, 128160, 128280, 128306, 128307, 9898, 9899, 128308, 128309, 127937, 128681, 127884, 127988, 127987]];

function firstId() {
	for(var i=0, node; i<arguments.length; i++) {
		if(node=document.getElementById(arguments[i])) {
			return node;
			}
		}
	}

void function() {
	var	style=document.createElement("style");
	style.type="text/css";
	style.textContent=`
		.emoji {
			font-size: 1.5em;
			}
		#window_i img {
			max-width: 100%;
			}
		#lobbychat #window {
			height: auto !important;
			}
		#lobbychat #emobu {
			margin-top: -1px;
			}
		#lobbychat.expanded #window_i {
			height: 400px !important;
			}
		#chatbar {
			box-sizing: border-box;
			padding-right: 1.5em !important;
			}
		#emobu {
			position: relative;
			float: right;
			padding: 4px;
			border-width: 1px;
			}
		#emonav {
			display: inline-block;
			margin: 1em;
			}
		#emonav a {
			filter: grayscale(1);
			}
		#emonav a:hover {
			filter: none;
			}
		#emobox span {
			cursor: pointer;
			width: 1em;
			height: 1em;
			margin: 0.2em;
			font-size: 1.5em;
			display: inline-block;
			}
		#emobox span:hover {
			transform: scale(1.3);
			}
		`;
	document.head.appendChild(style);
	}();

void function() {
	if(firstId("lobbychat")) {
		var	exbu=document.createElement("div");
		exbu.className="rt chat_toggle tt";
		exbu.dataset.title="Expand chat";
		exbu.appendChild(
			document.createElement("i")
			).className="icon-plus grey";
		exbu.addEventListener("click", function(event) {
			localStorage.expand_chat=this.classList.toggle("sel");
			firstId("lobbychat").classList.toggle("expanded");
			});
		document.querySelector("#lobbychat .separator").appendChild(exbu);
		if(localStorage.expand_chat) {
			exbu.click();
			}
		}
	}();

void function() {
	function loadji(event) {
		while(emobox.childElementCount > 2) {
			emobox.removeChild(emobox.lastChild);
			}
		EMOJI_LIST[event.target.dataset.page].forEach(function(code) {
			emobox.appendChild(
				document.createElement("span")
				).textContent=String.fromCodePoint(code);
			});
		}
	var	emobu=document.createElement("button");
	var	emobox=document.createElement("div");
	emobu.id="emobu";
	emobu.textContent="\u{1f431}";
	emobu.addEventListener("click", function(event) {
		if(!this.dataset.page) {
			this.dataset.page=1;
			loadji(event);
			}
		emobox.classList.toggle("hide");
		});
	emobox.id="emobox";
	emobox.className="hide";
	emobox.addEventListener("click", function(event) {
		if(event.target.tagName==="SPAN") {
			var	input=firstId("chatbar", "typebox")
			input.value+=event.target.textContent;
			input.dispatchEvent(
				new Event("change")
				);
			input.focus();
			}
		});
	void function() {
		var	emonav=document.createElement("div");
		emonav.id="emonav";
		emonav.textContent="Jump to... ";
		for(var i=1, link; i<EMOJI_LIST.length; i++) {
			link=document.createElement("a");
			link.dataset.page=i;
			link.textContent=String.fromCodePoint(EMOJI_LIST[i][0]);
			link.addEventListener("click", loadji);
			emonav.appendChild(link);
			}
		emobox.appendChild(emonav);
		emobox.appendChild(
			document.createElement("br")
			);
		}();
	firstId("speak_container", "window").appendChild(emobu);
	firstId("lobbychat", "screen").appendChild(emobox);
	}();

new MutationObserver(function(mutations) {
	mutations.forEach(function(mutation) {
		mutation.addedNodes.forEach(function(node) {
			if(node.nodeType===HTMLElement.ELEMENT_NODE && node.classList.contains("talk")) {
				node=node.querySelector(".msg");
				if(node.textContent.substring(0, 4)==="$img") {
					var	src=node.textContent.match(/(\w+:\/\/[^\s\?#]+)/)[0];
					if(~VALID_IMG.indexOf(src.replace(/.+(\.\w+)/, "$1"))) {
						var	child=document.createElement("a");
						child.href=src;
						child.appendChild(
							document.createElement("img")
							).src=src;
						node.parentNode.appendChild(
							document.createElement("br")
							);
						node.parentNode.appendChild(child);
						}
					}
				node.innerHTML=node.innerHTML
					.replace(/\*\*(.+?)\*\*/g, "<b>$1</b>")
					.replace(/\*(.+?)\*/g, "<i>$1</i>")
					.replace(/__(.+?)__/g, "<u>$1</u>")
					.replace(/~~(.+?)~~/g, "<s>$1</s>")
					.replace(/($| )(\w+:\/\/\S+)/g, "$1<a href='$2' target='_blank'>$2</a>")
					.replace(/([\ud83c-\udbff\udc00-\udfff]+)/g, "<span class='emoji'>$1</span>");
				}
			});
		});
	}).observe(
	firstId("window_i", "window"), {
		childList: true
		}
	);

window.addEventListener("load", function(event) {
	var	emotes=unsafeWindow.lobby_emotes || unsafeWindow.lobbyinfo;
	if(emotes) {
		if(emotes.emotes) {
			emotes=emotes.emotes;
			}
		for(var key in EM_OATS) {
			if(!emotes[":"+key+":"]) {
				emotes[":"+key+":"]=EM_OATS[key];
				}
			}
		}
	});

window.addEventListener("keydown", function(event) {
	if(!event.ctrlKey && event.target.value===undefined) {
		firstId("chatbar", "typebox").focus();
		}
	});