diff options
Diffstat (limited to 'rt/share/static/js/late.js')
-rw-r--r-- | rt/share/static/js/late.js | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/rt/share/static/js/late.js b/rt/share/static/js/late.js new file mode 100644 index 000000000..92a827906 --- /dev/null +++ b/rt/share/static/js/late.js @@ -0,0 +1,39 @@ +// Lower the speed limit for hover intent event +jQuery.event.special.hover.speed = 80; // pixels per second + +jQuery(function() { sync_grouped_custom_fields() } ); +function sync_grouped_custom_fields() { + var all_inputs = jQuery("input,textarea,select"); + var parse_cf = /^Object-([\w:]+)-(\d*)-CustomField(?::\w+)?-(\d+)-(.*)$/; + all_inputs.each(function() { + var elem = jQuery(this); + var parsed = parse_cf.exec(elem.attr("name")); + if (parsed == null) + return; + if (/-Magic$/.test(parsed[4])) + return; + var name_filter_regex = new RegExp( + "^Object-"+parsed[1]+"-"+parsed[2]+ + "-CustomField(?::\\w+)?-"+parsed[3]+"-"+parsed[4]+"$" + ); + var update_elems = all_inputs.filter(function () { + return name_filter_regex.test(jQuery(this).attr("name")); + }).not(elem); + if (update_elems.length == 0) + return; + var trigger_func = function() { + var curval = elem.val(); + if ((elem.attr("type") == "checkbox") || (elem.attr("type") == "radio")) { + curval = [ ]; + jQuery('[name="'+elem.attr("name")+'"]:checked').each( function() { + curval.push( jQuery(this).val() ); + }); + } + update_elems.val(curval); + }; + if ((elem.attr("type") == "text") || (elem.attr("tagName") == "TEXTAREA")) + elem.keyup( trigger_func ); + else + elem.change( trigger_func ); + }); +} |