parent
3997dd090e
commit
7029368ab1
@ -1,4 +0,0 @@
|
||||
module.exports = {
|
||||
stories: ['../src/**/*.stories.ts'],
|
||||
addons: ['@storybook/addon-actions', '@storybook/addon-links', '@storybook/addon-notes'],
|
||||
};
|
@ -1,20 +0,0 @@
|
||||
{
|
||||
"extends": "../tsconfig.app.json",
|
||||
"compilerOptions": {
|
||||
"types": [
|
||||
"node"
|
||||
]
|
||||
},
|
||||
"exclude": [
|
||||
"../src/test.ts",
|
||||
"../src/**/*.spec.ts",
|
||||
"../projects/**/*.spec.ts"
|
||||
],
|
||||
"include": [
|
||||
"../src/**/*",
|
||||
"../projects/**/*"
|
||||
],
|
||||
"files": [
|
||||
"./typings.d.ts"
|
||||
]
|
||||
}
|
@ -1,4 +0,0 @@
|
||||
declare module '*.md' {
|
||||
const content: string;
|
||||
export default content;
|
||||
}
|
@ -1,44 +0,0 @@
|
||||
// TODO: File to be deleted : just temporary documentation of backend API endpoints
|
||||
|
||||
/**
|
||||
*
|
||||
* -------------------------- -------- -------- ------ ------------------------------------------------
|
||||
Name Method Scheme Host Path
|
||||
-------------------------- -------- -------- ------ ------------------------------------------------
|
||||
_twig_error_test ANY ANY ANY /_error/{code}.{_format}
|
||||
api_get_poll_comment GET ANY ANY /poll/{id}/comments
|
||||
api_new_comment POST ANY ANY /poll/{id}/comment
|
||||
api_poll_comments_delete DELETE ANY ANY /poll/{id}/comments
|
||||
api_send_user_polls GET ANY ANY /send-polls-to-user/{email}
|
||||
homepageget_default GET ANY ANY /
|
||||
api_get_all_polls GET ANY ANY /poll/
|
||||
api_get_poll GET ANY ANY /poll/{id}
|
||||
api_update_poll PUT ANY ANY /poll/{id}/{token}
|
||||
api_new_poll POST ANY ANY /poll/
|
||||
api_test-mail-poll GET ANY ANY /poll/mail/test-mail-poll/{emailChoice}
|
||||
api_poll_delete DELETE ANY ANY /poll/{id}
|
||||
api_clean_expired_polls GET ANY ANY /poll/clean-polls
|
||||
api_check_slug_is_unique GET ANY ANY /poll/admin/{token}
|
||||
api_new_vote_stack POST ANY ANY /poll/{id}/vote
|
||||
api_update_vote_stack PATCH ANY ANY /vote-stack/{id}/token/{modifierToken}
|
||||
api_poll_votes_delete DELETE ANY ANY /poll/{id}/votes/{accessToken}
|
||||
app.swagger GET ANY ANY /doc.json
|
||||
-------------------------- -------- -------- ------ ------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* WANTED CHANGES (seraf)
|
||||
* -------------------------- -------- -------- ------ ------------------------------------------------
|
||||
Name Method Scheme Host Path
|
||||
-------------------------- -------- -------- ------ ------------------------------------------------
|
||||
api_get_poll_comment GET ANY ANY /poll/{id}/comment
|
||||
api_delete_poll_comments DELETE ANY ANY /poll/{id}/comment
|
||||
api_user_polls_send_by_email GET ANY ANY /user/{email}/polls/send-by-email
|
||||
api_get_user_polls GET ANY ANY /user/{email}/polls
|
||||
api_get_poll_slug GET ANY ANY /poll/slug/{id}/{token}
|
||||
api_clean_expired_polls GET ANY ANY /admin/clean-polls/{token}
|
||||
|
||||
api_test-mail-poll GET ANY ANY /poll/mail/test-mail-poll/{emailChoice}
|
||||
api_update_vote_stack PATCH ANY ANY /vote-stack/{id}/token/{modifierToken}
|
||||
-------------------------- -------- -------- ------ ------------------------------------------------
|
||||
*/
|
@ -0,0 +1,46 @@
|
||||
// TODO: File to be deleted : just temporary documentation of backend API endpoints
|
||||
|
||||
/**
|
||||
*
|
||||
* -------------------------- -------- -------- ------ ------------------------------------------------
|
||||
Name Method Scheme Host Path
|
||||
-------------------------- -------- -------- ------ ------------------------------------------------
|
||||
_twig_error_test ANY ANY ANY /_error/{code}.{_format}
|
||||
admin_homepage_get_default GET ANY ANY /admin/
|
||||
admin_homepage_clean_expired_polls GET ANY ANY /admin/polls/clean/{token}
|
||||
api_get_poll_comment GET ANY ANY /polls/{id}/comments
|
||||
api_new_comment POST ANY ANY /polls/{id}/comments
|
||||
api_poll_comments_delete DELETE ANY ANY /polls/{id}/comments
|
||||
user_homepageget_default GET ANY ANY /users/
|
||||
user_homepage_polls_send_by_email GET ANY ANY /users/{email}/polls/send-by-email
|
||||
api_get_all_polls GET ANY ANY /polls/
|
||||
api_get_poll GET ANY ANY /polls/{id}
|
||||
api_update_poll PUT ANY ANY /polls/{id}/{token}
|
||||
api_new_poll POST ANY ANY /polls/
|
||||
api_test-mail-polls GET ANY ANY /polls/mail/test-mail-polls/{emailChoice}
|
||||
api_poll_delete DELETE ANY ANY /polls/{id}
|
||||
api_check_slug_is_unique GET ANY ANY /polls/slugs/{slug}
|
||||
api_get_admin_config GET ANY ANY /polls/admin/{token}
|
||||
api_new_vote_stack POST ANY ANY /polls/{id}/votes
|
||||
api_update_vote_stack PATCH ANY ANY /votes-stacks/{id}/token/{modifierToken}
|
||||
api_poll_votes_delete DELETE ANY ANY /polls/{id}/votes/{accessToken}
|
||||
app.swagger GET ANY ANY /api/doc.json
|
||||
-------------------------- -------- -------- ------ ------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* WANTED CHANGES (seraf)
|
||||
* -------------------------- -------- -------- ------ ------------------------------------------------
|
||||
Name Method Scheme Host Path
|
||||
-------------------------- -------- -------- ------ ------------------------------------------------
|
||||
api_get_poll_comment GET ANY ANY /polls/{id}/comment
|
||||
api_delete_poll_comments DELETE ANY ANY /polls/{id}/comment
|
||||
api_user_polls_send_by_email GET ANY ANY /users/{email}/polls/send-by-email
|
||||
api_get_user_polls GET ANY ANY /users/{email}/polls
|
||||
api_get_poll_slug GET ANY ANY /polls/slug/{id}/{token}
|
||||
api_clean_expired_polls GET ANY ANY /admin/clean-polls/{token}
|
||||
|
||||
api_test-mail-polls GET ANY ANY /polls/mail/test-mail-polls/{emailChoice}
|
||||
api_update_vote_stack PATCH ANY ANY /votes-stack/{id}/token/{modifierToken}
|
||||
-------------------------- -------- -------- ------ ------------------------------------------------
|
||||
*/
|
@ -1,13 +1,9 @@
|
||||
{
|
||||
"extends": "../tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"outDir": "../out-tsc/e2e",
|
||||
"module": "commonjs",
|
||||
"target": "es5",
|
||||
"types": [
|
||||
"jasmine",
|
||||
"jasminewd2",
|
||||
"node"
|
||||
]
|
||||
}
|
||||
"extends": "../tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"outDir": "../out-tsc/e2e",
|
||||
"module": "commonjs",
|
||||
"target": "es5",
|
||||
"types": ["jasmine", "jasminewd2", "node"]
|
||||
}
|
||||
}
|
||||
|
@ -1,42 +1,15 @@
|
||||
<div id="big_container" [class]="themeClass">
|
||||
<header class="big-header">
|
||||
<div class="container">
|
||||
<div class="columns is-mobile is-vcentered">
|
||||
<div class="column is-pulled-left has-addons">
|
||||
<img
|
||||
(click)="toggleMenu()"
|
||||
alt="menu icon"
|
||||
class="menu_icon clickable"
|
||||
src="assets/img/icone-menu.svg"
|
||||
/>
|
||||
<br />
|
||||
<span (click)="toggleMenu()" class="menu_label">Menu</span>
|
||||
</div>
|
||||
<div class="column">
|
||||
<app-logo></app-logo>
|
||||
</div>
|
||||
<div class="column">
|
||||
<app-theme-selector></app-theme-selector>
|
||||
</div>
|
||||
<div class="column">
|
||||
<app-language-selector></app-language-selector>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<app-header [isSidebarOpened]="isSidebarOpened" (toggleSidebarEE)="toggleSidebar($event)"></app-header>
|
||||
|
||||
<main>
|
||||
<div class="container">
|
||||
<div class="columns is-mobile">
|
||||
<div class="column is-one-quarter togglable-menu" *ngIf="config.menuVisible">
|
||||
<app-navigation [step]="step"></app-navigation>
|
||||
<app-debugger *ngIf="isDebugMode"></app-debugger>
|
||||
</div>
|
||||
<div class="column">
|
||||
<router-outlet></router-outlet>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<router-outlet></router-outlet>
|
||||
</main>
|
||||
<p-toast position="top-right"></p-toast>
|
||||
|
||||
<app-footer></app-footer>
|
||||
</div>
|
||||
|
||||
<p-toast position="bottom-center"></p-toast>
|
||||
|
||||
<p-sidebar [(visible)]="isSidebarOpened">
|
||||
<app-navigation></app-navigation>
|
||||
</p-sidebar>
|
||||
|
@ -1,13 +0,0 @@
|
||||
@charset "UTF-8";
|
||||
|
||||
.big-header {
|
||||
padding: 0.5rem;
|
||||
}
|
||||
|
||||
i {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.language-selector {
|
||||
width: auto;
|
||||
}
|
@ -1 +1,9 @@
|
||||
<p>footer works!</p>
|
||||
<footer class="footer">
|
||||
<div class="content has-text-centered">
|
||||
<p>
|
||||
<strong>Bulma</strong> by <a href="https://jgthms.com">Jeremy Thomas</a>. The source code is licensed
|
||||
<a href="http://opensource.org/licenses/mit-license.php">MIT</a>. The website content is licensed
|
||||
<a href="http://creativecommons.org/licenses/by-nc-sa/4.0/">CC BY NC SA 4.0</a>.
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
@ -0,0 +1,74 @@
|
||||
<header>
|
||||
<nav class="navbar" role="navigation" aria-label="main navigation">
|
||||
<div class="navbar-brand">
|
||||
<a class="navbar-item">
|
||||
<a class="navbar-item" role="button" (click)="toggleSidebarOpening()"> Dev menu </a>
|
||||
</a>
|
||||
|
||||
<a
|
||||
role="button"
|
||||
class="navbar-burger burger"
|
||||
aria-label="menu"
|
||||
aria-expanded="false"
|
||||
data-target="navbarBasicExample"
|
||||
>
|
||||
<span aria-hidden="true"></span>
|
||||
<span aria-hidden="true"></span>
|
||||
<span aria-hidden="true"></span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div id="navbarBasicExample" class="navbar-menu">
|
||||
<div class="navbar-start">
|
||||
<a class="navbar-item" routerLink="/" routerLinkActive="is-active">
|
||||
Home
|
||||
</a>
|
||||
<div class="navbar-item has-dropdown is-hoverable">
|
||||
<a class="navbar-link"> Menu </a>
|
||||
<div class="navbar-dropdown">
|
||||
<a class="navbar-item" routerLink="administration" routerLinkActive="is-active">
|
||||
Crรฉer un sondage
|
||||
</a>
|
||||
<a class="navbar-item" routerLink="administration/profile" routerLinkActive="is-active">
|
||||
Mes sondages
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="navbar-item has-dropdown is-hoverable">
|
||||
<a class="navbar-link"> Modules </a>
|
||||
<div class="navbar-dropdown">
|
||||
<a class="navbar-item" routerLink="administration" routerLinkActive="is-active">
|
||||
Administration
|
||||
</a>
|
||||
<a class="navbar-item" routerLink="participation" routerLinkActive="is-active">
|
||||
Participation
|
||||
</a>
|
||||
<a class="navbar-item" routerLink="oldstuff" routerLinkActive="is-active">
|
||||
Old stuff
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="navbar-item">
|
||||
<app-theme-selector></app-theme-selector>
|
||||
</div>
|
||||
<div class="navbar-item">
|
||||
<app-language-selector></app-language-selector>
|
||||
</div>
|
||||
|
||||
<div class="navbar-end">
|
||||
<div class="navbar-item">
|
||||
<div class="buttons">
|
||||
<a class="button is-primary">
|
||||
<strong>Sign up</strong>
|
||||
</a>
|
||||
<a class="button is-light">
|
||||
Log in
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
@ -1,19 +1,19 @@
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { NavbarComponent } from './navbar.component';
|
||||
import { HeaderComponent } from './header.component';
|
||||
|
||||
describe('NavbarComponent', () => {
|
||||
let component: NavbarComponent;
|
||||
let fixture: ComponentFixture<NavbarComponent>;
|
||||
describe('HeaderComponent', () => {
|
||||
let component: HeaderComponent;
|
||||
let fixture: ComponentFixture<HeaderComponent>;
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [NavbarComponent],
|
||||
declarations: [HeaderComponent],
|
||||
}).compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(NavbarComponent);
|
||||
fixture = TestBed.createComponent(HeaderComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
@ -0,0 +1,16 @@
|
||||
import { Component, EventEmitter, Output, Input } from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'app-header',
|
||||
templateUrl: './header.component.html',
|
||||
styleUrls: ['./header.component.scss'],
|
||||
})
|
||||
export class HeaderComponent {
|
||||
@Input() isSidebarOpened: boolean;
|
||||
@Output() toggleSidebarEE = new EventEmitter<boolean>();
|
||||
|
||||
public toggleSidebarOpening(): void {
|
||||
this.isSidebarOpened = !this.isSidebarOpened;
|
||||
this.toggleSidebarEE.emit(this.isSidebarOpened);
|
||||
}
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
import { Component, OnInit } from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'app-home',
|
||||
templateUrl: './home.component.html',
|
||||
styleUrls: ['./home.component.scss'],
|
||||
})
|
||||
export class HomeComponent implements OnInit {
|
||||
constructor() {}
|
||||
|
||||
ngOnInit(): void {}
|
||||
}
|
@ -0,0 +1 @@
|
||||
<p>login works!</p>
|
@ -0,0 +1,24 @@
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { LoginComponent } from './login.component';
|
||||
|
||||
describe('LoginComponent', () => {
|
||||
let component: LoginComponent;
|
||||
let fixture: ComponentFixture<LoginComponent>;
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [LoginComponent],
|
||||
}).compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(LoginComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should create', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
});
|
@ -0,0 +1,12 @@
|
||||
import { Component, OnInit } from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'app-login',
|
||||
templateUrl: './login.component.html',
|
||||
styleUrls: ['./login.component.scss'],
|
||||
})
|
||||
export class LoginComponent implements OnInit {
|
||||
constructor() {}
|
||||
|
||||
ngOnInit(): void {}
|
||||
}
|
@ -1 +0,0 @@
|
||||
<p>navbar works!</p>
|
@ -1,12 +0,0 @@
|
||||
import { Component, OnInit } from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'app-navbar',
|
||||
templateUrl: './navbar.component.html',
|
||||
styleUrls: ['./navbar.component.scss'],
|
||||
})
|
||||
export class NavbarComponent implements OnInit {
|
||||
constructor() {}
|
||||
|
||||
ngOnInit(): void {}
|
||||
}
|
@ -1,3 +0,0 @@
|
||||
<div class="hero">
|
||||
This page doesn't exist.
|
||||
</div>
|
@ -1,8 +1,8 @@
|
||||
import { Component, DoCheck, OnInit } from '@angular/core';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
|
||||
import { Language } from '../../../core/enums/language.enum';
|
||||
import { StorageService } from '../../../core/services/storage.service';
|
||||
import { Language } from '../../../enums/language.enum';
|
||||
import { StorageService } from '../../../services/storage.service';
|
||||
|
||||
@Component({
|
||||
selector: 'app-language-selector',
|
@ -1,8 +1,8 @@
|
||||
import { Component, OnInit } from '@angular/core';
|
||||
import { Observable } from 'rxjs';
|
||||
|
||||
import { Theme } from '../../../core/enums/theme.enum';
|
||||
import { ThemeService } from '../../../core/services/theme.service';
|
||||
import { Theme } from '../../../enums/theme.enum';
|
||||
import { ThemeService } from '../../../services/theme.service';
|
||||
|
||||
@Component({
|
||||
selector: 'app-theme-selector',
|
@ -0,0 +1,23 @@
|
||||
<nav>
|
||||
<a class="button" routerLink="administration" routerLinkActive="active"> AdministrationModule</a>
|
||||
<a class="button" routerLink="participation/poll/SuperCustomSlug" routerLinkActive="active">
|
||||
Participate to poll/SuperCustomSlug
|
||||
</a>
|
||||
<hr />
|
||||
|
||||
<a class="button" routerLink="oldstuff/home" routerLinkActive="active"> <i class="fa fa-home"></i> Accueil </a>
|
||||
<a class="button" routerLink="oldstuff/step/creation" routerLinkActive="active"> Crรฉation </a>
|
||||
<a class="button" routerLink="oldstuff/step/date" routerLinkActive="active"> Les Dates </a>
|
||||
<a class="button" routerLink="oldstuff/step/answers" routerLinkActive="active"> Rรฉponses </a>
|
||||
<a class="button" routerLink="oldstuff/step/visibility" routerLinkActive="active"> Visibilitรฉ </a>
|
||||
<a class="button" routerLink="oldstuff/step/resume" routerLinkActive="active"> Rรฉsumรฉ </a>
|
||||
<a class="button" routerLink="oldstuff/step/end" routerLinkActive="active"> Confirmation </a>
|
||||
<a class="button" routerLink="oldstuff/step/admin"> Administration </a>
|
||||
<hr />
|
||||
|
||||
<a class="button" routerLink="oldstuff/step/kind" routerLinkActive="active"> Page dรฉmo </a>
|
||||
<a class="button" routerLink="oldstuff/vote/poll/id/1" routerLinkActive="active"> Sondage 1 </a>
|
||||
<a class="button" routerLink="oldstuff/vote/poll/id/2" routerLinkActive="active"> Sondage 2 </a>
|
||||
<a class="button" routerLink="oldstuff/vote/poll/id/3" routerLinkActive="active"> Sondage 3 (dessins animรฉs) </a>
|
||||
<a class="button" routerLink="oldstuff/graphic/toto" routerLinkActive="active"> Graphique </a>
|
||||
</nav>
|
@ -0,0 +1,18 @@
|
||||
import { Component, OnInit } from '@angular/core';
|
||||
|
||||
import { MockingService } from '../../../services/mocking.service';
|
||||
import { Poll } from '../../../models/poll.model';
|
||||
|
||||
@Component({
|
||||
selector: 'app-navigation',
|
||||
templateUrl: './navigation.component.html',
|
||||
styleUrls: ['./navigation.component.scss'],
|
||||
})
|
||||
export class NavigationComponent implements OnInit {
|
||||
public pollsDatabase: Poll[] = [];
|
||||
constructor(private mockingService: MockingService) {}
|
||||
|
||||
ngOnInit(): void {
|
||||
this.pollsDatabase = this.mockingService.pollsDatabase;
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
export enum MessageSeverity {
|
||||
SUCCESS = 'success',
|
||||
INFO = 'info',
|
||||
WARN = 'warn',
|
||||
ERROR = 'error',
|
||||
}
|
@ -1,4 +0,0 @@
|
||||
export enum PollType {
|
||||
CLASSIC = 'CLASSIC',
|
||||
DATES = 'DATES',
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
export enum UserRole {
|
||||
ANONYMOUS = 'ANONYMOUS',
|
||||
REGISTERED = 'ADMIN',
|
||||
ADMIN = 'ADMIN',
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
export enum WorkflowStep {
|
||||
DESCRIPTION = 'DESCRIPTION',
|
||||
OPTIONS = 'OPTIONS',
|
||||
CONFIGURATION = 'CONFIGURATION',
|
||||
}
|
@ -1,19 +1,23 @@
|
||||
import { PollType } from '../enums/poll-type.enum';
|
||||
import { Answer } from './answer.model';
|
||||
import { PollConfig } from './poll-config.model';
|
||||
import { PollOption } from './poll-options.model';
|
||||
import { User } from './user.model';
|
||||
import { environment } from 'src/environments/environment';
|
||||
|
||||
export class Poll {
|
||||
constructor(
|
||||
public id: string,
|
||||
public slug: string,
|
||||
public type: PollType,
|
||||
public isDateType: boolean,
|
||||
public title: string,
|
||||
public description: string,
|
||||
public owner: User,
|
||||
public config: PollConfig,
|
||||
public slug: string,
|
||||
public id: string,
|
||||
public owner?: User,
|
||||
public config?: PollConfig,
|
||||
public options: PollOption[] = [],
|
||||
public answers: Answer[] = []
|
||||
) {}
|
||||
|
||||
public getUrl(): string {
|
||||
return `${environment.api.baseHref}/${this.slug}`;
|
||||
}
|
||||
}
|
||||
|