hyTags is dynamically typed. Every value on the stack has a type, and commands expect parameters of particular types. Type errors are caught at runtime and throw exceptions.
Commands that operate on a specific type follow the naming pattern
type-function. For example,
string-append appends to a string, and
number-add adds to a number.
Type-based commands typically have a
self parameter that refers to the value being operated on. This parameter is read from the stack by type:
<button>Self parameter</button> <on click> <string-new value="Hello"> <!-- Stack: ["Hello"] --> <string-append string=" World"> <!-- self = "Hello" (from stack) --> <debug-log> <!-- Logs: "Hello World" --> </on>
string-new,
string-append,
string-split,
string-replace, etc.number-new,
number-add,
number-multiply,
number-round, etc.bool-true,
bool-false,
bool-and,
bool-or,
bool-not.[string] holds strings,
[number] holds numbers. Commands:
array-new,
array-append,
array-get,
array-loop, etc.object-new,
object-set,
object-get,
object-get-keys.element-new,
element-clone,
selection-get-element.fragment-new,
fragment-replace,
selection-append-children.event-get,
event-get-target,
event-get-key.date-new,
date-now,
date-add,
date-to-string.time-new,
time-now,
time-to-string.date-time-new,
date-time-now,
date-time-to-string.url-new,
url-from-string,
url-get-path,
url-add-query-param.request-new,
request-set-object,
request-send.response-is-success,
response-get-object,
response-get-fragment.error-get-code,
error-get-message.form-get-data,
request-set-form-data.selection-get-frame-rect,
rect-get-left,
rect-get-width.closure-new,
closure-execute.Some commands work with multiple types. These use a
type parameter to specify which type to operate on, or a
return parameter to specify the result type.
For example,
var-set stores a value of any type. The
type parameter tells it what type the value is:
<button>Type parameter</button> <on click> <var-set name="count" value="0" type="number"></var-set> <var-set name="label" value="Items" type="string"></var-set> </on>
Commands like
selection-scope use a
return parameter to specify what type the inner commands will produce:
<button>Return parameter</button>
<on click>
<selection-scope next-sibling="div" return="string">
<selection-get-text>
</selection-scope>
<!-- String from scope is now on the stack -->
<debug-log>
</on>
<div>Hello</div>