mojibaka
Version:
✨ Browser emoji support detection toolkit
41 lines (33 loc) • 4.11 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.prepareCanvasContext = prepareCanvasContext;
exports.canDrawCharacter = canDrawCharacter;
exports.getCharacterWidth = getCharacterWidth;
var DRAW_SIZE = 32;
function newContext() {
var canvas = document.createElement('canvas');
canvas.width = canvas.height = DRAW_SIZE * 2;
return canvas.getContext('2d');
}
function prepareCanvasContext(context) {
if (!context) {
context = newContext();
context.fillStyle = "#000";
context.font = DRAW_SIZE + 'px "Apple Color Emoji","Segoe UI","Segoe UI Emoji","Segoe UI Symbol",Arial';
} else {
context.clearRect(0, 0, DRAW_SIZE * 2, DRAW_SIZE * 2);
}
return context;
}
function canDrawCharacter(character, context) {
context = prepareCanvasContext(context);
context.fillText(character, 0, DRAW_SIZE);
return context.getImageData(DRAW_SIZE / 2 + 2, DRAW_SIZE / 2, 1, 1).data[0] !== 0;
}
function getCharacterWidth(character, context) {
context = prepareCanvasContext(context);
return context.measureText(character).width;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9jYW52YXMuanMiXSwibmFtZXMiOlsicHJlcGFyZUNhbnZhc0NvbnRleHQiLCJjYW5EcmF3Q2hhcmFjdGVyIiwiZ2V0Q2hhcmFjdGVyV2lkdGgiLCJEUkFXX1NJWkUiLCJuZXdDb250ZXh0IiwiY2FudmFzIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwid2lkdGgiLCJoZWlnaHQiLCJnZXRDb250ZXh0IiwiY29udGV4dCIsImZpbGxTdHlsZSIsImZvbnQiLCJjbGVhclJlY3QiLCJjaGFyYWN0ZXIiLCJmaWxsVGV4dCIsImdldEltYWdlRGF0YSIsImRhdGEiLCJtZWFzdXJlVGV4dCJdLCJtYXBwaW5ncyI6Ijs7Ozs7UUFRZ0JBLG9CLEdBQUFBLG9CO1FBWUFDLGdCLEdBQUFBLGdCO1FBT0FDLGlCLEdBQUFBLGlCO0FBM0JoQixJQUFNQyxZQUFZLEVBQWxCOztBQUVBLFNBQVNDLFVBQVQsR0FBc0I7QUFDcEIsTUFBTUMsU0FBU0MsU0FBU0MsYUFBVCxDQUF1QixRQUF2QixDQUFmO0FBQ0FGLFNBQU9HLEtBQVAsR0FBZUgsT0FBT0ksTUFBUCxHQUFnQk4sWUFBWSxDQUEzQztBQUNBLFNBQU9FLE9BQU9LLFVBQVAsQ0FBa0IsSUFBbEIsQ0FBUDtBQUNEOztBQUVNLFNBQVNWLG9CQUFULENBQThCVyxPQUE5QixFQUF1QztBQUM1QyxNQUFJLENBQUNBLE9BQUwsRUFBYztBQUNaQSxjQUFVUCxZQUFWO0FBQ0FPLFlBQVFDLFNBQVIsR0FBb0IsTUFBcEI7QUFDQUQsWUFBUUUsSUFBUixHQUFrQlYsU0FBbEI7QUFDRCxHQUpELE1BSU87QUFDTFEsWUFBUUcsU0FBUixDQUFrQixDQUFsQixFQUFxQixDQUFyQixFQUF3QlgsWUFBWSxDQUFwQyxFQUF1Q0EsWUFBWSxDQUFuRDtBQUNEOztBQUVELFNBQU9RLE9BQVA7QUFDRDs7QUFFTSxTQUFTVixnQkFBVCxDQUEwQmMsU0FBMUIsRUFBcUNKLE9BQXJDLEVBQThDO0FBQ25EQSxZQUFVWCxxQkFBcUJXLE9BQXJCLENBQVY7QUFDQUEsVUFBUUssUUFBUixDQUFpQkQsU0FBakIsRUFBNEIsQ0FBNUIsRUFBK0JaLFNBQS9COztBQUVBLFNBQU9RLFFBQVFNLFlBQVIsQ0FBcUJkLFlBQVksQ0FBWixHQUFnQixDQUFyQyxFQUF3Q0EsWUFBWSxDQUFwRCxFQUF1RCxDQUF2RCxFQUEwRCxDQUExRCxFQUE2RGUsSUFBN0QsQ0FBa0UsQ0FBbEUsTUFBeUUsQ0FBaEY7QUFDRDs7QUFFTSxTQUFTaEIsaUJBQVQsQ0FBMkJhLFNBQTNCLEVBQXNDSixPQUF0QyxFQUErQztBQUNwREEsWUFBVVgscUJBQXFCVyxPQUFyQixDQUFWOztBQUVBLFNBQU9BLFFBQVFRLFdBQVIsQ0FBb0JKLFNBQXBCLEVBQStCUCxLQUF0QztBQUNEIiwiZmlsZSI6ImNhbnZhcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IERSQVdfU0laRSA9IDMyO1xuXG5mdW5jdGlvbiBuZXdDb250ZXh0KCkge1xuICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgY2FudmFzLndpZHRoID0gY2FudmFzLmhlaWdodCA9IERSQVdfU0laRSAqIDI7XG4gIHJldHVybiBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVDYW52YXNDb250ZXh0KGNvbnRleHQpIHtcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgY29udGV4dCA9IG5ld0NvbnRleHQoKTtcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9IFwiIzAwMFwiO1xuICAgIGNvbnRleHQuZm9udCA9IGAke0RSQVdfU0laRX1weCBcIkFwcGxlIENvbG9yIEVtb2ppXCIsXCJTZWdvZSBVSVwiLFwiU2Vnb2UgVUkgRW1vamlcIixcIlNlZ29lIFVJIFN5bWJvbFwiLEFyaWFsYDtcbiAgfSBlbHNlIHtcbiAgICBjb250ZXh0LmNsZWFyUmVjdCgwLCAwLCBEUkFXX1NJWkUgKiAyLCBEUkFXX1NJWkUgKiAyKTtcbiAgfVxuXG4gIHJldHVybiBjb250ZXh0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FuRHJhd0NoYXJhY3RlcihjaGFyYWN0ZXIsIGNvbnRleHQpIHtcbiAgY29udGV4dCA9IHByZXBhcmVDYW52YXNDb250ZXh0KGNvbnRleHQpO1xuICBjb250ZXh0LmZpbGxUZXh0KGNoYXJhY3RlciwgMCwgRFJBV19TSVpFKTtcblxuICByZXR1cm4gY29udGV4dC5nZXRJbWFnZURhdGEoRFJBV19TSVpFIC8gMiArIDIsIERSQVdfU0laRSAvIDIsIDEsIDEpLmRhdGFbMF0gIT09IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGFyYWN0ZXJXaWR0aChjaGFyYWN0ZXIsIGNvbnRleHQpIHtcbiAgY29udGV4dCA9IHByZXBhcmVDYW52YXNDb250ZXh0KGNvbnRleHQpO1xuXG4gIHJldHVybiBjb250ZXh0Lm1lYXN1cmVUZXh0KGNoYXJhY3Rlcikud2lkdGg7XG59XG4iXX0=