Skip to content

Instantly share code, notes, and snippets.

@smirea
Created July 23, 2014 19:25
Show Gist options
  • Save smirea/bbdc65e928a6a9a6a489 to your computer and use it in GitHub Desktop.
Save smirea/bbdc65e928a6a9a6a489 to your computer and use it in GitHub Desktop.
// ==UserScript==
// @name Facebook Chat Enhancer
// @namespace http://code4fun.de
// @version 0.2
// @description Adds emoticon hotkeys + makes chat bigger
// @match https://www.facebook.com/*
// @copyright 2014+, Stefan Mirea
// ==/UserScript==
var KEYS = {CANCEL:3,HELP:6,BACK_SPACE:8,TAB:9,CLEAR:12,RETURN:13,ENTER:13,SHIFT:16,CONTROL:17,ALT:18,PAUSE:19,CAPS_LOCK:20,ESCAPE:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,PRINTSCREEN:44,INSERT:45,DELETE:46,0:48,1:49,2:50,3:51,4:52,5:53,6:54,7:55,8:56,9:57,SEMICOLON:59,EQUALS:61,A:65,B:66,C:67,D:68,E:69,F:70,G:71,H:72,I:73,J:74,K:75,L:76,M:77,N:78,O:79,P:80,Q:81,R:82,S:83,T:84,U:85,V:86,W:87,X:88,Y:89,Z:90,COMMAND:91,CONTEXT_MENU:93,NUMPAD0:96,NUMPAD1:97,NUMPAD2:98,NUMPAD3:99,NUMPAD4:100,NUMPAD5:101,NUMPAD6:102,NUMPAD7:103,NUMPAD8:104,NUMPAD9:105,MULTIPLY:106,ADD:107,SEPARATOR:108,SUBTRACT:109,DECIMAL:110,DIVIDE:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,F13:124,F14:125,F15:126,F16:127,F17:128,F18:129,F19:130,F20:131,F21:132,F22:133,F23:134,F24:135,NUM_LOCK:144,SCROLL_LOCK:145,COMMA:188,PERIOD:190,SLASH:191,BACK_QUOTE:192,OPEN_BRACKET:219,BACK_SLASH:220,CLOSE_BRACKET:221,QUOTE:222,META:224};
var emoticons = {
like: 'L (y)',
shit: 'S :poop:',
penguin: 'P <(")',
confused: 'C o.O',
devil: 'D 3:-)',
shark: 'K (^^^)',
};
var extraChatHeight = 150;
var keyEmoticons = {};
Object.keys(emoticons).forEach(function (k) {
var arr = emoticons[k].split(' ');
keyEmoticons[KEYS[arr[0]]] = arr[1];
});
window.addEventListener('keydown', function (event) {
if (!event.altKey) return;
if (event.keyCode == KEYS.SHIFT) {
event.preventDefault();
var str = [' - List of emoticons with their shortcut (ALT + *)'];
Object.keys(emoticons).forEach(function (key) {
var arr = emoticons[key].split(' ');
str.push(' ' + arr[0] + ' -> ' + arr[1] + ' (' + key + ')');
});
console.log(str.join('\n'));
return;
}
if (!(event.keyCode in keyEmoticons)) return;
insertAtCaret(keyEmoticons[event.keyCode] + ' ');
event.preventDefault();
}, false);
function insertAtCaret(text) {
var txtarea = document.activeElement;
var scrollPos = txtarea.scrollTop;
var strPos = 0;
var br = ((txtarea.selectionStart || txtarea.selectionStart == '0') ?
"ff" : (document.selection ? "ie" : false ) );
if (br == "ie") {
txtarea.focus();
var range = document.selection.createRange();
range.moveStart ('character', -txtarea.value.length);
strPos = range.text.length;
}
else if (br == "ff") strPos = txtarea.selectionStart;
var front = (txtarea.value).substring(0,strPos);
var back = (txtarea.value).substring(strPos,txtarea.value.length);
txtarea.value=front+text+back;
strPos = strPos + text.length;
if (br == "ie") {
txtarea.focus();
var range = document.selection.createRange();
range.moveStart ('character', -txtarea.value.length);
range.moveStart ('character', strPos);
range.moveEnd ('character', 0);
range.select();
}
else if (br == "ff") {
txtarea.selectionStart = strPos;
txtarea.selectionEnd = strPos;
txtarea.focus();
}
txtarea.scrollTop = scrollPos;
}
GM_addStyle(
// Hide Names
'._5ys- { display:none; } ' +
// Increase chat height
'.fbNubFlyoutBody { height: ' + (230 + extraChatHeight) + 'px!important; } ' +
'.fbDockChatTabFlyout { height: ' + (285 + extraChatHeight) + 'px!important; } ' +
'.fbNubFlyoutFooter { position: absolute!important; right: 0!important; bottom: 0!important; left: 0!important; }'
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment