Edenya-Script

Addon Edenya

目前为 2019-04-27 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name Edenya-Script
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.100021
  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. $('a:has(i:has(span))').attr( "class", "narration" );
  65. for (var item in localColorParsed) {
  66. styleToAdd.innerText += '.' +item + '{color:'+ localColorParsed[item]+'!important}';
  67. }
  68. styleToAdd.innerText += 'td.cadre2 a:visited {color:'+ localColorParsed.cadre2+'}';
  69. styleToAdd.innerText += 'td.cadre2 a:link {color:'+ localColorParsed.cadre2+'}';
  70. styleToAdd.innerText += 'menu {margin-block-start:0;margin-block-end:0;}';
  71. styleToAdd.innerText += 'menu#menuValk {padding:0px;list-style-type: none;-webkit-padding-start: 0px;};';
  72. baliseHeader.appendChild(styleToAdd);
  73.  
  74. var locationPath = window.location.pathname.split("/");
  75.  
  76. // Dans Vahal, sur page 'normale'
  77. if (locationPath[locationPath.length - 2] == "_vahal" && locationPath[locationPath.length - 1] == "index.php"){
  78. jQuery.fn.Valk_Refresh = function() {
  79. var first = true;
  80. var z = JSON.parse(localStorage.getItem('EdenyaShortcut'));
  81. $('#menuValk').html('');
  82. for (var item in z) {
  83. var shortcutToAdd = "<li><small>";
  84. shortcutToAdd += "<i class='fa fa-chevron-up' onclick='$(document).Valk_Up(\"" + item + "\");' />";
  85. shortcutToAdd += "<i class='fa fa-chevron-down' onclick='$(document).Valk_Down(\"" + item + "\");' />";
  86. shortcutToAdd += "<i class='fa fa-edit' onclick='$(document).Valk_Rename(\"" + item + "\");' />";
  87. shortcutToAdd += "<i class='fa fa-times-circle' onclick='$(document).Valk_Del(\"" + item + "\");' />";
  88. shortcutToAdd += '</small> <a href="'+ z[item] +'">'+item+'</a>';
  89. shortcutToAdd += "</li>";
  90. $('#menuValk').append(shortcutToAdd);
  91. }
  92. $('#menuValk li:first-child small i:nth-child(1)').removeAttr("onclick")
  93. $('#menuValk li:last-child small i:nth-child(2)').removeAttr("onclick")
  94. return this; // This is needed so others can keep chaining off of this
  95. };
  96. jQuery.fn.Valk_Rename = function(itemIn){
  97. var nom=prompt('A renommer en ?');
  98. if (nom!==null){
  99. var y = {};
  100. var z = JSON.parse(localStorage.getItem('EdenyaShortcut'));
  101. for (var item in z) {
  102. if(item == itemIn){
  103. y[nom]=z[item];
  104. }else{
  105. y[item]=z[item];
  106. }
  107. };
  108. localStorage.setItem('EdenyaShortcut',JSON.stringify(y));
  109. $(document).Valk_Refresh();
  110. }
  111. return this; // This is needed so others can keep chaining off of this
  112. }
  113. jQuery.fn.Valk_Down = function(itemIn) {
  114. var next = null;
  115. var y = {};
  116. var z = JSON.parse(localStorage.getItem('EdenyaShortcut'));
  117. for (var item in z) {
  118. if (item != itemIn) {
  119. y[item] = z[item];
  120. if (next != null) {
  121. for (var bidule in next) {
  122. y[bidule] = next[bidule];
  123. }
  124. next = null;
  125. }
  126. }else {
  127. next = {};
  128. next[item] = z[item];
  129. }
  130. }
  131. localStorage.setItem('EdenyaShortcut', JSON.stringify(y));
  132. $(document).Valk_Refresh();
  133. return this; // This is needed so others can keep chaining off of this
  134. }
  135. jQuery.fn.Valk_Up = function(itemIn){
  136. var previous = null;var y={};
  137. var z = JSON.parse(localStorage.getItem('EdenyaShortcut'));
  138. for (let item in z) {
  139. if (previous != null){
  140. if (item == itemIn){
  141. y[item]=z[item];
  142. }
  143. for (bidule in previous){
  144. if (bidule != itemIn){
  145. y[bidule]=previous[bidule];
  146. }
  147. }
  148. };
  149. previous={};
  150. previous[item]=z[item]
  151. ;
  152. }
  153. for (var bidule in previous) {
  154. if (bidule != itemIn){
  155. y[bidule]=previous[bidule];
  156. }
  157. }
  158. localStorage.setItem('EdenyaShortcut',JSON.stringify(y));$(document).Valk_Refresh();
  159. return this; // This is needed so others can keep chaining off of this
  160. }
  161. jQuery.fn.Valk_Add = function(){
  162. var nom=prompt('Nom du shortcut ?');
  163. if (nom!==null){
  164. var z = JSON.parse(localStorage.getItem('EdenyaShortcut'));
  165. z[nom]=document.URL;
  166. localStorage.setItem('EdenyaShortcut',JSON.stringify(z));
  167. $(document).Valk_Refresh();
  168. //Valk_Refresh();
  169. }
  170. return this; // This is needed so others can keep chaining off of this
  171. }
  172. jQuery.fn.Valk_Del = function(item){
  173. var z = JSON.parse(localStorage.getItem('EdenyaShortcut'));
  174. delete z[item];
  175. localStorage.setItem('EdenyaShortcut',JSON.stringify(z));
  176. $(document).Valk_Refresh();
  177. return this; // This is needed so others can keep chaining off of this
  178. }
  179. jQuery.fn.Valk_ChgCol = function(id){
  180. var z = JSON.parse(localStorage.getItem('EdenyaColor'));
  181. z[id] = $("#"+id).val();
  182. localStorage.setItem('EdenyaColor',JSON.stringify(z));
  183. location.href = location.href;
  184. return this; // This is needed so others can keep chaining off of this
  185. }
  186.  
  187. // Positionnement sur la colone de gauche pour y ajouter les éléments (raccourcis et gestion des couleurs)
  188. if($(".menu").length > 0){
  189. $(".menu").append('<img src="images/interface/jour/pluie/chains.gif" />');
  190. $(".menu").append('<div id="cadreValk" class="cadre" style="width:194px;" />');
  191. $("#cadreValk").append('<div id="ValkHidden" />');
  192. checkMessages();
  193. $('#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>');
  194. $("#ValkHidden").append("<span title='Ajouter un raccourci'><a href='#' onclick='$(document).Valk_Add()'> <i class='fa fa-plus-circle'/> Raccourci</a></span>");
  195. $("#cadreValk").append('<hr /><menu id="menuValk" />');
  196. $("#cadreValk").append('<hr /><div>Couleurs utilisées :</div>');
  197.  
  198. var localShortcut = localStorage.getItem('EdenyaShortcut');
  199. if (localShortcut === null) {
  200. var shortcut = { 'accueil': 'https://www.edenya.net/_vahal/' };
  201. localStorage.setItem('EdenyaShortcut', JSON.stringify(shortcut));
  202. localShortcut = localStorage.getItem('EdenyaShortcut');
  203. }
  204. var localShortcutParsed = JSON.parse(localShortcut);
  205. $(document).Valk_Refresh();
  206.  
  207. var localTips = localStorage.getItem('EdenyaTips');
  208. if (localTips === null) {
  209. localTips = {};
  210. localTips.cadre2 = "Couleur générale titre, panneau PJ,...";
  211. localTips.ligneA = "Couleur texte hors balises RP";
  212. localTips.dialogue = "Texte d'un dialogue";
  213. localTips.narration = "Texte de narration";
  214. localTips.cri = "Texte crié";
  215. localTips.hj = "descriptions HJ";
  216. localTips.BlackDate = "couleur des dates dans les forums";
  217. localStorage.setItem('EdenyaTips', JSON.stringify(localTips));
  218. localTips = localStorage.getItem('EdenyaTips');
  219. }
  220. var localTipsParsed = JSON.parse(localTips);
  221.  
  222. for (item in localColorParsed) {
  223. var itemToAdd = '<input id="' + item + '" type="color" class="bouton" value="'+ localColorParsed[item] +'" style="width:25;padding:0"';
  224. itemToAdd += " onChange='$(document).Valk_ChgCol(\"" + item + "\")'";
  225. itemToAdd += ' onMouseOver=\'ShowHelpTab("<b>Usage :</b><br>'+(localTipsParsed[item]).replace("'", " ")+'")\'';
  226. itemToAdd += ' onMouseOut="HideHelp()"';
  227. itemToAdd += ' title="'+ localTipsParsed[item] +'"';
  228. itemToAdd += '</input>';
  229. $("#cadreValk").append(itemToAdd);
  230. }
  231. var localPreview = localStorage.getItem('EdenyaPreview');
  232. if(localPreview === null) {
  233. localPreview = true;
  234. localStorage.setItem('EdenyaPreview', localPreview);
  235. }
  236. var localPreviewParsed = JSON.parse(localPreview);
  237. $("#cadreValk").append('<span>Prévisualisation de post : <input type="checkbox" onclick="localStorage.setItem(\'EdenyaPreview\', !JSON.parse(localStorage.getItem(\'EdenyaPreview\')));" '+ (localPreviewParsed?'checked':'') +' ></input></span>');
  238. }
  239. }
  240. if (locationPath[locationPath.length - 2] == "_vahal" && locationPath[locationPath.length - 1] == "vide.php" && ((document.getElementsByClassName("titre"))[0]).innerText == "Nouveau message" && JSON.parse(localStorage.getItem('EdenyaPreview'))){
  241. jQuery.fn.Valk_insertBalise = function(balise){
  242. var field = $('#message')[0];
  243. $('#message').focus();
  244. var debut = field.selectionStart;
  245. var fin = field.selectionEnd;
  246. var startSelection = $('#message').val().substring(0, debut);
  247. var currentSelection = $('#message').val().substring(debut, fin);
  248. var endSelection = $('#message').val().substring(fin);
  249.  
  250. $('#message').val(startSelection + "["+balise+"]" + currentSelection + "[/"+balise+"]" + endSelection);
  251. $('#message').focus(); // On remet le focus sur la zone de texte
  252. field.setSelectionRange(startSelection.length + balise.length + 2, startSelection.length + balise.length + 2 + currentSelection.length);
  253. return this; // This is needed so others can keep chaining off of this
  254. };
  255. jQuery.fn.Valk_Previsualise = function(){
  256. var initial_texte = $("[name='message']").val();
  257. var regexpOpen = /\[(narration|dialogue|cri|hj|ecriture)\]/g;
  258. var regexpClose = /\[\/(narration|dialogue|cri|hj|ecriture)\]/g;
  259. var previsu_texte = initial_texte.replace(regexpOpen, "<span class=\"$1\">");
  260. previsu_texte = previsu_texte.replace(regexpClose, "</span><!--$1-->");
  261. var regexpImg = /\[img\]([^\[]*)\[\/img\]/g;
  262. previsu_texte = previsu_texte.replace(regexpImg, "<img src=\"$1\" border=\"0\"\/>");
  263. previsu_texte = previsu_texte.replace(/\n/g, "<"+"br/>");
  264. $("#previewText").html(previsu_texte);
  265. return this; // This is needed so others can keep chaining off of this
  266. };
  267.  
  268. $(".saisie tbody tr td img").attr("onclick", function (){var z=$(this).attr("onclick"); z=z.replace("clickfuncmult(this,'","$(document).Valk_insertBalise('");return z})
  269. $("[name='Submit']").after("<button class='bouton' type='button' onclick='$(document).Valk_Previsualise()'>Prévisualiser</button>")
  270. $("table.saisie").after("<hr /><div id='previewText' style='text-align:left;'></div><hr />");
  271. }
  272. window.oncontextmenu = null;
  273. })();