Index: branches/1.0.x/inc/js/form_manager.js =================================================================== diff -u -N -r14907 -r15356 --- branches/1.0.x/inc/js/form_manager.js (.../form_manager.js) (revision 14907) +++ branches/1.0.x/inc/js/form_manager.js (.../form_manager.js) (revision 15356) @@ -11,6 +11,7 @@ this.pendingChecks = {}; this.fields = {}; + this.errors = {}; this.fieldTypes = {}; this.forms = {}; this.fieldWatermarks = {}; @@ -106,6 +107,7 @@ FormManager.registerForm = function ($settings) { var $defaults = { url: false, // url for form submission + template: '', // template to use instead of empty string prefix: '', // unit prefix, used in the form enabled: true, // form submit enabled enabledTimer: null, // timer that performs form-resubmit countdown @@ -130,14 +132,22 @@ $( this.fields[$settings.prefix] ).each( function () { - $( $me.getBlurFields($settings.prefix, this) ).blur( + var $blur_fields = $( $me.getBlurFields($settings.prefix, this) ), + $event_name = $blur_fields.length == 1 ? 'blur' : 'click'; + + $( $me.getBlurFields($settings.prefix, this) )[$event_name]( function ($e) { $me.checkField(this); } ); } ); + for (var $error_field in this.errors[$settings.prefix]) { + this.setFieldStatus($settings.prefix, $error_field, this.errors[$settings.prefix][$error_field]); + } + + // custom: begin $('input[title], select[title], textarea[title]', '#' + this.forms[$settings.prefix].form_id).qtip( { style: { @@ -164,6 +174,7 @@ } } ); + // custom: end } FormManager.getURL = function ($prefix, $template, $event, $params) { @@ -174,7 +185,7 @@ } if ($template === undefined) { - $template = ''; + $template = this.form_param($prefix, 'template'); } $url = $url.replace('#TEMPLATE#', $template); @@ -208,7 +219,7 @@ if ($data.status == 'OK') { var $next_template = this.getNextTemplate($prefix, $data); - if ( $next_template || $data.do_refresh ) { + if ( $next_template || $data.do_refresh || $data.redirect_to ) { var $before_close = this.getFormParamOverride($prefix, 'before_close', $add_params); if ( $.isFunction($before_close) ) { @@ -223,6 +234,10 @@ // refresh whole page window.location.href = window.location.href; } + else if ( $data.redirect_to ) { + // redirect to given page + window.location.href = $data.redirect_to; + } } else { // close form without refreshing the page @@ -260,6 +275,8 @@ $fields = []; } + this.errors[$prefix] = {}; + for (var $i = 0; $i < $fields.length; $i++) { this.setFieldStatus($prefix, $fields[$i]); } @@ -286,8 +303,21 @@ var field_cell = this.getCell($prefix, $field_name, 'field'); var status_cell = this.getCell($prefix, $field_name, 'status'); - if (!field_cell) { - alert('Error field "' + $field_name + '" missing.'); + if ( $error_msg === undefined || !$error_msg ) { + $error_msg = ''; + } + + if ( !field_cell ) { + if (!this.errors[$prefix]) { + this.errors[$prefix] = {}; + } + + this.errors[$prefix][$field_name] = $error_msg; + + /*if(typeof console === 'object') { + console.log('FormManager: Error field "' + $field_name + '" missing.'); + }*/ + return ; } @@ -350,12 +380,12 @@ var $request = $.post( this.getURL($prefix, undefined, 'OnValidateField') + '&field=' + encodeURIComponent($field) + '&' + $input.name + '=' + encodeURIComponent($input.value), - $(form).serialize(), + this._getFormFields($prefix), function ($data) { $data = eval('(' + $data + ')'); $me.setFieldStatus($prefix, $field, $data.status == 'OK' ? undefined : $data.status); - $("input[type='submit']", form).attr('disabled', !$.isArray($data.other_errors) ); + $("input[type='submit']", form).attr('disabled', !$.isArray($data.other_errors) ); // custom } ); @@ -431,32 +461,36 @@ } FormManager._getFormFields = function ($prefix) { - var $fields = this.fields[$prefix]; + var $old_values = {}, + $fields = this.fields[$prefix]; if (typeof($fields) == 'undefined') { $fields = []; } - // remove watermakrs from input fields + // remove watermarks from input fields for (var $i = 0; $i < $fields.length; $i++) { - var $control = this.getField($prefix, $fields[$i]); - var $watermark = this.fieldWatermarks[ $prefix + '_' + $fields[$i] ]; + var $control = this.getField($prefix, $fields[$i]), + $watermark = this.fieldWatermarks[ $prefix + '_' + $fields[$i] ]; - if ($control && $watermark !== undefined && $control.value == $watermark) { - $control.value = ''; + if ( $control ) { + $old_values[$fields[$i]] = $control.value; + + if ( $watermark !== undefined && $control.value == $watermark ) { + $control.value = ''; + } } } - var form = document.getElementById( this.form_param($prefix, 'form_id') ); - var $form_fields = $(form).serialize(); + var form = document.getElementById( this.form_param($prefix, 'form_id')), + $form_fields = $(form).serialize(); - // restore watermarks in input fields + // restore original values into input fields for (var $i = 0; $i < $fields.length; $i++) { var $control = this.getField($prefix, $fields[$i]); - var $watermark = this.fieldWatermarks[$prefix + '_' + $fields[$i]]; - if ($control && $watermark !== undefined && !$control.value) { - $control.value = $watermark; + if ( $control ) { + $control.value = $old_values[$fields[$i]]; } } @@ -508,7 +542,7 @@ this.cancelXHRRequests(); $.post( - this.getURL( $prefix, '', this.form_param($prefix, 'save_event') ), + this.getURL( $prefix, undefined, this.form_param($prefix, 'save_event') ), this._getFormFields($prefix), function ($data) { var $redirect = TB.parseRedirect($data); @@ -530,6 +564,8 @@ for (var $prefix in this.forms) { var $before_close = this.form_param($prefix, 'before_close'); + this.clearErrors($prefix); + if ( $.isFunction($before_close) ) { $before_close.call(this, {}, {}); }