aboutsummaryrefslogtreecommitdiff
path: root/lava_scheduler_app/static/lava_scheduler_app/js/job-submit.js
blob: 1ca8fc72ac8d392ade47ae15e061087817d53198 (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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
beautify_options = {
    "brace_style": "expand"
}

$("#validate").click(function(){
    $("#busyIndicator").show(); 
    validate_input($("#json-input").val());
    $("#busyIndicator").hide(); 
});

$(document).ajaxStart(function () {
    $('#busyIndicator').show();
}).ajaxStop(function () {
    $('#busyIndicator').hide();
});

$(window).ready(
    function () {
        $("#json-input").linedtextarea();

        $("#json-input").bind('paste', function() {
            // Need a timeout since paste event does not give the content
            // of the clipboard.
            setTimeout(function(){
                validate_input($("#json-input").val());
            },100);
        });

        $("#json-input").keypress(function() {
            $("#submit").attr("disabled", "disabled");
            $("#json-valid-container").hide();
         });

        $("#submit").attr("disabled", "disabled");

        validate_input($("#json-input").val());
    });

validate_input = function(json_input) {

    if ($("#json-input").val() != "") {
        if (is_url($("#json-input").val().split("\n"))) {
            load_url();
        } else {
            $("#json-input").val(js_beautify(json_input, beautify_options));
            validate_job_data(json_input);
        }
    }
}

load_url = function() {
    // Loads JSON content if URL is provided in the json text area.
    if ($("#json-input").val().split("\n").length == 1) {
        $.ajax({
            type: "POST",
            url: remote_json_url,
            data: {
                "url": $("#json-input").val().trim(),
                "csrfmiddlewaretoken": $("[name='csrfmiddlewaretoken']").val()
            },
            success: function(data) {
                try {
                    $.parseJSON(data);
                    $("#json-input").val(js_beautify(data, beautify_options));
                    validate_job_data(data);
                } catch (e) {
                    $("#json-valid-container").html("Invalid JSON: " + data);
                    valid_json_css(false);
                    $("#submit").attr("disabled", "disabled");
                }
            }});
    }
}

validate_job_data = function(data) {
    $.post(window.location.pathname,
           {"json-input": data,
            "csrfmiddlewaretoken": $("[name='csrfmiddlewaretoken']").val()},
           function(data) {
               if (data == "success") {
                   $("#json-valid-container").html("Valid JSON.");
                   valid_json_css(true);
                   $("#submit").removeAttr("disabled");
                   unselect_error_line();
               } else {
                   $("#json-valid-container").html(
                       data.replace("[u'", "").replace("']", "").
                           replace('[u"', "").replace('"]', ""));
                   valid_json_css(false);
                   $("#submit").attr("disabled", "disabled");
                   select_error_line(data);
               }
           }, "json");
}

valid_json_css = function(success) {
    // Updates the css of the json validation container with appropriate msg.
    if (success) {
        $("#json-valid-container").css("backgound-color", "#50ef53");
        $("#json-valid-container").css("color", "#139a16");
        $("#json-valid-container").css("border-color", "#139a16");
        $("#json-valid-container").show();
    } else {
        $("#json-valid-container").css("backgound-color", "#ff8383");
        $("#json-valid-container").css("color", "#da110a");
        $("#json-valid-container").css("border-color", "#da110a");
        $("#json-valid-container").show();
    }
}

unselect_error_line = function() {
    // Unselect any potential previously selected lines.
    $(".lineno").removeClass("lineselect");
}

select_error_line = function(error) {
    // Selects the appropriate line in text area based on the parsed error msg.
    line_string = error.split(": ")[1];
    line_number = parseInt(line_string.split(" ")[1]);

    $(".lineno").removeClass("lineselect");
    $("#lineno"+line_number).addClass("lineselect");

    // Scroll the textarea to the highlighted line.
    $("#json-input").scrollTop(
        line_number * (parseInt($("#lineno1").css(
            "height")) - 1) - ($("#json-input").height() / 2));
}

is_url = function (str) {
    var regexp = /^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/
    return regexp.test(str);
}