Dispatch a chat-card action — either a button click or an edit-action link
click — to the given logic. Reads btn.dataset.action, builds an
sohl.entity.action.SohlActionContext, then dispatches through logic.actions (by name,
executor id, or title) before falling back to a direct method call on the
logic. Warns via sohl.log.warn when no handler is found.
Pure dispatch path — callers are responsible for the ownership check before
calling this function.
An action card (see sohl.document.chat.buildActionCard) marks its
buttons with data-skip-dialog="true": because the card already carries the
action's parameters in data-scope, the click runs the action with
sohl.entity.action.SohlActionContext.skipDialog set, so the action
proceeds without prompting. A human invoking the same action from a sheet
(no data-skip-dialog) gets its dialog instead — the card and the sheet call
the same self-sufficient action.
Dispatch a chat-card action — either a button click or an edit-action link click — to the given logic. Reads
btn.dataset.action, builds an sohl.entity.action.SohlActionContext, then dispatches throughlogic.actions(by name, executor id, or title) before falling back to a direct method call on the logic. Warns viasohl.log.warnwhen no handler is found.Pure dispatch path — callers are responsible for the ownership check before calling this function.
An action card (see sohl.document.chat.buildActionCard) marks its buttons with
data-skip-dialog="true": because the card already carries the action's parameters indata-scope, the click runs the action with sohl.entity.action.SohlActionContext.skipDialog set, so the action proceeds without prompting. A human invoking the same action from a sheet (nodata-skip-dialog) gets its dialog instead — the card and the sheet call the same self-sufficient action.