From 68b0554c2f3bae4f5bce046db9a0514b373ba834 Mon Sep 17 00:00:00 2001 From: Alexander Skvortsov Date: Tue, 15 Dec 2020 17:49:24 -0500 Subject: [PATCH] Support multiple callback-based settings per-extension --- framework/core/js/src/admin/utils/ExtensionData.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/framework/core/js/src/admin/utils/ExtensionData.js b/framework/core/js/src/admin/utils/ExtensionData.js index 25f7a90a3..043cc612d 100644 --- a/framework/core/js/src/admin/utils/ExtensionData.js +++ b/framework/core/js/src/admin/utils/ExtensionData.js @@ -44,6 +44,14 @@ export default class ExtensionData { registerSetting(content, priority = 0) { this.data[this.currentExtension].settings = this.data[this.currentExtension].settings || new ItemList(); + // Callbacks can be passed in instead of settings to display custom content. + // By default, they will be added with the `null` key, since they don't have a `.setting` attr. + // To support multiple such items for one extension, we assign a random ID. + // 36 is arbitrary length, but makes collisions very unlikely. + if (typeof content === 'function') { + content.setting = Math.random().toString(36); + } + this.data[this.currentExtension].settings.add(content.setting, content, priority); return this;