discourse/plugins/chat
Martin Brennan ec9ec1e04e
FEATURE: Sort hashtags starting with term higher priority (#19463)
This introduces another "section" of queries to the
hashtag autocomplete search, which returns results for
each type that start with the search term. So now results
will be in this order, and within these sections ordered
by the types in priority order:

1. Exact matches sorted by type
2. "starts with" sorted by type
3. Everything else sorted by type then name within type
2022-12-15 13:01:44 +10:00
..
app FIX: Do not duplicate check when editing chat message to remove uploads (#19432) 2022-12-14 10:48:23 +10:00
assets FEATURE: show user status on group pages (#19323) 2022-12-14 13:18:09 +04:00
config FEATURE: Chat and Sidebar are now on by default (#19406) 2022-12-13 17:25:19 -07:00
db DEV: Add messages_count to ChatChannel table (#19295) 2022-12-06 08:40:46 +10:00
lib FEATURE: Sort hashtags starting with term higher priority (#19463) 2022-12-15 13:01:44 +10:00
public DEV: Move discourse-chat to the core repo. (#18776) 2022-11-02 10:41:30 -03:00
spec FEATURE: Sort hashtags starting with term higher priority (#19463) 2022-12-15 13:01:44 +10:00
test/javascripts FEATURE: Chat and Sidebar are now on by default (#19406) 2022-12-13 17:25:19 -07:00
plugin.rb DEV: Use guardian user for can_chat? (#19418) 2022-12-13 09:14:17 +10:00
README.md DEV: Move discourse-chat to the core repo. (#18776) 2022-11-02 10:41:30 -03:00

⚠️ This plugin is still in active development and may change frequently

Documentation

The Discourse Chat plugin adds chat functionality to your Discourse so it can natively support both long-form and short-form communication needs of your online community.

For documentation, see Discourse Chat

Plugin API

registerChatComposerButton

Usage

api.registerChatComposerButton({ id: "foo", ... });

Options

Every option accepts a value or a function, when passing a function this will be the chat-composer component instance. Example of an option using a function:

api.registerChatComposerButton({
  id: "foo",
  displayed() {
    return this.site.mobileView && this.canAttachUploads;
  },
});
Required
  • id unique, used to identify your button, eg: "gifs"
  • action callback when the button is pressed, can be an action name or an anonymous function, eg: "onFooClicked" or () => { console.log("clicked") }

A button requires at least an icon or a label:

  • icon, eg: "times"
  • label, text displayed on the button, a translatable key, eg: "foo.bar"
  • translatedLabel, text displayed on the button, a string, eg: "Add gifs"
Optional
  • position, can be "inline" or "dropdown", defaults to "inline"
  • title, title attribute of the button, a translatable key, eg: "foo.bar"
  • translatedTitle, title attribute of the button, a string, eg: "Add gifs"
  • ariaLabel, aria-label attribute of the button, a translatable key, eg: "foo.bar"
  • translatedAriaLabel, aria-label attribute of the button, a string, eg: "Add gifs"
  • classNames, additional names to add to the buttons class attribute, eg: ["foo", "bar"]
  • displayed, hide/or show the button, expects a boolean
  • disabled, sets the disabled attribute on the button, expects a boolean
  • priority, an integer defining the order of the buttons, higher comes first, eg: 700
  • dependentKeys, list of property names which should trigger a refresh of the buttons when changed, eg: ["foo.bar", "bar.baz"]