Google Shopping Duplicates

Detect duplicate items

As of 2020-07-23. See the latest version.

// ==UserScript==
// @name         Google Shopping Duplicates
// @namespace    https://www.latinsud.com
// @version      0.1
// @description  Detect duplicate items
// @author       LatinSuD
// @match        https://shoppinglist.google.com/lists/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    var mydivd=document.createElement('DIV');

    document.body.appendChild(mydivd)
    mydivd.style="position: fixed; left: 3em; top: 0; z-index: 9999";

    var retraso=null;



    // Esta es la chicha
    function calcular() {
        console.log("Checking duplicates...")


        var lista0=Array.from(document.body.querySelectorAll('SPAN.listItemTitle'));

        var lista = lista0.sort(function(a,b){
            //console.log(a)
            //console.log(b)
            if (a.textContent > b.textContent) return 1;
            if (a.textContent < b.textContent) return -1;
            return 0;
        });

        var dups=""

        lista.forEach(function(e) {
            lista.some(function(f) {
                if (e==f) { return true; }

                if (e.textContent == f.textContent) {
                    dups=dups+e.textContent +", ";
                    //console.log("BIEN");
                }

            })
        })

        mydivd.innerHTML="Duplicates: " + dups;
    }


    /****************************************/
    /*  CONFIGURAMOS EL OBSERVER Y EL TIMER */
    /****************************************/

    // selecciona el nodo target
    var target = document.querySelector('#some-id');


    // Configura el observer:
    var config = { attributes: false, childList: false, characterData: true, subtree: true };


    // Crea una instancia de observer
    var observer = new MutationObserver(function(mutations) {
        //console.log(mutations)
        if (retraso) clearTimeout(retraso);

        retraso=setTimeout(calcular, 1000);
        //console.log("FIN MUTACION")

        // pasa al observer el nodo y la configuracion
        //observer.observe(document.body, config);
    });


    // pasa al observer el nodo y la configuracion
    observer.observe(document.body, config);



})();