Skip to content

Instantly share code, notes, and snippets.

@smirea
Created July 23, 2014 19:25

Revisions

  1. smirea created this gist Jul 23, 2014.
    89 changes: 89 additions & 0 deletions gistfile1
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,89 @@
    // ==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; }'
    );