1//----------------------------------------------- INTPUT ERASE 2var last_erase_value=''; 3function eraseIn(elem){ 4 last_erase_value=elem.value; 5 elem.value=''; 6} 7function eraseOut(elem){ 8 if(elem.value==''){ 9 elem.value=last_erase_value; 10 last_erase_value=''; 11 }; 12} 13//================================================================================================================== 14//============================================================================================ FORMULARIOS (actions) 15//================================================================================================================== 16function reemplazar(str,find,repl){ 17 return str.replace(new RegExp(find,"g"),repl); 18} 19function jsonEscape(str){ 20 return JSON.parse( str.replace(/[\r\n]+/g, "<br>").replace(/\n/g, "\\\\n").replace(/\r/g, "\\\\r").replace(/\t/g, "\\\\t") ); 21} 22function escapeToCodeLine(str){ 23 //return str.replace(/\'/g, "\\'") 24 //return str.replace(/\'/g, "\'"); 25 //return str.replace(/\"/g, """).replace(/\'/g, "'").replace(/\´/g, "´"); 26 //return str.replace(/\"/g, "\\\"").replace(/\'/g, "\\\\'").replace(/\´/g, "ccc"); 27 //console.log(str); 28 return str.replace(/\"/g, "").replace(/\n/g, "<br>").replace(/\'/g, "").replace(/\´/g, "").replace(/\"/g, "").replace(/\'/g, "").replace(/\´/g, ""); 29} 30/* 31//Metodo Encode 32function codificarEntidad(str) { 33 return str.replace(/\"/g, """).replace(/\'/g, "'").replace(/\´/g, "´"); 34} 35//Metodo Decode 36function descodificarEntidad(str) { 37 return str.replace(/\&/g, "&").replace(/\"/g, "\"").replace(/\'/g, "'").replace(/\´/g, "´"); 38}*/ 39 40//------------------------------------------------------------- Multifield to Text 41function multiFieldToText(destino,val){ 42 if(val!=='' && val!=='|||'){ 43 var sal=''; 44 45 var troceo=val.split('|||'); 46 var total_troceo=troceo.length; 47 48 sal+='<ul class="lista_multiform">'; 49 50 for(var i=0; i<total_troceo; i+=2){ 51 var campo=troceo[i]; 52 var valor=troceo[i+1]; 53 if(campo==''){ 54 sal+='<li>'+linkDetect(valor)+'</li>'; 55 }else{ 56 sal+='<li><strong>'+campo+':</strong> '+linkDetect(valor)+'</li>'; 57 } 58 } 59 60 sal+='</ul>'; 61 //--------- 62 document.getElementById(destino).innerHTML=sal; 63 } 64} 65 66//------------------------------------------------------------ Multifield edition 67function initMultiField(id, place1, place2, valores){ 68 69 if(valores==''){valores='|||'} 70 var arr_multiform=valores.split('|||'); 71 var total_multiform=arr_multiform.length; 72 73 for(var i=0; i<total_multiform; i+=2){ 74 var campo=arr_multiform[i]; 75 var valor=arr_multiform[i+1]; 76 addMultiField(id,place1,place2,campo,valor); 77 }; 78 79 if(total_multiform==2){ 80 if(!document.getElementById(id).dataset.showfirstfield){document.getElementById(id).childNodes[0].style.display='none';}; 81 document.getElementById(id).childNodes[1].className='col-4 col-sm-2'; 82 document.getElementById(id).childNodes[2].style.display='none'; 83 }; 84 85} 86 87function addMultiField(id, place1, place2, campo, valor){ 88 //var lines=parseInt(document.getElementById(id).dataset.number); lines++; 89 place1=(place1)?place1:''; 90 place2=(place2)?place2:''; 91 campo=(campo)?campo:''; 92 valor=(valor)?valor:''; 93 94 var sal=''; 95 //--------- 96 var child1=document.createElement("DIV"); 97 child1.className='col-4 col-sm-1'; 98 child1.innerHTML='<input class="sub" type="text" maxlength="40" placeholder="'+place1+'..." value="'+campo+'" style="font-weight:bold">'; 99 100 var child2=document.createElement("DIV"); 101 child2.className='col-3 col-sm-1'; 102 child2.innerHTML='<input class="sub" type="text" placeholder="'+place2+'..." value="'+valor+'">'; 103 104 var child3=document.createElement("DIV"); 105 child3.setAttribute('class','align-self-center'); //child3.style.display='none'; 106 child3.innerHTML='<button class="b_del toTransparent" onClick="delMultiField(this)"></button>'; 107 //--------- 108 document.getElementById(id).appendChild(child1); 109 document.getElementById(id).appendChild(child2); 110 document.getElementById(id).appendChild(child3); 111 //--------- 112 var padre=document.getElementById(id); 113 if(padre.childNodes.length>3){ 114 padre.childNodes[0].style.display=''; 115 padre.childNodes[1].className='col-3 col-sm-1'; 116 padre.childNodes[2].style.display=''; 117 } 118} 119 120function delMultiField(elem){ 121 var padre=elem.parentNode.parentNode; 122 padre.removeChild(elem.parentNode.previousSibling.previousSibling); 123 padre.removeChild(elem.parentNode.previousSibling); 124 padre.removeChild(elem.parentNode); 125 126 var hijos=padre.childNodes.length; 127 128 if(hijos==3){ 129 if(!padre.dataset.showfirstfield){ 130 padre.childNodes[0].style.display='none'; 131 padre.childNodes[1].className='col-3'; 132 }else{ 133 padre.childNodes[1].className='col-3 col-sm-1'; 134 }; 135
136 padre.childNodes[2].style.display='none'; 137 }; 138} 139 140//------------------------------------------------------------ Input Tags 141function initInputTags(id, tags){ 142 var sal=''; 143 //--------- 144 var total=0; 145 document.getElementById(id).dataset.cantidad='0'; 146 var max=parseInt(document.getElementById(id).dataset.max); 147 //--------- 148 if(tags!==''){ 149 var arr_tags=tags.split(', '); 150 var total=arr_tags.length; 151 if(total>max){total=max} 152 153 document.getElementById(id).dataset.cantidad=total; 154 155 //-------- 156 for(var i=0; i<total; i++){ 157 var tag=arr_tags[i]; 158 tag=tag.charAt(0).toUpperCase() + tag.slice(1); 159 sal+='<span class="tag-label" data-value="'+tag+'">'+tag+'<span class="tag-remove" onClick="inputTagsDel(event)">x</span></span>'; 160 }; 161 } 162 sal+='<input id="input-'+id+'" class="tag-input" type="text" placeholder="Nueva etiqueta..." onblur="inputTagCreate(event)" onkeyup="inputTagsWrite(event)">'; 163 document.getElementById(id).innerHTML=sal; 164 //--------------- 165 inputTagsMax(id,''); 166} 167 168function inputTagCreate(e){ 169 170 var elemento=e.target; 171 var texto=elemento.value; 172 173 if(texto!==''){ 174 var tag=texto.split(',')[0].toLowerCase(); 175 elemento.value=''; 176 //---------- 177 var newItem = document.createElement("SPAN"); 178 newItem.className='tag-label'; 179 newItem.dataset.value=tag; 180 var tag2=tag.charAt(0).toUpperCase() + tag.slice(1); 181 newItem.innerHTML=tag2+'<span class="tag-remove" onClick="inputTagsDel(event)">x</span>'; 182 183 var padre=elemento.parentNode; 184 var totalhijos=padre.childNodes.length; 185 padre.insertBefore(newItem, padre.childNodes[totalhijos-1]); 186 autoTags=false; 187 //-------- 188 inputTagsMax(padre.id,'mas'); 189 } 190} 191 192 193function inputTagsWrite(e){ 194 var tcl=(document.all)?e.keyCode:e.which; 195 196 //Si pulsamos coma o enter 197 if(tcl==188 || tcl==13){ 198 inputTagCreate(e); 199 200 /* 201 var elemento=e.target; 202 203 if(tcl==188){//Si es la coma 204 var tag=elemento.value.slice(0,-1).toLowerCase(); 205 }else{//Si es el enter 206 var tag=elemento.value.toLowerCase(); 207 } 208 209 elemento.value=''; 210 //---------- 211 var newItem = document.createElement("SPAN"); 212 newItem.className='tag-label'; 213 newItem.dataset.value=tag; 214 var tag2=tag.charAt(0).toUpperCase() + tag.slice(1); 215 newItem.innerHTML=tag2+'<span class="tag-remove" onClick="inputTagsDel(event)">x</span>'; 216 217 var padre=elemento.parentNode; 218 var totalhijos=padre.childNodes.length; 219 padre.insertBefore(newItem, padre.childNodes[totalhijos-1]); 220 autoTags=false; 221 //-------- 222 inputTagsMax(padre.id,'mas');*/ 223 }; 224} 225 226function inputTagsDel(e){ 227 var elemento=e.target.parentNode; 228 var padre=elemento.parentNode; 229 padre.removeChild(elemento); 230 autoTags=false; 231 //-------- 232 inputTagsMax(padre.id,'menos'); 233} 234 235function inputTagsMax(id,masmenos){ 236 var actual=parseInt(document.getElementById(id).dataset.cantidad); 237 var max=parseInt(document.getElementById(id).dataset.max); 238 //---------- 239 if(masmenos=='mas'){actual++; 240 document.getElementById(id).dataset.cantidad=actual; 241 }else if(masmenos=='menos'){ 242 actual--; 243 document.getElementById(id).dataset.cantidad=actual; 244 } 245 //---------- 246 if(actual<max){ 247 document.getElementById('input-'+id).style.display=''; 248 }else{ 249 document.getElementById('input-'+id).style.display='none'; 250 }; 251 //---------- 252 document.getElementById(id+'-resume').innerHTML=actual+' de '+max+' máximo'; 253} 254 255function inputTagsClean(id){ 256 var padre=document.getElementById(id); 257 padre.dataset.cantidad='0'; 258 //------- Vaciamos 259 while (padre.childNodes[1]) { 260 padre.removeChild(padre.firstChild); 261 } 262 //------- 263 var max=padre.dataset.max; 264 document.getElementById(id+'-resume').innerHTML='0 de '+max+' máximo'; 265 document.getElementById('input-'+id).style.display=''; 266} 267 268//================================================================================================================== 269//============================================================================================ FORMULARIOS (validate and return data) 270//================================================================================================================== 271function errorForm(msg){ 272 notify('error','top',msg); 273}
274function closeErrorForm(){ 275 if(document.getElementById('emergent_top').style.top=='0px'){emergentClose('top');} 276} 277function clearForm(idForm){ 278 var frm=document.getElementById(idForm).querySelectorAll('[data-type]'); 279 var total_campos=frm.length; 280 for(var v=0; v<total_campos; v++){ 281 var elem=frm[v]; 282 //------- PROPIEDADES DEL CAMPO 283 var dataType=''; //Tipo de campo 284 //------- Tipo 285 if(elem.dataset.type){dataType=elem.dataset.type;}else{dataType=elem.type;} 286 287 if(dataType=='combo'){ 288 newComboReset(elem.id); 289 }else if(dataType=='checkbox'){ 290 elem.checked=false; 291 }else{ 292 elem.value=''; 293 } 294 } 295}; 296 297function validateForm(idForm){ 298 var datos=new FormData(); 299 var errores=0; var lastVar=''; var lastValue=''; var lastRepeat=0; 300 301 //------------------------------ Validamos y recopilamos datos a enviar 302 var frm=[]; 303 var frm_inicial=document.getElementById(idForm).querySelectorAll('[data-type]'); 304 305 //------- Seleccionar sólo elementos visibles 306 for(var v=0; v<frm_inicial.length; v++){ 307 if( $(frm_inicial[v]).is(":visible") ){ //console.log( frm_inicial[v].dataset.label ); 308 frm.push( frm_inicial[v] ); 309 } 310 } 311 312 var total_campos=frm.length; 313 //------------------------------ 314 for(var v=0; v<total_campos; v++){ 315 var elem=frm[v]; 316 var contenedor_padre=elem.parentNode; 317 var es_fc=$(contenedor_padre).hasClass('fc'); 318 319 //------- PROPIEDADES DEL CAMPO 320 var dataType=''; //Tipo de campo 321 var dataLabel=''; //Nombre del campo 322 var dataVar=''; //Nombre de variable 323 var dataValue=''; //Valor del campo (el valor se recoge según el tipo de campo) 324 var dataRequired=false; //Obligatorio? 325 var confirmationField=''; //Campo confirmación 326 var transfer=true; 327 328 //------- Tipo 329 if(elem.dataset.type){dataType=elem.dataset.type;}else{dataType=elem.type;} 330 //------- Label 331 if(elem.dataset.label){dataLabel=elem.dataset.label;}else{dataLabel=elem.getAttribute('placeholder').split('...')[0];} 332 //------- Nombre de variable 333 if(elem.dataset.var){dataVar=elem.dataset.var;}else{dataVar=elem.getAttribute('id').split('frm_')[1];} 334 //------- Requerido 335 if(elem.dataset.required){if(elem.dataset.required=='true'){dataRequired=true;};}else{dataRequired=elem.required;} 336 //------- Campo confirmación 337 if(elem.dataset.confirm){confirmationField=elem.dataset.confirm;} 338 339 //-------------------------------- EVALUAR EL TIPO DE CAMPO 340 switch(dataType){ 341 case 'number': 342 dataValue=elem.value; 343 if(dataValue==''){ 344 if(dataRequired==true){errores++; errorForm( getText(lng.campo_rellenar_correctamente,[dataLabel]) ); } 345 }else{ 346 var num_resultado = numberValidation(elem.value); 347 if(num_resultado == 'error'){ 348 errores++; 349 errorForm( getText(lng.campo_debe_ser_numero) ); 350 }else{ 351 dataValue=num_resultado.toString(); 352 } 353 }; 354 break; 355 case 'text': 356 dataValue=elem.value; 357 if(dataValue==''){ 358 if(dataRequired==true){errores++; errorForm( getText(lng.campo_rellenar_correctamente,[dataLabel]) ); } 359 }; 360 break; 361 case 'textarea': 362 dataValue=elem.value; 363 if(dataValue==''){ 364 if(dataRequired==true){errores++; errorForm( getText(lng.campo_rellenar_correctamente,[dataLabel]) ); } 365 }; 366 break; 367 case 'editablearea': 368 dataValue=elem.innerHTML; 369 var tmpvaledar=dataValue.substr(-4); 370 if(tmpvaledar=='<br>'){dataValue=dataValue.substr(0,dataValue.length-4);}; 371 //----- 372 if(dataValue==''){ 373 if(dataRequired==true){errores++; errorForm( getText(lng.campo_rellenar_correctamente,[dataLabel]) ); } 374 }; 375 break; 376 case 'email': 377 dataValue=elem.value; 378 if(dataValue==''){ 379 if(dataRequired==true){errores++; errorForm( getText(lng.campo_rellenar_correctamente,[dataLabel]) ); } 380 }else{ 381 var validationValue=emailValidation(elem.value); 382 //----------------------- Confirm 383 if(confirmationField!=='' && validationValue=='ok'){ 384 if(elem.value!==document.getElementById(confirmationField).value){ 385 validationValue='error_confirmacion'; 386 } 387 } 388 //----------------------- 389 if(validationValue=='ok'){ 390 break; 391 }else{ 392 switch(validationValue){ 393 case '': errorForm( getText(lng.campo_rellenar_correctamente,[dataLabel]) ); break; 394 case 'error': errorForm( getText(lng.campo_no_tiene_formato_valido,[dataLabel]) ); break; 395 case 'error_confirmacion': errorForm( getText(lng.campos_error_confirmacion_m,[dataLabel]) ); break; 396 default: errorForm( getText(lng.campo_no_tiene_formato_valido,[dataLabel]) ); break; 397 }; 398 errores++; 399 //elem.value=''; 400 if(confirmationField!==''){document.getElementById(confirmationField).value='';}; 401 } 402 }; 403 break; 404 case 'password': 405 dataValue=elem.value; 406 if(dataValue==''){ 407 if(dataRequired==true){errores++; errorForm( getText(lng.campo_rellenar_correctamente,[dataLabel]) ); } 408 }else{
409 var validationValue=passValidation(elem.value); 410 //----------------------- Confirm 411 if(confirmationField!=='' && validationValue=='ok'){ 412 if(elem.value!==document.getElementById(confirmationField).value){ 413 validationValue='error_confirmacion'; 414 } 415 } 416 //----------------------- 417 if(validationValue=='ok'){ 418 break; 419 }else{ 420 switch(validationValue){ 421 case '': errorForm( getText(lng.campo_rellenar_correctamente,[dataLabel]) ); break; 422 case 'error': errorForm( getText(lng.campo_contrasena_insegura,[dataLabel]) ); break; 423 case 'error_confirmacion': errorForm( getText(lng.campos_error_confirmacion_f,[dataLabel]) ); break; 424 default: errorForm( getText(lng.campo_minimo_caracteres,[dataLabel,validationValue]) ); break; 425 }; 426 errores++; 427 elem.value=''; 428 if(confirmationField!==''){document.getElementById(confirmationField).value='';}; 429 } 430 }; 431 break; 432 case 'date': 433 dataValue=elem.value; 434 if(dataValue==''){ 435 if(dataRequired==true){errores++; errorForm( getText(lng.campo_rellenar_correctamente,[dataLabel]) ); } 436 }else{ 437 switch(dateValidation(elem.value)){ 438 case '': errores++; errorForm( getText(lng.campo_rellenar_correctamente,[dataLabel]) ); break; 439 case 'error': errores++; errorForm( getText(lng.campo_fecha_formato,[dataLabel]) ); break; 440 case 'ok': break; 441 } 442 }; 443 break; 444 case 'dni': 445 dataValue=elem.value; 446 if(dataValue==''){ 447 if(dataRequired==true){errores++; errorForm( getText(lng.campo_rellenar_correctamente,[dataLabel]) ); } 448 }else{ 449 switch(dniValidation(dataValue)){ 450 case '': errores++; errorForm( getText(lng.campo_rellenar_correctamente,[dataLabel]) ); break; 451 case 'error': errores++; errorForm( getText(lng.campo_dni_formato,[dataLabel]) ); break; 452 case 'incorrecto': errores++; errorForm( getText(lng.campo_dni_inexistente,[dataLabel]) ); break; 453 case 'ok': break; 454 }; 455 }; 456 break; 457 case 'dni_nif_cif': 458 dataValue=elem.value; 459 if(dataValue==''){ 460 if(dataRequired==true){errores++; errorForm( getText(lng.campo_rellenar_correctamente,[dataLabel]) ); } 461 }else{ 462 switch(dninifcifValidation(dataValue)){ 463 case '': errores++; errorForm( getText(lng.campo_rellenar_correctamente,[dataLabel]) ); break; 464 case 'error': errores++; errorForm( getText(lng.campo_dni_nif_cif_formato,[dataLabel]) ); break; 465 case 'ok': break; 466 }; 467 }; 468 break; 469 case 'tel': 470 dataValue=elem.value; 471 if(dataValue==''){ 472 if(dataRequired==true){errores++; errorForm( getText(lng.campo_rellenar_correctamente,[dataLabel]) ); } 473 }else{ 474 switch(telValidation(elem.value)){ 475 case '': errores++; errorForm( getText(lng.campo_rellenar_correctamente,[dataLabel]) ); break; 476 case 'error': errores++; errorForm( getText(lng.campo_telefono_formato,[dataLabel]) ); break; 477 case 'ok': break; 478 } 479 }; 480 break; 481 case 'url': 482 dataValue=elem.value; 483 if(dataValue==''){ 484 if(dataRequired==true){errores++; errorForm( getText(lng.campo_rellenar_correctamente,[dataLabel]) ); } 485 }else{ 486 if(dataValue.indexOf('http:')==-1){dataValue='https://'+dataValue}; 487 elem.value=dataValue; 488 //------- 489 switch(urlValidation(dataValue)){ 490 case '': errores++; errorForm( getText(lng.campo_rellenar_correctamente,[dataLabel]) ); break; 491 case 'error': errores++; errorForm( getText(lng.campo_url_formato,[dataLabel]) ); break; 492 case 'ok': break; 493 } 494 }; 495 break; 496 case 'combo': 497 dataValue=elem.getAttribute('data-value'); 498 if(dataValue==''){ 499 if(dataRequired==true){errores++; errorForm( getText(lng.campo_desplegable_seleccionar,[dataLabel]) ); } 500 }; 501 break; 502 case 'select': 503 dataValue=elem.value; 504 if(dataValue==''){ 505 if(dataRequired==true){errores++; errorForm( getText(lng.campo_desplegable_seleccionar,[dataLabel]) ); } 506 }; //dataValue=elem.options[elem.selectedIndex].text; 507 break; 508 case 'select_value': 509 dataValue=elem.value; 510 if(dataValue==''){ 511 if(dataRequired==true){errores++; errorForm( getText(lng.campo_desplegable_seleccionar,[dataLabel]) ); } 512 }; //dataValue=elem.options[elem.selectedIndex].text; 513 break; 514 case 'checkbox': 515 if(elem.checked==true){ 516 dataValue='true'; 517 }else{ 518 dataValue='false'; 519 if(dataRequired==true){errores++; errorForm( getText(lng.campo_check_seleccionado,[dataLabel]) ); } 520 }; 521 break; 522 case 'radio': 523 var val=radioTest(elem.getAttribute('name')); 524 if(val!==''){ 525 dataValue=val; 526 }else{ 527 dataValue='false'; 528 if(dataRequired==true){errores++; errorForm( getText(lng.campo_radio_seleccionar,[dataLabel]) ); } 529 }; 530 break; 531 case 'image': 532 if(elem.dataset.idfile!=='new'){ 533 transfer=false; 534 }else{ 535 if(elem.dataset.src){ 536 datos.append(dataVar+'-b',elem.dataset.src); 537 }; 538 if(elem.dataset.proporcion){ 539 datos.append(dataVar+'-proporcion',elem.dataset.proporcion); 540 }; 541 }; 542 if(elem.getAttribute('src')){ 543 dataValue=elem.getAttribute('src'); 544 }else{ 545 dataValue=elem.style.backgroundImage.slice(5,-2); 546 }; 547 if(dataValue=='' || elem.dataset.idfile=='no'){ 548 if(dataRequired==true){errores++; errorForm( getText(lng.campo_imagen_seleccionar,[dataLabel]) ); } 549 }; 550 break; 551 case 'video': 552 if(elem.dataset.idfile!=='new'){ 553 transfer=false; 554 }else{ 555 if(elem.dataset.titulo){ 556 datos.append(dataVar+'-titulo',elem.dataset.titulo); 557 }; 558 if(elem.dataset.descripcion){ 559 datos.append(dataVar+'-descripcion',elem.dataset.descripcion); 560 }; 561 }; 562 if(elem.dataset.enlace){ 563 dataValue=elem.dataset.enlace; 564 }else{ 565 dataValue=elem.style.backgroundImage.slice(5,-2); 566 }; 567 if(dataValue==''){ 568 if(dataRequired==true){errores++; errorForm( getText(lng.campo_video_seleccionar,[dataLabel]) ); } 569 }; 570 break; 571 case 'multiform': 572 var multivalues=''; 573 for(var i=0; i<elem.childNodes.length; i+=3){ 574 var campo=elem.childNodes[i].childNodes[0].value; 575 var valor=elem.childNodes[i+1].childNodes[0].value; 576 multivalues+=campo+'|||'+valor+'|||'; 577 } 578 dataValue=multivalues.slice(0, -3); 579 if(dataRequired==true && dataValue=='|||'){errores++; errorForm( getText(lng.campo_rellenar_correctamente,[dataLabel]) );} 580 break; 581 case 'tags':
582 for(var i=0; i<elem.childNodes.length-1; i++){ 583 dataValue+=elem.childNodes[i].dataset.value+', '; 584 }; 585 dataValue=normalize( dataValue.slice(0,-2).toLowerCase() ); 586 break; 587 }; 588 589 //============ SI HAY ERRORES 590 if(errores>0){ 591 //elem.focus(); 592 593 if(dataType=='multiform'){ 594 var elemvinculado=elem.childNodes[1].firstChild; 595 elemvinculado.classList.add('marked_error'); 596 elemvinculado.addEventListener('focus',function(){ 597 elemvinculado.classList.remove("marked_error"); 598 emergentClose('top'); 599 }); 600 601 }else{ 602 603 if(dataType!=='combo' && dataType!=='checkbox' && dataType!=='radio' && dataType!=='image'){ 604 //Marcamos el campo como erróneo 605 elem.classList.add('marked_error'); 606 607 if(validationValue=='error_confirmacion'){ 608 var elem_confirm=document.getElementById(confirmationField); 609 elem_confirm.classList.add('marked_error'); 610 } 611 }; 612 //Al hacer click sobre el elemento lo desmarcamos y cerramos el mensaje de error 613 if(dataType!=='radio'){ 614 elem.addEventListener('focus',function(){ 615 elem.classList.remove("marked_error"); 616 if(elem.dataset.confirm){ 617 var elem_confirm=document.getElementById(confirmationField); 618 elem_confirm.classList.remove("marked_error"); 619 } 620 emergentClose('top'); 621 }); 622 623 if(confirmationField!==''){ 624 var elem_confirm=document.getElementById(confirmationField); 625 elem_confirm.addEventListener('focus',function(){ 626 elem.classList.remove("marked_error"); 627 elem_confirm.classList.remove("marked_error"); 628 emergentClose('top'); 629 }); 630 }; 631 }else{ 632 elem.parentNode.parentNode.parentNode.addEventListener('click',function(){ 633 elem.classList.remove("marked_error"); 634 emergentClose('top'); 635 }); 636 }; 637 }; 638 639 break; 640 641 }else{//------- SI NO HAY ERRORES 642 643 if(transfer==true && dataVar!==''){ 644 //----------------------------------------------- Grupos de valores 645 if(dataVar!==lastVar){ 646 if(v!==0){datos.append(lastVar,lastValue);}; 647 lastValue=dataValue; 648 lastVar=dataVar; 649 }else{ 650 if(dataType!=='radio'){lastValue+='|||'+dataValue}; 651 }; 652 653 //------ Cierre final 654 if(v==total_campos-1){ /*console.log(total_campos+'---2: '+lastVar+' -- '+lastValue);*/ 655 datos.append(lastVar,lastValue); 656 }; 657 }; 658 }; 659 };//FIN BUCLE 660 661 //----------------- Si no hay errores devolvemos datos compliados 662 if(errores==0){return datos;}else{return 'error';}; 663}; 664//================================================================================================================== 665//============================================================================================ Validaciones 666//================================================================================================================== 667function showConfirmationField(elem,when='password'){ 668 var valor=elem.value; 669 var tipo=elem.getAttribute('type'); 670 var state=''; 671 var show_registration_conditions=false; 672 //-------- 673 if(tipo=='email'){state=emailValidation(valor)} 674 if(tipo=='password'){state=passValidation(valor)} 675 if(state=='ok'){ 676 document.getElementById(elem.dataset.confirm).parentNode.style.display=''; 677 if(tipo=='email' && when=='email'){ 678 show_registration_conditions=true; 679 }else if(tipo=='password' && when=='password'){ 680 show_registration_conditions=true; 681 }; 682 //--------- 683 if(show_registration_conditions==true && document.getElementById('registration_conditions_area')){ 684 document.getElementById('registration_conditions_area').style.display=''; 685 }; 686 }else{ 687 document.getElementById(elem.dataset.confirm).parentNode.style.display='none'; 688 } 689} 690 691//----------------------------------- tel 692function numberValidation(num){ 693 if(num==''){return ''}else{ 694 num=replaceAll(num,' ',''); 695 num=replaceAll(num,',','.'); 696 num=parseFloat(num); 697 if(!isNaN(parseFloat(num)) && isFinite(num)){return num;}else{return 'error';} 698 } 699}; 700//----------------------------------- Pass 701function passValidation(pass){ 702 if(pass==''){return ''}else if(pass.length<5){ 703 return '5'; 704 }else{ 705 var expr = /^(((?=.*[a-z])(?=.*[A-Z]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[A-Z])(?=.*[0-9])))(?=.{5,})/; //May, Min, Nums y 5 carácteres 706 if ( !expr.test(pass) ){return 'error';}else{return 'ok';} 707 } 708}; 709 710//----------------------------------- DNI 711function dniValidation(dni){ 712 if(dni==''){return ''}else{ 713 var numero; 714 var letr; 715 var letra; 716 var expresion_regular_dni = /^\d{8}[a-zA-Z]$/; 717 718 if(expresion_regular_dni.test (dni) == true){ 719 numero = dni.substr(0,dni.length-1); 720 letr = dni.substr(dni.length-1,1); 721 numero = numero % 23; 722 letra='TRWAGMYFPDXBNJZSQVHLCKET'; 723 letra=letra.substring(numero,numero+1); 724 if (letra!=letr.toUpperCase()) { 725 return 'incorrecto'; 726 }else{ 727 return 'ok'; 728 } 729 }else{ 730 return 'error'; 731 } 732 }; 733}; 734//----------------------------------- DNI/NIF/CIF 735function dninifcifValidation(dninifcif){ 736 if(dninifcif==''){return ''}else{ 737 if(dninifcif.length<8){return 'error';}else{return 'ok';} 738 }; 739}; 740//----------------------------------- e-mail 741function emailValidation(email){ 742 if(email==''){return ''}else{ 743 var expr = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/; 744 if ( !expr.test(email) ){return 'error';}else{return 'ok';} 745 } 746}; 747 748//----------------------------------- tel 749function telValidation(tel){ 750 if(tel==''){return ''}else{ 751 tel=replaceAll(tel,' ',''); 752 if(tel.length<9){return 'error';}else{return 'ok';} 753 //var expr = /^((\+?34([ \t|\-])?)?[9|6|7|8]((\d{1}([ \t|\-])?[0-9]{3})|(\d{2}([ \t|\-])?[0-9]{2}))([ \t|\-])?[0-9]{2}([ \t|\-])?[0-9]{2})$/; 754 //if ( !expr.test(tel) ){return 'error';}else{return 'ok';} 755 } 756}; 757 758//----------------------------------- URL 759function urlValidation(url){ 760 if(url=='' || url=='http://'){return ''}else{ 761 var expr = /((http|https)\:\/\/)?[a-zA-Z0-9\.\/\?\:@\-_=#]+\.([a-zA-Z0-9\&\.\/\?\:@\-_=#])*/g; 762 if ( !expr.test(url) ){return 'error';}else{return 'ok';} 763 } 764} 765 766//----------------------------------- Date 767function dateValidation(date){ 768 if(date==''){return ''}else{ 769 var sal=replaceAll(date,'-','/'); 770 var td=sal.split('/'); 771 //----- 772 if(td.length<3){ 773 return 'error'; 774 }else{ 775 if(td[0].length<4 && td[2].length==4){sal=td[0]+'/'+td[1]+'/'+td[2];} 776 if(td[2].length<4 && td[0].length==4){sal=td[2]+'/'+td[1]+'/'+td[0];} 777 //----- 778 var expr = /^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]|(?:Enero|Marzo|Mayo|Julio|Agosto|Octubre|Diciembre)))\1|(?:(?:29|30)(\/|-|\.)(?:0?[1,3-9]|1[0-2]|(?:Enero|Marzo|Abril|Mayo|Junio|Julio|Agosto|Septiembre|Octubre|Noviembre|Diciembre))\2))(?:(?:1[6-9]|[2-9]\d)?\d{2}
778)$|^(?:29(\/|-|\.)(?:0?2|(?:Febrero))\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9]|(?:Enero|Febrero|Marzo|Abril|Mayo|Junio|Julio|Agosto|Septiembre))|(?:1[0-2]|(?:Octubre|Noviembre|Diciembre)))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$/; //Comprueba años bisiestos y demás... 779 if( !expr.test(sal) ){return 'error';}else{return 'ok';} 780 }; 781 } 782}; 783 784function dateReverse(date){ 785 if(date==''){return ''}else{ 786 var sal=replaceAll(date,'-','/'); 787 var td=sal.split('/'); 788 //----- 789 if(td[0].length<4 && td[2].length==4){sal=td[0]+'/'+td[1]+'/'+td[2];} 790 if(td[2].length<4 && td[0].length==4){sal=td[2]+'/'+td[1]+'/'+td[0];} 791 //----- 792 return sal; 793 } 794}; 795 796function toDate(id_elem){ 797 var valor=replaceAll(document.getElementById(id_elem).value,'-','/') 798 //------------------- 799 var td=valor.split('/'); var t1=''; var t2=''; var t3=''; 800 var sal=valor; 801 if(td.length==3){ 802 if(td[0].length==1){t1='0'+td[0];}else{t1=td[0];} 803 if(td[1].length==1){t2='0'+td[1];}else{t2=td[1];} 804 if(td[2].length==1){t3='0'+td[2];}else{t3=td[2];} 805 //---- 806 if(t1.length<4 && t3.length==4){sal=t1+'/'+t2+'/'+t3;} 807 if(t3.length<4 && t1.length==4){sal=t3+'/'+t2+'/'+t1;} 808 }; 809 document.getElementById(id_elem).value=sal; 810} 811 812//----------------------------------- toDecimal 813function toDecimal(valor){ 814 valor=valor.trim(); 815 816 if(valor==''){return 0;}else{ 817 valor=valor.replace(',','.'); 818 valor=valor.replace('\'','.'); 819 //------------------------------ 820 var troceo=valor.split('.'); 821 var total_troceo=troceo.length-1; 822 var longitud_ultimo_troceo=troceo[total_troceo].length; 823 var entero=''; 824 var decimales=''; 825 //------------------------------ 826 if(total_troceo>0 && longitud_ultimo_troceo<3){ 827 entero=valor.slice(0,-(longitud_ultimo_troceo+1)); 828 entero=replaceAll(entero,'.',''); 829 decimales='.'+troceo[total_troceo]; 830 valor=entero+decimales; 831 }else{ 832 valor=replaceAll(valor,'.',''); 833 } 834 //------------------------------ 835 if( isNaN(valor)==false ){ 836 return parseFloat(valor); 837 }else{ 838 return 0; 839 }; 840 }; 841} 842//------- 843function replaceAll(text, busca, reemplaza){ 844 while (text.toString().indexOf(busca) != -1){ 845 text = text.toString().replace(busca,reemplaza); 846 }; 847 return text; 848}; 849 850//================================================================================================================== 851//============================================================================================ COMPONENTES ========= 852//================================================================================================================== 853//----------------------------------------------- CheckRADIO 854function radioTest(radioName){ 855 var radios=document.getElementsByName(radioName); 856 var v=''; 857 for(var i=0; i<radios.length; i++){ 858 if(radios[i].checked){v=radios[i].value; break;} 859 }; 860 return v; 861}; 862function radioSet(radioName,valor){ 863 var radios=document.getElementsByName(radioName); 864 for(var i=0; i<radios.length; i++){ 865 if(radios[i].value==valor){radios[i].checked=true; break;} 866 }; 867}; 868 869//----------------------------------------------- SET VALUE FOR SELECT 870function selectSet(id, valueToSelect){ 871 document.getElementById(id).value=valueToSelect; 872} 873//----------------------------------------------- GET TEXT FROM SELECT 874function selectGetText(id) { 875 var elt = document.getElementById(id); 876 if (elt.selectedIndex == -1){return '';}else{return elt.options[elt.selectedIndex].text;}; 877}; 878 879//----------------------------------------------- SWITCH 880function switcher(elem){ 881 if(typeof(elem) === 'string'){elem=document.getElementById(elem);} 882 //-------- 883 if(elem.classList.contains('off')){ 884 elem.classList.remove('off'); elem.classList.add('on'); return true; 885 }else{ 886 elem.classList.remove('on'); elem.classList.add('off'); return false; 887 } 888}; 889function switcherTest(id){ 890 if(document.getElementById(id).classList.contains('on')){return true;}else{return false;}; 891}; 892function switcherSet(id,state){ 893 var elem=document.getElementById(id); 894 if(state==true){elem.classList.remove('off'); elem.classList.add('on'); return true;}else{elem.classList.remove('on'); elem.classList.add('off'); return false;}; 895}; 896 897//----------------------------------------------- TEXTAREA RESIZE 898function textAreaResize(id,nm){ 899 nm=(nm)?nm:0; //Num modal to resize 900 var el = document.getElementById(id); 901 setTimeout(function(){ 902 el.style.height='auto'; 903 el.style.height = (el.scrollHeight+2)+'px'; 904 if(nm!==0){modalSize(nm)} 905 },0); 906} 907//-------------------------------------------------------------------------------------------------------------------------------------------------- 908//----------------------------------------------------------------------------------------------- FECHA (Combos) ----------------------------------- 909//-------------------------------------------------------------------------------------------------------------------------------------------------- 910function setDate(prefix, datehour, years, intervalo_minutos){ 911 datehour=(datehour)?datehour:'0000-00-00 00:00:00'; 912 years=(years)?years:-100; 913 intervalo_minutos=(intervalo_minutos)?intervalo_minutos:5; 914 var ano='0000'; var mes='00'; var dia='00'; var hora=''; var minuto=''; 915 916 //------------- Cortar fecha y hora 917 var troceo=datehour.split(' '); 918 var date=troceo[0]; 919 if(troceo.length==2){var th=troceo[1].split(':'); hora=th[0]; minuto=th[1];} 920 921 //--------- 922 if(date!=='0000-00-00'){ 923 var troceo=date.split('-'); 924 ano=parseInt(troceo[0]); mes=troceo[1]; dia=troceo[2]; 925 } 926 //--------- Llenamos dÃas 927 var sal='<option value="" disabled hidden selected>'+lng['dia']+'</option>'; 928 for(var i=1; i<32; i++){ 929 var d=i.toString(); 930 if(i<10){d='0'+d;}; 931 sal+='<option value="'+d+'"'; 932 if(dia==d){sal+=' selected';} 933 sal+='>'+d+'</option>'; 934 } 935 document.getElementById(prefix+'-dia').innerHTML=sal; 936 if(dia!=='00'){document.getElementById(prefix+'-dia').value=dia;}; 937 938 //--------- Llenamos meses 939 sal='<option value="" disabled hidden selected>'+lng['mes']+'</option>'; 940 for(var i=0; i<12; i++){ 941 var m=(i+1).toString(); 942 if(i<9){m='0'+m;}; //Está correcto en 9 por que a la i se le suma 1 943 sal+='<option value="'+m+'"'; 944 if(mes==m){sal+=' selected';} 945 sal+='>'+lng['meses'][i]+'</option>'; 946 } 947 document.getElementById(prefix+'-mes').innerHTML=sal; 948 if(mes!=='00'){document.getElementById(prefix+'-mes').value=mes;}; 949 950 //--------- Llenamos años 951 var faa=parseInt(fechaActualAno); 952 sal='<option value="" disabled hidden selected>'+lng['ano']+'</option>'; 953 954 if(years<0){ 955 years=years*-1; 956 for(var i=faa; i>faa-years; i--){ 957 sal+='<option value="'+i+'"'; 958 if(ano==i){sal+=' selected';} 959 sal+='>'+i+'</option>'; 960 } 961 }else{ 962 for(var i=faa; i<faa+years; i++){ 963 sal+='<option value="'+i+'"'; 964 if(ano==i){sal+=' selected';} 965 sal+='>'+i+'</option>'; 966 } 967 } 968 969 document.getElementById(prefix+'-ano').innerHTML=sal; 970 if(ano!=='00'){document.getElementById(prefix+'-ano').value=ano;}; 971 972 //--------------------------------------------------- Llenamos horas 973 if(document.getElementById(prefix+'-hora')){ 974 var sal='<option value="" disabled hidden selected>'+lng['hora']+'</option>'; 975 for(var i=0; i<24; i++){ 976 var h=i.toString(); 977 if(i<10){h='0'+h;}; 978 sal+='<option value="'+h+'"'; 979 if(hora==h){sal+=' selected';} 980 sal+='>'+h+'</option>'; 981 } 982 document.getElementById(prefix+'-hora').innerHTML=sal; 983 //----------------------------------------------- Llenamos minutos 984 var sal='<option value="" disabled hidden selected>'+lng['minuto']+'</option>'; 985 for(var i=0; i<60; i+=intervalo_minutos){ 986 var m=i.toString(); 987 if(i<10){m='0'+m;}; 988 sal+='<option value="'+m+'"'; 989 if(minuto==m){sal+=' selected';} 990 sal+='>'+m+'</option>'; 991 } 992 document.getElementById(prefix+'-minuto').innerHTML=sal; 993 } 994} 995 996 997//-------------------------------------------------------------------------------------------------------------------------------------------------- 998//----------------------------------------------------------------------------------------------- LOCALIZACIÃN (Combos) ---------------------------- 999//-------------------------------------------------------------------------------------------------------------------------------------------------- 1000/* 1001var datos=new FormData(); 1002datos.append('q','g37G3oLoc471onsS1'); 1003datos.append('level',level); 1004//------------------------------ EnvÃo y recepción 1005var solicitud=new XMLHttpRequest(); 1006solicitud.addEventListener('load', fin_geoNamesLocation, false); //Función a ejecutar tras el envÃo y recepción 1007solicitud.open("POST", 'scripts/Q.php', true); 1008solicitud.send(datos); 1009*/ 1010var geoLevel=0; 1011function geoNamesLocation(level,idgeo){ 1012 1013 if(idgeo=='reload'){ 1014 if(level==1){ 1015 geoNamesLocation(0,'6295630'); //Cargar continentes 1016 }else{ 1017 geoNamesLocation(level-1, document.getElementById('geoLevel-'+(level-2)).value); 1018 } 1019 }else{ 1020 geoLevel=level; 1021 1022 if(level<5){
1023 //---------------------------------------------- Reseteamos niveles posteriores 1024 for(var i=geoLevel; i<5; i++){ 1025 document.getElementById('geoLevel-'+i).innerHTML='<option value="" selected disabled hidden>'+lng.selecciona_una_opcion+'...</option>'; 1026 document.getElementById('geoLevel-'+i).parentNode.style.display='none'; 1027 }; 1028 1029 //---------------------------------------------- Enviamos datos 1030 var datos=new FormData(); 1031 //datos.append(idgeo, idgeo); 1032 //-------------------------------- 1033 var solicitud=new XMLHttpRequest(); 1034 //solicitud.addEventListener('loadstart', inicio_envio, false); 1035 //solicitud.addEventListener('progress', progreso_envio, false); 1036 solicitud.addEventListener('error', error_geoNamesLocation, false); 1037 solicitud.addEventListener('load', fin_geoNamesLocation, false); 1038 //solicitud.open("POST", 'http://www.geonames.org/childrenJSON?geonameId='+idgeo+'&callback=listPlaces&style=long', true); 1039 solicitud.open("POST", 'https://www.geonames.org/childrenJSON?geonameId='+idgeo+'&style=short&orderby=name&lang='+Preferences['lng'], true); 1040 solicitud.send(datos); 1041 }; 1042 geo_getInfo(); 1043 } 1044} 1045function error_geoNamesLocation(e){ 1046 notify('error','modal',lng['campos_geolocation_error']+lng['contacto_bug']) 1047} 1048 1049function fin_geoNamesLocation(e){ 1050 var geoData=JSON.parse(e.target.responseText); 1051 var total_resultados=geoData.geonames.length; //geoData.totalResultsCount 1052 1053 if(total_resultados>1){document.getElementById('geoLevel-'+geoLevel).parentNode.style.display='block';} 1054 //-------------------- 1055 if(total_resultados>0){ 1056 for(var i=0; i<total_resultados; i++){ 1057 var valor=geoData.geonames[i].geonameId; 1058 var nombre=geoData.geonames[i].name; 1059 1060 //if(geoLevel==2 && nombre=='Valencia'){nombre='Valencia (Comunidad Valenciana)';} 1061 if(geoLevel==2 && nombre=='Valencia'){nombre='Comunidad Valenciana';} 1062 //--------- 1063 var opt = document.createElement('option'); 1064 opt.value = valor; 1065 opt.dataset.lng = geoData.geonames[i].lng; 1066 opt.dataset.lat = geoData.geonames[i].lat; 1067 if(total_resultados==1){opt.selected=true;}//Si solo hay un resultado lo seleccionamos 1068 opt.innerHTML = nombre; 1069 document.getElementById('geoLevel-'+geoLevel).appendChild(opt); 1070 } 1071 //-------- 1072 1073 if(total_resultados==1){geoNamesLocation(geoLevel+1,valor);} 1074 }; 1075}; 1076 1077function geo_getInfo(){ 1078 geo='|'; 1079 //--------------- Datos campos 1080 for(var i=0; i<geoLevel; i++){ 1081 var slct=document.getElementById('geoLevel-'+i); 1082 var name=slct.options[slct.selectedIndex].text; 1083 var id=slct.value; 1084 var lng=slct.options[slct.selectedIndex].dataset.lng; 1085 var lat=slct.options[slct.selectedIndex].dataset.lat; 1086 //---- 1087 geo+=name+'|'+id+'|'+lng+'|'+lat+'|'; 1088 if(i==geoLevel-1){geoLng=lng; geoLat=lat;} 1089 }; 1090} 1091 1092function setGeo(geo){ 1093 if(geo!==''){ 1094 var level=0; 1095 var troceo=geo.slice(1,-1).split('|'); 1096 for(var i=0; i<troceo.length; i+=4){ 1097 var name=troceo[i]; 1098 var id=troceo[i+1]; 1099 var lng=troceo[i+2]; 1100 var lat=troceo[i+3]; 1101 //---- 1102 var container=document.getElementById('geoLevel-'+level); 1103 container.innerHTML='<option value="reload">Cargar listado...</option><option value="'+id+'" data-lng="'+lng+'" data-lat="'+lat+'" selected>'+name+'</option>'; 1104 //if(i!==0){if(name!==troceo[i-1]){container.parentNode.style.display='block';}}; 1105 container.parentNode.style.display='block'; 1106 level++; 1107 }; 1108 1109 if( document.getElementById('geoLevel-'+level) ){ 1110 var container=document.getElementById('geoLevel-'+level); 1111 container.innerHTML='<option value=""></option><option value="reload">Cargar listado...</option>'; 1112 container.parentNode.style.display='block'; 1113 }; 1114 } 1115} 1116 1117//***************************************************************************************************************** 1118//****************************************************************************** GET LOCALIZACIÃN ***************** 1119//***************************************************************************************************************** 1120function simpleUbicationURL(migeo){ 1121 var troceo=migeo.slice(1,-1).split('|'); 1122 var total_troceo=troceo.length; 1123 var n1=troceo[total_troceo-4]; 1124 var n2=troceo[total_troceo-8]; 1125 var sal=n1; 1126 if(n1!==n2 && n2!==undefined){ 1127 sal+='-'+n2; 1128 } 1129 return keywords_filter(sal,'-'); 1130} 1131 1132function simpleUbication(migeo){ 1133 var troceo=migeo.slice(1,-1).split('|'); 1134 var total_troceo=troceo.length; 1135 var n1=troceo[total_troceo-4]; 1136 var n2=troceo[total_troceo-8]; 1137 var sal='<b>'+n1+'</b>'; 1138 if(n1!==n2 && n2!==undefined){ 1139 sal+=' ('+n2+')'; 1140 } 1141 return sal; 1142} 1143 1144function showUbication(migeo,lim){ 1145 lim=(lim)?lim:0; 1146 1147 var troceo=migeo.slice(1,-1).split('|'); 1148 var total_troceo=troceo.length; 1149 1150 if(lim!==0){ 1151 lim=total_troceo-(lim*4); 1152 } 1153 1154 var sal=''; 1155 var lugar_anterior=''; 1156 var desde=total_troceo-1; 1157 1158 for(var i=desde; i>lim; i-=4){ 1159 var lugar=troceo[i-3]; 1160 1161 if(lugar_anterior!=lugar){ 1162 if (i!=desde){ 1163 if(sal!=''){ 1164 sal = lugar + ' > ' + sal; 1165 }else{ 1166 sal = lugar + sal; 1167 } 1168 }else{ 1169 //sal = '<strong class="purple-text text-darken-1">'+troceo[i]+'</strong>' + sal; 1170 sal = '<strong>
1170'+lugar+'</strong>' + sal; 1171 } 1172 } 1173 lugar_anterior = lugar; 1174 }; 1175 return sal; 1176} 1177 1178//***************************************************************************************************************** 1179//****************************************************************************** OBTENER DISTANCIA **************** 1180//***************************************************************************************************************** 1181//------------------------------- Funcion que a partir de grados devuelve radianes 1182function deg2rad(deg) { 1183 return deg * (Math.PI/180); 1184} 1185//----------------- Funcion que a partir de las latitudes y longitudes de dos puntos, obtiene su distancia en KMS 1186function getDistanceFromLatLonInKm(lat1,lon1,lat2,lon2) { 1187 var R = 6371; // Radius of the earth in km 1188 var dLat = deg2rad(lat2-lat1); // deg2rad below 1189 var dLon = deg2rad(lon2-lon1); 1190 var a = 1191 Math.sin(dLat/2) * Math.sin(dLat/2) + 1192 Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * 1193 Math.sin(dLon/2) * Math.sin(dLon/2) 1194 ; 1195 var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 1196 var d = R * c; // Distance in km 1197 return Math.floor(d); 1198} 1199 1200/* ------------------------------------------------------------------------------------------------------------------------ */ 1201/* ------------------------------------------------------------------------ TEXTO/CONTADORES/KEYWORDS --------------------- */ 1202/* ------------------------------------------------------------------------------------------------------------------------ */ 1203//var keywordsBlackList=Array(); Se define en Global JS Inicial 1204 1205//------ pasa una palabra a singular 1206function toSingular(palabra){ 1207 var palabra_singular = palabra; 1208 palabra = palabra.toLowerCase(); 1209 1210 var terminacion_1=palabra.slice(-1); 1211 var terminacion_2=palabra.slice(-2); 1212 var last_3=palabra.slice(palabra.length-3,-2); 1213 1214 if (last_3=='n' || last_3=='t'){ //acaba en 's' 1215 if(terminacion_2=='es'){ //acaba en 'es' 1216 palabra_singular = palabra.slice(0,-2); //elimina el 'es' 1217 } 1218 }else if(terminacion_1 == 's'){ 1219 palabra_singular = palabra.slice(0,-1); //elimina la 's' 1220 } 1221 return palabra_singular; 1222} 1223 1224function normalize(text) { //Minúsculas sin acentos ni carácteres especiales 1225 var chars={ 1226 "á":"a", "é":"e", "Ã":"i", "ó":"o", "ú":"u", 1227 "à ":"a", "è":"e", "ì":"i", "ò":"o", "ù":"u", "ñ":"ñ", 1228 "Ã":"A", "Ã":"E", "Ã":"I", "Ã":"O", "Ã":"U", 1229 "Ã":"A", "Ã":"E", "Ã":"I", "Ã":"O", "Ã":"U", "Ã":"Ã"} 1230 var expr=/[áà éèÃìóòúùñ]/ig; 1231 var res=text.replace(expr,function(e){return chars[e]}); 1232 return res; 1233} 1234 1235//----------------------------------------------------------- FILTRO KEYWORDS 1236function keywords_filter(cadena, part_cadena=', ', max_length_word=4){ 1237 var quitar_final=part_cadena.length; 1238 //---------------- Eliminamos mayúsculas, acentos y demás marcajes en letras... 1239 cadena=normalize(cadena.toLowerCase()); 1240 //---------------- Sustituimos signos de puntuación como comas, interrogaciones, etc... por espacios 1241 cadena=cadena.replace(/[^A-Za-z0-9ñ\s]+/g, ' '); //Permitimos también la à 1242 1243 //$cad = preg_replace('/[^a-z0-9ñ]+/', ' ', $cad); 1244 //--------------------- Eliminamos espacios innecesarios al principio y final de la cadena 1245 cadena=cadena.replace(/^\s+|\s+$/g, ""); 1246 //--------------------- Eliminamos también espacios innecesarios entre palabras 1247 cadena=cadena.replace(/\s+/gi,'|'); 1248 //---------------- Eliminamos las palabras que no nos interesan 1249 var cadena_final=''; 1250 var cadena_partida=cadena.split('|'); 1251 1252 var devolver=''; 1253 for(var i=0; i<cadena_partida.length; i++){ 1254 var palabra=cadena_partida[i]; 1255 var libre=true; 1256 //------------------------- 1257 if(palabra.length<4){ 1258 libre=false; 1259 }else{ 1260 for(var j=0; j<keywordsBlackList.length; j++){ 1261 if(cadena_partida[i]==keywordsBlackList[j]){ 1262 libre=false; 1263 break; 1264 }; 1265 }; 1266 }; 1267 //------------------------- 1268 if(libre==true){ 1269 //palabra=toSingular(palabra); 1270 devolver+=palabra+part_cadena; 1271 }; 1272 }; 1273 1274 var rtn = devolver.substring(0, devolver.length-quitar_final); 1275 1276 return rtn; 1277 }; 1278 1279/* ------------------------------------------------------------------------------------------------------------------------ */ 1280/* ----------------------------------------------------------------------------------- OTROS/VARIOS ----------------------- */ 1281/* ------------------------------------------------------------------------------------------------------------------------ */ 1282//--------------------------------------- RGB to Hex 1283function hex(cv){ 1284 var parts = cv.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/); 1285 delete(parts[0]); 1286 for (var i = 1; i <= 3; ++i) { 1287 parts[i] = parseInt(parts[i]).toString(16); 1288 if (parts[i].length == 1) parts[i] = '0' + parts[i]; 1289 } 1290 return '#' + parts.join(''); 1291} 1292 1293 1294function linkDetect(text,cls='light-green-text text-darken-2'){ 1295 var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig; 1296 return text.replace(exp,'<a href="$1" target="_blank" class="b_txt underline toTransparent '+cls+'">$1</a>'); 1297}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.