(module autoform-jquery () (import chicken scheme data-structures) (use srfi-1 autoform) ;;; Alert messages (javascript-validation:int-only-message "Only numbers are allowed for this field.") (javascript-validation:float-only-message "Only numbers, dot and comma characters are allowed for this field.") (javascript-validation:date-format-message (string-append "The format for date fields is " (date-fields-format))) ;;; Common javascript stuff (javascript-validation:common " function isDigit (char) { var digits ='0123456789'; return digits.indexOf(char) != -1; }") ;;; Javascript validations (javascript-validation:int (string-append " function validateInteger (id) { var elt = $('#' + id); var v = elt.val(); var cur = v[v.length - 1]; if (!(isDigit(cur))) { elt.val(v.substring(0, v.length - 1)); alert('" (javascript-validation:int-only-message) "'); } }")) (javascript-validation:float (string-append " function validateFloat (id) { var elt = $('#' + id); var v = elt.val(); var cur = v[v.length - 1]; if (!((isDigit(cur) || cur == '.' || cur == ','))) { elt.val(v.substring(0, v.length - 1)); alert('" (javascript-validation:float-only-message) "'); } }")) (javascript-validation:date ;; FIXME (let ((slash-pos (filter-map (lambda (pos char) (and (char=? #\/ char) pos)) (iota (string-length (date-fields-format))) (string->list (date-fields-format))))) (string-append " function validateDate (id) { var slash_pos = [" (string-intersperse (map ->string slash-pos) ", ") "]; var elt = $('#' + id); var v = elt.val(); var pos = v.length-1; var cur = v[pos]; if (((slash_pos.indexOf(pos) != -1) && (cur != '/')) || (slash_pos.indexOf(pos) == -1 && (!(isDigit(cur))))) { alert('" (javascript-validation:date-format-message) "'); elt.val(v.substring(0, pos)); } }"))) (javascript-validation:observer (lambda (elt-id event action) (conc "$('#" elt-id "').bind('" (if (list event) (string-intersperse (map ->string event) " ") event) "', " action ");"))) (javascript-validation:highlight-missing "function (elt_id) { $('#' + elt_id + '_label').css('color', 'red'); }") (javascript-validation:missing-message "The highlighted missing fields must be filled.") (javascript-validation:form-submit (lambda (table fields) (let ((mandatory (mandatory-fields fields))) (conc " $('#" (form-id table) "').submit(function(){ var i; var mandatory = [" (string-intersperse (map (cut conc "'" <> "'") mandatory) ", ") "]; var missing = []; var current; for(i=0; i