Chat Resizer

Automatically resizes the chat to a specified value.

Vous devrez installer une extension telle que Tampermonkey, Greasemonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Userscripts pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension de gestionnaire de script utilisateur pour installer ce script.

(J'ai déjà un gestionnaire de scripts utilisateur, laissez-moi l'installer !)

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

(J'ai déjà un gestionnaire de style utilisateur, laissez-moi l'installer!)

// ==UserScript==
// @name            Chat Resizer
// @namespace       tag://kongregate
// @description     Automatically resizes the chat to a specified value.
// @author          Ventero
// @include         http://www.kongregate.com/games/*
// @date            15.09.2012
// require         http://kong.ventero.de/updates/70040.js
// @version         1.2.4
// @license         MIT license
// ==/UserScript==

// Written by Ventero (http://www.kongregate.com/accounts/Ventero) 05/12/09
// Copyright (c) 2010-2012 Ventero, licensed under MIT/X11 license
// http://www.opensource.org/licenses/mit-license.php

// Default dimensions of chat
var defaultWidth = 500;
var defaultHeight = 600;

// How much space should be left on the left/right border
var spaceLeft = 200;

// Set to false if game should line up with bottom of chat, not center
var center = true;

// Sets the height of the user list
var userListHeight = 100;

var dom = (typeof unsafeWindow === "undefined"?window:unsafeWindow);
if(!document.getElementById("game")) return;
if(!dom.holodeck){
	var s = document.createElement("div");
	s.setAttribute("onclick","return window");
	dom = s.onclick();
}

function d(c){
	return document.getElementById(c);
}

function c(c){
	return document.getElementsByClassName(c);
}

function $(c){
	return document.querySelector(c);
}

function $A(c){
	return [].slice.call(c);
}

function setWidth(width){
	window._currentChatWidth = width;
	var gameWidth = parseInt(d("game").style.width, 10);
	d("maingame").style.width = (gameWidth + 3 + width) + "px";
	d("maingamecontent").style.width = (gameWidth + 3 + width) + "px";
	d("flashframecontent").style.width = (gameWidth + 3 + width) + "px";
	d("chat_container").style.width = width + "px";
	d('chat_window_spinner').style.right = width/2 - 38 + "px";
	if(d('high_scores_spinner'))
		d('high_scores_spinner').style.right = width/2 - 38 + "px";
	var ui = d("kong_game_ui");
	z = ui.childNodes
	for(i=0;i<z.length;i++){
		if(z[i].tagName == "DIV")
			z[i].style.width = (width - 17) + "px";
	}
	$A(ui.querySelectorAll("textarea.chat_input")).forEach(function(el){
		el.style.width = (width - 21) + "px";
	});
}

function setHeight(height, userListHeight, center){
	if(!userListHeight) userListHeight = 100;

	window._currentChatHeight = height;
	window._currentChatUserlistHeight = userListHeight;

	var quicklinksHeight = d('quicklinks') ? d('quicklinks').parentNode.clientHeight : 26;
	var maintabHeight = d('main_tab_set').clientHeight;

	var tabPaneHeight = height - 16;
	var mainHeight = height + quicklinksHeight + maintabHeight;
	var gameHeight = parseInt(d('game').style.height, 10);

	d("maingame").style.height = mainHeight + "px";
	d("maingamecontent").style.height = mainHeight + "px";
	d("flashframecontent").style.height = mainHeight + "px";
	d("chat_container").style.height = (height + maintabHeight) + "px";
	d("user_mini_profile_container").style.height = (height - 65) + "px";
	d("user_mini_profile").style.height = (height - 65) + "px";

	var messageWindows = c("chat_message_window");
	for(var i = 0; i < messageWindows.length; i++){
		messageWindows[i].style.height = (tabPaneHeight - userListHeight - 93)+"px"; // 93 = roomname, users in room etc.
	}

	var usersInRoom = c("chat_tabpane users_in_room");
	for(i = 0; i < usersInRoom.length; i++){
		usersInRoom[i].style.height = userListHeight + "px";
	}

	var roomsList = c("rooms_list");
	for(i = 0; i < roomsList.length; i++){
		roomsList[i].style.height = (height - 79)+"px";
	}

	z = d("kong_game_ui").childNodes;
	for(i=0;i<z.length;i++){
		if(z[i].nodeName=="DIV"){
			z[i].style.height = tabPaneHeight + "px";
		}
	}
	if(center != -1 && center !== undefined)
		centerGame(center);
}

function centerGame(center){
	window._currentGameCentered = center;
	if(center){
		var gameHeight = parseInt(d('game').style.height, 10);
		var mainHeight = parseInt(d("maingame").style.height, 10);
		d('game').style.top = (mainHeight - gameHeight)/2+"px"
		d('game').style.position = "relative";
	}else{
		d('game').style.bottom = "0px";
		d('game').style.top = "";
		d('game').style.position = "absolute";
	}
}

