rt 4.2.16
[freeside.git] / rt / share / static / js / event-registration.js
1 // Disable chosing individual objects when a scrip is applied globally
2 jQuery(function() {
3     var global_checkboxes = [
4         "form[name=AddRemoveScrip] input[type=checkbox][name^=AddScrip-][value=0]",
5         "form input[type=checkbox][name^=AddCustomField-][value=0]"
6     ];
7     jQuery(global_checkboxes.join(", "))
8         .change(function(){
9             var self    = jQuery(this);
10             var checked = self.prop("checked");
11
12             self.closest("form")
13                 .find("table.collection input[type=checkbox]")
14                 .prop("disabled", checked);
15         });
16 });
17
18 // Replace user references in history with the HTML versions
19 function ReplaceUserReferences() {
20     var users = jQuery(".user[data-replace=user]");
21     var ids   = users.map(function(){
22         return "id=" + encodeURIComponent(jQuery(this).attr("data-user-id"))
23     }).toArray().join(";");
24
25     if (!ids.length)
26         return
27
28     jQuery.get(
29         RT.Config.WebPath + "/Helpers/UserInfo?" + ids,
30         function(json) {
31             users.each(function() {
32                 var user = jQuery(this);
33                 var uid  = user.attr("data-user-id");
34                 if (!json[uid])
35                     return
36                 user.removeAttr("data-replace")
37                     .html( jQuery(json[uid]._html).html() );
38             });
39         }
40     );
41 }
42 jQuery(ReplaceUserReferences);
43
44 // Cascaded selects
45 jQuery(function() {
46     jQuery("select.cascade-by-optgroup").each(function(){
47         var name = this.name;
48         if (!name) return;
49
50         // Generate elements for cascading based on the master <select> ...
51         var complete = jQuery(this)
52             .clone(true, true)
53             .attr("name", name + "-Complete")
54             .attr("disabled", "disabled")
55             .hide()
56             .insertAfter(this);
57
58         var groups = jQuery(this)
59             .clone(true, true)
60             .attr("name", name + "-Groups")
61             .find("option").remove().end()
62             .find("optgroup").replaceWith(function(){
63                 return jQuery("<option>").val(this.label).text(this.label);
64             }).end()
65             .prepend( complete.find("option[value='']") )
66             .insertBefore(this);
67
68         // Synchronize the <select> we just generated
69         var selected = jQuery("option[selected]", this).parent().attr("label");
70         jQuery('option[value="' + selected + '"]', groups).attr("selected", "selected");
71
72         // Wire it all up
73         groups.change(function(){
74             var name     = this.name.replace(/-Groups$/, '');
75             var field    = jQuery(this);
76             var subfield = field.next("select[name=" + name + "]");
77             var complete = subfield.next("select[name=" + name + "-Complete]");
78             var value    = field.val();
79             filter_cascade_select( subfield[0], complete[0], value, true );
80         }).change();
81     });
82 });
83
84 jQuery( function() {
85     jQuery("input[type=file]").change( function() {
86         var input = jQuery(this);
87         var warning = input.next(".invalid");
88
89         if ( !input.val().match(/"/) ) {
90             warning.hide();
91         } else {
92             if (warning.length) {
93                 warning.show();
94             } else {
95                 input.val("");
96                 jQuery("<span class='invalid'>")
97                     .text(loc_key("quote_in_filename"))
98                     .insertAfter(input);
99             }
100         }
101     });
102 });
103
104 jQuery(function() {
105     jQuery("#UpdateType").change(function(ev) {
106         jQuery(".messagebox-container")
107             .removeClass("action-response action-private")
108             .addClass("action-"+ev.target.value);
109     });
110 });