baita ano

Conta quantas espécies de aves da lista do usuário tiveram seu registro em determinado local

// ==UserScript==
// @name        baita ano
// @namespace   yadaa
// @description Conta quantas espécies de aves da lista do usuário tiveram seu registro em determinado local
// @include     https://www.wikiaves.com/especies.php?*&o=3&ef=
// @include     https://www.wikiaves.com.br/especies.php?*&o=3&ef=
// @version     1.7
// @require     http://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js
// @grant       GM_addStyle
// ==/UserScript==

var extrato,seletor,seletorb,seletorc,quiqui,queque,tt,pen,tem,extcid,cc,dd,temest,itera;
var barrawidth=0;
var pe = "&p=";
var emno = " com registros fotográficos em ";
var lifers = []; //todo: novo
var especies;

if(!('contains' in String.prototype)){String.prototype.contains = function(str, startIndex){return -1 !== String.prototype.indexOf.call(this, str, startIndex);};}

function comeca() {
  var lugar = '.ttPage';
  $(lugar).append($('\
	<form action = >\
	<fieldset>\
	<span>... no Baita Ano RS de:</span>\
	<select id = "selLocal">\
	<option>2018</option>\
	<option>2017</option>\
	<option>2016</option>\
	<option>2015</option>\
	<option>2014</option>\
	<option>2013</option>\
	<option>2012</option>\
	<option>2011</option>\
	<option>2010</option>\
	<option>2009</option>\
	<option>2008</option>\
 </select>\
  <input type = "button"\
    value = "filtrar"\
    id = "botaum"\
  </fieldset>\
 </form>\
'));
  $("#botaum").click (analisa);
}

function analisa() {
	itera = /RS.*\/2018/ // Regular Expression p pegar registro
	//TODO: mudar pagina antes da analize para &o=3
	var lugarbarra = '.ttPage > form:nth-child(1) > fieldset:nth-child(1)';
	$(lugarbarra).append($('\
		<style>\
	#myProgress {\
  position: relative;\
  width: 100%;\
  height: 30px;\
  background-color: #ddd;\
	}\
	#myBar {\
  position: absolute;\
  width: 0%;\
  height: 100%;\
  background-color: #4CAF50;\
	}\
	#label {\
  text-align: center;\
  line-height: 30px;\
  color: white;\
	}\
	</style>\
		<div id="myProgress">\
  <div id="myBar">\
    <div id="label">0%</div>\
  </div>\
	</div>\
	'));		
		
		
  var tabela = document.getElementsByClassName('especies') [0];
  var local = document.getElementById("selLocal");
  var localb = "/"+local.options[local.selectedIndex].text;
	var localc = "/RS";
	document.getElementById("selLocal").disabled = true;
	document.getElementById("botaum").disabled = true;
	$(".textpadding > div:nth-child(6) > b:nth-child(1) > a:nth-child(1)").text("");
	$(".textpadding > div:nth-child(6) > b:nth-child(2) > a:nth-child(1)").text("");
	$(".textpadding > div:nth-child(6) > b:nth-child(3) > a:nth-child(1)").text("");
	$(".titulo > td:nth-child(1) > a:nth-child(1)").removeAttr("href");
	$(".titulo > td:nth-child(2) > a:nth-child(1)").removeAttr("href");
	$(".titulo > td:nth-child(3) > a:nth-child(1)").removeAttr("href");
	$(".titulo > td:nth-child(4) > a:nth-child(1)").removeAttr("href");
	$(".titulo > td:nth-child(5) > a:nth-child(1)").removeAttr("href");
	
	
	//emno=" ";
  extcid = conecta("especies.php?&t=e&e=20");
	
  for (var i = 2, row; i<=tabela.rows.length; i++) {
    row = tabela.rows[i];
		pen = Math.ceil(parseFloat($("tr.especie:nth-child("+i+") > td:nth-child(5) > a:nth-child(1)").text())/10);
		seletorc =  'tr.especie:nth-child(' + i + ') > td:nth-child(3) > a:nth-child(1)';
		quuquu = $(seletorc).text();
		
		if (!extcid.contains(quuquu)){
			var cuia = 'tr.especie:nth-child(' + i + ')';
			$(cuia).hide();
		}
		
		else{
		
    seletor = 'tr.especie:nth-child(' + i + ') > td:nth-child(5) > a:nth-child(1)';
    seletorb = 'tr.especie:nth-child(' + i + ') > td:nth-child(4) > a:nth-child(1)';
    quiqui = $(seletor).attr('href'); //registros foto
    queque = $(seletorb).attr('href'); //registros sons
		
    
	if (quiqui === undefined) { //SOH SOM
    	
        var cuia = 'tr.especie:nth-child(' + i + ')';
        $(cuia).hide();
    }
			
			
    else { // imagem E som ou soh imagem
	
	
				for (var k=1;k<=pen;k++){
					cc=(conecta(quiqui+pe+k));
					
					cc=cc.replace("./2018","YADA");
					cc=cc.replace("2018/2018","YADA");
					cc=cc.replace("href=\"/2018","YADA");
					cc=cc.replace(/\r?\n|\r/g, " "); //LIMPA paragrafos
					cc=cc.replace(/<\/?[^>]+(>|$)/g, ""); //LIMPA TAGs
					
				 	if (localb==="fora do Estado"){
					 for (var g=0;g<estados.length;g++){
				 			if (cc.contains(estados[g])){temest=true;dd=null;
						 break;
								 }
						}
     			} 
     			else{dd = converte(localb);} 
						if (itera.test(cc)&&cc.contains(dd) == true&&cc.contains(localc))
						{tem=true;break;
						}//else {tem=false;break;}
				
				}
		 				if (tem==true) {tem=false;temest=false;}
		 				else{
          		var cuia = 'tr.especie:nth-child(' + i + ')';
          		$(cuia).hide();
							}
				 
    }
		}
		
		////AQYU
		var elem = document.getElementById("myBar");
		barrawidth+= (100/(tabela.rows.length));
		elem.style.width = barrawidth + '%';
		document.getElementById("label").innerHTML = (barrawidth.toFixed(2)) * 1  + '%';  
	}
  
  
	$(".total > b:nth-child(2)").text(contar(tabela));
	$(".total").append(emno + localb.substring(1)+" no RS.");
	$(".total").get(0).scrollIntoView();
	elem.style.width = "100%";
	document.getElementById("label").innerHTML = "100%";
	console.log(converte(localb));
	postarGoogle();
}
	