function initalize_chat_resize(){
	if(!d('maingamecontent')) return;
	var initialOffsetTop = d('maingamecontent').offsetTop + d('chat_tab_pane').offsetTop;
	var initialOffsetLeft = d('maingamecontent').offsetLeft + d('chat_tab_pane').offsetLeft;
	var minimumHeight = parseInt(d("game").style.height, 10) - parseInt(d('main_tab_set').clientHeight, 10) - 16;
	var minimumWidth = 300;

	if(dom.holodeck){
		var holodeck = dom.holodeck;
		holodeck.addChatCommand("size", function(l, n){
			var m = n.match(/^\/\S+\s+(\S+)/);
			var o = n.match(/^\/\S+\s+(\d+)\s+(\d+)(?:\s+(\d+))?/)

			if(m && m[1] == "reset"){
				l.activeDialogue().kongBotMessage("Resetting size for this game to defaults.");
				window.setTimeout(function(){GM_deleteValue("kong_resize_"+location.pathname)}, 0);
				setWidth(window._defaultChatWidth);
				setHeight(window._defaultChatHeight, window._defaultUserlistHeight, window._currentGameCentered);

				return false;
			} else if(m && m[1] == "show"){
				l.activeDialogue().kongBotMessage("Current chat size: width: " + window._currentChatWidth + "px, height: " + window._currentChatHeight + "px, userlist-height: " + window._currentChatUserlistHeight + "px.");
				return false;
			} else if(!o){
				l.activeDialogue().kongBotMessage("Please specify a width and a height: /size width height. Example: /size 500 500");
				return false;
			}

			var width = parseInt(o[1], 10);
			var height = parseInt(o[2], 10);
			var listHeight = parseInt(o[3]||100, 10);
			var gameHeight = parseInt(d('game').style.height, 10);
			if(width < 300){
				l.activeDialogue().kongBotMessage("Minimum width is 300. Setting width to 300px.");
				width = 300;
			}

			if(height < gameHeight){
				l.activeDialogue().kongBotMessage("Minimum height is the game's height. Setting height to " + gameHeight + "px.");
				height = gameHeight;
			}

			if(listHeight > height - 200){
				l.activeDialogue().kongBotMessage("Userlist height is too large. Setting it to 100px");
				listHeight = 100;
			}

			window.setTimeout(function(){GM_setValue("kong_resize_"+location.pathname, width+"/"+height+"/"+listHeight)}, 0);
			l.activeDialogue().kongBotMessage("Resizing chat to " + width + "px/" + height + "px/" + listHeight + "px");
			setWidth(width);
			setHeight(height, listHeight, window._currentGameCentered);

			return false;
		});

		holodeck.addChatCommand("defaultsize", function(l, n){
			var m = n.match(/^\/\S+\s+(\S+)/);
			var o = n.match(/^\/\S+\s+(\d+)\s+(\d+)(?:\s+(\d+))?/)
			if(m && m[1] == "reset"){
				l.activeDialogue().kongBotMessage("Resetting default size to 500/600/100");
				window.setTimeout(function(){GM_deleteValue("kong_resize_default")}, 0);

				return false;
			}	else if(m && m[1] == "show"){
				l.activeDialogue().kongBotMessage("Current chat size: width: " + window._defaultChatWidth + "px, height: " + window._defaultChatHeight + "px, userlist-height: " + window._defaultUserlistHeight + "px.");
				return false;
			} else if(!o){
				l.activeDialogue().kongBotMessage("Syntax /defaultsize width height userlist-height. userlist-height is optional. Example: /defaultsize 500 500 100");
			}

			var width = parseInt(o[1], 10);
			var height = parseInt(o[2], 10);
			var listHeight = parseInt(o[3]||100, 10);
			if(width < 300){
				l.activeDialogue().kongBotMessage("Minimum width is 300. Setting width to 300px.");
				width = 300;
			}

			if(listHeight > height){
				l.activeDialogue().kongBotMessage("Userlist height is too large. Setting it to 100px");
				listHeight = 100;
			}

			window.setTimeout(function(){GM_setValue("kong_resize_default", width+"/"+height+"/"+listHeight)}, 0);
			l.activeDialogue().kongBotMessage("Set default values to width: " + width + "px, height: " + height + "px, userlist-height: " + listHeight + "px.");

			return false;
		});

		holodeck.addChatCommand("centergame", function(l, n){
			var center = !window._currentGameCentered;
			if(center){
				l.activeDialogue().kongBotMessage("Now centering the game");
			} else {
				l.activeDialogue().kongBotMessage("Now aligning the game to the chat's bottom");
			}
			window.setTimeout(function(){GM_setValue("kong_resize_center", center?1:0)}, 0);

			centerGame(center);

			return false;
		});

	}

	var getString = "", centerVal = -1, defaults = "";
	getString = GM_getValue("kong_resize_"+location.pathname, "");
	centerVal = GM_getValue("kong_resize_center", -1);
	defaults = GM_getValue("kong_resize_default", "");

	if(defaults){
		var splitArr = defaults.split("/");
		defaultWidth = parseInt(splitArr[0], 10)||defaultWidth;
		defaultHeight = parseInt(splitArr[1], 10)||defaultHeight;
		userListHeight = parseInt(splitArr[2], 10)||userListHeight;
	}

	window._defaultChatWidth = defaultWidth;
	window._defaultChatHeight = defaultHeight;
	window._defaultUserlistHeight = userListHeight;

	var x = defaultWidth, y = defaultHeight, l = userListHeight, cg = center, override = false;

	if(centerVal != -1){
		cg = (centerVal == 1);
	}

	if(getString){
		var splitArr = getString.split("/");
		x = parseInt(splitArr[0], 10)||defaultWidth;
		y = parseInt(splitArr[1], 10)||defaultHeight;
		l = parseInt(splitArr[2], 10)||userListHeight;
		override = true;
	}

	var gameWidth = parseInt(d('game').style.width, 10);
	var gameHeight = parseInt(d('game').style.height, 10);

	if(x > minimumWidth){
		if(override || gameWidth + x < screen.width - spaceLeft){ // enough place to resize to specified width
			setWidth(x);
		}else{ // resize as far as possible
			var chatWidth = screen.width - gameWidth - spaceLeft;
			if(chatWidth > minimumWidth) setWidth(chatWidth);
		}
	}

	if(y > minimumHeight && y > gameHeight){
		setHeight(y, l, cg);
	} else {
		setHeight(gameHeight, l, cg);
	}
}
initalize_chat_resize();