Index: branches/5.3.x/core/admin_templates/js/forms.js =================================================================== diff -u -N -r15690 -r15902 --- branches/5.3.x/core/admin_templates/js/forms.js (.../forms.js) (revision 15690) +++ branches/5.3.x/core/admin_templates/js/forms.js (.../forms.js) (revision 15902) @@ -1,47 +1,101 @@ var last_shown_error = false; -var errors = new Object(); -var first_error = new Object(); -var fields = new Object(); -function show_form_error(prefix, field, sticky) -{ +var errors = {}; +var first_error = {}; +var fields = {}; + +function show_form_error(prefix, field, sticky) { if (isset(errors[prefix]) && isset(errors[prefix][field])) { span = document.getElementById('error_msg_'+prefix); span.innerHTML = fields[prefix][field] + ' - ' + errors[prefix][field]; - if (sticky) last_shown_error = field; + + if ( sticky ) { + last_shown_error = field; + } } } -function hide_form_error(prefix) -{ + +function hide_form_error(prefix) { span = document.getElementById('error_msg_'+prefix); - if (!span) return; + + if ( !span ) { + return; + } + span.innerHTML = '
'; + if (typeof(last_shown_error) != 'undefined' && last_shown_error) { show_form_error(prefix, last_shown_error); } } -function add_form_error(prefix, field, element, error_msg) { - if (error_msg != '') { + +function add_form_error(prefix, field, element, error_msg, block_name) { + if ( error_msg == '' ) { + // no error message - do nothing + return; + } + if (typeof(errors[prefix]) == 'undefined') { - errors[prefix] = new Object(); + errors[prefix] = {}; } + errors[prefix][field] = error_msg; - if (document.getElementById(element)) { + var $input_fields = $('#' + jq(element)); + + switch (block_name) { + case 'inp_edit_timezone': + $input_fields = $input_fields.add('#timezone_group'); + break; + + case 'cf:datetime': + case 'inp_edit_date_time': + $input_fields = $input_fields.add('#' + jq(element.replace(field, field + '_date'))); + $input_fields = $input_fields.add('#' + jq(element.replace(field, field + '_time'))); + break; + + case 'inp_edit_combo_target': + $input_fields = $input_fields.add('#' + jq(element.replace(field, field + 'Type'))); + break; + + case 'cf:multiselect': + case 'inp_edit_multioptions': + $input_fields = $('#' + jq(element) + '_select'); + break; + + case 'cf:checkbox': + case 'inp_edit_checkbox': + $input_fields = $('#_cb_' + jq(element)); + break; + + case 'cf:radio': + case 'inp_edit_radio': + case 'inp_edit_checkboxes': + $input_fields = $("input[id^='" + jq(element) + "_']"); + break; + + case 'inp_edit_weight': + $input_fields = $input_fields.add('#' + jq(element.replace(field, field + '_a'))); + $input_fields = $input_fields.add('#' + jq(element.replace(field, field + '_b'))); + break; + + case 'inp_edit_picker': + $input_fields = $('#' + jq(element) + '_selected'); + break; + + case 'inp_edit_cron_box': + $input_fields = $input_fields.add('#' + jq(element.replace(field, field + 'Hints'))); + break; + } + + if ( $input_fields.length > 0 ) { // some controls don't have element to focus on (e.g. swf uploader) - addEvent( - document.getElementById(element), - 'focus', - function() { - show_form_error(prefix, field, true) - } - ); - addEvent( - document.getElementById(element), - 'blur', - function() { - last_shown_error = false - } - ); + $input_fields.focus(function ($e) { + show_form_error(prefix, field, true); + }); + + $input_fields.blur(function ($e) { + last_shown_error = false; + }); } /*else { console.log('error: focusing failed for [', prefix, '.', field, '] = ', element); @@ -51,7 +105,6 @@ first_error[prefix] = [field, element]; } } -} function FCKeditor_OnComplete( editor ) { @@ -154,6 +207,19 @@ this.Resize(false); + this.displayFirstError(); + + if (_Simultaneous_Edit_Message != '') { + alert(_Simultaneous_Edit_Message); + } + + this.InitOnChange(); + + Application.processHooks('m:OnAfterFormInit'); + InitEditors(); +}; + +Form.displayFirstError = function () { if (isset(first_error)) { for (var i in first_error) { if (first_error[i] != false) { @@ -166,17 +232,8 @@ } } } +}; - if (_Simultanious_Edit_Message != '') { - alert(_Simultanious_Edit_Message); - } - - this.InitOnChange(); - - Application.processHooks('m:OnAfterFormInit'); - InitEditors(); -} - Form.InitOnChange = function() { var inputs = window.document.getElementsByTagName('INPUT'); @@ -192,12 +249,12 @@ addEvent(elem, elem.type=='button' ? 'click' : 'change', function() {Form.Changed()}); } } -} +}; Form.Changed = function() { this.HasChanged = true; -} +}; Form.addControl = function(id, options) { this.Controls.push(id); @@ -212,15 +269,15 @@ options['real_height'] = 0; this.Options[id] = options; // for future use // print_pre(this.Options[id]); -} +}; Form._parseSize = function ($size) { if ($size.toString().match(/^([\d]+)px$/)) { return parseInt(RegExp.$1); } return parseInt($size); -} +}; Form.Resize = function($init_done) { if (!this.Div) { @@ -313,7 +370,7 @@ // alert('h is: '+h+' min height is '+this.MinHeight+' MinControlsHeight is '+this.MinControlsHeight+' -> '+split+' to split between '+count); // print_pre(this.Controls) -} +}; Form.ResetHeights = function() { @@ -323,9 +380,8 @@ options.fixed = false; } this.FlexibleCount = this.Controls.length; -} +}; - // Enlarge heights when possible // Return any not split pixels number Form.SplitExtra = function(split) { @@ -367,7 +423,7 @@ added -= extra; } return split - added; -} +}; Form.SetMinHeights = function() { @@ -380,4 +436,4 @@ } } return used; -} +}; \ No newline at end of file