The alert dialog allows you to build simple dialogs for those cases where you need to inform users of something that happened, or ask a question which can be answered by a yes or a no .
Let's assume that you want to ask a yes/no question which produces a dialog as shown below, and that you want to react to users choosing Yes .
First declare the dialog, with:
You gave an id to the dialog (overwrite-file-dialog
).
You defined what the dialog title and message are with <fr:label>
and <fr:message>
.
You use the <fr:negative-choice>
and <fr:positive-choice>
elements to indicate which buttons you want to have, and in which order they should be shown.
You placed an event handler inside the <fr:positive-choice``>
, which will run when/if users press the Yes button.
You open this dialog by dispatching the event fr-show
to the dialog:
The alert dialog supports 3 buttons, that correspond to a positive choice , a negative choice , and a neutral choice . Each one has a default label and a default icon, as shown in the table below. For each button, you can:
Override the label by placing your own <fr:label>
inside the button element. For instance, you would change the label for positive choice from Yes to OK and for the negative choice from No to Cancel with:
Override the icon shown inside the button with CSS. You will find an <xhtml:span>
with the class indicated in the table below around each button, which allows you to have a different style depending on the button type. For instance, if you can use the following CSS rule to remove the icon for the positive choice button:
Element
Default representation
CSS class
<fr:positive-choice>
xbl-fr-alert-dialog-positive
<fr:negative-choice>
xbl-fr-alert-dialog-negative
<fr:neutral-choice>
xbl-fr-alert-dialog-neutral
In most cases, you will be using either the positive and negative choice together, or the neutral choice alone. You can use the 3 buttons at the same time, to create a Yes-No-Cancel type of dialog. In this case however, you should consider giving labels to buttons that more description than Yes-No-Cancel . For instance, if you want to ask users whether they want to leave this form without saving, you could label the buttons Save data , Discard data , Continue editing .
You specify the actions running upon a button being pressed by either:
Use inline actions – Placing the actions inside the <fr:``positive-choice``>
or or , and run them on the DOMActivate
event, as done in the example above.
Use a "callback" – When opening the alert dialog, passing the id of an element to which the dialog will dispatch an event upon a button being pressed. For instance you would open the dialog with:
You pass the element id using the context property named positive-targetid
, negative-targetid
, or neutral-targetid
. Then, the alert dialog dispatches an event named fr-positive
, or fr-negative
, or fr-neutral
to that element. This second technique is particularly useful when you want to have one instance of an alert dialog that you want to reuse from the multiple places in your form.
Keeping context information – When opening the dialog you can pass an optional context property named context
; the value of this property must be a string, and it will be passed back to your handler for fr-positive
, or fr-negative
, or fr-neutral
. This is particularly useful when you want to "forward" an event property to your custom handler. For instance you can open the dialog with:
And then in your handler access the value you originally passed, as in:
NOTE: Before Orbeon Forms 4.0, use xxf:context
instead of xf:property
.
Instead of specifying an inline message with fr:message
, you can pass it dynamically when opening the dialog:
NOTE: Before Orbeon Forms 4.0, use xxf:context
instead of xf:property
.
Depending on the number of buttons you place in your dialog, a different icon is used next to the message. Just like icons in buttons, you can change the icon by overriding the default CSS:
When you have 2 or 3 buttons, the dialog is considered to be a question. The CSS class is xbl-fr-alert-dialog-question
and the dialog looks like:
When you have 1 button, the dialog is considered to be informational. The CSS class is xbl-fr-alert-dialog-info
and the dialog looks like: