From 8ae445766fbda2438b597d4d4827efddef68db9d Mon Sep 17 00:00:00 2001 From: Robin Ward Date: Tue, 13 Jun 2017 15:52:08 -0400 Subject: [PATCH] Upgrade Ember to 2.13 --- Gemfile.lock | 2 +- .../discourse-common/lib/get-owner.js.es6 | 6 ++++- .../discourse/lib/plugin-api.js.es6 | 25 ++++++++++++++++--- .../javascripts/discourse/lib/url.js.es6 | 2 +- .../discourse/mixins/scrolling.js.es6 | 2 +- .../javascripts/discourse/models/store.js.es6 | 11 +++++++- .../discourse/widgets/widget.js.es6 | 3 +++ .../initializers/apply-details.js.es6 | 5 ++-- .../initializers/new-user-narrative.js.es6 | 5 ++-- .../initializers/add-poll-ui-builder.js.es6 | 5 ++-- .../initializers/extend-for-poll.js.es6 | 8 +++--- 11 files changed, 52 insertions(+), 22 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 721a2c2670c..3faa8c8a02e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -101,7 +101,7 @@ GEM ember-source (>= 1.1.0) jquery-rails (>= 1.0.17) railties (>= 3.1) - ember-source (2.10.2) + ember-source (2.13.3) erubis (2.7.0) excon (0.56.0) execjs (2.7.0) diff --git a/app/assets/javascripts/discourse-common/lib/get-owner.js.es6 b/app/assets/javascripts/discourse-common/lib/get-owner.js.es6 index ada334f0752..09f23c7b0da 100644 --- a/app/assets/javascripts/discourse-common/lib/get-owner.js.es6 +++ b/app/assets/javascripts/discourse-common/lib/get-owner.js.es6 @@ -15,7 +15,11 @@ export function getRegister(obj) { const register = { lookup: (...args) => owner.lookup(...args), lookupFactory: (...args) => { - return owner.lookupFactory ? owner.lookupFactory(...args) : owner._lookupFactory(...args); + if (owner.factoryFor) { + return owner.factoryFor(...args); + } else if (owner._lookupFactory) { + return owner._lookupFactory(...args); + } }, deprecateContainer(target) { diff --git a/app/assets/javascripts/discourse/lib/plugin-api.js.es6 b/app/assets/javascripts/discourse/lib/plugin-api.js.es6 index 01b1c9216de..5d382e4ac04 100644 --- a/app/assets/javascripts/discourse/lib/plugin-api.js.es6 +++ b/app/assets/javascripts/discourse/lib/plugin-api.js.es6 @@ -22,7 +22,7 @@ import { attachAdditionalPanel } from 'discourse/widgets/header'; // If you add any methods to the API ensure you bump up this number -const PLUGIN_API_VERSION = '0.8.6'; +const PLUGIN_API_VERSION = '0.8.7'; class PluginApi { constructor(version, container) { @@ -39,6 +39,25 @@ class PluginApi { return this.container.lookup('current-user:main'); } + /** + * Allows you to overwrite or extend methods in a class. + * + * For example: + * + * ``` + * api.modifyClass('controller:composer', { + * actions: { + * newActionHere() { } + * } + * }); + * ``` + **/ + modifyClass(resolverName, changes) { + const klass = this.container.factoryFor(resolverName); + klass.class.reopen(changes); + return klass; + } + /** * Used for decorating the `cooked` content of a post after it is rendered using * jQuery. @@ -61,7 +80,7 @@ class PluginApi { if (!opts.onlyStream) { decorate(ComposerEditor, 'previewRefreshed', callback); - decorate(this.container.lookupFactory('component:user-stream'), 'didInsertElement', callback); + decorate(this.container.factoryFor('component:user-stream').class, 'didInsertElement', callback); } } @@ -170,7 +189,7 @@ class PluginApi { * ``` **/ attachWidgetAction(widget, actionName, fn) { - const widgetClass = this.container.lookupFactory(`widget:${widget}`); + const widgetClass = this.container.factoryFor(`widget:${widget}`).class; widgetClass.prototype[actionName] = fn; } diff --git a/app/assets/javascripts/discourse/lib/url.js.es6 b/app/assets/javascripts/discourse/lib/url.js.es6 index 5ce1cfa9b34..dbca177d9dd 100644 --- a/app/assets/javascripts/discourse/lib/url.js.es6 +++ b/app/assets/javascripts/discourse/lib/url.js.es6 @@ -367,7 +367,7 @@ const DiscourseURL = Ember.Object.extend({ discoveryTopics.resetParams(); } - router.router.updateURL(path); + router._routerMicrolib.updateURL(path); } const split = path.split('#'); diff --git a/app/assets/javascripts/discourse/mixins/scrolling.js.es6 b/app/assets/javascripts/discourse/mixins/scrolling.js.es6 index c2997fa3954..bbd21aca02a 100644 --- a/app/assets/javascripts/discourse/mixins/scrolling.js.es6 +++ b/app/assets/javascripts/discourse/mixins/scrolling.js.es6 @@ -31,7 +31,7 @@ const Scrolling = Ember.Mixin.create({ opts = opts || { debounce: 100 }; // So we can not call the scrolled event while transitioning - const router = Discourse.__container__.lookup('router:main').router; + const router = Discourse.__container__.lookup('router:main')._routerMicrolib; let onScrollMethod = () => { if (router.activeTransition) { return; } diff --git a/app/assets/javascripts/discourse/models/store.js.es6 b/app/assets/javascripts/discourse/models/store.js.es6 index 0d1ef7cdac0..96086f068f9 100644 --- a/app/assets/javascripts/discourse/models/store.js.es6 +++ b/app/assets/javascripts/discourse/models/store.js.es6 @@ -297,7 +297,16 @@ export default Ember.Object.extend({ if (existing) { delete obj.id; - const klass = this.register.lookupFactory('model:' + type) || RestModel; + let klass = this.register.lookupFactory('model:' + type); + + if (klass && klass.class) { + klass = klass.class; + } + + if (!klass) { + klass = RestModel; + } + existing.setProperties(klass.munge(obj)); obj.id = id; return existing; diff --git a/app/assets/javascripts/discourse/widgets/widget.js.es6 b/app/assets/javascripts/discourse/widgets/widget.js.es6 index 23dc15d639c..c0bb3b64187 100644 --- a/app/assets/javascripts/discourse/widgets/widget.js.es6 +++ b/app/assets/javascripts/discourse/widgets/widget.js.es6 @@ -248,6 +248,9 @@ export default class Widget { return; } WidgetClass = this.register.lookupFactory(`widget:${widgetName}`); + if (WidgetClass && WidgetClass.class) { + WidgetClass = WidgetClass.class; + } } if (WidgetClass) { diff --git a/plugins/discourse-details/assets/javascripts/initializers/apply-details.js.es6 b/plugins/discourse-details/assets/javascripts/initializers/apply-details.js.es6 index 074d93a3b42..9677bb32c2f 100644 --- a/plugins/discourse-details/assets/javascripts/initializers/apply-details.js.es6 +++ b/plugins/discourse-details/assets/javascripts/initializers/apply-details.js.es6 @@ -11,8 +11,7 @@ function initializeDetails(api) { }; }); - const ComposerController = api.container.lookupFactory("controller:composer"); - ComposerController.reopen({ + api.modifyClass('controller:composer', { actions: { insertDetails() { this.get("toolbarEvent").applySurround( @@ -31,6 +30,6 @@ export default { name: "apply-details", initialize() { - withPluginApi('0.5', initializeDetails); + withPluginApi('0.8.7', initializeDetails); } }; diff --git a/plugins/discourse-narrative-bot/assets/javascripts/initializers/new-user-narrative.js.es6 b/plugins/discourse-narrative-bot/assets/javascripts/initializers/new-user-narrative.js.es6 index 40d727b6ae6..82117be16e0 100644 --- a/plugins/discourse-narrative-bot/assets/javascripts/initializers/new-user-narrative.js.es6 +++ b/plugins/discourse-narrative-bot/assets/javascripts/initializers/new-user-narrative.js.es6 @@ -4,9 +4,8 @@ function initialize(api) { const messageBus = api.container.lookup('message-bus:main'); const currentUser = api.getCurrentUser(); const appEvents = api.container.lookup('app-events:main'); - const SiteHeaderComponent = api.container.lookupFactory('component:site-header'); - SiteHeaderComponent.reopen({ + api.modifyClass('component:site-header', { didInsertElement() { this._super(); this.dispatch('header:search-context-trigger', 'header'); @@ -34,6 +33,6 @@ export default { initialize(container) { const siteSettings = container.lookup('site-settings:main'); - if (siteSettings.discourse_narrative_bot_enabled) withPluginApi('0.5', initialize); + if (siteSettings.discourse_narrative_bot_enabled) withPluginApi('0.8.7', initialize); } }; diff --git a/plugins/poll/assets/javascripts/initializers/add-poll-ui-builder.js.es6 b/plugins/poll/assets/javascripts/initializers/add-poll-ui-builder.js.es6 index 66fbb764047..c2b0a287235 100644 --- a/plugins/poll/assets/javascripts/initializers/add-poll-ui-builder.js.es6 +++ b/plugins/poll/assets/javascripts/initializers/add-poll-ui-builder.js.es6 @@ -6,8 +6,7 @@ function initializePollUIBuilder(api) { if (!siteSettings.poll_enabled && (api.getCurrentUser() && !api.getCurrentUser().staff)) return; - const ComposerController = api.container.lookupFactory("controller:composer"); - ComposerController.reopen({ + api.modifyClass('controller:composer', { actions: { showPollBuilder() { showModal("poll-ui-builder").set("toolbarEvent", this.get("toolbarEvent")); @@ -28,6 +27,6 @@ export default { name: "add-poll-ui-builder", initialize() { - withPluginApi('0.5', initializePollUIBuilder); + withPluginApi('0.8.7', initializePollUIBuilder); } }; diff --git a/plugins/poll/assets/javascripts/initializers/extend-for-poll.js.es6 b/plugins/poll/assets/javascripts/initializers/extend-for-poll.js.es6 index 9fa2577af64..0138c6f99fa 100644 --- a/plugins/poll/assets/javascripts/initializers/extend-for-poll.js.es6 +++ b/plugins/poll/assets/javascripts/initializers/extend-for-poll.js.es6 @@ -6,8 +6,7 @@ import WidgetGlue from 'discourse/widgets/glue'; function initializePolls(api) { const register = getRegister(api); - const TopicController = api.container.lookupFactory('controller:topic'); - TopicController.reopen({ + api.modifyClass('controller:topic', { subscribe(){ this._super(); this.messageBus.subscribe("/polls/" + this.get("model.id"), msg => { @@ -23,8 +22,7 @@ function initializePolls(api) { } }); - const Post = api.container.lookupFactory('model:post'); - Post.reopen({ + api.modifyClass('model:post', { _polls: null, pollsObject: null, @@ -95,6 +93,6 @@ export default { name: "extend-for-poll", initialize() { - withPluginApi('0.1', initializePolls); + withPluginApi('0.8.7', initializePolls); } };