FEATURE: add support for custom emojis via plugins

This commit is contained in:
Régis Hanol
2015-11-05 17:25:26 +01:00
parent 3bf6617ff6
commit 13e96ffd3b
3 changed files with 59 additions and 5 deletions

View File

@ -17,8 +17,13 @@ class Plugin::Instance
}
end
def seed_data
@seed_data ||= {}
# Memoized hash readers
[:seed_data, :emojis].each do |att|
class_eval %Q{
def #{att}
@#{att} ||= HashWithIndifferentAccess.new({})
end
}
end
def self.find_all(parent_path)
@ -213,6 +218,10 @@ class Plugin::Instance
seed_data[key] = value
end
def register_emoji(name, url)
emojis[name] = url
end
def automatic_assets
css = styles.join("\n")
js = javascripts.join("\n")
@ -230,6 +239,25 @@ class Plugin::Instance
end
end
unless emojis.blank?
if @enabled_site_setting.present?
js << "Discourse.initializer({" << "\n"
js << "name: 'emojis'," << "\n"
js << "initialize: function() {" << "\n"
js << "if (Discourse.SiteSettings.#{@enabled_site_setting}) {" << "\n"
end
emojis.each do |name, url|
js << "Discourse.Dialect.registerEmoji('#{name}', '#{url}');" << "\n"
end
if @enabled_site_setting.present?
js << "}" << "\n"
js << "}" << "\n"
js << "});" << "\n"
end
end
# Generate an IIFE for the JS
js = "(function(){#{js}})();" if js.present?
@ -272,6 +300,10 @@ class Plugin::Instance
DiscoursePluginRegistry.register_seed_data(key, value)
end
emojis.each do |name, url|
DiscoursePluginRegistry.register_emoji(name, url)
end
# TODO: possibly amend this to a rails engine
# Automatically include assets