diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 632ad9d8f94..61c5442a930 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -69,8 +69,6 @@ //= require ./discourse/components/notifications-button //= require ./discourse/lib/link-mentions //= require ./discourse/components/site-header -//= require ./discourse/lib/emoji/groups -//= require ./discourse/lib/emoji/toolbar //= require ./discourse/components/d-editor //= require ./discourse/lib/screen-track //= require ./discourse/routes/discourse diff --git a/app/assets/javascripts/discourse/components/d-editor.js.es6 b/app/assets/javascripts/discourse/components/d-editor.js.es6 index 289d5ee4f19..e2c22e9ef09 100644 --- a/app/assets/javascripts/discourse/components/d-editor.js.es6 +++ b/app/assets/javascripts/discourse/components/d-editor.js.es6 @@ -1,6 +1,5 @@ /*global Mousetrap:true */ import { default as computed, on, observes } from 'ember-addons/ember-computed-decorators'; -import { showSelector } from "discourse/lib/emoji/toolbar"; import Category from 'discourse/models/category'; import { categoryHashtagTriggerRule } from 'discourse/lib/category-hashtags'; import { TAG_HASHTAG_POSTFIX } from 'discourse/lib/tag-hashtags'; @@ -346,20 +345,8 @@ export default Ember.Component.extend({ if (v.code) { return `${v.code}:`; } else { - showSelector({ - appendTo: self.$(), - register, - onSelect: title => { - // Remove the previously type characters when a new emoji is selected from the selector. - let selected = self._getSelected(); - let newPre = selected.pre.replace(/:[^:]+$/, ":"); - let numOfRemovedChars = selected.pre.length - newPre.length; - selected.pre = newPre; - selected.start -= numOfRemovedChars; - selected.end -= numOfRemovedChars; - self._addText(selected, `${title}:`); - } - }); + $editorInput.autocomplete({cancel: true}); + self.set('emojiPickerIsActive', true); return ""; } }, @@ -614,6 +601,21 @@ export default Ember.Component.extend({ }, actions: { + emojiSelected(code) { + let selected = this._getSelected(); + const captures = selected.pre.match(/\B:(\w*)$/); + + if(_.isEmpty(captures)) { + this._addText(selected, `:${code}:`); + } else { + let numOfRemovedChars = selected.pre.length - captures[1].length; + selected.pre = selected.pre.slice(0, selected.pre.length - captures[1].length); + selected.start -= numOfRemovedChars; + selected.end -= numOfRemovedChars; + this._addText(selected, `${code}:`); + } + }, + toolbarButton(button) { const selected = this._getSelected(button.trimLeading); const toolbarEvent = { @@ -692,11 +694,7 @@ export default Ember.Component.extend({ }, emoji() { - showSelector({ - appendTo: this.$(), - register: this.register, - onSelect: title => this._addText(this._getSelected(), `:${title}:`) - }); + this.set('emojiPickerIsActive', !this.get('emojiPickerIsActive')); } } }); diff --git a/app/assets/javascripts/discourse/components/emoji-picker.js.es6 b/app/assets/javascripts/discourse/components/emoji-picker.js.es6 new file mode 100644 index 00000000000..939fce6d385 --- /dev/null +++ b/app/assets/javascripts/discourse/components/emoji-picker.js.es6 @@ -0,0 +1,448 @@ +import { observes } from "ember-addons/ember-computed-decorators"; +import { findRawTemplate } from "discourse/lib/raw-templates"; +import { emojiUrlFor } from "discourse/lib/text"; +import KeyValueStore from "discourse/lib/key-value-store"; +import { emojis } from "pretty-text/emoji/data"; +import { extendedEmojiList, isSkinTonableEmoji } from "pretty-text/emoji"; + +const recentTemplate = findRawTemplate("emoji-picker-recent"); +const pickerTemplate = findRawTemplate("emoji-picker"); +export const keyValueStore = new KeyValueStore("discourse_emojis_"); +export const EMOJI_USAGE = "emojiUsage"; +export const EMOJI_SCROLL_Y = "emojiScrollY"; +export const EMOJI_SELECTED_DIVERSITY = "emojiSelectedDiversity"; +const PER_ROW = 11; + +export default Ember.Component.extend({ + customEmojis: _.map(_.keys(extendedEmojiList()), function(code) { + return { code, src: emojiUrlFor(code) }; + }), + + $picker: Ember.computed("active", function() { + return this.$(".emoji-picker"); + }), + + $filter: Ember.computed("$picker", function() { + return this.get("$picker").find(".filter"); + }), + + $results: Ember.computed("$picker", function() { + return this.get("$picker").find(".results"); + }), + + $list: Ember.computed("$picker", function() { + return this.get("$picker").find(".list"); + }), + + willDestroyElement() { + this._super(); + this._unbindEvents(); + }, + + didInsertElement() { + this._super(); + + if (!keyValueStore.getObject(EMOJI_USAGE)) { + keyValueStore.setObject({ key: EMOJI_USAGE, value: {} }); + } + + this.set("selectedDiversity", keyValueStore.getObject(EMOJI_SELECTED_DIVERSITY) || 1); + }, + + didUpdateAttrs() { + this._super(); + + if (this.get("active")) { + this.show(); + } else { + this.close(); + } + }, + + @observes("filter") + filterChanged() { + this.get("$filter").find(".clear-filter").toggle(!_.isEmpty(this.get("filter"))); + Ember.run.debounce(this, this._filterEmojisList, 250); + }, + + @observes("selectedDiversity") + selectedDiversityChanged() { + keyValueStore.setObject({key: EMOJI_SELECTED_DIVERSITY, value: this.get("selectedDiversity")}); + + $.each(this.get("$list").find(".emoji.diversity[src!='']"), (_, icon) => { + this._updateIconSrc(icon); + }); + + if(this.get("filter") !== "") { + $.each(this.get("$results").find(".emoji.diversity"), (_, icon) => { + this._updateIconSrc(icon); + }); + } + }, + + @observes("recentEmojis") + recentEmojisChanged() { + const $recentSection = this.get("$list").find(".section[data-section='recent']"); + const $recentSectionGroup = $recentSection.find(".section-group"); + const $recentCategory = this.get("$picker").find(".category-icon a[title='recent']").parent(); + if(_.isEmpty(this.get("recentEmojis"))) { + $recentCategory.hide(); + $recentSection.css("height", 0).hide(); + } else { + $recentCategory.show(); + $recentSection.css("height", "auto").show(); + } + + const recentEmojis = _.map(this.get("recentEmojis"), function(emoji) { + return { code: emoji.title, src: emojiUrlFor(emoji.title) }; + }); + const model = { recentEmojis }; + const template = recentTemplate(model); + $recentSectionGroup.html(template); + this._bindHover($recentSectionGroup.find("a")); + }, + + close() { + this.get("$picker") + .css({width: "", left: "", bottom: ""}) + .empty(); + this.$(".emoji-picker-modal").removeClass("fadeIn"); + + this._unbindEvents(); + }, + + show() { + const model = { customEmojis: this.get("customEmojis") }; + const template = pickerTemplate(model); + this.get("$picker").html(template); + + this._bindEvents(); + + Ember.run.later(this, function() { + this._setDiversity(); + this._positionPicker(); + this._scrollTo(); + this.recentEmojisChanged(); + }); + }, + + _bindEvents() { + this._bindDiversityClick(); + this._bindSectionsScroll(); + this._bindEmojiClick(); + this._bindClearRecentEmojisGroup(); + this._bindResizing(); + this._bindHover(); + this._bindCategoryClick(); + this._bindModalClick(); + this._bindFilterInput(); + this._bindEscape(); + }, + + _bindEscape() { + this.$().on("keydown", e => { + if (e.which === 27) { + this.set("active", false); + return false; + } + }); + }, + + _bindModalClick() { + this.$(".emoji-picker-modal").on("click", () => { + this.set("active", false); + }); + }, + + _unbindEvents() { + this.$(window).off("resize"); + this.$(".emoji-picker-modal").off("click"); + Ember.$("#reply-control").off("div-resized"); + this.$().off("keydown"); + }, + + _filterEmojisList() { + const $filter = this.get("$picker").find(".filter"); + + if (this.get("filter") === "") { + $filter.find("input[name='filter']").val(""); + this.get("$results").empty().hide(); + this.get("$list").show(); + } else { + const regexp = new RegExp(this.get("filter"), "g"); + const filteredCodes = _.filter(emojis, code => regexp.test(code)).slice(0, 30); + this.get("$results").empty().html( + _.map(filteredCodes, (code) => { + const hasDiversity = isSkinTonableEmoji(code); + const diversity = hasDiversity ? "diversity" : ""; + const scaledCode = this._codeWithDiversity(code, hasDiversity); + return ` + + `; + }) + ).show(); + this._bindHover(this.get("$results").find("a")); + this._bindEmojiClick(this.get("$results")); + this.get("$list").hide(); + } + }, + + _bindFilterInput() { + const $filter = this.get("$picker").find(".filter"); + const $input = $filter.find("input"); + + $input.on("input", (event) => { + this.set("filter", event.currentTarget.value); + }); + + $filter.find(".clear-filter").on("click", () => { + $input.val("").focus(); + this.set("filter", ""); + return false; + }); + }, + + _bindCategoryClick() { + this.get("$picker").find(".category-icon").on("click", "a", (event) => { + this.set("filter", ""); + this.get("$results").empty(); + this.get("$list").show(); + + const section = $(event.currentTarget).attr("title"); + const $section = this.get("$list").find(`.section[data-section="${section}"]`); + const scrollTop = this.get("$list").scrollTop() + + ( $section.offset().top - this.get("$list").offset().top ); + + this._scrollTo(scrollTop); + return false; + }); + }, + + _bindHover(hoverables) { + const replaceInfoContent = (html) => { + this.get("$picker").find(".footer .info").html(html || ""); + } + + (hoverables || this.$(".section-group a")).hover(event => { + const $a = $(event.currentTarget); + const code = this._codeWithDiversity($a.attr("title"), $a.find("img").hasClass("diversity")); + const html = ` :${code}:`; + replaceInfoContent(html); + }, + () => replaceInfoContent() + ); + }, + + _bindResizing() { + this.$(window).on("resize", () => { + Ember.run.debounce(this, this._positionPicker, 100); + }); + + Ember.$("#reply-control").on("div-resized", () => { + Ember.run.debounce(this, this._positionPicker, 100); + }); + }, + + _bindClearRecentEmojisGroup() { + const $recent = this.get("$picker").find(".section[data-section='recent'] .clear-recent"); + $recent.on("click", () => { + keyValueStore.setObject({ key: EMOJI_USAGE, value: {} }); + this.set("recentEmojis", {}); + this._scrollTo(0); + return false; + }); + }, + + _bindEmojiClick(emojisContainer) { + const $emojisContainer = emojisContainer || this.get("$list").find(".section-group"); + $emojisContainer.off("click").on("click", "a", e => { + const $icon = $(e.currentTarget); + const title = $icon.attr("title"); + const code = this._codeWithDiversity(title, $icon.find("img").hasClass("diversity")); + + this._trackEmojiUsage(code); + + if(this._isSmallViewport()) { + this.set("active", false); + } + + return false; + }); + }, + + _bindSectionsScroll() { + this.get("$list").on("scroll", () => { + Ember.run.debounce(this, this._checkVisibleSection, 150); + Ember.run.debounce(this, this._storeScrollPosition, 50); + }); + }, + + _checkVisibleSection() { + const $sections = this.get("$list").find(".section"); + const sections = []; + let cumulatedHeight = 0; + + $.each($sections, (_, section) => { + const $section = $(section); + sections.push({$section, cumulatedHeight}); + cumulatedHeight += $section.innerHeight(); + }); + + let selectedSection; + const currentScrollTop = this.get("$list").scrollTop() + if (!_.isEmpty(this.get("recentEmojis")) && currentScrollTop === 0) { + selectedSection = _.first(sections); + } else if (!_.isEmpty(this.get("customEmojis")) && + currentScrollTop === this.get("$list")[0].scrollHeight - this.get("$list").innerHeight()) + { + selectedSection = _.last(sections); + } else { + selectedSection = _.last(_.reject(sections, (section) => { + return section.cumulatedHeight > currentScrollTop; + })); + } + + if(selectedSection) { + this.get("$picker").find(".category-icon").removeClass("current"); + this.get("$picker").find(`.category-icon a[title='${selectedSection.$section.data("section")}']`) + .parent() + .addClass("current"); + + if(!selectedSection.$section.hasClass("loaded")) { + selectedSection.$section.addClass("loaded"); + this._loadVisibleEmojis(selectedSection.$section.find(".emoji[src='']")); + } + + //preload surrounding sections + const selectedSectionIndex = sections.indexOf(selectedSection); + const preloadedSection = sections[selectedSectionIndex + 1] || sections[selectedSectionIndex - 1]; + if(preloadedSection && !preloadedSection.$section.hasClass("loaded")) { + preloadedSection.$section.addClass("loaded"); + const $visibleEmojis = preloadedSection.$section.find(".emoji[src='']"); + Ember.run.later(() => { this._loadVisibleEmojis($visibleEmojis) }, 1500); + } + } + }, + + _bindDiversityClick() { + const $diversityScales = this.get("$picker").find(".diversity-picker .diversity-scale"); + $diversityScales.on("click", (event) => { + const $selectedDiversity = $(event.currentTarget); + $diversityScales.removeClass("selected"); + $selectedDiversity.addClass("selected"); + this.set("selectedDiversity", parseInt($selectedDiversity.data("level"))); + return false; + }); + }, + + _setDiversity() { + this.get("$picker") + .find(`.diversity-picker .diversity-scale[data-level="${this.get("selectedDiversity")}"]`) + .addClass("selected"); + }, + + _isSmallViewport() { + return this.site.isMobileDevice || this.$(window).width() <= 1024 || this.$(window).height() <= 768; + }, + + _positionPicker(){ + if(!this.get("active")) { return; } + + let isLargePreview = this.$(window).height() - + Ember.$(".d-header").height() - + Ember.$("#reply-control").height() < + this.get("$picker").height() + 16; + + if(this._isSmallViewport()) { + this.$(".emoji-picker-modal").addClass("fadeIn"); + this.get("$picker").css({ + width: this.site.isMobileDevice ? this.$(window).width() - 10 : 340, + marginLeft: this.site.isMobileDevice ? -(this.$(window).width() - 10)/2 : -170, + marginTop: -150, + left: "50%", + top: "50%" + }) + } else { + this.$(".emoji-picker-modal").removeClass("fadeIn"); + + let cssAttributes = { width: 400, marginLeft: "", marginTop: "", left: "", top: "" }; + if(isLargePreview) { + cssAttributes.left = (Ember.$("#reply-control").width() - Ember.$(".d-editor").width() ) / 2 + Ember.$(".d-editor-preview-wrapper").position().left; + cssAttributes.bottom = 32; + } else { + cssAttributes.left = (Ember.$("#reply-control").width() - Ember.$(".d-editor").width() ) / 2 + Ember.$(".d-editor").position().left; + cssAttributes.bottom = Ember.$("#reply-control").height() - 48; + } + + this.get("$picker").css(cssAttributes); + } + + const infoMaxWidth = this.get("$picker").width() - + this.get("$picker").find(".categories-column").width() - + this.get("$picker").find(".diversity-picker").width() - + 32; + this.get("$picker").find(".info").css("max-width", infoMaxWidth); + }, + + _loadVisibleEmojis($visibleEmojis) { + $.each($visibleEmojis, (_, icon) => { + const $icon = $(icon); + const code = this._codeWithDiversity($icon.parents("a").attr("title"), $icon.hasClass("diversity")) + $icon.attr("src", emojiUrlFor(code)); + }); + }, + + _codeWithDiversity(code, diversity) { + if(diversity && this.get("selectedDiversity") !== 1) { + return `${code}:t${this.get("selectedDiversity")}`; + } else { + return code; + } + }, + + _storeScrollPosition() { + keyValueStore.setObject({ + key: EMOJI_SCROLL_Y, + value: this.get("$list").scrollTop() + }); + }, + + _trackEmojiUsage(code) { + const recent = keyValueStore.getObject(EMOJI_USAGE) || {}; + + if (!recent[code]) { + // keeping title here for legacy reasons, might migrate later + recent[code] = { title: code, usage: 0 }; + } + recent[code]["usage"]++; + + keyValueStore.setObject({ key: EMOJI_USAGE, value: recent }); + + this.set("recentEmojis", _.map(recent).sort(this._sortByUsage).slice(0, PER_ROW)); + + this.sendAction("emojiSelected", code); + }, + + _sortByUsage(a, b) { + if (a.usage > b.usage) { return -1; } + if (b.usage > a.usage) { return 1; } + return a.title.localeCompare(b.title); + }, + + _scrollTo(y) { + const yPosition = _.isUndefined(y) ? keyValueStore.getObject(EMOJI_SCROLL_Y) : y; + + this.get("$list").scrollTop(yPosition); + + // if we don’t actually scroll we need to force it + if(yPosition === 0) { + this.get("$list").scroll(); + } + }, + + _updateIconSrc(icon) { + const $icon = $(icon); + const code = this._codeWithDiversity($icon.parents("a").attr("title"), true) + $icon.attr("src", emojiUrlFor(code)); + }, +}); diff --git a/app/assets/javascripts/discourse/lib/emoji/groups.js.es6 b/app/assets/javascripts/discourse/lib/emoji/groups.js.es6 deleted file mode 100644 index 6f2eaf28028..00000000000 --- a/app/assets/javascripts/discourse/lib/emoji/groups.js.es6 +++ /dev/null @@ -1,1555 +0,0 @@ -// This file is generated by emoji.rake do not modify directly - -// note that these categories are copied from Slack -const groups = [ - { - "name": "people", - "fullname": "People", - "tabicon": "grinning", - "icons": [ - "grinning", - "grin", - "joy", - "rofl", - "smiley", - "smile", - "sweat_smile", - "laughing", - "wink", - "blush", - "yum", - "sunglasses", - "heart_eyes", - "kissing_heart", - "kissing", - "kissing_smiling_eyes", - "kissing_closed_eyes", - "relaxed", - "slightly_smiling_face", - "hugs", - "star_struck", - "thinking", - "face_with_raised_eyebrow", - "neutral_face", - "expressionless", - "no_mouth", - "roll_eyes", - "smirk", - "persevere", - "disappointed_relieved", - "open_mouth", - "zipper_mouth_face", - "hushed", - "sleepy", - "tired_face", - "sleeping", - "relieved", - "stuck_out_tongue", - "stuck_out_tongue_winking_eye", - "stuck_out_tongue_closed_eyes", - "drooling_face", - "unamused", - "sweat", - "pensive", - "confused", - "upside_down_face", - "money_mouth_face", - "astonished", - "frowning_face", - "slightly_frowning_face", - "confounded", - "disappointed", - "worried", - "triumph", - "cry", - "sob", - "frowning", - "anguished", - "fearful", - "weary", - "exploding_head", - "grimacing", - "cold_sweat", - "scream", - "flushed", - "crazy_face", - "dizzy_face", - "rage", - "angry", - "face_with_symbols_over_mouth", - "mask", - "face_with_thermometer", - "face_with_head_bandage", - "nauseated_face", - "face_vomiting", - "sneezing_face", - "innocent", - "cowboy_hat_face", - "clown_face", - "lying_face", - "sushing_face", - "face_with_hand_over_mouth", - "face_with_monocle", - "nerd_face", - "smiling_imp", - "imp", - "japanese_ogre", - "japanese_goblin", - "skull", - "skull_and_crossbones", - "ghost", - "alien", - "space_invader", - "robot", - "poop", - "smiley_cat", - "smile_cat", - "joy_cat", - "heart_eyes_cat", - "smirk_cat", - "kissing_cat", - "scream_cat", - "crying_cat_face", - "pouting_cat", - "see_no_evil", - "hear_no_evil", - "speak_no_evil", - "baby", - "child", - "boy", - "girl", - "adult", - "man", - "woman", - "older_adult", - "older_man", - "older_woman", - "man_health_worker", - "woman_health_worker", - "man_student", - "woman_student", - "man_teacher", - "woman_teacher", - "man_judge", - "woman_judge", - "man_farmer", - "woman_farmer", - "man_cook", - "woman_cook", - "man_mechanic", - "woman_mechanic", - "man_factory_worker", - "woman_factory_worker", - "man_office_worker", - "woman_office_worker", - "man_scientist", - "woman_scientist", - "man_technologist", - "woman_technologist", - "man_singer", - "woman_singer", - "man_artist", - "woman_artist", - "man_pilot", - "woman_pilot", - "man_astronaut", - "woman_astronaut", - "man_firefighter", - "woman_firefighter", - "policeman", - "policewoman", - "male_detective", - "female_detective", - "guardsman", - "guardswoman", - "construction_worker_man", - "construction_worker_woman", - "prince", - "princess", - "man_with_turban", - "woman_with_turban", - "man_with_gua_pi_mao", - "woman_with_headscarf", - "bearded_person", - "blonde_man", - "blonde_woman", - "man_in_tuxedo", - "bride_with_veil", - "pregnant_woman", - "breast_feeding", - "angel", - "santa", - "mrs_claus", - "mage", - "fairy", - "vampire", - "merperson", - "elf", - "genie", - "zombie", - "frowning_woman", - "frowning_man", - "pouting_woman", - "pouting_man", - "no_good_woman", - "no_good_man", - "ok_woman", - "ok_man", - "tipping_hand_woman", - "tipping_hand_man", - "raising_hand_woman", - "raising_hand_man", - "bowing_man", - "bowing_woman", - "man_facepalming", - "woman_facepalming", - "man_shrugging", - "woman_shrugging", - "couple", - "two_men_holding_hands", - "two_women_holding_hands", - "couplekiss_man_woman", - "couplekiss_man_man", - "couplekiss_woman_woman", - "couple_with_heart_woman_man", - "couple_with_heart_man_man", - "couple_with_heart_woman_woman", - "family_man_woman_boy", - "family_man_woman_girl", - "family_man_woman_girl_boy", - "family_man_woman_boy_boy", - "family_man_woman_girl_girl", - "family_man_man_boy", - "family_man_man_girl", - "family_man_man_girl_boy", - "family_man_man_boy_boy", - "family_man_man_girl_girl", - "family_woman_woman_boy", - "family_woman_woman_girl", - "family_woman_woman_girl_boy", - "family_woman_woman_boy_boy", - "family_woman_woman_girl_girl", - "family_man_boy", - "family_man_boy_boy", - "family_man_girl", - "family_man_girl_boy", - "family_man_girl_girl", - "family_woman_boy", - "family_woman_boy_boy", - "family_woman_girl", - "family_woman_girl_boy", - "family_woman_girl_girl", - "selfie", - "muscle", - "point_left", - "point_right", - "point_up", - "point_up_2", - "fu", - "point_down", - "v", - "crossed_fingers", - "vulcan_salute", - "metal", - "call_me_hand", - "raised_hand_with_fingers_splayed", - "raised_hand", - "ok_hand", - "+1", - "-1", - "fist", - "facepunch", - "fist_left", - "fist_right", - "raised_back_of_hand", - "wave", - "love_you_gesture", - "writing_hand", - "clap", - "open_hands", - "raised_hands", - "palms_up_together", - "pray", - "handshake", - "nail_care", - "ear", - "nose", - "footprints", - "eyes", - "eye", - "brain", - "tongue", - "lips" - ] - }, - { - "name": "nature", - "fullname": "Nature", - "tabicon": "evergreen_tree", - "icons": [ - "monkey_face", - "monkey", - "gorilla", - "dog", - "dog2", - "poodle", - "wolf", - "fox_face", - "cat", - "cat2", - "lion", - "tiger", - "tiger2", - "leopard", - "horse", - "racehorse", - "unicorn", - "zebra", - "deer", - "cow", - "ox", - "water_buffalo", - "cow2", - "pig", - "pig2", - "boar", - "pig_nose", - "ram", - "sheep", - "goat", - "dromedary_camel", - "camel", - "giraffe", - "elephant", - "rhinoceros", - "mouse", - "mouse2", - "rat", - "hamster", - "rabbit", - "rabbit2", - "chipmunk", - "hedgehog", - "bat", - "bear", - "koala", - "panda_face", - "paw_prints", - "turkey", - "chicken", - "rooster", - "hatching_chick", - "baby_chick", - "hatched_chick", - "bird", - "penguin", - "dove", - "eagle", - "duck", - "owl", - "frog", - "crocodile", - "turtle", - "lizard", - "snake", - "dragon_face", - "dragon", - "sauropod", - "t_rex", - "whale", - "whale2", - "dolphin", - "fish", - "tropical_fish", - "blowfish", - "shark", - "octopus", - "shell", - "crab", - "shrimp", - "squid", - "snail", - "butterfly", - "bug", - "ant", - "honeybee", - "beetle", - "cricket", - "spider", - "spider_web", - "scorpion", - "bouquet", - "cherry_blossom", - "white_flower", - "rosette", - "rose", - "wilted_flower", - "hibiscus", - "sunflower", - "blossom", - "tulip", - "seedling", - "evergreen_tree", - "deciduous_tree", - "palm_tree", - "cactus", - "ear_of_rice", - "herb", - "shamrock", - "four_leaf_clover", - "maple_leaf", - "fallen_leaf", - "leaves", - "new_moon", - "waxing_crescent_moon", - "first_quarter_moon", - "waxing_gibbous_moon", - "full_moon", - "waning_gibbous_moon", - "last_quarter_moon", - "waning_crescent_moon", - "crescent_moon", - "new_moon_with_face", - "first_quarter_moon_with_face", - "last_quarter_moon_with_face", - "thermometer", - "sunny", - "full_moon_with_face", - "sun_with_face", - "star", - "star2", - "stars", - "cloud", - "partly_sunny", - "cloud_with_lightning_and_rain", - "sun_behind_small_cloud", - "sun_behind_large_cloud", - "sun_behind_rain_cloud", - "cloud_with_rain", - "cloud_with_snow", - "cloud_with_lightning", - "tornado", - "fog", - "wind_face", - "cyclone", - "rainbow", - "closed_umbrella", - "open_umbrella", - "umbrella", - "parasol_on_ground", - "zap", - "snowflake", - "snowman_with_snow", - "snowman", - "comet", - "fire", - "droplet", - "ocean" - ] - }, - { - "name": "food", - "fullname": "Food & Drink", - "tabicon": "hamburger", - "icons": [ - "grapes", - "melon", - "watermelon", - "tangerine", - "lemon", - "banana", - "pineapple", - "apple", - "green_apple", - "pear", - "peach", - "cherries", - "strawberry", - "kiwi_fruit", - "tomato", - "coconut", - "avocado", - "eggplant", - "potato", - "carrot", - "corn", - "hot_pepper", - "cucumber", - "broccoli", - "mushroom", - "peanuts", - "chestnut", - "bread", - "croissant", - "baguette_bread", - "pretzel", - "pancakes", - "cheese", - "meat_on_bone", - "poultry_leg", - "cut_of_meat", - "bacon", - "hamburger", - "fries", - "pizza", - "hotdog", - "sandwich", - "taco", - "burrito", - "stuffed_flatbread", - "egg", - "fried_egg", - "shallow_pan_of_food", - "stew", - "bowl_with_spoon", - "green_salad", - "popcorn", - "canned_food", - "bento", - "rice_cracker", - "rice_ball", - "rice", - "curry", - "ramen", - "spaghetti", - "sweet_potato", - "oden", - "sushi", - "fried_shrimp", - "fish_cake", - "dango", - "dumpling", - "fortune_cookie", - "takeout_box", - "icecream", - "shaved_ice", - "ice_cream", - "doughnut", - "cookie", - "birthday", - "cake", - "pie", - "chocolate_bar", - "candy", - "lollipop", - "custard", - "honey_pot", - "baby_bottle", - "milk_glass", - "coffee", - "tea", - "sake", - "champagne", - "wine_glass", - "cocktail", - "tropical_drink", - "beer", - "beers", - "clinking_glasses", - "tumbler_glass", - "cup_with_straw", - "chopsticks", - "plate_with_cutlery", - "fork_and_knife", - "spoon", - "hocho", - "amphora" - ] - }, - { - "name": "celebration", - "fullname": "Celebration", - "tabicon": "gift", - "icons": [ - "jack_o_lantern", - "christmas_tree", - "fireworks", - "sparkler", - "sparkles", - "balloon", - "tada", - "confetti_ball", - "tanabata_tree", - "bamboo", - "dolls", - "flags", - "wind_chime", - "rice_scene", - "ribbon", - "gift", - "reminder_ribbon", - "tickets", - "ticket", - "kiss", - "cupid", - "heart", - "heartbeat", - "broken_heart", - "two_hearts", - "sparkling_heart", - "heartpulse", - "blue_heart", - "green_heart", - "yellow_heart", - "orange_heart", - "purple_heart", - "black_heart", - "gift_heart", - "revolving_hearts", - "heart_decoration", - "heavy_heart_exclamation", - "love_letter", - "zzz", - "anger", - "bomb", - "boom", - "sweat_drops", - "dash", - "dizzy", - "speech_balloon", - "left_speech_bubble", - "right_anger_bubble", - "thought_balloon", - "hole" - ] - }, - { - "name": "activity", - "fullname": "Activities", - "tabicon": "soccer", - "icons": [ - "massage_woman", - "massage_man", - "haircut_woman", - "haircut_man", - "walking_man", - "walking_woman", - "running_man", - "running_woman", - "dancer", - "man_dancing", - "dancing_women", - "dancing_men", - "person_in_steamy_room", - "person_climbing", - "person_in_lotus_position", - "bath", - "sleeping_bed", - "business_suit_levitating", - "speaking_head", - "bust_in_silhouette", - "busts_in_silhouette", - "person_fencing", - "horse_racing", - "skier", - "snowboarder", - "golfing_man", - "golfing_woman", - "surfing_man", - "surfing_woman", - "rowing_man", - "rowing_woman", - "swimming_man", - "swimming_woman", - "basketball_man", - "basketball_woman", - "weight_lifting_man", - "weight_lifting_woman", - "biking_man", - "biking_woman", - "mountain_biking_man", - "mountain_biking_woman", - "racing_car", - "motorcycle", - "man_cartwheeling", - "woman_cartwheeling", - "men_wrestling", - "women_wrestling", - "man_playing_water_polo", - "woman_playing_water_polo", - "man_playing_handball", - "woman_playing_handball", - "man_juggling", - "woman_juggling", - "soccer", - "baseball", - "basketball", - "volleyball", - "football", - "rugby_football", - "tennis", - "8ball", - "bowling", - "cricket_bat_and_ball", - "field_hockey", - "ice_hockey", - "ping_pong", - "badminton", - "boxing_glove", - "martial_arts_uniform", - "goal_net", - "dart", - "golf", - "ice_skate", - "fishing_pole_and_fish", - "running_shirt_with_sash", - "ski", - "sled", - "curling_stone", - "video_game", - "joystick", - "game_die", - "spades", - "hearts", - "diamonds", - "clubs", - "black_joker", - "mahjong", - "flower_playing_cards", - "musical_score", - "musical_note", - "notes", - "studio_microphone", - "level_slider", - "control_knobs", - "microphone", - "headphones", - "radio", - "saxophone", - "guitar", - "musical_keyboard", - "trumpet", - "violin", - "drum" - ] - }, - { - "name": "travel", - "fullname": "Travel & Places", - "tabicon": "airplane", - "icons": [ - "earth_africa", - "earth_americas", - "earth_asia", - "globe_with_meridians", - "world_map", - "japan", - "mountain_snow", - "mountain", - "volcano", - "mount_fuji", - "camping", - "beach_umbrella", - "desert", - "desert_island", - "national_park", - "stadium", - "classical_building", - "building_construction", - "houses", - "cityscape", - "derelict_house", - "house", - "house_with_garden", - "office", - "post_office", - "european_post_office", - "hospital", - "bank", - "hotel", - "love_hotel", - "convenience_store", - "school", - "department_store", - "factory", - "japanese_castle", - "european_castle", - "wedding", - "tokyo_tower", - "statue_of_liberty", - "church", - "mosque", - "synagogue", - "shinto_shrine", - "kaaba", - "fountain", - "tent", - "foggy", - "night_with_stars", - "sunrise_over_mountains", - "sunrise", - "city_sunset", - "city_sunrise", - "bridge_at_night", - "hotsprings", - "milky_way", - "carousel_horse", - "ferris_wheel", - "roller_coaster", - "barber", - "circus_tent", - "performing_arts", - "framed_picture", - "art", - "slot_machine", - "steam_locomotive", - "railway_car", - "bullettrain_side", - "bullettrain_front", - "train2", - "metro", - "light_rail", - "station", - "tram", - "monorail", - "mountain_railway", - "train", - "bus", - "oncoming_bus", - "trolleybus", - "minibus", - "ambulance", - "fire_engine", - "police_car", - "oncoming_police_car", - "taxi", - "oncoming_taxi", - "red_car", - "oncoming_automobile", - "blue_car", - "truck", - "articulated_lorry", - "tractor", - "bike", - "kick_scooter", - "motor_scooter", - "busstop", - "motorway", - "railway_track", - "fuelpump", - "rotating_light", - "traffic_light", - "vertical_traffic_light", - "construction", - "stop_sign", - "anchor", - "sailboat", - "canoe", - "speedboat", - "passenger_ship", - "ferry", - "motor_boat", - "ship", - "airplane", - "small_airplane", - "flight_departure", - "flight_arrival", - "seat", - "helicopter", - "suspension_railway", - "mountain_cableway", - "aerial_tramway", - "artificial_satellite", - "rocket", - "flying_saucer", - "bellhop_bell", - "door", - "bed", - "couch_and_lamp", - "toilet", - "shower", - "bathtub", - "checkered_flag", - "triangular_flag_on_post", - "crossed_flags", - "black_flag", - "white_flag", - "rainbow_flag", - "ascension_island", - "andorra", - "united_arab_emirates", - "afghanistan", - "antigua_barbuda", - "anguilla", - "albania", - "armenia", - "angola", - "antarctica", - "argentina", - "american_samoa", - "austria", - "australia", - "aruba", - "aland_islands", - "azerbaijan", - "bosnia_herzegovina", - "barbados", - "bangladesh", - "belgium", - "burkina_faso", - "bulgaria", - "bahrain", - "burundi", - "benin", - "st_barthelemy", - "bermuda", - "brunei", - "bolivia", - "caribbean_netherlands", - "brazil", - "bahamas", - "bhutan", - "bouvet_island", - "botswana", - "belarus", - "belize", - "canada", - "cocos_islands", - "congo_kinshasa", - "central_african_republic", - "congo_brazzaville", - "switzerland", - "cote_divoire", - "cook_islands", - "chile", - "cameroon", - "cn", - "colombia", - "clipperton_island", - "costa_rica", - "cuba", - "cape_verde", - "curacao", - "christmas_island", - "cyprus", - "czech_republic", - "de", - "diego_garcia", - "djibouti", - "denmark", - "dominica", - "dominican_republic", - "algeria", - "ceuta_and_melilla", - "ecuador", - "estonia", - "egypt", - "western_sahara", - "eritrea", - "es", - "ethiopia", - "eu", - "finland", - "fiji", - "falkland_islands", - "micronesia", - "faroe_islands", - "fr", - "gabon", - "uk", - "grenada", - "georgia", - "french_guiana", - "guernsey", - "ghana", - "gibraltar", - "greenland", - "gambia", - "guinea", - "guadeloupe", - "equatorial_guinea", - "greece", - "south_georgia_south_sandwich_islands", - "guatemala", - "guam", - "guinea_bissau", - "guyana", - "hong_kong", - "heard_and_mc_donald_islands", - "honduras", - "croatia", - "haiti", - "hungary", - "canary_islands", - "indonesia", - "ireland", - "israel", - "isle_of_man", - "india", - "british_indian_ocean_territory", - "iraq", - "iran", - "iceland", - "it", - "jersey", - "jamaica", - "jordan", - "jp", - "kenya", - "kyrgyzstan", - "cambodia", - "kiribati", - "comoros", - "st_kitts_nevis", - "north_korea", - "kr", - "kuwait", - "cayman_islands", - "kazakhstan", - "laos", - "lebanon", - "st_lucia", - "liechtenstein", - "sri_lanka", - "liberia", - "lesotho", - "lithuania", - "luxembourg", - "latvia", - "libya", - "morocco", - "monaco", - "moldova", - "montenegro", - "st_martin", - "madagascar", - "marshall_islands", - "macedonia", - "mali", - "myanmar", - "mongolia", - "macau", - "northern_mariana_islands", - "martinique", - "mauritania", - "montserrat", - "malta", - "mauritius", - "maldives", - "malawi", - "mexico", - "malaysia", - "mozambique", - "namibia", - "new_caledonia", - "niger", - "norfolk_island", - "nigeria", - "nicaragua", - "netherlands", - "norway", - "nepal", - "nauru", - "niue", - "new_zealand", - "oman", - "panama", - "peru", - "french_polynesia", - "papua_new_guinea", - "philippines", - "pakistan", - "poland", - "st_pierre_miquelon", - "pitcairn_islands", - "puerto_rico", - "palestinian_territories", - "portugal", - "palau", - "paraguay", - "qatar", - "reunion", - "romania", - "serbia", - "ru", - "rwanda", - "saudi_arabia", - "solomon_islands", - "seychelles", - "sudan", - "sweden", - "singapore", - "st_helena", - "slovenia", - "svalbard_and_jan_mayen", - "slovakia", - "sierra_leone", - "san_marino", - "senegal", - "somalia", - "suriname", - "south_sudan", - "sao_tome_principe", - "el_salvador", - "sint_maarten", - "syria", - "swaziland", - "tristan_da_cunha", - "turks_caicos_islands", - "chad", - "french_southern_territories", - "togo", - "thailand", - "tajikistan", - "tokelau", - "timor_leste", - "turkmenistan", - "tunisia", - "tonga", - "tr", - "trinidad_tobago", - "tuvalu", - "taiwan", - "tanzania", - "ukraine", - "uganda", - "us_outlying_islands", - "united_nations", - "us", - "uruguay", - "uzbekistan", - "vatican_city", - "st_vincent_grenadines", - "venezuela", - "british_virgin_islands", - "us_virgin_islands", - "vietnam", - "vanuatu", - "wallis_futuna", - "samoa", - "kosovo", - "yemen", - "mayotte", - "south_africa", - "zambia", - "zimbabwe" - ] - }, - { - "name": "objects", - "fullname": "Objects & Symbols", - "tabicon": "eyeglasses", - "icons": [ - "eyeglasses", - "dark_sunglasses", - "necktie", - "tshirt", - "jeans", - "scarf", - "gloves", - "coat", - "socks", - "dress", - "kimono", - "bikini", - "womans_clothes", - "purse", - "handbag", - "pouch", - "shopping", - "school_satchel", - "mans_shoe", - "athletic_shoe", - "high_heel", - "sandal", - "boot", - "crown", - "womans_hat", - "tophat", - "mortar_board", - "billed_cap", - "rescue_worker_helmet", - "prayer_beads", - "lipstick", - "ring", - "gem", - "medal_military", - "trophy", - "medal_sports", - "1st_place_medal", - "2nd_place_medal", - "3rd_place_medal", - "mute", - "speaker", - "sound", - "loud_sound", - "loudspeaker", - "mega", - "postal_horn", - "bell", - "no_bell", - "iphone", - "calling", - "phone", - "telephone_receiver", - "pager", - "fax", - "battery", - "electric_plug", - "computer", - "desktop_computer", - "printer", - "keyboard", - "computer_mouse", - "trackball", - "minidisc", - "floppy_disk", - "cd", - "dvd", - "movie_camera", - "film_strip", - "film_projector", - "clapper", - "tv", - "camera", - "camera_flash", - "video_camera", - "vhs", - "mag", - "mag_right", - "microscope", - "telescope", - "satellite", - "candle", - "bulb", - "flashlight", - "izakaya_lantern", - "notebook_with_decorative_cover", - "closed_book", - "open_book", - "green_book", - "blue_book", - "orange_book", - "books", - "notebook", - "ledger", - "page_with_curl", - "scroll", - "page_facing_up", - "newspaper", - "newspaper_roll", - "bookmark_tabs", - "bookmark", - "label", - "moneybag", - "yen", - "dollar", - "euro", - "pound", - "money_with_wings", - "credit_card", - "chart", - "currency_exchange", - "heavy_dollar_sign", - "email", - "e-mail", - "incoming_envelope", - "envelope_with_arrow", - "outbox_tray", - "inbox_tray", - "package", - "mailbox", - "mailbox_closed", - "mailbox_with_mail", - "mailbox_with_no_mail", - "postbox", - "ballot_box", - "pencil2", - "black_nib", - "fountain_pen", - "pen", - "paintbrush", - "crayon", - "memo", - "briefcase", - "file_folder", - "open_file_folder", - "card_index_dividers", - "date", - "calendar", - "spiral_notepad", - "spiral_calendar", - "card_index", - "chart_with_upwards_trend", - "chart_with_downwards_trend", - "bar_chart", - "clipboard", - "pushpin", - "round_pushpin", - "paperclip", - "paperclips", - "straight_ruler", - "triangular_ruler", - "scissors", - "card_file_box", - "file_cabinet", - "wastebasket", - "lock", - "unlock", - "lock_with_ink_pen", - "closed_lock_with_key", - "key", - "old_key", - "hammer", - "pick", - "hammer_and_pick", - "hammer_and_wrench", - "dagger", - "crossed_swords", - "gun", - "bow_and_arrow", - "shield", - "wrench", - "nut_and_bolt", - "gear", - "clamp", - "alembic", - "balance_scale", - "link", - "chains", - "syringe", - "pill", - "smoking", - "coffin", - "funeral_urn", - "moyai", - "oil_drum", - "crystal_ball", - "shopping_cart", - "atm", - "put_litter_in_its_place", - "potable_water", - "wheelchair", - "mens", - "womens", - "restroom", - "baby_symbol", - "wc", - "passport_control", - "customs", - "baggage_claim", - "left_luggage", - "warning", - "children_crossing", - "no_entry", - "no_entry_sign", - "no_bicycles", - "no_smoking", - "do_not_litter", - "non-potable_water", - "no_pedestrians", - "no_mobile_phones", - "underage", - "radioactive", - "biohazard", - "arrow_up", - "arrow_upper_right", - "arrow_right", - "arrow_lower_right", - "arrow_down", - "arrow_lower_left", - "arrow_left", - "arrow_upper_left", - "arrow_up_down", - "left_right_arrow", - "leftwards_arrow_with_hook", - "arrow_right_hook", - "arrow_heading_up", - "arrow_heading_down", - "arrows_clockwise", - "arrows_counterclockwise", - "back", - "end", - "on", - "soon", - "top", - "place_of_worship", - "atom_symbol", - "om", - "star_of_david", - "wheel_of_dharma", - "yin_yang", - "latin_cross", - "orthodox_cross", - "star_and_crescent", - "peace_symbol", - "menorah", - "six_pointed_star", - "aries", - "taurus", - "gemini", - "cancer", - "leo", - "virgo", - "libra", - "scorpius", - "sagittarius", - "capricorn", - "aquarius", - "pisces", - "ophiuchus", - "twisted_rightwards_arrows", - "repeat", - "repeat_one", - "arrow_forward", - "fast_forward", - "next_track_button", - "play_or_pause_button", - "arrow_backward", - "rewind", - "previous_track_button", - "arrow_up_small", - "arrow_double_up", - "arrow_down_small", - "arrow_double_down", - "pause_button", - "stop_button", - "record_button", - "cinema", - "low_brightness", - "high_brightness", - "signal_strength", - "vibration_mode", - "mobile_phone_off", - "recycle", - "fleur_de_lis", - "trident", - "name_badge", - "beginner", - "o", - "white_check_mark", - "ballot_box_with_check", - "heavy_check_mark", - "heavy_multiplication_x", - "x", - "negative_squared_cross_mark", - "heavy_plus_sign", - "heavy_minus_sign", - "heavy_division_sign", - "curly_loop", - "loop", - "part_alternation_mark", - "eight_spoked_asterisk", - "eight_pointed_black_star", - "sparkle", - "bangbang", - "interrobang", - "question", - "grey_question", - "grey_exclamation", - "exclamation", - "wavy_dash", - "copyright", - "registered", - "tm", - "hash", - "asterisk", - "zero", - "one", - "two", - "three", - "four", - "five", - "six", - "seven", - "eight", - "nine", - "keycap_ten", - "100", - "capital_abcd", - "abcd", - "1234", - "symbols", - "abc", - "a", - "ab", - "b", - "cl", - "cool", - "free", - "information_source", - "id", - "m", - "new", - "ng", - "o2", - "ok", - "parking", - "sos", - "up", - "vs", - "koko", - "sa", - "u6708", - "u6709", - "u6307", - "ideograph_advantage", - "u5272", - "u7121", - "u7981", - "accept", - "u7533", - "u5408", - "u7a7a", - "congratulations", - "secret", - "u55b6", - "u6e80", - "black_small_square", - "white_small_square", - "white_medium_square", - "black_medium_square", - "white_medium_small_square", - "black_medium_small_square", - "black_large_square", - "white_large_square", - "large_orange_diamond", - "large_blue_diamond", - "small_orange_diamond", - "small_blue_diamond", - "small_red_triangle", - "small_red_triangle_down", - "diamond_shape_with_a_dot_inside", - "radio_button", - "black_square_button", - "white_square_button", - "white_circle", - "black_circle", - "red_circle", - "large_blue_circle", - "hourglass", - "hourglass_flowing_sand", - "watch", - "alarm_clock", - "stopwatch", - "timer_clock", - "mantelpiece_clock", - "clock12", - "clock1230", - "clock1", - "clock130", - "clock2", - "clock230", - "clock3", - "clock330", - "clock4", - "clock430", - "clock5", - "clock530", - "clock6", - "clock630", - "clock7", - "clock730", - "clock8", - "clock830", - "clock9", - "clock930", - "clock10", - "clock1030", - "clock11", - "clock1130" - ] - } -]; - -export default groups; diff --git a/app/assets/javascripts/discourse/lib/emoji/toolbar.js.es6 b/app/assets/javascripts/discourse/lib/emoji/toolbar.js.es6 deleted file mode 100644 index 9ef409b3d4c..00000000000 --- a/app/assets/javascripts/discourse/lib/emoji/toolbar.js.es6 +++ /dev/null @@ -1,208 +0,0 @@ -import groups from 'discourse/lib/emoji/groups'; -import KeyValueStore from "discourse/lib/key-value-store"; -import { emojiList, isSkinTonableEmoji } from 'pretty-text/emoji'; -import { emojiUrlFor } from 'discourse/lib/text'; -import { findRawTemplate } from 'discourse/lib/raw-templates'; - -const keyValueStore = new KeyValueStore("discourse_emojis_"); -const EMOJI_USAGE = "emojiUsage"; - -let PER_ROW = 12; -const PER_PAGE = 60; - -let ungroupedIcons, recentlyUsedIcons; -let selectedSkinTone = keyValueStore.getObject('selectedSkinTone') || 1; - -if (!keyValueStore.getObject(EMOJI_USAGE)) { - keyValueStore.setObject({key: EMOJI_USAGE, value: {}}); -} - -function closeSelector() { - $('.emoji-modal, .emoji-modal-wrapper').remove(); - $('body, textarea').off('keydown.emoji'); -} - -function initializeUngroupedIcons() { - const groupedIcons = {}; - - groups.forEach(group => { - group.icons.forEach(icon => groupedIcons[icon] = true); - }); - - ungroupedIcons = []; - const emojis = emojiList(); - emojis.forEach(emoji => { - if (groupedIcons[emoji] !== true) { - ungroupedIcons.push(emoji); - } - }); - - if (ungroupedIcons.length) { - groups.push({name: 'ungrouped', icons: ungroupedIcons}); - } -} - -function trackEmojiUsage(title) { - const recent = keyValueStore.getObject(EMOJI_USAGE) || {}; - - if (!recent[title]) { recent[title] = { title: title, usage: 0 }; } - recent[title]["usage"]++; - - keyValueStore.setObject({key: EMOJI_USAGE, value: recent}); - - // clear the cache - recentlyUsedIcons = null; -} - -function sortByUsage(a, b) { - if (a.usage > b.usage) { return -1; } - if (b.usage > a.usage) { return 1; } - return a.title.localeCompare(b.title); -} - -function initializeRecentlyUsedIcons() { - recentlyUsedIcons = []; - - const usage = _.map(keyValueStore.getObject(EMOJI_USAGE)).sort(sortByUsage); - const recent = usage.slice(0, PER_ROW); - - if (recent.length > 0) { - - recent.forEach(emoji => recentlyUsedIcons.push(emoji.title)); - - const recentGroup = groups.findBy('name', 'recent'); - if (recentGroup) { - recentGroup.icons = recentlyUsedIcons; - } else { - groups.push({ name: 'recent', icons: recentlyUsedIcons }); - } - } -} - -function toolbar(selected) { - if (!ungroupedIcons) { initializeUngroupedIcons(); } - if (!recentlyUsedIcons) { initializeRecentlyUsedIcons(); } - - return groups.map((g, i) => { - let icon = g.tabicon; - let title = g.fullname; - if (g.name === "recent") { - icon = "star"; - title = "Recent"; - } else if (g.name === "ungrouped") { - icon = g.icons[0]; - title = "Custom"; - } - - return { src: emojiUrlFor(icon), - title, - groupId: i, - selected: i === selected }; - }); -} - -function bindEvents(page, offset, options) { - $('.emoji-page a').click(e => { - const title = $(e.currentTarget).attr('title'); - trackEmojiUsage(title); - options.onSelect(title); - closeSelector(); - return false; - }).hover(e => { - const title = $(e.currentTarget).attr('title'); - const html = " :" + title + ":"; - $('.emoji-modal .info').html(html); - }, () => $('.emoji-modal .info').html("")); - - $('.emoji-modal .nav .next a').click(() => render(page, offset+PER_PAGE, options)); - $('.emoji-modal .nav .prev a').click(() => render(page, offset-PER_PAGE, options)); - - $('.emoji-modal .toolbar a').click(function(){ - const p = parseInt($(this).data('group-id')); - render(p, 0, options); - return false; - }); - - $('.emoji-modal .tones-button').click(function(){ - selectedSkinTone = parseInt($(this).data('skin-tone')); - keyValueStore.setObject({key: 'selectedSkinTone', value: selectedSkinTone}); - render(page, offset, options); - return false; - }); -} - -function render(page, offset, options) { - keyValueStore.set({key: "emojiPage", value: page}); - keyValueStore.set({key: "emojiOffset", value: offset}); - - const toolbarItems = toolbar(page); - const rows = []; - let row = []; - const icons = groups[page].icons; - const max = offset + PER_PAGE; - - for(let i=offset; i icons.length, - modalClass: options.modalClass - }; - - $('.emoji-modal', options.appendTo).remove(); - const template = findRawTemplate('emoji-toolbar'); - options.appendTo.append(template(model)); - - bindEvents(page, offset, options); -} - -function showSelector(options) { - options = options || {}; - options.appendTo = options.appendTo || $('body'); - - options.appendTo.append('
'); - $('.emoji-modal-wrapper').click(() => closeSelector()); - - if (Discourse.Site.currentProp('mobileView')) { PER_ROW = 9; } - const page = options.page ? _.findIndex(groups, (g) => { return g.name === options.page; }) - : keyValueStore.getInt("emojiPage", 0); - const offset = keyValueStore.getInt("emojiOffset", 0); - - render(page, offset, options); - - $('body, textarea').on('keydown.emoji', e => { - if (e.which === 27) { - closeSelector(); - return false; - } - }); -} - -export { showSelector }; diff --git a/app/assets/javascripts/discourse/templates/components/d-editor.hbs b/app/assets/javascripts/discourse/templates/components/d-editor.hbs index 78d00be8745..961b63c6efd 100644 --- a/app/assets/javascripts/discourse/templates/components/d-editor.hbs +++ b/app/assets/javascripts/discourse/templates/components/d-editor.hbs @@ -33,3 +33,5 @@ {{plugin-outlet name="editor-preview"}} + +{{emoji-picker active=emojiPickerIsActive emojiSelected=(action 'emojiSelected')}} diff --git a/app/assets/javascripts/discourse/templates/components/emoji-picker.hbs b/app/assets/javascripts/discourse/templates/components/emoji-picker.hbs new file mode 100644 index 00000000000..a5a525b4f12 --- /dev/null +++ b/app/assets/javascripts/discourse/templates/components/emoji-picker.hbs @@ -0,0 +1,2 @@ +
+
diff --git a/app/assets/javascripts/discourse/templates/emoji-picker-recent.raw.hbs b/app/assets/javascripts/discourse/templates/emoji-picker-recent.raw.hbs new file mode 100644 index 00000000000..4f309612fbe --- /dev/null +++ b/app/assets/javascripts/discourse/templates/emoji-picker-recent.raw.hbs @@ -0,0 +1,5 @@ +{{#each recentEmojis as |emoji|}} + + + +{{/each}} diff --git a/app/assets/javascripts/discourse/templates/emoji-picker.raw.hbs.erb b/app/assets/javascripts/discourse/templates/emoji-picker.raw.hbs.erb new file mode 100644 index 00000000000..990f94b4762 --- /dev/null +++ b/app/assets/javascripts/discourse/templates/emoji-picker.raw.hbs.erb @@ -0,0 +1,88 @@ +
+
+ + + +
+ + <% JSON.parse(File.read("lib/emoji/groups.json")).each.with_index do |group, group_index| %> +
+ + + +
+ <% end %> + + <% if !Emoji.custom.blank? %> +
+ + + +
+ <% end %> +
+ +
+
+ + +
+ +
+ +
+
+
+ {{i18n 'emoji_picker.recent'}} + {{fa-icon 'trash'}} +
+
+
+ + <% JSON.parse(File.read("lib/emoji/groups.json")).each.with_index do |group, group_index| %> +
+
+ {{i18n 'emoji_picker.<%= group["name"] %>'}} +
+ +
+ <% end %> + + {{#if customEmojis.length}} +
+
+ {{i18n 'emoji_picker.custom'}} +
+
+ {{#each customEmojis as |emoji|}} + + + + {{/each}} +
+
+ {{/if}} +
+ +
diff --git a/app/assets/javascripts/discourse/templates/emoji-toolbar.raw.hbs b/app/assets/javascripts/discourse/templates/emoji-toolbar.raw.hbs deleted file mode 100644 index fb684b57d67..00000000000 --- a/app/assets/javascripts/discourse/templates/emoji-toolbar.raw.hbs +++ /dev/null @@ -1,45 +0,0 @@ -
-
    - {{#each toolbarItems as |item|}}
  • {{/each}} -
-
- - {{#each rows as |row|}} - - {{#each row as |item|}} - - {{/each}} - - {{/each}} -
-
- - - -
-
diff --git a/app/assets/javascripts/pretty-text/emoji.js.es6 b/app/assets/javascripts/pretty-text/emoji.js.es6.erb similarity index 90% rename from app/assets/javascripts/pretty-text/emoji.js.es6 rename to app/assets/javascripts/pretty-text/emoji.js.es6.erb index 2946f35109b..136c2904261 100644 --- a/app/assets/javascripts/pretty-text/emoji.js.es6 +++ b/app/assets/javascripts/pretty-text/emoji.js.es6.erb @@ -1,7 +1,7 @@ import { emojis, aliases, translations, tonableEmojis } from 'pretty-text/emoji/data'; // bump up this number to expire all emojis -export const IMAGE_VERSION = "5"; +export const IMAGE_VERSION = "<%= Emoji::EMOJI_VERSION %>"; const extendedEmoji = {}; @@ -10,10 +10,8 @@ export function registerEmoji(code, url) { extendedEmoji[code] = url; } -export function emojiList() { - const result = emojis.slice(0); - _.each(extendedEmoji, (v,k) => result.push(k)); - return result; +export function extendedEmojiList() { + return extendedEmoji; } const emojiHash = {}; @@ -54,8 +52,7 @@ export function isCustomEmoji(code, opts) { export function buildEmojiUrl(code, opts) { let url; - code = code.toLowerCase(); - + code = String(code).toLowerCase(); if (extendedEmoji.hasOwnProperty(code)) { url = extendedEmoji[code]; } @@ -116,10 +113,9 @@ export function emojiSearch(term, options) { }; export function isSkinTonableEmoji(term) { - let match = term.match(/^:?(.*?):?$/); + const match = _.compact(term.split(":"))[0]; if (match) { - return tonableEmojis.indexOf(match[1]) !== -1; - } else { - return tonableEmojis.indexOf(term) !== -1; + return tonableEmojis.indexOf(match) !== -1; } + return false; } diff --git a/app/assets/stylesheets/common/base/emoji.scss b/app/assets/stylesheets/common/base/emoji.scss index 10b1a6812b4..f3b93889c39 100644 --- a/app/assets/stylesheets/common/base/emoji.scss +++ b/app/assets/stylesheets/common/base/emoji.scss @@ -1,128 +1,115 @@ -body img.emoji { - width: 20px; - height: 20px; - vertical-align: middle; -} - -.wmd-emoji-button:before { - content: "\f118"; -} - -.emoji-modal { +.emoji-picker { + background-color: #fff; + border: 1px solid #e9e9e9; + box-shadow: 0 1px 5px rgba(0,0,0,0.4); + background-clip: padding-box; z-index: 10000; position: fixed; - left: 50%; - top: 50%; - width: 445px; - min-height: 264px; - margin-top: -132px; - margin-left: -222px; background-color: dark-light-choose(#dadada, blend-primary-secondary(5%)); display: flex; + flex-direction: row; + height: 300px; + border-radius: 3px; +} + +.emoji-picker .categories-column { + display: flex; + flex-direction: column; + background: white; + flex: 1; + align-items: center; + justify-content: space-between; + border-right: 1px solid #e9e9e9; + min-width: 36px; +} + +.emoji-picker .category-icon { + display: block; + margin: 4px auto; + -webkit-filter: grayscale(100%); + filter: grayscale(100%); +} + +.emoji-picker .category-icon.current, .emoji-picker .category-icon:hover { + -webkit-filter: grayscale(0%); + filter: grayscale(0%); +} + +.emoji-picker .main-column { + display: flex; + flex-direction: column; + background: white; + flex: 20; +} + +.emoji-picker .list { + overflow-y: scroll; + -webkit-overflow-scrolling: touch; + padding: 0px; + flex: 1; flex-direction: column; } -table.emoji-page td { - border: 1px solid transparent; - background-color: dark-light-choose(white, $secondary); - padding: 0 !important; +.emoji-picker .list .emoji { + margin: 5px; } -.emoji-page a { +.emoji-picker .section-header { padding: 8px; - display: block; - border-radius: 20px; + margin-bottom: 4px; + padding-bottom: 4px; + border-bottom: 1px solid #e9e9e9; + justify-content: space-between; + display: flex; + align-items: center; } -.emoji-page a:hover { - background-color: dark-light-choose(rgb(210, 236, 252), rgb(45, 19, 3)); +.emoji-picker .section-header .title { } -.emoji-table-wrapper { - min-width: 442px; - min-height: 185px; - background-color: $secondary; +.emoji-picker .section-header .clear-recent .fa{ + margin: 0; } -.emoji-modal-wrapper { - z-index: 9999; - position: fixed; - left: 0; - top: 0; - width: 100%; - height: 100%; - opacity: dark-light-choose(0.8, 0.5); - background-color: black; +.section-group { + flex-wrap: wrap; + display: flex; + align-items: center; + justify-content: flex-start; + padding: 4px; } -.emoji-modal .toolbar { - margin: 8px 0 5px; -} - -.emoji-modal .toolbar li { - display: inline; - padding-right: 1px; -} - -.emoji-modal .toolbar li a { - padding: 8px; - background-color: dark-light-choose(#dadada, blend-primary-secondary(5%)); -} - -.emoji-modal .toolbar li a.selected { - background-color: $secondary; -} - -.emoji-modal .nav span { - color: dark-light-choose(#aaa, #555); -} - -.emoji-modal .nav span.next { - margin-left: 10px; -} - -.emoji-modal .nav a { - color: dark-light-choose(#333, #ccc); -} - -.emoji-shortname { +.section-group a:hover, .results a:hover { display: inline-block; - max-width: 200px; - text-overflow: ellipsis; - overflow: hidden; - vertical-align: middle; + vertical-align: top; + border-radius: 50%; + background-color: #d1f0ff; } -.emoji-modal .footer { - display: flex; +.emoji-picker .footer { align-items: center; + display: flex; justify-content: space-between; - flex-direction: row; - flex-grow: 2; + border-top: 1px solid #e9e9e9; +} + +.emoji-picker .info { + text-overflow: ellipsis; + max-width: 232px; + padding-left: 8px; + white-space: nowrap; + overflow: hidden; + font-weight: 700; + max-width: 125px; +} + +.emoji-picker .diversity-picker { + display: flex; + justify-content: flex-end; padding: 8px; } -.emoji-modal .info { - flex: 10; -} - -.emoji-modal .info span { - margin-left: 5px; - font-weight: bold; - color: $primary; -} - -.emoji-modal .nav { - margin-left: 10px; -} - -.emoji-modal .tones { - display: flex; - align-items: center; - justify-content: space-between; -} - -.emoji-modal .tones-button { +.emoji-picker .diversity-picker .diversity-scale { width: 20px; height: 20px; margin-left: 5px; @@ -133,14 +120,88 @@ table.emoji-page td { justify-content: center; cursor: pointer; } -.emoji-modal .tones-button.default { background: #ffcc4d; } -.emoji-modal .tones-button.light { background: #f7dece; } -.emoji-modal .tones-button.medium-light { background: #f3d2a2; } -.emoji-modal .tones-button.medium { background: #d5ab88; } -.emoji-modal .tones-button.medium-dark { background: #af7e57; } -.emoji-modal .tones-button.dark { background: #7c533e; } +.emoji-picker .diversity-picker .diversity-scale.default { background: #ffcc4d; } +.emoji-picker .diversity-picker .diversity-scale.light { background: #f7dece; } +.emoji-picker .diversity-picker .diversity-scale.medium-light { background: #f3d2a2; } +.emoji-picker .diversity-picker .diversity-scale.medium { background: #d5ab88; } +.emoji-picker .diversity-picker .diversity-scale.medium-dark { background: #af7e57; } +.emoji-picker .diversity-picker .diversity-scale.dark { background: #7c533e; } -.emoji-modal .tones-button i.fa { +.emoji-picker .diversity-picker .diversity-scale.selected i { + display: block; +} + +.emoji-picker .diversity-picker i { + display: none; +} + +.emoji-picker .diversity-picker i.fa { color: #fff; + font-size: 12px; text-shadow: 0.5px 1.5px 0 rgba(0,0,0,0.3); } + +body img.emoji { + width: 20px; + height: 20px; + vertical-align: middle; +} + +.wmd-emoji-button:before { + content: "\f118"; +} + +.emoji-picker-modal.fadeIn { + z-index: 9999; + position: fixed; + left: 0; + top: 0; + width: 100%; + height: 100%; + opacity: .8; + background-color: black; +} + +.emoji-picker .filter { + background-color: #e9e9e9; + border-bottom: 1px solid #e9e9e9; + padding: 5px; + display: flex; + position: relative; +} + +.emoji-picker .filter input { + height: 24px; + margin: 0; + flex: 1; + border: 1px solid #e9e9e9; + padding-right: 24px; +} + +.emoji-picker .results { + display: none; + flex-wrap: wrap; + align-items: center; + justify-content: flex-start; + padding: 4px; + flex: 1; +} + +.emoji-picker .results .emoji { + margin: 5px; +} + +.emoji-picker .filter .clear-filter { + position: absolute; + right: 10px; + top: 12px; + border: 0; + background: none; + color: $primary; + outline: none; + display: none; + + &:hover { + color: $tertiary; + } +} diff --git a/app/assets/stylesheets/mobile/emoji.scss b/app/assets/stylesheets/mobile/emoji.scss deleted file mode 100644 index 6d944937561..00000000000 --- a/app/assets/stylesheets/mobile/emoji.scss +++ /dev/null @@ -1,10 +0,0 @@ -.emoji-table-wrapper { - min-width: 320px; -} - -.emoji-modal { - width: 340px; - margin-top: -132px; - margin-left: -170px; - background-color: dark-light-choose(#dadada, blend-primary-secondary(5%)); -} diff --git a/app/models/emoji.rb b/app/models/emoji.rb index 0e81f2aa0fc..42bc93f83ae 100644 --- a/app/models/emoji.rb +++ b/app/models/emoji.rb @@ -1,6 +1,6 @@ class Emoji # update this to clear the cache - EMOJI_VERSION = "v5" + EMOJI_VERSION = "5" FITZPATRICK_SCALE ||= [ "1f3fb", "1f3fc", "1f3fd", "1f3fe", "1f3ff" ] @@ -46,15 +46,19 @@ class Emoji def self.create_from_db_item(emoji) name = emoji["name"] - filename = "#{emoji['filename'] || name}.png" + filename = emoji['filename'] || name Emoji.new.tap do |e| e.name = name - e.url = "#{Discourse.base_uri}/images/emoji/#{SiteSetting.emoji_set}/#{filename}" + e.url = Emoji.url_for(filename) end end + def self.url_for(name) + "#{Discourse.base_uri}/images/emoji/#{SiteSetting.emoji_set}/#{name}.png?v=5" + end + def self.cache_key(name) - "#{name}:#{EMOJI_VERSION}:#{Plugin::CustomEmoji.cache_key}" + "#{name}:v#{EMOJI_VERSION}:#{Plugin::CustomEmoji.cache_key}" end def self.clear_cache diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index 6c80ba69c20..baf9d14f6df 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -1134,6 +1134,18 @@ en: ctrl: 'Ctrl' alt: 'Alt' + emoji_picker: + filter_placeholder: Search an emoji + people: People + nature: Nature + food: Food + activity: Activity + travel: Travel + objects: Objects + celebration: Celebration + custom: Custom emojis + recent: Recently used emojis + composer: emoji: "Emoji :)" more_emoji: "more..." diff --git a/lib/emoji/groups.json b/lib/emoji/groups.json new file mode 100644 index 00000000000..7d1e3a0a56e --- /dev/null +++ b/lib/emoji/groups.json @@ -0,0 +1,6047 @@ +[ + { + "name": "people", + "fullname": "People", + "tabicon": "grinning", + "icons": [ + { + "name": "grinning", + "diversity": false + }, + { + "name": "grin", + "diversity": false + }, + { + "name": "joy", + "diversity": false + }, + { + "name": "rofl", + "diversity": false + }, + { + "name": "smiley", + "diversity": false + }, + { + "name": "smile", + "diversity": false + }, + { + "name": "sweat_smile", + "diversity": false + }, + { + "name": "laughing", + "diversity": false + }, + { + "name": "wink", + "diversity": false + }, + { + "name": "blush", + "diversity": false + }, + { + "name": "yum", + "diversity": false + }, + { + "name": "sunglasses", + "diversity": false + }, + { + "name": "heart_eyes", + "diversity": false + }, + { + "name": "kissing_heart", + "diversity": false + }, + { + "name": "kissing", + "diversity": false + }, + { + "name": "kissing_smiling_eyes", + "diversity": false + }, + { + "name": "kissing_closed_eyes", + "diversity": false + }, + { + "name": "relaxed", + "diversity": false + }, + { + "name": "slightly_smiling_face", + "diversity": false + }, + { + "name": "hugs", + "diversity": false + }, + { + "name": "star_struck", + "diversity": false + }, + { + "name": "thinking", + "diversity": false + }, + { + "name": "face_with_raised_eyebrow", + "diversity": false + }, + { + "name": "neutral_face", + "diversity": false + }, + { + "name": "expressionless", + "diversity": false + }, + { + "name": "no_mouth", + "diversity": false + }, + { + "name": "roll_eyes", + "diversity": false + }, + { + "name": "smirk", + "diversity": false + }, + { + "name": "persevere", + "diversity": false + }, + { + "name": "disappointed_relieved", + "diversity": false + }, + { + "name": "open_mouth", + "diversity": false + }, + { + "name": "zipper_mouth_face", + "diversity": false + }, + { + "name": "hushed", + "diversity": false + }, + { + "name": "sleepy", + "diversity": false + }, + { + "name": "tired_face", + "diversity": false + }, + { + "name": "sleeping", + "diversity": false + }, + { + "name": "relieved", + "diversity": false + }, + { + "name": "stuck_out_tongue", + "diversity": false + }, + { + "name": "stuck_out_tongue_winking_eye", + "diversity": false + }, + { + "name": "stuck_out_tongue_closed_eyes", + "diversity": false + }, + { + "name": "drooling_face", + "diversity": false + }, + { + "name": "unamused", + "diversity": false + }, + { + "name": "sweat", + "diversity": false + }, + { + "name": "pensive", + "diversity": false + }, + { + "name": "confused", + "diversity": false + }, + { + "name": "upside_down_face", + "diversity": false + }, + { + "name": "money_mouth_face", + "diversity": false + }, + { + "name": "astonished", + "diversity": false + }, + { + "name": "frowning_face", + "diversity": false + }, + { + "name": "slightly_frowning_face", + "diversity": false + }, + { + "name": "confounded", + "diversity": false + }, + { + "name": "disappointed", + "diversity": false + }, + { + "name": "worried", + "diversity": false + }, + { + "name": "triumph", + "diversity": false + }, + { + "name": "cry", + "diversity": false + }, + { + "name": "sob", + "diversity": false + }, + { + "name": "frowning", + "diversity": false + }, + { + "name": "anguished", + "diversity": false + }, + { + "name": "fearful", + "diversity": false + }, + { + "name": "weary", + "diversity": false + }, + { + "name": "exploding_head", + "diversity": false + }, + { + "name": "grimacing", + "diversity": false + }, + { + "name": "cold_sweat", + "diversity": false + }, + { + "name": "scream", + "diversity": false + }, + { + "name": "flushed", + "diversity": false + }, + { + "name": "crazy_face", + "diversity": false + }, + { + "name": "dizzy_face", + "diversity": false + }, + { + "name": "rage", + "diversity": false + }, + { + "name": "angry", + "diversity": false + }, + { + "name": "face_with_symbols_over_mouth", + "diversity": false + }, + { + "name": "mask", + "diversity": false + }, + { + "name": "face_with_thermometer", + "diversity": false + }, + { + "name": "face_with_head_bandage", + "diversity": false + }, + { + "name": "nauseated_face", + "diversity": false + }, + { + "name": "face_vomiting", + "diversity": false + }, + { + "name": "sneezing_face", + "diversity": false + }, + { + "name": "innocent", + "diversity": false + }, + { + "name": "cowboy_hat_face", + "diversity": false + }, + { + "name": "clown_face", + "diversity": false + }, + { + "name": "lying_face", + "diversity": false + }, + { + "name": "sushing_face", + "diversity": false + }, + { + "name": "face_with_hand_over_mouth", + "diversity": false + }, + { + "name": "face_with_monocle", + "diversity": false + }, + { + "name": "nerd_face", + "diversity": false + }, + { + "name": "smiling_imp", + "diversity": false + }, + { + "name": "imp", + "diversity": false + }, + { + "name": "japanese_ogre", + "diversity": false + }, + { + "name": "japanese_goblin", + "diversity": false + }, + { + "name": "skull", + "diversity": false + }, + { + "name": "skull_and_crossbones", + "diversity": false + }, + { + "name": "ghost", + "diversity": false + }, + { + "name": "alien", + "diversity": false + }, + { + "name": "space_invader", + "diversity": false + }, + { + "name": "robot", + "diversity": false + }, + { + "name": "poop", + "diversity": false + }, + { + "name": "smiley_cat", + "diversity": false + }, + { + "name": "smile_cat", + "diversity": false + }, + { + "name": "joy_cat", + "diversity": false + }, + { + "name": "heart_eyes_cat", + "diversity": false + }, + { + "name": "smirk_cat", + "diversity": false + }, + { + "name": "kissing_cat", + "diversity": false + }, + { + "name": "scream_cat", + "diversity": false + }, + { + "name": "crying_cat_face", + "diversity": false + }, + { + "name": "pouting_cat", + "diversity": false + }, + { + "name": "see_no_evil", + "diversity": false + }, + { + "name": "hear_no_evil", + "diversity": false + }, + { + "name": "speak_no_evil", + "diversity": false + }, + { + "name": "baby", + "diversity": true + }, + { + "name": "child", + "diversity": false + }, + { + "name": "boy", + "diversity": true + }, + { + "name": "girl", + "diversity": true + }, + { + "name": "adult", + "diversity": false + }, + { + "name": "man", + "diversity": true + }, + { + "name": "woman", + "diversity": true + }, + { + "name": "older_adult", + "diversity": false + }, + { + "name": "older_man", + "diversity": true + }, + { + "name": "older_woman", + "diversity": true + }, + { + "name": "man_health_worker", + "diversity": true + }, + { + "name": "woman_health_worker", + "diversity": true + }, + { + "name": "man_student", + "diversity": true + }, + { + "name": "woman_student", + "diversity": true + }, + { + "name": "man_teacher", + "diversity": true + }, + { + "name": "woman_teacher", + "diversity": true + }, + { + "name": "man_judge", + "diversity": true + }, + { + "name": "woman_judge", + "diversity": true + }, + { + "name": "man_farmer", + "diversity": true + }, + { + "name": "woman_farmer", + "diversity": true + }, + { + "name": "man_cook", + "diversity": true + }, + { + "name": "woman_cook", + "diversity": true + }, + { + "name": "man_mechanic", + "diversity": true + }, + { + "name": "woman_mechanic", + "diversity": true + }, + { + "name": "man_factory_worker", + "diversity": true + }, + { + "name": "woman_factory_worker", + "diversity": true + }, + { + "name": "man_office_worker", + "diversity": true + }, + { + "name": "woman_office_worker", + "diversity": true + }, + { + "name": "man_scientist", + "diversity": true + }, + { + "name": "woman_scientist", + "diversity": true + }, + { + "name": "man_technologist", + "diversity": true + }, + { + "name": "woman_technologist", + "diversity": true + }, + { + "name": "man_singer", + "diversity": true + }, + { + "name": "woman_singer", + "diversity": true + }, + { + "name": "man_artist", + "diversity": true + }, + { + "name": "woman_artist", + "diversity": true + }, + { + "name": "man_pilot", + "diversity": true + }, + { + "name": "woman_pilot", + "diversity": true + }, + { + "name": "man_astronaut", + "diversity": true + }, + { + "name": "woman_astronaut", + "diversity": true + }, + { + "name": "man_firefighter", + "diversity": true + }, + { + "name": "woman_firefighter", + "diversity": true + }, + { + "name": "policeman", + "diversity": true + }, + { + "name": "policewoman", + "diversity": true + }, + { + "name": "male_detective", + "diversity": true + }, + { + "name": "female_detective", + "diversity": false + }, + { + "name": "guardsman", + "diversity": true + }, + { + "name": "guardswoman", + "diversity": true + }, + { + "name": "construction_worker_man", + "diversity": true + }, + { + "name": "construction_worker_woman", + "diversity": true + }, + { + "name": "prince", + "diversity": true + }, + { + "name": "princess", + "diversity": true + }, + { + "name": "man_with_turban", + "diversity": true + }, + { + "name": "woman_with_turban", + "diversity": true + }, + { + "name": "man_with_gua_pi_mao", + "diversity": true + }, + { + "name": "woman_with_headscarf", + "diversity": false + }, + { + "name": "bearded_person", + "diversity": false + }, + { + "name": "blonde_man", + "diversity": true + }, + { + "name": "blonde_woman", + "diversity": true + }, + { + "name": "man_in_tuxedo", + "diversity": true + }, + { + "name": "bride_with_veil", + "diversity": true + }, + { + "name": "pregnant_woman", + "diversity": true + }, + { + "name": "breast_feeding", + "diversity": false + }, + { + "name": "angel", + "diversity": true + }, + { + "name": "santa", + "diversity": true + }, + { + "name": "mrs_claus", + "diversity": true + }, + { + "name": "mage", + "diversity": false + }, + { + "name": "fairy", + "diversity": false + }, + { + "name": "vampire", + "diversity": false + }, + { + "name": "merperson", + "diversity": false + }, + { + "name": "elf", + "diversity": false + }, + { + "name": "genie", + "diversity": false + }, + { + "name": "zombie", + "diversity": false + }, + { + "name": "frowning_woman", + "diversity": true + }, + { + "name": "frowning_man", + "diversity": true + }, + { + "name": "pouting_woman", + "diversity": true + }, + { + "name": "pouting_man", + "diversity": true + }, + { + "name": "no_good_woman", + "diversity": true + }, + { + "name": "no_good_man", + "diversity": true + }, + { + "name": "ok_woman", + "diversity": true + }, + { + "name": "ok_man", + "diversity": true + }, + { + "name": "tipping_hand_woman", + "diversity": true + }, + { + "name": "tipping_hand_man", + "diversity": true + }, + { + "name": "raising_hand_woman", + "diversity": true + }, + { + "name": "raising_hand_man", + "diversity": true + }, + { + "name": "bowing_man", + "diversity": true + }, + { + "name": "bowing_woman", + "diversity": true + }, + { + "name": "man_facepalming", + "diversity": true + }, + { + "name": "woman_facepalming", + "diversity": true + }, + { + "name": "man_shrugging", + "diversity": true + }, + { + "name": "woman_shrugging", + "diversity": true + }, + { + "name": "couple", + "diversity": false + }, + { + "name": "two_men_holding_hands", + "diversity": false + }, + { + "name": "two_women_holding_hands", + "diversity": false + }, + { + "name": "couplekiss_man_woman", + "diversity": false + }, + { + "name": "couplekiss_man_man", + "diversity": false + }, + { + "name": "couplekiss_woman_woman", + "diversity": false + }, + { + "name": "couple_with_heart_woman_man", + "diversity": false + }, + { + "name": "couple_with_heart_man_man", + "diversity": false + }, + { + "name": "couple_with_heart_woman_woman", + "diversity": false + }, + { + "name": "family_man_woman_boy", + "diversity": false + }, + { + "name": "family_man_woman_girl", + "diversity": false + }, + { + "name": "family_man_woman_girl_boy", + "diversity": false + }, + { + "name": "family_man_woman_boy_boy", + "diversity": false + }, + { + "name": "family_man_woman_girl_girl", + "diversity": false + }, + { + "name": "family_man_man_boy", + "diversity": false + }, + { + "name": "family_man_man_girl", + "diversity": false + }, + { + "name": "family_man_man_girl_boy", + "diversity": false + }, + { + "name": "family_man_man_boy_boy", + "diversity": false + }, + { + "name": "family_man_man_girl_girl", + "diversity": false + }, + { + "name": "family_woman_woman_boy", + "diversity": false + }, + { + "name": "family_woman_woman_girl", + "diversity": false + }, + { + "name": "family_woman_woman_girl_boy", + "diversity": false + }, + { + "name": "family_woman_woman_boy_boy", + "diversity": false + }, + { + "name": "family_woman_woman_girl_girl", + "diversity": false + }, + { + "name": "family_man_boy", + "diversity": false + }, + { + "name": "family_man_boy_boy", + "diversity": false + }, + { + "name": "family_man_girl", + "diversity": false + }, + { + "name": "family_man_girl_boy", + "diversity": false + }, + { + "name": "family_man_girl_girl", + "diversity": false + }, + { + "name": "family_woman_boy", + "diversity": false + }, + { + "name": "family_woman_boy_boy", + "diversity": false + }, + { + "name": "family_woman_girl", + "diversity": false + }, + { + "name": "family_woman_girl_boy", + "diversity": false + }, + { + "name": "family_woman_girl_girl", + "diversity": false + }, + { + "name": "selfie", + "diversity": true + }, + { + "name": "muscle", + "diversity": true + }, + { + "name": "point_left", + "diversity": true + }, + { + "name": "point_right", + "diversity": true + }, + { + "name": "point_up", + "diversity": true + }, + { + "name": "point_up_2", + "diversity": true + }, + { + "name": "fu", + "diversity": true + }, + { + "name": "point_down", + "diversity": true + }, + { + "name": "v", + "diversity": true + }, + { + "name": "crossed_fingers", + "diversity": true + }, + { + "name": "vulcan_salute", + "diversity": true + }, + { + "name": "metal", + "diversity": true + }, + { + "name": "call_me_hand", + "diversity": true + }, + { + "name": "raised_hand_with_fingers_splayed", + "diversity": true + }, + { + "name": "raised_hand", + "diversity": true + }, + { + "name": "ok_hand", + "diversity": true + }, + { + "name": "+1", + "diversity": true + }, + { + "name": "-1", + "diversity": true + }, + { + "name": "fist", + "diversity": true + }, + { + "name": "facepunch", + "diversity": true + }, + { + "name": "fist_left", + "diversity": true + }, + { + "name": "fist_right", + "diversity": true + }, + { + "name": "raised_back_of_hand", + "diversity": true + }, + { + "name": "wave", + "diversity": true + }, + { + "name": "love_you_gesture", + "diversity": false + }, + { + "name": "writing_hand", + "diversity": true + }, + { + "name": "clap", + "diversity": true + }, + { + "name": "open_hands", + "diversity": true + }, + { + "name": "raised_hands", + "diversity": true + }, + { + "name": "palms_up_together", + "diversity": false + }, + { + "name": "pray", + "diversity": true + }, + { + "name": "handshake", + "diversity": false + }, + { + "name": "nail_care", + "diversity": true + }, + { + "name": "ear", + "diversity": true + }, + { + "name": "nose", + "diversity": true + }, + { + "name": "footprints", + "diversity": false + }, + { + "name": "eyes", + "diversity": false + }, + { + "name": "eye", + "diversity": false + }, + { + "name": "brain", + "diversity": false + }, + { + "name": "tongue", + "diversity": false + }, + { + "name": "lips", + "diversity": false + } + ] + }, + { + "name": "nature", + "fullname": "Nature", + "tabicon": "evergreen_tree", + "icons": [ + { + "name": "monkey_face", + "diversity": false + }, + { + "name": "monkey", + "diversity": false + }, + { + "name": "gorilla", + "diversity": false + }, + { + "name": "dog", + "diversity": false + }, + { + "name": "dog2", + "diversity": false + }, + { + "name": "poodle", + "diversity": false + }, + { + "name": "wolf", + "diversity": false + }, + { + "name": "fox_face", + "diversity": false + }, + { + "name": "cat", + "diversity": false + }, + { + "name": "cat2", + "diversity": false + }, + { + "name": "lion", + "diversity": false + }, + { + "name": "tiger", + "diversity": false + }, + { + "name": "tiger2", + "diversity": false + }, + { + "name": "leopard", + "diversity": false + }, + { + "name": "horse", + "diversity": false + }, + { + "name": "racehorse", + "diversity": false + }, + { + "name": "unicorn", + "diversity": false + }, + { + "name": "zebra", + "diversity": false + }, + { + "name": "deer", + "diversity": false + }, + { + "name": "cow", + "diversity": false + }, + { + "name": "ox", + "diversity": false + }, + { + "name": "water_buffalo", + "diversity": false + }, + { + "name": "cow2", + "diversity": false + }, + { + "name": "pig", + "diversity": false + }, + { + "name": "pig2", + "diversity": false + }, + { + "name": "boar", + "diversity": false + }, + { + "name": "pig_nose", + "diversity": false + }, + { + "name": "ram", + "diversity": false + }, + { + "name": "sheep", + "diversity": false + }, + { + "name": "goat", + "diversity": false + }, + { + "name": "dromedary_camel", + "diversity": false + }, + { + "name": "camel", + "diversity": false + }, + { + "name": "giraffe", + "diversity": false + }, + { + "name": "elephant", + "diversity": false + }, + { + "name": "rhinoceros", + "diversity": false + }, + { + "name": "mouse", + "diversity": false + }, + { + "name": "mouse2", + "diversity": false + }, + { + "name": "rat", + "diversity": false + }, + { + "name": "hamster", + "diversity": false + }, + { + "name": "rabbit", + "diversity": false + }, + { + "name": "rabbit2", + "diversity": false + }, + { + "name": "chipmunk", + "diversity": false + }, + { + "name": "hedgehog", + "diversity": false + }, + { + "name": "bat", + "diversity": false + }, + { + "name": "bear", + "diversity": false + }, + { + "name": "koala", + "diversity": false + }, + { + "name": "panda_face", + "diversity": false + }, + { + "name": "paw_prints", + "diversity": false + }, + { + "name": "turkey", + "diversity": false + }, + { + "name": "chicken", + "diversity": false + }, + { + "name": "rooster", + "diversity": false + }, + { + "name": "hatching_chick", + "diversity": false + }, + { + "name": "baby_chick", + "diversity": false + }, + { + "name": "hatched_chick", + "diversity": false + }, + { + "name": "bird", + "diversity": false + }, + { + "name": "penguin", + "diversity": false + }, + { + "name": "dove", + "diversity": false + }, + { + "name": "eagle", + "diversity": false + }, + { + "name": "duck", + "diversity": false + }, + { + "name": "owl", + "diversity": false + }, + { + "name": "frog", + "diversity": false + }, + { + "name": "crocodile", + "diversity": false + }, + { + "name": "turtle", + "diversity": false + }, + { + "name": "lizard", + "diversity": false + }, + { + "name": "snake", + "diversity": false + }, + { + "name": "dragon_face", + "diversity": false + }, + { + "name": "dragon", + "diversity": false + }, + { + "name": "sauropod", + "diversity": false + }, + { + "name": "t_rex", + "diversity": false + }, + { + "name": "whale", + "diversity": false + }, + { + "name": "whale2", + "diversity": false + }, + { + "name": "dolphin", + "diversity": false + }, + { + "name": "fish", + "diversity": false + }, + { + "name": "tropical_fish", + "diversity": false + }, + { + "name": "blowfish", + "diversity": false + }, + { + "name": "shark", + "diversity": false + }, + { + "name": "octopus", + "diversity": false + }, + { + "name": "shell", + "diversity": false + }, + { + "name": "crab", + "diversity": false + }, + { + "name": "shrimp", + "diversity": false + }, + { + "name": "squid", + "diversity": false + }, + { + "name": "snail", + "diversity": false + }, + { + "name": "butterfly", + "diversity": false + }, + { + "name": "bug", + "diversity": false + }, + { + "name": "ant", + "diversity": false + }, + { + "name": "honeybee", + "diversity": false + }, + { + "name": "beetle", + "diversity": false + }, + { + "name": "cricket", + "diversity": false + }, + { + "name": "spider", + "diversity": false + }, + { + "name": "spider_web", + "diversity": false + }, + { + "name": "scorpion", + "diversity": false + }, + { + "name": "bouquet", + "diversity": false + }, + { + "name": "cherry_blossom", + "diversity": false + }, + { + "name": "white_flower", + "diversity": false + }, + { + "name": "rosette", + "diversity": false + }, + { + "name": "rose", + "diversity": false + }, + { + "name": "wilted_flower", + "diversity": false + }, + { + "name": "hibiscus", + "diversity": false + }, + { + "name": "sunflower", + "diversity": false + }, + { + "name": "blossom", + "diversity": false + }, + { + "name": "tulip", + "diversity": false + }, + { + "name": "seedling", + "diversity": false + }, + { + "name": "evergreen_tree", + "diversity": false + }, + { + "name": "deciduous_tree", + "diversity": false + }, + { + "name": "palm_tree", + "diversity": false + }, + { + "name": "cactus", + "diversity": false + }, + { + "name": "ear_of_rice", + "diversity": false + }, + { + "name": "herb", + "diversity": false + }, + { + "name": "shamrock", + "diversity": false + }, + { + "name": "four_leaf_clover", + "diversity": false + }, + { + "name": "maple_leaf", + "diversity": false + }, + { + "name": "fallen_leaf", + "diversity": false + }, + { + "name": "leaves", + "diversity": false + }, + { + "name": "new_moon", + "diversity": false + }, + { + "name": "waxing_crescent_moon", + "diversity": false + }, + { + "name": "first_quarter_moon", + "diversity": false + }, + { + "name": "waxing_gibbous_moon", + "diversity": false + }, + { + "name": "full_moon", + "diversity": false + }, + { + "name": "waning_gibbous_moon", + "diversity": false + }, + { + "name": "last_quarter_moon", + "diversity": false + }, + { + "name": "waning_crescent_moon", + "diversity": false + }, + { + "name": "crescent_moon", + "diversity": false + }, + { + "name": "new_moon_with_face", + "diversity": false + }, + { + "name": "first_quarter_moon_with_face", + "diversity": false + }, + { + "name": "last_quarter_moon_with_face", + "diversity": false + }, + { + "name": "thermometer", + "diversity": false + }, + { + "name": "sunny", + "diversity": false + }, + { + "name": "full_moon_with_face", + "diversity": false + }, + { + "name": "sun_with_face", + "diversity": false + }, + { + "name": "star", + "diversity": false + }, + { + "name": "star2", + "diversity": false + }, + { + "name": "stars", + "diversity": false + }, + { + "name": "cloud", + "diversity": false + }, + { + "name": "partly_sunny", + "diversity": false + }, + { + "name": "cloud_with_lightning_and_rain", + "diversity": false + }, + { + "name": "sun_behind_small_cloud", + "diversity": false + }, + { + "name": "sun_behind_large_cloud", + "diversity": false + }, + { + "name": "sun_behind_rain_cloud", + "diversity": false + }, + { + "name": "cloud_with_rain", + "diversity": false + }, + { + "name": "cloud_with_snow", + "diversity": false + }, + { + "name": "cloud_with_lightning", + "diversity": false + }, + { + "name": "tornado", + "diversity": false + }, + { + "name": "fog", + "diversity": false + }, + { + "name": "wind_face", + "diversity": false + }, + { + "name": "cyclone", + "diversity": false + }, + { + "name": "rainbow", + "diversity": false + }, + { + "name": "closed_umbrella", + "diversity": false + }, + { + "name": "open_umbrella", + "diversity": false + }, + { + "name": "umbrella", + "diversity": false + }, + { + "name": "parasol_on_ground", + "diversity": false + }, + { + "name": "zap", + "diversity": false + }, + { + "name": "snowflake", + "diversity": false + }, + { + "name": "snowman_with_snow", + "diversity": false + }, + { + "name": "snowman", + "diversity": false + }, + { + "name": "comet", + "diversity": false + }, + { + "name": "fire", + "diversity": false + }, + { + "name": "droplet", + "diversity": false + }, + { + "name": "ocean", + "diversity": false + } + ] + }, + { + "name": "food", + "fullname": "Food & Drink", + "tabicon": "hamburger", + "icons": [ + { + "name": "grapes", + "diversity": false + }, + { + "name": "melon", + "diversity": false + }, + { + "name": "watermelon", + "diversity": false + }, + { + "name": "tangerine", + "diversity": false + }, + { + "name": "lemon", + "diversity": false + }, + { + "name": "banana", + "diversity": false + }, + { + "name": "pineapple", + "diversity": false + }, + { + "name": "apple", + "diversity": false + }, + { + "name": "green_apple", + "diversity": false + }, + { + "name": "pear", + "diversity": false + }, + { + "name": "peach", + "diversity": false + }, + { + "name": "cherries", + "diversity": false + }, + { + "name": "strawberry", + "diversity": false + }, + { + "name": "kiwi_fruit", + "diversity": false + }, + { + "name": "tomato", + "diversity": false + }, + { + "name": "coconut", + "diversity": false + }, + { + "name": "avocado", + "diversity": false + }, + { + "name": "eggplant", + "diversity": false + }, + { + "name": "potato", + "diversity": false + }, + { + "name": "carrot", + "diversity": false + }, + { + "name": "corn", + "diversity": false + }, + { + "name": "hot_pepper", + "diversity": false + }, + { + "name": "cucumber", + "diversity": false + }, + { + "name": "broccoli", + "diversity": false + }, + { + "name": "mushroom", + "diversity": false + }, + { + "name": "peanuts", + "diversity": false + }, + { + "name": "chestnut", + "diversity": false + }, + { + "name": "bread", + "diversity": false + }, + { + "name": "croissant", + "diversity": false + }, + { + "name": "baguette_bread", + "diversity": false + }, + { + "name": "pretzel", + "diversity": false + }, + { + "name": "pancakes", + "diversity": false + }, + { + "name": "cheese", + "diversity": false + }, + { + "name": "meat_on_bone", + "diversity": false + }, + { + "name": "poultry_leg", + "diversity": false + }, + { + "name": "cut_of_meat", + "diversity": false + }, + { + "name": "bacon", + "diversity": false + }, + { + "name": "hamburger", + "diversity": false + }, + { + "name": "fries", + "diversity": false + }, + { + "name": "pizza", + "diversity": false + }, + { + "name": "hotdog", + "diversity": false + }, + { + "name": "sandwich", + "diversity": false + }, + { + "name": "taco", + "diversity": false + }, + { + "name": "burrito", + "diversity": false + }, + { + "name": "stuffed_flatbread", + "diversity": false + }, + { + "name": "egg", + "diversity": false + }, + { + "name": "fried_egg", + "diversity": false + }, + { + "name": "shallow_pan_of_food", + "diversity": false + }, + { + "name": "stew", + "diversity": false + }, + { + "name": "bowl_with_spoon", + "diversity": false + }, + { + "name": "green_salad", + "diversity": false + }, + { + "name": "popcorn", + "diversity": false + }, + { + "name": "canned_food", + "diversity": false + }, + { + "name": "bento", + "diversity": false + }, + { + "name": "rice_cracker", + "diversity": false + }, + { + "name": "rice_ball", + "diversity": false + }, + { + "name": "rice", + "diversity": false + }, + { + "name": "curry", + "diversity": false + }, + { + "name": "ramen", + "diversity": false + }, + { + "name": "spaghetti", + "diversity": false + }, + { + "name": "sweet_potato", + "diversity": false + }, + { + "name": "oden", + "diversity": false + }, + { + "name": "sushi", + "diversity": false + }, + { + "name": "fried_shrimp", + "diversity": false + }, + { + "name": "fish_cake", + "diversity": false + }, + { + "name": "dango", + "diversity": false + }, + { + "name": "dumpling", + "diversity": false + }, + { + "name": "fortune_cookie", + "diversity": false + }, + { + "name": "takeout_box", + "diversity": false + }, + { + "name": "icecream", + "diversity": false + }, + { + "name": "shaved_ice", + "diversity": false + }, + { + "name": "ice_cream", + "diversity": false + }, + { + "name": "doughnut", + "diversity": false + }, + { + "name": "cookie", + "diversity": false + }, + { + "name": "birthday", + "diversity": false + }, + { + "name": "cake", + "diversity": false + }, + { + "name": "pie", + "diversity": false + }, + { + "name": "chocolate_bar", + "diversity": false + }, + { + "name": "candy", + "diversity": false + }, + { + "name": "lollipop", + "diversity": false + }, + { + "name": "custard", + "diversity": false + }, + { + "name": "honey_pot", + "diversity": false + }, + { + "name": "baby_bottle", + "diversity": false + }, + { + "name": "milk_glass", + "diversity": false + }, + { + "name": "coffee", + "diversity": false + }, + { + "name": "tea", + "diversity": false + }, + { + "name": "sake", + "diversity": false + }, + { + "name": "champagne", + "diversity": false + }, + { + "name": "wine_glass", + "diversity": false + }, + { + "name": "cocktail", + "diversity": false + }, + { + "name": "tropical_drink", + "diversity": false + }, + { + "name": "beer", + "diversity": false + }, + { + "name": "beers", + "diversity": false + }, + { + "name": "clinking_glasses", + "diversity": false + }, + { + "name": "tumbler_glass", + "diversity": false + }, + { + "name": "cup_with_straw", + "diversity": false + }, + { + "name": "chopsticks", + "diversity": false + }, + { + "name": "plate_with_cutlery", + "diversity": false + }, + { + "name": "fork_and_knife", + "diversity": false + }, + { + "name": "spoon", + "diversity": false + }, + { + "name": "hocho", + "diversity": false + }, + { + "name": "amphora", + "diversity": false + } + ] + }, + { + "name": "celebration", + "fullname": "Celebration", + "tabicon": "gift", + "icons": [ + { + "name": "jack_o_lantern", + "diversity": false + }, + { + "name": "christmas_tree", + "diversity": false + }, + { + "name": "fireworks", + "diversity": false + }, + { + "name": "sparkler", + "diversity": false + }, + { + "name": "sparkles", + "diversity": false + }, + { + "name": "balloon", + "diversity": false + }, + { + "name": "tada", + "diversity": false + }, + { + "name": "confetti_ball", + "diversity": false + }, + { + "name": "tanabata_tree", + "diversity": false + }, + { + "name": "bamboo", + "diversity": false + }, + { + "name": "dolls", + "diversity": false + }, + { + "name": "flags", + "diversity": false + }, + { + "name": "wind_chime", + "diversity": false + }, + { + "name": "rice_scene", + "diversity": false + }, + { + "name": "ribbon", + "diversity": false + }, + { + "name": "gift", + "diversity": false + }, + { + "name": "reminder_ribbon", + "diversity": false + }, + { + "name": "tickets", + "diversity": false + }, + { + "name": "ticket", + "diversity": false + }, + { + "name": "kiss", + "diversity": false + }, + { + "name": "cupid", + "diversity": false + }, + { + "name": "heart", + "diversity": false + }, + { + "name": "heartbeat", + "diversity": false + }, + { + "name": "broken_heart", + "diversity": false + }, + { + "name": "two_hearts", + "diversity": false + }, + { + "name": "sparkling_heart", + "diversity": false + }, + { + "name": "heartpulse", + "diversity": false + }, + { + "name": "blue_heart", + "diversity": false + }, + { + "name": "green_heart", + "diversity": false + }, + { + "name": "yellow_heart", + "diversity": false + }, + { + "name": "orange_heart", + "diversity": false + }, + { + "name": "purple_heart", + "diversity": false + }, + { + "name": "black_heart", + "diversity": false + }, + { + "name": "gift_heart", + "diversity": false + }, + { + "name": "revolving_hearts", + "diversity": false + }, + { + "name": "heart_decoration", + "diversity": false + }, + { + "name": "heavy_heart_exclamation", + "diversity": false + }, + { + "name": "love_letter", + "diversity": false + }, + { + "name": "zzz", + "diversity": false + }, + { + "name": "anger", + "diversity": false + }, + { + "name": "bomb", + "diversity": false + }, + { + "name": "boom", + "diversity": false + }, + { + "name": "sweat_drops", + "diversity": false + }, + { + "name": "dash", + "diversity": false + }, + { + "name": "dizzy", + "diversity": false + }, + { + "name": "speech_balloon", + "diversity": false + }, + { + "name": "left_speech_bubble", + "diversity": false + }, + { + "name": "right_anger_bubble", + "diversity": false + }, + { + "name": "thought_balloon", + "diversity": false + }, + { + "name": "hole", + "diversity": false + } + ] + }, + { + "name": "activity", + "fullname": "Activities", + "tabicon": "soccer", + "icons": [ + { + "name": "massage_woman", + "diversity": true + }, + { + "name": "massage_man", + "diversity": true + }, + { + "name": "haircut_woman", + "diversity": true + }, + { + "name": "haircut_man", + "diversity": true + }, + { + "name": "walking_man", + "diversity": true + }, + { + "name": "walking_woman", + "diversity": true + }, + { + "name": "running_man", + "diversity": true + }, + { + "name": "running_woman", + "diversity": true + }, + { + "name": "dancer", + "diversity": true + }, + { + "name": "man_dancing", + "diversity": true + }, + { + "name": "dancing_women", + "diversity": false + }, + { + "name": "dancing_men", + "diversity": false + }, + { + "name": "person_in_steamy_room", + "diversity": false + }, + { + "name": "person_climbing", + "diversity": false + }, + { + "name": "person_in_lotus_position", + "diversity": false + }, + { + "name": "bath", + "diversity": true + }, + { + "name": "sleeping_bed", + "diversity": true + }, + { + "name": "business_suit_levitating", + "diversity": true + }, + { + "name": "speaking_head", + "diversity": false + }, + { + "name": "bust_in_silhouette", + "diversity": false + }, + { + "name": "busts_in_silhouette", + "diversity": false + }, + { + "name": "person_fencing", + "diversity": false + }, + { + "name": "horse_racing", + "diversity": true + }, + { + "name": "skier", + "diversity": false + }, + { + "name": "snowboarder", + "diversity": true + }, + { + "name": "golfing_man", + "diversity": true + }, + { + "name": "golfing_woman", + "diversity": false + }, + { + "name": "surfing_man", + "diversity": true + }, + { + "name": "surfing_woman", + "diversity": true + }, + { + "name": "rowing_man", + "diversity": true + }, + { + "name": "rowing_woman", + "diversity": true + }, + { + "name": "swimming_man", + "diversity": true + }, + { + "name": "swimming_woman", + "diversity": true + }, + { + "name": "basketball_man", + "diversity": true + }, + { + "name": "basketball_woman", + "diversity": false + }, + { + "name": "weight_lifting_man", + "diversity": true + }, + { + "name": "weight_lifting_woman", + "diversity": false + }, + { + "name": "biking_man", + "diversity": true + }, + { + "name": "biking_woman", + "diversity": true + }, + { + "name": "mountain_biking_man", + "diversity": true + }, + { + "name": "mountain_biking_woman", + "diversity": true + }, + { + "name": "racing_car", + "diversity": false + }, + { + "name": "motorcycle", + "diversity": false + }, + { + "name": "man_cartwheeling", + "diversity": true + }, + { + "name": "woman_cartwheeling", + "diversity": true + }, + { + "name": "men_wrestling", + "diversity": false + }, + { + "name": "women_wrestling", + "diversity": false + }, + { + "name": "man_playing_water_polo", + "diversity": true + }, + { + "name": "woman_playing_water_polo", + "diversity": true + }, + { + "name": "man_playing_handball", + "diversity": true + }, + { + "name": "woman_playing_handball", + "diversity": true + }, + { + "name": "man_juggling", + "diversity": true + }, + { + "name": "woman_juggling", + "diversity": true + }, + { + "name": "soccer", + "diversity": false + }, + { + "name": "baseball", + "diversity": false + }, + { + "name": "basketball", + "diversity": false + }, + { + "name": "volleyball", + "diversity": false + }, + { + "name": "football", + "diversity": false + }, + { + "name": "rugby_football", + "diversity": false + }, + { + "name": "tennis", + "diversity": false + }, + { + "name": "8ball", + "diversity": false + }, + { + "name": "bowling", + "diversity": false + }, + { + "name": "cricket_bat_and_ball", + "diversity": false + }, + { + "name": "field_hockey", + "diversity": false + }, + { + "name": "ice_hockey", + "diversity": false + }, + { + "name": "ping_pong", + "diversity": false + }, + { + "name": "badminton", + "diversity": false + }, + { + "name": "boxing_glove", + "diversity": false + }, + { + "name": "martial_arts_uniform", + "diversity": false + }, + { + "name": "goal_net", + "diversity": false + }, + { + "name": "dart", + "diversity": false + }, + { + "name": "golf", + "diversity": false + }, + { + "name": "ice_skate", + "diversity": false + }, + { + "name": "fishing_pole_and_fish", + "diversity": false + }, + { + "name": "running_shirt_with_sash", + "diversity": false + }, + { + "name": "ski", + "diversity": false + }, + { + "name": "sled", + "diversity": false + }, + { + "name": "curling_stone", + "diversity": false + }, + { + "name": "video_game", + "diversity": false + }, + { + "name": "joystick", + "diversity": false + }, + { + "name": "game_die", + "diversity": false + }, + { + "name": "spades", + "diversity": false + }, + { + "name": "hearts", + "diversity": false + }, + { + "name": "diamonds", + "diversity": false + }, + { + "name": "clubs", + "diversity": false + }, + { + "name": "black_joker", + "diversity": false + }, + { + "name": "mahjong", + "diversity": false + }, + { + "name": "flower_playing_cards", + "diversity": false + }, + { + "name": "musical_score", + "diversity": false + }, + { + "name": "musical_note", + "diversity": false + }, + { + "name": "notes", + "diversity": false + }, + { + "name": "studio_microphone", + "diversity": false + }, + { + "name": "level_slider", + "diversity": false + }, + { + "name": "control_knobs", + "diversity": false + }, + { + "name": "microphone", + "diversity": false + }, + { + "name": "headphones", + "diversity": false + }, + { + "name": "radio", + "diversity": false + }, + { + "name": "saxophone", + "diversity": false + }, + { + "name": "guitar", + "diversity": false + }, + { + "name": "musical_keyboard", + "diversity": false + }, + { + "name": "trumpet", + "diversity": false + }, + { + "name": "violin", + "diversity": false + }, + { + "name": "drum", + "diversity": false + } + ] + }, + { + "name": "travel", + "fullname": "Travel & Places", + "tabicon": "airplane", + "icons": [ + { + "name": "earth_africa", + "diversity": false + }, + { + "name": "earth_americas", + "diversity": false + }, + { + "name": "earth_asia", + "diversity": false + }, + { + "name": "globe_with_meridians", + "diversity": false + }, + { + "name": "world_map", + "diversity": false + }, + { + "name": "japan", + "diversity": false + }, + { + "name": "mountain_snow", + "diversity": false + }, + { + "name": "mountain", + "diversity": false + }, + { + "name": "volcano", + "diversity": false + }, + { + "name": "mount_fuji", + "diversity": false + }, + { + "name": "camping", + "diversity": false + }, + { + "name": "beach_umbrella", + "diversity": false + }, + { + "name": "desert", + "diversity": false + }, + { + "name": "desert_island", + "diversity": false + }, + { + "name": "national_park", + "diversity": false + }, + { + "name": "stadium", + "diversity": false + }, + { + "name": "classical_building", + "diversity": false + }, + { + "name": "building_construction", + "diversity": false + }, + { + "name": "houses", + "diversity": false + }, + { + "name": "cityscape", + "diversity": false + }, + { + "name": "derelict_house", + "diversity": false + }, + { + "name": "house", + "diversity": false + }, + { + "name": "house_with_garden", + "diversity": false + }, + { + "name": "office", + "diversity": false + }, + { + "name": "post_office", + "diversity": false + }, + { + "name": "european_post_office", + "diversity": false + }, + { + "name": "hospital", + "diversity": false + }, + { + "name": "bank", + "diversity": false + }, + { + "name": "hotel", + "diversity": false + }, + { + "name": "love_hotel", + "diversity": false + }, + { + "name": "convenience_store", + "diversity": false + }, + { + "name": "school", + "diversity": false + }, + { + "name": "department_store", + "diversity": false + }, + { + "name": "factory", + "diversity": false + }, + { + "name": "japanese_castle", + "diversity": false + }, + { + "name": "european_castle", + "diversity": false + }, + { + "name": "wedding", + "diversity": false + }, + { + "name": "tokyo_tower", + "diversity": false + }, + { + "name": "statue_of_liberty", + "diversity": false + }, + { + "name": "church", + "diversity": false + }, + { + "name": "mosque", + "diversity": false + }, + { + "name": "synagogue", + "diversity": false + }, + { + "name": "shinto_shrine", + "diversity": false + }, + { + "name": "kaaba", + "diversity": false + }, + { + "name": "fountain", + "diversity": false + }, + { + "name": "tent", + "diversity": false + }, + { + "name": "foggy", + "diversity": false + }, + { + "name": "night_with_stars", + "diversity": false + }, + { + "name": "sunrise_over_mountains", + "diversity": false + }, + { + "name": "sunrise", + "diversity": false + }, + { + "name": "city_sunset", + "diversity": false + }, + { + "name": "city_sunrise", + "diversity": false + }, + { + "name": "bridge_at_night", + "diversity": false + }, + { + "name": "hotsprings", + "diversity": false + }, + { + "name": "milky_way", + "diversity": false + }, + { + "name": "carousel_horse", + "diversity": false + }, + { + "name": "ferris_wheel", + "diversity": false + }, + { + "name": "roller_coaster", + "diversity": false + }, + { + "name": "barber", + "diversity": false + }, + { + "name": "circus_tent", + "diversity": false + }, + { + "name": "performing_arts", + "diversity": false + }, + { + "name": "framed_picture", + "diversity": false + }, + { + "name": "art", + "diversity": false + }, + { + "name": "slot_machine", + "diversity": false + }, + { + "name": "steam_locomotive", + "diversity": false + }, + { + "name": "railway_car", + "diversity": false + }, + { + "name": "bullettrain_side", + "diversity": false + }, + { + "name": "bullettrain_front", + "diversity": false + }, + { + "name": "train2", + "diversity": false + }, + { + "name": "metro", + "diversity": false + }, + { + "name": "light_rail", + "diversity": false + }, + { + "name": "station", + "diversity": false + }, + { + "name": "tram", + "diversity": false + }, + { + "name": "monorail", + "diversity": false + }, + { + "name": "mountain_railway", + "diversity": false + }, + { + "name": "train", + "diversity": false + }, + { + "name": "bus", + "diversity": false + }, + { + "name": "oncoming_bus", + "diversity": false + }, + { + "name": "trolleybus", + "diversity": false + }, + { + "name": "minibus", + "diversity": false + }, + { + "name": "ambulance", + "diversity": false + }, + { + "name": "fire_engine", + "diversity": false + }, + { + "name": "police_car", + "diversity": false + }, + { + "name": "oncoming_police_car", + "diversity": false + }, + { + "name": "taxi", + "diversity": false + }, + { + "name": "oncoming_taxi", + "diversity": false + }, + { + "name": "red_car", + "diversity": false + }, + { + "name": "oncoming_automobile", + "diversity": false + }, + { + "name": "blue_car", + "diversity": false + }, + { + "name": "truck", + "diversity": false + }, + { + "name": "articulated_lorry", + "diversity": false + }, + { + "name": "tractor", + "diversity": false + }, + { + "name": "bike", + "diversity": false + }, + { + "name": "kick_scooter", + "diversity": false + }, + { + "name": "motor_scooter", + "diversity": false + }, + { + "name": "busstop", + "diversity": false + }, + { + "name": "motorway", + "diversity": false + }, + { + "name": "railway_track", + "diversity": false + }, + { + "name": "fuelpump", + "diversity": false + }, + { + "name": "rotating_light", + "diversity": false + }, + { + "name": "traffic_light", + "diversity": false + }, + { + "name": "vertical_traffic_light", + "diversity": false + }, + { + "name": "construction", + "diversity": false + }, + { + "name": "stop_sign", + "diversity": false + }, + { + "name": "anchor", + "diversity": false + }, + { + "name": "sailboat", + "diversity": false + }, + { + "name": "canoe", + "diversity": false + }, + { + "name": "speedboat", + "diversity": false + }, + { + "name": "passenger_ship", + "diversity": false + }, + { + "name": "ferry", + "diversity": false + }, + { + "name": "motor_boat", + "diversity": false + }, + { + "name": "ship", + "diversity": false + }, + { + "name": "airplane", + "diversity": false + }, + { + "name": "small_airplane", + "diversity": false + }, + { + "name": "flight_departure", + "diversity": false + }, + { + "name": "flight_arrival", + "diversity": false + }, + { + "name": "seat", + "diversity": false + }, + { + "name": "helicopter", + "diversity": false + }, + { + "name": "suspension_railway", + "diversity": false + }, + { + "name": "mountain_cableway", + "diversity": false + }, + { + "name": "aerial_tramway", + "diversity": false + }, + { + "name": "artificial_satellite", + "diversity": false + }, + { + "name": "rocket", + "diversity": false + }, + { + "name": "flying_saucer", + "diversity": false + }, + { + "name": "bellhop_bell", + "diversity": false + }, + { + "name": "door", + "diversity": false + }, + { + "name": "bed", + "diversity": false + }, + { + "name": "couch_and_lamp", + "diversity": false + }, + { + "name": "toilet", + "diversity": false + }, + { + "name": "shower", + "diversity": false + }, + { + "name": "bathtub", + "diversity": false + }, + { + "name": "checkered_flag", + "diversity": false + }, + { + "name": "triangular_flag_on_post", + "diversity": false + }, + { + "name": "crossed_flags", + "diversity": false + }, + { + "name": "black_flag", + "diversity": false + }, + { + "name": "white_flag", + "diversity": false + }, + { + "name": "rainbow_flag", + "diversity": false + }, + { + "name": "ascension_island", + "diversity": false + }, + { + "name": "andorra", + "diversity": false + }, + { + "name": "united_arab_emirates", + "diversity": false + }, + { + "name": "afghanistan", + "diversity": false + }, + { + "name": "antigua_barbuda", + "diversity": false + }, + { + "name": "anguilla", + "diversity": false + }, + { + "name": "albania", + "diversity": false + }, + { + "name": "armenia", + "diversity": false + }, + { + "name": "angola", + "diversity": false + }, + { + "name": "antarctica", + "diversity": false + }, + { + "name": "argentina", + "diversity": false + }, + { + "name": "american_samoa", + "diversity": false + }, + { + "name": "austria", + "diversity": false + }, + { + "name": "australia", + "diversity": false + }, + { + "name": "aruba", + "diversity": false + }, + { + "name": "aland_islands", + "diversity": false + }, + { + "name": "azerbaijan", + "diversity": false + }, + { + "name": "bosnia_herzegovina", + "diversity": false + }, + { + "name": "barbados", + "diversity": false + }, + { + "name": "bangladesh", + "diversity": false + }, + { + "name": "belgium", + "diversity": false + }, + { + "name": "burkina_faso", + "diversity": false + }, + { + "name": "bulgaria", + "diversity": false + }, + { + "name": "bahrain", + "diversity": false + }, + { + "name": "burundi", + "diversity": false + }, + { + "name": "benin", + "diversity": false + }, + { + "name": "st_barthelemy", + "diversity": false + }, + { + "name": "bermuda", + "diversity": false + }, + { + "name": "brunei", + "diversity": false + }, + { + "name": "bolivia", + "diversity": false + }, + { + "name": "caribbean_netherlands", + "diversity": false + }, + { + "name": "brazil", + "diversity": false + }, + { + "name": "bahamas", + "diversity": false + }, + { + "name": "bhutan", + "diversity": false + }, + { + "name": "bouvet_island", + "diversity": false + }, + { + "name": "botswana", + "diversity": false + }, + { + "name": "belarus", + "diversity": false + }, + { + "name": "belize", + "diversity": false + }, + { + "name": "canada", + "diversity": false + }, + { + "name": "cocos_islands", + "diversity": false + }, + { + "name": "congo_kinshasa", + "diversity": false + }, + { + "name": "central_african_republic", + "diversity": false + }, + { + "name": "congo_brazzaville", + "diversity": false + }, + { + "name": "switzerland", + "diversity": false + }, + { + "name": "cote_divoire", + "diversity": false + }, + { + "name": "cook_islands", + "diversity": false + }, + { + "name": "chile", + "diversity": false + }, + { + "name": "cameroon", + "diversity": false + }, + { + "name": "cn", + "diversity": false + }, + { + "name": "colombia", + "diversity": false + }, + { + "name": "clipperton_island", + "diversity": false + }, + { + "name": "costa_rica", + "diversity": false + }, + { + "name": "cuba", + "diversity": false + }, + { + "name": "cape_verde", + "diversity": false + }, + { + "name": "curacao", + "diversity": false + }, + { + "name": "christmas_island", + "diversity": false + }, + { + "name": "cyprus", + "diversity": false + }, + { + "name": "czech_republic", + "diversity": false + }, + { + "name": "de", + "diversity": false + }, + { + "name": "diego_garcia", + "diversity": false + }, + { + "name": "djibouti", + "diversity": false + }, + { + "name": "denmark", + "diversity": false + }, + { + "name": "dominica", + "diversity": false + }, + { + "name": "dominican_republic", + "diversity": false + }, + { + "name": "algeria", + "diversity": false + }, + { + "name": "ceuta_and_melilla", + "diversity": false + }, + { + "name": "ecuador", + "diversity": false + }, + { + "name": "estonia", + "diversity": false + }, + { + "name": "egypt", + "diversity": false + }, + { + "name": "western_sahara", + "diversity": false + }, + { + "name": "eritrea", + "diversity": false + }, + { + "name": "es", + "diversity": false + }, + { + "name": "ethiopia", + "diversity": false + }, + { + "name": "eu", + "diversity": false + }, + { + "name": "finland", + "diversity": false + }, + { + "name": "fiji", + "diversity": false + }, + { + "name": "falkland_islands", + "diversity": false + }, + { + "name": "micronesia", + "diversity": false + }, + { + "name": "faroe_islands", + "diversity": false + }, + { + "name": "fr", + "diversity": false + }, + { + "name": "gabon", + "diversity": false + }, + { + "name": "uk", + "diversity": false + }, + { + "name": "grenada", + "diversity": false + }, + { + "name": "georgia", + "diversity": false + }, + { + "name": "french_guiana", + "diversity": false + }, + { + "name": "guernsey", + "diversity": false + }, + { + "name": "ghana", + "diversity": false + }, + { + "name": "gibraltar", + "diversity": false + }, + { + "name": "greenland", + "diversity": false + }, + { + "name": "gambia", + "diversity": false + }, + { + "name": "guinea", + "diversity": false + }, + { + "name": "guadeloupe", + "diversity": false + }, + { + "name": "equatorial_guinea", + "diversity": false + }, + { + "name": "greece", + "diversity": false + }, + { + "name": "south_georgia_south_sandwich_islands", + "diversity": false + }, + { + "name": "guatemala", + "diversity": false + }, + { + "name": "guam", + "diversity": false + }, + { + "name": "guinea_bissau", + "diversity": false + }, + { + "name": "guyana", + "diversity": false + }, + { + "name": "hong_kong", + "diversity": false + }, + { + "name": "heard_and_mc_donald_islands", + "diversity": false + }, + { + "name": "honduras", + "diversity": false + }, + { + "name": "croatia", + "diversity": false + }, + { + "name": "haiti", + "diversity": false + }, + { + "name": "hungary", + "diversity": false + }, + { + "name": "canary_islands", + "diversity": false + }, + { + "name": "indonesia", + "diversity": false + }, + { + "name": "ireland", + "diversity": false + }, + { + "name": "israel", + "diversity": false + }, + { + "name": "isle_of_man", + "diversity": false + }, + { + "name": "india", + "diversity": false + }, + { + "name": "british_indian_ocean_territory", + "diversity": false + }, + { + "name": "iraq", + "diversity": false + }, + { + "name": "iran", + "diversity": false + }, + { + "name": "iceland", + "diversity": false + }, + { + "name": "it", + "diversity": false + }, + { + "name": "jersey", + "diversity": false + }, + { + "name": "jamaica", + "diversity": false + }, + { + "name": "jordan", + "diversity": false + }, + { + "name": "jp", + "diversity": false + }, + { + "name": "kenya", + "diversity": false + }, + { + "name": "kyrgyzstan", + "diversity": false + }, + { + "name": "cambodia", + "diversity": false + }, + { + "name": "kiribati", + "diversity": false + }, + { + "name": "comoros", + "diversity": false + }, + { + "name": "st_kitts_nevis", + "diversity": false + }, + { + "name": "north_korea", + "diversity": false + }, + { + "name": "kr", + "diversity": false + }, + { + "name": "kuwait", + "diversity": false + }, + { + "name": "cayman_islands", + "diversity": false + }, + { + "name": "kazakhstan", + "diversity": false + }, + { + "name": "laos", + "diversity": false + }, + { + "name": "lebanon", + "diversity": false + }, + { + "name": "st_lucia", + "diversity": false + }, + { + "name": "liechtenstein", + "diversity": false + }, + { + "name": "sri_lanka", + "diversity": false + }, + { + "name": "liberia", + "diversity": false + }, + { + "name": "lesotho", + "diversity": false + }, + { + "name": "lithuania", + "diversity": false + }, + { + "name": "luxembourg", + "diversity": false + }, + { + "name": "latvia", + "diversity": false + }, + { + "name": "libya", + "diversity": false + }, + { + "name": "morocco", + "diversity": false + }, + { + "name": "monaco", + "diversity": false + }, + { + "name": "moldova", + "diversity": false + }, + { + "name": "montenegro", + "diversity": false + }, + { + "name": "st_martin", + "diversity": false + }, + { + "name": "madagascar", + "diversity": false + }, + { + "name": "marshall_islands", + "diversity": false + }, + { + "name": "macedonia", + "diversity": false + }, + { + "name": "mali", + "diversity": false + }, + { + "name": "myanmar", + "diversity": false + }, + { + "name": "mongolia", + "diversity": false + }, + { + "name": "macau", + "diversity": false + }, + { + "name": "northern_mariana_islands", + "diversity": false + }, + { + "name": "martinique", + "diversity": false + }, + { + "name": "mauritania", + "diversity": false + }, + { + "name": "montserrat", + "diversity": false + }, + { + "name": "malta", + "diversity": false + }, + { + "name": "mauritius", + "diversity": false + }, + { + "name": "maldives", + "diversity": false + }, + { + "name": "malawi", + "diversity": false + }, + { + "name": "mexico", + "diversity": false + }, + { + "name": "malaysia", + "diversity": false + }, + { + "name": "mozambique", + "diversity": false + }, + { + "name": "namibia", + "diversity": false + }, + { + "name": "new_caledonia", + "diversity": false + }, + { + "name": "niger", + "diversity": false + }, + { + "name": "norfolk_island", + "diversity": false + }, + { + "name": "nigeria", + "diversity": false + }, + { + "name": "nicaragua", + "diversity": false + }, + { + "name": "netherlands", + "diversity": false + }, + { + "name": "norway", + "diversity": false + }, + { + "name": "nepal", + "diversity": false + }, + { + "name": "nauru", + "diversity": false + }, + { + "name": "niue", + "diversity": false + }, + { + "name": "new_zealand", + "diversity": false + }, + { + "name": "oman", + "diversity": false + }, + { + "name": "panama", + "diversity": false + }, + { + "name": "peru", + "diversity": false + }, + { + "name": "french_polynesia", + "diversity": false + }, + { + "name": "papua_new_guinea", + "diversity": false + }, + { + "name": "philippines", + "diversity": false + }, + { + "name": "pakistan", + "diversity": false + }, + { + "name": "poland", + "diversity": false + }, + { + "name": "st_pierre_miquelon", + "diversity": false + }, + { + "name": "pitcairn_islands", + "diversity": false + }, + { + "name": "puerto_rico", + "diversity": false + }, + { + "name": "palestinian_territories", + "diversity": false + }, + { + "name": "portugal", + "diversity": false + }, + { + "name": "palau", + "diversity": false + }, + { + "name": "paraguay", + "diversity": false + }, + { + "name": "qatar", + "diversity": false + }, + { + "name": "reunion", + "diversity": false + }, + { + "name": "romania", + "diversity": false + }, + { + "name": "serbia", + "diversity": false + }, + { + "name": "ru", + "diversity": false + }, + { + "name": "rwanda", + "diversity": false + }, + { + "name": "saudi_arabia", + "diversity": false + }, + { + "name": "solomon_islands", + "diversity": false + }, + { + "name": "seychelles", + "diversity": false + }, + { + "name": "sudan", + "diversity": false + }, + { + "name": "sweden", + "diversity": false + }, + { + "name": "singapore", + "diversity": false + }, + { + "name": "st_helena", + "diversity": false + }, + { + "name": "slovenia", + "diversity": false + }, + { + "name": "svalbard_and_jan_mayen", + "diversity": false + }, + { + "name": "slovakia", + "diversity": false + }, + { + "name": "sierra_leone", + "diversity": false + }, + { + "name": "san_marino", + "diversity": false + }, + { + "name": "senegal", + "diversity": false + }, + { + "name": "somalia", + "diversity": false + }, + { + "name": "suriname", + "diversity": false + }, + { + "name": "south_sudan", + "diversity": false + }, + { + "name": "sao_tome_principe", + "diversity": false + }, + { + "name": "el_salvador", + "diversity": false + }, + { + "name": "sint_maarten", + "diversity": false + }, + { + "name": "syria", + "diversity": false + }, + { + "name": "swaziland", + "diversity": false + }, + { + "name": "tristan_da_cunha", + "diversity": false + }, + { + "name": "turks_caicos_islands", + "diversity": false + }, + { + "name": "chad", + "diversity": false + }, + { + "name": "french_southern_territories", + "diversity": false + }, + { + "name": "togo", + "diversity": false + }, + { + "name": "thailand", + "diversity": false + }, + { + "name": "tajikistan", + "diversity": false + }, + { + "name": "tokelau", + "diversity": false + }, + { + "name": "timor_leste", + "diversity": false + }, + { + "name": "turkmenistan", + "diversity": false + }, + { + "name": "tunisia", + "diversity": false + }, + { + "name": "tonga", + "diversity": false + }, + { + "name": "tr", + "diversity": false + }, + { + "name": "trinidad_tobago", + "diversity": false + }, + { + "name": "tuvalu", + "diversity": false + }, + { + "name": "taiwan", + "diversity": false + }, + { + "name": "tanzania", + "diversity": false + }, + { + "name": "ukraine", + "diversity": false + }, + { + "name": "uganda", + "diversity": false + }, + { + "name": "us_outlying_islands", + "diversity": false + }, + { + "name": "united_nations", + "diversity": false + }, + { + "name": "us", + "diversity": false + }, + { + "name": "uruguay", + "diversity": false + }, + { + "name": "uzbekistan", + "diversity": false + }, + { + "name": "vatican_city", + "diversity": false + }, + { + "name": "st_vincent_grenadines", + "diversity": false + }, + { + "name": "venezuela", + "diversity": false + }, + { + "name": "british_virgin_islands", + "diversity": false + }, + { + "name": "us_virgin_islands", + "diversity": false + }, + { + "name": "vietnam", + "diversity": false + }, + { + "name": "vanuatu", + "diversity": false + }, + { + "name": "wallis_futuna", + "diversity": false + }, + { + "name": "samoa", + "diversity": false + }, + { + "name": "kosovo", + "diversity": false + }, + { + "name": "yemen", + "diversity": false + }, + { + "name": "mayotte", + "diversity": false + }, + { + "name": "south_africa", + "diversity": false + }, + { + "name": "zambia", + "diversity": false + }, + { + "name": "zimbabwe", + "diversity": false + } + ] + }, + { + "name": "objects", + "fullname": "Objects & Symbols", + "tabicon": "eyeglasses", + "icons": [ + { + "name": "eyeglasses", + "diversity": false + }, + { + "name": "dark_sunglasses", + "diversity": false + }, + { + "name": "necktie", + "diversity": false + }, + { + "name": "tshirt", + "diversity": false + }, + { + "name": "jeans", + "diversity": false + }, + { + "name": "scarf", + "diversity": false + }, + { + "name": "gloves", + "diversity": false + }, + { + "name": "coat", + "diversity": false + }, + { + "name": "socks", + "diversity": false + }, + { + "name": "dress", + "diversity": false + }, + { + "name": "kimono", + "diversity": false + }, + { + "name": "bikini", + "diversity": false + }, + { + "name": "womans_clothes", + "diversity": false + }, + { + "name": "purse", + "diversity": false + }, + { + "name": "handbag", + "diversity": false + }, + { + "name": "pouch", + "diversity": false + }, + { + "name": "shopping", + "diversity": false + }, + { + "name": "school_satchel", + "diversity": false + }, + { + "name": "mans_shoe", + "diversity": false + }, + { + "name": "athletic_shoe", + "diversity": false + }, + { + "name": "high_heel", + "diversity": false + }, + { + "name": "sandal", + "diversity": false + }, + { + "name": "boot", + "diversity": false + }, + { + "name": "crown", + "diversity": false + }, + { + "name": "womans_hat", + "diversity": false + }, + { + "name": "tophat", + "diversity": false + }, + { + "name": "mortar_board", + "diversity": false + }, + { + "name": "billed_cap", + "diversity": false + }, + { + "name": "rescue_worker_helmet", + "diversity": false + }, + { + "name": "prayer_beads", + "diversity": false + }, + { + "name": "lipstick", + "diversity": false + }, + { + "name": "ring", + "diversity": false + }, + { + "name": "gem", + "diversity": false + }, + { + "name": "medal_military", + "diversity": false + }, + { + "name": "trophy", + "diversity": false + }, + { + "name": "medal_sports", + "diversity": false + }, + { + "name": "1st_place_medal", + "diversity": false + }, + { + "name": "2nd_place_medal", + "diversity": false + }, + { + "name": "3rd_place_medal", + "diversity": false + }, + { + "name": "mute", + "diversity": false + }, + { + "name": "speaker", + "diversity": false + }, + { + "name": "sound", + "diversity": false + }, + { + "name": "loud_sound", + "diversity": false + }, + { + "name": "loudspeaker", + "diversity": false + }, + { + "name": "mega", + "diversity": false + }, + { + "name": "postal_horn", + "diversity": false + }, + { + "name": "bell", + "diversity": false + }, + { + "name": "no_bell", + "diversity": false + }, + { + "name": "iphone", + "diversity": false + }, + { + "name": "calling", + "diversity": false + }, + { + "name": "phone", + "diversity": false + }, + { + "name": "telephone_receiver", + "diversity": false + }, + { + "name": "pager", + "diversity": false + }, + { + "name": "fax", + "diversity": false + }, + { + "name": "battery", + "diversity": false + }, + { + "name": "electric_plug", + "diversity": false + }, + { + "name": "computer", + "diversity": false + }, + { + "name": "desktop_computer", + "diversity": false + }, + { + "name": "printer", + "diversity": false + }, + { + "name": "keyboard", + "diversity": false + }, + { + "name": "computer_mouse", + "diversity": false + }, + { + "name": "trackball", + "diversity": false + }, + { + "name": "minidisc", + "diversity": false + }, + { + "name": "floppy_disk", + "diversity": false + }, + { + "name": "cd", + "diversity": false + }, + { + "name": "dvd", + "diversity": false + }, + { + "name": "movie_camera", + "diversity": false + }, + { + "name": "film_strip", + "diversity": false + }, + { + "name": "film_projector", + "diversity": false + }, + { + "name": "clapper", + "diversity": false + }, + { + "name": "tv", + "diversity": false + }, + { + "name": "camera", + "diversity": false + }, + { + "name": "camera_flash", + "diversity": false + }, + { + "name": "video_camera", + "diversity": false + }, + { + "name": "vhs", + "diversity": false + }, + { + "name": "mag", + "diversity": false + }, + { + "name": "mag_right", + "diversity": false + }, + { + "name": "microscope", + "diversity": false + }, + { + "name": "telescope", + "diversity": false + }, + { + "name": "satellite", + "diversity": false + }, + { + "name": "candle", + "diversity": false + }, + { + "name": "bulb", + "diversity": false + }, + { + "name": "flashlight", + "diversity": false + }, + { + "name": "izakaya_lantern", + "diversity": false + }, + { + "name": "notebook_with_decorative_cover", + "diversity": false + }, + { + "name": "closed_book", + "diversity": false + }, + { + "name": "open_book", + "diversity": false + }, + { + "name": "green_book", + "diversity": false + }, + { + "name": "blue_book", + "diversity": false + }, + { + "name": "orange_book", + "diversity": false + }, + { + "name": "books", + "diversity": false + }, + { + "name": "notebook", + "diversity": false + }, + { + "name": "ledger", + "diversity": false + }, + { + "name": "page_with_curl", + "diversity": false + }, + { + "name": "scroll", + "diversity": false + }, + { + "name": "page_facing_up", + "diversity": false + }, + { + "name": "newspaper", + "diversity": false + }, + { + "name": "newspaper_roll", + "diversity": false + }, + { + "name": "bookmark_tabs", + "diversity": false + }, + { + "name": "bookmark", + "diversity": false + }, + { + "name": "label", + "diversity": false + }, + { + "name": "moneybag", + "diversity": false + }, + { + "name": "yen", + "diversity": false + }, + { + "name": "dollar", + "diversity": false + }, + { + "name": "euro", + "diversity": false + }, + { + "name": "pound", + "diversity": false + }, + { + "name": "money_with_wings", + "diversity": false + }, + { + "name": "credit_card", + "diversity": false + }, + { + "name": "chart", + "diversity": false + }, + { + "name": "currency_exchange", + "diversity": false + }, + { + "name": "heavy_dollar_sign", + "diversity": false + }, + { + "name": "email", + "diversity": false + }, + { + "name": "e-mail", + "diversity": false + }, + { + "name": "incoming_envelope", + "diversity": false + }, + { + "name": "envelope_with_arrow", + "diversity": false + }, + { + "name": "outbox_tray", + "diversity": false + }, + { + "name": "inbox_tray", + "diversity": false + }, + { + "name": "package", + "diversity": false + }, + { + "name": "mailbox", + "diversity": false + }, + { + "name": "mailbox_closed", + "diversity": false + }, + { + "name": "mailbox_with_mail", + "diversity": false + }, + { + "name": "mailbox_with_no_mail", + "diversity": false + }, + { + "name": "postbox", + "diversity": false + }, + { + "name": "ballot_box", + "diversity": false + }, + { + "name": "pencil2", + "diversity": false + }, + { + "name": "black_nib", + "diversity": false + }, + { + "name": "fountain_pen", + "diversity": false + }, + { + "name": "pen", + "diversity": false + }, + { + "name": "paintbrush", + "diversity": false + }, + { + "name": "crayon", + "diversity": false + }, + { + "name": "memo", + "diversity": false + }, + { + "name": "briefcase", + "diversity": false + }, + { + "name": "file_folder", + "diversity": false + }, + { + "name": "open_file_folder", + "diversity": false + }, + { + "name": "card_index_dividers", + "diversity": false + }, + { + "name": "date", + "diversity": false + }, + { + "name": "calendar", + "diversity": false + }, + { + "name": "spiral_notepad", + "diversity": false + }, + { + "name": "spiral_calendar", + "diversity": false + }, + { + "name": "card_index", + "diversity": false + }, + { + "name": "chart_with_upwards_trend", + "diversity": false + }, + { + "name": "chart_with_downwards_trend", + "diversity": false + }, + { + "name": "bar_chart", + "diversity": false + }, + { + "name": "clipboard", + "diversity": false + }, + { + "name": "pushpin", + "diversity": false + }, + { + "name": "round_pushpin", + "diversity": false + }, + { + "name": "paperclip", + "diversity": false + }, + { + "name": "paperclips", + "diversity": false + }, + { + "name": "straight_ruler", + "diversity": false + }, + { + "name": "triangular_ruler", + "diversity": false + }, + { + "name": "scissors", + "diversity": false + }, + { + "name": "card_file_box", + "diversity": false + }, + { + "name": "file_cabinet", + "diversity": false + }, + { + "name": "wastebasket", + "diversity": false + }, + { + "name": "lock", + "diversity": false + }, + { + "name": "unlock", + "diversity": false + }, + { + "name": "lock_with_ink_pen", + "diversity": false + }, + { + "name": "closed_lock_with_key", + "diversity": false + }, + { + "name": "key", + "diversity": false + }, + { + "name": "old_key", + "diversity": false + }, + { + "name": "hammer", + "diversity": false + }, + { + "name": "pick", + "diversity": false + }, + { + "name": "hammer_and_pick", + "diversity": false + }, + { + "name": "hammer_and_wrench", + "diversity": false + }, + { + "name": "dagger", + "diversity": false + }, + { + "name": "crossed_swords", + "diversity": false + }, + { + "name": "gun", + "diversity": false + }, + { + "name": "bow_and_arrow", + "diversity": false + }, + { + "name": "shield", + "diversity": false + }, + { + "name": "wrench", + "diversity": false + }, + { + "name": "nut_and_bolt", + "diversity": false + }, + { + "name": "gear", + "diversity": false + }, + { + "name": "clamp", + "diversity": false + }, + { + "name": "alembic", + "diversity": false + }, + { + "name": "balance_scale", + "diversity": false + }, + { + "name": "link", + "diversity": false + }, + { + "name": "chains", + "diversity": false + }, + { + "name": "syringe", + "diversity": false + }, + { + "name": "pill", + "diversity": false + }, + { + "name": "smoking", + "diversity": false + }, + { + "name": "coffin", + "diversity": false + }, + { + "name": "funeral_urn", + "diversity": false + }, + { + "name": "moyai", + "diversity": false + }, + { + "name": "oil_drum", + "diversity": false + }, + { + "name": "crystal_ball", + "diversity": false + }, + { + "name": "shopping_cart", + "diversity": false + }, + { + "name": "atm", + "diversity": false + }, + { + "name": "put_litter_in_its_place", + "diversity": false + }, + { + "name": "potable_water", + "diversity": false + }, + { + "name": "wheelchair", + "diversity": false + }, + { + "name": "mens", + "diversity": false + }, + { + "name": "womens", + "diversity": false + }, + { + "name": "restroom", + "diversity": false + }, + { + "name": "baby_symbol", + "diversity": false + }, + { + "name": "wc", + "diversity": false + }, + { + "name": "passport_control", + "diversity": false + }, + { + "name": "customs", + "diversity": false + }, + { + "name": "baggage_claim", + "diversity": false + }, + { + "name": "left_luggage", + "diversity": false + }, + { + "name": "warning", + "diversity": false + }, + { + "name": "children_crossing", + "diversity": false + }, + { + "name": "no_entry", + "diversity": false + }, + { + "name": "no_entry_sign", + "diversity": false + }, + { + "name": "no_bicycles", + "diversity": false + }, + { + "name": "no_smoking", + "diversity": false + }, + { + "name": "do_not_litter", + "diversity": false + }, + { + "name": "non-potable_water", + "diversity": false + }, + { + "name": "no_pedestrians", + "diversity": false + }, + { + "name": "no_mobile_phones", + "diversity": false + }, + { + "name": "underage", + "diversity": false + }, + { + "name": "radioactive", + "diversity": false + }, + { + "name": "biohazard", + "diversity": false + }, + { + "name": "arrow_up", + "diversity": false + }, + { + "name": "arrow_upper_right", + "diversity": false + }, + { + "name": "arrow_right", + "diversity": false + }, + { + "name": "arrow_lower_right", + "diversity": false + }, + { + "name": "arrow_down", + "diversity": false + }, + { + "name": "arrow_lower_left", + "diversity": false + }, + { + "name": "arrow_left", + "diversity": false + }, + { + "name": "arrow_upper_left", + "diversity": false + }, + { + "name": "arrow_up_down", + "diversity": false + }, + { + "name": "left_right_arrow", + "diversity": false + }, + { + "name": "leftwards_arrow_with_hook", + "diversity": false + }, + { + "name": "arrow_right_hook", + "diversity": false + }, + { + "name": "arrow_heading_up", + "diversity": false + }, + { + "name": "arrow_heading_down", + "diversity": false + }, + { + "name": "arrows_clockwise", + "diversity": false + }, + { + "name": "arrows_counterclockwise", + "diversity": false + }, + { + "name": "back", + "diversity": false + }, + { + "name": "end", + "diversity": false + }, + { + "name": "on", + "diversity": false + }, + { + "name": "soon", + "diversity": false + }, + { + "name": "top", + "diversity": false + }, + { + "name": "place_of_worship", + "diversity": false + }, + { + "name": "atom_symbol", + "diversity": false + }, + { + "name": "om", + "diversity": false + }, + { + "name": "star_of_david", + "diversity": false + }, + { + "name": "wheel_of_dharma", + "diversity": false + }, + { + "name": "yin_yang", + "diversity": false + }, + { + "name": "latin_cross", + "diversity": false + }, + { + "name": "orthodox_cross", + "diversity": false + }, + { + "name": "star_and_crescent", + "diversity": false + }, + { + "name": "peace_symbol", + "diversity": false + }, + { + "name": "menorah", + "diversity": false + }, + { + "name": "six_pointed_star", + "diversity": false + }, + { + "name": "aries", + "diversity": false + }, + { + "name": "taurus", + "diversity": false + }, + { + "name": "gemini", + "diversity": false + }, + { + "name": "cancer", + "diversity": false + }, + { + "name": "leo", + "diversity": false + }, + { + "name": "virgo", + "diversity": false + }, + { + "name": "libra", + "diversity": false + }, + { + "name": "scorpius", + "diversity": false + }, + { + "name": "sagittarius", + "diversity": false + }, + { + "name": "capricorn", + "diversity": false + }, + { + "name": "aquarius", + "diversity": false + }, + { + "name": "pisces", + "diversity": false + }, + { + "name": "ophiuchus", + "diversity": false + }, + { + "name": "twisted_rightwards_arrows", + "diversity": false + }, + { + "name": "repeat", + "diversity": false + }, + { + "name": "repeat_one", + "diversity": false + }, + { + "name": "arrow_forward", + "diversity": false + }, + { + "name": "fast_forward", + "diversity": false + }, + { + "name": "next_track_button", + "diversity": false + }, + { + "name": "play_or_pause_button", + "diversity": false + }, + { + "name": "arrow_backward", + "diversity": false + }, + { + "name": "rewind", + "diversity": false + }, + { + "name": "previous_track_button", + "diversity": false + }, + { + "name": "arrow_up_small", + "diversity": false + }, + { + "name": "arrow_double_up", + "diversity": false + }, + { + "name": "arrow_down_small", + "diversity": false + }, + { + "name": "arrow_double_down", + "diversity": false + }, + { + "name": "pause_button", + "diversity": false + }, + { + "name": "stop_button", + "diversity": false + }, + { + "name": "record_button", + "diversity": false + }, + { + "name": "cinema", + "diversity": false + }, + { + "name": "low_brightness", + "diversity": false + }, + { + "name": "high_brightness", + "diversity": false + }, + { + "name": "signal_strength", + "diversity": false + }, + { + "name": "vibration_mode", + "diversity": false + }, + { + "name": "mobile_phone_off", + "diversity": false + }, + { + "name": "recycle", + "diversity": false + }, + { + "name": "fleur_de_lis", + "diversity": false + }, + { + "name": "trident", + "diversity": false + }, + { + "name": "name_badge", + "diversity": false + }, + { + "name": "beginner", + "diversity": false + }, + { + "name": "o", + "diversity": false + }, + { + "name": "white_check_mark", + "diversity": false + }, + { + "name": "ballot_box_with_check", + "diversity": false + }, + { + "name": "heavy_check_mark", + "diversity": false + }, + { + "name": "heavy_multiplication_x", + "diversity": false + }, + { + "name": "x", + "diversity": false + }, + { + "name": "negative_squared_cross_mark", + "diversity": false + }, + { + "name": "heavy_plus_sign", + "diversity": false + }, + { + "name": "heavy_minus_sign", + "diversity": false + }, + { + "name": "heavy_division_sign", + "diversity": false + }, + { + "name": "curly_loop", + "diversity": false + }, + { + "name": "loop", + "diversity": false + }, + { + "name": "part_alternation_mark", + "diversity": false + }, + { + "name": "eight_spoked_asterisk", + "diversity": false + }, + { + "name": "eight_pointed_black_star", + "diversity": false + }, + { + "name": "sparkle", + "diversity": false + }, + { + "name": "bangbang", + "diversity": false + }, + { + "name": "interrobang", + "diversity": false + }, + { + "name": "question", + "diversity": false + }, + { + "name": "grey_question", + "diversity": false + }, + { + "name": "grey_exclamation", + "diversity": false + }, + { + "name": "exclamation", + "diversity": false + }, + { + "name": "wavy_dash", + "diversity": false + }, + { + "name": "copyright", + "diversity": false + }, + { + "name": "registered", + "diversity": false + }, + { + "name": "tm", + "diversity": false + }, + { + "name": "hash", + "diversity": false + }, + { + "name": "asterisk", + "diversity": false + }, + { + "name": "zero", + "diversity": false + }, + { + "name": "one", + "diversity": false + }, + { + "name": "two", + "diversity": false + }, + { + "name": "three", + "diversity": false + }, + { + "name": "four", + "diversity": false + }, + { + "name": "five", + "diversity": false + }, + { + "name": "six", + "diversity": false + }, + { + "name": "seven", + "diversity": false + }, + { + "name": "eight", + "diversity": false + }, + { + "name": "nine", + "diversity": false + }, + { + "name": "keycap_ten", + "diversity": false + }, + { + "name": "100", + "diversity": false + }, + { + "name": "capital_abcd", + "diversity": false + }, + { + "name": "abcd", + "diversity": false + }, + { + "name": "1234", + "diversity": false + }, + { + "name": "symbols", + "diversity": false + }, + { + "name": "abc", + "diversity": false + }, + { + "name": "a", + "diversity": false + }, + { + "name": "ab", + "diversity": false + }, + { + "name": "b", + "diversity": false + }, + { + "name": "cl", + "diversity": false + }, + { + "name": "cool", + "diversity": false + }, + { + "name": "free", + "diversity": false + }, + { + "name": "information_source", + "diversity": false + }, + { + "name": "id", + "diversity": false + }, + { + "name": "m", + "diversity": false + }, + { + "name": "new", + "diversity": false + }, + { + "name": "ng", + "diversity": false + }, + { + "name": "o2", + "diversity": false + }, + { + "name": "ok", + "diversity": false + }, + { + "name": "parking", + "diversity": false + }, + { + "name": "sos", + "diversity": false + }, + { + "name": "up", + "diversity": false + }, + { + "name": "vs", + "diversity": false + }, + { + "name": "koko", + "diversity": false + }, + { + "name": "sa", + "diversity": false + }, + { + "name": "u6708", + "diversity": false + }, + { + "name": "u6709", + "diversity": false + }, + { + "name": "u6307", + "diversity": false + }, + { + "name": "ideograph_advantage", + "diversity": false + }, + { + "name": "u5272", + "diversity": false + }, + { + "name": "u7121", + "diversity": false + }, + { + "name": "u7981", + "diversity": false + }, + { + "name": "accept", + "diversity": false + }, + { + "name": "u7533", + "diversity": false + }, + { + "name": "u5408", + "diversity": false + }, + { + "name": "u7a7a", + "diversity": false + }, + { + "name": "congratulations", + "diversity": false + }, + { + "name": "secret", + "diversity": false + }, + { + "name": "u55b6", + "diversity": false + }, + { + "name": "u6e80", + "diversity": false + }, + { + "name": "black_small_square", + "diversity": false + }, + { + "name": "white_small_square", + "diversity": false + }, + { + "name": "white_medium_square", + "diversity": false + }, + { + "name": "black_medium_square", + "diversity": false + }, + { + "name": "white_medium_small_square", + "diversity": false + }, + { + "name": "black_medium_small_square", + "diversity": false + }, + { + "name": "black_large_square", + "diversity": false + }, + { + "name": "white_large_square", + "diversity": false + }, + { + "name": "large_orange_diamond", + "diversity": false + }, + { + "name": "large_blue_diamond", + "diversity": false + }, + { + "name": "small_orange_diamond", + "diversity": false + }, + { + "name": "small_blue_diamond", + "diversity": false + }, + { + "name": "small_red_triangle", + "diversity": false + }, + { + "name": "small_red_triangle_down", + "diversity": false + }, + { + "name": "diamond_shape_with_a_dot_inside", + "diversity": false + }, + { + "name": "radio_button", + "diversity": false + }, + { + "name": "black_square_button", + "diversity": false + }, + { + "name": "white_square_button", + "diversity": false + }, + { + "name": "white_circle", + "diversity": false + }, + { + "name": "black_circle", + "diversity": false + }, + { + "name": "red_circle", + "diversity": false + }, + { + "name": "large_blue_circle", + "diversity": false + }, + { + "name": "hourglass", + "diversity": false + }, + { + "name": "hourglass_flowing_sand", + "diversity": false + }, + { + "name": "watch", + "diversity": false + }, + { + "name": "alarm_clock", + "diversity": false + }, + { + "name": "stopwatch", + "diversity": false + }, + { + "name": "timer_clock", + "diversity": false + }, + { + "name": "mantelpiece_clock", + "diversity": false + }, + { + "name": "clock12", + "diversity": false + }, + { + "name": "clock1230", + "diversity": false + }, + { + "name": "clock1", + "diversity": false + }, + { + "name": "clock130", + "diversity": false + }, + { + "name": "clock2", + "diversity": false + }, + { + "name": "clock230", + "diversity": false + }, + { + "name": "clock3", + "diversity": false + }, + { + "name": "clock330", + "diversity": false + }, + { + "name": "clock4", + "diversity": false + }, + { + "name": "clock430", + "diversity": false + }, + { + "name": "clock5", + "diversity": false + }, + { + "name": "clock530", + "diversity": false + }, + { + "name": "clock6", + "diversity": false + }, + { + "name": "clock630", + "diversity": false + }, + { + "name": "clock7", + "diversity": false + }, + { + "name": "clock730", + "diversity": false + }, + { + "name": "clock8", + "diversity": false + }, + { + "name": "clock830", + "diversity": false + }, + { + "name": "clock9", + "diversity": false + }, + { + "name": "clock930", + "diversity": false + }, + { + "name": "clock10", + "diversity": false + }, + { + "name": "clock1030", + "diversity": false + }, + { + "name": "clock11", + "diversity": false + }, + { + "name": "clock1130", + "diversity": false + } + ] + } +] \ No newline at end of file diff --git a/lib/tasks/emoji.rake b/lib/tasks/emoji.rake index e1efd1ef739..a601dbc3c87 100644 --- a/lib/tasks/emoji.rake +++ b/lib/tasks/emoji.rake @@ -4,7 +4,7 @@ require "json" require "nokogiri" require "open-uri" -EMOJI_GROUPS_PATH ||= "app/assets/javascripts/discourse/lib/emoji/groups.js.es6" +EMOJI_GROUPS_PATH ||= "lib/emoji/groups.json" EMOJI_DB_PATH ||= "lib/emoji/db.json" @@ -432,7 +432,7 @@ def fix_incomplete_sets(emojis) end end -def generate_emoji_groups(emojis) +def generate_emoji_groups(keywords) puts "Generating groups..." list = open(EMOJI_ORDERING_URL).read @@ -453,8 +453,8 @@ def generate_emoji_groups(emojis) emoji_char = code_to_emoji(emoji_code) - if emoji = emojis[emoji_char] - group["icons"] << emoji["name"] + if emoji = keywords[emoji_char] + group["icons"] << { name: emoji["name"], diversity: emoji["fitzpatrick_scale"] } end end end @@ -518,15 +518,7 @@ def write_js_groups(emojis, groups) confirm_overwrite(EMOJI_GROUPS_PATH) - template = <