Skip to content

Commit 2b764bf

Browse files
committed
working ide
2 parents c87d423 + 8531975 commit 2b764bf

44 files changed

Lines changed: 942 additions & 89 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

codecamp-front/src/app/app-routing.module.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ import { ContestComponent } from './components/contest/contest.component';
1414
import { AboutComponent } from './components/about/about.component';
1515
import { IdeComponent } from './components/ide/ide.component';
1616
import { ProblemsComponent } from './components/problems/problems.component';
17+
import { AddContestComponent } from './components/add-contest/add-contest.component';
18+
import { EditContestComponent } from './components/edit-contest/edit-contest.component';
19+
import { ProblemComponent } from './components/problem/problem.component';
20+
import { AddProblemComponent } from './components/add-problem/add-problem.component';
1721

1822

1923

@@ -22,12 +26,16 @@ const appRoutes: Routes = [
2226
{path: 'about', component: AboutComponent},
2327
{path: 'register' , component: RegisterComponent},
2428
{path: 'login' , component: LoginComponent},
25-
{path: 'problems' , component: PracticeComponent},
29+
{path: 'practice' , component: PracticeComponent},
2630
{path: 'contest' , component: ContestComponent},
2731
{path: 'discuss' , component: DiscussComponent},
2832
{path: 'profile' , component: ProfileComponent},
2933
{path: 'ide', component: IdeComponent},
30-
{path: 'problems/:problem', component: ProblemsComponent}
34+
{path: 'contest/add-contest', component: AddContestComponent},
35+
{path: 'contest/:contest', component: ProblemsComponent},
36+
{path: 'contest/:contest/addproblem', component: AddProblemComponent},
37+
{path: 'contest/:contest/:problem', component: ProblemComponent},
38+
{path: 'contest/edit/:edit-contest', component: EditContestComponent},
3139
];
3240

