// ==UserScript==
// @name Precios Claros
// @namespace http://preciosclaros.gob.ar/
// @version 0.52
// @description Compara precios en PreciosClaros
// @author Jonatan Pintos
// @match *://*.preciosclaros.gob.ar/*
// @require http://code.jquery.com/jquery-3.4.1.min.js
// @license MIT
// @grant GM_addStyle
// ==/UserScript==
GM_addStyle(".ocultar {color: #c5c8c9; cursor: pointer; display: INLINE-BLOCK; WIDTH: 50%; TEXT-ALIGN: LEFT;} "+
".favoritear {color: #c5c8c9; cursor: pointer; display: INLINE-BLOCK; WIDTH: 50%; TEXT-ALIGN: RIGHT;} "+
"img.bordernone {border: 0;} "+
".expandible>div {background-color: white; display: flex; max-width: 1080px; margin: auto; height: auto; clear: both; margin-bottom: 2em; flex-direction: row; flex-wrap: wrap; justify-content: center; align-items: stretch;} " +
".expandible>div:not(.desocultado) .ocultado {display: none !important;} " +
".expandible>div.desocultado .ocultado .caja-producto-mosaico {border-color: red;} " +
".expandible.ocultado>div {display: none !important;} " +
"div.producto {min-width: 250px;} " +
"#favoritos a.favoritear{display: none !important;} " +
".expandible {text-align: center; border-width: medium; border-style: solid; display: table; border-color: #e2d0ff; border-radius: 1em; margin: auto;} "
);
$(document).ready(function() {
var favoritos=window.localStorage.getItem('favoritos');
var oportunidades=window.localStorage.getItem('oportunidades');
var cupones=window.localStorage.getItem('cupones');
var revisados = window.localStorage.getItem('revisados');
revisados = revisados.split(",");
if (favoritos == null){favoritos=''}
if (oportunidades == null){oportunidades=''}
if (cupones == null){cupones=''}
console.log('PLUGIN: Funcionando');
var bsco=1;
function buscarof(){
if (bsco==1){
$('input#bo').val('Activar Navegación automática');
bsco=0;
console.log("PLUGIN: Se desactivó la navegación automática")
} else {
$('input#bo').val('Detener Navegación automática');
bsco=1;
cambiarpag();
console.log("PLUGIN: Se activó la navegación automática")
}
}
function limpiarof(){$("#cupones").empty(); $("#oportunidades").empty();}
$.fn.classChange = function(cb) {
return $(this).each((_, el) => {
new MutationObserver(mutations => {
mutations.forEach(mutation => cb && cb(mutation.target, $(mutation.target).prop(mutation.attributeName)));
}).observe(el, {
attributes: true,
attributeFilter: ['class'] // only listen for class attribute changes
});
});
}
var temporizador = 500;
var pag = 1;
var elements;
var newelements;
var cantidad = 0;
var index = 0;
var comparar=0;
var ultimo;
var producto;
var ean;
var buscar=0;
var loc1='Carrefour';
var suc1='Catamarca 1965';
var loc2='Dia';
var suc2='Cl Alberti 2151';
var loc3='Toledo';
var suc3='Av.Constitucion 4386';
var loc4='Toledo';
var suc4='La Rioja 1445';
var loc5='Toledo';
var suc5='Rivadavia 2248';
var loc6='Vea';
var suc6='Avenida Independencia 3705';
$("header").append('<div id="botones" style="background-color: white; display: -webkit-box; max-width:1080px; margin: auto; height: auto; clear: both; margin-bottom: 2em;"></div>' +
'<div class="expandible ocultado"><a href="#" onclick="event.preventDefault(); $(this).parent(\'.expandible\').toggleClass(\'ocultado\')">FAVORITOS</a><div id="favoritos">'+
favoritos.toString()+
'</div></div><div class="expandible ocultado"><a href="#" onclick="event.preventDefault(); $(this).parent(\'.expandible\').toggleClass(\'ocultado\')">OFERTAS</a><div id="oportunidades" class="ofertas">'+
oportunidades.toString()+
'</div></div><div class="expandible"><a href="#" onclick="event.preventDefault(); $(this).parent(\'.expandible\').toggleClass(\'ocultado\')">CUPONES</a><div id="cupones" class="ofertas">'+
cupones.toString()+
'</div></div>');
// $(".contenedor-spinner").css("position","relative");
// $(".pagination").css("display","block!important;");
// function favoritear(favorito) {
// $('[data-sort='+favorito+']').clone().appendTo("#seleccion1");
//}
$("body").on('DOMSubtreeModified', ".productos div .producto .caja-producto-mosaico", function() {
cantidad=0;
});
const $contenedor = $(".contenedor-spinner").classChange(function(){if ($(".contenedor-spinner").hasClass("ng-hide") && buscar==1){
setTimeout(function() {
console.log('PLUGIN: Finalizó la carga de nuevos datos');
newelements=$(".productos div .producto .caja-producto-mosaico .precio");
if (($(".precio").length>0)&&(buscar==1))
{
console.log('PLUGIN: Se encontraron productos');
if (cantidad==0)
{
console.log('PLUGIN: Leyendo nuevos productos...');
elements = $(".productos div .producto .caja-producto-mosaico .precio");
cantidad = elements.length;
index=0;
ultimo=index;
if (cantidad>0) {ordenar();precios();}
}
else if (comparar==1)
{
comparar=0;
console.log('PLUGIN: Se van a comparar comercios');
var menorprecio=0;
var sucursal="";
var pre1=0;
var msj="";
var pre1a=0;
var pre1b=0;
var pre2=0;
var pre3=0;
var pre4=0;
var pre5=0;
var pre6=0;
var precio;
var tienda="";
var msj1="";
var msj2="";
var num=0;
$('table.tabla-comparativa > tbody > tr').not('.ng-hide').each(function(){
precio = 0;
sucursal="";
precio = Number.parseFloat($.trim($(this).children('td.detalle-precio').children('span.precio-lista').text()).replace('$', '').replace(' ', ''),2);
sucursal = $.trim($(this).children('td.detalle-mercado').children('div.contenedor-descripcion').children('p.direccion.ng-binding').text());
console.log('PLUGIN: Viendo '+ producto +' en '+ sucursal +' con el precio $'+ precio);
if((precio>0)&&(sucursal!=""))
{
if(sucursal==suc1){
pre1=precio
pre1a=Number.parseFloat($.trim($(this).children('td').children('span.precio-promo-1').children('span').text()).replace('$', '').replace(' ', ''),2);
if (pre1a>0)console.log('PLUGIN: El producto '+ producto +' tiene una oferta en $'+ pre1a);
pre1b=Number.parseFloat($.trim($(this).children('td').children('span.precio-promo-2').children('span').text()).replace('$', '').replace(' ', ''),2);
if (pre1b>0)console.log('PLUGIN: El producto '+ producto +' tiene una oferta en $'+ pre1b);
msj1=$(this).children('td').children('span.precio-promo-1').children('span').attr('title');
msj2=$(this).children('td').children('span.precio-promo-2').children('span').attr('title');
}
else if(sucursal==suc2){pre2=precio;if((menorprecio==0)||(precio<menorprecio)){menorprecio=precio; num=1}}
else if(sucursal==suc3){pre3=precio;if((menorprecio==0)||(precio<menorprecio)){menorprecio=precio; num=2}}
else if(sucursal==suc4){pre4=precio;if((menorprecio==0)||(precio<menorprecio)){menorprecio=precio; num=3}}
else if(sucursal==suc5){pre5=precio;if((menorprecio==0)||(precio<menorprecio)){menorprecio=precio; num=4}}
else if(sucursal==suc6){pre6=precio;if((menorprecio==0)||(precio<menorprecio)){menorprecio=precio; num=5}}
}
});
tienda=loc2+': '+suc2;
if (pre2>0) tienda+=' $'+pre2; else tienda+=' -';
if (menorprecio==pre2) tienda+=' *';
tienda+='<br>'
tienda+=loc3+': '+suc3;
if (pre3>0) tienda+=' $'+pre3; else tienda+=' -';
if (menorprecio==pre3) tienda+=' *';
tienda+='<br>'
tienda+=loc4+': '+suc4;
if (pre4>0) tienda+=' $'+pre4; else tienda+=' -';
if (menorprecio==pre4) tienda+=' *';
tienda+='<br>'
tienda+=loc5+': '+suc5;
if (pre5>0) tienda+=' $'+pre5; else tienda+=' -';
if (menorprecio==pre5) tienda+=' *';
tienda+='<br>'
tienda+=loc6+': '+suc6;
if (pre6>0) tienda+=' $'+pre6; else tienda+=' -';
if (menorprecio==pre6) tienda+=' *';
if ((((menorprecio+500)<=pre1)||((menorprecio*1.15)<=pre1))&& menorprecio>0) {
if (!($('#p-'+ean).length > 0)) {
$("#cupones").append('<div id="p-'+ean+'" class="col-md-3 col-xs-6 producto ng-scope " data-sort="'+num+('00' + parseInt((1+((pre1-((pre1-menorprecio)*2))/pre1))*10)).slice(-3)+'"></div>');
}
$('#p-'+ean).html('<div class="caja-producto-mosaico"><a href="#" onclick="event.preventDefault(); $(this).parents(\'div.producto\').toggleClass(\'ocultado\')" class="ocultar"><i class="fa fa-close fa-fw fa-2x margin-bottom"></i></a>'+
'<a href="#" onclick="event.preventDefault(); $(this).parents(\'div.producto\').clone().appendTo(\'#favoritos\');" class="favoritear"><i class="fa fa-star fa-fw fa-2x margin-bottom"></i></a>'+
'<div class="contenedor-imagen"><img onError="this.onerror=null;this.src=\'/img/no-image.png\';" src="'+
$('#detalle-producto-minorista').find( "img.img-rounded" ).attr("src")+
'"></div><div class="contenedorProductoEan ver-detalle-mayorista"><div class="nombre-producto ng-binding">'+
producto+'</div><div class="ean ng-binding" data-ean="'+ean+'">'+ean+'</div></div><div class="precio ng-binding" style="background-color: #cfffd0;">$'+pre1+' -> $'+
(pre1-((pre1-menorprecio)*2)) +' (cupon $'+((pre1-menorprecio)*2) +') *'+
'</div><div class="carrito"><small style="margin:0; width: 100%; text-align: center; padding-bottom: 10px;" class="ng-binding">'+
tienda+
'</small></div></div>');
} else {
$("#p-"+ean).remove();
if (pre1a>0 && pre1b>0) {
if (pre1a>pre1b) {
pre1=pre1b
msj=msj2;
console.log('PLUGIN: El producto '+ producto +' tiene una oferta en $'+ pre1+' ('+tienda+')');
}else{
pre1=pre1a
msj=msj1;
console.log('PLUGIN: El producto '+ producto +' tiene una oferta en $'+ pre1+' ('+tienda+')');
}
} else if (pre1a>0){
pre1=pre1a
msj=msj1;
console.log('PLUGIN: El producto '+ producto +' tiene una oferta en $'+ pre1+' ('+tienda+')');
}else if (pre1b>0){
pre1=pre1b
msj=msj2;
console.log('PLUGIN: El producto '+ producto +' tiene una oferta en $'+ pre1+' ('+tienda+')');
}100
50
if ((((pre1+500)<=menorprecio)||((pre1*1.15)<=menorprecio))&& pre1>0) {
if (!($('#o-'+ean).length > 0)) {
$("#oportunidades").append('<div id="o-'+ean+'" class="col-md-3 col-xs-6 producto ng-scope" data-sort="'+parseInt(pre1*100/menorprecio)+'"></div>');
}
$('#o-'+ean).html('<div class="caja-producto-mosaico"><a href="#" onclick="event.preventDefault(); $(this).parents(\'div.producto\').toggleClass(\'ocultado\')" class="ocultar"><i class="fa fa-close fa-fw fa-2x margin-bottom"></i></a>'+
'<a href="#" onclick="event.preventDefault(); $(this).parents(\'div.producto\').clone().appendTo(\'#favoritos\');" class="favoritear"><i class="fa fa-star fa-fw fa-2x margin-bottom"></i></a>'+
'<div class="contenedor-imagen"><img onError="this.onerror=null;this.src=\'/img/no-image.png\';" src="'+
$('#detalle-producto-minorista').find( "img.img-rounded" ).attr("src")+
'"></div><div class="contenedorProductoEan ver-detalle-mayorista"><div class="nombre-producto ng-binding">'+
producto+'</div><div class="ean ng-binding" data-ean="'+ean+'">'+ean+'</div></div><div class="precio ng-binding" style="background-color: #cfffd0;">$'+pre1+' (-'+(100-parseInt(pre1*100/menorprecio))+'%) *'+
'</div><div class="carrito"><small style="margin:0; width: 100%; text-align: center; padding-bottom: 10px;" class="ng-binding">'+
tienda+'<br>'+msj+
'</small></div></div>');
}
}
revisados.push(String(ean));
index++;
precios();
}
else if (index>cantidad)
{
console.log('PLUGIN: indice '+index+', cantidad '+cantidad);
pag = Number.parseFloat($("ul.pagination").children("li.active").children(".ng-binding").text());
console.log('PLUGIN: Se terminaron de revisar los productos de la página '+pag+', se puede cambiar de página...');
cantidad=0;
index=0;
cambiarpag();
}
else if(index>ultimo)
{
precios();
}
else
{
console.log('PLUGIN: problemas?');
}
}
else {
console.log('PLUGIN: No se encontraron productos')
}
}, temporizador);
}});
function precios() {
if (($(".precio").length>0)&&(buscar==1))
{
var doNext = null;
doNext = function() {
if (cantidad==0)
{
console.log('PLUGIN: Leyendo nuevos productos...');
elements = $(".productos div .producto .caja-producto-mosaico .precio");
cantidad = elements.length;
index=0;
ultimo=index;
if (cantidad>0) {ordenar(); doNext();}
}
else if(index==cantidad)
{
console.log('PLUGIN: indice '+index+', cantidad '+cantidad);
pag = Number.parseFloat($("ul.pagination").children("li.active").children(".ng-binding").text());
console.log('PLUGIN: Se terminaron de revisar los productos de la página '+pag+', se puede cambiar de página...');
cantidad=0;
index=0;
cambiarpag();
}
else
{
var element = elements.eq(index);
ean = parseInt(element.parent(".caja-producto-mosaico").children(".contenedorProductoEan").children(".ean").text());
console.log('PLUGIN: Revisando producto nro '+ (index+1) + ' de ' + cantidad + ', ean:' + ean);
if ( isNaN(ean) || ean=="" || $.inArray( String(ean), revisados )>0 ) {
console.log('PLUGIN: El EAN '+ ean + ' está repetido o no existe... ');
index++;
doNext();
}
else if (($('#o-'+ean+'.ocultado').length > 0) || ($('#p-'+ean+'.ocultado').length > 0)) {
console.log('PLUGIN: El EAN '+ ean + ' está oculto... ');
index++;
doNext();
}
else {
var numero1 = Number.parseFloat($.trim(element.text().split('a', 1)[0]).replace('$', '').replace(' ', ''),2);
var numero2 = Number.parseFloat($.trim(element.text().split('a', 2)[1]).replace('$', '').replace(' ', ''),2);
if (((numero1+1000)<=numero2)||((numero1*1.25)<=numero2)){
comparar=1;
producto=$.trim(element.parent(".caja-producto-mosaico").children(".contenedorProductoEan").children(".nombre-producto").text());
setTimeout(function() {
element.parent(".caja-producto-mosaico").children(".contenedorProductoEan").children(".nombre-producto")[0].click();
}, temporizador);
}
else {
index++;
doNext();
}
}
}
}
doNext();
}
}
function desocultar() {
$( "#oportunidades" ).toggleClass('desocultado');
$( "#cupones" ).toggleClass('desocultado');
};
function favorito() {
var resultado = $('.favorito');
$('#favoritos').html(resultado);
};
function ordenar() {
var resultado = $('#cupones .producto').sort(function (a, b) {
var contentA =parseInt( $(a).data('sort'));
var contentB =parseInt( $(b).data('sort'));
return (contentA < contentB) ? -1 : (contentA > contentB) ? 1 : 0;
});
$('#cupones').html(resultado);
resultado = $('#oportunidades .producto').sort(function (a, b) {
var contentA =parseInt( $(a).data('sort'));
var contentB =parseInt( $(b).data('sort'));
return (contentA < contentB) ? -1 : (contentA > contentB) ? 1 : 0;
});
$('#oportunidades').html(resultado);
$('#favoritos .ocultado').remove();
window.localStorage.setItem('cupones', $('#cupones').html());
window.localStorage.setItem('oportunidades', $('#oportunidades').html());
window.localStorage.setItem('favoritos', $('#favoritos').html());
window.localStorage.setItem('revisados', revisados);
};
function vaciarcache() {
window.localStorage.setItem('revisados', 0);
revisados=[];
};
function cambiarpag() {
if (bsco==1 && index==0){
console.log('PLUGIN: Se va a cambiar la página automáticamente');
pag = Number.parseFloat($("ul.pagination").children("li.active").children(".ng-binding").text());
setTimeout(function() {
$("ul.pagination").children("li").each(function(){
if (Number.parseFloat($(this).children(".ng-binding").text()) == pag+1) {
console.log("PLUGIN: Redirigiendo a la PAGINA "+(pag+1));
$(this).children(".ng-binding")[0].click();
}
});
}, temporizador);
}
};
function reiniciarbus() {
if (buscar==1)
{
console.log('PLUGIN: Parando busqueda...');
buscar=0;
$('input#breiniciar').val('Reiniciar busqueda');
}
else
{
console.log('PLUGIN: Reiniciando busqueda...');
buscar=1;
$('input#breiniciar').val('Detener busqueda');
precios();
}
}
function crearbotones() {
bsco=1;
var j = $('<input/>').attr({
type: "button",
id: "breiniciar",
value: "Iniciar busqueda"
});
$("#botones").append(j);
$('#breiniciar')[0].addEventListener("click", reiniciarbus);
var r = $('<input/>').attr({
type: "button",
id: "bo",
value: "Detener Navegación automática"
});
$("#botones").append(r);
$('#bo')[0].addEventListener("click", buscarof);
var k = $('<input/>').attr({
type: "button",
id: "lo",
value: "Limpiar lista"
});
$("#botones").append(k);
$('#lo')[0].addEventListener("click", limpiarof);
var cac = $('<input/>').attr({
type: "button",
id: "rca",
value: "Vaciar cache"
});
$("#botones").append(cac);
$('#rca')[0].addEventListener("click", vaciarcache);
var h = $('<input/>').attr({
type: "button",
id: "rd",
value: "Ordenar/guardar lista"
});
$("#botones").append(h);
$('#rd')[0].addEventListener("click", ordenar);
var n = $('<input/>').attr({
type: "button",
id: "ds",
value: "Ver ocultos"
});
$("#botones").append(n);
$('#ds')[0].addEventListener("click", desocultar);
}
crearbotones();
});