🏠 Home 

steamgifts.com shortcut keys

Adds helpful keyboard shortcut keys to steamgifts.com


Install this script?
// ==UserScript==
// @name        steamgifts.com shortcut keys
// @namespace   Barefoot Monkey
// @description Adds helpful keyboard shortcut keys to steamgifts.com
// @include     http://www.steamgifts.com/*
// @include     https://www.steamgifts.com/*
// @require     https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js
// @version     2.2
// @grant       GM_setValue
// @grant       GM_getValue
// @noframes
// ==/UserScript==
var version = '2.2'
add_menu_entry()
$('<style>')
.text(
'.BarefootMonkey-popup-bg {'
+'	background: #3C424D;'
+'	position: fixed;'
+'	top: 0;'
+'	bottom: 0;'
+'	left: 0;'
+'	right: 0;'
+'	opacity: 0.85;'
+'	z-index: 9988;'
+'	cursor: pointer;'
+'}'
+'.BarefootMonkey-popup ul {'
+'	list-style: inside;'
+'}'
+'.BarefootMonkey-popup p {'
+'	margin: 0.7em 0;'
+'}'
+'.BarefootMonkey-popup h1 i {'
+'	font-size: 0.5em;'
+'	font-weight: bold;'
+'}'
+'.BarefootMonkey-popup a {'
+'	color: #4B72D4;'
+'	font-weight: bold;'
+'}'
+'.BarefootMonkey-popup h1 {'
+'	font-size: 1.5em;'
+'	margin: 0px 0px 0.5em;'
+'	border-bottom: 1px solid #6B7A8C;'
+'	padding-bottom: 0.5em;'
+'}'
+'.BarefootMonkey-popup key, .BarefootMonkey-popup b {'
+'	font-weight: bold;'
+'}'
+'.BarefootMonkey-popup {'
+'	background: #F0F2F5 none repeat scroll 0% 0%;'
+'	z-index: 9999;'
+'	position: fixed;'
+'	left: calc(50vw - 18em);'
+'	top: 20vh;'
+'	border-radius: 4px;'
+'	color: #6B7A8C;'
+'	font: 300 17px "Open Sans",sans-serif;'
+'	padding: 1em;'
+'	width: 36em;'
+'	max-height: calc(80vh - 3em);'
+'	overflow: auto;'
+'}'
)
.appendTo(document.head)
function cmpVersion(a, b) {
var i, cmp, len, re = /(\.0)+[^\.]*$/;
a = (a + '').replace(re, '').split('.');
b = (b + '').replace(re, '').split('.');
len = Math.min(a.length, b.length);
for( i = 0; i < len; i++ ) {
cmp = parseInt(a[i], 10) - parseInt(b[i], 10);
if( cmp !== 0 ) {
return cmp;
}
}
return a.length - b.length;
}
function close_popup() {
$('.BarefootMonkey-popup-bg, .BarefootMonkey-popup').fadeOut(500, function() { $(this).remove() })
}
function open_popup() {
var bg = $('<div class="BarefootMonkey-popup-bg">')
.hide()
.appendTo(document.body)
.click(close_popup)
var popup = $('<aside class="BarefootMonkey-popup">')
.hide()
.html('<h1>steamgifts.com shortcut keys <i>version '+version+'</i></h1>'
+"<p>A userscript which adds several helpful keyboard shortcuts to steamgifts.com</p>"
+"<p>On the main page or giveaway list search r###lts:</p>"
+"<ul>"
+"<li><key>Ctrl</key> + <key>E</key>: focus on the search box</li>"
+"<li><key>Ctrl</key> + <key>Right</key>: next page</li>"
+"<li><key>Ctrl</key> + <key>Left</key>: previous page</li>"
+"</ul>"
+"<p>On a giveaway:</p>"
+"<ul>"
+"<li><key>Ctrl</key> + <key>E</key>: enter the giveaway</li>"
+"<li><key>Ctrl</key> + <key>Shift</key> + <key>E</key>: remove your entry</li>"
+"</ul>"
+"<p>On a comment, support or discussion page:</p>"
+"<ul>"
+"<li><key>Ctrl</key> + <key>Space</key>: focus on the \"new comment\" text area</li>"
+"<li><key>Ctrl</key> + <key>Enter</key>: submit your comment</li>"
+"<li><key>Alt</key> + <key>R</key> or <key>Alt</key> + <key>R</key>: Insert the name of the user to whom you typing a reply</li>"
+"<li><key>Alt</key> + <key>O</key>: Insert the name of the user who created this discussion or giveaway</li>"
+"</ul>"
+'<p>This popup appears the first time you load steamgifts.com after <a href="https://greasyfork.org/en/scripts/5886-steamgifts-com-shortcut-keys" target="_blank">steamgifts.com shortcut keys</a> is installed or updated. To see it again, look in your <b>Account</b> menu at the top-right of the page.</p>'
+"<h1>latest changes</h1>"
+"<ul>"
+"<li>Added support for HTTPS</li>"
+"<li>Tidied up the list of shortcut keys</li>"
+"</ul>"
)
.appendTo(document.body)
$('.BarefootMonkey-popup-bg, .BarefootMonkey-popup').fadeIn(500)
}
// in progress
function add_menu_entry() {
var menu = document.querySelector('[href="/account"] ~ .nav__relative-dropdown .nav__absolute-dropdown')
var row = document.createElement('a')
row.setAttribute('class', 'nav__row')
var child
child = document.createElement('i')
child.setAttribute('class', 'fa fa-fw')
row.appendChild(child)
var summary = document.createElement('div')
summary.setAttribute('class', 'nav__row__summary')
row.appendChild(summary)
child = document.createElement('p')
child.setAttribute('class', 'nav__row__summary__name')
child.textContent = 'steamgifts.com shortcut keys'
summary.appendChild(child)
child = document.createElement('p')
child.setAttribute('class', 'nav__row__summary__description')
child.textContent = 'Configure this user script'
summary.appendChild(child)
menu.appendChild(row)
row.style.cursor = 'pointer'
row.addEventListener('click', open_popup)
}
try {
var OP_name
var is_giveaway, is_forum, is_support
// determine where on the site we are visiting
var path_matches = location.pathname.match(/^\/([^\/]*)\/([^\/]*)\/.*/)
if (path_matches) {
switch (path_matches[1]) {
case 'giveaway': is_giveaway = true; break
// case 'support': is_support = true; break
case 'discussion': is_forum = true; break
}
}
// discover the name of the author of the thread/giveaway
if (is_giveaway) {
var name_element = document.querySelector('.featured__summary .featured__column a')
if (name_element) {
OP_name = name_element.textContent.trim()
}
} else if (is_forum) {
var name_element = document.querySelector('.comment__username>a')
if (name_element) {
OP_name = name_element.textContent.trim()
}
}
// catch keypress events
document.addEventListener("keydown", function(event) {
try {
// ctrl shortcut keys to focus or submit the textbox
if (event.ctrlKey && !event.repeat) {
// ctrl+enter
if (event.which == 13) {
var active = document.activeElement
if (active && active === document.querySelector('.comment--submit div.comment__description>form>textarea[name=description]')) {
var button = document.querySelector('.comment--submit .comment__submit-button')
if (button) {
if (button.click) button.click()
else {
button.dispatchEvent(
new MouseEvent('click', {
'view': window,
'bubbles': true,
'cancelable': true
})
)
}
event.preventDefault()
}
}
}
// ctrl+space
else if (event.which == 32) {
// find the comment textarea
var textbox = document.querySelector('.comment--submit div.comment__description>form>textarea[name=description]')
// give focus to the comment textarea
if (textbox) {
textbox.focus()
event.preventDefault()
}
}
}
if (!event.repeat) {
// ignore case
var which = event.which|32
var search_page_regexp = '^\\?(?:.*&)?page=([0-9]+)(?:&.*)?$'
// left
if (event.ctrlKey && which == 37) {
if (location.pathname == '/giveaways/search') {
var regexp = new RegExp(search_page_regexp)
var matches = regexp.exec(location.search)
if (matches.length > 1) {
page = parseInt(matches[1])
if (!isNaN(page) && page > 1) {
location = '/giveaways/search?page='+(page-1)
}
}
}
// right
} else if (event.ctrlKey && which == 39) {
if (location.pathname == '/') {
location = '/giveaways/search?page=2'
} else if (location.pathname == '/giveaways/search') {
var regexp = new RegExp(search_page_regexp)
var matches = regexp.exec(location.search)
if (matches.length > 1) {
page = parseInt(matches[1])
if (!isNaN(page)) {
location = '/giveaways/search?page='+(page+1)
}
}
}
// ctrl+e
} else if (event.ctrlKey &&  which == 101) {
if (is_giveaway) {
var button
if (event.shiftKey) {
button = document.querySelector('.sidebar__entry-delete:not(.is-hidden)')
} else {
button = document.querySelector('.sidebar__entry-insert:not(.is-hidden)')
}
if (button) {
if (button.click) button.click()
else {
button.dispatchEvent(
new MouseEvent('click', {
'view': window,
'bubbles': true,
'cancelable': true
})
)
}
}
event.preventDefault()
} else {
var offset = 100
var search = document.querySelector('.sidebar__search-input')
if (search) {
search.focus()
search.select()
window.scroll(0, search.offsetTop - offset)
}
event.preventDefault()
}
// handle comment-editing shortcuts
} else {
var active = document.activeElement
if (active && active === document.querySelector('.comment--submit div.comment__description>form>textarea[name=description]')) {
// alt+o = original poster's name
if (event.altKey && which == 111) {
// insert OP's name it into the comment
if (OP_name) {
// take note of the cursor position
var cursor_pos = active.selectionStart
// insert the name
var text = active.value
active.value = (text.substring(0, cursor_pos) + OP_name + text.substring(active.selectionEnd))
// move the cursor
cursor_pos += OP_name.length
active.setSelectionRange(cursor_pos, cursor_pos)
// prevent the browser from handling this event
event.preventDefault()
}
// alt+p or alt+r = parent poster's name
} else if (event.altKey && (which == 112 || which == 114)) {
// prevent ctrl+alt+p because of reported conflict with Puush
if (event.ctrlKey && event.altKey && which == 112) return;
// traverse up the DOM tree to find name of the parent post's author
var PP_name = OP_name
{
var parent = active
while (parent = parent.parentNode) {
if (parent.classList && parent.classList.contains('comment') && !parent.classList.contains('comment--submit')) {
var name_e = parent.querySelector('.comment__username>a')
if (name_e) PP_name = name_e.textContent.trim()
break
}
}
}
// insert PP's name it into the comment
if (PP_name) {
// take note of the cursor position
var cursor_pos = active.selectionStart
// insert the name
var text = active.value
active.value = (text.substring(0, cursor_pos) + PP_name + text.substring(active.selectionEnd))
// move the cursor
cursor_pos += PP_name.length
active.setSelectionRange(cursor_pos, cursor_pos)
// prevent the browser from handling this event
event.preventDefault()
}
}
}
}
}
} catch (exception) { console.log(exception) }
}, true)
} catch (exception) { console.log(exception) }
// version check
var prev_version = GM_getValue('prev_version', null)
if (prev_version != version) {
GM_setValue('prev_version', version)
open_popup()
}