No Caps

Makes stuff with all caps lowercase

  1. // ==UserScript==
  2. // @name No Caps
  3. // @namespace https://greasyfork.org/en/scripts/22856-no-caps
  4. // @version 1.0
  5. // @description Makes stuff with all caps lowercase
  6. // @author abbott
  7. // @match *://*/*
  8. // ==/UserScript==
  9.  
  10. window.onload = function() {
  11. var elements = document.body.getElementsByTagName('*');
  12.  
  13. for (var i = 0, element; element = elements[i]; i++) {
  14. var text = '';
  15. element.innerHTML.split(/(<.+?>)/).forEach(function(s) {
  16. text += s.charAt(0) === '<' ? s : noCaps(s);
  17. });
  18.  
  19. element.innerHTML = text;
  20. }
  21. };
  22.  
  23. // enforces proper capitalization, lowercases words with all caps
  24. function noCaps(s) {
  25. return s.split(' ').map(function(word) {
  26. var caps = 0;
  27.  
  28. for (var i = 0, char; char = word.charAt(i); i++) {
  29. if (char !== char.toLowerCase()) {
  30. caps++;
  31. }
  32. }
  33.  
  34. if (caps === (word.length - nonAlpha(word))) {
  35. return word.toLowerCase();
  36. }
  37. return word;
  38. }).join(' ');
  39. }
  40.  
  41. function nonAlpha(s) {
  42. var count = 0;
  43.  
  44. for (var i = 0, char; char = s.charAt(i); i++) {
  45. count += (char.toUpperCase() === char.toLowerCase()) ? 1 : 0; // non letters would return the same result
  46. }
  47.  
  48. return count;
  49. }