Browse Source

Move emojis API into separate file

JC Brand 1 year ago
parent
commit
2de4470de9
2 changed files with 63 additions and 58 deletions
  1. 61 0
      src/headless/plugins/emoji/api.js
  2. 2 58
      src/headless/plugins/emoji/plugin.js

+ 61 - 0
src/headless/plugins/emoji/api.js

@@ -0,0 +1,61 @@
+import api from '../../shared/api/index.js';
+import converse from '../../shared/api/public.js';
+
+/**
+ * @namespace api.emojis
+ * @memberOf api
+ */
+const emojis = {
+    /**
+     * Initializes Emoji support by downloading the emojis JSON (and any applicable images).
+     * @method api.emojis.initialize
+     * @returns {Promise}
+     */
+    async initialize () {
+        if (!converse.emojis.initialized) {
+            converse.emojis.initialized = true;
+
+            const module = await import(/*webpackChunkName: "emojis" */ './emoji.json');
+            /**
+             * *Hook* which allows plugins to modify emojis definition.
+             *
+             * Note: This hook is only fired one time, when Converse is initialized.
+             *
+             * @event _converse#loadEmojis
+             * @param context
+             *      An empty context object.
+             * @param json
+             *      See {@link src/headless/emojis.json} for more information about the content of
+             *      this parameter.
+             * @example
+             *  api.listen.on('loadEmojis', (context, json) => {
+             *      json.custom??= {};
+             *      json.custom[":my_emoji"] = {
+             *          "sn":":my_emoji:","url":"https://example.com/my_emoji.png","c":"custom"
+             *      };
+             *      delete json.custom[":converse:"];
+             *      return json;
+             *  });
+             */
+            const json = await api.hook('loadEmojis', {}, module.default);
+            converse.emojis.json = json;
+
+            converse.emojis.by_sn = Object.keys(json).reduce(
+                (result, cat) => Object.assign(result, json[cat]),
+                {}
+            );
+            converse.emojis.list = Object.values(converse.emojis.by_sn);
+            converse.emojis.list.sort((a, b) => (a.sn < b.sn ? -1 : a.sn > b.sn ? 1 : 0));
+            converse.emojis.shortnames = converse.emojis.list.map((m) => m.sn);
+            const getShortNames = () =>
+                converse.emojis.shortnames.map((s) => s.replace(/[+]/g, '\\$&')).join('|');
+            converse.emojis.shortnames_regex = new RegExp(getShortNames(), 'gi');
+            converse.emojis.initialized_promise.resolve();
+        }
+        return converse.emojis.initialized_promise;
+    },
+}
+
+const emojis_api = { emojis };
+
+export default emojis_api;

+ 2 - 58
src/headless/plugins/emoji/plugin.js

@@ -9,6 +9,7 @@ import converse from '../../shared/api/public.js';
 import { getOpenPromise } from '@converse/openpromise';
 import './utils.js';
 import EmojiPicker from './picker.js';
+import emojis from './api.js';
 
 converse.emojis = {
     'initialized': false,
@@ -59,63 +60,6 @@ converse.plugins.add('converse-emoji', {
         const exports = { EmojiPicker };
         Object.assign(_converse, exports); // XXX: DEPRECATED
         Object.assign(_converse.exports, exports);
-
-        // We extend the default converse.js API to add methods specific to MUC groupchats.
-        Object.assign(api, {
-            /**
-             * @namespace api.emojis
-             * @memberOf api
-             */
-            emojis: {
-                /**
-                 * Initializes Emoji support by downloading the emojis JSON (and any applicable images).
-                 * @method api.emojis.initialize
-                 * @returns {Promise}
-                 */
-                async initialize () {
-                    if (!converse.emojis.initialized) {
-                        converse.emojis.initialized = true;
-
-                        const module = await import(/*webpackChunkName: "emojis" */ './emoji.json');
-                        /**
-                         * *Hook* which allows plugins to modify emojis definition.
-                         *
-                         * Note: This hook is only fired one time, when Converse is initialized.
-                         *
-                         * @event _converse#loadEmojis
-                         * @param context
-                         *      An empty context object.
-                         * @param json
-                         *      See {@link src/headless/emojis.json} for more information about the content of
-                         *      this parameter.
-                         * @example
-                         *  api.listen.on('loadEmojis', (context, json) => {
-                         *      json.custom??= {};
-                         *      json.custom[":my_emoji"] = {
-                         *          "sn":":my_emoji:","url":"https://example.com/my_emoji.png","c":"custom"
-                         *      };
-                         *      delete json.custom[":converse:"];
-                         *      return json;
-                         *  });
-                         */
-                        const json = await api.hook('loadEmojis', {}, module.default);
-                        converse.emojis.json = json;
-
-                        converse.emojis.by_sn = Object.keys(json).reduce(
-                            (result, cat) => Object.assign(result, json[cat]),
-                            {}
-                        );
-                        converse.emojis.list = Object.values(converse.emojis.by_sn);
-                        converse.emojis.list.sort((a, b) => (a.sn < b.sn ? -1 : a.sn > b.sn ? 1 : 0));
-                        converse.emojis.shortnames = converse.emojis.list.map((m) => m.sn);
-                        const getShortNames = () =>
-                            converse.emojis.shortnames.map((s) => s.replace(/[+]/g, '\\$&')).join('|');
-                        converse.emojis.shortnames_regex = new RegExp(getShortNames(), 'gi');
-                        converse.emojis.initialized_promise.resolve();
-                    }
-                    return converse.emojis.initialized_promise;
-                },
-            },
-        });
+        Object.assign(api, emojis);
     },
 });