Created
January 21, 2011 19:34
-
-
Save ebruchez/790257 to your computer and use it in GitHub Desktop.
XForms action in XML syntax and with tentative CoffeeScript syntax
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
instance = model.instances['fr-persistence-instance'] | |
resources = x.models['fr-resources-model'].vars['$fr-fr-resources'] | |
$('error', instance).replaceWith event.response-body | |
$('is-error', instance).replaceWith 'true' | |
x.message 'Error with submission: ' + event.submission-id, 'xxf:log-debug' | |
x.message event.response-body, 'xxf:log-debug' | |
switch event['error-type'] | |
when 'validation-error' | |
$('message', instance).replaceWith $('detail messages form-validation-error', resources) | |
$('#fr-message-validation-error').toggle() | |
model.dispatch 'fr-visit-alerts' | |
x.models['fr-sections-model'].dispatch 'fr-expand-all' | |
when 'xxforms-pending-uploads' | |
x.message resources.detail.messages['upload-in-progress'] | |
else | |
$('message', instance).replaceWith $('detail messages database-error', resources) | |
$('#fr-message-fatal-error').toggle() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
instance = model.instances['fr-persistence-instance'] | |
resources = x.models['fr-resources-model'].vars['$fr-fr-resources'] | |
instance.error = event.response-body | |
instance['is-error'] = 'true' | |
x.message 'Error with submission: ' + event.submission-id, 'xxf:log-debug' | |
x.message event.response-body, 'xxf:log-debug' | |
switch event['error-type'] | |
when 'validation-error' | |
instance.message = resources.detail.messages.form-validation-error | |
x.toggle 'fr-message-validation-error' | |
model.dispatch 'fr-visit-alerts' | |
x.models['fr-sections-model'].dispatch 'fr-expand-all' | |
when 'xxforms-pending-uploads' | |
x.message resources.detail.messages['upload-in-progress'] | |
else | |
instance.message = resources.detail.messages.database-error | |
x.toggle 'fr-message-fatal-error' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
val instance = model.instances("fr-persistence-instance") | |
val resources = models("fr-resources-model").vars("$fr-fr-resources") | |
instance \ "error" setvalue event.responseBody | |
instance \ "is-error" setvalue "true" | |
message("Error with submission: " + event.submissionId, "xxf:log-debug") | |
message(event("response-body"), "xxf:log-debug") | |
event("error-type") match { | |
case "validation-error" => | |
instance \ "message" setvalue (resources \ "detail" \ "messages" \ "form-validation-error") | |
toggle("fr-message-validation-error") | |
model.dispatch("fr-visit-alerts") | |
models("fr-sections-model").dispatch("fr-expand-all") | |
case "xxforms-pending-uploads" => | |
message(resources \ "detail" \ "messages" \ "upload-in-progress") | |
case _ => | |
instance \ "message" setvalue (resources \ "detail" \ "messages" \ "database-error") | |
toggle("fr-message-fatal-error") | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<xf:action ev:event="fr-submit-error"> | |
<!-- Remember there was an error --> | |
<xf:setvalue ref="instance('fr-persistence-instance')/error" value="event('response-body')"/> | |
<xf:setvalue ref="instance('fr-persistence-instance')/is-error">true</xf:setvalue> | |
<!-- Log error --> | |
<xf:message level="xxf:log-debug">Error with submission: <xf:output value="event('submission-id')"/></xf:message> | |
<xf:message level="xxf:log-debug"><xf:output value="event('response-body')"/></xf:message> | |
<!-- case validation-error => set error message and show validation error section in UI --> | |
<xf:action if="event('error-type') = 'validation-error'"> | |
<xf:setvalue ref="instance('fr-persistence-instance')/message" value="$fr-fr-resources/detail/messages/form-validation-error"/> | |
<xf:toggle case="fr-message-validation-error"/> | |
<!-- Mark all active alerts as visited --> | |
<xf:dispatch name="fr-visit-alerts" target="fr-persistence-model"/> | |
<!-- Open all sections --> | |
<xf:dispatch name="fr-expand-all" target="fr-sections-model"/> | |
</xf:action> | |
<!-- case xxforms-pending-uploads => display a modal message --> | |
<xf:action if="event('error-type') = 'xxforms-pending-uploads'"> | |
<xf:message model="fr-resources-model" value="$fr-fr-resources/detail/messages/upload-in-progress"/> | |
</xf:action> | |
<!-- case _ => set error message and show fatal error section in UI --> | |
<xf:action if="not(event('error-type') = ('validation-error', 'xxforms-pending-uploads'))"> | |
<xf:setvalue ref="instance('fr-persistence-instance')/message" value="$fr-fr-resources/detail/messages/database-error"/> | |
<xf:toggle case="fr-message-fatal-error"/> | |
</xf:action> | |
</xf:action> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
let $instance := xf:instance('fr-persistence-instance') | |
let $resources := xf:model('fr-resources-model', 'fr-fr-resources') | |
let $messages := $resources/detail/messages | |
return | |
( | |
replace value of node $instance/error with xf:event('response-body'), | |
replace value of node $instance/is-error with 'true', | |
xf:message( | |
('Error with submission: ', xf:event('submission-id'), 'xxf:log-debug') | |
'xxf:log-debug'), | |
xf:message(xf:event('response-body'), 'xxf:log-debug'), | |
switch ( xf:event('error-type') ) | |
case 'validation-error' return ( | |
replace value of node $instance/message with $messages/form-validation-error, | |
xf:toggle('fr-message-validation-error'), | |
xf:dispatch('fr-visit-alerts', xf:model('fr-persistence-model')), | |
xf:dispatch('fr-expand-all', xf:model('fr-sections-model')) | |
) | |
case 'xxforms-pending-uploads' return ( | |
xf:message($messages/upload-in-progress) | |
) | |
default return ( | |
replace value of node $instance/message with $messages/form-validation-error, | |
xf:toggle('fr-message-fatal-error') | |
) | |
) |
@ebruchez You're saying that model
could be automatically bound to an object representing the current model?
@avernet Yes, as if the enclosing xf:action
passed it as a function parameter.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@fgeorges Thanks for the XQuery example. It looks similar enough to the JS and CS examples. I put it up as a file a the top (not sure how I can allow others to edit/add files?).