module Gitlab class AwardEmoji CATEGORIES = { other: "Other", objects: "Objects", places: "Places", travel_places: "Travel", emoticons: "Emoticons", objects_symbols: "Symbols", nature: "Nature", celebration: "Celebration", people: "People", activity: "Activity", flags: "Flags", food_drink: "Food" }.with_indifferent_access CATEGORY_ALIASES = { symbols: "objects_symbols", foods: "food_drink", travel: "travel_places" }.with_indifferent_access def self.normalize_emoji_name(name) aliases[name] || name end def self.emoji_by_category unless @emoji_by_category @emoji_by_category = Hash.new { |h, key| h[key] = [] } emojis.each do |emoji_name, data| data["name"] = emoji_name # Skip Fitzpatrick(tone) modifiers next if data["category"] == "modifier" category = CATEGORY_ALIASES[data["category"]] || data["category"] @emoji_by_category[category] << data end @emoji_by_category = @emoji_by_category.sort.to_h end @emoji_by_category end def self.emojis @emojis ||= begin json_path = File.join(Rails.root, 'fixtures', 'emojis', 'index.json' ) JSON.parse(File.read(json_path)) end end def self.aliases @aliases ||= begin json_path = File.join(Rails.root, 'fixtures', 'emojis', 'aliases.json' ) JSON.parse(File.read(json_path)) end end # Returns an Array of Emoji names and their asset URLs. def self.urls @urls ||= begin path = File.join(Rails.root, 'fixtures', 'emojis', 'digests.json') prefix = Gitlab::Application.config.assets.prefix digest = Gitlab::Application.config.assets.digest JSON.parse(File.read(path)).map do |hash| if digest fname = "#{hash['unicode']}-#{hash['digest']}" else fname = hash['unicode'] end { name: hash['name'], path: "#{prefix}/#{fname}.png" } end end end end end