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
|
import {Injectable} from "angular2/core";
import {Http, Response, Headers, RequestOptions, URLSearchParams} from "angular2/http";
import {Observable} from "rxjs/Observable";
import {EditingData} from "./editing-data.service";
export class Compiler {
public id: string;
public version: string;
public version_command: string;
public commandline: string[];
constructor() { }
}
export class Result {
constructor(
public compiler: Compiler,
public result: number,
public exit: number,
public elapsed: number,
public message: string,
public output: any[],
public _: any,
public truncated: boolean) { }
public static compareOutput(a: Result, b: Result) {
return a.result === b.result &&
a.exit === b.exit &&
a.message === b.message &&
a.output && b.output &&
a.output.every((c, i) => b.output[i] && c[0] === b.output[i][0] && c[1] === b.output[i][1]) &&
a.truncated === b.truncated;
}
}
export class Snippet {
constructor(
public id: string,
public lang: string,
public code: string,
public created: number,
public results: Result[]) { }
}
@Injectable()
export class SnippetService {
constructor(private http: Http) {}
getSnippet(id: string) {
return this.http.get("/api/snippet/" + id)
.map(res => <Snippet>res.json())
.catch(this.handleError);
}
createSnippet(edit: EditingData) {
const data = {
lang: edit.lang,
code: edit.code
};
return this.http.post("/api/snippet/new", this.urlEncode(data))
.map(res => <Snippet>res.json())
.catch(this.handleError);
}
runSnippet(snip: Snippet, comp: Compiler) {
const data = {
sid: snip.id,
cid: comp.id
};
return this.http.post("/api/snippet/run", this.urlEncode(data))
.map(res => <Result>res.json())
.catch(this.handleError);
}
private handleError (error: Response) {
console.error(error);
return Observable.throw(error.json().error || "Server error");
}
private urlEncode(obj: Object): string {
let out = "";
for (let key in obj) {
const c = encodeURIComponent(key) + "=" + encodeURIComponent(obj[key]);
if (out === "")
out = c;
else
out += "&" + c;
}
return out;
}
}
|