kalpdev.1 / KeyLight 2

// ==UserScript==
// @name          KeyLight 2
// @namespace     kalpsdj
// @author        Shjaisw
// @license       MIT
// @updateURL     https://openuserjs.org/meta/kalpdev.1/KeyLight_2.meta.js
// @downloadURL   https://openuserjs.org/install/kalpdev.1/KeyLight_2.user.js
// @run-at        document-end
// @version       3.5
// @description   Highlights battery Product Details Text
// @include       https://*
// @exclude       https://*google*
// @exclude       https://argus.aka.amazon.com/*
// @exclude       https://issues.amazon.com/*
// @grant         GM_registerMenuCommand
// @grant         GM_setValue
// @grant         GM_getValue
// ==/UserScript==


 // Do not make any changes/delete any script,line no 13. We are not responsible for any changes in script. Do not allow script to run on argus.  


(function() { // Highlight connecting words details
  'use strict';

  if (window.self !== window.top) { return; }


  function setUserPref(varName, defaultVal, menuText, promtText, sep){
    GM_registerMenuCommand(menuText, function() {
      var val = prompt(promtText, GM_getValue(varName, defaultVal));
      if (val === null)  { return; }

      if (sep && val){
        var pat1 = new RegExp('\\s*' + sep + '+\\s*', 'g');
        var pat2 = new RegExp('(?:^' + sep + '+|' + sep + '+$)', 'g'); // trim starting & trailing separator
        val = val.replace(pat1, sep).replace(pat2, '');
      }
      val = val.replace(/\s{2,}/g, ' ').trim();
      GM_setValue(varName, val);

      if(!document.body.querySelector(".THmo")) THmo_doHighlight(document.body);
      else location.reload();
    });
  }


  var THmo_MutOb = (window.MutationObserver) ? window.MutationObserver : window.WebKitMutationObserver;
  if (THmo_MutOb){
    var THmo_chgMon = new THmo_MutOb(function(mutationSet){
      mutationSet.forEach(function(mutation){
        for (var i=0; i<mutation.addedNodes.length; i++){
          if (mutation.addedNodes[i].nodeType == 1){
            THmo_doHighlight(mutation.addedNodes[i]);
          }
        }
      });
    });
    // attach chgMon to document.body
    var optss = {childList: true, subtree: true};
    THmo_chgMon.observe(document.body, optss);
  }



  function THmo_doHighlight(el){
    var sdj = GM_getValue('sdj');
    if(!sdj) sdj = "smoke alarm,Built-in,tracker,thermo-electric,user guide,Refurbished,Renewed,(FCG) Flammable Compressed Gas ,Fuel tank,Valve,Shut off knob / knob,Propane,Carburetor ,Fuel filter,Fuel pump,Fuel injection rail,Injector,Gasoline,Petroleum,Amazon devices (Echo dot, kindle),Copra (halves, flakes, desiccated),Shock absorber,Gas spring,Strut,Lift chair,Props,Camp stove ,Soldering tool,user manual,thermoelectric,thermo electric,jump starter,selfie remote,keyfob,ride-on,ride on ,Light-up,dog collars,dog collar,watch,watches,watch strap,smart watch,i-phones,i-phone,iphones,iphone,E-Cigarette,tuners,tuner,Clip-on,keyboard,portable,earbud,earbuds,bluetooth earbuds,bluetooth earbud,headphones,box,headphone,bluetooth headphones,bluetooth headphone,powerbank,wireless,bluetooth,bluetooth speaker,quarz,qaurtz,remote,Solar,adaptor,charger,speaker,Batterie,batterien,batteries,Battery,battery pack,Batteries Included"
    var sdjc = GM_getValue('sdjc');
    if (!sdjc) sdjc = "color: #000; font-weight: bold; background-color: #00e1f7d6;"

    var rQuantifiers = /[-\/\\^$*+?.()|[\]{}]/g;
    sdj = sdj.replace(rQuantifiers, '\\$&').split(',').join('|');
    var pat = new RegExp('(' + sdj + ')', 'gi');
    var span = document.createElement('span');

    var snapElements = document.evaluate(
        './/text()[normalize-space() != "" ' +
        'and not(ancestor::style) ' +
        'and not(ancestor::script) ' +
        'and not(ancestor::textarea) ' +
        'and not(ancestor::code) ' +
        'and not(ancestor::pre)]',
        el, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);

    if (!snapElements.snapshotItem(0)) { return; }

    for (var i = 0, len = snapElements.snapshotLength; i < len; i++) {
      var node = snapElements.snapshotItem(i);

      if (pat.test(node.nodeValue)) {

        if (node.className != "THmo" && node.parentNode.className != "THmo"){

          var sp = span.cloneNode(true);
          sp.innerHTML = node.nodeValue.replace(pat, '<span style="' + sdjc + '" class="THmo">$1</span>');
          node.parentNode.replaceChild(sp, node);
        }
      }
    }
  }

  // first run
  THmo_doHighlight(document.body);
})();