// ==UserScript==
// @name Dreadcast Chat Enhancer
// @namespace https://greasyfork.org/scripts/21359-dreadcast-chat-enhancer/
// @version 1.2
// @description Améliore le chat de Dreadcast.
// @author MockingJay
// @match http://www.dreadcast.net/Main
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_deleteValue
// @grant GM_listValues
// ==/UserScript==
//Lit les variables dans GM à la demande. A utiliser pour chaque déclaration de variable qui est copiée en mémoire.
//initValue: Valeur par défaut de la variable, qu'on lui donne à la déclaration et qu'elle garde si pas d'équivalent en mémoire. localVarName: Valeur GM locale.
function initLocalMemory(initValue, localVarName) {
if (GM_getValue(localVarName) === undefined) {
GM_setValue(localVarName, initValue);
return initValue;
} else {
return GM_getValue(localVarName);
}
}
$(document).ready(function() {
//Initialisation variables de préférences
var autoScroll = initLocalMemory(false, "DCCE_autoScroll");
var scrollBar = initLocalMemory(true, "DCCE_scrollBar");
var typePredict = initLocalMemory(true, "DCCE_typePredict");
//Initialiser le CSS et scroller en bas à l'initialisation.
$("#zone_chat .zone_infos .msg").css({
width: '290px',
});
$("#chatContent").css({
"overflow-x": 'hidden',
"overflow-y": 'scroll',
height: '313px',
width: '308px',
});
//Applique la barre de défilement en fonction des préférences.
function setChatContentScroll() {
if(scrollBar) $("#chatContent").css({"padding-right": '0px'});
else $("#chatContent").css({"padding-right": '15px'});
}
setChatContentScroll(); //Appliquer à l'initialisation.
//Initialisation du bouton d'alerte, utilisé quand l'autoScroll est désactivé.
var $newMessageAlert = $('<div />').appendTo($('#zone_chat'));
$newMessageAlert.text("⚠ Nouveau message! ⚠");
$newMessageAlert.css({
display: 'none',
top: '45px',
"text-align": 'center',
cursor: 'pointer',
background: '#fff',
border: '1px solid #fff',
color: '#0296bb',
"margin-top": '2px',
"-webkit-box-shadow": '0 0 4px 2px #329bc2',
});
$newMessageAlert.attr('onmouseover', 'this.style.backgroundColor=\"#0b9bcb\";this.style.color=\"#FFFFFF\";');
$newMessageAlert.attr('onmouseout', 'this.style.backgroundColor=\"#FFFFFF\";this.style.color=\"#0296bb\";');
//Initialisation bandeau latéral
var $toggleAutoScroll = $('<li id="toggleAutoScroll" class="couleur5" ></li>'+'<li class="separator"></li>').prependTo($('#bandeau ul.menus'));
if(autoScroll) {
$("#toggleAutoScroll").text("AS on");
} else {
$("#toggleAutoScroll").text("AS off");
}
$("#toggleAutoScroll").css({
cursor: 'pointer',
});
$("#toggleAutoScroll").attr('onmouseover', 'this.style.color=\"#0073d5\";');
$("#toggleAutoScroll").attr('onmouseout', 'this.style.color=\"#999\";');
//Changer l'autoscroll au clic sur le bandeau latéral.
$("#toggleAutoScroll").click(function(){
if(autoScroll) {
autoScroll = false;
$("#toggleAutoScroll").text("AS off");
} else {
autoScroll = true;
$("#toggleAutoScroll").text("AS on");
}
GM_setValue("DCCE_autoScroll", autoScroll);
});
//Fait défiler le chat jusqu'en bas.
function scrollChat(){
$('#chatContent').stop().animate({
scrollTop: $('#chatContent')[0].scrollHeight
}, 800);
$newMessageAlert.stop().fadeOut(500);
}
//**********************************************
//INTERFACE DE CONFIGURATION UTILISATEUR
//**********************************************
var $databox = $('#zone_dataBox');
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//Constructeur de fenêtre de configuration
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
var DCCE_ConfigurationWindow = function () {
var window_width = '560px';
var window_height = '450px';
var $config_window = $('<div id="dcce_configwindow" onclick="engine.switchDataBox(this)"/>');
$config_window.draggable();
$config_window.addClass('dataBox focused ui-draggable');
$config_window.css({
width: window_width,
"margin-left": '-185px',
display: 'block',
position: 'absolute',
"z-index": '2',
});
for (var i = 1; i <= 8; i++) {
$('<div class="dbfond' + i + '" />').appendTo($config_window);
}
var $config_head = $('<div class="head ui-draggable-handle" ondblclick="$(\'#dcce_configwindow\').toggleClass(\'reduced\');" />').appendTo($config_window);
$('<div title="Fermer la fenêtre (Q)" class="info1 link close" onclick="engine.closeDataBox($(this).parent().parent().attr(\'id\'));" />').appendTo($config_head);
$('<div title="Reduire/Agrandir la fenêtre" class="info1 link reduce" onclick="$(\'#dcce_configwindow\').toggleClass(\'reduced\');" />').appendTo($config_head);
$('<div class="title">Configuration DC Enhanced Chat</div>').appendTo($config_head);
$('<div class="dbloader" />').appendTo($config_window);
var $config_content = $('<div class="content" style="height:' + window_height + '; overflow: auto"/>').appendTo($config_window);
//----------------------------------------
//Widgets internes
//----------------------------------------
var $config_interface = $('<div />').appendTo($config_content);
$config_interface.css({
"margin-left": '3px',
"font-variant": 'small-caps',
color: '#fff',
height: '100%',
width: '98%',
});
//----------------------------------------
//Configuration du défilement, auto-scroll
//----------------------------------------
var $autoconfig = $('<div />').appendTo($config_interface);
var $autoconfig_title = $('<h2 class="couleur4" />').appendTo($autoconfig);
$autoconfig_title.text('Options de défilement du texte');
$autoconfig_title.css({
"margin-bottom": '5px',
"border-bottom": '1px solid',
display: 'block',
"font-size": '17px',
"-webkit-margin-before": '0.83em',
"-webkit-margin-after": '0.83em',
"-webkit-margin-start": '0px',
"-webkit-margin-end": '0px',
"font-weight": 'bold',
position: 'relative',
});
var $autoconfig_container = $('<div class="ligne"/>').appendTo($config_interface);
$autoconfig_container.text('Défilement automatique : ');
$autoconfig_container.css({
display: 'inline-block',
"margin-bottom": '15px',
});
var $autoconfig_radio_activate = $('<input type="radio" name="typeAutoRadio" value="false">Activer</input>').appendTo($autoconfig_container);
$autoconfig_radio_activate.css({
margin: '0 5px',
});
$autoconfig_radio_activate.attr('checked', autoScroll);
$autoconfig_radio_activate.change(function(){
autoScroll = true;
GM_setValue("DCCE_autoScroll", autoScroll);
$("#toggleAutoScroll").text("AS on");
});
var $autoconfig_radio_deactivate = $('<input type="radio" name="typeAutoRadio" value="true">Désactiver</input>').appendTo($autoconfig_container);
$autoconfig_radio_deactivate.css({
margin: '0px 5px 0 25px',
"padding-left": '20px',
});
$autoconfig_radio_deactivate.attr('checked', !autoScroll);
$autoconfig_radio_deactivate.change(function(){
autoScroll = false;
GM_setValue("DCCE_autoScroll", autoScroll);
$("#toggleAutoScroll").text("AS off");
});
//----------------------------------------
//Configuration de l'affichage de la barre de défilement
//----------------------------------------
var $scrconfig_container = $('<div class="ligne"/>').appendTo($config_interface);
$scrconfig_container.text('Barre de défilement : ');
$scrconfig_container.css({
display: 'inline-block',
"margin-bottom": '15px',
});
var $scrconfig_radio_activate = $('<input type="radio" name="typeScrRadio" value="false">Afficher</input>').appendTo($scrconfig_container);
$scrconfig_radio_activate.css({
margin: '0 5px',
});
$scrconfig_radio_activate.attr('checked', scrollBar);
$scrconfig_radio_activate.change(function(){
scrollBar = true;
GM_setValue("DCCE_scrollBar", scrollBar);
setChatContentScroll();
});
var $scrconfig_radio_deactivate = $('<input type="radio" name="typeScrRadio" value="true">Masquer</input>').appendTo($scrconfig_container);
$scrconfig_radio_deactivate.css({
margin: '0px 5px 0 25px',
"padding-left": '20px',
});
$scrconfig_radio_deactivate.attr('checked', !scrollBar);
$scrconfig_radio_deactivate.change(function(){
scrollBar = false;
GM_setValue("DCCE_scrollBar", scrollBar);
setChatContentScroll();
});
//----------------------------------------
//Configuration de l'affichage de la barre de défilement
//----------------------------------------
var $predconfig_container = $('<div class="ligne"/>').appendTo($config_interface);
$predconfig_container.text('Défiler le chat à l\'écriture : ');
$predconfig_container.css({
display: 'inline-block',
"margin-bottom": '15px',
});
var $predconfig_radio_activate = $('<input type="radio" name="typePredRadio" value="false">Oui</input>').appendTo($predconfig_container);
$predconfig_radio_activate.css({
margin: '0 5px',
});
$predconfig_radio_activate.attr('checked', typePredict);
$predconfig_radio_activate.change(function(){
typePredict = true;
GM_setValue("DCCE_typePredict", typePredict);
});
var $predconfig_radio_deactivate = $('<input type="radio" name="typePredRadio" value="true">Non</input>').appendTo($predconfig_container);
$predconfig_radio_deactivate.css({
margin: '0px 5px 0 25px',
"padding-left": '20px',
});
$predconfig_radio_deactivate.attr('checked', !typePredict);
$predconfig_radio_deactivate.change(function(){
typePredict = false;
GM_setValue("DCCE_typePredict", typePredict);
});
this.$window = $config_window;
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//FIN Constructeur de fenêtre de configuration
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//---------------------------------------------------
//Ajout d'un item au menu bandeau "Paramètres" de DC
//---------------------------------------------------
var $params_menu = $('.menus > .parametres > ul');
var $dcce_config = $('<li />').appendTo($params_menu);
$dcce_config.text("Configuration du Chat");
$dcce_config.addClass('link couleur2 separator');
$dcce_config.click(function () {
//Fermeture des autres instances de paramétrage ouvertes
engine.closeDataBox('dcce_configwindow');
var $config_window = new DCCE_ConfigurationWindow();
$databox.append($config_window.$window);
});
//**********************************************
// FIN INTERFACE DE CONFIGURATION UTILISATEUR
//**********************************************
$newMessageAlert.click(scrollChat);
scrollChat(); //Place le chat au chargement du jeu.
$(".text_chat").keydown(function(key){ //Si en préférence, scroller le chat automatiquement quand on commence à écrire.
if(typePredict && key != 13) scrollChat(); //Ne pas le faire avec la touche entrée car déjà fait quand la ligne apparaît dans le chat.
});
var lastChat = $('#chatContent').text(); //Sert à comparer pour voir si le chat a changé.
//Scrolle ou alerte à la réception d'un message.
setInterval(function(){
if(lastChat != $('#chatContent').text()) {
lastChat = $('#chatContent').text(); //Actualiser la copie local du chat.
if(autoScroll) {
scrollChat();
}
else {
$newMessageAlert.stop().fadeIn(500);
}
}
}, 1000);
});