Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
export function replaceWithEmojis (message: string): string {
var words = message.split(' ');
for (var i = 0; i < words.length; i++) {
var query = words[i].toLowerCase().replace(/[^\w]/gi, '');
// Search over all emojis, looking for a matching keyword.
for (var key in emojis) {
if (emojis.hasOwnProperty(key)) {
if (key === query) {
words[i] = words[i].toLowerCase().replace(key, ':' + query + ':');
break;
}
}
}
}
return words.join(' ');
}
function renderResults (emojiNameArray, containerElement) {
containerElement.innerHTML = ''
var fragment = document.createDocumentFragment()
var modifierValue = preference['skin-tone-modifier']
var modifier = modifiers.indexOf(modifierValue) >= 0 ? modifierValue : null
// console.log('display search results', emojiNameArray.length)
emojiNameArray.forEach(function (name) {
var unicode = addModifier(emojilib[name], modifier) || '--'
var resultElement = document.createElement('button')
resultElement.type = 'button'
resultElement.className = 'emoji'
resultElement.setAttribute('aria-label', name)
resultElement.textContent = unicode
fragment.appendChild(resultElement)
})
containerElement.appendChild(fragment)
}
/* global localStorage, fetch */
var emojilib = JSON.parse(localStorage.getItem('emojilib')) || require('emojilib').lib
var emojikeys = JSON.parse(localStorage.getItem('emojikeys')) || require('emojilib').ordered
var modifiers = require('emojilib').fitzpatrick_scale_modifiers
var clipboard = require('electron').clipboard
var ipc = require('electron').ipcRenderer
var CommandProcessor = require('./CommandProcessor')
var MicAudioProcessor = require('./micAudioProcessor')
var KeywordSpotter = require('honkling-node')
var displayManager = require('./displayManager')
var index = buildIndex()
var indexKeys = Object.keys(index)
var emojikeyIndexTable = buildEmojikeyIndexTable()
var searching = false
var searchInput = document.querySelector('.js-search')
var preference = JSON.parse(localStorage.getItem('preference'))
var directions = {
// Top emojis on Facebook (see https://www.theverge.com/2017/7/17/15984204/facebooks-most-used-emoji-hearts-tears)
const popularEmojiNames = ['joy', 'heart_eyes', 'kissing_heart', 'laughing', 'grinning', 'heart', 'wink', 'blush', 'sob', 'smile', 'sweat', 'sweat_smile', '+1', 'expressionless', '100', 'cry', 'neutral_face', 'scream', 'ok_hand', 'pensive', 'weary', 'grin', 'smirk'];
// List of emojis supported by FB Messenger scraped off https://emojipedia/messenger using src/scripts/get-supported-emoji.py
const supportedEmojiNames = ['ghost', 'brazil', 'green_apple', 'necktie', 'tulip', 'ring', 'christmas_tree', 'smirk', 'u6307', 'eyes', 'rotating_light', 'suspension_railway', 'crying_cat_face', 'wrench', 'last_quarter_moon_with_face', 'minidisc', 'biking_man', 'point_left', 'chicken', 'vs', 'tram', 'boot', 'blossom', 'dart', 'camel', 'womans_clothes', 'bank', 'v', 'fr', 'cow2', 'blush', 'unamused', 'a', 'u5408', 'keycap_ten', 'eyeglasses', 'white_square_button', '8ball', 'virgo', 'clock5', 'blowfish', 'cinema', 'star', 'banana', 'belgium', 'police_car', 'rice', 'vertical_traffic_light', 'no_bicycles', 'mouse', 'two_men_holding_hands', 'cherry_blossom', 'alien', 'vietnam', 'foggy', 'clock230', 'tropical_drink', 'door', 'strawberry', 'arrow_right', 'gemini', 'zap', 'mens', 'couple', 'white_check_mark', 'name_badge', 'clock11', 'cat', 'negative_squared_cross_mark', 'bookmark_tabs', 'notes', 'crystal_ball', 'scissors', 'arrow_lower_left', 'cocktail', 'ocean', 'construction', 'rage', 'clock1030', 'lipstick', 'mobile_phone_off', 'clock530', 'saxophone', 'melon', 'newspaper', 'briefcase', 'kissing_smiling_eyes', 'factory', 'yum', 'no_mouth', 'slightly_smiling_face', 'hearts', 'tanabata_tree', 'restroom', 'crocodile', 'man_with_turban', 'moneybag', 'palm_tree', 'recycle', 'trident', 'large_blue_circle', 'no_pedestrians', 'email', 'ice_cream', 'clock7', 'rowing_man', 'warning', 'hospital', 'scroll', 'skull', 'sushi', 'capricorn', 'maple_leaf', 'aerial_tramway', 'arrow_down', 'post_office', 'tractor', 'unlock', 'leftwards_arrow_with_hook', 'currency_exchange', 'evergreen_tree', 'sunrise_over_mountains', 'handbag', 'tropical_fish', 'fries', 'underage', 'curry', 'santa', 'dolls', 'red_car', 'house', 'clock12', 'two_hearts', 'id', 'woman', 'jp', 'busstop', 'goat', 'arrow_lower_right', 'blue_car', 'pig2', 'pound', 'exclamation', 'postal_horn', 'tada', 'hotsprings', 'calendar', 'barber', 'money_with_wings', 'sa', 'seven', 'accept', 'sunglasses', 'statue_of_liberty', 'de', 'ant', 'metro', 'orange_book', 'cow', 'pouting_woman', 'raised_hands', 'ribbon', 'mountain_railway', 'package', 'blonde_man', 'globe_with_meridians', 'smile_cat', 'fire_engine', 'seedling', 'man', 'turtle', 'office', 'monorail', 'sparkling_heart', 'snowman', 'airplane', 'mute', 'ng', 'hourglass', 'cd', 'chart_with_downwards_trend', 'bento', 'persevere', 'arrow_right_hook', 'heavy_check_mark', 'clock4', 'clap', 'trophy', 'u5272', 'zero', 'vibration_mode', 'wavy_dash', 'wedding', 'performing_arts', 'headphones', 'hatching_chick', 'smirk_cat', 'clock10', 'stars', 'poodle', 'fireworks', 'bread', 'postbox', 'grey_question', 'pushpin', 'arrow_heading_up', 'womans_hat', 'mailbox_with_mail', 'incoming_envelope', 'mans_shoe', 'straight_ruler', 'diamonds', 'sailboat', 'trolleybus', 'cool', 'cherries', 'mega', 'yen', 'open_book', 'chile', 'bridge_at_night', 'boy', 'closed_lock_with_key', 'pensive', 'white_medium_square', 'angry', 'rose', 'oncoming_taxi', 'heart_eyes', 'shower', 'paw_prints', 'blue_book', 'six_pointed_star', 'phone', 'full_moon', 'clock8', 'arrow_double_up', 'books', 'fish_cake', 'australia', 'passport_control', 'israel', 'frog', 'angel', 'small_red_triangle', 'no_mobile_phones', 'basketball', 'waxing_gibbous_moon', 'city_sunset', 'guitar', 'abcd', 'relieved', 'part_alternation_mark', 'snowflake', 'top', 'hammer', 'fallen_leaf', 'couple_with_heart_woman_man', 'rewind', 'symbols', 'ru', 'us', 'sagittarius', 'circus_tent', 'one', 'musical_score', 'copyright', 'crown', 'neutral_face', 'purple_heart', 'running_shirt_with_sash', 'clock3', 'smile', 'arrows_counterclockwise', 'notebook', 'japanese_goblin', 'triumph', 'deciduous_tree', 'doughnut', 'pig_nose', 'ramen', 'point_down', 'norway', 'rooster', 'racehorse', 'bullettrain_side', 'golf', 'do_not_litter', 'singapore', 'video_game', 'kissing_heart', 'tomato', 'bulb', 'heavy_dollar_sign', 'full_moon_with_face', 'hushed', 'womens', 'sweat', 'fuelpump', 'cactus', 'smiley_cat', '1234', 'cupid', 'mailbox_with_no_mail', 'watermelon', 'train', 'joy', 'beers', 'japan', 'dog2', 'hatched_chick', 'sunrise', 'fried_egg', 'panda_face', 'flower_playing_cards', 'macau', 'vhs', 'sandal', 'envelope_with_arrow', 'bouquet', 'japanese_castle', 'frowning', 'poland', 'church', 'malaysia', 'pineapple', 'white_flower', 'telephone_receiver', 'black_circle', 'dizzy', 'traffic_light', 'potable_water', 'monkey', 'clock130', 'mailbox_closed', 'monkey_face', 'see_no_evil', 'disappointed', 'dress', 'chart', 'whale', 'no_entry_sign', 'heavy_plus_sign', 'cat2', 'new_moon_with_face', 'large_blue_diamond', 'older_woman', 'birthday', 'surfing_man', 'swimming_man', 'fax', 'muscle', 'point_up_2', 'dragon', 'earth_africa', 'philippines', 'corn', 'rabbit2', 'european_post_office', 'tangerine', 'musical_note', 'arrow_upper_left', 'flags', 'lips', 'tr', 'mortar_board', 'ski', 'microphone', 'lollipop', 'koko', 'kimono', 'black_large_square', 'astonished', 'jack_o_lantern', 'smoking', 'rocket', 'mask', '-1', 'dvd', 'snail', 'hash', 'mahjong', 'rice_ball', 'gift', 'imp', 'clock1130', 'tent', 'white_circle', 'articulated_lorry', 'horse', 'musical_keyboard', 'leaves', 'droplet', 'three', 'bowling', 'violin', 'small_red_triangle_down', 'es', 'ireland', 'ophiuchus', 'arrow_heading_down', 'pager', 'thought_balloon', 'u7121', 'pouch', 'smiling_imp', 'helicopter', 'hourglass_flowing_sand', 'baby_chick', 'disappointed_relieved', 'bus', 'clock930', 'wolf', 'speak_no_evil', 'sweat_smile', 'pray', 'school_satchel', 'cookie', 'ok_woman', 'aries', 'computer', 'free', 'abc', 'hong_kong', 'tired_face', 'sunflower', 'dragon_face', 'bird', 'art', 'haircut_woman', 'satellite', 'cyclone', 'clapper', 'dango', 'information_source', 'grimacing', 'dancer', 'speaker', 'dizzy_face', 'revolving_hearts', 'rabbit', 'it', 'honey_pot', 'yellow_heart', 'clock630', 'ox', 'curly_loop', 'lock_with_ink_pen', 'high_brightness', 'footprints', 'icecream', 'canada', 'notebook_with_decorative_cover', 'truck', 'bride_with_veil', 'man_with_gua_pi_mao', 'b', 'hamster', 'date', 'penguin', 'puerto_rico', 'tiger', 'trumpet', 'arrow_down_small', 'fast_forward', 'umbrella', 'sob', 'convenience_store', '100', 'snake', 'house_with_garden', 'black_joker', 'heart_decoration', 'sparkles', 'six', 'older_man', 'beetle', 'zzz', 'bomb', 'sweat_drops', 'uk', 'watch', 'pizza', 'fried_shrimp', 'new_zealand', 'open_hands', 'u6708', 'page_facing_up', 'floppy_disk', 'cold_sweat', 'repeat_one', 'scream_cat', 'whale2', 'chestnut', 'baby_symbol', 'stew', 'radio', 'electric_plug', 'steam_locomotive', 'open_file_folder', 'japanese_ogre', 'non-potable_water', 'sake', 'stuck_out_tongue', 'grapes', 'roller_coaster', 'flashlight', 'massage_woman', 'moyai', 'couplekiss_man_woman', 'four', 'honeybee', 'baby_bottle', 'cn', 'poop', 'guardsman', 'cancer', 'put_litter_in_its_place', 'south_africa', 'sheep', 'fork_and_knife', 'up', 'athletic_shoe', 'rugby_football', 'wine_glass', 'u55b6', 'small_orange_diamond', 'white_large_square', 'shaved_ice', 'sparkle', 'hear_no_evil', 'rainbow', 'jeans', 'clock830', 'grinning', 'water_buffalo', 'switzerland', 'blue_heart', 'frowning_woman', 'izakaya_lantern', 'no_entry', 'portugal', 'two', 'arrow_up', 'heavy_minus_sign', 'cake', 'wind_chime', 'clock2', 'love_hotel', 'slot_machine', 'carousel_horse', 'dromedary_camel', 'black_medium_square', 'fishing_pole_and_fish', 'point_up', 'hocho', 'facepunch', 'left_luggage', 'worried', 'heartpulse', 'bear', 'weary', 'eggplant', 'arrow_backward', 'indonesia', 'speech_balloon', 'closed_umbrella', 'joy_cat', 'capital_abcd', 'link', 'signal_strength', 'movie_camera', 'loudspeaker', 'shell', 'kissing_cat', 'custard', 'kissing', 'gun', 'no_smoking', 'arrow_double_down', 'white_medium_small_square', 'heavy_division_sign', 'red_circle', 'alarm_clock', 'oden', 'coffee', 'white_small_square', 'anguished', 'baseball', 'triangular_flag_on_post', 'nut_and_bolt', 'princess', 'tipping_hand_woman', 'scream', 'grey_exclamation', 'small_blue_diamond', 'dollar', 'pisces', 'european_castle', 'x', 'hamburger', 'round_pushpin', 'interrobang', 'sleeping', 'sparkler', 'ticket', 'end', 'clock6', 'tokyo_tower', 'mailbox', 'first_quarter_moon', 'syringe', 'open_mouth', 'kissing_closed_eyes', 'crescent_moon', 'lock', 'gem', 'fish', 'tiger2', 'credit_card', 'earth_asia', 'waning_gibbous_moon', 'mountain_cableway', 'meat_on_bone', 'high_heel', 'kiss', 'e-mail', 'chocolate_bar', 'oncoming_police_car', 'kr', 'rat', 'euro', 'anger', 'heart', 'mountain_biking_man', '+1', 'last_quarter_moon', 'grin', 'purse', 'pouting_cat', 'boar', 'united_arab_emirates', 'bar_chart', 'minibus', 'confounded', 'clipboard', 'no_bell', 'diamond_shape_with_a_dot_inside', 'game_die', 'first_quarter_moon_with_face', 'mount_fuji', 'milky_way', 'libra', 'poultry_leg', 'department_store', 'busts_in_silhouette', 'stuck_out_tongue_closed_eyes', 'railway_car', 'parking', 'bug', 'dog', 'inbox_tray', 'chart_with_upwards_trend', 'outbox_tray', 'bell', 'u6e80', 'beer', 'candy', 'no_good_woman', 'oncoming_bus', 'key', 'clock9', 'stuck_out_tongue_winking_eye', 'clock730', 'clock1230', 'volcano', 'new_moon', 'black_square_button', 'confetti_ball', 'earth_americas', 'tennis', 'bike', 'rice_scene', 'hibiscus', 'clock1', 'bamboo', 'atm', 'relaxed', 'austria', 'gift_heart', 'sun_with_face', 'dolphin', 'elephant', 'laughing', 'point_right', 'eight', 'u7a7a', 'dash', 'leopard', 'arrow_upper_right', 'arrow_forward', 'u7533', 'twisted_rightwards_arrows', 'ferris_wheel', 'pear', 'sweden', 'raising_hand_woman', 'rice_cracker', 'iphone', 'leo', 'taxi', 'pig', 'green_book', 'smiley', 'policeman', 'train2', 'family_man_woman_boy', 'oncoming_automobile', 'colombia', 'card_index', 'registered', 'baby', 'walking_man', 'clubs', 'arrow_left', 'paperclip', 'cry', 'radio_button', 'file_folder', 'nail_care', 'black_nib', 'seat', 'india', 'question', 'pencil2', 'horse_racing', 'arrow_up_small', 'bangbang', 'mag_right', 'lemon', 'tv', 'spades', 'tophat', 'tea', 'video_camera', 'clock330', 'bowing_man', 'raised_hand', 'mushroom', 'fire', 'baggage_claim', 'construction_worker_man', 'loud_sound', 'city_sunrise', 'innocent', 'clock430', 'waxing_crescent_moon', 'scorpius', 'microscope', 'nine', 'calling', 'arrows_clockwise', 'aquarius', 'four_leaf_clover', 'herb', 'bust_in_silhouette', 'balloon', 'running_man', 'eight_spoked_asterisk', 'light_rail', 'wc', 'sweet_potato', 'star2', 'large_orange_diamond', 'wheelchair', 'ship', 'love_letter', 'ear_of_rice', 'mouse2', 'sos', 'battery', 'octopus', 'crossed_flags', 'station', 'back', 'ok', 'cloud', 'hotel', 'low_brightness', 'apple', 'boom', 'closed_book', 'black_small_square', 'heartbeat', 'left_right_arrow', 'u6709', 'girl', 'triangular_ruler', 'ambulance', 'soccer', 'checkered_flag', 'football', 'toilet', 'soon', 'beginner', 'space_invader', 'school', 'finland', 'memo', 'fountain', 'bikini', 'wink', 'on', 'mag', 'snowboarder', 'expressionless', 'peach', 'ok_hand', 'wave', 'bullettrain_front', 'bath', 'partly_sunny', 'tshirt', 'new', 'loop', 'o', 'sound', 'bookmark', 'netherlands', 'mexico', 'eight_pointed_black_star', 'saudi_arabia', 'koala', 'anchor', 'm', 'spaghetti', 'fist', 'ear', 'heart_eyes_cat', 'secret', 'speedboat', 'nose', 'repeat', 'page_with_curl', 'fearful', 'tm', 'u7981', 'arrow_up_down', 'night_with_stars', 'flushed', 'confused', 'sleepy', 'ballot_box_with_check', 'pill', 'camera', 'dancing_women', 'bathtub', 'o2', 'black_medium_small_square', 'tongue', 'congratulations', 'five', 'ab', 'ledger', 'denmark', 'telescope', 'green_heart', 'sunny', 'cl', 'two_women_holding_hands', 'broken_heart', 'ram', 'waning_crescent_moon', 'ideograph_advantage', 'customs', 'taurus', 'heavy_multiplication_x', 'children_crossing'];
// Options for fuzzy searching using fuse.js library
const searchOptions = {
distance: 0,
location: 0,
maxPatternLength: 32,
minMatchCharLength: 1,
shouldSort: true,
threshold: 0.3,
};
const emojis = Object.keys(emoji.lib)
.map(key => ({ name: key, keywords: [key].concat(emoji.lib[key].keywords), char: emoji.lib[key].char }))
.filter(emojiItem => supportedEmojiNames.includes(emojiItem.name));
module.exports = {
emojis,
popularEmojis: emojis.filter(emojiItem => popularEmojiNames.includes(emojiItem.name))
.sort((item1, item2) => popularEmojiNames.indexOf(item1.name) - popularEmojiNames.indexOf(item2.name)),
exactSearchEngine: new Fuse(emojis, { ...searchOptions, keys: ['name'] }),
fuzzySearchEngine: new Fuse(emojis, { ...searchOptions, keys: [{ name: 'name', weight: 0.9 }, { name: 'keywords', weight: 0.1 }] }),
};
function replaceEmojis(text, offset = 0) {
const match = text.match(/(:((\w|\+|_)+):)+/);
if (match) {
// Increase the search index
const postIndex = match.index + match[0].length;
// Collect the emoji character if found, default back to :placeholder:
const emojiChar = emoji.lib[match[2]] ? emoji.lib[match[2]].char : match[1];
text = text.substr(offset, postIndex).replace(match[1], emojiChar) + replaceEmojis(text.substr(postIndex));
}
return text;
}
const filteredNativeEmoji: Array = filteredEmojiName.map((name: string) => {
return {
name: `:${name}:`,
code: emojilib.lib[name].char
}
})
// Find custom emojis
export function bySearch (query: string): string {
var options = [];
// Search over all emojis, looking for a matching keyword.
for (var key in emojis) {
if (emojis.hasOwnProperty(key)) {
// If the keyword matches, add the emoji to an array of options.
if (emojis[key].keywords && emojis[key].keywords.indexOf(query) > -1) {
options.push(key);
} else if (key.indexOf(query) > -1) {
options.push(key);
}
}
}
// If any options have been found, return a random option.
if (options.length > 0) {
return ':' + options[Math.floor(Math.random() * options.length)] + ': ';
} else {
return null;
}
}
/* global localStorage, alert */
var preference
var ipc = require('electron').ipcRenderer
var modifiers = require('emojilib').fitzpatrick_scale_modifiers
var defaultPreference = {
'open-window-shortcut': 'ctrl+shift+space',
'emoji-size': '20',
'open-at-login': false,
'skin-tone-modifier': ''
}
var preferenceNames = {
'open-window-shortcut': 'Mojibar shortcut',
'emoji-size': 'Emoji font size',
'open-at-login': 'Start Mojibar at login',
'skin-tone-modifier': 'Skin tone modifier'
}
var applyPreferences = function (preference, initialization) {
/* global localStorage, alert */
var preference
var ipc = require('electron').ipcRenderer
var modifiers = require('emojilib').fitzpatrick_scale_modifiers
var defaultPreference = {
'open-window-shortcut': 'ctrl+shift+space',
'emoji-size': '20',
'open-at-login': false,
'skin-tone-modifier': ''
}
var preferenceNames = {
'open-window-shortcut': 'Mojibar shortcut',
'emoji-size': 'Emoji font size',
'open-at-login': 'Start Mojibar at login',
'skin-tone-modifier': 'Skin tone modifier'
}
var applyPreferences = function (preference, initialization) {
/* global localStorage, fetch */
var emojilib = JSON.parse(localStorage.getItem('emojilib')) || require('emojilib').lib
var emojikeys = JSON.parse(localStorage.getItem('emojikeys')) || require('emojilib').ordered
var modifiers = require('emojilib').fitzpatrick_scale_modifiers
var clipboard = require('electron').clipboard
var ipc = require('electron').ipcRenderer
var CommandProcessor = require('./CommandProcessor')
var MicAudioProcessor = require('./micAudioProcessor')
var KeywordSpotter = require('honkling-node')
var displayManager = require('./displayManager')
var index = buildIndex()
var indexKeys = Object.keys(index)
var emojikeyIndexTable = buildEmojikeyIndexTable()
var searching = false
var searchInput = document.querySelector('.js-search')
var preference = JSON.parse(localStorage.getItem('preference'))
var directions = {
37: 'left',