Guest User

Untitled

a guest
Mar 15th, 2015
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name           Kraland Wysiwyg V6
  3. // @namespace      ki
  4. // @description    Ajoute une zone de prévisualisation dynamique à l'éditeur de kramail, au forum et aux déclarations in game et reformate un texte quoté.
  5. // @version   1.0.2
  6. // @include        http://www.kraland.org/*
  7. // @grant       none
  8. // ==/UserScript==
  9.  
  10. /*
  11. ***********************************************************************************************
  12.                  Les options du scripts se règlent à la suite de cette ligne : */
  13.  
  14. var OPTION_FREQUENCE_PREVISUALISATION = 1;
  15. // L'option fréquence permet de changer la fréquence selon laquelle la zone de prévisualisation est mise-à-jour.
  16. //  1 indique qu'elle sera mise à jour à chaque caractère modifié.
  17. //  0 indique que la zone sera mise-à-jour lors d'un déplacement de la souris.
  18. //  Préférez 0 si vous rencontrez des problèmes de lenteurs.
  19.  
  20. var OPTION_REFORMATER_TEXTE = 1;
  21. // L'option reformatage permet de reformater les textes des réponses dans les kramails ou les messages du forum
  22. // 1 reformate le message
  23. // 0 désactive cette option
  24.  
  25. var smiley = 1;
  26. // L'option smiley permet d'ajouter directement dans les fenêtres d'ordre la liste des smileys
  27. // 1 ajoute les smileys
  28. // 0 désactive cette option
  29.  
  30. /* Fin des options
  31. *********************************************************************************************** */
  32.  
  33.     var b_str = "data:image/gif;base64,R0lGODlhEgARAMZHAP/6zJmZmf//+wAAAP//0gAAe3t7AFV3vCGcWlpaWtUAAPd0AF5DLXt7ewB7e3sAAO1hYfSsAHsAewBvACsr5Pn7gf/r64R7hO7MmfX7+Sgzls7OzmOcpYm44ns/Ozyc5r29vYTW3jdU0sa9vUIAAAALTAgAAL29xtb//4R7e87//5SUlISEQnuEe///AJQAAFJKUpx7e7UYIcnS6gAIAFJCQmNKSv/exicpTe/vkHNaWm9gYMa9xjk5OaUICIyEQq2EhJB7ezExMa0xMUJCQlJCSmRlSP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////yH+EUNyZWF0ZWQgd2l0aCBHSU1QACwAAAAAEgARAAAHT4ACgoOEhYQEAACIiomLjgACiZKTlJICi5WZkJqcl5MDoKGVkZKiAKaWmKiZpImro6qgp6+tswOuspOeuLe2lLWmtJi2ob2WnJq7yLrLlYEAOw==";
  34.     var i_str = "data:image/gif;base64,R0lGODlhEgARAMZHAP/6zJmZmf//+wAAAP//0gAAe3t7AFV3vCGcWlpaWtUAAPd0AF5DLXt7ewB7e3sAAO1hYfSsAHsAewBvACsr5Pn7gf/r64R7hO7MmfX7+Sgzls7OzmOcpYm44ns/Ozyc5r29vYTW3jdU0sa9vUIAAAALTAgAAL29xtb//4R7e87//5SUlISEQnuEe///AJQAAFJKUpx7e7UYIcnS6gAIAFJCQmNKSv/exicpTe/vkHNaWm9gYMa9xjk5OaUICIyEQq2EhJB7ezExMa0xMUJCQlJCSmRlSP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////yH+EUNyZWF0ZWQgd2l0aCBHSU1QACwAAAAAEgARAAAHXIACgoOEhYQEAACIiomLjgACiZKTlJICi5WZkJUYA54DGJSXlTEDMKGinDADMZmjk6WnrpQYq62umABAA0SolZGSGDsDO5qQmJ09vr+JnZ+gmq/GqdO/udWb2JOBADs=";
  35.     var u_str = "data:image/gif;base64,R0lGODlhEgARAMZHAP/6zJmZmf//+wAAAP//0gAAe3t7AFV3vCGcWlpaWtUAAPd0AF5DLXt7ewB7e3sAAO1hYfSsAHsAewBvACsr5Pn7gf/r64R7hO7MmfX7+Sgzls7OzmOcpYm44ns/Ozyc5r29vYTW3jdU0sa9vUIAAAALTAgAAL29xtb//4R7e87//5SUlISEQnuEe///AJQAAFJKUpx7e7UYIcnS6gAIAFJCQmNKSv/exicpTe/vkHNaWm9gYMa9xjk5OaUICIyEQq2EhJB7ezExMa0xMUJCQlJCSmRlSP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////yH+EUNyZWF0ZWQgd2l0aCBHSU1QACwAAAAAEgARAAAHVYACgoOEhYQEAACIiomLjgACiZKTlJICi5IDmpqVkZOciaCWmACilZCVmisrp5eVK5udp4mwA5SumbahupaUoqaQpKWbvL2zs7i7xMWox63Czs3Rk4EAOw==";
  36.     var s_str = "data:image/gif;base64,R0lGODlhEgARAMZHAP/6zJmZmf//+wAAAP//0gAAe3t7AFV3vCGcWlpaWtUAAPd0AF5DLXt7ewB7e3sAAO1hYfSsAHsAewBvACsr5Pn7gf/r64R7hO7MmfX7+Sgzls7OzmOcpYm44ns/Ozyc5r29vYTW3jdU0sa9vUIAAAALTAgAAL29xtb//4R7e87//5SUlISEQnuEe///AJQAAFJKUpx7e7UYIcnS6gAIAFJCQmNKSv/exicpTe/vkHNaWm9gYMa9xjk5OaUICIyEQq2EhJB7ezExMa0xMUJCQlJCSmRlSP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////yH+EUNyZWF0ZWQgd2l0aCBHSU1QACwAAAAAEgARAAAHXoACgoOEhYQEAACIiomLjgACiZKTlJICi5WZkJMYA54DGJmXiZ01iTqglZGkA6aaiaOsQkGhogCdn7metbCYkhg9qZSrtwNFp8KTsaXIvJacuc6Wvq/P1arU18TXkoEAOw==";
  37.     var left_str = "data:image/gif;base64,R0lGODlhEgARAMZHAP/6zJmZmf//+wAAAP//0gAAe3t7AFV3vCGcWlpaWtUAAPd0AF5DLXt7ewB7e3sAAO1hYfSsAHsAewBvACsr5Pn7gf/r64R7hO7MmfX7+Sgzls7OzmOcpYm44ns/Ozyc5r29vYTW3jdU0sa9vUIAAAALTAgAAL29xtb//4R7e87//5SUlISEQnuEe///AJQAAFJKUpx7e7UYIcnS6gAIAFJCQmNKSv/exicpTe/vkHNaWm9gYMa9xjk5OaUICIyEQq2EhJB7ezExMa0xMUJCQlJCSmRlSP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////yH+EUNyZWF0ZWQgd2l0aCBHSU1QACwAAAAAEgARAAAHR4ACgoOEhYQEAACIiomLjgACiZKTlJICiAOZmpubkJWfk5cAnJyUkaCgoqSrA56on6qsraGvsJiynae1obesprumi8CuwwCBADs=";
  38.     var center_str = "data:image/gif;base64,R0lGODlhEgARAMZHAP/6zJmZmf//+wAAAP//0gAAe3t7AFV3vCGcWlpaWtUAAPd0AF5DLXt7ewB7e3sAAO1hYfSsAHsAewBvACsr5Pn7gf/r64R7hO7MmfX7+Sgzls7OzmOcpYm44ns/Ozyc5r29vYTW3jdU0sa9vUIAAAALTAgAAL29xtb//4R7e87//5SUlISEQnuEe///AJQAAFJKUpx7e7UYIcnS6gAIAFJCQmNKSv/exicpTe/vkHNaWm9gYMa9xjk5OaUICIyEQq2EhJB7ezExMa0xMUJCQlJCSmRlSP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////yH+EUNyZWF0ZWQgd2l0aCBHSU1QACwAAAAAEgARAAAHSYACgoOEhYQEAACIiomLjgACiZKTlJICBAOZmpubiZGVoJaLnJyTn6Ggl6SrA56ooZeJrJmmr6mYs52QtpWxALm1vKaLwrvFiYEAOw==";
  39.     var right_str = "data:image/gif;base64,R0lGODlhEgARAMZHAP/6zJmZmf//+wAAAP//0gAAe3t7AFV3vCGcWlpaWtUAAPd0AF5DLXt7ewB7e3sAAO1hYfSsAHsAewBvACsr5Pn7gf/r64R7hO7MmfX7+Sgzls7OzmOcpYm44ns/Ozyc5r29vYTW3jdU0sa9vUIAAAALTAgAAL29xtb//4R7e87//5SUlISEQnuEe///AJQAAFJKUpx7e7UYIcnS6gAIAFJCQmNKSv/exicpTe/vkHNaWm9gYMa9xjk5OaUICIyEQq2EhJB7ezExMa0xMUJCQlJCSmRlSP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////yH+EUNyZWF0ZWQgd2l0aCBHSU1QACwAAAAAEgARAAAHSYACgoOEhYQEAACIiomLjgACiZKTlJICBAOZmpubiZGVoJaLiZycnqGol6WrA6eooJeTrJmur5Sqs52QtpWxkrm1vJ6jwp/CiYEAOw==";
  40.     var quote_str = "data:image/gif;base64,R0lGODlhEgARAMZHAP/6zJmZmf//+wAAAP//0gAAe3t7AFV3vCGcWlpaWtUAAPd0AF5DLXt7ewB7e3sAAO1hYfSsAHsAewBvACsr5Pn7gf/r64R7hO7MmfX7+Sgzls7OzmOcpYm44ns/Ozyc5r29vYTW3jdU0sa9vUIAAAALTAgAAL29xtb//4R7e87//5SUlISEQnuEe///AJQAAFJKUpx7e7UYIcnS6gAIAFJCQmNKSv/exicpTe/vkHNaWm9gYMa9xjk5OaUICIyEQq2EhJB7ezExMa0xMUJCQlJCSmRlSP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////yH+EUNyZWF0ZWQgd2l0aCBHSU1QACwAAAAAEgARAAAHaYACgoOEhYQEA4mKi4wWAgADhpIDFwKIhJGDigKUj5kCF6GTlZcCPIongpsDKZ6qqSCfmg2WkauJnLiUAJCShp29jMKcLa6+mMWXwoyclb3HmqS2y6vOssediNTCxQAEKeCh4g2h4C0tgQA7";
  41.     var img_str = "data:image/gif;base64,R0lGODlhEgARAMZHAP/6zJmZmf//+wAAAP//0gAAe3t7AFV3vCGcWlpaWtUAAPd0AF5DLXt7ewB7e3sAAO1hYfSsAHsAewBvACsr5Pn7gf/r64R7hO7MmfX7+Sgzls7OzmOcpYm44ns/Ozyc5r29vYTW3jdU0sa9vUIAAAALTAgAAL29xtb//4R7e87//5SUlISEQnuEe///AJQAAFJKUpx7e7UYIcnS6gAIAFJCQmNKSv/exicpTe/vkHNaWm9gYMa9xjk5OaUICIyEQq2EhJB7ezExMa0xMUJCQlJCSmRlSP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////yH+EUNyZWF0ZWQgd2l0aCBHSU1QACwAAAAAEgARAAAHjoACgoOEhYQEAACIiomLjgACAAOTlJWWkAQDFZucmxYAOQAWA5CSnZ0sJgM/kpiap5smLCwDo6WvsAMsRjQAvQKZsJupJj+2kbinoKKtyJ6jr5+bOaTOFRYmFxc0FQMmm82ZnwPa5AMgIAMCx63Z2u/n6QAmt+QX9vjok7fv9+Xl+lxZGkipVKKDCBMmCgQAOw==";
  42.     var url_str = "data:image/gif;base64,R0lGODlhEgARAMZHAP/6zJmZmf//+wAAAP//0gAAe3t7AFV3vCGcWlpaWtUAAPd0AF5DLXt7ewB7e3sAAO1hYfSsAHsAewBvACsr5Pn7gf/r64R7hO7MmfX7+Sgzls7OzmOcpYm44ns/Ozyc5r29vYTW3jdU0sa9vUIAAAALTAgAAL29xtb//4R7e87//5SUlISEQnuEe///AJQAAFJKUpx7e7UYIcnS6gAIAFJCQmNKSv/exicpTe/vkHNaWm9gYMa9xjk5OaUICIyEQq2EhJB7ezExMa0xMUJCQlJCSmRlSP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////yH+EUNyZWF0ZWQgd2l0aCBHSU1QACwAAAAAEgARAAAHYYACgoOEhYQEAACIiomLjgACiZKTlJICi5WZkJqcl5yZkQADo6OJpKWJlwMbAqwbo62xA6mrAqe3tbO2tiurG7+/A72vkLm4pKy6BLWusK62iJHLp6bUqZ+g2JWe2pbdk4EAOw==";
  43.     var mail_str = "data:image/gif;base64,R0lGODlhEgARAMZHAP/6zJmZmf//+wAAAP//0gAAe3t7AFV3vCGcWlpaWtUAAPd0AF5DLXt7ewB7e3sAAO1hYfSsAHsAewBvACsr5Pn7gf/r64R7hO7MmfX7+Sgzls7OzmOcpYm44ns/Ozyc5r29vYTW3jdU0sa9vUIAAAALTAgAAL29xtb//4R7e87//5SUlISEQnuEe///AJQAAFJKUpx7e7UYIcnS6gAIAFJCQmNKSv/exicpTe/vkHNaWm9gYMa9xjk5OaUICIyEQq2EhJB7ezExMa0xMUJCQlJCSmRlSP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////yH+EUNyZWF0ZWQgd2l0aCBHSU1QACwAAAAAEgARAAAHoIACgoOEhYQAiIkfHYwEiYkCjwCMHR8aHZIAkQAaACIfM4sdA5kCHh4aGh+WIqgeraekAhqzIiIaBLm6NxkZsh4ZGp8aFrq5Qz6+msAlzSUDAsY+HgS/vde9xjc31Zq00cbY17+CxgQZOMIaJd2mGea6GjMdOMru8LmXHbi/A/7+z0qo2vdMFgBHiHB0mHFpFYASkCSlstVBRKlMqxxmCgQAOw==";
  44.  
  45.  
  46. var Previews = new Array();
  47. var n_prevs = 0;
  48.  
  49. /****************************************
  50. *       SECURED FUNCTIONS               *
  51. *****************************************/
  52.  
  53. // Returns 0 or 1 whether the input is checked or not
  54. // @param area the current textArea
  55. function isItalic(textArea)
  56. {
  57.     var italic = 0;
  58.     try
  59.     {
  60.     //      area p          td         div           input
  61.     textArea.parentNode.parentNode.childNodes[3].childNodes[0].checked == true ? 1 : 0;
  62.     }
  63.     // NULLPOINTER
  64.     catch(err)
  65.     {
  66.     }
  67.     return italic;
  68. }
  69.  
  70. // Returns true if we are in the popup window
  71. function isPopupFrame()
  72. {
  73.     return document.title == "Kraland - Passer un Ordre";
  74. }
  75.  
  76. // Returns true if we are in the kramail window or in the forum post window
  77. function isMainFrame()
  78. {
  79.     var forms = document.getElementsByTagName('form');
  80.     for (var i=0; i<forms.length; i++)
  81.     {
  82.         if (forms[i].name == "post_msg") return 1;
  83.     }
  84.     return 0;
  85. }
  86.  
  87. // Returns true if we are in the help popup's previsualisation
  88. function isPrevisualisationWindow()
  89. {
  90.     if( document.title != "Kraland Interactif - Aide" ) return false;
  91.     return (document.getElementsByTagName('textarea')[0].name == "message");
  92. }
  93.  
  94. // Callback function
  95. // @param evt a click event
  96. function mouseUp(evt)
  97. {
  98.     setTimeout(key_up, 50, evt);
  99. }
  100.  
  101. // Sets the width and height of every textarea in the popup window to 100% and 400px.
  102. function extendTextArea()
  103. {
  104.     var areas = document.getElementsByTagName("textarea");
  105.     for (var i=0; i<areas.length; i++)
  106.     {
  107.         areas[i].style.width = "450px";
  108.         areas[i].style.height = "400px";
  109.     }
  110. }
  111.  
  112. // Called when the smiley is clicked and display the next set of smileys
  113. // @param areaId the current textArea's id
  114. function displaySmileysArea(areaId)
  115. {
  116.     tab1 = document.getElementById(areaId+"smile0");
  117.     tab2 = document.getElementById(areaId+"smile1");
  118.     tab3 = document.getElementById(areaId+"smile2");
  119.     tab4 = document.getElementById(areaId+"smile3");
  120.     tab5 = document.getElementById(areaId+"smile4");
  121.     tab6 = document.getElementById(areaId+"smile5");
  122.  
  123.     if (tab1.style.display == "block")
  124.     {
  125.         tab1.style.display = "none";
  126.         tab2.style.display = "block";
  127.         tab2.style.height = "30px";
  128.     }
  129.     else if (tab2.style.display == "block")
  130.     {
  131.         tab2.style.display = "none";
  132.         tab3.style.display = "block";
  133.         tab3.style.height = "30px";
  134.     }
  135.     else if (tab3.style.display == "block")
  136.     {
  137.         tab3.style.display = "none";
  138.         tab4.style.display = "block";
  139.         tab4.style.height = "30px";
  140.     }
  141.     else if (tab4.style.display == "block")
  142.     {
  143.         tab4.style.display = "none";
  144.         tab5.style.display = "block";
  145.         tab5.style.height = "30px";
  146.     }
  147.     else if (tab5.style.display == "block")
  148.     {
  149.         tab5.style.display = "none";
  150.         tab6.style.display = "block";
  151.         tab6.style.height = "30px";
  152.     }
  153.     else if (tab6.style.display == "block")
  154.     {
  155.         tab6.style.display = "none";
  156.         tab1.style.height = "30px";
  157.     }
  158.     else tab1.style.display = "block";
  159. }
  160.  
  161. // Returns a smiley's string
  162. // @param index the smiley's position in the array
  163. function getSmiley(index)
  164. {
  165.     var tab = [':)', ';)', '8)', ':]', ':D', ':p', ':6', '3)', ':,', ':(', ':[', ')[', '!(', '^]', 'x(', '8(', 'o)', '%(', ':o', ':|', ')|', ';(', ';[', ':f', ';o', ';|', '[(', '0)', ':B', ':=', '8]', '|)', 'O)', '8î', '8Î', 'j)', 'p)', '^)', ')f', ':î', ':Î', '%)', '8O', 'OX', ')%', 'oX', ':.', 'o(', 'hp', ':n', ':P', ':x', '8p', 'j|', 'kD', 'k]', ';p', ':l', ':+', ':-', 'VV', '%%', 'Q)', 'fr', 'en', 'de', 'es', 'it', 'nl', 'ca', 'sw', 'jp', '*t', '*j', '*o', '*r', '*v', '*c', '*b', '*m', '*n', '=o', '=n', '=S', 'ty', 'mt', 'so', 'iz', 'jo', 'tk', 'pk', 'ka', 'ke', '3i', '+)', 'st', '§c', '§o', '§g', 'co', '§p', '=)', '=!', '=k', '=y', '§x', '§b', '§3', '§;', '§+', '§-', '§|', '§V', '§î', '§h', '§w', '§k', '§v', '§d', '§i', '§C', '§l', '§y', '§m', '§D', '§r' ];
  166.     return tab[index];
  167. }
  168.  
  169. // Creates a html table with 21 smileys in it on the top of a textarea
  170. // @param tableNum the table's number
  171. // @param areaId the current textArea's id
  172. function createSmileysTable(tableNum, areaId)
  173. {
  174.     var SMILEY_COUNT = 21;
  175.     var currentSmiley = (SMILEY_COUNT * tableNum);
  176.  
  177.     // Converts numbers in hexadecimal string
  178.     function base10ToBase16 ()
  179.     {
  180.         // Here is the conversion
  181.         var str = (++currentSmiley).toString(16);
  182.         str = str.toUpperCase();
  183.         if (currentSmiley < 16) str = '0' + str;
  184.         return str;
  185.     }
  186.  
  187.     var tr = document.createElement('tr');
  188.         for (var i=0; i < SMILEY_COUNT; i++)
  189.         {        
  190.             var td = document.createElement('td');
  191.             var a = document.createElement('a');
  192.             a.href = 'javascript:add2tag(' + "'" + getSmiley((SMILEY_COUNT*tableNum)+i) + "'" + ', "'+ areaId +'","0")';
  193.             a.areaId = areaId.substr("area".length, areaId.length);
  194.  
  195.             var image = document.createElement('img');
  196.             image.src = 'http://img.kraland.org/s/' + base10ToBase16() +'.gif'
  197.             a.appendChild(image);
  198.             td.appendChild(a);
  199.             tr.appendChild(td);
  200.         }
  201.     return tr;
  202. }
  203.  
  204. // Creates and display the previsualisation area
  205. // @param textarea the textarea to be previsualised
  206. function createPreview(textarea)
  207. {
  208.     var id = n_prevs++;
  209.  
  210.     textarea.id = "area" + id;
  211.     Previews[textarea.id] = textarea;
  212.  
  213.     var container = textarea.parentNode;
  214.  
  215.     // Add the keyup event listener to the textarea
  216.     if (OPTION_FREQUENCE_PREVISUALISATION == 1)
  217.     {
  218.         textarea.addEventListener('keyup', key_up, false );
  219.     }
  220.  
  221.     var prev = document.createElement('div');
  222.     prev.id = "preview" + id;
  223.     prev.className = "bigcadre";
  224.     prev.style.marginLeft = "0";
  225.     prev.style.width = "97%";
  226.     prev.style.padding = "5px";
  227.     prev.innerHTML = "";
  228.    
  229.     // Add the mouseover event listener to the textarea and the previsualisation area
  230.     if (OPTION_FREQUENCE_PREVISUALISATION == 0)
  231.     {
  232.         prev.addEventListener('mouseover', key_up, false );
  233.         textarea.addEventListener('mousemove', key_up, false );
  234.     }
  235.  
  236.     var footer = document.createElement('div');
  237.     footer.id = "footer" + id;
  238.    
  239.     // This one is used as a container
  240.     var paragraph = document.createElement('p');
  241.     textarea.parentNode.insertBefore(paragraph, textarea);
  242.     paragraph.parentNode.removeChild(textarea);
  243.     paragraph.appendChild(textarea);
  244.     paragraph.appendChild(prev);
  245.     paragraph.appendChild(footer);
  246. }
  247.  
  248. // Removes every stupid '>' that cut the post's sentences is pieces.
  249. // @param textarea the textarea to be cleaned
  250. function removeBadQuotes(textarea)
  251. {
  252.     textarea.value = textarea.value.replace(/ \n(?:> )+(?=[\wéàçèäâêë\[])/g, " ");
  253.     textarea.value = textarea.value.replace(/  /g," ");
  254. }
  255.  
  256. // Update the previsualisation area and display the character's counter when the keyup event is triggered
  257. // @param event the keyup event
  258. function key_up (event)
  259. {
  260.     var area;
  261.  
  262.     // If the event was triggered by the user
  263.     if (event != null)
  264.     {
  265.         area = Previews[event.target.id];
  266.     }
  267.     // If the script made a call to this function by itself
  268.     else
  269.     {
  270.         area = document.getElementsByClassName('forum-message')[0].getElementsByTagName('textarea')[0];
  271.         if (area == null) return;
  272.     }
  273.     var doc = document;
  274.  
  275.     // Ok maybe we don't have a textarea everytime, pretty sure we are in the kraland's previsualisation tool
  276.     if (area == null)
  277.     {  
  278.         doc = parent.document;
  279.         var post = doc.getElementsByClassName('forum-message')[0];
  280.  
  281.         if (post == null && !is_tool_frame())
  282.         {
  283.             zarea = event.target.parentNode.parentNode.getElementsByTagName('textarea')[0];
  284.             if (area == null) area = document.getElementById("area"+event.target.parentNode.id);
  285.             if (area == null) alert("putain de bordel de merde"); // <----- Rico replies : OH SHIT WE'RE SCREWED :D ! IT'S A TRAP !
  286.         }
  287.         else
  288.         {
  289.             if (post == null)
  290.             {
  291.                 doc = opener.document;
  292.                 var ln = document.getElementsByTagName('a')[0];
  293.                 var orderId = ln.href.substr(ln.href.lastIndexOf('=')+1, ln.href.length);
  294.                 var area = doc.getElementsByName('order' + orderId)[0].getElementsByTagName('textarea')[0];
  295.             }
  296.             else
  297.             {
  298.                 area = post.getElementsByTagName('textarea')[0];
  299.             }
  300.         }
  301.     }
  302.  
  303.     // Simple check for the italic checkbox, only in the popup window
  304.     if (isItalic(area))
  305.     {
  306.         var str = convert('[i]'+area.value+'[/i]');
  307.     }
  308.     else
  309.     {
  310.         var str = convert(area.value);
  311.     }
  312.  
  313.     var id = area.id.substr("area".length, area.id.length);
  314.     var prev = doc.getElementById('preview' + id);
  315.     var foot = doc.getElementById('footer' + id);
  316.  
  317.     // Replace some shit with true badass <br/> tags ! Beware of the <br/> tags, they could kill you while you're sleeping
  318.     // Rico is tired ^
  319.     var endl = /(\r\n|\n\r|\r|\n)/g;
  320.     var count = 0;
  321.     prev.innerHTML = str.replace( endl, function(match, g1, g2, position, input)
  322.     {
  323.         count++;
  324.         return "<br/>";
  325.     });
  326.  
  327.     // This one is not used anymore, Kraland is ok with '<' and '\' now
  328.     //var alert_carac = "";
  329.     //if (area.value.search(new RegExp(/(\\|<\S)/)) != -1) alert_carac = "<p align='right'><font color='red'><b>Aaaaaaaaaaaahhhh un < ou un \ ! Vade retro satanas !</b></font></p>";
  330.  
  331.     var nbCarac = area.value.match(new RegExp(/\"/g));
  332.     if (nbCarac != null) count=count+5*nbCarac.length;
  333.  
  334.     nbCarac = area.value.match(new RegExp(/(\>|\<)/g));
  335.     if (nbCarac != null) count=count+3*nbCarac.length;
  336.  
  337.     foot.innerHTML = area.value.length + count + " caractères"; // Not used anymore : + alert_carac;
  338. }
  339.  
  340. // The main function
  341. function main()
  342. {
  343.     if (isMainFrame())
  344.     {
  345.         if (OPTION_REFORMATER_TEXTE == 1)
  346.         {
  347.             removeBadQuotes(document.getElementsByClassName('forum-message')[0].getElementsByTagName('textarea')[0]);
  348.         }
  349.         // Tools, smileys etc...
  350.         var left_toolbar = document.getElementsByClassName('forum-cartouche');
  351.         // This add some rare characters, could be useful.
  352.         if (left_toolbar.length != 0)
  353.         {
  354.             var help_text = document.createElement('p');
  355.             help_text.innerHTML = "— « » À É";
  356.             left_toolbar[0].appendChild(help_text);
  357.         }
  358.         createPreview(document.getElementsByClassName('forum-message')[0].getElementsByTagName('textarea')[0]);
  359.         key_up();
  360.     }
  361.     else if (isPopupFrame())
  362.     {
  363.         extendTextArea();
  364.         var areas = document.getElementsByTagName('textarea');
  365.         for (var i=0; i<areas.length; i++)
  366.         {
  367.             createPreview(areas[i]);
  368.             add_toolbar(areas[i]);
  369.         }
  370.     }
  371.     // Removed because the minichat is bugged.
  372.     /*else if (isPrevisualisationWindow)
  373.     {  
  374.         var nodes = document.getElementsByTagName('textarea');
  375.         for (var i=0; i<nodes.length; i++)
  376.         {
  377.             nodes[i].addEventListener('mouseup', mouseUp, true );
  378.             createPreview(nodes[i]);
  379.             add_toolbar(nodes[i]);
  380.         }
  381.     }*/
  382. }
  383.  
  384. /****************************************
  385. *       END SECURED FUNCTIONS           *
  386. *****************************************/
  387.  
  388. function add_toolbar (area) {
  389.     var toolbar = document.createElement('span');
  390.  
  391.     document.body.appendChild(document.createElement('script')).innerHTML = "var tagopen;\n" + add2tag ;
  392.     document.body.appendChild(document.createElement('script')).innerHTML = "var tagopen;\n" + displaySmileysArea ;
  393.  
  394.     var c = new Array();
  395.     c[0] = new Array('b', b_str);
  396.     c[1] = new Array('i', i_str);
  397.     c[2] = new Array('u', u_str);
  398.     c[3] = new Array('strike', s_str);
  399.     c[4] = new Array('left', left_str);
  400.     c[5] = new Array('center', center_str);
  401.     c[6] = new Array('right', right_str);
  402.     c[7] = new Array('quote', quote_str);
  403.     c[8] = new Array('img', img_str);
  404.     c[9] = new Array('url', url_str);
  405.     c[10] = new Array('mail', mail_str);
  406.     c[11] = new Array("yellow", "#f4ac00");
  407.     c[12] = new Array("orange", "#f77400");
  408.     c[13] = new Array("fuchsia", "#ed6161");
  409.     c[14] = new Array("red", "#d50000");
  410.     c[15] = new Array("maroon", "#7b0000");
  411.     c[16] = new Array("brown", "#5e432d");
  412.     c[17] = new Array("purple", "purple");
  413.     c[18] = new Array("navy", "#00007b");
  414.     c[19] = new Array("smiley", "smiley");
  415.     c[20] = new Array("blue", "#2b2be4");
  416.     c[21] = new Array("lightblue", "#5577bc");
  417.     c[22] = new Array("teal", "#007b7b");
  418.     c[23] = new Array("lightgreen", "#219c5a");
  419.     c[24] = new Array("green", "#006f00");
  420.     c[25] = new Array("olive", "#7b7b00");
  421.     c[26] = new Array("gray", "#7b7b7b");
  422.     c[27] = new Array("darkgray", "#5a5a5a");
  423.    
  424.  
  425.     var table = document.createElement('table');
  426.     table.style.display = "inline";
  427.     table.style.border = "0";
  428.     table.cellSpacing = 1;
  429.     table.cellPadding = 0;
  430.  
  431.     var tr = document.createElement('tr');
  432.    
  433.     for (var i=0; i<c.length; i++)
  434.     {
  435.         if (i == 20)
  436.         {
  437.             table.appendChild(tr);
  438.             tr = document.createElement('tr');
  439.         }
  440.  
  441.         var td = document.createElement('td');
  442.         td.style.border = "1px solid #999999";
  443.         var is_image;
  444.         if (i < 11)
  445.         {
  446.             is_image = true;
  447.             td.width = "18px";
  448.             td.height = "17px";
  449.             td.rowSpan = "2";
  450.         }
  451.         else
  452.         {
  453.             is_image = false;
  454.             td.width = "8px";
  455.             td.height = "8px";
  456.         }
  457.         if (i != 19) add_tool(td, c[i][1], c[i][0], area.id, is_image);
  458.         else if (!smiley) continue;
  459.         else
  460.         {
  461.             var a = document.createElement('a');
  462.             a.href = 'javascript:displaySmileysArea("' + area.id +'")';
  463.             a.id = area.id.substr("area".length, area.id.length);
  464.        
  465.             var image = document.createElement('img');
  466.             image.src = 'http://img.kraland.org/s/' + "01" +'.gif'
  467.             td.style.border = "1px solid #999999";
  468.             td.rowSpan =2;
  469.             a.appendChild(image);
  470.             td.appendChild(a);
  471.         }
  472.         tr.appendChild(td);
  473.     }
  474.  
  475.     table.appendChild(tr);
  476.     toolbar.appendChild(table);
  477.    
  478.     if (smiley == 1)
  479.     {
  480.         for (var i=0; i<6; i++)
  481.         {
  482.             var table = document.createElement('table');
  483.             table.style.display = "none";
  484.             table.style.border = "0";
  485.             table.cellSpacing = 1;
  486.             table.cellPadding = 0;
  487.             table.id = area.id + "smile" + i;
  488.             table.appendChild(createSmileysTable(i, area.id));
  489.             toolbar.appendChild(table);
  490.         }
  491.     }
  492.  
  493.     area.parentNode.parentNode.insertBefore(toolbar, area.parentNode);
  494. }
  495.  
  496.  
  497. function add_tool (node, str, tag, id, is_image)
  498. {
  499.     var a = document.createElement('a');
  500.     a.href = 'javascript:add2tag("'+ tag +'", "'+ id +'","1")';
  501.     a.id = id.substr("area".length, id.length);
  502.  
  503.     if (is_image)
  504.     {
  505.         var image = document.createElement('img');
  506.         image.src = str;
  507.         a.appendChild(image);
  508.     }
  509.     else
  510.     {
  511.         var div = document.createElement('div');
  512.         div.style.margin = "0";
  513.         div.style.width = "8px";
  514.         div.style.height = "8px";
  515.         div.style.backgroundColor = str;
  516.         a.appendChild(div);
  517.     }
  518.  
  519.     a.addEventListener('mouseup', mouseUp, true );
  520.     node.appendChild(a);
  521. }
  522.  
  523. function add2tag(tag, id, tagtype) {
  524.     textselect = document.getElementById(id);
  525.     if (textselect == null) return;
  526.    
  527.     if ( tag == "mail" )
  528.     {
  529.         textselect.value = "[/i]" + textselect.value + "[i]";
  530.  
  531.         textselect.focus();
  532.         return;
  533.     }
  534.    
  535.     if( tag == "url" )  {
  536.         eq = "=";
  537.     }
  538.     else {
  539.         eq = "";
  540.     }
  541.     var selLength = textselect.textLength;
  542.     var selStart = textselect.selectionStart;
  543.     var selEnd = textselect.selectionEnd;
  544.  
  545.     if (selEnd == 1 || selEnd == 2)
  546.     selEnd = selLength;
  547.  
  548.     var s1 = (textselect.value).substring(0,selStart);
  549.     var s2 = (textselect.value).substring(selStart, selEnd);
  550.     var s3 = (textselect.value).substring(selEnd, selLength);
  551.     if (textselect.selectionEnd &&
  552.     (textselect.selectionEnd - textselect.selectionStart > 0)
  553.     && tagtype == 1 ) {
  554.     textselect.value = s1 + "[" + tag + eq + "]" + s2 + "[/" + tag + "]" + s3;
  555.     textselect.selectionStart = s1.length;
  556.     textselect.selectionEnd = textselect.textLength - s3.length;
  557.     }
  558.     else {
  559.     if ( tagopen == tag && tagtype == 1 ) {
  560.         textselect.value = s1 + "[/" + tag + "]" + s3;
  561.         tagopen = '';
  562.     }
  563.     else {
  564.         textselect.value = s1 + "[" + tag + eq + "]" + s3;
  565.         tagopen = tag;
  566.     }
  567.     textselect.selectionStart = textselect.textLength - s3.length;
  568.     textselect.selectionEnd = textselect.textLength - s3.length;
  569.     }
  570.     textselect.focus();
  571. }
  572.  
  573. function convert (S) {
  574.  
  575.     if (S.indexOf('[') < 0) return S;
  576.    
  577.     function X(p, f) { return new RegExp(p, f) }
  578.     function D(s) { return rD.exec(s) }
  579.     function R(s) { return s.replace(rB, P) }
  580.     function A(s, p) { for (var i in p) s = s.replace(X(i, 'g'), p[i]); return s; }
  581.  
  582.     function P($0, $1, $2, $3) {
  583.         if ($3 && $3.indexOf('[') > -1) $3 = R($3);
  584.         switch ($1) {
  585.             case 'spoiler':
  586.               return '<div><div class="pre-spoiler"><span style="float: left; padding-top: 2px;">Spoiler</span> <input value="Voir" class="see-spoiler" onclick="if (this.parentNode.parentNode.getElementsByTagName(\'div\')[1].getElementsByTagName(\'div\')[0].style.display != \'\') { this.parentNode.parentNode.getElementsByTagName(\'div\')[1].getElementsByTagName(\'div\')[0].style.display = \'\';this.innerText = \'\'; this.value = \'Cacher\'; } else { this.parentNode.parentNode.getElementsByTagName(\'div\')[1].getElementsByTagName(\'div\')[0].style.display = \'none\'; this.value =\'Voir\';}" type="button"></div><div><div class="spoiler" style="display: none;">' + $3 + '</div></div></div>';
  587.             case 'url':
  588.             case 'mail':
  589.               return '<a '+ L[$1] + ($2||$3) +'" target="_blank">'+ $3 +'</a>';
  590.             case 'img':
  591.               var d = D($2);
  592.               return '<img src="'+ $3 +'"'+ (d ? ' width="'+ d[1] +'" height="'+ d[2] +'"' : '') +' alt="'+ (d ? '' : $2) +'" />';
  593.             case 'left':
  594.             case 'right':
  595.               return '<p align="'+ $1 +'">'+ $3 +'</p>';
  596.             case 'center':
  597.               return '<center>'+ $3 +'</center>';
  598.             case 'quote':
  599.               return '<br><div align=right><hr width=250><i>' + $3 + '<br></i><hr width=250></div>';
  600.             case 'b':
  601.               case 'i':
  602.               case 'u':
  603.               case 'strike':
  604.                 return '<'+ $1 +'>'+ $3 +'</'+ $1 +'>';
  605.         }
  606.         return '['+ $1 + ($2 ? '='+ $2 : '') +']'+ $3 +'[/'+ $1 +']';
  607.     }
  608.  
  609.     var rB = X('\\[([a-z][a-z0-9]*)(?:=([^\\]]+))?]((?:.|[\r\n])*?)\\[/\\1]', 'g'), rD = X('^(\\d+)x(\\d+)$');
  610.     var L = {url: 'href="', mail: 'href="mailto: '};
  611.     var C = {pre: [{'<': '&lt;'}, '<pre>', '</pre>']};
  612.     var Cols = {
  613.     yellow: '#f4ac00',
  614.     orange: '#f77400',
  615.     fuchsia: '#ed6161',
  616.     red: '#d50000',
  617.     maroon: 'maroon',
  618.     brown: '#5e432d',
  619.     purple: 'purple',
  620.     navy: 'navy',
  621.     blue: '#2b2be4',
  622.     teal: 'teal',
  623.     lightgreen: '#219c5a',
  624.     lightblue: '#5577bc',
  625.     green: '#006f00',
  626.     olive: 'olive',
  627.     gray: 'gray',
  628.     darkgray: '#5a5a5a',
  629.     aqua: 'aqua'
  630.     };
  631.     var llc = 0;
  632.     function nhex () {
  633.     var str = (++llc).toString(16);
  634.     str = str.toUpperCase();
  635.     if (llc < 16) str = '0' + str;
  636.     return str;
  637.     }
  638.     var Sm = {
  639.     ':[)]' : nhex(),
  640.     ';[)]' : nhex(),
  641.     '8[)]' : nhex(),
  642.     ':\]' : nhex(),
  643.     ':D' : nhex(),
  644.     ':p' : nhex(),
  645.     ':6' : nhex(),
  646.     '3[)]' : nhex(),
  647.     ':,' : nhex(),
  648.     ':[(]' : nhex(),
  649.     ':[[]' : nhex(),
  650.     '[)][[]' : nhex(),
  651.     '![(]' : nhex(),
  652.     '[ù^]\]' : nhex(),
  653.     'x[(]' : nhex(),
  654.     '8[(]' : nhex(),
  655.     'o[)]' : nhex(),
  656.     '%[(]' : nhex(),
  657.     ':o' : nhex(),
  658.     ':[|]' : nhex(),
  659.     '[)][|]' : nhex(),
  660.     ';[(]' : nhex(),
  661.     ';[[]' : nhex(),
  662.     ':f' : nhex(),
  663.     ';o' : nhex(),
  664.     ';[|]' : nhex(),
  665.     '[[][(]' : nhex(),
  666.     '0[)]' : nhex(),
  667.     ':B' : nhex(),
  668.     ':=' : nhex(),
  669.     '8\]' : nhex(),
  670.     '[|][)]' : nhex(),
  671.     'O[)]' : nhex(),
  672.     '8î' : nhex(),
  673.     '8Î' : nhex(),
  674.     'j[)]' : nhex(),
  675.     'p[)]' : nhex(),
  676.     '[ù^][)]' : nhex(),
  677.     '[)]f' : nhex(),
  678.     ':î' : nhex(),
  679.     ':Î' : nhex(),
  680.     '[%][)]' : nhex(),
  681.     '8O' : nhex(),
  682.     'OX' : nhex(),
  683.     '[)]%' : nhex(),
  684.     'oX' : nhex(),
  685.     ':[.]' : nhex(),
  686.     'o[(]' : nhex(),
  687.     'hp' : nhex(),
  688.     ':n' : nhex(),
  689.     ':P' : nhex(),
  690.     ':x' : nhex(),
  691.     '8p' : nhex(),
  692.     'j[|]' : nhex(),
  693.     'kD' : nhex(),
  694.     'k\]' : nhex(),
  695.     ';p' : nhex(),
  696.     ':l' : nhex(),
  697.     ':[+]' : nhex(),
  698.     ':-' : nhex(),
  699.     'VV' : nhex(),
  700.     '%%' : nhex(),
  701.     'Q[)]' : nhex(),
  702.     'fr' : nhex(),
  703.     'en' : nhex(),
  704.     'de' : nhex(),
  705.     'es' : nhex(),
  706.     'it' : nhex(),
  707.     'nl' : nhex(),
  708.     'ca' : nhex(),
  709.     'sw' : nhex(),
  710.     'jp' : nhex(),
  711.     '[*]t' : nhex(),
  712.     '[*]j' : nhex(),
  713.     '[*]o' : nhex(),
  714.     '[*]r' : nhex(),
  715.     '[*]v' : nhex(),
  716.     '[*]c' : nhex(),
  717.     '[*]b' : nhex(),
  718.     '[*]m' : nhex(),
  719.     '[*]n' : nhex(),
  720.     '=o' : nhex(),
  721.     '=n' : nhex(),
  722.     '=S' : nhex(),
  723.     'ty' : nhex(),
  724.     'mt' : nhex(),
  725.     'so' : nhex(),
  726.     'iz' : nhex(),
  727.     'jo' : nhex(),
  728.     'tk' : nhex(),
  729.     'pk' : nhex(),
  730.     'ka' : nhex(),
  731.     'ke' : nhex(),
  732.     '3i' : nhex(),
  733.     '[+][)]' : nhex(),
  734.     'st' : nhex(),
  735.     '[§]c' : nhex(),
  736.     '[§]o' : nhex(),
  737.     '[§]g' : nhex(),
  738.     'co' : nhex(),
  739.     '[§]p' : nhex(),
  740.     '=[)]' : nhex(),
  741.     '=!' : nhex(),
  742.     '=k' : nhex(),
  743.     '=y' : nhex(),
  744.     '[§]x' : nhex(),
  745.     '[§]b' : nhex(),
  746.     '[§]3' : nhex(),
  747.     '[§];' : nhex(),
  748.     '[§][+]' : nhex(),
  749.     '[§]-' : nhex(),
  750.     '[§][|]' : nhex(),
  751.     '[§]V' : nhex(),
  752.     '[§]î' : nhex(),
  753.     '[§]h' : nhex(),
  754.     '[§]w' : nhex(),
  755.     '[§]k' : nhex(),
  756.     '[§]v' : nhex(),
  757.     '[§]d' : nhex(),
  758.     '[§]i' : nhex(),
  759.     '[§]C' : nhex(),
  760.     '[§]l' : nhex(),
  761.     '[§]y' : nhex(),
  762.     '[§]m' : nhex(),
  763.     '[§]D' : nhex(),
  764.     '[§]r' : nhex()
  765.     };
  766.    
  767.     var I = {}, B = {};
  768.  
  769.     for (var i in C) I['\\[('+ i +')]((?:.|[\r\n])*?)\\[/\\1]'] = function($0, $1, $2) {return C[$1][1] + A($2, C[$1][0]) + C[$1][2]};
  770.     for (var i in Cols) {B['\\[('+ i +')]'] = '<font color="'+ Cols[i] +'">'; B['\\[/'+ i +']'] = '</font>';}
  771.     for (var i in Sm) {B['\\[('+ i +')]'] = '<img src="http://img.kraland.org/s/' + Sm[i] +'.gif">'; }
  772.     return R(A(A(S, I), B));
  773. }
  774.  
  775.  
  776. main();
Add Comment
Please, Sign In to add comment