Edenya-Script

Addon Edenya

当前为 2019-01-21 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Edenya-Script
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.100020
  5. // @description Addon Edenya
  6. // @author Valkazaar
  7. // @match http://www.edenya.net/_vahal/*
  8. // @grant none
  9. // @include http://www.edenya.net/_vahal/*
  10. // @include https://www.edenya.net/_vahal/*
  11. // @require https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js
  12. // ==/UserScript==
  13.  
  14. function checkMessages(){
  15. $.ajax({
  16. type: 'GET',
  17. url: 'https://www.edenya.net/index2.php?loca=communiquer/forum/messages',
  18. //data: datas,
  19. success: function(data) {
  20. var i = (data.split("#AA2020")).length - 1;
  21. var texte = "envelope-open";
  22. if(i>0){
  23. $('#ValkHidden').prepend('<span title="'+i+' Message(s) Non Lus"><a href="https://www.edenya.net/index2.php?loca=communiquer/forum/messages"><i class ="fa fa-envelope" /><small>('+i+') </small></a></span>');
  24. }else{
  25. $('#ValkHidden').prepend('<span title="Aucun message non lu"> <a href="https://www.edenya.net/index2.php?loca=communiquer/forum/messages"><i class ="fa fa-envelope-open" /></a></span>');
  26. }
  27. }});
  28. }
  29.  
  30. (function () {
  31. $('head').append('<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" type="text/css">');
  32. 'use strict';
  33.  
  34. // Vérification de la présence de la variable localStorage EdenyaColor
  35. // et instanciation de base si nécessaire
  36. var localColor = localStorage.getItem('EdenyaColor');
  37. if (localColor === null) {
  38. localColor = {};
  39. localColor.cadre2 = '#dda0dd';
  40. localColor.ligneA = '#000000';
  41. localColor.dialogue = '#ffffff';
  42. localColor.narration = '#ffd700';
  43. localColor.cri = '#9acd32';
  44. localColor.hj = '#FFDAB9';
  45. localColor.BlackDate = '#B09070';
  46. localStorage.setItem('EdenyaColor', JSON.stringify(localColor));
  47. localColor = localStorage.getItem('EdenyaColor');
  48. }
  49.  
  50. var localColorParsed = JSON.parse(localColor);
  51. if (localColorParsed.BlackDate === undefined) {
  52. localColorParsed.BlackDate = '#B09070';
  53. localStorage.setItem('EdenyaColor', JSON.stringify(localColorParsed));
  54. }
  55.  
  56. // Remplacement des dates écrites en noir dans les forums.
  57. $("font[color*='#000000']").attr( "color", localColorParsed.BlackDate );
  58. $("font[color='#990000']").attr( "color", '#FF0000' );
  59. $("font[color*='#990000']").attr( "color", '#00DD00' );
  60.  
  61. // Colorisation des éléments
  62. var baliseHeader = document.querySelector('head');
  63. var styleToAdd = document.createElement('style');
  64. for (var item in localColorParsed) {
  65. styleToAdd.innerText += '.' +item + '{color:'+ localColorParsed[item]+'}';
  66. }
  67. styleToAdd.innerText += 'td.cadre2 a:visited {color:'+ localColorParsed.cadre2+'}';
  68. styleToAdd.innerText += 'td.cadre2 a:link {color:'+ localColorParsed.cadre2+'}';
  69. styleToAdd.innerText += 'menu {margin-block-start:0;margin-block-end:0;}';
  70. styleToAdd.innerText += 'menu#menuValk {padding:0px;list-style-type: none;-webkit-padding-start: 0px;};';
  71. baliseHeader.appendChild(styleToAdd);
  72.  
  73. var locationPath = window.location.pathname.split("/");
  74.  
  75. // Dans Vahal, sur page 'normale'
  76. if (locationPath[locationPath.length - 2] == "_vahal" && locationPath[locationPath.length - 1] == "index.php"){
  77. jQuery.fn.Valk_Refresh = function() {
  78. var first = true;
  79. var z = JSON.parse(localStorage.getItem('EdenyaShortcut'));
  80. $('#menuValk').html('');
  81. for (var item in z) {
  82. var shortcutToAdd = "<li><small>";
  83. shortcutToAdd += "<i class='fa fa-chevron-up' onclick='$(document).Valk_Up(\"" + item + "\");' />";
  84. shortcutToAdd += "<i class='fa fa-chevron-down' onclick='$(document).Valk_Down(\"" + item + "\");' />";
  85. shortcutToAdd += "<i class='fa fa-edit' onclick='$(document).Valk_Rename(\"" + item + "\");' />";
  86. shortcutToAdd += "<i class='fa fa-times-circle' onclick='$(document).Valk_Del(\"" + item + "\");' />";
  87. shortcutToAdd += '</small> <a href="'+ z[item] +'">'+item+'</a>';
  88. shortcutToAdd += "</li>";
  89. $('#menuValk').append(shortcutToAdd);
  90. }
  91. $('#menuValk li:first-child small i:nth-child(1)').removeAttr("onclick")
  92. $('#menuValk li:last-child small i:nth-child(2)').removeAttr("onclick")
  93. return this; // This is needed so others can keep chaining off of this
  94. };
  95. jQuery.fn.Valk_Rename = function(itemIn){
  96. var nom=prompt('A renommer en ?');
  97. if (nom!==null){
  98. var y = {};
  99. var z = JSON.parse(localStorage.getItem('EdenyaShortcut'));
  100. for (var item in z) {
  101. if(item == itemIn){
  102. y[nom]=z[item];
  103. }else{
  104. y[item]=z[item];
  105. }
  106. };
  107. localStorage.setItem('EdenyaShortcut',JSON.stringify(y));
  108. $(document).Valk_Refresh();
  109. }
  110. return this; // This is needed so others can keep chaining off of this
  111. }
  112. jQuery.fn.Valk_Down = function(itemIn) {
  113. var next = null;
  114. var y = {};
  115. var z = JSON.parse(localStorage.getItem('EdenyaShortcut'));
  116. for (var item in z) {
  117. if (item != itemIn) {
  118. y[item] = z[item];
  119. if (next != null) {
  120. for (var bidule in next) {
  121. y[bidule] = next[bidule];
  122. }
  123. next = null;
  124. }
  125. }else {
  126. next = {};
  127. next[item] = z[item];
  128. }
  129. }
  130. localStorage.setItem('EdenyaShortcut', JSON.stringify(y));
  131. $(document).Valk_Refresh();
  132. return this; // This is needed so others can keep chaining off of this
  133. }
  134. jQuery.fn.Valk_Up = function(itemIn){
  135. var previous = null;var y={};
  136. var z = JSON.parse(localStorage.getItem('EdenyaShortcut'));
  137. for (let item in z) {
  138. if (previous != null){
  139. if (item == itemIn){
  140. y[item]=z[item];
  141. }
  142. for (bidule in previous){
  143. if (bidule != itemIn){
  144. y[bidule]=previous[bidule];
  145. }
  146. }
  147. };
  148. previous={};
  149. previous[item]=z[item]
  150. ;
  151. }
  152. for (var bidule in previous) {
  153. if (bidule != itemIn){
  154. y[bidule]=previous[bidule];
  155. }
  156. }
  157. localStorage.setItem('EdenyaShortcut',JSON.stringify(y));$(document).Valk_Refresh();
  158. return this; // This is needed so others can keep chaining off of this
  159. }
  160. jQuery.fn.Valk_Add = function(){
  161. var nom=prompt('Nom du shortcut ?');
  162. if (nom!==null){
  163. var z = JSON.parse(localStorage.getItem('EdenyaShortcut'));
  164. z[nom]=document.URL;
  165. localStorage.setItem('EdenyaShortcut',JSON.stringify(z));
  166. $(document).Valk_Refresh();
  167. //Valk_Refresh();
  168. }
  169. return this; // This is needed so others can keep chaining off of this
  170. }
  171. jQuery.fn.Valk_Del = function(item){
  172. var z = JSON.parse(localStorage.getItem('EdenyaShortcut'));
  173. delete z[item];
  174. localStorage.setItem('EdenyaShortcut',JSON.stringify(z));
  175. $(document).Valk_Refresh();
  176. return this; // This is needed so others can keep chaining off of this
  177. }
  178. jQuery.fn.Valk_ChgCol = function(id){
  179. var z = JSON.parse(localStorage.getItem('EdenyaColor'));
  180. z[id] = $("#"+id).val();
  181. localStorage.setItem('EdenyaColor',JSON.stringify(z));
  182. location.href = location.href;
  183. return this; // This is needed so others can keep chaining off of this
  184. }
  185.  
  186. // Positionnement sur la colone de gauche pour y ajouter les éléments (raccourcis et gestion des couleurs)
  187. if($(".menu").length > 0){
  188. $(".menu").append('<img src="images/interface/jour/pluie/chains.gif" />');
  189. $(".menu").append('<div id="cadreValk" class="cadre" style="width:194px;" />');
  190. $("#cadreValk").append('<div id="ValkHidden" />');
  191. checkMessages();
  192. $('#ValkHidden').append('<span style="padding-right:10px" title="Evénements récents"><a href="#"><i class="fa fa-calendar" onclick="javascript:window.open(\'vide.php?loca=evenements\',\'events\',\'scrollbars=1,width=500,height=450\')" /></a></span>');
  193. $("#ValkHidden").append("<span title='Ajouter un raccourci'><a href='#' onclick='$(document).Valk_Add()'> <i class='fa fa-plus-circle'/> Raccourci</a></span>");
  194. $("#cadreValk").append('<hr /><menu id="menuValk" />');
  195. $("#cadreValk").append('<hr /><div>Couleurs utilisées :</div>');
  196.  
  197. var localShortcut = localStorage.getItem('EdenyaShortcut');
  198. if (localShortcut === null) {
  199. var shortcut = { 'accueil': 'https://www.edenya.net/_vahal/' };
  200. localStorage.setItem('EdenyaShortcut', JSON.stringify(shortcut));
  201. localShortcut = localStorage.getItem('EdenyaShortcut');
  202. }
  203. var localShortcutParsed = JSON.parse(localShortcut);
  204. $(document).Valk_Refresh();
  205.  
  206. var localTips = localStorage.getItem('EdenyaTips');
  207. if (localTips === null) {
  208. localTips = {};
  209. localTips.cadre2 = "Couleur générale titre, panneau PJ,...";
  210. localTips.ligneA = "Couleur texte hors balises RP";
  211. localTips.dialogue = "Texte d'un dialogue";
  212. localTips.narration = "Texte de narration";
  213. localTips.cri = "Texte crié";
  214. localTips.hj = "descriptions HJ";
  215. localTips.BlackDate = "couleur des dates dans les forums";
  216. localStorage.setItem('EdenyaTips', JSON.stringify(localTips));
  217. localTips = localStorage.getItem('EdenyaTips');
  218. }
  219. var localTipsParsed = JSON.parse(localTips);
  220.  
  221. for (item in localColorParsed) {
  222. var itemToAdd = '<input id="' + item + '" type="color" class="bouton" value="'+ localColorParsed[item] +'" style="width:25;padding:0"';
  223. itemToAdd += " onChange='$(document).Valk_ChgCol(\"" + item + "\")'";
  224. itemToAdd += ' onMouseOver=\'ShowHelpTab("<b>Usage :</b><br>'+(localTipsParsed[item]).replace("'", " ")+'")\'';
  225. itemToAdd += ' onMouseOut="HideHelp()"';
  226. itemToAdd += ' title="'+ localTipsParsed[item] +'"';
  227. itemToAdd += '</input>';
  228. $("#cadreValk").append(itemToAdd);
  229. }
  230. var localPreview = localStorage.getItem('EdenyaPreview');
  231. if(localPreview === null) {
  232. localPreview = true;
  233. localStorage.setItem('EdenyaPreview', localPreview);
  234. }
  235. var localPreviewParsed = JSON.parse(localPreview);
  236. $("#cadreValk").append('<span>Prévisualisation de post : <input type="checkbox" onclick="localStorage.setItem(\'EdenyaPreview\', !JSON.parse(localStorage.getItem(\'EdenyaPreview\')));" '+ (localPreviewParsed?'checked':'') +' ></input></span>');
  237. }
  238. }
  239. if (locationPath[locationPath.length - 2] == "_vahal" && locationPath[locationPath.length - 1] == "vide.php" && ((document.getElementsByClassName("titre"))[0]).innerText == "Nouveau message" && JSON.parse(localStorage.getItem('EdenyaPreview'))){
  240. jQuery.fn.Valk_insertBalise = function(balise){
  241. var field = $('#message')[0];
  242. $('#message').focus();
  243. var debut = field.selectionStart;
  244. var fin = field.selectionEnd;
  245. var startSelection = $('#message').val().substring(0, debut);
  246. var currentSelection = $('#message').val().substring(debut, fin);
  247. var endSelection = $('#message').val().substring(fin);
  248.  
  249. $('#message').val(startSelection + "["+balise+"]" + currentSelection + "[/"+balise+"]" + endSelection);
  250. $('#message').focus(); // On remet le focus sur la zone de texte
  251. field.setSelectionRange(startSelection.length + balise.length + 2, startSelection.length + balise.length + 2 + currentSelection.length);
  252. return this; // This is needed so others can keep chaining off of this
  253. };
  254. jQuery.fn.Valk_Previsualise = function(){
  255. var initial_texte = $("[name='message']").val();
  256. var regexpOpen = /\[(narration|dialogue|cri|hj|ecriture)\]/g;
  257. var regexpClose = /\[\/(narration|dialogue|cri|hj|ecriture)\]/g;
  258. var previsu_texte = initial_texte.replace(regexpOpen, "<span class=\"$1\">");
  259. previsu_texte = previsu_texte.replace(regexpClose, "</span><!--$1-->");
  260. var regexpImg = /\[img\]([^\[]*)\[\/img\]/g;
  261. previsu_texte = previsu_texte.replace(regexpImg, "<img src=\"$1\" border=\"0\"\/>");
  262. previsu_texte = previsu_texte.replace(/\n/g, "<"+"br/>");
  263. $("#previewText").html(previsu_texte);
  264. return this; // This is needed so others can keep chaining off of this
  265. };
  266.  
  267. $(".saisie tbody tr td img").attr("onclick", function (){var z=$(this).attr("onclick"); z=z.replace("clickfuncmult(this,'","$(document).Valk_insertBalise('");return z})
  268. $("[name='Submit']").after("<button class='bouton' type='button' onclick='$(document).Valk_Previsualise()'>Prévisualiser</button>")
  269. $("table.saisie").after("<hr /><div id='previewText' style='text-align:left;'></div><hr />");
  270. }
  271. window.oncontextmenu = null;
  272. })();