diff --git a/app/assets/javascripts/discourse/lib/plugin-api.js.es6 b/app/assets/javascripts/discourse/lib/plugin-api.js.es6 index b8beb0020d9..9544d849577 100644 --- a/app/assets/javascripts/discourse/lib/plugin-api.js.es6 +++ b/app/assets/javascripts/discourse/lib/plugin-api.js.es6 @@ -5,7 +5,7 @@ import { addButton } from 'discourse/widgets/post-menu'; import { includeAttributes } from 'discourse/lib/transform-post'; import { addToolbarCallback } from 'discourse/components/d-editor'; import { addWidgetCleanCallback } from 'discourse/components/mount-widget'; -import { createWidget, decorateWidget, changeSetting } from 'discourse/widgets/widget'; +import { createWidget, reopenWidget, decorateWidget, changeSetting } from 'discourse/widgets/widget'; import { onPageChange } from 'discourse/lib/page-tracker'; import { preventCloak } from 'discourse/widgets/post-stream'; import { h } from 'virtual-dom'; @@ -307,6 +307,16 @@ class PluginApi { return createWidget(name, args); } + /** + * Exposes the widget update ability to plugins. Updates the widget + * registry for the given widget name to include the properties on args + * See `reopenWidget` in `discourse/widgets/widget` from more ifo. + **/ + + reopenWidget(name, args) { + return reopenWidget(name, args); + } + /** * Adds a property that can be summed for calculating the flag counter **/ @@ -357,7 +367,7 @@ class PluginApi { let _pluginv01; function getPluginApi(version) { version = parseFloat(version); - if (version <= 0.6) { + if (version <= 0.7) { if (!_pluginv01) { _pluginv01 = new PluginApi(version, Discourse.__container__); } diff --git a/app/assets/javascripts/discourse/widgets/widget.js.es6 b/app/assets/javascripts/discourse/widgets/widget.js.es6 index 25c598e1eb9..1f6a96cd85b 100644 --- a/app/assets/javascripts/discourse/widgets/widget.js.es6 +++ b/app/assets/javascripts/discourse/widgets/widget.js.es6 @@ -125,6 +125,17 @@ export function createWidget(name, opts) { return result; } +export function reopenWidget(name, opts) { + let existing = _registry[name]; + if (!existing) { + console.error(`Could not find widget ${name} in registry`); + return + } + + Object.keys(opts).forEach(k => existing.prototype[k] = opts[k]); + return existing; +} + export default class Widget { constructor(attrs, register, opts) { opts = opts || {};