Buttons
Button definitions
are used often in other UI definitions. For example module sections can define buttons and form actions extend them.
Understanding the anatomy and general behavior of button definitions is integral in working proficiently with UI builders.
Introduction
This section will introduce you to buttons and how to define them.
Defining Buttons
Buttons are defined by simple arrays. These buttons are ran through various processing and is used to hydrate
instances of the \Anomaly\Streams\Platform\Ui\Button\Button
class for use by the Streams Platform.
The idea behind defining buttons is that you can provide minimal information about a button and the Streams Platform can do the rest for you. Saving you from having to define the instance yourself with all required parameters.
Button definitions are simply an array:
'buttons' => [
'create' => [
'url' => '/admin/example/test/create',
'text' => 'streams::button.create',
'icon' => 'fa asterisk',
'type' => 'success',
],
]
The Button Definition
Button definitions are ran through valuation
, evaluation
, and resolving
, as well as other processes like guessing. These are the simple property descriptions for buttons.
Properties
Key | Required | Type | Default | Description |
---|---|---|---|---|
$url |
false |
string |
{section.path}/{button.slug}/{entry.id} |
The HREF attribute of the button. |
$button |
false |
string |
Anomaly\Streams\Platform\Ui\Button |
The target button class to build. |
$text |
false |
string |
{vendor}.module.{module}::button.{button}.title |
The button text. |
$icon |
false |
string |
null |
A registered icon string or icon class. |
$class |
false |
string |
null |
The CSS class to append ot the button class attribute. |
$type |
false |
string |
default |
The button type or context. Bootstrap state colors (primary, success, etc) are supported by default. |
$size |
false |
string |
md |
The button size. Bootstrap button sized are supported by default. |
$attributes |
false |
string |
null |
An array of |
$permission |
false |
string |
null |
The permission key required to display the button. |
$disabled |
false |
boolean |
false |
Determines whether the button will be disabled or not. |
$enabled |
false |
boolean |
true |
Determines whether the button will be rendered or not. |
$dropdown |
false |
array |
null |
An array of item definitions. See below for more information. |
$position |
false |
string |
left |
The position of the button's dropdown. |
ButtonRegistry::register()
The register
method adds a globally available button definition.
Returns: Anomaly\Streams\Platform\Ui\Button\ButtonRegistry
Arguments
Key | Required | Type | Default | Description |
---|---|---|---|---|
$button |
true |
string |
none |
The button key. |
$parameters |
true |
array |
none |
The registered button parameters. |
Example
$registery->register(
'purchase',
[
'type' => 'success',
'text' => 'Purchase',
'icon' => 'fa fa-credit-card',
'href' => 'checkout/{entry.id}',
]
);
The Dropdown Definition
The button dropdown
property can be used to define a dropdown menu for the button.
'buttons' => [
'save' => [
'dropdown' => [
[
'icon' => 'save',
'text' => 'Save and exit',
],
[
'icon' => 'fa fa-sign-out',
'text' => 'Save and continue',
]
]
]
]
Properties
Key | Required | Type | Default | Description |
---|---|---|---|---|
$text |
true |
string |
null |
The text or translation key. |
$icon |
false |
string |
null |
A registered icon string or icon class. |
$url |
true |
string |
null |
The button URL. This gets pushed into |
The Button Registry
Below are the basic registered buttons. Some definitions like form actions that extend buttons may add to these or use them in their own registry
. In such cases they will be documented separately.
Registered buttons can be found in Anomaly\Streams\Platform\Ui\Button\ButtonRegistry
.
/**
* Default Buttons
*/
'default' => [
'type' => 'default'
],
'cancel' => [
'text' => 'streams::button.cancel',
'type' => 'default'
],
/**
* Primary Buttons
*/
'options' => [
'text' => 'streams::button.options',
'type' => 'primary',
'icon' => 'cog',
],
/**
* Success Buttons
*/
'green' => [
'type' => 'success'
],
'success' => [
'icon' => 'check',
'type' => 'success'
],
'save' => [
'text' => 'streams::button.save',
'icon' => 'save',
'type' => 'success'
],
'update' => [
'text' => 'streams::button.save',
'icon' => 'save',
'type' => 'success'
],
'create' => [
'text' => 'streams::button.create',
'icon' => 'fa fa-asterisk',
'type' => 'success'
],
'new' => [
'text' => 'streams::button.new',
'icon' => 'fa fa-plus',
'type' => 'success'
],
'new_field' => [
'text' => 'streams::button.new_field',
'icon' => 'fa fa-plus',
'type' => 'success'
],
'add' => [
'text' => 'streams::button.add',
'icon' => 'fa fa-plus',
'type' => 'success'
],
'add_field' => [
'text' => 'streams::button.add_field',
'icon' => 'fa fa-plus',
'type' => 'success'
],
'assign_fields' => [
'text' => 'streams::button.assign_fields',
'icon' => 'fa fa-plus',
'type' => 'success'
],
'send' => [
'text' => 'streams::button.send',
'icon' => 'envelope',
'type' => 'success'
],
'submit' => [
'text' => 'streams::button.submit',
'type' => 'success'
],
'install' => [
'text' => 'streams::button.install',
'icon' => 'download',
'type' => 'success'
],
'entries' => [
'text' => 'streams::button.entries',
'icon' => 'list-ol',
'type' => 'success'
],
'done' => [
'text' => 'streams::button.done',
'type' => 'success',
'icon' => 'check'
],
'select' => [
'text' => 'streams::button.select',
'type' => 'success',
'icon' => 'check'
],
'restore' => [
'text' => 'streams::button.restore',
'type' => 'success',
'icon' => 'repeat'
],
'finish' => [
'text' => 'streams::button.finish',
'type' => 'success',
'icon' => 'check'
],
'finished' => [
'text' => 'streams::button.finished',
'type' => 'success',
'icon' => 'check'
],
/**
* Info Buttons
*/
'blue' => [
'type' => 'info'
],
'info' => [
'type' => 'info'
],
'information' => [
'text' => 'streams::button.info',
'icon' => 'fa fa-info',
'type' => 'info'
],
'help' => [
'icon' => 'circle-question-mark',
'text' => 'streams::button.help',
'type' => 'info',
'data-toggle' => 'modal',
'data-target' => '#modal'
],
'view' => [
'text' => 'streams::button.view',
'icon' => 'fa fa-eye',
'type' => 'info'
],
'export' => [
'text' => 'streams::button.export',
'icon' => 'download',
'type' => 'info'
],
'fields' => [
'text' => 'streams::button.fields',
'icon' => 'list-alt',
'type' => 'info'
],
'assignments' => [
'text' => 'streams::button.assignments',
'icon' => 'list-alt',
'type' => 'info'
],
'settings' => [
'text' => 'streams::button.settings',
'type' => 'info',
'icon' => 'cog',
],
'configure' => [
'text' => 'streams::button.configure',
'icon' => 'wrench',
'type' => 'info'
],
/**
* Warning Buttons
*/
'orange' => [
'type' => 'warning'
],
'warning' => [
'icon' => 'warning',
'type' => 'warning'
],
'edit' => [
'text' => 'streams::button.edit',
'icon' => 'pencil',
'type' => 'warning'
],
/**
* Danger Buttons
*/
'red' => [
'type' => 'danger'
],
'danger' => [
'icon' => 'fa fa-exclamation-circle',
'type' => 'danger'
],
'remove' => [
'text' => 'streams::button.remove',
'type' => 'danger',
'icon' => 'ban'
],
'delete' => [
'icon' => 'trash',
'type' => 'danger',
'text' => 'streams::button.delete',
'attributes' => [
'data-toggle' => 'confirm',
'data-message' => 'streams::message.confirm_delete'
]
],
'prompt' => [
'icon' => 'trash',
'type' => 'danger',
'button' => 'delete',
'text' => 'streams::button.delete',
'attributes' => [
'data-match' => 'yes',
'data-toggle' => 'prompt',
'data-message' => 'streams::message.prompt_delete'
]
],
'uninstall' => [
'type' => 'danger',
'icon' => 'times-circle',
'text' => 'streams::button.uninstall',
'attributes' => [
'data-toggle' => 'confirm',
'data-message' => 'streams::message.confirm_uninstall'
]
]
Using Registered Buttons
There are a number of buttons registered in the \Anomaly\Streams\Platform\Ui\Button\ButtonRegistry
class. To use any of these buttons simply include their string slug and the button's registered definitions will be merged into your own.
'buttons' => [
'save',
'delete' => [
'text' => 'Delete me!', // Overrides the default "Delete" text.
],
]
The above save
and delete
buttons are registered as:
'buttons' => [
'save' => [
'icon' => 'save',
'type' => 'success',
'text' => 'streams::button.save',
],
'delete' => [
'icon' => 'trash',
'type' => 'danger',
'text' => 'streams::button.delete',
'attributes' => [
'data-toggle' => 'confirm',
'data-message' => 'streams::message.confirm_delete'
]
],
]
Note that the delete text will be overridden since you defined your own text.