Examples

@Mentions

Type @ followed by a name to tag a colleague, or # for a channel. Mentions render as atomic chips — you can click to select or delete the whole chip but can’t edit inside a name. Data sources are async (debounced, with a “Searching…” state) so they plug into your directory or user-search API cleanly.

Try it: type @al or #ann to see the picker.

Example code

<link rel="stylesheet" href="/richtexteditor/rte_theme_default.css" />
        <script type="text/javascript" src="/richtexteditor/rte.js"></script>
        <script type="text/javascript" src='/richtexteditor/plugins/all_plugins.js'></script>

        <div id="mentions_editor">
            <p>Try it: type <strong>@al</strong> or <strong>#ann</strong> to see the picker.</p>
        </div>

        <script>
            var mentioncfg = { mentionEnabled: true, toolbar: "default" };
            var mentionEditor = new RichTextEditor("#mentions_editor", mentioncfg);

            // Fake directory — in production, call your own /api/users endpoint.
            var DIRECTORY = [
                { id: "alice", name: "Alice Lee", color: "#2563eb" },
                { id: "bob", name: "Bob Chen", color: "#dc2626" },
                { id: "carol", name: "Carol Diaz", color: "#16a34a" },
                { id: "maya", name: "Maya Patel", color: "#9333ea" }
            ];
            var CHANNELS = [
                { id: "announcements", name: "announcements" },
                { id: "product", name: "product" },
                { id: "engineering", name: "engineering" }
            ];

            if (mentionEditor.mentions) {
                mentionEditor.mentions.register({
                    trigger: "@",
                    insertClass: "rte-mention-person",
                    search: function (q, done) {
                        var rx = new RegExp(q, "i");
                        setTimeout(function () { done(DIRECTORY.filter(function (p) { return rx.test(p.name); })); }, 150);
                    }
                });
                mentionEditor.mentions.register({
                    trigger: "#",
                    insertClass: "rte-mention-channel",
                    search: function (q, done) {
                        done(CHANNELS.filter(function (c) { return c.name.indexOf(q.toLowerCase()) === 0; }));
                    }
                });
            }
        </script>