Stats Xente Script

Example of description of statsxente

当前为 2024-04-16 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Stats Xente Script
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.66
  5. // @description Example of description of statsxente
  6. // @author xente
  7. // @match https://www.managerzone.com/*
  8. // @icon https://www.google.com/s2/favicons?sz=64&domain=managerzone.com
  9. // @grant GM_xmlhttpRequest
  10. // @grant GM_addStyle
  11. // @require https://code.jquery.com/jquery-3.7.1.js
  12. // ==/UserScript==
  13.  
  14. (function() {
  15. 'use strict';
  16.  
  17.  
  18. GM_addStyle(`
  19. /* The Modal (background) test 2*/
  20. .modal {
  21. display: none;
  22. /* Hidden by default */
  23. position: fixed;
  24. /* Stay in place */
  25. z-index: 1;
  26. /* Sit on top */
  27. padding-top: 25px;
  28. /* Location of the box */
  29. left: 0;
  30. top: 0;
  31. width: 100%;
  32. /* Full width */
  33. height: 100%;
  34. /* Full height */
  35. overflow: auto;
  36. /* Enable scroll if needed */
  37. background-color: rgb(0, 0, 0);
  38. /* Fallback color */
  39. background-color: rgba(0, 0, 0, 0.75);
  40. /* Black w/ opacity */
  41. }
  42.  
  43. /* Modal Content */
  44. .modal-content {
  45. background-color: #fefefe00;
  46. margin: auto;
  47. padding: 20px;
  48. width: 95%;
  49. }
  50.  
  51. /* The Close Button */
  52. .close {
  53. color: #aaaaaa;
  54. float: right;
  55. font-size: 28px;
  56. font-weight: bold;
  57. }
  58.  
  59. .close:hover,
  60. .close:focus {
  61. color: #000;
  62. text-decoration: none;
  63. cursor: pointer;
  64. }
  65.  
  66.  
  67. /* The Modal (background) */
  68. .modal_1 {
  69. display: none;
  70. /* Hidden by default */
  71. position: fixed;
  72. /* Stay in place */
  73. z-index: 1;
  74. /* Sit on top */
  75. padding-top: 25px;
  76. /* Location of the box */
  77. left: 0;
  78. top: 0;
  79. width: 100%;
  80. /* Full width */
  81. height: 100%;
  82. /* Full height */
  83. overflow: auto;
  84. /* Enable scroll if needed */
  85. background-color: rgb(0, 0, 0);
  86. /* Fallback color */
  87. background-color: rgba(0, 0, 0, 0.75);
  88. /* Black w/ opacity */
  89. }
  90.  
  91. /* Modal Content */
  92. .modal-content_1 {
  93. background-color: #fefefe00;
  94. margin: auto;
  95. padding: 20px;
  96. width: 45%;
  97. }
  98.  
  99. /* The Close Button */
  100. .close_1 {
  101. color: #aaaaaa;
  102. float: right;
  103. font-size: 28px;
  104. font-weight: bold;
  105. }
  106.  
  107. .close_1:hover,
  108. .close_1:focus {
  109. color: #000;
  110. text-decoration: none;
  111. cursor: pointer;
  112. }
  113.  
  114. .modal_cargando {
  115. display: none;
  116. /* Hidden by default */
  117. position: fixed;
  118. /* Stay in place */
  119. z-index: 1;
  120. /* Sit on top */
  121. padding-top: 25px;
  122. /* Location of the box */
  123. left: 0;
  124. top: 0;
  125. width: 100%;
  126. /* Full width */
  127. height: 100%;
  128. /* Full height */
  129. overflow: auto;
  130. /* Enable scroll if needed */
  131. background-color: rgb(0, 0, 0);
  132. /* Fallback color */
  133. background-color: rgba(0, 0, 0, 0.75);
  134. /* Black w/ opacity */
  135. }
  136.  
  137. /* Modal Content */
  138. .modal-content_cargando {
  139. background-color: #fefefe00;
  140. padding-top: 15%;
  141. width: 95%;
  142. display: flex;
  143. justify-content: center;
  144. align-items: center;
  145. }
  146.  
  147. /* The Close Button */
  148. .close_cargando {
  149. color: #aaaaaa;
  150. float: right;
  151. font-size: 28px;
  152. font-weight: bold;
  153. }
  154.  
  155. .close_cargando:hover,
  156. .close_cargando:focus {
  157. color: #000;
  158. text-decoration: none;
  159. cursor: pointer;
  160. }
  161.  
  162. `);
  163.  
  164.  
  165.  
  166. var cats = {};
  167. cats["senior"] = "senior";
  168. cats["world"] = "seniorw";
  169. cats["u23"] = "SUB23";
  170. cats["u21"] = "SUB21";
  171. cats["u18"] = "SUB18";
  172. cats["u23_world"] = "SUB23w";
  173. cats["u21_world"] = "SUB21w";
  174. cats["u18_world"] = "SUB18w";
  175. window.cats=cats;
  176.  
  177.  
  178. var langs = new Map();
  179. langs.set('es', 'SPANISH');
  180. langs.set('ar', 'SPANISH')
  181. langs.set('en', 'ENGLISH');
  182. langs.set('br', 'PORTUGUES');
  183. langs.set('pt', 'PORTUGUES');
  184. langs.set('pl', 'POLISH');
  185. langs.set('ro', 'ROMANIAN');
  186. langs.set('tr', 'TURKISH');
  187.  
  188. var lanCookie = getCookie("MZLANG");
  189. if(langs.has(lanCookie)){
  190. window.lang=langs.get(lanCookie);
  191. }else{
  192. window.lang="ENGLISH";
  193. }
  194.  
  195. console.log(window.lang)
  196.  
  197.  
  198. // Ejemplo de uso
  199. var sportCookie = getCookie("MZSPORT");
  200. console.log(sportCookie);
  201. var lsport="F"
  202. if(sportCookie=="hockey"){
  203. lsport="H";
  204. }
  205. window.sport=sportCookie;
  206. window.lsport=lsport;
  207.  
  208.  
  209. document.addEventListener("DOMContentLoaded", function() {
  210. var urlParams = new URLSearchParams(window.location.search);
  211. if((urlParams.has('p')) && (urlParams.get('p') === 'league')){
  212.  
  213.  
  214. leagues();
  215.  
  216. }
  217.  
  218. if((urlParams.has('p')) && (urlParams.get('p') === 'federations')&& (urlParams.get('sub') === 'clash')){
  219.  
  220.  
  221. clash();
  222.  
  223. }
  224.  
  225.  
  226. });
  227.  
  228.  
  229. function clash(){
  230.  
  231. var badges = document.getElementsByClassName("fed_badge");
  232. var regex = /fid=(\d+)/;
  233. var srcLocal = badges[0].getAttribute('src');
  234. var local_id = srcLocal.match(regex);
  235. var src_away = badges[1].getAttribute('src');
  236. var away_id = src_away.match(regex);
  237.  
  238. var names = document.getElementsByClassName("name-score name-score--desktop text-ellipsis")
  239.  
  240.  
  241.  
  242.  
  243. var elems = document.getElementsByClassName("mainContent top-pane top-pane--desktop");
  244. var tabla = elems[0]
  245.  
  246. var contenidoNuevo="</br><center><table><tr><td class='subheader clearfix'>Clash Compare</td></tr><tr><td><center><img id=clashCompare src='https://i.imgur.com/G76Jm71.png' style='width:45px; height:45px;'/></center></td></tr></table></center>";
  247. tabla.insertAdjacentHTML('beforeend', contenidoNuevo)
  248.  
  249. document.getElementById("clashCompare").addEventListener('click', function () {
  250. var link = "https://statsxente.com/MZ1/Functions/loadClashFederationData.php?tamper=yes&fid="+local_id[1]+"&fid1="+away_id[1]+"&fede="+encodeURIComponent(names[0].innerText)+"&fede1="+encodeURIComponent(names[1].innerText)+"&idioma=SPANISH&divisa=EUR&sport=soccer";
  251. openWindow(link,0.95,1.25);
  252. });
  253.  
  254. }
  255.  
  256.  
  257. var teams_data="";
  258.  
  259. function leagues(){
  260.  
  261.  
  262.  
  263.  
  264.  
  265.  
  266. var linkIds=""
  267. var urlParams = new URLSearchParams(window.location.search);
  268. setTimeout(function() {
  269.  
  270. var elems = document.getElementsByClassName("nice_table");
  271. var tabla = elems[0]
  272. var thSegundo = tabla.querySelector("thead th:nth-child(2)");
  273. thSegundo.style.width = "250px";
  274.  
  275.  
  276. var values = new Map();
  277.  
  278. // Agregar elementos al mapa
  279. values.set('valor23', 'Value U23');
  280. values.set('valor21', 'Value U21');
  281. values.set('valor18', 'Value U18');
  282. values.set('valorUPSenior', 'Value LM');
  283. values.set('valorUPSUB23', 'Value LM U23');
  284. values.set('valorUPSUB21', 'Value LM U21');
  285. values.set('valorUPSUB18', 'Value LM U18');
  286. values.set('valor11', 'TOP 11');
  287. values.set('valor11_23', 'TOP 11 U23');
  288. values.set('valor11_21', 'TOP 11 U21');
  289. values.set('valor11_18', 'TOP 11 U18');
  290. values.set('elo', 'ELO Score');
  291. values.set('elo23', 'ELO Score U23');
  292. values.set('elo21', 'ELO Score U21');
  293. values.set('elo18', 'ELO Score U18');
  294.  
  295. var contenidoNuevo = '<div id=testClick><center><table><tr><td><label><input class="statsxente" type="checkbox" id="valor" value="Value">Value</label></td>';
  296. values.forEach(function(valor, clave) {
  297. /*if(clave=="valorUPSenior"){
  298. contenidoNuevo+="</tr><tr>";
  299. }*/
  300. if(clave=="valor11"){
  301. contenidoNuevo+="</tr><tr>";
  302. }
  303. /* if(clave=="elo"){
  304. contenidoNuevo+="</tr><tr>";
  305. }*/
  306. contenidoNuevo+='<td><label><input class="statsxente" type="checkbox" value="'+valor+'" id="'+clave+'">'+valor+'</label></td>';
  307.  
  308. });
  309.  
  310.  
  311.  
  312. contenidoNuevo+="</tr></table></center></div>";
  313.  
  314.  
  315. values.set('valor', 'Value');
  316.  
  317. elems = document.getElementsByClassName("nice_table");
  318. tabla = elems[0]
  319.  
  320.  
  321. tabla.insertAdjacentHTML('beforebegin', contenidoNuevo);
  322.  
  323.  
  324.  
  325. values.forEach(function(valor, clave) {
  326.  
  327. var elemento = document.getElementById(clave);
  328. elemento.addEventListener('click', handleClick);
  329.  
  330. });
  331.  
  332.  
  333.  
  334. // Añadir una nueva celda en la fila de encabezados
  335. var nuevaCeldaEncabezado = document.createElement("th");
  336. nuevaCeldaEncabezado.textContent = "Stats Xente";
  337. nuevaCeldaEncabezado.style.backgroundColor="#246355"
  338. nuevaCeldaEncabezado.style.color="white"
  339. var ser = document.getElementsByClassName("seriesHeader")
  340. document.getElementsByClassName("seriesHeader")[0].appendChild(nuevaCeldaEncabezado);
  341.  
  342.  
  343. nuevaCeldaEncabezado = document.createElement("th");
  344. nuevaCeldaEncabezado.textContent = "Value";
  345. nuevaCeldaEncabezado.style.backgroundColor="#246355"
  346. nuevaCeldaEncabezado.style.color="white"
  347. ser = document.getElementsByClassName("seriesHeader")
  348. document.getElementsByClassName("seriesHeader")[0].appendChild(nuevaCeldaEncabezado);
  349.  
  350. // Añadir una nueva columna al final de cada fila de datos
  351. var contIds=0
  352. var filasDatos = tabla.getElementsByTagName("tbody")[0].getElementsByTagName("tr");
  353. for (var i = 0; i < filasDatos.length; i++) {
  354. var celda = tabla.rows[i+1].cells[1];
  355.  
  356. var equipo=celda.textContent.trim()
  357. var iniIndex = celda.innerHTML.indexOf("tid=");
  358. var lastIndex = celda.innerHTML.indexOf("\">", iniIndex+4);
  359. var data=String(celda.innerHTML)
  360. var id=data.substring(iniIndex+4,lastIndex)
  361. linkIds+="&idEquipo"+contIds+"="+id
  362. contIds++
  363. celda.innerHTML+="<input type='hidden' id='team_"+id+"' value='"+equipo+"'/>"
  364.  
  365.  
  366.  
  367.  
  368. var nuevaColumna = document.createElement("td");
  369. // var iner = "<img src='https://statsxente.com/MZ1/View/Images/detail.png' width='20px' height='20px' onclick=\"openModalStatsEquiposHistoricoFiltro1("+id+",'team_"+id+"','z_hola',77,77,'soccer')\"/>";
  370. var iner = "<img src='https://statsxente.com/MZ1/View/Images/detail.png' width='20px' height='20px' id='but"+id+"' style='cursor:pointer;'/>";
  371. iner += "<img src='https://statsxente.com/MZ1/View/Images/graph.png' width='20px' height='20px' id='but1"+id+"' style='cursor:pointer;'/>";
  372. iner += "<img src='https://statsxente.com/MZ1/View/Images/report.png' width='20px' height='20px' onclick=\"openModalStatsEquiposHistoricoFiltro1("+id+",'team_"+id+"','z_hola',77,77,'soccer')\"/>";
  373. var cat = cats[urlParams.get('type')]
  374. nuevaColumna.innerHTML=iner
  375. filasDatos[i].appendChild(nuevaColumna);
  376.  
  377. nuevaColumna = document.createElement("td");
  378.  
  379.  
  380. //var link="https://statsxente.com/MZ1/Graficos/graficoProgresoEquipo.php?idEquipo=276402&modal=yes&idioma=SPANISH&divisa=EUR&deporte=F"
  381.  
  382.  
  383.  
  384. (function (currentId,currentLSport,lang) {
  385. document.getElementById("but1" + currentId).addEventListener('click', function () {
  386. var link = "https://statsxente.com/MZ1/Graficos/graficoProgresoEquipo.php?idEquipo="+currentId+"&idioma="+lang+"&divisa=EUR&deporte="+currentLSport;
  387. openWindow(link,0.95,1.25);
  388. });
  389. })(id,window.lsport,window.lang);
  390.  
  391. (function (currentId, currentEquipo,currentCat,currentSport,lang) {
  392. document.getElementById("but" + currentId).addEventListener('click', function () {
  393. var link = "https://statsxente.com/MZ1/View/filtroStatsEquiposHistorico.php?tamper=yes&idEquipo=" + currentId + "&idioma="+lang+"&modal=yes&deporte="+currentSport+"&season=77&season_actual=77&categoria="+currentCat+"&equipo=" + currentEquipo + "&cerrar=no";
  394. openWindow(link,0.95,1.25);
  395. });
  396. })(id, equipo,cat,window.sport,window.lang);
  397.  
  398.  
  399.  
  400.  
  401. }
  402.  
  403. console.log(linkIds)
  404. GM_xmlhttpRequest({
  405. method: "GET",
  406. url: "https://bdstatsxente.sytes.net/MZ1/View/test6.php?team_id=771617&deporte=soccer&world=yes"+linkIds,
  407. headers: {
  408. "Content-Type": "application/json"
  409. },
  410. onload: function(response) {
  411. var jsonResponse = JSON.parse(response.responseText);
  412.  
  413. teams_data=jsonResponse;
  414. var filasDatos = tabla.getElementsByTagName("tbody")[0].getElementsByTagName("tr");
  415. for (var i = 0; i < filasDatos.length; i++) {
  416. var celda = tabla.rows[i+1].cells[1];
  417.  
  418. var equipo=celda.textContent.trim()
  419. var iniIndex = celda.innerHTML.indexOf("tid=");
  420. var lastIndex = celda.innerHTML.indexOf("\">", iniIndex+4);
  421. var data=String(celda.innerHTML)
  422. var id=data.substring(iniIndex+4,lastIndex)
  423.  
  424.  
  425.  
  426. var nuevaColumna = document.createElement("td");
  427.  
  428.  
  429. if (jsonResponse[id] && jsonResponse[id]["valor"] !== undefined) {
  430. var valor = new Intl.NumberFormat("es-ES").format(Math.round(jsonResponse[id]["valor"]))
  431. }else{
  432. var valor=0;
  433. }
  434. nuevaColumna.innerHTML=valor
  435. filasDatos[i].appendChild(nuevaColumna);
  436.  
  437.  
  438.  
  439.  
  440. }
  441.  
  442.  
  443.  
  444.  
  445. var thead=document.getElementsByClassName("seriesHeader")[0]
  446.  
  447. console.log(thead)
  448. var ths = thead.querySelectorAll("th");
  449.  
  450. // Agregar event listener a cada th
  451. ths.forEach(function(th, index) {
  452. th.addEventListener("click", function() {
  453. ordenarTabla(index);
  454. });
  455. });
  456.  
  457.  
  458.  
  459. }
  460. });
  461.  
  462.  
  463.  
  464.  
  465.  
  466. }, 3000);
  467.  
  468.  
  469.  
  470.  
  471.  
  472.  
  473. }
  474.  
  475.  
  476.  
  477.  
  478.  
  479.  
  480. function openWindow(link,porAncho,porAlto){
  481. var ventanaAncho=(window.innerWidth)*porAncho
  482. var ventanaAlto= (window.innerHeight)*porAlto
  483. console.log(ventanaAlto)
  484. // Calcular las coordenadas para centrar la ventana
  485. var ventanaIzquierda = (window.innerWidth - ventanaAncho) / 2;
  486. var ventanaArriba = (window.innerHeight - ventanaAlto) / 2;
  487.  
  488. // Opciones de la ventana (puedes ajustar según tus necesidades)
  489. var opcionesVentana = "width=" + ventanaAncho +
  490. ",height=" + ventanaAlto +
  491. ",left=" + ventanaIzquierda +
  492. ",top=" + ventanaArriba;
  493. // Abrir la nueva ventana en el centro
  494. window.open(link, "_blank", opcionesVentana);
  495. }
  496.  
  497.  
  498.  
  499.  
  500. function handleClick(event) {
  501.  
  502.  
  503.  
  504. var elems = document.getElementsByClassName("nice_table");
  505. var tabla = elems[0]
  506. var filas = tabla.getElementsByTagName("tbody")[0].getElementsByTagName("tr");
  507.  
  508. // Obtener el segundo th del thead
  509. var thSegundo = tabla.querySelector("thead th:nth-child(2)");
  510.  
  511. // Cambiar el ancho del segundo th
  512. thSegundo.style.width = "250px";
  513.  
  514. // Iterar sobre cada fila
  515. for (var i = 0; i < filas.length; i++) {
  516. // Obtener todas las celdas de la fila
  517.  
  518.  
  519.  
  520. var celda = tabla.rows[i+1].cells[1];
  521.  
  522. var equipo=celda.textContent.trim()
  523. var iniIndex = celda.innerHTML.indexOf("tid=");
  524. var lastIndex = celda.innerHTML.indexOf("\">", iniIndex+4);
  525. var data=String(celda.innerHTML)
  526. var id=data.substring(iniIndex+4,lastIndex)
  527.  
  528.  
  529. var celdas = filas[i].getElementsByTagName("td");
  530.  
  531. // Obtener la última celda de la fila
  532. var ultimaCelda = celdas[celdas.length - 1];
  533.  
  534.  
  535.  
  536. console.log(teams_data[id])
  537.  
  538. var valor= new Intl.NumberFormat("es-ES").format(Math.round(teams_data[id][event.target.id]))
  539. ultimaCelda.innerHTML = valor;
  540. }
  541. var checkboxes = document.querySelectorAll('.statsxente');
  542.  
  543.  
  544.  
  545. var ultimaFilaEncabezado = tabla.querySelector("thead tr:last-child");
  546.  
  547. // Obtener la última celda de encabezado (<th>) dentro de la última fila de encabezado
  548. var ultimaCeldaEncabezado = ultimaFilaEncabezado.querySelector("th:last-child");
  549.  
  550. // Cambiar el texto de la última celda de encabezado
  551. ultimaCeldaEncabezado.textContent = event.target.value;
  552.  
  553.  
  554. // Iterar sobre los elementos
  555. checkboxes.forEach(function(checkbox) {
  556. console.log(checkbox.id )
  557. // Verificar si el checkbox no tiene el ID "hola"
  558. if (checkbox.id !== event.target.id) {
  559. // Deseleccionar el checkbox
  560. checkbox.checked = false;
  561. }
  562. });
  563.  
  564.  
  565.  
  566.  
  567.  
  568.  
  569.  
  570. var columna=12
  571.  
  572.  
  573.  
  574. }
  575.  
  576.  
  577. function ordenarTabla(columna){
  578.  
  579.  
  580. var elems = document.getElementsByClassName("nice_table");
  581. var tabla = elems[0]
  582.  
  583. var filas, switching, i, x, y, debeCambiar, direccion, cambioRealizado;
  584.  
  585. switching = true;
  586. // Establecer la dirección de orden inicial a ascendente
  587. direccion = "descendente";
  588. // Continuar ordenando hasta que no haya más cambios realizados
  589. while (switching) {
  590. switching = false;
  591. filas = tabla.rows;
  592. // Recorrer todas las filas excepto la primera (encabezados)
  593. for (i = 1; i < (filas.length - 1); i++) {
  594. debeCambiar = false;
  595. // Obtener los elementos a comparar, uno de la columna actual y otro de la siguiente
  596. x = filas[i].getElementsByTagName("td")[columna];
  597. y = filas[i + 1].getElementsByTagName("td")[columna];
  598. // Eliminar los separadores de miles y convertir a números
  599. var xValue = parseFloat(x.innerHTML.replace(/[^0-9.-]+/g,""));
  600. var yValue = parseFloat(y.innerHTML.replace(/[^0-9.-]+/g,""));
  601. // Comparar los elementos según la dirección de orden
  602. if (direccion == "ascendente") {
  603. if (isNaN(xValue)) {
  604. if (x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) {
  605. debeCambiar = true;
  606. break;
  607. }
  608. } else {
  609. if (xValue > yValue) {
  610. debeCambiar = true;
  611. break;
  612. }
  613. }
  614. } else if (direccion == "descendente") {
  615. if (isNaN(xValue)) {
  616. if (x.innerHTML.toLowerCase() < y.innerHTML.toLowerCase()) {
  617. debeCambiar = true;
  618. break;
  619. }
  620. } else {
  621. if (xValue < yValue) {
  622. debeCambiar = true;
  623. break;
  624. }
  625. }
  626. }
  627. }
  628. if (debeCambiar) {
  629. // Si debe cambiar, marcarlo y cambiar el orden de las filas
  630. filas[i].parentNode.insertBefore(filas[i + 1], filas[i]);
  631. switching = true;
  632. // Marcar que se realizó un cambio
  633. cambioRealizado = true;
  634. } else {
  635. // Si no se realizó ningún cambio y se estaba ordenando de forma ascendente,
  636. // cambiar a orden descendente y volver a empezar
  637. if (!cambioRealizado && direccion == "descendente") {
  638. direccion = "ascendente";
  639. switching = true;
  640. }
  641. }
  642. }
  643.  
  644.  
  645.  
  646. filas = tabla.getElementsByTagName("tbody")[0].getElementsByTagName("tr");
  647.  
  648. // Recorrer todas las filas
  649. for ( i = 0; i < filas.length; i++) {
  650. // Obtener el primer td de la fila
  651. var primerTd = filas[i].querySelector("td");
  652.  
  653. // Establecer el contenido del primer td
  654. primerTd.innerHTML = (i+1);
  655. }
  656. }
  657.  
  658.  
  659.  
  660.  
  661. function getCookie(nombre) {
  662. var regex = new RegExp("(?:(?:^|.*;\\s*)" + nombre + "\\s*\\=\\s*([^;]*).*$)|^.*$");
  663. var valorCookie = document.cookie.replace(regex, "$1");
  664. return decodeURIComponent(valorCookie);
  665. }
  666.  
  667.  
  668. // Your code here...
  669. })();