SHOW:
|
|
- or go back to the newest paste.
| 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; }',
|
| 32 | + | 'body:not(.' + identifiers.comments + ') #question .comments { display: none; }',
|
| 33 | - | 'body:not(.' + identifiers.comments + ') #question .comments-link { display: none; }',
|
| 33 | + | 'body:not(.' + identifiers.comments + ') #question .comments-link { display: none; }',
|
| 34 | - | 'body:not(.' + identifiers.comments + ') #question .bounty-link { display: none; }',
|
| 34 | + | 'body:not(.' + identifiers.comments + ') #question .comments-link ~ * { display: none; }',
|
| 35 | - | 'body.' + identifiers.comments + ' .' + identifiers.comments + ' { display: none; }' // hide the button(s)
|
| 35 | + | 'body:not(.' + identifiers.comments + ') #question .bounty-link { display: none; }',
|
| 36 | 'body.' + identifiers.comments + ' .' + identifiers.comments + ' { display: none; }' // hide the button(s)
| |
| 37 | ], | |
| 38 | - | 'body:not(.' + identifiers.answers + ') #answers { display: none; }',
|
| 38 | + | |
| 39 | - | 'body.' + identifiers.answers + ' .' + identifiers.answers + ' { display: none; }' // hide the button(s)
|
| 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 | })(); |