Skip to content

Commit 29f359e

Browse files
committed
added mysql support
1 parent bd19df5 commit 29f359e

File tree

15 files changed

+247
-57
lines changed

15 files changed

+247
-57
lines changed

app/helpers/json-to-table.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { helper } from '@ember/component/helper';
2+
import convertToTable from '../util/json-to-table'; // Ensure correct path
3+
4+
export default helper(function jsonToTable([data]) {
5+
return convertToTable(data);
6+
});

app/pods/components/code-editor-component/template.hbs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
</div>
1919
{{/if}}
2020
<SubmissionResult
21+
@allowedLanguages={{contest.allowedLanguages}}
2122
@fullScreen={{fullScreen}}
2223
@judgeResult={{if (not submission.codeTaskGroup.isRunning) lastResult}} />
2324
</div>

app/pods/components/code-window/component.js

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
import Component from '@ember/component';
22
import { action, computed } from '@ember/object';
3+
import { inject as service } from '@ember/service';
34

45
export default class CodeWindowComponent extends Component {
6+
@service('language-selection') languageSelection;
7+
58
isLanguageSelectOpen = false
69
customInputOpen = true
710
customInput = ''
@@ -48,9 +51,15 @@ export default class CodeWindowComponent extends Component {
4851
code: "csharp",
4952
mode: "csharp",
5053
source: ""
54+
},
55+
{
56+
name: "Mysql",
57+
code: "mysql",
58+
mode: "mysql",
59+
source: ""
5160
}
5261
]
53-
62+
5463
setSubmission = () => {
5564
this.set('selectedLanguage', this.languageSpecs.find(spec => spec.code === this.submission.language))
5665
this.set('selectedLanguage.source', window.atob(this.submission.solution.source))
@@ -80,11 +89,10 @@ export default class CodeWindowComponent extends Component {
8089

8190
@action
8291
selectLanguage(languageCode) {
83-
// console.log(languageCode)
84-
this.set('selectedLanguage', this.get('languageSpecs').find((spec) => {
85-
return spec.code === languageCode
86-
}))
87-
this.trigger("restoreCodeFromStorage")
92+
let selectedLanguage = this.languageSpecs.find((spec) => spec.code === languageCode);
93+
this.set('selectedLanguage', selectedLanguage);
94+
this.languageSelection.set('selectedLanguage', selectedLanguage);
95+
this.trigger("restoreCodeFromStorage");
8896
}
8997

9098
@action
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,31 @@
11
import Component from '@ember/component';
2+
import { inject as service } from '@ember/service';
3+
import {jsonToTable} from '../../../util/json-to-table'
24

35
export default Component.extend({
6+
languageSelection: service('language-selection'),
7+
8+
init() {
9+
this._super(...arguments);
10+
11+
12+
13+
let contest = this.get('contest');
14+
// if (contest) {
15+
16+
// if (contest.allowedLanguages) {
17+
// console.log('Allowed languages:', contest.allowedLanguages);
18+
// } else {
19+
// console.log('No allowed languages found for the contest');
20+
// }
21+
// } else {
22+
// console.log('Contest object is undefined');
23+
// }
24+
},
25+
26+
jsonToTable(data) {
27+
const table = jsonToTable(data);
28+
// console.log('jsonToTable output:', table);
29+
return table;
30+
}
431
});
Lines changed: 34 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,52 @@
1+
2+
{{log problem}}
13
<div class="py-4">
2-
<p>
3-
{{markdown-to-html problem.details.description}}
4-
</p>
4+
<p>{{markdown-to-html problem.details.description}}</p>
5+
56
<div class="extra-bold">Input Format</div>
6-
<p>
7-
{{markdown-to-html problem.details.input_format}}
8-
</p>
7+
{{#if (includes contest.allowedLanguages "mysql")}}
8+
<pre>{{json-to-table problem.details.input_format}}</pre>
9+
{{else}}
10+
<p>{{problem.details.input_format}}</p>
11+
{{/if}}
12+
913
<div class="extra-bold">Constraints</div>
1014
<div class="bg-grey br-5 w-60 px-4 py-2 my-2">
11-
<p>
12-
{{markdown-to-html problem.details.constraints}}
13-
</p>
15+
<p>{{markdown-to-html problem.details.constraints}}</p>
1416
</div>
17+
1518
<div class="extra-bold">Output Format</div>
16-
<p>
17-
{{markdown-to-html problem.details.output_format}}
18-
</p>
19+
{{#if (includes contest.allowedLanguages "mysql")}}
20+
<pre>{{json-to-table problem.details.output_format}}</pre>
21+
{{else}}
22+
<p>{{problem.details.output_format}}</p>
23+
{{/if}}
24+
25+
1926
<div class="extra-bold">Sample Input</div>
2027
<div class="bg-grey br-5 w-60 px-4 py-2 my-2">
21-
<pre>{{problem.details.sample_input}}</pre>
28+
{{#if (includes contest.allowedLanguages "mysql")}}
29+
<pre>{{json-to-table problem.details.sample_input}}</pre>
30+
{{else}}
31+
<p>{{problem.details.sample_input}}</p>
32+
{{/if}}
33+
2234
</div>
35+
2336
<div class="extra-bold">Sample Output</div>
2437
<div class="bg-grey br-5 w-60 px-4 py-2 my-2">
25-
<pre>{{problem.details.sample_output}}</pre>
38+
{{#if (includes contest.allowedLanguages "mysql")}}
39+
<pre>{{json-to-table problem.details.sample_output}}</pre>
40+
{{else}}
41+
<p>{{problem.details.sample_output}}</p>
42+
{{/if}}
43+
2644
</div>
45+
2746
{{#if problem.details.explanation}}
2847
<div class="extra-bold">Explanation</div>
2948
<div class="bg-grey br-5 w-60 px-4 py-2 my-2">
3049
{{markdown-to-html problem.details.explanation}}
3150
</div>
3251
{{/if}}
33-
</div>
52+
</div>

app/pods/components/problem-view/template.hbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333

3434
{{#liquid-if (eq selectedTab "problem")}}
3535
<ProblemExplanation
36-
@problem={{problem}} />
36+
@problem={{problem}} @contest={{contest}} />
3737
{{else if (eq selectedTab "submissions")}}
3838
<SubmissionsList
3939
@contest={{contest}}

app/pods/components/project-view/template.hbs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,11 @@
5757
{{/if}}
5858
</div>
5959
</div>
60+
6061
{{#if (or submitProjectTask.isRunning lastResult)}}
6162
<div class="mt-4">
6263
<SubmissionResult
64+
@allowedLanguages={{contest.allowedLanguages}}
6365
@contentType={{content.type}}
6466
@judgeResult={{if (not submitProjectTask.isRunning) lastResult}}
6567
/>

app/pods/components/run-result/component.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@ import { computed } from '@ember/object';
44
export default class RunResultComponent extends Component {
55
didRender() {
66
this.element.scrollIntoView({behavior: "smooth", block: "end" })
7+
// console.log('run')
78
}
89

910
@computed('judgeResult')
1011
get output() {
12+
// console.log('res',this)
1113
if (this.judgeResult.data){
1214
return window.atob(this.judgeResult.data.output)
1315
} else if (this.judgeResult.error) {
Lines changed: 76 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,90 @@
11
import Component from '@ember/component';
22
import { computed } from '@ember/object';
3+
import { jsonToTable } from '../../../util/json-to-table';
4+
// const data = {
5+
// "meta": {},
6+
// "data": {
7+
// "type": "submissions",
8+
// "id": "7298192",
9+
// "attributes": {
10+
// "id": 7298192,
11+
// "solution": {
12+
// "source": "U0VMRUNUIGUubmFtZSBBUyAiRW1wbG95ZWUiIEZST00gRW1wbG95ZWUgYXMgZQpJTk5FUiBKT0lOIEVtcGxveWVlIGFzIG0KT04gZS5tYW5hZ2VySWQgPSBtLmlkCldIRVJFIGUuc2FsYXJ5ID4gbS5zYWxhcnk7"
13+
// },
14+
// "submit-at": "2025-02-19T09:00:58.477Z",
15+
// "language": "mysql",
16+
// "score": 0,
17+
// "result": -1,
18+
// "judge-result": {
19+
// "id": 116,
20+
// "code": 0,
21+
// "time": 1.22,
22+
// "stderr": "",
23+
// "stdout": "W3siRW1wbG95ZWUiOiJKb2UifV0K",
24+
// "scenario": "run"
25+
// },
26+
// "explanation": null,
27+
// "is-top-submission": false,
28+
// "plagiarism-detected": false,
29+
// "created-at": "2025-02-19T09:00:58.478Z"
30+
// },
31+
// "relationships": {
32+
// "user": { "data": { "type": "users", "id": "241321" } },
33+
// "content": { "data": { "type": "contents", "id": "1747" } },
34+
// "contest": { "data": null },
35+
// "badge": { "data": null }
36+
// }
37+
// }
38+
// };
39+
export default Component.extend({
40+
// judgeResult: null,
41+
// allowedLanguages: null,
342

4-
export default class SubmissionResult extends Component {
543
didRender() {
6-
this.element.scrollIntoView({ behavior: "smooth", block: "end" })
7-
}
44+
this._super(...arguments);
45+
this.element.scrollIntoView({ behavior: "smooth", block: "end" });
846

9-
@computed('judgeResult')
10-
get isRunning() {
11-
return !this.judgeResult
12-
}
47+
// this.set('judgeResult', data.data.attributes['judge-result']);
48+
// this.set('allowedLanguages', this.get('allowedLanguages'));
49+
// console.log('judgeResult:', this.get('judgeResult'));
50+
// console.log('Allowed Languages:', this.allowedLanguages);
51+
},
1352

14-
@computed('judgeResult')
15-
get isErrored() {
16-
return !!this.judgeResult.stderr
17-
}
53+
isRunning: computed('judgeResult', function() {
54+
return !this.get('judgeResult');
55+
}),
1856

19-
@computed('judgeResult')
20-
get isSubmission() {
21-
return !!(this.judgeResult.testcases)
22-
}
57+
isErrored: computed('judgeResult', function() {
58+
return !!this.get('judgeResult')?.stderr;
59+
}),
60+
61+
isSubmission: computed('judgeResult', function() {
62+
return !!this.get('judgeResult')?.testcases;
63+
}),
2364

24-
@computed('isErrored')
25-
get errorPayload() {
26-
if (this.isErrored) {
27-
return window.atob(this.judgeResult.stderr || this.judgeResult.stdout)
65+
errorPayload: computed('isErrored', function() {
66+
if (this.get('isErrored')) {
67+
return window.atob(this.get('judgeResult')?.stderr || this.get('judgeResult')?.stdout);
2868
}
29-
}
69+
}),
70+
71+
output: computed('isSubmission', function() {
72+
if (!this.get('isSubmission')) {
73+
const output = window.atob(this.get('judgeResult')?.stdout);
3074

31-
@computed('isSubmission')
32-
get output() {
33-
if (!this.isSubmission) {
34-
return window.atob(this.judgeResult.stdout)
75+
return output;
3576
}
36-
}
77+
}),
3778

38-
@computed('isSubmission')
39-
get testcasesPayload() {
40-
if (this.isSubmission) {
41-
return this.judgeResult.testcases
79+
testcasesPayload: computed('isSubmission', function() {
80+
if (this.get('isSubmission')) {
81+
return this.get('judgeResult')?.testcases;
4282
}
83+
}),
84+
85+
jsonToTable(data) {
86+
const table = jsonToTable(data);
87+
// console.log('jsonToTable output:', table);
88+
return table;
4389
}
44-
}
90+
});

app/pods/components/submission-result/submission-success/template.hbs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,12 @@
22
<span class="font-sm bold">
33
Compilation Successful
44
</span>
5+
56
{{#if output}}
6-
<pre class="mt-3 bg-grey p-4">{{output}}</pre>
7+
{{#if (includes allowedLanguages "mysql")}}
8+
<pre class="mt-3 bg-grey p-4">{{json-to-table output}}</pre>
9+
{{else}}
10+
<pre class="mt-3 bg-grey p-4">{{output}}</pre>
11+
{{/if}}
712
{{/if}}
813
</div>

0 commit comments

Comments
 (0)