kalpdev.1 / KeyLight 6

// ==UserScript==
// @name          KeyLight 6
// @namespace     kalpsdj
// @author        Shjaisw
// @license       MIT
// @updateURL     https://openuserjs.org/meta/kalpdev.1/KeyLight_6.meta.js
// @downloadURL   https://openuserjs.org/install/kalpdev.1/KeyLight_6.user.js
// @run-at        document-end
// @version       3.6
// @description   Highlights Connecting words
// @include       https://*
// @exclude       https://*google*
// @exclude       https://*policy*
// @exclude       https://*share*
// @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 Realated product 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="ride-on, acid pack, eco drive, solar, Desktop computers, Motherboards, iphone,ipod,laptop,macbook, lighter, lead acid, ups, Jump Starter, speaker, remote, key fob, keyboard, mobile, fitbit, tablet, vibrator, wand, massager, tuner, headphone, charging case, Light-up, Nitro fuel, Vape Pen, Mod,rifle scope, Spring, GAS CARTRIDGES, Pepper spray, AIR DUSTERS, Christmas crackers, SNAP, party popper, Smoke bomb, Charcoal, ink, magnet, MRE, Airbags, fire extinguisher, zippo, ferrocerium, magnesium, ABV, Zippo, Ignition, Felt tip pens, blood pressure monitor, guage, Sphygmomanometer, thermometer, precharged, Photoelectric, Tritium, Ionization, dessicant, TEC, Refrigerant, Thermoelectric, supplement, Wipes, Neodymium, soda stream, coolent, shock absorber"
    var sdjc = GM_getValue('sdjc');
    if (!sdjc) sdjc = "color: #000; font-weight: bold; background-color: #FF6347;"

    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);
})();