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
|
Notification.requestPermission();
$.get("/api/cwd").done(cwd => {
$("#cwd").append(cwd[0]);
}).fail(e => notifyFail(e));
document.body.onkeydown = function (event) {
if (event.keyCode == 27)
hidePopup();
};
$("#create-project")[0].disabled = false;
let dependencies = [];
function getFlags() {
return "readme/" + $("#readme-flag")[0].checked
+ " dotty/" + $("#dotty-flag")[0].checked
+ " uberJar/" + $("#uberJar-flag")[0].checked
+ " wartremover/" + $("#wartremover-flag")[0].checked;
}
function createProject() {
let button = $("#create-project")[0];
let buttonText = button.innerHTML;
button.innerHTML = "...";
button.blur();
button.disabled = true;
$.post("/api/project", {
name: $("#name").val(),
pack: $("#package").val(),
dependencies: dependencies.length == 0 ? "" :
dependencies.map(l => l.group + "/" + l.artifact + "/" + l.version).reduce((a, b) => a + " " + b),
flags: getFlags()
}).done(() => {
notify("Done.");
}).fail(e =>
notifyFail(e)
).always(() => {
button.innerHTML = buttonText;
button.disabled = false;
});
}
function handleSearchInput(event) {
if (event.keyCode == 13)
search();
}
function search() {
let query = $("#query").val();
if (query) {
$.get("/api/dependency", { query: query }).done(data => {
let entries = data.response.docs.map(x => ({
group: x.g,
artifact: x.a
}));
showPopup(makeRowsFrom(entries, selectDependency));
}).fail(e => notifyFail(e));
document.activeElement.blur();
}
}
function selectDependency(selected) {
$.get("/api/dependency/version", { group: selected.group, artifact: selected.artifact }).done(data => {
let versions = data.response.docs.map(x => ({ version: x.v }));
$("#popup-table").html(makeRowsFrom(versions, function (version) {
selectDependencyVersion(selected.group, selected.artifact, version.version);
}));
}).fail(e => notifyFail(e));
}
function selectDependencyVersion(group, artifact, version) {
let dependency = { group: group, artifact: artifact, version: version };
dependencies.push(dependency);
let scalaName = artifact.match(/^(.+)_\d+\.\d+$/);
let name = scalaName && scalaName[1] ? scalaName[1] : artifact;
var depDiv = $("<div class='entry removable'>" + name + " " + version + "</div>");
depDiv.click(function () {
removeDependency(dependency, depDiv);
});
$("#dependencies").append(depDiv);
hidePopup();
}
function removeDependency(d, div) {
dependencies.splice(dependencies.indexOf(d), 1);
div.remove();
}
function showPopup(contents) {
$("#popup").show();
$("#popup-table").html(contents);
}
function hidePopup() {
$("#popup").hide();
$("#popup-table").html("");
}
function makeRowsFrom(results, rowAction) {
if (results.length == 0) {
return [];
} else {
let rows = [];
let row = $("<tr></tr>");
rows.push(row);
let fields = [];
for (let field in results[0])
if (results[0].hasOwnProperty(field)) {
fields.push(field);
$("<td>" + field + "</td>").appendTo(row);
}
results.forEach(result => {
let row = $("<tr></tr>");
row.click(function () {
rowAction(result);
});
rows.push(row);
fields.forEach(field => $("<td>" + result[field] + "</td>").appendTo(row));
});
return rows;
}
}
function notify(text, title) {
new Notification(title || "", { body: text });
}
function notifyFail(e) {
let head = e.status == 0 ? "Error" : e.status + " " + e.statusText;
let body = e.status == 0 ? "No response from UI server." : e.responseText;
notify(body, head);
}
|