{attrs} stands inside an HTML start tag and writes the attributes its items
describe, separated by spaces: <button {attrs disabled=$busy, title=$help}>.
Each value is escaped for the attribute, so a quote in a value cannot end it. The items are
read raw - content=, data= or print= are attribute names
here, not the options they are on other tags.
A boolean HTML attribute - disabled, checked,
selected, required, hidden, readonly and the
like - is written bare when its value is true and left out otherwise. Any other attribute is left
out for FALSE and NULL, written bare for TRUE, and otherwise written with its value: the text
'false' stays aria-expanded="false", an empty text is an empty
attribute, an array is joined with spaces. A name alone - {attrs required} - is a
bare attribute.
An item without a name whose value is an array adds its keys as attributes. Those keys are
data, often a visitor's, so some are left out: a key that is no attribute name, an event handler
(on...), a script library's directive in any spelling (@,
:, x-, v-, hx-, ng-,
wire: and more), an iframe's srcdoc, and a URL attribute whose value
names a scheme that runs script (javascript:, vbscript:,
data: other than data:image/).
For the class attribute, {classes}
builds the list from conditions.