mirror of
https://github.com/discourse/discourse.git
synced 2025-05-21 18:12:32 +08:00
FEATURE: Generic hashtag autocomplete part 1 (#18592)
This commit adds a new `/hashtag/search` endpoint and both relevant JS and ruby plugin APIs to handle plugins adding their own data sources and priority orders for types of things to search when `#` is pressed. A `context` param is added to `setupHashtagAutocomplete` which a corresponding chat PR https://github.com/discourse/discourse-chat/pull/1302 will now use. The UI calls `registerHashtagSearchParam` for each context that will require a `#` search (e.g. the topic composer), for each type of record that the context needs to search for, as well as a priority order for that type. Core uses this call to add the `category` and `tag` data sources to the topic composer. The `register_hashtag_data_source` ruby plugin API call is for plugins to add a new data source for the hashtag searching endpoint, e.g. discourse-chat may add a `channel` data source. This functionality is hidden behind the `enable_experimental_hashtag_autocomplete` flag, except for the change to `setupHashtagAutocomplete` since only core and discourse-chat are using that function. Note this PR does **not** include required changes for hashtag lookup or new styling.
This commit is contained in:
@ -1086,6 +1086,16 @@ class Plugin::Instance
|
||||
About.add_plugin_stat_group(plugin_stat_group_name, show_in_ui: show_in_ui, &block)
|
||||
end
|
||||
|
||||
# Registers a new record type to be searched via the HashtagAutocompleteService and the
|
||||
# /hashtags/search endpoint. The data returned by the block must be an array
|
||||
# with each item an instance of HashtagAutocompleteService::HashtagItem.
|
||||
#
|
||||
# See also registerHashtagSearchParam in the plugin JS API, otherwise the
|
||||
# clientside hashtag search code will use the new type registered here.
|
||||
def register_hashtag_data_source(type, &block)
|
||||
HashtagAutocompleteService.register_data_source(type, &block)
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def self.js_path
|
||||
|
Reference in New Issue
Block a user