function contar(atabela) {
	tt = 0;
	var y;//todo: novidade
	for (var i = 2, row; i<=atabela.rows.length; i++) {
		row = atabela.rows[i];
		var cuia = 'tr.especie:nth-child(' + i + ')';
		if ($(cuia).is(':visible')){
			tt++; //$(cuia).css("background-color","red");
			y=$("tr.especie:nth-child("+i+") > td:nth-child(3) > a:nth-child(1)").text();//todo: novidade
			lifers.push(y); //todo: novidade
			}
			}
	especies = lifers.join();
	return (tt);
			}
				
function conecta(x){
	var xhr;
	xhr = new XMLHttpRequest();
	xhr.open('GET', x, false);
	xhr.send();
	extrato = xhr.response;
	return (extrato);
	  
}

function converte(cidade){ //cidade
    valorcidade = cidade;
	return valorcidade;
}

function postarGoogle(){
  var usuarionome = $(".textpadding > a:nth-child(4)").text();
	var lifers = $(".total > b:nth-child(2)").text();
	var data = new Date(Date.now()).toLocaleString();
  $.ajax({					 
                url: "https://docs.google.com/forms/d/e/1FAIpQLSc_pL1htbmjGjQxP95zhMzsavJOdJBIwWwvX82DA5Vv3Lt88w/formResponse",
                data: { "entry.101800956" : usuarionome, "entry.1450640523" : lifers, "entry.412480081" : data, "entry.164661916" : especies },
                type: "POST",
                dataType: "xml",
                statusCode: {
                    0: function (){ 
                      usuarionome;
                      lifers;
                      data;
											especies;
                    },
                    200: function (){
                                         usuarionome;
                      lifers;
                      data;
											especies;
                                  }
                }
  });
}

function waitForKeyElements(
selectorTxt, /* Required: The jQuery selector string that
specifies the desired element(s).
*/
actionFunction, /* Required: The code to run when elements are
found. It is passed a jNode to the matched
element.
*/
bWaitOnce, /* Optional: If false, will continue to scan for
new elements even after the first match is
found.
*/
iframeSelector /* Optional: If set, identifies the iframe to
search.
*/
) {
    var targetNodes, btargetsFound;

    if (typeof iframeSelector == "undefined")
        targetNodes = $(selectorTxt);
    else
        targetNodes = $(iframeSelector).contents()
        .find(selectorTxt);

    if (targetNodes && targetNodes.length > 0) {
        btargetsFound = true;
        /*--- Found target node(s). Go through each and act if they
        are new.
        */
        targetNodes.each(function () {
            var jThis = $(this);
            var alreadyFound = jThis.data('alreadyFound') || false;

            if (!alreadyFound) {
                //--- Call the payload function.
                var cancelFound = actionFunction(jThis);
                if (cancelFound)
                    btargetsFound = false;
                else
                    jThis.data('alreadyFound', true);
            }
        });
    }
    else {
        btargetsFound = false;
    }

    //--- Get the timer-control variable for this selector.
    var controlObj = waitForKeyElements.controlObj || {};
    var controlKey = selectorTxt.replace(/[^\w]/g, "_");
    var timeControl = controlObj[controlKey];

    //--- Now set or clear the timer as appropriate.
    if (btargetsFound && bWaitOnce && timeControl) {
        //--- The only condition where we need to clear the timer.
        clearInterval(timeControl);
        delete controlObj[controlKey];
    }
    else {
        //--- Set a timer, if needed.
        if (!timeControl) {
            timeControl = setInterval(function () {
                waitForKeyElements(selectorTxt,
                actionFunction,
                bWaitOnce,
                iframeSelector
                );
            },
            300
            );
            controlObj[controlKey] = timeControl;
        }
    }
    waitForKeyElements.controlObj = controlObj;
}


waitForKeyElements('.ttPage', comeca);