Guest User

Empuzzler

a guest
Oct 8th, 2014
225
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. // ==UserScript==
  3. // @name        Puzzling.SE Empuzzler
  4. // @namespace   https://greasyfork.org/users/5615-doppelgreener
  5. // @description Hide answers and comments on Puzzling.SE questions until you want to see them.
  6. // @grant       none
  7. // @include     http://puzzling.stackexchange.com/questions/*
  8. // @version     0.2
  9. // ==/UserScript==
  10.  
  11. // Changelog:
  12. // 0.3      Cleaned up :-)
  13. // 0.2      Show Everything button added.
  14. // 0.1      First version, with show comments/answers buttons only.
  15. (function() {
  16.  
  17.     var main = function() {
  18.  
  19.         var identifiers,
  20.             styles,
  21.             commentsButton,
  22.             answersButton,
  23.             showAllButton;
  24.  
  25.         identifiers = {
  26.             'comments': 'show-comments',
  27.             'answers': 'show-answers'
  28.         };
  29.  
  30.         styles = {
  31.             'hide-comments': [
  32.                 'body:not(.' + identifiers.comments + ') #question .comments            { display: none; }',
  33.                 'body:not(.' + identifiers.comments + ') #question .comments-link       { display: none; }',
  34.                 'body:not(.' + identifiers.comments + ') #question .comments-link ~ *   { display: none; }',
  35.                 'body:not(.' + identifiers.comments + ') #question .bounty-link         { display: none; }',
  36.                 'body.' + identifiers.comments + ' .' + identifiers.comments + '        { display: none; }'  // hide the button(s)
  37.             ],
  38.             'hide-answers': [
  39.                 'body:not(.' + identifiers.answers + ') #answers                        { display: none; }',
  40.                 'body.' + identifiers.answers + ' .' + identifiers.answers + '          { display: none; }'  // hide the button(s)
  41.             ],
  42.             'empuzzler-misc': [
  43.                 '#empuzzler-revealers button { margin: 0.5em 0.5em 0.5em 0; padding: 0.5em; }',
  44.                 '#empuzzler-revealers input { margin: 0.5em 0.5em 0.5em 0; }',
  45.                 '#empuzzler-revealers p { margin: 0.5em; }',
  46.             ]
  47.         };
  48.  
  49.         // Creates a button with chosen type, text and affecting certain classes
  50.         function makeButton(buttonType, buttonText, classesToAdd) {
  51.             return (
  52.                 'submit' === buttonType
  53.                     ? $('<input/>').attr('type', 'submit').val(buttonText)
  54.                     : $('<button/>').text(buttonText)
  55.                 ).addClass(classesToAdd)
  56.                 .on('click', function() {
  57.                     $('body').addClass(classesToAdd);
  58.                 });
  59.         }
  60.  
  61.         // Create the 3 "show x" buttons
  62.         commentsButton = makeButton('button', 'Show comments on question', identifiers.comments);
  63.         answersButton = makeButton('button', 'Show answers', identifiers.answers);
  64.         showAllButton = makeButton('submit', 'Show everything!', identifiers.comments + ' ' + identifiers.answers);
  65.  
  66.         // Create a container for the buttons and insert it after the question
  67.         $('<div/>')
  68.             .attr('id', 'empuzzler-revealers')
  69.             .append(
  70.                 commentsButton,
  71.                 answersButton,
  72.                 '<p class="' + identifiers.comments + ' ' + identifiers.answers + '">or</p>',
  73.                 showAllButton
  74.             ).insertAfter('#question');
  75.  
  76.         // Add the CSS to the page
  77.         for (var i in styles) {
  78.             if (styles.hasOwnProperty(i)) {
  79.                 el = document.createElement('style');
  80.                 el.id = 'empuzzler-styles';
  81.                 el.type = 'text/css';
  82.                 el.textContent = styles[i].join("\n");
  83.                 (document.head || document.documentElement).appendChild(el);
  84.             }
  85.         }
  86.  
  87.     };
  88.  
  89.     // Add the JS to the page
  90.     var el = document.createElement('script');
  91.     el.type = 'text/javascript';
  92.     el.id = 'empuzzler-script'
  93.     el.textContent = '(' + main.toString() + ')();';
  94.     document.body.appendChild(el);
  95.  
  96. })();
RAW Paste Data