Dreadcast Chat Enhancer

Améliore le chat de Dreadcast.

当前为 2016-07-14 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Dreadcast Chat Enhancer
  3. // @namespace https://greasyfork.org/scripts/21359-dreadcast-chat-enhancer/
  4. // @version 1.2.1
  5. // @description Améliore le chat de Dreadcast.
  6. // @author MockingJay
  7. // @match http://www.dreadcast.net/Main
  8. // @grant GM_setValue
  9. // @grant GM_getValue
  10. // @grant GM_deleteValue
  11. // @grant GM_listValues
  12. // ==/UserScript==
  13.  
  14. //Lit les variables dans GM à la demande. A utiliser pour chaque déclaration de variable qui est copiée en mémoire.
  15. //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.
  16. function initLocalMemory(initValue, localVarName) {
  17. if (GM_getValue(localVarName) === undefined) {
  18. GM_setValue(localVarName, initValue);
  19. return initValue;
  20. } else {
  21. return GM_getValue(localVarName);
  22. }
  23. }
  24.  
  25. $(document).ready(function() {
  26.  
  27. //Initialisation variables de préférences
  28. var autoScroll = initLocalMemory(false, "DCCE_autoScroll");
  29. var scrollBar = initLocalMemory(true, "DCCE_scrollBar");
  30. var typePredict = initLocalMemory(true, "DCCE_typePredict");
  31.  
  32. //Initialiser le CSS et scroller en bas à l'initialisation.
  33. var $chatContentWidth = $('<style id="DCCE_chatContentWidth"></style>').appendTo('head'); //Ajout de règle CSS pour la largeur des lignes du chat.
  34.  
  35. $("#chatContent").css({
  36. "overflow-x": 'hidden',
  37. "overflow-y": 'scroll',
  38. height: '313px',
  39. width: '308px',
  40. });
  41. //Applique la barre de défilement en fonction des préférences, et règle la largeur des lignes dans le chat.
  42. function setChatContentScroll() {
  43. if(scrollBar) {
  44. $("#chatContent").css({"padding-right": '0px'});
  45. $chatContentWidth.html('#zone_chat .zone_infos .msg { width: 290px; }');
  46. }
  47. else {
  48. $("#chatContent").css({"padding-right": '15px'});
  49. $chatContentWidth.html('#zone_chat .zone_infos .msg { width: 297px; }');
  50. }
  51. }
  52. setChatContentScroll(); //Appliquer à l'initialisation.
  53.  
  54. //Initialisation du bouton d'alerte, utilisé quand l'autoScroll est désactivé.
  55. var $newMessageAlert = $('<div />').appendTo($('#zone_chat'));
  56. $newMessageAlert.text("⚠ Nouveau message! ⚠");
  57. $newMessageAlert.css({
  58. display: 'none',
  59. top: '45px',
  60. "text-align": 'center',
  61. cursor: 'pointer',
  62. background: '#fff',
  63. border: '1px solid #fff',
  64. color: '#0296bb',
  65. "margin-top": '2px',
  66. "-webkit-box-shadow": '0 0 4px 2px #329bc2',
  67. });
  68. $newMessageAlert.attr('onmouseover', 'this.style.backgroundColor=\"#0b9bcb\";this.style.color=\"#FFFFFF\";');
  69. $newMessageAlert.attr('onmouseout', 'this.style.backgroundColor=\"#FFFFFF\";this.style.color=\"#0296bb\";');
  70.  
  71. //Initialisation bandeau latéral
  72. var $toggleAutoScroll = $('<li id="toggleAutoScroll" class="couleur5" ></li>'+'<li class="separator"></li>').prependTo($('#bandeau ul.menus'));
  73. if(autoScroll) {
  74. $("#toggleAutoScroll").text("AS on");
  75. } else {
  76. $("#toggleAutoScroll").text("AS off");
  77. }
  78. $("#toggleAutoScroll").css({
  79. cursor: 'pointer',
  80. });
  81. $("#toggleAutoScroll").attr('onmouseover', 'this.style.color=\"#0073d5\";');
  82. $("#toggleAutoScroll").attr('onmouseout', 'this.style.color=\"#999\";');
  83. //Changer l'autoscroll au clic sur le bandeau latéral.
  84. $("#toggleAutoScroll").click(function(){
  85. if(autoScroll) {
  86. autoScroll = false;
  87. $("#toggleAutoScroll").text("AS off");
  88. } else {
  89. autoScroll = true;
  90. $("#toggleAutoScroll").text("AS on");
  91. }
  92. GM_setValue("DCCE_autoScroll", autoScroll);
  93. });
  94.  
  95. //Fait défiler le chat jusqu'en bas.
  96. function scrollChat(){
  97. $('#chatContent').stop().animate({
  98. scrollTop: $('#chatContent')[0].scrollHeight
  99. }, 800);
  100. $newMessageAlert.stop().fadeOut(500);
  101. }
  102.  
  103. //**********************************************
  104. //INTERFACE DE CONFIGURATION UTILISATEUR
  105. //**********************************************
  106. var $databox = $('#zone_dataBox');
  107. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  108. //Constructeur de fenêtre de configuration
  109. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  110. var DCCE_ConfigurationWindow = function () {
  111. var window_width = '560px';
  112. var window_height = '450px';
  113. var $config_window = $('<div id="dcce_configwindow" onclick="engine.switchDataBox(this)"/>');
  114. $config_window.draggable();
  115. $config_window.addClass('dataBox focused ui-draggable');
  116. $config_window.css({
  117. width: window_width,
  118. "margin-left": '-185px',
  119. display: 'block',
  120. position: 'absolute',
  121. "z-index": '2',
  122. });
  123. for (var i = 1; i <= 8; i++) {
  124. $('<div class="dbfond' + i + '" />').appendTo($config_window);
  125. }
  126. var $config_head = $('<div class="head ui-draggable-handle" ondblclick="$(\'#dcce_configwindow\').toggleClass(\'reduced\');" />').appendTo($config_window);
  127. $('<div title="Fermer la fenêtre (Q)" class="info1 link close" onclick="engine.closeDataBox($(this).parent().parent().attr(\'id\'));" />').appendTo($config_head);
  128. $('<div title="Reduire/Agrandir la fenêtre" class="info1 link reduce" onclick="$(\'#dcce_configwindow\').toggleClass(\'reduced\');" />').appendTo($config_head);
  129. $('<div class="title">Configuration DC Enhanced Chat</div>').appendTo($config_head);
  130. $('<div class="dbloader" />').appendTo($config_window);
  131. var $config_content = $('<div class="content" style="height:' + window_height + '; overflow: auto"/>').appendTo($config_window);
  132. //----------------------------------------
  133. //Widgets internes
  134. //----------------------------------------
  135. var $config_interface = $('<div />').appendTo($config_content);
  136. $config_interface.css({
  137. "margin-left": '3px',
  138. "font-variant": 'small-caps',
  139. color: '#fff',
  140. height: '100%',
  141. width: '98%',
  142. });
  143. //----------------------------------------
  144. //Configuration du défilement, auto-scroll
  145. //----------------------------------------
  146. var $autoconfig = $('<div />').appendTo($config_interface);
  147. var $autoconfig_title = $('<h2 class="couleur4" />').appendTo($autoconfig);
  148. $autoconfig_title.text('Options de défilement du texte');
  149. $autoconfig_title.css({
  150. "margin-bottom": '5px',
  151. "border-bottom": '1px solid',
  152. display: 'block',
  153. "font-size": '17px',
  154. "-webkit-margin-before": '0.83em',
  155. "-webkit-margin-after": '0.83em',
  156. "-webkit-margin-start": '0px',
  157. "-webkit-margin-end": '0px',
  158. "font-weight": 'bold',
  159. position: 'relative',
  160. });
  161. var $autoconfig_container = $('<div class="ligne"/>').appendTo($config_interface);
  162. $autoconfig_container.text('Défilement automatique : ');
  163. $autoconfig_container.css({
  164. display: 'inline-block',
  165. "margin-bottom": '15px',
  166. });
  167. var $autoconfig_radio_activate = $('<input type="radio" name="typeAutoRadio" value="false">Activer</input>').appendTo($autoconfig_container);
  168. $autoconfig_radio_activate.css({
  169. margin: '0 5px',
  170. });
  171. $autoconfig_radio_activate.attr('checked', autoScroll);
  172. $autoconfig_radio_activate.change(function(){
  173. autoScroll = true;
  174. GM_setValue("DCCE_autoScroll", autoScroll);
  175. $("#toggleAutoScroll").text("AS on");
  176. });
  177. var $autoconfig_radio_deactivate = $('<input type="radio" name="typeAutoRadio" value="true">Désactiver</input>').appendTo($autoconfig_container);
  178. $autoconfig_radio_deactivate.css({
  179. margin: '0px 5px 0 25px',
  180. "padding-left": '20px',
  181. });
  182. $autoconfig_radio_deactivate.attr('checked', !autoScroll);
  183. $autoconfig_radio_deactivate.change(function(){
  184. autoScroll = false;
  185. GM_setValue("DCCE_autoScroll", autoScroll);
  186. $("#toggleAutoScroll").text("AS off");
  187. });
  188. //----------------------------------------
  189. //Configuration de l'affichage de la barre de défilement
  190. //----------------------------------------
  191. var $scrconfig_container = $('<div class="ligne"/>').appendTo($config_interface);
  192. $scrconfig_container.text('Barre de défilement : ');
  193. $scrconfig_container.css({
  194. display: 'inline-block',
  195. "margin-bottom": '15px',
  196. });
  197. var $scrconfig_radio_activate = $('<input type="radio" name="typeScrRadio" value="false">Afficher</input>').appendTo($scrconfig_container);
  198. $scrconfig_radio_activate.css({
  199. margin: '0 5px',
  200. });
  201. $scrconfig_radio_activate.attr('checked', scrollBar);
  202. $scrconfig_radio_activate.change(function(){
  203. scrollBar = true;
  204. GM_setValue("DCCE_scrollBar", scrollBar);
  205. setChatContentScroll();
  206. });
  207. var $scrconfig_radio_deactivate = $('<input type="radio" name="typeScrRadio" value="true">Masquer</input>').appendTo($scrconfig_container);
  208. $scrconfig_radio_deactivate.css({
  209. margin: '0px 5px 0 25px',
  210. "padding-left": '20px',
  211. });
  212. $scrconfig_radio_deactivate.attr('checked', !scrollBar);
  213. $scrconfig_radio_deactivate.change(function(){
  214. scrollBar = false;
  215. GM_setValue("DCCE_scrollBar", scrollBar);
  216. setChatContentScroll();
  217. });
  218. //----------------------------------------
  219. //Configuration de l'affichage de la barre de défilement
  220. //----------------------------------------
  221. var $predconfig_container = $('<div class="ligne"/>').appendTo($config_interface);
  222. $predconfig_container.text('Défiler le chat à l\'écriture : ');
  223. $predconfig_container.css({
  224. display: 'inline-block',
  225. "margin-bottom": '15px',
  226. });
  227. var $predconfig_radio_activate = $('<input type="radio" name="typePredRadio" value="false">Oui</input>').appendTo($predconfig_container);
  228. $predconfig_radio_activate.css({
  229. margin: '0 5px',
  230. });
  231. $predconfig_radio_activate.attr('checked', typePredict);
  232. $predconfig_radio_activate.change(function(){
  233. typePredict = true;
  234. GM_setValue("DCCE_typePredict", typePredict);
  235. });
  236. var $predconfig_radio_deactivate = $('<input type="radio" name="typePredRadio" value="true">Non</input>').appendTo($predconfig_container);
  237. $predconfig_radio_deactivate.css({
  238. margin: '0px 5px 0 25px',
  239. "padding-left": '20px',
  240. });
  241. $predconfig_radio_deactivate.attr('checked', !typePredict);
  242. $predconfig_radio_deactivate.change(function(){
  243. typePredict = false;
  244. GM_setValue("DCCE_typePredict", typePredict);
  245. });
  246. this.$window = $config_window;
  247. };
  248. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  249. //FIN Constructeur de fenêtre de configuration
  250. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  251.  
  252.  
  253. //---------------------------------------------------
  254. //Ajout d'un item au menu bandeau "Paramètres" de DC
  255. //---------------------------------------------------
  256. var $params_menu = $('.menus > .parametres > ul');
  257. var $dcce_config = $('<li />').appendTo($params_menu);
  258. $dcce_config.text("Configuration du Chat");
  259. $dcce_config.addClass('link couleur2 separator');
  260.  
  261. $dcce_config.click(function () {
  262. //Fermeture des autres instances de paramétrage ouvertes
  263. engine.closeDataBox('dcce_configwindow');
  264. var $config_window = new DCCE_ConfigurationWindow();
  265. $databox.append($config_window.$window);
  266. });
  267.  
  268. //**********************************************
  269. // FIN INTERFACE DE CONFIGURATION UTILISATEUR
  270. //**********************************************
  271.  
  272.  
  273. $newMessageAlert.click(scrollChat);
  274. scrollChat(); //Place le chat au chargement du jeu.
  275.  
  276. $(".text_chat").keydown(function(key){ //Si en préférence, scroller le chat automatiquement quand on commence à écrire.
  277. 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.
  278. });
  279.  
  280. var lastChat = $('#chatContent').text(); //Sert à comparer pour voir si le chat a changé.
  281.  
  282. //Scrolle ou alerte à la réception d'un message.
  283. setInterval(function(){
  284. if(lastChat != $('#chatContent').text()) {
  285. lastChat = $('#chatContent').text(); //Actualiser la copie local du chat.
  286.  
  287. if(autoScroll) {
  288. scrollChat();
  289. }
  290. else {
  291. $newMessageAlert.stop().fadeIn(500);
  292. }
  293. }
  294. }, 1000);
  295. });