3341
@NgModule({

codecamp-front/src/app/app.module.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,18 @@ import { ContestComponent } from './components/contest/contest.component';
1717
import { AboutComponent } from './components/about/about.component';
1818

1919
import { AuthService } from './services/auth.service';
20+
import { ContestService } from './services/contest.service';
21+
2022
import { HttpModule } from '@angular/http';
2123
import { IdeComponent } from './components/ide/ide.component';
2224
import { ProblemsComponent } from './components/problems/problems.component';
25+
import { AddContestComponent } from './components/add-contest/add-contest.component';
26+
import { EditContestComponent } from './components/edit-contest/edit-contest.component';
27+
import { SubmissionComponent } from './components/submission/submission.component';
28+
import { RanklistComponent } from './components/ranklist/ranklist.component';
29+
import { SolutionComponent } from './components/solution/solution.component';
30+
import { ProblemComponent } from './components/problem/problem.component';
31+
import { AddProblemComponent } from './components/add-problem/add-problem.component';
2332

2433

2534
@NgModule({
@@ -35,7 +44,14 @@ import { ProblemsComponent } from './components/problems/problems.component';
3544
ContestComponent,
3645
AboutComponent,
3746
IdeComponent,
38-
ProblemsComponent
47+
ProblemsComponent,
48+
AddContestComponent,
49+
EditContestComponent,
50+
SubmissionComponent,
51+
RanklistComponent,
52+
SolutionComponent,
53+
ProblemComponent,
54+
AddProblemComponent
3955
],
4056
imports: [
4157
BrowserModule,
@@ -44,7 +60,7 @@ import { ProblemsComponent } from './components/problems/problems.component';
4460
AppRoutingModule,
4561
AceEditorModule
4662
],
47-
providers: [ AuthService],
63+
providers: [ AuthService, ContestService],
4864
bootstrap: [AppComponent]
4965
})
5066
export class AppModule { }

codecamp-front/src/app/components/add-contest/add-contest.component.css

Whitespace-only changes.
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
<div class="container">
2+
<div class="row">
3+
<div class="col-md-12">
4+
<div class="display-4">Add Contest</div>
5+
<form [formGroup]="form" (submit)="onAddContestSubmit()">
6+
<div class="form-group">
7+
<label for="name">Contest Name</label>
8+
<input type="text"
9+
name="name"
10+
formControlName="name"
11+
class="form-control"
12+
placeholder="Enter Name"
13+
autocomplete="off"
14+
[ngClass]="{'is-invalid': (form.controls.name.errors && form.controls.name.dirty) , 'is-valid': !form.controls.name.errors}">
15+
</div>
16+
17+
<div class="form-group">
18+
<label for="id">Contest ID</label>
19+
<input type="text"
20+
name="id"
21+
formControlName="id"
22+
class="form-control"
23+
placeholder="Enter contest ID"
24+
autocomplete="off"
25+
[ngClass]="{'is-invalid': (form.controls.id.errors && form.controls.id.dirty) , 'is-valid': !form.controls.id.errors}">
26+
</div>
27+
<div class="row">
28+
<div class="col-md-6">
29+
<div class="form-group">
30+
<label for="startDate">Start Time</label>
31+
<input type="date"
32+
name="startTime"
33+
formControlName="startTime"
34+
class="form-control"
35+
placeholder="Start Time"
36+
autocomplete="off"
37+
[ngClass]="{'is-invalid': (form.controls.startTime.errors && form.controls.startTime.dirty) , 'is-valid': !form.controls.startTime.errors}">
38+
</div>
39+
</div>
40+
<div class="col-md-6">
41+
<div class="form-group">
42+
<label for="EndDate">End Time</label>
43+
<input type="date"
44+
name="endTime"
45+
formControlName="endTime"
46+
class="form-control"
47+
placeholder="End Time"
48+
autocomplete="off"
49+
[ngClass]="{'is-invalid': (form.controls.endTime.errors && form.controls.endTime.dirty) , 'is-valid': !form.controls.endTime.errors}">
50+
</div>
51+
</div>
52+
</div>
53+
54+
<div class="form-group">
55+
<label for="city">Description</label>
56+
<textarea
57+
name="description"
58+
formControlName="description"
59+
class="form-control" placeholder="Enter Description" autocomplete="off" rows="10">
60+
</textarea>
61+
</div>
62+
63+
<input
64+
[disabled]="!form.valid "
65+
type="submit" class="btn btn-primary" value="Add Contest">
66+
</form>
67+
</div>
68+
</div>
69+
</div>
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
2+
3+
import { AddContestComponent } from './add-contest.component';
4+
5+
describe('AddContestComponent', () => {
6+
let component: AddContestComponent;
7+
let fixture: ComponentFixture<AddContestComponent>;
8+
9+
beforeEach(async(() => {
10+
TestBed.configureTestingModule({
11+
declarations: [ AddContestComponent ]
12+
})
13+
.compileComponents();
14+
}));
15+
16+
beforeEach(() => {
17+
fixture = TestBed.createComponent(AddContestComponent);
18+
component = fixture.componentInstance;
19+
fixture.detectChanges();
20+
});
21+
22+
it('should create', () => {
23+
expect(component).toBeTruthy();
24+
});
25+
});
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import { Component, OnInit } from '@angular/core';
2+
import { FormGroup, FormBuilder, Validators } from '@angular/forms';
3+
import { AuthService } from '../../services/auth.service';
4+
import { Router } from '@angular/router';
5+
import { ContestService } from '../../services/contest.service';
6+
7+
@Component({
8+
selector: 'app-add-contest',
9+
templateUrl: './add-contest.component.html',
10+
styleUrls: ['./add-contest.component.css']
11+
})
12+
export class AddContestComponent implements OnInit {
13+
14+
form: FormGroup;
15+
username: string;
16+
17+
constructor(
18+
private authService: AuthService,
19+
private router: Router,
20+
private formBuilder: FormBuilder,
21+
private contestService: ContestService
22+
) { }
23+
24+
ngOnInit() {
25+
this.createForm();
26+
this.authService.getProfile().subscribe(profile => {
27+
this.username = profile.msg.username; // Used when creating new blog posts and comments
28+
});
29+
}
30+
createForm() {
31+
this.form = this.formBuilder.group({
32+
name: ['', Validators.required],
33+
id: ['', Validators.required],
34+
startTime: ['', Validators.required],
35+
endTime: ['', Validators.required],
36+
description: ['', Validators.required]
37+
});
38+
}
39+
40+
onAddContestSubmit() {
41+
const contest = {
42+
// username: this.username,
43+
name: this.form.get('name').value,
44+
id: this.form.get('id').value,
45+
startTime: this.form.get('startTime').value,
46+
endTime: this.form.get('endTime').value,
47+
description: this.form.get('description').value
48+
};
49+
this.contestService.addContest(contest).subscribe(data => {
50+
if (!data.success) {
51+
console.log(data.msg);
52+
} else {
53+
this.router.navigate(['/contest']);
54+
}
55+
});
56+
}
57+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
.file-input, .file-output{
2+
padding: 10px;
3+
background: red;
4+
display: table;
5+
color: #fff;
6+
}
7+
8+
.file-output{
9+
background: green;
10+
}
11+
12+
input[type="file"] {
13+
display: none;
14+
}

0 commit comments

Comments
 (0)