From 1132c100745e829b7166fe48ec6f116daa56420f Mon Sep 17 00:00:00 2001 From: Sam Date: Thu, 1 Aug 2013 17:35:31 +1000 Subject: [PATCH] support server side js and arbitrary assets proper chaining for emoji so other hooks can be called --- .../discourse/components/markdown.js | 1 + lib/plugin.rb | 19 +++++++++++++++++-- .../assets/javascripts/discourse_emoji.js | 2 +- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/app/assets/javascripts/discourse/components/markdown.js b/app/assets/javascripts/discourse/components/markdown.js index 76bce725583..33528c4259e 100644 --- a/app/assets/javascripts/discourse/components/markdown.js +++ b/app/assets/javascripts/discourse/components/markdown.js @@ -106,6 +106,7 @@ Discourse.Markdown = { }); converter.hooks.chain("preConversion", function(text) { + Discourse.Markdown.textResult = null; Discourse.Markdown.trigger('beforeCook', { detail: text, opts: opts }); return Discourse.Markdown.textResult || text; }); diff --git a/lib/plugin.rb b/lib/plugin.rb index faef47cafe8..75c6e4b743f 100644 --- a/lib/plugin.rb +++ b/lib/plugin.rb @@ -103,6 +103,16 @@ class Plugin @javascripts << js end + + def register_asset(file,opts=nil) + full_path = File.dirname(path) << "/assets/" << file + assets << full_path + if opts == :server_side + @server_side_javascripts ||= [] + @server_side_javascripts << full_path + end + end + def automatic_assets css = "" js = "(function(){" @@ -149,19 +159,24 @@ class Plugin assets.concat auto_assets end unless assets.blank? - paths = [] assets.each do |asset| if asset =~ /\.js$/ DiscoursePluginRegistry.javascripts << asset elsif asset =~ /\.css$|\.scss$/ DiscoursePluginRegistry.stylesheets << asset end - paths << File.dirname(asset) end + # TODO possibly amend this to a rails engine Rails.configuration.assets.paths << auto_generated_path Rails.configuration.assets.paths << File.dirname(path) + "/assets" end + + if @server_side_javascripts + @server_side_javascripts.each do |js| + DiscoursePluginRegistry.server_side_javascripts << js + end + end end def auth_provider(type, opts) diff --git a/vendor/gems/discourse_emoji/vendor/assets/javascripts/discourse_emoji.js b/vendor/gems/discourse_emoji/vendor/assets/javascripts/discourse_emoji.js index bd524438b60..296d649356d 100644 --- a/vendor/gems/discourse_emoji/vendor/assets/javascripts/discourse_emoji.js +++ b/vendor/gems/discourse_emoji/vendor/assets/javascripts/discourse_emoji.js @@ -4,7 +4,7 @@ // Regiest a before cook event Discourse.Markdown.on("beforeCook", function(event) { - var text = event.detail; + var text = this.textResult || event.detail; var opts = event.opts; this.textResult = text.replace(/\:([a-z\_\+\-0-9]+)\:/g, function (m1, m2) {