Dreadcast Chat Enhancer

Améliore le chat de Dreadcast.

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

  1. // ==UserScript==
  2. // @name Dreadcast Chat Enhancer
  3. // @namespace https://greasyfork.org/scripts/21359-dreadcast-chat-enhancer/
  4. // @version 1.3.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(defaultValue, localVarName) {
  17. if (GM_getValue(localVarName) === undefined) {
  18. GM_setValue(localVarName, defaultValue);
  19. return defaultValue;
  20. } else {
  21. return GM_getValue(localVarName);
  22. }
  23. }
  24.  
  25. $(document).ready(function() {
  26.  
  27. var W_ZONE_CHAT = 317; //Largeur de base des différents éléments du chat.
  28. var W_MSG = 290;
  29. var W_CHATCONTENT = 308; //Valeur pas d'origine, mais nécessaire pour le script.
  30. var W_CHAT = 328;
  31. var W_ONGLETS_CHAT = 254;
  32. var W_CHATFORM = 288;
  33.  
  34. //Initialisation variables de préférences
  35. var autoScroll = initLocalMemory(false, "DCCE_autoScroll");
  36. var scrollBar = initLocalMemory(true, "DCCE_scrollBar");
  37. var typePredict = initLocalMemory(true, "DCCE_typePredict");
  38. var chatExtend = initLocalMemory(0, "DCCE_chatExtend");
  39.  
  40. $("#chatContent").css({
  41. "overflow-x": 'hidden',
  42. "overflow-y": 'scroll',
  43. height: '313px', //width traitée dans setChatCSS
  44. });
  45. //Applique la barre de défilement en fonction des préférences, et règle la largeur des lignes dans le chat.
  46. function setChatContentScroll() {
  47. if(scrollBar) {
  48. $("#chatContent").css({"padding-right": '0px'});
  49. $("#zone_chat .zone_infos .msg").css({width: (W_MSG + chatExtend) + 'px'});
  50. $("#zone_chat").css({width: (W_ZONE_CHAT + 5 + chatExtend) + 'px'}); //Assure d'avoir le fond derrière la scrollbar lorsque le chat est étendu.
  51. }
  52. else {
  53. $("#chatContent").css({"padding-right": '15px'});
  54. $("#zone_chat .zone_infos .msg").css({width: (W_MSG + 7 + chatExtend) + 'px'}); //Optimise la largeur prise par le texte, vu que la barre n'y est plus (+7)
  55. $("#zone_chat").css({width: (W_ZONE_CHAT + chatExtend) + 'px'});
  56. }
  57. }
  58.  
  59. var defaultZoneDroiteBackground = $("#zone_droite").css("background");
  60. var $dcce_background = $('<div id="dcce_background"></div>').prependTo($("#zone_page")).css({left: '907px',
  61. top: '142px',
  62. height: '461px'});
  63. function setZoneChatBackground() {
  64. if(chatExtend > 0) {
  65. $dcce_background.css({background: 'url("http://i.imgur.com/0J3wOK0.png")',
  66. "background-size": '100% 100%',
  67. width: (W_ZONE_CHAT + 13 + chatExtend) + 'px'});
  68. $("#zone_droite").css({background: 'url("http://i.imgur.com/kPzRqS2.png")'});
  69. } else {
  70. $dcce_background.css({background: 'none'});
  71. $("#zone_droite").css({background: defaultZoneDroiteBackground});
  72. }
  73. }
  74.  
  75. function setChatCSS() {
  76. setChatContentScroll(); //Comprend déjà #ZONE_CHAT et .MSG
  77. setZoneChatBackground();
  78. //Fixe les largeurs restantes
  79. /*$("#chatContent").css({width: toString(W_CHATCONTENT + chatExtend) + 'px',});
  80. $("#zone_chat .zone_infos .chat").css({width: toString(W_CHAT + chatExtend) + 'px',});
  81. $("#zone_chat #onglets_chat").css({width: toString(W_ONGLETS_CHAT + chatExtend) + 'px',});
  82. $("#chatForm").css({width: toString(W_CHATFORM + chatExtend) + 'px',});*/
  83. $("#chatContent").width(W_CHATCONTENT + chatExtend);
  84. $("#zone_chat .zone_infos .chat").width(W_CHAT + chatExtend);
  85. $("#zone_chat #onglets_chat").width(W_ONGLETS_CHAT + chatExtend);
  86. $("#chatForm").width(W_CHATFORM + chatExtend);
  87. }
  88.  
  89. setChatCSS(); //Appliquer à l'initialisation.
  90.  
  91. //Initialisation du bouton d'alerte, utilisé quand l'autoScroll est désactivé.
  92. var $newMessageAlert = $('<div />').appendTo($('#zone_chat'));
  93. $newMessageAlert.text("⚠ Nouveau message! ⚠");
  94. $newMessageAlert.css({
  95. display: 'none',
  96. top: '45px',
  97. "text-align": 'center',
  98. cursor: 'pointer',
  99. background: '#fff',
  100. border: '1px solid #fff',
  101. color: '#0296bb',
  102. "margin-top": '2px',
  103. "-webkit-box-shadow": '0 0 4px 2px #329bc2',
  104. });
  105. $newMessageAlert.attr('onmouseover', 'this.style.backgroundColor=\"#0b9bcb\";this.style.color=\"#FFFFFF\";');
  106. $newMessageAlert.attr('onmouseout', 'this.style.backgroundColor=\"#FFFFFF\";this.style.color=\"#0296bb\";');
  107.  
  108. //Initialisation bandeau latéral
  109. var $toggleAutoScroll = $('<li id="toggleAutoScroll" class="couleur5" ></li>'+'<li class="separator"></li>').prependTo($('#bandeau ul.menus'));
  110. if(autoScroll) {
  111. $("#toggleAutoScroll").text("AS on");
  112. } else {
  113. $("#toggleAutoScroll").text("AS off");
  114. }
  115. $("#toggleAutoScroll").css({
  116. cursor: 'pointer',
  117. });
  118. $("#toggleAutoScroll").attr('onmouseover', 'this.style.color=\"#0073d5\";');
  119. $("#toggleAutoScroll").attr('onmouseout', 'this.style.color=\"#999\";');
  120. //Changer l'autoscroll au clic sur le bandeau latéral.
  121. $("#toggleAutoScroll").click(function(){
  122. if(autoScroll) {
  123. autoScroll = false;
  124. $("#toggleAutoScroll").text("AS off");
  125. } else {
  126. autoScroll = true;
  127. $("#toggleAutoScroll").text("AS on");
  128. }
  129. GM_setValue("DCCE_autoScroll", autoScroll);
  130. });
  131.  
  132. //Fait défiler le chat jusqu'en bas.
  133. function scrollChat(){
  134. $('#chatContent').stop().animate({
  135. scrollTop: $('#chatContent')[0].scrollHeight
  136. }, 800);
  137. $newMessageAlert.stop().fadeOut(500);
  138. }
  139.  
  140. //**********************************************
  141. //INTERFACE DE CONFIGURATION UTILISATEUR
  142. //**********************************************
  143. var $databox = $('#zone_dataBox');
  144. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  145. //Constructeur de fenêtre de configuration
  146. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  147. var DCCE_ConfigurationWindow = function () {
  148. var window_width = '560px';
  149. var window_height = '450px';
  150. var $config_window = $('<div id="dcce_configwindow" onclick="engine.switchDataBox(this)"/>');
  151. $config_window.draggable();
  152. $config_window.addClass('dataBox focused ui-draggable');
  153. $config_window.css({
  154. width: window_width,
  155. "margin-left": '-185px',
  156. display: 'block',
  157. position: 'absolute',
  158. "z-index": '2',
  159. });
  160. for (var i = 1; i <= 8; i++) {
  161. $('<div class="dbfond' + i + '" />').appendTo($config_window);
  162. }
  163. var $config_head = $('<div class="head ui-draggable-handle" ondblclick="$(\'#dcce_configwindow\').toggleClass(\'reduced\');" />').appendTo($config_window);
  164. $('<div title="Fermer la fenêtre (Q)" class="info1 link close" onclick="engine.closeDataBox($(this).parent().parent().attr(\'id\'));" />').appendTo($config_head);
  165. $('<div title="Reduire/Agrandir la fenêtre" class="info1 link reduce" onclick="$(\'#dcce_configwindow\').toggleClass(\'reduced\');" />').appendTo($config_head);
  166. $('<div class="title">Configuration DC Enhanced Chat</div>').appendTo($config_head);
  167. $('<div class="dbloader" />').appendTo($config_window);
  168. var $config_content = $('<div class="content" style="height:' + window_height + '; overflow: auto"/>').appendTo($config_window);
  169. //----------------------------------------
  170. //Widgets internes
  171. //----------------------------------------
  172. var $config_interface = $('<div />').appendTo($config_content);
  173. $config_interface.css({
  174. "margin-left": '3px',
  175. "font-variant": 'small-caps',
  176. color: '#fff',
  177. height: '100%',
  178. width: '98%',
  179. });
  180. //----------------------------------------
  181. //Configuration du défilement, auto-scroll
  182. //----------------------------------------
  183. var $autoconfig = $('<div />').appendTo($config_interface);
  184. var $autoconfig_title = $('<h2 class="couleur4 configTitre" />').appendTo($autoconfig);
  185. $autoconfig_title.text('Options de défilement du texte');
  186. $autoconfig_title.css({
  187. "margin-bottom": '5px',
  188. "border-bottom": '1px solid',
  189. display: 'block',
  190. "font-size": '17px',
  191. "-webkit-margin-before": '0.83em',
  192. "-webkit-margin-after": '0.83em',
  193. "-webkit-margin-start": '0px',
  194. "-webkit-margin-end": '0px',
  195. "font-weight": 'bold',
  196. position: 'relative',
  197. });
  198. var $autoconfig_container = $('<div class="ligne"/>').appendTo($config_interface);
  199. $autoconfig_container.text('Défilement automatique : ');
  200. $autoconfig_container.css({
  201. display: 'inline-block',
  202. "margin-bottom": '15px',
  203. });
  204. var $autoconfig_radio_activate = $('<input type="radio" name="typeAutoRadio" value="false">Activer</input>').appendTo($autoconfig_container);
  205. $autoconfig_radio_activate.css({
  206. margin: '0 5px',
  207. });
  208. $autoconfig_radio_activate.attr('checked', autoScroll);
  209. $autoconfig_radio_activate.change(function(){
  210. autoScroll = true;
  211. GM_setValue("DCCE_autoScroll", autoScroll);
  212. $("#toggleAutoScroll").text("AS on");
  213. });
  214. var $autoconfig_radio_deactivate = $('<input type="radio" name="typeAutoRadio" value="true">Désactiver</input>').appendTo($autoconfig_container);
  215. $autoconfig_radio_deactivate.css({
  216. margin: '0px 5px 0 25px',
  217. "padding-left": '20px',
  218. });
  219. $autoconfig_radio_deactivate.attr('checked', !autoScroll);
  220. $autoconfig_radio_deactivate.change(function(){
  221. autoScroll = false;
  222. GM_setValue("DCCE_autoScroll", autoScroll);
  223. $("#toggleAutoScroll").text("AS off");
  224. });
  225. //----------------------------------------
  226. //Configuration de l'affichage de la barre de défilement
  227. //----------------------------------------
  228. var $scrconfig_container = $('<div class="ligne"/>').appendTo($config_interface);
  229. $scrconfig_container.text('Barre de défilement : ');
  230. $scrconfig_container.css({
  231. display: 'inline-block',
  232. "margin-bottom": '15px',
  233. });
  234. var $scrconfig_radio_activate = $('<input type="radio" name="typeScrRadio" value="false">Afficher</input>').appendTo($scrconfig_container);
  235. $scrconfig_radio_activate.css({
  236. margin: '0 5px',
  237. });
  238. $scrconfig_radio_activate.attr('checked', scrollBar);
  239. $scrconfig_radio_activate.change(function(){
  240. scrollBar = true;
  241. GM_setValue("DCCE_scrollBar", scrollBar);
  242. setChatContentScroll();
  243. });
  244. var $scrconfig_radio_deactivate = $('<input type="radio" name="typeScrRadio" value="true">Masquer</input>').appendTo($scrconfig_container);
  245. $scrconfig_radio_deactivate.css({
  246. margin: '0px 5px 0 25px',
  247. "padding-left": '20px',
  248. });
  249. $scrconfig_radio_deactivate.attr('checked', !scrollBar);
  250. $scrconfig_radio_deactivate.change(function(){
  251. scrollBar = false;
  252. GM_setValue("DCCE_scrollBar", scrollBar);
  253. setChatContentScroll();
  254. });
  255. //----------------------------------------
  256. //Configuration de l'affichage de la barre de défilement
  257. //----------------------------------------
  258. var $predconfig_container = $('<div class="ligne"/>').appendTo($config_interface);
  259. $predconfig_container.text('Défiler le chat à l\'écriture : ');
  260. $predconfig_container.css({
  261. display: 'inline-block',
  262. "margin-bottom": '15px',
  263. });
  264. var $predconfig_radio_activate = $('<input type="radio" name="typePredRadio" value="false">Oui</input>').appendTo($predconfig_container);
  265. $predconfig_radio_activate.css({
  266. margin: '0 5px',
  267. });
  268. $predconfig_radio_activate.attr('checked', typePredict);
  269. $predconfig_radio_activate.change(function(){
  270. typePredict = true;
  271. GM_setValue("DCCE_typePredict", typePredict);
  272. });
  273. var $predconfig_radio_deactivate = $('<input type="radio" name="typePredRadio" value="true">Non</input>').appendTo($predconfig_container);
  274. $predconfig_radio_deactivate.css({
  275. margin: '0px 5px 0 25px',
  276. "padding-left": '20px',
  277. });
  278. $predconfig_radio_deactivate.attr('checked', !typePredict);
  279. $predconfig_radio_deactivate.change(function(){
  280. typePredict = false;
  281. GM_setValue("DCCE_typePredict", typePredict);
  282. });
  283. this.$window = $config_window;
  284.  
  285. //----------------------------------------
  286. //Configuration de la largeur du chat
  287. //----------------------------------------
  288. var $xtdconfig = $('<div />').appendTo($config_interface);
  289. var $xtdconfig_title = $('<h2 class="couleur4 configTitre" />').appendTo($xtdconfig);
  290. $xtdconfig_title.text('Largeur du chat');
  291. $xtdconfig_title.css({
  292. "margin-bottom": '5px',
  293. "border-bottom": '1px solid',
  294. display: 'block',
  295. "font-size": '17px',
  296. "-webkit-margin-before": '0.83em',
  297. "-webkit-margin-after": '0.83em',
  298. "-webkit-margin-start": '0px',
  299. "-webkit-margin-end": '0px',
  300. "font-weight": 'bold',
  301. position: 'relative',
  302. });
  303. var $xtdconfig_container = $('<div class="ligne"/>').appendTo($config_interface);
  304. //$xtdconfig_container.text('Défilement automatique : ');
  305. $xtdconfig_container.css({
  306. display: 'inline-block',
  307. "margin-bottom": '15px',
  308. });
  309. var $xtdconfig_range = $('<input type="range" name="typeXtdRange" value="' + chatExtend + '" min="0" max="300" step="1"></input>').appendTo($xtdconfig_container);
  310. $xtdconfig_range.css({
  311. margin: '0 5px',
  312. width: '500px'
  313. });
  314. $xtdconfig_range.change(function(){
  315. chatExtend = Number($xtdconfig_range.val());
  316. GM_setValue("DCCE_chatExtend", chatExtend);
  317. setChatCSS();
  318. });
  319. };
  320. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  321. //FIN Constructeur de fenêtre de configuration
  322. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  323.  
  324.  
  325. //---------------------------------------------------
  326. //Ajout d'un item au menu bandeau "Paramètres" de DC
  327. //---------------------------------------------------
  328. var $params_menu = $('.menus > .parametres > ul');
  329. var $dcce_config = $('<li />').appendTo($params_menu);
  330. $dcce_config.text("Configuration du Chat");
  331. $dcce_config.addClass('link couleur2 separator');
  332.  
  333. $dcce_config.click(function () {
  334. //Fermeture des autres instances de paramétrage ouvertes
  335. engine.closeDataBox('dcce_configwindow');
  336. var $config_window = new DCCE_ConfigurationWindow();
  337. $databox.append($config_window.$window);
  338. });
  339.  
  340. //**********************************************
  341. // FIN INTERFACE DE CONFIGURATION UTILISATEUR
  342. //**********************************************
  343.  
  344.  
  345. $newMessageAlert.click(scrollChat);
  346. scrollChat(); //Place le chat au chargement du jeu.
  347.  
  348. $(".text_chat").keydown(function(key){ //Si en préférence, scroller le chat automatiquement quand on commence à écrire.
  349. 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.
  350. });
  351.  
  352. var lastChat = $('#chatContent').text(); //Sert à comparer pour voir si le chat a changé.
  353.  
  354. //Scrolle ou alerte à la réception d'un message.
  355. setInterval(function(){
  356. if(lastChat != $('#chatContent').text()) {
  357. lastChat = $('#chatContent').text(); //Actualiser la copie local du chat.
  358.  
  359. if(autoScroll) {
  360. scrollChat();
  361. }
  362. else {
  363. $newMessageAlert.stop().fadeIn(500);
  364. }
  365. }
  366. }, 1000);
  367. });