Honestly seems like it's being in some weird loop for
discourse/hashtag_autocomplete_spec.rb for this:
```ruby
within topic_page.post_by_number(2) do
cooked_hashtags = page.all(".hashtag-cooked", count: 2)
expect(cooked_hashtags[0]["outerHTML"]).to eq(<<~HTML.chomp)
<a class=\"hashtag-cooked\" href=\"#{category.url}\" data-type=\"category\" data-slug=\"cool-cat\"><svg class=\"fa d-icon d-icon-folder svg-icon svg-node\"><use href=\"#folder\"></use></svg><span>Cool Category</span></a>
HTML
expect(cooked_hashtags[1]["outerHTML"]).to eq(<<~HTML.chomp)
<a class=\"hashtag-cooked\" href=\"#{tag.url}\" data-type=\"tag\" data-slug=\"cooltag\"><svg class=\"fa d-icon d-icon-tag svg-icon svg-node\"><use href=\"#tag\"></use></svg><span>cooltag</span></a>
HTML
end
```
I see this many times in the full logs with `SELENIUM_VERBOSE_DRIVER_LOGS=1`:
```
COMMAND FindElements {
"using": "css selector",
"value": "#post_2"
}
Followed by:
COMMAND FindChildElements {
"id": "26dfe542-659b-46cc-ac8c-a6c2d9cbdf0a",
"using": "css selector",
"value": ".hashtag-cooked"
}
```
Over and over and over, there are 58 such occurrences. I am beginning to
think `within` is just poison that should be avoided.
|
||
|---|---|---|
| .. | ||
| app | ||
| assets | ||
| config | ||
| db | ||
| lib | ||
| public | ||
| spec | ||
| test/javascripts | ||
| plugin.rb | ||
| README.md | ||
⚠️ 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
idunique, used to identify your button, eg: "gifs"actioncallback 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 button’s class attribute, eg: ["foo", "bar"]displayed, hide/or show the button, expects a booleandisabled, sets the disabled attribute on the button, expects a booleanpriority, an integer defining the order of the buttons, higher comes first, eg:700dependentKeys, list of property names which should trigger a refresh of the buttons when changed, eg:["foo.bar", "bar.baz"]