Created
November 3, 2011 22:50
-
-
Save therabidbanana/1338165 to your computer and use it in GitHub Desktop.
Turntable Fluid SSB enhancments
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name Awesome | |
// @namespace http://fluidapp.com | |
// @description What does this do? | |
// @include * | |
// @author Someone | |
// ==/UserScript== | |
(function () { | |
if (window.fluid) { | |
/** | |
* http://www.openjs.com/scripts/events/keyboard_shortcuts/ | |
* Version : 2.01.B | |
* By Binny V A | |
* License : BSD | |
*/ | |
shortcut = { | |
'all_shortcuts':{},//All the shortcuts are stored in this array | |
'add': function(shortcut_combination,callback,opt) { | |
//Provide a set of default options | |
var default_options = { | |
'type':'keydown', | |
'propagate':false, | |
'disable_in_input':false, | |
'target':document, | |
'keycode':false | |
} | |
if(!opt) opt = default_options; | |
else { | |
for(var dfo in default_options) { | |
if(typeof opt[dfo] == 'undefined') opt[dfo] = default_options[dfo]; | |
} | |
} | |
var ele = opt.target; | |
if(typeof opt.target == 'string') ele = document.getElementById(opt.target); | |
var ths = this; | |
shortcut_combination = shortcut_combination.toLowerCase(); | |
//The function to be called at keypress | |
var func = function(e) { | |
e = e || window.event; | |
if(opt['disable_in_input']) { //Don't enable shortcut keys in Input, Textarea fields | |
var element; | |
if(e.target) element=e.target; | |
else if(e.srcElement) element=e.srcElement; | |
if(element.nodeType==3) element=element.parentNode; | |
if(element.tagName == 'INPUT' || element.tagName == 'TEXTAREA') return; | |
} | |
//Find Which key is pressed | |
if (e.keyCode) code = e.keyCode; | |
else if (e.which) code = e.which; | |
var character = String.fromCharCode(code).toLowerCase(); | |
if(code == 188) character=","; //If the user presses , when the type is onkeydown | |
if(code == 190) character="."; //If the user presses , when the type is onkeydown | |
var keys = shortcut_combination.split("+"); | |
//Key Pressed - counts the number of valid keypresses - if it is same as the number of keys, the shortcut function is invoked | |
var kp = 0; | |
//Work around for stupid Shift key bug created by using lowercase - as a result the shift+num combination was broken | |
var shift_nums = { | |
"`":"~", | |
"1":"!", | |
"2":"@", | |
"3":"#", | |
"4":"$", | |
"5":"%", | |
"6":"^", | |
"7":"&", | |
"8":"*", | |
"9":"(", | |
"0":")", | |
"-":"_", | |
"=":"+", | |
";":":", | |
"'":"\"", | |
",":"<", | |
".":">", | |
"/":"?", | |
"\\":"|" | |
} | |
//Special Keys - and their codes | |
var special_keys = { | |
'esc':27, | |
'escape':27, | |
'tab':9, | |
'space':32, | |
'return':13, | |
'enter':13, | |
'backspace':8, | |
'scrolllock':145, | |
'scroll_lock':145, | |
'scroll':145, | |
'capslock':20, | |
'caps_lock':20, | |
'caps':20, | |
'numlock':144, | |
'num_lock':144, | |
'num':144, | |
'pause':19, | |
'break':19, | |
'insert':45, | |
'home':36, | |
'delete':46, | |
'end':35, | |
'pageup':33, | |
'page_up':33, | |
'pu':33, | |
'pagedown':34, | |
'page_down':34, | |
'pd':34, | |
'left':37, | |
'up':38, | |
'right':39, | |
'down':40, | |
'f1':112, | |
'f2':113, | |
'f3':114, | |
'f4':115, | |
'f5':116, | |
'f6':117, | |
'f7':118, | |
'f8':119, | |
'f9':120, | |
'f10':121, | |
'f11':122, | |
'f12':123 | |
} | |
var modifiers = { | |
shift: { wanted:false, pressed:false}, | |
ctrl : { wanted:false, pressed:false}, | |
alt : { wanted:false, pressed:false}, | |
meta : { wanted:false, pressed:false} //Meta is Mac specific | |
}; | |
if(e.ctrlKey) modifiers.ctrl.pressed = true; | |
if(e.shiftKey) modifiers.shift.pressed = true; | |
if(e.altKey) modifiers.alt.pressed = true; | |
if(e.metaKey) modifiers.meta.pressed = true; | |
for(var i=0; k=keys[i],i<keys.length; i++) { | |
//Modifiers | |
if(k == 'ctrl' || k == 'control') { | |
kp++; | |
modifiers.ctrl.wanted = true; | |
} else if(k == 'shift') { | |
kp++; | |
modifiers.shift.wanted = true; | |
} else if(k == 'alt') { | |
kp++; | |
modifiers.alt.wanted = true; | |
} else if(k == 'meta') { | |
kp++; | |
modifiers.meta.wanted = true; | |
} else if(k.length > 1) { //If it is a special key | |
if(special_keys[k] == code) kp++; | |
} else if(opt['keycode']) { | |
if(opt['keycode'] == code) kp++; | |
} else { //The special keys did not match | |
if(character == k) kp++; | |
else { | |
if(shift_nums[character] && e.shiftKey) { //Stupid Shift key bug created by using lowercase | |
character = shift_nums[character]; | |
if(character == k) kp++; | |
} | |
} | |
} | |
} | |
if(kp == keys.length && | |
modifiers.ctrl.pressed == modifiers.ctrl.wanted && | |
modifiers.shift.pressed == modifiers.shift.wanted && | |
modifiers.alt.pressed == modifiers.alt.wanted && | |
modifiers.meta.pressed == modifiers.meta.wanted) { | |
callback(e); | |
if(!opt['propagate']) { //Stop the event | |
//e.cancelBubble is supported by IE - this will kill the bubbling process. | |
e.cancelBubble = true; | |
e.returnValue = false; | |
//e.stopPropagation works in Firefox. | |
if (e.stopPropagation) { | |
e.stopPropagation(); | |
e.preventDefault(); | |
} | |
return false; | |
} | |
} | |
} | |
this.all_shortcuts[shortcut_combination] = { | |
'callback':func, | |
'target':ele, | |
'event': opt['type'] | |
}; | |
//Attach the function with the event | |
if(ele.addEventListener) ele.addEventListener(opt['type'], func, false); | |
else if(ele.attachEvent) ele.attachEvent('on'+opt['type'], func); | |
else ele['on'+opt['type']] = func; | |
}, | |
//Remove the shortcut - just specify the shortcut and I will remove the binding | |
'remove':function(shortcut_combination) { | |
shortcut_combination = shortcut_combination.toLowerCase(); | |
var binding = this.all_shortcuts[shortcut_combination]; | |
delete(this.all_shortcuts[shortcut_combination]) | |
if(!binding) return; | |
var type = binding['event']; | |
var ele = binding['target']; | |
var callback = binding['callback']; | |
if(ele.detachEvent) ele.detachEvent('on'+type, callback); | |
else if(ele.removeEventListener) ele.removeEventListener(type, callback, false); | |
else ele['on'+type] = false; | |
} | |
} | |
// Find Turntable object | |
var TTFM = null; | |
function find_turntable(){ | |
for(var i in window){ | |
if(window[i] !== undefined && window[i] !== null && window[i].dj_spots !== undefined && window[i].dj_spots !== null){ | |
TTFM = window[i] | |
$.TTFM = window[i]; | |
break; | |
} | |
} | |
} | |
function call_turnable(call_name){ | |
find_turntable(); | |
TTFM.callback(call_name); | |
} | |
function dj_for_name(name){ | |
find_turntable(); | |
var found = false, id = false; | |
$.each($.TTFM.djs, function(i, dj){ | |
var data = dj[dj.length-1]; | |
if(data.name == name) id = dj[1]; | |
}); | |
return id; | |
} | |
$.randomize = function(number){ | |
var queue_size = $('.songlist .song').length; | |
var max_length = queue_size - 30; | |
for(var i = 0; i < number; i++){ | |
var rand = Math.floor(Math.random()*max_length); | |
$($('.songlist .song')[rand]).find('.goTop').click(); | |
} | |
} | |
$.auto_awesome = false; | |
$.auto_yank = false; | |
shortcut.add('a', function(){ | |
call_turnable("upvote"); | |
console.log('heya'); | |
}, {'disable_in_input': true}); | |
shortcut.add('y', function(){ | |
$('#songboard_add .btn.queue').click() | |
}, {'disable_in_input': true}); | |
shortcut.add('l', function(){ | |
call_turnable("downvote"); | |
console.log('down'); | |
}, {'disable_in_input': true}); | |
shortcut.add('ESC', function(){ | |
jQuery("input").blur(); | |
console.log('blur'); | |
}); | |
shortcut.add('ctrl+y', function(){ | |
if($.auto_yank !== false){ | |
clearInterval($.auto_yank); | |
$.auto_yank = false; | |
console.log('autoyank off'); | |
$('#auto_yank').remove(); | |
}else{ | |
$('#songboard_add .btn.queue').click() | |
$.auto_yank = | |
setInterval(function(){ | |
find_turntable(); | |
if($.TTFM.needle_pos > 15){ | |
console.log("Trying to yank"); | |
$('#songboard_add .btn.queue').click(); | |
} | |
else{ | |
console.log("Not yanking, under threshold") | |
} | |
}, 90000); | |
$('body').append($('<div id="auto_yank">').css({position: 'fixed', top: 0, left: 100, zIndex: 10000, backgroundColor: 'blue'}).text('AutoYank')); | |
console.log('autoyank on'); | |
} | |
}, {'disable_in_input': true}); | |
shortcut.add('ctrl+r', function(){ | |
$.randomize(3); | |
}, {'disable_in_input': true}); | |
shortcut.add('ctrl+a', function(){ | |
if($.auto_awesome !== false){ | |
clearInterval($.auto_awesome); | |
$.auto_awesome = false; | |
console.log('autoawesome off'); | |
$('#auto_awesome').remove(); | |
}else{ | |
call_turnable("upvote"); | |
$.auto_awesome = | |
setInterval(function(){ | |
call_turnable("upvote"); | |
}, 90000); | |
$('body').append($('<div id="auto_awesome">').css({position: 'fixed', top: 0, left: 0, zIndex: 10000, backgroundColor: 'red'}).text('AutoAwesome')); | |
console.log('autoawesome on'); | |
} | |
}, {'disable_in_input': true}); | |
$.chat_bubble_count = 0; | |
$.show_songs = true; | |
watchChat = setInterval(function(){ | |
if($('.messages .message').length > $.chat_bubble_count){ | |
var start = $.chat_bubble_count; | |
var end = $('.messages .message').length; | |
for(start; start < end; start++){ | |
var msg = $('.messages .message').eq(start); | |
var id = dj_for_name($.trim($('.speaker', msg).text())); | |
var title = ''; | |
if($('.text', msg).text()[0] == ':'){ | |
title = $.trim($('.speaker', msg).text() + ' said:'); | |
} else { | |
title = $.trim($('.speaker', msg).text()); | |
if(!$.show_songs) continue; | |
} | |
var text = $('.text', msg).text().substr(1); | |
// var head = $('img[src*=fronthead]', user); | |
var growl = { | |
title: title, | |
description: $.trim(text), | |
priority: 5, | |
sticky: false | |
}; | |
if(id) growl.icon = $('img[src*=headfront]', id.body()).attr('src') | |
window.fluid.showGrowlNotification(growl); | |
} | |
$.chat_bubble_count = $('.messages .message').length; | |
} | |
}, 1000); | |
console.log('loaded'); | |
} | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment