Advertisement
gavin19

RES - SFW Filter

Dec 9th, 2011
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. modules['sfwFilter'] = {
  2.     moduleID: 'sfwFilter',
  3.     moduleName: 'SFW Filter',
  4.     category: 'Filters',
  5.     options: {
  6.        //
  7.     },
  8.     description: 'Adds a toggle button to turn SFW posts on/off.',
  9.     isEnabled: function() {
  10.         return RESConsole.getModulePrefs(this.moduleID);
  11.     },
  12.     include: Array(/https?:\/\/([a-z]+).reddit.com\/?(?:\??[\w]+=[\w]+&?)*/i),
  13.     exclude: Array(
  14.      /\/Dashboard\//i,
  15.      /https?:\/\/([a-z]+).reddit.com\/[-\w\.\/]+\/comments\/[-\w\.]+/i,
  16.      /https?:\/\/([a-z]+).reddit.com\/user\/[-\w\.]+/i,
  17.      /https?:\/\/([a-z]+).reddit.com\/message\/[-\w\.]+/i),
  18.     isMatchURL: function() {
  19.         return RESUtils.isMatchURL(this.moduleID);
  20.     },
  21.     createNSFWButton: function(nsfwState) {
  22.         var parentDiv = document.querySelector('div#header-bottom-right ul.flat-list');
  23.         var dv = document.createElement("span");
  24.         dv.setAttribute("id", "nsfwSpan");
  25.         dv.innerHTML = '<button type="button" style="border:0px !important;padding:0px !important;font-size:10px !important" id="nsfwButton">' + nsfwState + '</button> | ';
  26.         parentDiv.parentNode.insertBefore(dv, parentDiv);
  27.     },
  28.  
  29.     setNSFW: function(nsfwState, nsfwDisplay) {
  30.         var over18 = document.querySelectorAll('.thing:not(.over18)');
  31.         document.getElementById('nsfwButton').innerHTML = nsfwState
  32.         if (over18.length > 0) {
  33.             for (var x = 0, leno = over18.length; x < leno; x += 1) {
  34.                 if (!(over18[x].className.match(/_filtered/i))) {
  35.                     over18[x].setAttribute('style', 'display:' + nsfwDisplay);
  36.                 }
  37.             }
  38.         }
  39.         RESStorage.setItem('RESoptions.sfwFilter.state', nsfwState);
  40.     },
  41.     addListener: function(thisOff, thisOn) {
  42.         document.querySelector('#nsfwButton').addEventListener('click', function() {
  43.             if (this.innerHTML == 'OFF') {
  44.                 modules['sfwFilter'].setNSFW(thisOn, "none");
  45.             } else {
  46.                 modules['sfwFilter'].setNSFW(thisOff, "block");
  47.             }
  48.         });
  49.     },
  50.     go: function() {
  51.         if ((this.isEnabled()) && (this.isMatchURL())) {
  52.             var divs,
  53.                 nsfwState,
  54.                 thisOn = 'ON',
  55.                 thisOff = 'OFF';
  56.             RESStorage.getItem('RESoptions.sfwFilter.state') != null ? nsfwState = RESStorage.getItem('RESoptions.sfwFilter.state') : nsfwState = 'OFF';
  57.             console.log(nsfwState);
  58.             this.createNSFWButton(nsfwState);
  59.             this.addListener(thisOff, thisOn);
  60.             document.body.addEventListener('DOMNodeInserted', function(event) {
  61.                 if ((event.target.tagName == 'DIV') && (event.target.getAttribute('id') && event.target.getAttribute('id').indexOf('siteTable') != -1)) {
  62.                     divs = event.target.querySelectorAll('.content .thing');
  63.                     for (var i = 0, lend = divs.length; i < lend; i += 1) {
  64.                         if (divs[i].getAttribute('style')) {
  65.                             if ((divs[i].getAttribute('style').match(/none/i)) && (!(divs[i].className.match(/_filtered/i)))) {
  66.                                 divs[i].className += '_filtered';
  67.                             }
  68.                         }
  69.                     }
  70.                     nsfwState = document.querySelector('#nsfwButton').innerHTML;
  71.                     if ((nsfwState === 'ON')) {
  72.                         modules['sfwFilter'].setNSFW(thisOff, "block");
  73.                     } else {
  74.                         modules['sfwFilter'].setNSFW(thisOn, "none");
  75.                     }
  76.                 }
  77.             }, true);
  78.             divs = document.querySelectorAll('.content .thing');
  79.             for (var i = 0, lend = divs.length; i < lend; i += 1) {
  80.                 if (divs[i].getAttribute('style')) {
  81.                     if ((divs[i].getAttribute('style').match(/none/i)) && (!(divs[i].className.match(/_filtered/i)))) {
  82.                         divs[i].className += '_filtered';
  83.                     }
  84.                 }
  85.             }
  86.             if(nsfwState==='ON') {
  87.                 modules['sfwFilter'].setNSFW(thisOn, "none");
  88.             }
  89.         }
  90.     }
  91. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement