]>
Commit | Line | Data |
---|---|---|
af59614d MKG |
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.attr("checked"); | |
11 | ||
12 | self.closest("form") | |
13 | .find("table.collection input[type=checkbox]") | |
14 | .attr("disabled", checked ? "disabled" : ""); | |
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( 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 | }); |