summaryrefslogtreecommitdiff
path: root/rt/share/static/js/event-registration.js
blob: 45958798ba31376ba4540d619893cb72e22bb680 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
// Disable chosing individual objects when a scrip is applied globally
jQuery(function() {
    var global_checkboxes = [
        "form[name=AddRemoveScrip] input[type=checkbox][name^=AddScrip-][value=0]",
        "form input[type=checkbox][name^=AddCustomField-][value=0]"
    ];
    jQuery(global_checkboxes.join(", "))
        .change(function(){
            var self    = jQuery(this);
            var checked = self.prop("checked");

            self.closest("form")
                .find("table.collection input[type=checkbox]")
                .prop("disabled", checked);
        });
});

// Replace user references in history with the HTML versions
function ReplaceUserReferences() {
    var users = jQuery(".user[data-replace=user]");
    var ids   = users.map(function(){
        return "id=" + encodeURIComponent(jQuery(this).attr("data-user-id"))
    }).toArray().join(";");

    if (!ids.length)
        return

    jQuery.get(
        RT.Config.WebPath + "/Helpers/UserInfo?" + ids,
        function(json) {
            users.each(function() {
                var user = jQuery(this);
                var uid  = user.attr("data-user-id");
                if (!json[uid])
                    return
                user.removeAttr("data-replace")
                    .html( jQuery(json[uid]._html).html() );
            });
        }
    );
}
jQuery(ReplaceUserReferences);

// Cascaded selects
jQuery(function() {
    jQuery("select.cascade-by-optgroup").each(function(){
        var name = this.name;
        if (!name) return;

        // Generate elements for cascading based on the master <select> ...
        var complete = jQuery(this)
            .clone(true, true)
            .attr("name", name + "-Complete")
            .attr("disabled", "disabled")
            .hide()
            .insertAfter(this);

        var groups = jQuery(this)
            .clone(true, true)
            .attr("name", name + "-Groups")
            .find("option").remove().end()
            .find("optgroup").replaceWith(function(){
                return jQuery("<option>").val(this.label).text(this.label);
            }).end()
            .prepend( complete.find("option[value='']") )
            .insertBefore(this);

        // Synchronize the <select> we just generated
        var selected = jQuery("option[selected]", this).parent().attr("label");
        jQuery('option[value="' + selected + '"]', groups).attr("selected", "selected");

        // Wire it all up
        groups.change(function(){
            var name     = this.name.replace(/-Groups$/, '');
            var field    = jQuery(this);
            var subfield = field.next("select[name=" + name + "]");
            var complete = subfield.next("select[name=" + name + "-Complete]");
            var value    = field.val();
            filter_cascade_select( subfield[0], complete[0], value, true );
        }).change();
    });
});

jQuery( function() {
    jQuery("input[type=file]").change( function() {
        var input = jQuery(this);
        var warning = input.next(".invalid");

        if ( !input.val().match(/"/) ) {
            warning.hide();
        } else {
            if (warning.length) {
                warning.show();
            } else {
                input.val("");
                jQuery("<span class='invalid'>")
                    .text(loc_key("quote_in_filename"))
                    .insertAfter(input);
            }
        }
    });
});

jQuery(function() {
    jQuery("#UpdateType").change(function(ev) {
        jQuery(".messagebox-container")
            .removeClass("action-response action-private")
            .addClass("action-"+ev.target.value);
    });
});