Usuario:Ciencia Al Poder/calculolistaestadisticasbase.js

De WikiDex
Ir a la navegaciónIr a la búsqueda

Nota: Después de publicar, quizás necesite actualizar la caché de su navegador para ver los cambios.

  • Firefox/Safari: Mantenga presionada la tecla Shift mientras pulsa el botón Actualizar, o presiona Ctrl+F5 o Ctrl+R (⌘+R en Mac)
  • Google Chrome: presione Ctrl+Shift+R (⌘+Shift+R en Mac)
  • Internet Explorer/Edge: mantenga presionada Ctrl mientras pulsa Actualizar, o presione Ctrl+F5
  • Opera: Presiona Ctrl+F5.
/*
 * Cálculo de las columnas media, desviación típica y suma en [[Lista de Pokémon según sus características base]]
 * */
(function() {
	var _init = function() {
		if (mw.config.get('wgTitle') != 'Lista de Pokémon con sus características base') {
			alert('Solo debe usarse en el artículo [[Lista de Pokémon con sus características base]]');
			return;
		}
		if (mw.config.get('wgAction') != 'edit' && mw.config.get('wgAction') != 'submit') {
			alert('Solo puede usarse cuando se esté editando el artículo');
			return;
		}
		_recalcularLista();
	},
	_recalcularLista = function() {
		var txt, antes, despues, idx, cont, filas, reCheckNumIni, columnas, i, j, datos, suma, media, desv1, desviacion, reRowspan, mRowspan, rowspan, extracolnum, cellVal;
		txt = $('#wpTextbox1').val();
		idx = txt.indexOf('{|');
		if (idx == -1) {
			alert('No se encontró {|');
			return;
		}
		antes = txt.substr(0, idx + 2);
		cont = txt.substr(idx + 2);
		idx = cont.indexOf('|}');
		if (idx == -1) {
			alert('No se encontró |}');
			return;
		}
		despues = cont.substr(idx);
		cont = cont.substr(0, idx).replace('\r');
		filas = cont.split('|-');
		reCheckNumIni = /\s*\!(\s*rowspan="\d"\s*\|)?\s*\d+ *\n/;
		// Hay rowspan en la primera columna
		reRowspan = /rowspan="(\d)"/;
		rowspan = 1;
		extracolnum = 0;
		for (i = 0; i < filas.length; i++) {
			if (rowspan == 1 && !reCheckNumIni.test(filas[i])) {
				if (rowspan == 1 && i > 5) {
					console.log(filas[i]);
					console.log('Fila mayor que 5 sin datos!');
					return;
				}
				// Será un encabezado
				continue;
			}
			columnas = filas[i].split('\n');
			datos = [];
			if (rowspan == 1) {
				mRowspan = reRowspan.exec(columnas[1]);
				if (mRowspan) {
					rowspan = parseInt(mRowspan[1], 10);
				}
				extracolnum = 0;
			} else {
				extracolnum = -1;
				rowspan--;
			}
			for (j = 4; j < 4 + 6; j++) {
				// Eliminar el |
				cellVal = columnas[extracolnum + j].substr(1);
				if (cellVal.indexOf('<') != -1) {
					cellVal = cellVal.substr(0, cellVal.indexOf('<'));
				}
				cellVal = $.trim(cellVal);
				datos[j - 4] = parseFloat(cellVal);
			}
			suma = 0;
			for (j = 0; j < datos.length; j++) {
				suma += datos[j];
			}
			media = suma / 6;
			desv1 = 0;
			for (j = 0; j < datos.length; j++) {
				desv1 += Math.pow(datos[j] - media, 2);
			}
			desviacion = Math.sqrt(desv1 / 5);
			columnas[extracolnum + 10] = '| ' + _formatDecimal(Math.round(media * 100) / 100, 2);
			columnas[extracolnum + 11] = '| ' + _formatDecimal(Math.round(desviacion * 100) / 100, 2);
			columnas[extracolnum + 12] = '| ' + suma;
			columnas[extracolnum + 13] = '';
			filas[i] = columnas.join('\n');
		}
		$('#wpTextbox1').val(antes + filas.join('|-') + despues);
	},
	_formatDecimal = function(d, nd) {
		var str, idx, cur;
		str = new String(d);
		str = str.replace('.', ',');
		idx = str.indexOf(',');
		if (idx == -1) {
			cur = 0;
			str = str + ',';
		} else {
			cur = str.length - idx - 1;
		}
		while (cur < nd) {
			str += '0';
			cur++;
		}
		return str;
	};
	
	$(_init);
})();