From 63bf03ba5b3f66a4d8654e0e4f61826fe19a280c Mon Sep 17 00:00:00 2001 From: Robin Ward Date: Thu, 15 May 2014 17:01:01 -0400 Subject: [PATCH] Support for automatic registering of initializers from plugins. --- app/assets/javascripts/discourse.js | 18 +++++++++++------- .../discourse/initializers/bootbox.js | 11 ----------- .../discourse/initializers/bootbox.js.es6 | 12 ++++++++++++ .../discourse/initializers/csrf-token.js.es6 | 18 ++++++++++++++++++ .../discourse/initializers/csrf_token.js | 19 ------------------- .../register-discourse-location.js.es6 | 6 ++++++ 6 files changed, 47 insertions(+), 37 deletions(-) delete mode 100644 app/assets/javascripts/discourse/initializers/bootbox.js create mode 100644 app/assets/javascripts/discourse/initializers/bootbox.js.es6 create mode 100644 app/assets/javascripts/discourse/initializers/csrf-token.js.es6 delete mode 100644 app/assets/javascripts/discourse/initializers/csrf_token.js create mode 100644 app/assets/javascripts/discourse/initializers/register-discourse-location.js.es6 diff --git a/app/assets/javascripts/discourse.js b/app/assets/javascripts/discourse.js index 7dc277f258a..a00e1e37fd0 100644 --- a/app/assets/javascripts/discourse.js +++ b/app/assets/javascripts/discourse.js @@ -114,6 +114,16 @@ window.Discourse = Ember.Application.createWithMixins(Discourse.Ajax, { @method start **/ start: function() { + + // Load any ES6 initializers + Ember.keys(requirejs._eak_seen).filter(function(key) { + return (/\/initializers\//).test(key); + }).forEach(function(moduleName) { + var module = require(moduleName, null, null, true); + if (!module) { throw new Error(moduleName + ' must export an initializer.'); } + Discourse.initializer(module.default); + }); + var initializers = this.initializers; if (initializers) { var self = this; @@ -127,6 +137,7 @@ window.Discourse = Ember.Application.createWithMixins(Discourse.Ajax, { } }); } + }, requiresRefresh: function(){ @@ -164,10 +175,3 @@ window.Discourse = Ember.Application.createWithMixins(Discourse.Ajax, { }.property("isReadOnly") }); - -Discourse.initializer({ - name: "register-discourse-location", - initialize: function(container, application) { - application.register('location:discourse-location', Ember.DiscourseLocation); - } -}); diff --git a/app/assets/javascripts/discourse/initializers/bootbox.js b/app/assets/javascripts/discourse/initializers/bootbox.js deleted file mode 100644 index 171992d1a28..00000000000 --- a/app/assets/javascripts/discourse/initializers/bootbox.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - Default settings for bootbox -**/ -Discourse.addInitializer(function() { - - bootbox.animate(false); - - // clicking outside a bootbox modal closes it - bootbox.backdrop(true); - -}, true); \ No newline at end of file diff --git a/app/assets/javascripts/discourse/initializers/bootbox.js.es6 b/app/assets/javascripts/discourse/initializers/bootbox.js.es6 new file mode 100644 index 00000000000..4715f2fa734 --- /dev/null +++ b/app/assets/javascripts/discourse/initializers/bootbox.js.es6 @@ -0,0 +1,12 @@ +/** + Default settings for bootbox +**/ +export default { + name: "bootbox", + initialize: function() { + bootbox.animate(false); + + // clicking outside a bootbox modal closes it + bootbox.backdrop(true); + } +}; diff --git a/app/assets/javascripts/discourse/initializers/csrf-token.js.es6 b/app/assets/javascripts/discourse/initializers/csrf-token.js.es6 new file mode 100644 index 00000000000..946fa5b2ddb --- /dev/null +++ b/app/assets/javascripts/discourse/initializers/csrf-token.js.es6 @@ -0,0 +1,18 @@ +/** + Append our CSRF token to AJAX requests when necessary. +**/ +export default { + name: "csrf-token", + initialize: function() { + var session = Discourse.Session; + + // Add a CSRF token to all AJAX requests + session.currentProp('csrfToken', $('meta[name=csrf-token]').attr('content')); + + $.ajaxPrefilter(function(options, originalOptions, xhr) { + if (!options.crossDomain) { + xhr.setRequestHeader('X-CSRF-Token', session.currentProp('csrfToken')); + } + }); + } +}; diff --git a/app/assets/javascripts/discourse/initializers/csrf_token.js b/app/assets/javascripts/discourse/initializers/csrf_token.js deleted file mode 100644 index 163416f6f43..00000000000 --- a/app/assets/javascripts/discourse/initializers/csrf_token.js +++ /dev/null @@ -1,19 +0,0 @@ -/** - Append our CSRF token to AJAX requests when necessary. -**/ - -Discourse.addInitializer(function() { - - var session = Discourse.Session; - - // Add a CSRF token to all AJAX requests - session.currentProp('csrfToken', $('meta[name=csrf-token]').attr('content')); - - $.ajaxPrefilter(function(options, originalOptions, xhr) { - if (!options.crossDomain) { - xhr.setRequestHeader('X-CSRF-Token', session.currentProp('csrfToken')); - } - }); - -}, true); - diff --git a/app/assets/javascripts/discourse/initializers/register-discourse-location.js.es6 b/app/assets/javascripts/discourse/initializers/register-discourse-location.js.es6 new file mode 100644 index 00000000000..19d4206d3d7 --- /dev/null +++ b/app/assets/javascripts/discourse/initializers/register-discourse-location.js.es6 @@ -0,0 +1,6 @@ +export default { + name: "register-discourse-location", + initialize: function(container, application) { + application.register('location:discourse-location', Ember.DiscourseLocation); + } +};