Advertisement
gavin19

RES - NSFW/SFW Filter

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