Advertisement
gavin19

RES - NSFW toggle button

Oct 23rd, 2011
566
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. modules['nsfwToggle'] = { ///// Must be inserted AFTER the filteReddit module //////
  2.     moduleID: 'nsfwToggle',
  3.     moduleName: 'NSFW Toggle',
  4.     category: 'Filters',
  5.     options: {
  6.         nsfwLabel: {
  7.             type: 'text',
  8.             value: ['NSFW'],
  9.             description: 'Button label to show when in NSFW mode'
  10.         },
  11.         sfwLabel: {
  12.             type: 'text',
  13.             value: ['SFW'],
  14.             description: 'Button label to show when in SFW mode'
  15.         }
  16.     },
  17.     description: 'Adds a toggle button to turn NSFW posts on/off.',
  18.     isEnabled: function() {
  19.         return RESConsole.getModulePrefs(this.moduleID);
  20.     },
  21.     include: Array(/https?:\/\/([a-z]+).reddit.com\/?(?:\??[\w]+=[\w]+&?)*/i),
  22.     exclude: Array(/reddit.com\/r\//i,
  23.      /https?:\/\/([a-z]+).reddit.com\/[-\w\.\/]+\/comments\/[-\w\.]+/i,
  24.      /https?:\/\/([a-z]+).reddit.com\/user\/[-\w\.]+/i,
  25.      /https?:\/\/([a-z]+).reddit.com\/message\/[-\w\.]+/i),
  26.     isMatchURL: function() {
  27.         return RESUtils.isMatchURL(this.moduleID);
  28.     },
  29.     createNSFWButton: function() {
  30.         var parentDiv = document.querySelector('div#header-bottom-right ul.flat-list');
  31.         var dv = document.createElement("span");
  32.         dv.setAttribute("id", "nsfwSpan");
  33.         dv.innerHTML = '<button type="button" style="border:0px !important;padding:0px !important;font-size:10px !important" id="nsfwButton">' + this.options.nsfwLabel.value + '</button> | ';
  34.         parentDiv.parentNode.insertBefore(dv, parentDiv);
  35.     },
  36.  
  37.     setNSFW: function(nsfwValue, nsfwDisplay) {
  38.         var over18 = document.querySelectorAll('.content .over18'),
  39.             hidden = document.querySelectorAll('.content .hidden');
  40.         document.getElementById('nsfwButton').innerHTML = nsfwValue;
  41.         if (hidden.length > 0) {
  42.             for (var i = 0, lehh = hidden.length; i < lenh; i += 1) {
  43.                 hidden[i].setAttribute('style', 'display:none !important');
  44.             }
  45.         }
  46.         if (over18.length > 0) {
  47.             for (var x = 0, leno = over18.length; x < leno; x += 1) {
  48.                 if (!(over18[x].className.match(/_filtered/i))) {
  49.                     over18[x].setAttribute('style', 'display:' + nsfwDisplay);
  50.                 }
  51.             }
  52.         }
  53.     },
  54.  
  55.     addListener: function(nsfwLabel, sfwLabel) {
  56.         document.querySelector('#nsfwButton').addEventListener('click', function() {
  57.             if (this.innerHTML == nsfwLabel) {
  58.                 modules['nsfwToggle'].setNSFW(sfwLabel, "none");
  59.             } else {
  60.                 modules['nsfwToggle'].setNSFW(nsfwLabel, "block");
  61.             }
  62.         });
  63.     },
  64.     go: function() {
  65.         if ((this.isEnabled()) && (this.isMatchURL())) {
  66.             var divs,
  67.                 nsfwval,
  68.                 nsfwLabel = this.options.nsfwLabel.value,
  69.                 sfwLabel = this.options.sfwLabel.value;
  70.             this.createNSFWButton();
  71.             this.addListener(nsfwLabel, sfwLabel);
  72.             document.body.addEventListener('DOMNodeInserted', function(event) {
  73.                 if ((event.target.tagName == 'DIV') && (event.target.getAttribute('id') && event.target.getAttribute('id').indexOf('siteTable') != -1)) {
  74.                     divs = event.target.querySelectorAll('.content .thing');
  75.                     for (var i = 0, lend = divs.length; i < lend; i += 1) {
  76.                         if (divs[i].getAttribute('style')) {
  77.                             if ((divs[i].getAttribute('style').match(/none/i)) && (!(divs[i].className.match(/_filtered/i)))) {
  78.                                 divs[i].className += '_filtered';
  79.                             }
  80.                         }
  81.                     }
  82.                     nsfwVal = document.querySelector('#nsfwButton').innerHTML;
  83.                     if ((typeof(nsfwVal) === "undefined") || (nsfwVal === nsfwLabel)) {
  84.                         modules['nsfwToggle'].setNSFW(nsfwLabel, "block");
  85.                     } else {
  86.                         modules['nsfwToggle'].setNSFW(sfwLabel, "none");
  87.                     }
  88.                 }
  89.             }, true);
  90.             divs = document.querySelectorAll('.content .thing');
  91.             for (var i = 0, lend = divs.length; i < lend; i += 1) {
  92.                 if (divs[i].getAttribute('style')) {
  93.                     if ((divs[i].getAttribute('style').match(/none/i)) && (!(divs[i].className.match(/_filtered/i)))) {
  94.                         divs[i].className += '_filtered';
  95.                     }
  96.                 }
  97.             }
  98.         }
  99.     }
  100. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement