Skip to content

Instantly share code, notes, and snippets.

@chadsmith
Created January 22, 2015 21:29
Show Gist options
  • Select an option

  • Save chadsmith/31083625dfa6dadfd7dc to your computer and use it in GitHub Desktop.

Select an option

Save chadsmith/31083625dfa6dadfd7dc to your computer and use it in GitHub Desktop.

Revisions

  1. chadsmith created this gist Jan 22, 2015.
    54 changes: 54 additions & 0 deletions FavEmoji.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,54 @@
    (function() {
    var FavEmoji = function(unicode) {
    'use strict';
    var
    canvas = document.createElement('canvas'),
    getContext = function(w) {
    canvas.width = canvas.height = w;
    context = canvas.getContext('2d');
    context.font = 'normal normal normal 32px/' + w + 'px sans';
    context.textBaseline = 'middle';
    return context;
    },
    hex2char = function(hex) {
    var
    result = '',
    n = parseInt(hex, 16);
    if(n <= 0xFFFF)
    result += String.fromCharCode(n);
    else if(n <= 0x10FFFF) {
    n -= 0x10000
    result += String.fromCharCode(0xD800 | (n >> 10)) + String.fromCharCode(0xDC00 | (n & 0x3FF));
    }
    return result;
    },
    context = getContext(32),
    content = unicode.replace(/[Uu]\+10([A-Fa-f0-9]{4})/g, function(str, match) {
    return hex2char('10' + matches);
    }).replace(/[Uu]\+([A-Fa-f0-9]{1,5})/g, function(str, match) {
    return hex2char(match);
    }),
    iconWidth,
    link = document.createElement('link');
    if(!canvas.toDataURL || !document.querySelectorAll)
    return;
    iconWidth = context.measureText(content).width;
    if(iconWidth > canvas.width)
    context = getContext(iconWidth);
    context.fillText(content, (canvas.width - iconWidth) / 2, canvas.height / 2);
    link.setAttribute('rel', 'icon');
    link.setAttribute('type', 'image/png');
    link.setAttribute('href', canvas.toDataURL('image/png'));
    for(var icons = document.querySelectorAll('link[rel*=icon]'), i = 0, l = icons.length; i < l; i++)
    icons[i].parentNode.removeChild(icons[i]);
    document.getElementsByTagName('head')[0].appendChild(link);
    };
    if(typeof define !== 'undefined' && define.amd)
    define([], function() {
    return FavEmoji;
    });
    else if(typeof module !== 'undefined' && module.exports)
    module.exports = FavEmoji;
    else
    this.FavEmoji = FavEmoji;
    })();