Commit 195e9ef8 authored by Romain DELEAU's avatar Romain DELEAU

Multilanguage: fr / en (without real button)

parent 37329327
......@@ -18,6 +18,8 @@
"@angular/platform-browser": "^14.0.0",
"@angular/platform-browser-dynamic": "^14.0.0",
"@angular/router": "^14.0.0",
"@ngx-translate/core": "^14.0.0",
"@ngx-translate/http-loader": "^7.0.0",
"js-minimap": "^1.0.7",
"rxjs": "~7.5.0",
"tslib": "^2.3.0",
......@@ -2883,6 +2885,31 @@
"webpack": "^5.54.0"
}
},
"node_modules/@ngx-translate/core": {
"version": "14.0.0",
"resolved": "https://registry.npmjs.org/@ngx-translate/core/-/core-14.0.0.tgz",
"integrity": "sha512-UevdwNCXMRCdJv//0kC8h2eSfmi02r29xeE8E9gJ1Al4D4jEJ7eiLPdjslTMc21oJNGguqqWeEVjf64SFtvw2w==",
"dependencies": {
"tslib": "^2.3.0"
},
"peerDependencies": {
"@angular/core": ">=13.0.0",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@ngx-translate/http-loader": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/@ngx-translate/http-loader/-/http-loader-7.0.0.tgz",
"integrity": "sha512-j+NpXXlcGVdyUNyY/qsJrqqeAdJdizCd+GKh3usXExSqy1aE9866jlAIL+xrfDU4w+LiMoma5pgE4emvFebZmA==",
"dependencies": {
"tslib": "^2.3.0"
},
"peerDependencies": {
"@angular/common": ">=13.0.0",
"@ngx-translate/core": ">=14.0.0",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
......@@ -14276,6 +14303,22 @@
"dev": true,
"requires": {}
},
"@ngx-translate/core": {
"version": "14.0.0",
"resolved": "https://registry.npmjs.org/@ngx-translate/core/-/core-14.0.0.tgz",
"integrity": "sha512-UevdwNCXMRCdJv//0kC8h2eSfmi02r29xeE8E9gJ1Al4D4jEJ7eiLPdjslTMc21oJNGguqqWeEVjf64SFtvw2w==",
"requires": {
"tslib": "^2.3.0"
}
},
"@ngx-translate/http-loader": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/@ngx-translate/http-loader/-/http-loader-7.0.0.tgz",
"integrity": "sha512-j+NpXXlcGVdyUNyY/qsJrqqeAdJdizCd+GKh3usXExSqy1aE9866jlAIL+xrfDU4w+LiMoma5pgE4emvFebZmA==",
"requires": {
"tslib": "^2.3.0"
}
},
"@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
......
......@@ -14,19 +14,19 @@
<div class="container-scenario-main-missions-mission" *ngFor="let mission of this.scenario.missions, let missionIndex = index">
<div class="container-scenario-chronologie">
<div class="container-scenario-chronologie-title">Chronologie générale de la mission</div>
<div class="container-scenario-chronologie-title">{{'steps_mission' | translate}}</div>
<div class="container-scenario-chronologie-steps">
<div *ngFor="let step of mission.chronologie, let i = index" [style.z-index]="mission.chronologie.length-i">
<app-step *ngIf="step != null" [step]="step" [scenario]="scenario" [missionIndex]="missionIndex" [parent]="mission" [index]="i" [mission]="mission"></app-step>
<div class="container-scenario-main-missions-mission-buttonAdd" style="height: 300px;" *ngIf="step == null">
<button mat-button (click)="addMissionStep(mission, i, missionIndex)"
matTooltip="Ajouter une nouvelle tuile de ce type."
[matTooltip]="translate.instant('plus_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"><mat-icon fontIcon="add"></mat-icon></button>
</div>
</div>
<div class="container-scenario-main-missions-mission-buttonAdd" style="height: 300px;">
<button mat-button (click)="addMissionStep(mission, mission.chronologie.length, missionIndex)"
matTooltip="Ajouter une nouvelle tuile de ce type."
[matTooltip]="translate.instant('plus_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"><mat-icon fontIcon="add"></mat-icon></button>
</div>
</div>
......@@ -44,20 +44,20 @@
<div style="display: flex; flex-direction: column;">
<div class="container-scenario-main-missions-mission-roles-role-chronologie">
<div class="container-scenario-main-missions-mission-roles-role-chronologie-title">Chronologie du rôle</div>
<div class="container-scenario-main-missions-mission-roles-role-chronologie-title">{{'steps_role' | translate}}</div>
<div class="container-scenario-main-missions-mission-roles-role-chronologie-steps">
<div *ngFor="let step of role.chronologie, let i = index" [style.z-index]="role.chronologie.length-i">
<app-step *ngIf="step != null" [step]="step" [scenario]="scenario" [missionIndex]="missionIndex" [roleIndex]="roleIndex" [parent]="role" [index]="i" [mission]="mission"></app-step>
<div class="container-scenario-main-missions-mission-buttonAdd" style="height: 300px;" *ngIf="step == null">
<button mat-button (click)="addRoleStep(mission, role, i, missionIndex, roleIndex)"
matTooltip="Ajouter une nouvelle tuile de ce type."
[matTooltip]="translate.instant('plus_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"><mat-icon fontIcon="add"></mat-icon></button>
</div>
</div>
<div class="container-scenario-main-missions-mission-buttonAdd" style="height: 300px;">
<button mat-button (click)="addRoleStep(mission, role, role.chronologie.length, missionIndex, roleIndex)"
matTooltip="Ajouter une nouvelle tuile de ce type."
[matTooltip]="translate.instant('plus_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"><mat-icon fontIcon="add"></mat-icon></button>
</div>
</div>
......@@ -78,29 +78,29 @@
</div>
<div class="container-scenario-main-missions-mission-buttonAdd" style="height: 400px;" *ngIf="task == null">
<button mat-button [matMenuTriggerFor]="addTaskMenu"
matTooltip="Ajouter une nouvelle tuile de ce type."
[matTooltip]="translate.instant('plus_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"><mat-icon fontIcon="add"></mat-icon></button>
<mat-menu #addTaskMenu="matMenu">
<button class="container-scenario-main-missions-mission-roles-role-tasks-menuButton" [style.background-color]="'#b9dfe3'" mat-menu-item (click)="addTask(mission, role, missionIndex, roleIndex, i, j, 'normal')">Ajouter une Tâche</button>
<button class="container-scenario-main-missions-mission-roles-role-tasks-menuButton" [style.background-color]="'#bccecc'" mat-menu-item (click)="addTask(mission, role, missionIndex, roleIndex, i, j, 'annexe')">Ajouter une Tâche annexe</button>
<button class="container-scenario-main-missions-mission-roles-role-tasks-menuButton" [style.background-color]="'#e8e3b3'" mat-menu-item (click)="addTask(mission, role, missionIndex, roleIndex, i, j, 'optionnal')">Ajouter une Tâche optionnelle</button>
<button class="container-scenario-main-missions-mission-roles-role-tasks-menuButton" [style.background-color]="'#b28386'" mat-menu-item (click)="addTask(mission, role, missionIndex, roleIndex, i, j, 'final')" *ngIf="canCreateFinalOrRepeatTask(tasks, j)">Ajouter une Tâche finale</button>
<button class="container-scenario-main-missions-mission-roles-role-tasks-menuButton" [style.background-color]="'#bfdaa3'" mat-menu-item (click)="addTask(mission, role, missionIndex, roleIndex, i, j, 'event')">Ajouter un Événement aléatoire</button>
<button class="container-scenario-main-missions-mission-roles-role-tasks-menuButton" [style.background-color]="'#abbcc6'" mat-menu-item (click)="addTask(mission, role, missionIndex, roleIndex, i, j, 'repeat')" *ngIf="canCreateFinalOrRepeatTask(tasks, j)">Recommencer le tour</button>
<button class="container-scenario-main-missions-mission-roles-role-tasks-menuButton" [style.background-color]="'#b9dfe3'" mat-menu-item (click)="addTask(mission, role, missionIndex, roleIndex, i, j, 'normal')">{{'normalTask_add' | translate}}</button>
<button class="container-scenario-main-missions-mission-roles-role-tasks-menuButton" [style.background-color]="'#bccecc'" mat-menu-item (click)="addTask(mission, role, missionIndex, roleIndex, i, j, 'annexe')">{{'annexeTask_add' | translate}}</button>
<button class="container-scenario-main-missions-mission-roles-role-tasks-menuButton" [style.background-color]="'#e8e3b3'" mat-menu-item (click)="addTask(mission, role, missionIndex, roleIndex, i, j, 'optionnal')">{{'optionnalTask_add' | translate}}</button>
<button class="container-scenario-main-missions-mission-roles-role-tasks-menuButton" [style.background-color]="'#b28386'" mat-menu-item (click)="addTask(mission, role, missionIndex, roleIndex, i, j, 'final')" *ngIf="canCreateFinalOrRepeatTask(tasks, j)">{{'finalTask_add' | translate}}</button>
<button class="container-scenario-main-missions-mission-roles-role-tasks-menuButton" [style.background-color]="'#bfdaa3'" mat-menu-item (click)="addTask(mission, role, missionIndex, roleIndex, i, j, 'event')">{{'randomEvent_add' | translate}}</button>
<button class="container-scenario-main-missions-mission-roles-role-tasks-menuButton" [style.background-color]="'#abbcc6'" mat-menu-item (click)="addTask(mission, role, missionIndex, roleIndex, i, j, 'repeat')" *ngIf="canCreateFinalOrRepeatTask(tasks, j)">{{'repeatTask_add' | translate}}</button>
</mat-menu>
</div>
</div>
<div class="container-scenario-main-missions-mission-buttonAdd" style="height: 400px;" *ngIf="dontContainFinalOrRepeatTask(tasks)">
<button mat-button [matMenuTriggerFor]="addTaskMenu"
matTooltip="Ajouter une nouvelle tuile de ce type."
[matTooltip]="translate.instant('plus_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"><mat-icon fontIcon="add"></mat-icon></button>
<mat-menu #addTaskMenu="matMenu">
<button class="container-scenario-main-missions-mission-roles-role-tasks-menuButton" [style.background-color]="'#b9dfe3'" mat-menu-item (click)="addTask(mission, role, missionIndex, roleIndex, i, tasks.length, 'normal')">Ajouter une Tâche</button>
<button class="container-scenario-main-missions-mission-roles-role-tasks-menuButton" [style.background-color]="'#bccecc'" mat-menu-item (click)="addTask(mission, role, missionIndex, roleIndex, i, tasks.length, 'annexe')">Ajouter une Tâche annexe</button>
<button class="container-scenario-main-missions-mission-roles-role-tasks-menuButton" [style.background-color]="'#e8e3b3'" mat-menu-item (click)="addTask(mission, role, missionIndex, roleIndex, i, tasks.length, 'optionnal')">Ajouter une Tâche optionnelle</button>
<button class="container-scenario-main-missions-mission-roles-role-tasks-menuButton" [style.background-color]="'#b28386'" mat-menu-item (click)="addTask(mission, role, missionIndex, roleIndex, i, tasks.length, 'final')">Ajouter une Tâche finale</button>
<button class="container-scenario-main-missions-mission-roles-role-tasks-menuButton" [style.background-color]="'#bfdaa3'" mat-menu-item (click)="addTask(mission, role, missionIndex, roleIndex, i, tasks.length, 'event')">Ajouter un Événement aléatoire</button>
<button class="container-scenario-main-missions-mission-roles-role-tasks-menuButton" [style.background-color]="'#abbcc6'" mat-menu-item (click)="addTask(mission, role, missionIndex, roleIndex, i, tasks.length, 'repeat')">Recommencer le tour</button>
<button class="container-scenario-main-missions-mission-roles-role-tasks-menuButton" [style.background-color]="'#b9dfe3'" mat-menu-item (click)="addTask(mission, role, missionIndex, roleIndex, i, tasks.length, 'normal')">{{'normalTask_add' | translate}}</button>
<button class="container-scenario-main-missions-mission-roles-role-tasks-menuButton" [style.background-color]="'#bccecc'" mat-menu-item (click)="addTask(mission, role, missionIndex, roleIndex, i, tasks.length, 'annexe')">{{'annexeTask_add' | translate}}</button>
<button class="container-scenario-main-missions-mission-roles-role-tasks-menuButton" [style.background-color]="'#e8e3b3'" mat-menu-item (click)="addTask(mission, role, missionIndex, roleIndex, i, tasks.length, 'optionnal')">{{'optionnalTask_add' | translate}}</button>
<button class="container-scenario-main-missions-mission-roles-role-tasks-menuButton" [style.background-color]="'#b28386'" mat-menu-item (click)="addTask(mission, role, missionIndex, roleIndex, i, tasks.length, 'final')">{{'finalTask_add' | translate}}</button>
<button class="container-scenario-main-missions-mission-roles-role-tasks-menuButton" [style.background-color]="'#bfdaa3'" mat-menu-item (click)="addTask(mission, role, missionIndex, roleIndex, i, tasks.length, 'event')">{{'randomEvent_add' | translate}}</button>
<button class="container-scenario-main-missions-mission-roles-role-tasks-menuButton" [style.background-color]="'#abbcc6'" mat-menu-item (click)="addTask(mission, role, missionIndex, roleIndex, i, tasks.length, 'repeat')">{{'repeatTask_add' | translate}}</button>
</mat-menu>
</div>
</div>
......@@ -131,38 +131,41 @@
<div class="container-settings">
<div class="container-settings-mode"
matTooltip="Utilisation dans un template de jeu précis. Contacter gaelle.guigon@imt-nord-europe.fr pour plus d’informations. Non disponible dans cette version."
[matTooltip]="translate.instant('unity_tooltip')"
matTooltipPosition="below" [matTooltipDisabled]="!tooltipService.activatedTooltips"
[style.background-color]="'lightgray'">
<input name="unity" type="checkbox" disabled/>
<label for="unity">Intégrer le jeu sous Unity (WIP)</label>
<label for="unity">{{'unity_label' | translate}}</label>
</div>
<div class="container-settings-mode"
matTooltip="Descriptif de chaque élément du RLG Maker."
[matTooltip]="translate.instant('enableHelp_tooltip')"
matTooltipPosition="below" [matTooltipDisabled]="!tooltipService.activatedTooltips">
<input name="tooltip" type="checkbox" [(ngModel)]="tooltipService.activatedTooltips" (change)="tooltipsTrace($event)"/>
<label for="tooltip">Activer les aides</label>
<label for="tooltip">{{'enableHelp_label' | translate}}</label>
</div>
<button mat-mini-fab color="white" (click)="downloadFile()"
matTooltip="Télécharger une sauvegarde du scénario."
[matTooltip]="translate.instant('download_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"><mat-icon fontIcon="download_file"></mat-icon></button>
<button mat-mini-fab color="white" (click)="selectFile()"
matTooltip="Importer une sauvegarde du scénario."
[matTooltip]="translate.instant('upload_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"><mat-icon fontIcon="upload-file"></mat-icon></button>
<input type="file" #fileInput style="display: none" (change)="onFileSelected($event)">
</div>
<div class="container-settings container-settings-secondline">
<button mat-mini-fab color="white" (click)="downloadManual()"
matTooltip="Télécharger le manuel d'utilisation."
[matTooltip]="translate.instant('manual_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"><mat-icon fontIcon="menu_book"></mat-icon></button>
<button mat-mini-fab color="white" (click)="changeLanguage()"
[matTooltip]="translate.instant('lang_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips">🇫🇷</button>
</div>
<div class="container-minimap"></div>
<div class="container-zoom">
<button mat-mini-fab color="white" (click)="zoomIn()"
matTooltip="Zoomer le scénario."
[matTooltip]="translate.instant('zoomIn_tooltip')"
matTooltipPosition="before" [matTooltipDisabled]="!tooltipService.activatedTooltips"><mat-icon fontIcon="zoom_in"></mat-icon></button>
<button mat-mini-fab color="white" (click)="zoomOut()"
matTooltip="Dézoomer le scénario."
[matTooltip]="translate.instant('zoomOut_tooltip')"
matTooltipPosition="before" [matTooltipDisabled]="!tooltipService.activatedTooltips"><mat-icon fontIcon="zoom_out"></mat-icon></button>
</div>
</div>
\ No newline at end of file
......@@ -35,6 +35,7 @@ import { LoadingfailSnackbarComponent } from './components/snackbars/loadingfail
import { Trace } from './class/trace/trace';
import Minimap from 'js-minimap';
import { MinimapService } from './services/minimap/minimap.service';
import { TranslateService } from '@ngx-translate/core';
@Component({
selector: 'app-root',
......@@ -46,10 +47,23 @@ export class AppComponent {
title = 'RLG Maker';
scenario: Scenario = new Scenario();
@ViewChild('fileInput') fileInput: any;
selectedLang: string = 'en';
constructor(private cdr: ChangeDetectorRef, private http: HttpClient, protected pieceDetailsService: PieceDetailsService, protected tooltipService: TooltipService,
private elementRef: ElementRef, private zoomService: ZoomService, private dialog: MatDialog, private titleService: Title,
private _snackBar: MatSnackBar, protected minimapService: MinimapService) {
private _snackBar: MatSnackBar, protected minimapService: MinimapService, protected translate: TranslateService) {
translate.setTranslation('en', require('../assets/lang/en.json'));
translate.setTranslation('fr', require('../assets/lang/fr.json'));
translate.addLangs(['en', 'fr']);
translate.setDefaultLang('en');
let browserLang = translate.getBrowserLang();
let selectedLang = browserLang && (browserLang.match(/en|fr/) ? browserLang : 'en');
if(selectedLang) {
this.selectedLang = selectedLang;
}
translate.use(this.selectedLang);
pieceDetailsService.piece = this.scenario;
this.scenario.missions.forEach(mission => {
......@@ -100,6 +114,17 @@ export class AppComponent {
}
}
changeLanguage(): void {
if (this.selectedLang == 'en') {
this.selectedLang = 'fr';
this.translate.use('fr');
} else if (this.selectedLang == 'fr') {
this.selectedLang = 'en';
this.translate.use('en');
}
this.minimapService.reset();
}
downloadManual(): void {
const manualUrl = './assets/GuideMakerWeb_v2.0.pdf';
this.http.get(manualUrl, { responseType: 'blob' }).subscribe((blob: Blob) => {
......@@ -360,19 +385,19 @@ export class AppComponent {
getSiderTitle(): string {
let piece = this.pieceDetailsService.piece;
if (piece instanceof Task) {
return "Tâche";
return this.translate.instant('siderTitle_task');
}
if (piece instanceof Role) {
return "Rôle";
return this.translate.instant('siderTitle_role');
}
if (piece instanceof Mission) {
return "Mission";
return this.translate.instant('siderTitle_mission');
}
if (piece instanceof Scenario) {
return "Jeu";
return this.translate.instant('siderTitle_game');
}
if (piece instanceof Step) {
return "Étape";
return this.translate.instant('siderTitle_step');
} else {
return "";
}
......
......@@ -42,7 +42,13 @@ import { SaveDialogComponent } from './components/dialogs/save-dialog/save-dialo
import { IdentifierSnackbarComponent } from './components/snackbars/identifier-snackbar/identifier-snackbar.component';
import { LoadingsucessSnackbarComponent } from './components/snackbars/loadingsucess-snackbar/loadingsucess-snackbar.component';
import { LoadingfailSnackbarComponent } from './components/snackbars/loadingfail-snackbar/loadingfail-snackbar.component';
import { HttpClientModule } from '@angular/common/http';
import { HttpClient, HttpClientModule } from '@angular/common/http';
import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
export function HttpLoaderFactory(http: HttpClient) {
return new TranslateHttpLoader(http);
}
@NgModule({
declarations: [
......@@ -89,7 +95,14 @@ import { HttpClientModule } from '@angular/common/http';
MatMenuModule,
MatTooltipModule,
MatDialogModule,
MatSnackBarModule
MatSnackBarModule,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useFactory: HttpLoaderFactory,
deps: [HttpClient]
}
})
],
providers: [],
bootstrap: [AppComponent]
......
......@@ -2,21 +2,21 @@
<div class="form-comment">
<textarea [disabled]="!isEditable" [(ngModel)]="comment.content" (change)="editTrace($event, 'comment')"></textarea>
<div class="form-comment-buttons">
<button mat-button (click)="isEditable = !isEditable">Modifier</button>
<button mat-button (click)="removeComment(index)">Supprimer</button>
<button mat-button (click)="isEditable = !isEditable">{{'comments_button_edit' | translate}}</button>
<button mat-button (click)="removeComment(index)">{{'comments_button_delete' | translate}}</button>
</div>
</div>
<div class="form-answers" *ngFor="let answer of comment.answers, let i = index;trackBy:trackByIdx">
<textarea [disabled]="!answerEditables[i]" [(ngModel)]="comment.answers[i]" (change)="editTrace($event,'answer_['+i+']')">Une réponse</textarea>
<div class="form-comment-buttons">
<button mat-button (click)="this.answerEditables[i] = !this.answerEditables[i]">Modifier</button>
<button mat-button (click)="removeAnswer(i)">Supprimer</button>
<button mat-button (click)="this.answerEditables[i] = !this.answerEditables[i]">{{'comments_button_edit' | translate}}</button>
<button mat-button (click)="removeAnswer(i)">{{'comments_button_delete' | translate}}</button>
</div>
</div>
<div class="form-newanswer">
<textarea [(ngModel)]="newAnswer" (change)="editTrace($event,'newAnswer')"></textarea>
<div class="form-newanswer-buttons">
<button mat-button (click)="addAnswer()">Répondre</button>
<button mat-button (click)="addAnswer()">{{'comments_button_answer' | translate}}</button>
</div>
</div>
</div>
\ No newline at end of file
......@@ -9,6 +9,7 @@ import { Task } from 'src/app/class/task/task';
import { Role } from 'src/app/class/role/role';
import { Step } from 'src/app/class/step/step';
import { Trace } from 'src/app/class/trace/trace';
import { TranslateService } from '@ngx-translate/core';
@Component({
selector: 'app-comment',
......@@ -25,7 +26,7 @@ export class CommentComponent implements OnInit {
isEditable: boolean = false;
newAnswer: string = '';
constructor(public dialog: MatDialog, private pieceDetailsService: PieceDetailsService) { }
constructor(public dialog: MatDialog, private pieceDetailsService: PieceDetailsService, protected translate: TranslateService) { }
ngOnInit(): void {
this.comment.answers.forEach(answer => {
......@@ -34,7 +35,7 @@ export class CommentComponent implements OnInit {
}
removeAnswer(index: number): void {
const dialogRef = this.dialog.open(SuppressDialogComponent, { data: 'cette Réponse' });
const dialogRef = this.dialog.open(SuppressDialogComponent, { data: this.translate.instant('comments_answer_delete') });
dialogRef.afterClosed().subscribe(result => {
if (result == true) {
this.comment.answers.splice(index, 1);
......@@ -56,7 +57,7 @@ export class CommentComponent implements OnInit {
}
removeComment(index: number): void {
const dialogRef = this.dialog.open(SuppressDialogComponent, { data: 'ce Commentaire' });
const dialogRef = this.dialog.open(SuppressDialogComponent, { data: this.translate.instant('comments_comment_delete') });
dialogRef.afterClosed().subscribe(result => {
if (result == true) {
this.comments.splice(index, 1);
......
<h2 mat-dialog-title>Effacer le contenu</h2>
<mat-dialog-content>Êtes vous sûr de vouloir effacer le contenu de cette tuile {{data}} ?</mat-dialog-content>
<h2 mat-dialog-title>{{'dialog_clean_title' | translate}}</h2>
<mat-dialog-content>{{'dialog_clean_content' | translate}} {{data}} ?</mat-dialog-content>
<mat-dialog-actions align="end">
<button mat-button mat-dialog-close>Non</button>
<button mat-button [mat-dialog-close]="true" cdkFocusInitial>Oui</button>
<button mat-button mat-dialog-close>{{'dialog_button_no' | translate}}</button>
<button mat-button [mat-dialog-close]="true" cdkFocusInitial>{{'dialog_button_yes' | translate}}</button>
</mat-dialog-actions>
<h2 mat-dialog-title>Créer un élément</h2>
<mat-dialog-content>Êtes vous sûr de vouloir créer {{data}} ?</mat-dialog-content>
<h2 mat-dialog-title>{{'dialog_create_title' | translate}}</h2>
<mat-dialog-content>{{'dialog_create_content' | translate}} {{data}} ?</mat-dialog-content>
<mat-dialog-actions align="end">
<button mat-button mat-dialog-close>Non</button>
<button mat-button [mat-dialog-close]="true" cdkFocusInitial>Oui</button>
<button mat-button mat-dialog-close>{{'dialog_button_yes' | translate}}</button>
<button mat-button [mat-dialog-close]="true" cdkFocusInitial>{{'dialog_button_no' | translate}}</button>
</mat-dialog-actions>
<h2 mat-dialog-title>Télécharger le scénario</h2>
<h2 mat-dialog-title>{{'dialog_save_title' | translate}}</h2>
<mat-dialog-content>
<label for="name">Nom du projet :</label>
<input name="name" type="text" placeholder="Mon Scénario" [(ngModel)]="data.fileName"/>
<label for="name">{{'dialog_save_content' | translate}}</label>
<input name="name" type="text" [placeholder]="translate.instant('dialog_save_placeholder')" [(ngModel)]="data.fileName"/>
</mat-dialog-content>
<mat-dialog-actions align="center">
<button mat-button mat-dialog-close>Annuler</button>
<button mat-button (click)="data.result = true" [mat-dialog-close]="data" cdkFocusInitial>Télécharger</button>
<button mat-button mat-dialog-close>{{'dialog_button_cancel' | translate}}</button>
<button mat-button (click)="data.result = true" [mat-dialog-close]="data" cdkFocusInitial>{{'dialog_button_save' | translate}}</button>
</mat-dialog-actions>
\ No newline at end of file
import { Component, OnInit, Inject } from '@angular/core';
import { MAT_DIALOG_DATA } from '@angular/material/dialog';
import { TranslateService } from '@ngx-translate/core';
@Component({
selector: 'app-save-dialog',
......@@ -8,7 +9,7 @@ import { MAT_DIALOG_DATA } from '@angular/material/dialog';
})
export class SaveDialogComponent implements OnInit {
constructor(@Inject(MAT_DIALOG_DATA) public data: {fileName: string, result: boolean}) { }
constructor(@Inject(MAT_DIALOG_DATA) public data: {fileName: string, result: boolean}, protected translate: TranslateService) { }
ngOnInit(): void {
}
......
<h2 mat-dialog-title>Supprimer l'élément</h2>
<mat-dialog-content>Êtes vous sûr de vouloir supprimer {{data}} et tout ce que cela implique ?</mat-dialog-content>
<h2 mat-dialog-title>{{'dialog_delete_title' | translate}}</h2>
<mat-dialog-content>{{'dialog_delete_content1' | translate}} {{data}} {{'dialog_delete_content2' | translate}}</mat-dialog-content>
<mat-dialog-actions align="end">
<button mat-button mat-dialog-close>Non</button>
<button mat-button [mat-dialog-close]="true" cdkFocusInitial>Oui</button>
<button mat-button mat-dialog-close>{{'dialog_button_no' | translate}}</button>
<button mat-button [mat-dialog-close]="true" cdkFocusInitial>{{'dialog_button_yes' | translate}}</button>
</mat-dialog-actions>
<span matSnackBarLabel>Attention, cet identifiant est déjà utilisé dans ce Rôle</span>
<span matSnackBarLabel>{{'snackbar_identifier' | translate}}</span>
<span matSnackBarLabel>Chargement du fichier échoué</span>
\ No newline at end of file
<span matSnackBarLabel>{{'snackbar_loading_fail' | translate}}</span>
\ No newline at end of file
<span matSnackBarLabel>Chargement du fichier réussi</span>
\ No newline at end of file
<span matSnackBarLabel>{{'snackbar_loading_success' | translate}}</span>
\ No newline at end of file
<div class="piece" (mouseover)="displayMenu='show'" (mouseleave)="displayMenu='hide'" (click)="onClickPiece()"
[class]="pieceDetailsService.piece == scenario.missions[i] ? 'isActive' : 'border'"
matTooltip="La mission est commune à tous les Rôles"
[matTooltip]="translate.instant('mission_tooltip')"
matTooltipPosition="before" [matTooltipDisabled]="!tooltipService.activatedTooltips">
<div class="piece-attach piece-attach-right"></div>
<div class="piece-attach piece-attach-left-top"></div>
......@@ -8,23 +8,23 @@ matTooltipPosition="before" [matTooltipDisabled]="!tooltipService.activatedToolt
<div class="piece-menu" [class]="displayMenu">
<mat-icon fontIcon="add" (click)="onClickAdd()"
matTooltip="Ajouter une mission."
[matTooltip]="translate.instant('mission_add_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
<mat-icon fontIcon="backspace" (click)="onClickErase()"
matTooltip="Effacer le contenu de cette tuile."
[matTooltip]="translate.instant('clearPiece_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
<mat-icon fontIcon="delete" (click)="onClickDelete()" *ngIf="canDelete()"
matTooltip="Supprimer la mission."
[matTooltip]="translate.instant('mission_delete_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
</div>
<div class="piece-form">
<div class="piece-form-title">Objectif(s) pédagogique</div>
<div class="piece-form-title">{{'missionEducationnalObjective_title' | translate}}</div>
<mat-icon class="piece-form-comment" fontIcon="comment" *ngIf="scenario.missions[i].comments.length > 0"></mat-icon>
<div class="piece-form-objective">
<label for="objective">Commun pour la mission {{i+1}}</label>
<textarea name="objective" [(ngModel)]="educationnalObjective.objective" (change)="editTrace($event, 'Obj_m')" placeholder="Comprendre les rôles impliqués dans la conception d'un site web"
matTooltip="Ce que l’on veut atteindre en situation de formation. Commencer chaque objectif par un verbe. Si votre jeu est composé de plusieurs missions, distinguez les objectifs globaux du jeu et les objectifs de chaque mission"
<label for="objective">{{'missionEducationnalObjective_objective_label' | translate}} {{i+1}}</label>
<textarea name="objective" [(ngModel)]="educationnalObjective.objective" (change)="editTrace($event, 'Obj_m')" [placeholder]="translate.instant('missionEducationnalObjective_objective_placeholder')"
[matTooltip]="translate.instant('missionEducationnalObjective_objective_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></textarea>
</div>
......
......@@ -9,6 +9,7 @@ import { SuppressDialogComponent } from 'src/app/components/dialogs/suppress-dia
import { CleanDialogComponent } from 'src/app/components/dialogs/clean-dialog/clean-dialog.component';
import { CreateDialogComponent } from 'src/app/components/dialogs/create-dialog/create-dialog.component';
import { Trace } from 'src/app/class/trace/trace';
import { TranslateService } from '@ngx-translate/core';
@Component({
selector: 'app-educational-objective',
......@@ -21,7 +22,7 @@ export class EducationalObjectiveComponent implements OnInit {
@Input() scenario: Scenario = new Scenario();
@Input() i: number = 0;
constructor(protected pieceDetailsService: PieceDetailsService, protected tooltipService: TooltipService, public dialog: MatDialog) { }
constructor(protected pieceDetailsService: PieceDetailsService, protected tooltipService: TooltipService, public dialog: MatDialog, protected translate: TranslateService) { }
ngOnInit(): void {
}
......@@ -36,7 +37,7 @@ export class EducationalObjectiveComponent implements OnInit {
}
onClickAdd(): void {
const dialogRef = this.dialog.open(CreateDialogComponent, { data: 'une nouvelle Mission' });
const dialogRef = this.dialog.open(CreateDialogComponent, { data: this.translate.instant('mission_new') });
dialogRef.afterClosed().subscribe(result => {
if (result == true) {
this.scenario.missions.push(new Mission());
......@@ -48,7 +49,7 @@ export class EducationalObjectiveComponent implements OnInit {
}
onClickErase(): void {
const dialogRef = this.dialog.open(CleanDialogComponent, { data: 'Objectif pédagogique de la mission '+(this.i+1) });
const dialogRef = this.dialog.open(CleanDialogComponent, { data: this.translate.instant('missionEducationnalObjective_clean')+' '+(this.i+1) });
dialogRef.afterClosed().subscribe(result => {
if (result == true) {
this.educationnalObjective.objective = '';
......@@ -60,7 +61,7 @@ export class EducationalObjectiveComponent implements OnInit {
}
onClickDelete(): void {
const dialogRef = this.dialog.open(SuppressDialogComponent, { data: 'cette Mission '+(this.i+1) });
const dialogRef = this.dialog.open(SuppressDialogComponent, { data: this.translate.instant('mission_delete')+' '+(this.i+1) });
dialogRef.afterClosed().subscribe(result => {
if (result == true) {
this.scenario.missions.splice(this.i, 1);
......
<div class="piece" (mouseover)="displayMenu='show'" (mouseleave)="displayMenu='hide'" (click)="onClickPiece()"
[class]="pieceDetailsService.piece == scenario ? 'isActive' : 'border'"
matTooltip="Le jeu comprend une ou plusieurs Missions. Chaque mission comprend au moins 2 Rôles. Les Rôles peuvent être différents au sein des différentes Missions du jeu."
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips">
[class]="pieceDetailsService.piece == scenario ? 'isActive' : 'border'">
<div class="piece-menu" [class]="displayMenu">
<mat-icon fontIcon="backspace" (click)="onClickErase()"
matTooltip="Effacer le contenu de cette tuile."
[matTooltip]="translate.instant('clearPiece_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
</div>
<div class="piece-form">
<div class="piece-form-character-create"
matTooltip="Si des personnages non joueurs (PNJ) doivent intervenir dans le scénario, ils doivent être décrits avec cette tuile. Chaque personnage a sa propre couleur et sont visibles sur les tâches où ils interviennent. L'enseignant peut être considéré comme un personnage s'il n'a pas un Rôle à part entière."
[matTooltip]="translate.instant('char_create_tooltip')"
matTooltipPosition="before" [matTooltipDisabled]="!tooltipService.activatedTooltips">
<div class="piece-form-title">Créer un nouveau personnage non joueur</div>
<div class="piece-form-title">{{'char_create_title' | translate}}</div>
<div class="piece-form-character-create-top">
<mat-icon fontIcon="person_add"></mat-icon>
<div class="piece-form-character-create-top-name">
<label for="name">Nom</label>
<label for="name">{{'char_name_label' | translate}}</label>
<input name="name" type="text" [(ngModel)]="newCharacter.name" (change)="editTrace($event,'newCharacter_name')"/>
</div>
</div>
<div class="piece-form-create-infos">
<div class="piece-form-character-create-infos-description">
<label for="description">Description</label>
<label for="description">{{'char_description_label' | translate}}</label>
<textarea class="background" name="description" [(ngModel)]="newCharacter.description" (change)="editTrace($event,'newCharacter_description')"></textarea>
</div>
<div class="piece-form-character-create-infos-color">
<label for="color">Couleur</label>
<label for="color">{{'char_color_label' | translate}}</label>
<input name="color" type="color" [(ngModel)]="newCharacter.color" (change)="editTrace($event,'newCharacter_color')"/>
</div>
</div>
<button mat-button (click)="createCharacter()">Créer</button>
<button mat-button (click)="createCharacter()">{{'char_button_create' | translate}}</button>
</div>
<div class="piece-form-character-characters" *ngIf="scenario.characters.length > 0" >
<div class="piece-form-title">Personnages non joueur</div>
<div class="piece-form-title">{{'chars_title' | translate}}</div>
<div class="piece-form-character-characters-character" *ngFor="let character of scenario.characters; let index = index" [style]="index == 0? '' : 'border-top: solid black 1px;'"
matTooltip="Pour faire intervenir ce personnage sur une Tâche ou Événement aléatoire, cliquez sur la tuile en question et sélectionnez ce personnage dans la barre latérale."
[matTooltip]="translate.instant('char_tooltip')"
matTooltipPosition="before" [matTooltipDisabled]="!tooltipService.activatedTooltips">
<div class="piece-form-character-create-top">
<mat-icon fontIcon="person"></mat-icon>
<div class="piece-form-character-create-top-name">
<label for="name">Nom</label>
<label for="name">{{'char_name_label' | translate}}</label>
<input name="name" type="text" [(ngModel)]="character.name" (change)="editTrace($event,'Character_['+index+']_name')"/>
</div>
</div>
<div class="piece-form-create-infos">
<div class="piece-form-character-create-infos-description">
<label for="description">Description</label>
<label for="description">{{'char_description_label' | translate}}</label>
<textarea name="description" [(ngModel)]="character.description" (change)="editTrace($event,'Character_['+index+']_description')"></textarea>
</div>
<div class="piece-form-character-create-infos-color">
<label for="color">Couleur</label>
<label for="color">{{'char_color_label' | translate}}</label>
<input name="color" type="color" [(ngModel)]="character.color" (change)="editTrace($event,'Character_['+index+']_color')"/>
</div>
</div>
<button mat-button (click)="deleteCharacter(index)">Supprimer</button>
<button mat-button (click)="deleteCharacter(index)">{{'char_button_delete' | translate}}</button>
</div>
</div>
</div>
......
......@@ -9,6 +9,7 @@ import { CleanDialogComponent } from 'src/app/components/dialogs/clean-dialog/cl
import { Task } from 'src/app/class/task/task';
import { Trace } from 'src/app/class/trace/trace';
import { MinimapService } from 'src/app/services/minimap/minimap.service';
import { TranslateService } from '@ngx-translate/core';
@Component({
selector: 'app-game-characters',
......@@ -21,7 +22,7 @@ export class GameCharactersComponent implements OnInit {
@Input() scenario = new Scenario()
newCharacter: Character = new Character();
constructor(protected tooltipService: TooltipService, public dialog: MatDialog, protected pieceDetailsService: PieceDetailsService, private minimapService: MinimapService) { }
constructor(protected tooltipService: TooltipService, public dialog: MatDialog, protected pieceDetailsService: PieceDetailsService, private minimapService: MinimapService, protected translate: TranslateService) { }
ngOnInit(): void {
}
......@@ -34,7 +35,7 @@ export class GameCharactersComponent implements OnInit {
}
onClickErase(): void {
const dialogRef = this.dialog.open(CleanDialogComponent, { data: 'Personnages (cela inclut la suppression de tous les personnages)' });
const dialogRef = this.dialog.open(CleanDialogComponent, { data: this.translate.instant('char_clean') });
dialogRef.afterClosed().subscribe(result => {
if (result == true) {
this.newCharacter = new Character();
......@@ -68,7 +69,7 @@ export class GameCharactersComponent implements OnInit {
}
deleteCharacter(index: number): void {
const dialogRef = this.dialog.open(SuppressDialogComponent, { data: 'ce Personnage <'+this.scenario.characters[index].name+'>' });
const dialogRef = this.dialog.open(SuppressDialogComponent, { data: this.translate.instant('char_delete')+' <'+this.scenario.characters[index].name+'>' });
dialogRef.afterClosed().subscribe(result => {
if (result == true) {
this.scenario.missions.forEach(mission => {
......
<div class="piece" (mouseover)="displayMenu='show'" (mouseleave)="displayMenu='hide'" (click)="onClickPiece()"
[class]="pieceDetailsService.piece == scenario ? 'isActive' : 'border'">
[class]="pieceDetailsService.piece == scenario ? 'isActive' : 'border'"
[matTooltip]="translate.instant('game_tooltip')"
matTooltipPosition="after" [matTooltipDisabled]="!tooltipService.activatedTooltips">
<div class="piece-attach piece-attach-right-top"></div>
<div class="piece-attach piece-attach-right-bottom"></div>
<div class="piece-menu" [class]="displayMenu">
<mat-icon fontIcon="backspace" (click)="onClickErase()"
matTooltip="Effacer le contenu de cette tuile."
[matTooltip]="translate.instant('clearPiece_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
</div>
<div class="piece-form">
<div class="piece-form-title">Contexte du jeu</div>
<div class="piece-form-title">{{'gameContext_title' | translate}}</div>
<div class="piece-form-universe">
<label for="univers">Univers</label>
<input name="univers" type="text" [(ngModel)]="gameContext.univers" (change)="editTrace($event, 'Universe')" placeholder="Réaliste"
matTooltip="Est-ce que le jeu est réaliste ou est-il futuriste, médiéval-fantastique, post-apocalyptique, est-ce de la science-fiction ?"
<label for="univers">{{'gameContext_universe_label' | translate}}</label>
<input name="univers" type="text" [(ngModel)]="gameContext.univers" (change)="editTrace($event, 'Universe')" [placeholder]="translate.instant('gameContext_universe_placeholder')"
[matTooltip]="translate.instant('gameContext_universe_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"/>
</div>
<div class="piece-form-support">
<label for="support">Medium / Support(s)</label>
<input name="support" type="text" [(ngModel)]="gameContext.support" (change)="editTrace($event, 'Medium')" placeholder="Jeu en 3D sur ordinateur"
matTooltip="Votre jeu sera-t-il sur ordinateur, en VR, sur tablette / smartphone ou sans technologie particulière ?"
<label for="support">{{'gameContext_support_label' | translate}}</label>
<input name="support" type="text" [(ngModel)]="gameContext.support" (change)="editTrace($event, 'Medium')" [placeholder]="translate.instant('gameContext_support_placeholder')"
[matTooltip]="translate.instant('gameContext_support_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"/>
</div>
<div class="piece-form-duration">
<label for="duration">Durée</label>
<input name="duration" type="text" [(ngModel)]="gameContext.duration" (change)="editTrace($event, 'Duration_g')" placeholder="3h"
matTooltip="Combien de temps va durer le jeu ? Sachant que le jeu comporte 1 ou plusieurs missions. Une mission peut être la durée d’une séance de cours et le jeu se déroulerait sur plusieurs séances de cours."
<label for="duration">{{'gameContext_duration_label' | translate}}</label>
<input name="duration" type="text" [(ngModel)]="gameContext.duration" (change)="editTrace($event, 'Duration_g')" [placeholder]="translate.instant('gameContext_duration_placeholder')"
[matTooltip]="translate.instant('gameContext_duration_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"/>
</div>
<div class="piece-form-intrigue">
<label for="intrigue">Intrigue</label>
<textarea name="intrigue" [(ngModel)]="gameContext.intrigue" (change)="editTrace($event, 'Plot_g')" placeholder="Vous êtes stagiaire dans une agence de communication et devez faire vos preuves pour être embauché.e"
matTooltip="Quelle est l’histoire du jeu ? Quel est l’enjeu pour les joueurs ?"
<label for="intrigue">{{'gameContext_intrigue_label' | translate}}</label>
<textarea name="intrigue" [(ngModel)]="gameContext.intrigue" (change)="editTrace($event, 'Plot_g')" [placeholder]="translate.instant('gameContext_intrigue_placeholder')"
[matTooltip]="translate.instant('gameContext_intrigue_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></textarea>
</div>
<div class="piece-form-other">
<label for="other">Contexte d'utilisation</label>
<textarea name="other" [(ngModel)]="gameContext.other" (change)="editTrace($event, 'Other_g')" placeholder="Contexte d’utilisation : lieu, présence de tuteur/formateur, à quel moment du cursus utiliser ce jeu, matériel nécessaire"
matTooltip="Tout autre élément que vous souhaiteriez prendre en compte dans le jeu et non défini dans les tuiles"
<label for="other">{{'gameContext_other_label' | translate}}</label>
<textarea name="other" [(ngModel)]="gameContext.other" (change)="editTrace($event, 'Other_g')" [placeholder]="translate.instant('gameContext_other_placeholder')"
[matTooltip]="translate.instant('gameContext_other_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></textarea>
</div>
</div>
......
......@@ -6,6 +6,7 @@ import { TooltipService } from 'src/app/services/tooltip/tooltip.service';
import { CleanDialogComponent } from 'src/app/components/dialogs/clean-dialog/clean-dialog.component';
import { MatDialog } from '@angular/material/dialog';
import { Trace } from 'src/app/class/trace/trace';
import { TranslateService } from '@ngx-translate/core';
@Component({
selector: 'app-game-context',
......@@ -17,7 +18,7 @@ export class GameContextComponent implements OnInit {
@Input() scenario: Scenario = new Scenario();
@Input() gameContext: GameContext = new GameContext();
constructor(protected pieceDetailsService: PieceDetailsService, protected tooltipService: TooltipService, public dialog: MatDialog) { }
constructor(protected pieceDetailsService: PieceDetailsService, protected tooltipService: TooltipService, public dialog: MatDialog, protected translate: TranslateService) { }
ngOnInit(): void {
}
......@@ -25,7 +26,7 @@ export class GameContextComponent implements OnInit {
displayMenu: string = 'hide';
onClickErase(): void {
const dialogRef = this.dialog.open(CleanDialogComponent, { data: 'Contexte du jeu' });
const dialogRef = this.dialog.open(CleanDialogComponent, { data: this.translate.instant('gameContext_title') });
dialogRef.afterClosed().subscribe(result => {
if (result == true) {
this.gameContext.univers = '';
......
<div class="piece" (mouseover)="displayMenu='show'" (mouseleave)="displayMenu='hide'" (click)="onClickPiece()"
[class]="pieceDetailsService.piece == scenario ? 'isActive' : 'border'"
matTooltip="Le jeu comprend une ou plusieurs Missions. Chaque mission comprend au moins 2 Rôles. Les Rôles peuvent être différents au sein des différentes Missions du jeu."
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips">
[matTooltip]="translate.instant('game_tooltip')"
matTooltipPosition="after" [matTooltipDisabled]="!tooltipService.activatedTooltips">
<div class="piece-attach piece-attach-right-top"></div>
<div class="piece-attach piece-attach-right-bottom"></div>
<div class="piece-menu" [class]="displayMenu">
<mat-icon fontIcon="backspace" (click)="onClickErase()"
matTooltip="Effacer le contenu de cette tuile."
[matTooltip]="translate.instant('clearPiece_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
</div>
<div class="piece-form">
<div class="piece-form-title">Objectif(s) pédagogique</div>
<div class="piece-form-title">{{'gameEducationnalObjective_title' | translate}}</div>
<mat-icon class="piece-form-comment" fontIcon="comment" *ngIf="scenario.comments.length > 0"></mat-icon>
<div class="piece-form-objective">
<label for="objective">Commun pour le jeu</label>
<textarea name="objective" [(ngModel)]="gameEducationnalObjective.objective" (change)="editTrace($event, 'Obj_game')" placeholder="- Améliorer les softskills&#10;- Apprendre à coopérer"
matTooltip="Ce que l’on veut atteindre en situation de formation. Commencer chaque objectif par un verbe. Si votre jeu est composé de plusieurs missions, distinguez les objectifs globaux du jeu et les objectifs de chaque mission."
<label for="objective">{{'gameEducationnalObjective_objective_label' | translate}}</label>
<textarea name="objective" [(ngModel)]="gameEducationnalObjective.objective" (change)="editTrace($event, 'Obj_game')" [placeholder]="translate.instant('gameEducationnalObjective_objective_placeholder')"
[matTooltip]="translate.instant('gameEducationnalObjective_objective_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></textarea>
</div>
<div class="piece-form-footer">Sorbonne Université, LIP6 - IMT Nord Europe</div>
......
......@@ -6,6 +6,7 @@ import { TooltipService } from 'src/app/services/tooltip/tooltip.service';
import { CleanDialogComponent } from 'src/app/components/dialogs/clean-dialog/clean-dialog.component';
import { MatDialog } from '@angular/material/dialog';
import { Trace } from 'src/app/class/trace/trace';
import { TranslateService } from '@ngx-translate/core';
@Component({
selector: 'app-game-educationnal-objective',
......@@ -17,7 +18,7 @@ export class GameEducationnalObjectiveComponent implements OnInit {
@Input() scenario: Scenario = new Scenario();
@Input() gameEducationnalObjective: GameEducationnalObjective = new GameEducationnalObjective();
constructor(protected pieceDetailsService: PieceDetailsService, protected tooltipService: TooltipService, public dialog: MatDialog) { }
constructor(protected pieceDetailsService: PieceDetailsService, protected tooltipService: TooltipService, public dialog: MatDialog, protected translate: TranslateService) { }
ngOnInit(): void {
}
......@@ -32,7 +33,7 @@ export class GameEducationnalObjectiveComponent implements OnInit {
}
onClickErase(): void {
const dialogRef = this.dialog.open(CleanDialogComponent, { data: 'Objectif pédagogique' });
const dialogRef = this.dialog.open(CleanDialogComponent, { data: this.translate.instant('gameEducationnalObjective_title') });
dialogRef.afterClosed().subscribe(result => {
if (result == true) {
this.gameEducationnalObjective.objective = '';
......
<div class="piece" (mouseover)="displayMenu='show'" (mouseleave)="displayMenu='hide'" (click)="onClickPiece()"
[class]="pieceDetailsService.piece == scenario.missions[i] ? 'isActive' : 'border'"
matTooltip="La mission est commune à tous les Rôles"
[matTooltip]="translate.instant('mission_tooltip')"
matTooltipPosition="before" [matTooltipDisabled]="!tooltipService.activatedTooltips">
<div class="piece-attach piece-attach-left-top"></div>
<div class="piece-attach piece-attach-right"></div>
......@@ -8,40 +8,40 @@ matTooltipPosition="before" [matTooltipDisabled]="!tooltipService.activatedToolt
<div class="piece-menu" [class]="displayMenu">
<mat-icon fontIcon="add" (click)="onClickAdd()"
matTooltip="Ajouter une mission."
[matTooltip]="translate.instant('mission_add_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
<mat-icon fontIcon="backspace" (click)="onClickErase()"
matTooltip="Effacer le contenu de cette tuile."
[matTooltip]="translate.instant('clearPiece_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
<mat-icon fontIcon="delete" (click)="onClickDelete()" *ngIf="canDelete()"
matTooltip="Supprimer la mission."
[matTooltip]="translate.instant('mission_delete_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
</div>
<div class="piece-form">
<div class="piece-form-title">Contexte de la mission {{i+1}}</div>
<div class="piece-form-title">{{'missionContext_title' | translate}} {{i+1}}</div>
<div class="piece-form-duration">
<label for="duration">Durée</label>
<input name="duration" type="text" [(ngModel)]="missionContext.duration" (change)="editTrace($event, 'Duration_m')" placeholder="1h"
matTooltip="Combien de temps va durer la mission ?"
<label for="duration">{{'missionContext_duration_label' | translate}}</label>
<input name="duration" type="text" [(ngModel)]="missionContext.duration" (change)="editTrace($event, 'Duration_m')" [placeholder]="translate.instant('missionContext_duration_placeholder')"
[matTooltip]="translate.instant('missionContext_duration_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"/>
</div>
<div class="piece-form-intrigue">
<label for="intrigue">Intrigue</label>
<textarea name="intrigue" [(ngModel)]="missionContext.intrigue" (change)="editTrace($event, 'Plot_m')" placeholder="Concevez un site web ergonomique pour votre premier client"
matTooltip="Quelle est l’histoire de la mission ? Quel est l’enjeu pour les joueurs ?"
<label for="intrigue">{{'missionContext_intrigue_label' | translate}}</label>
<textarea name="intrigue" [(ngModel)]="missionContext.intrigue" (change)="editTrace($event, 'Plot_m')" [placeholder]="translate.instant('missionContext_intrigue_placeholder')"
[matTooltip]="translate.instant('missionContext_intrigue_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></textarea>
</div>
<div class="piece-form-communication">
<label for="communication">Moyen(s) de communication</label>
<textarea name="communication" [(ngModel)]="missionContext.communication" (change)="editTrace($event, 'Communication')" placeholder="Chat en ligne, vocal en ligne, face à face, talkie walkie, pigeon voyageur..."
matTooltip="Comment les joueurs vont-ils communiquer entre eux : à l'oral, par chat, en vocal sur ordinateur, par messages, etc."
<label for="communication">{{'missionContext_communication_label' | translate}}</label>
<textarea name="communication" [(ngModel)]="missionContext.communication" (change)="editTrace($event, 'Communication')" [placeholder]="translate.instant('missionContext_communication_placeholder')"
[matTooltip]="translate.instant('missionContext_communication_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></textarea>
</div>
<div class="piece-form-divers">
<label for="divers">Autre</label>
<textarea name="divers" [(ngModel)]="missionContext.various" (change)="editTrace($event, 'Other_m')" placeholder="Contexte d’utilisation : lieu, présence de tuteur/formateur, à quel moment du cursus utiliser ce jeu, matériel nécessaire, public cible"
matTooltip="Tout autre élément que vous souhaiteriez prendre en compte dans la mission et non défini dans les tuiles"
<label for="divers">{{'missionContext_other_label' | translate}}</label>
<textarea name="divers" [(ngModel)]="missionContext.various" (change)="editTrace($event, 'Other_m')" [placeholder]="translate.instant('missionContext_other_placeholder')"
[matTooltip]="translate.instant('missionContext_other_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></textarea>
</div>
</div>
......
......@@ -9,6 +9,7 @@ import { SuppressDialogComponent } from 'src/app/components/dialogs/suppress-dia
import { CleanDialogComponent } from 'src/app/components/dialogs/clean-dialog/clean-dialog.component';
import { CreateDialogComponent } from 'src/app/components/dialogs/create-dialog/create-dialog.component';
import { Trace } from 'src/app/class/trace/trace';
import { TranslateService } from '@ngx-translate/core';
@Component({
selector: 'app-mission-context',
......@@ -17,7 +18,7 @@ import { Trace } from 'src/app/class/trace/trace';
})
export class MissionContextComponent implements OnInit {
constructor(protected pieceDetailsService: PieceDetailsService, protected tooltipService: TooltipService, public dialog: MatDialog) { }
constructor(protected pieceDetailsService: PieceDetailsService, protected tooltipService: TooltipService, public dialog: MatDialog, protected translate: TranslateService) { }
@Input() missionContext: MissionContext = new MissionContext();
@Input() scenario: Scenario = new Scenario();
......@@ -36,7 +37,7 @@ export class MissionContextComponent implements OnInit {
}
onClickAdd(): void {
const dialogRef = this.dialog.open(CreateDialogComponent, { data: 'une nouvelle Mission' });
const dialogRef = this.dialog.open(CreateDialogComponent, { data: this.translate.instant('mission_new') });
dialogRef.afterClosed().subscribe(result => {
if (result == true) {
this.scenario.missions.push(new Mission());
......@@ -48,7 +49,7 @@ export class MissionContextComponent implements OnInit {
}
onClickErase(): void {
const dialogRef = this.dialog.open(CleanDialogComponent, { data: 'Contexte de la mission '+(this.i+1) });
const dialogRef = this.dialog.open(CleanDialogComponent, { data: this.translate.instant('missionContext_clean')+' '+(this.i+1) });
dialogRef.afterClosed().subscribe(result => {
if (result == true) {
this.missionContext.duration = '';
......@@ -63,7 +64,7 @@ export class MissionContextComponent implements OnInit {
}
onClickDelete(): void {
const dialogRef = this.dialog.open(SuppressDialogComponent, { data: 'cette Mission '+(this.i+1) });
const dialogRef = this.dialog.open(SuppressDialogComponent, { data: this.translate.instant('mission_delete')+' '+(this.i+1) });
dialogRef.afterClosed().subscribe(result => {
if (result == true) {
this.scenario.missions.splice(this.i, 1);
......
<div class="piece" (mouseover)="displayMenu='show'" (mouseleave)="displayMenu='hide'" (click)="onClickPiece()"
[class]="pieceDetailsService.piece == role ? 'isActive' : 'border'"
matTooltip="Premier Rôle incarné par un joueur. Le deuxième se trouve un plus bas dans la page."
[matTooltip]="translate.instant('role_tooltip')"
matTooltipPosition="left" [matTooltipDisabled]="!tooltipService.activatedTooltips || i != 0">
<div class="piece-attach piece-attach-left-top"></div>
<div class="piece-attach piece-attach-right"></div>
......@@ -8,70 +8,70 @@ matTooltipPosition="left" [matTooltipDisabled]="!tooltipService.activatedTooltip
<div class="piece-menu" [class]="displayMenu">
<mat-icon fontIcon="add" (click)="onClickAdd()"
matTooltip="Ajouter un rôle."
[matTooltip]="translate.instant('role_add_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
<mat-icon fontIcon="backspace" (click)="onClickErase()"
matTooltip="Effacer le contenu de cette tuile."
[matTooltip]="translate.instant('clearPiece_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
<mat-icon fontIcon="delete" (click)="onClickDelete()" *ngIf="canDelete()"
matTooltip="Supprimer la tuile."
[matTooltip]="translate.instant('role_delete_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
</div>
<div class="piece-form">
<div class="piece-form-title">{{role.intitule ? role.intitule : 'Role '+(i+1)}}</div>
<div class="piece-form-title">{{role.intitule ? role.intitule : translate.instant('role_title')+' '+(i+1)}}</div>
<mat-icon class="piece-form-comment" fontIcon="comment" *ngIf="role.comments.length > 0"></mat-icon>
<img src="./assets/background-images/role_opacity0.png" draggable="false" *ngIf="i == 0"/>
<img src="./assets/background-images/role2_opacity0.png" draggable="false" *ngIf="i == 1"/>
<div class="piece-form-intitule">
<label for="intitule">Intitulé</label>
<input name="intitule" type="text" [(ngModel)]="role.intitule" (change)="editTrace($event,'name')" placeholder="Développeur/euse web"
matTooltip="Nom de ce rôle."
<label for="intitule">{{'role_intitule_label' | translate}}</label>
<input name="intitule" type="text" [(ngModel)]="role.intitule" (change)="editTrace($event,'name')" [placeholder]="translate.instant('role_intitule_placeholder')"
[matTooltip]="translate.instant('role_intitule_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"/>
</div>
<div class="piece-form-name">
<label for="name">Nom de la quête</label>
<input name="name" type="text" [(ngModel)]="role.questName" (change)="editTrace($event,'quest_name')" placeholder="Intégration de site web"
matTooltip="En 2-3 mots, l'intitulé de la quête de ce rôle"
<label for="name">{{'role_name_label' | translate}}</label>
<input name="name" type="text" [(ngModel)]="role.questName" (change)="editTrace($event,'quest_name')" [placeholder]="translate.instant('role_name_placeholder')"
[matTooltip]="translate.instant('role_name_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"/>
</div>
<div class="piece-form-description">
<label for="description">Description</label>
<label for="description">{{'role_description_label' | translate}}</label>
<textarea name="description" [(ngModel)]="role.description" (change)="editTrace($event,'description_r')"
matTooltip="Élément précis sur ce rôle si nécessaire."
[matTooltip]="translate.instant('role_description_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></textarea>
</div>
<div class="piece-form-objectives">
<label for="objective">Objectif(s) pédagogique(s)</label>
<label for="objective">{{'role_objective_label' | translate}}</label>
<div class="piece-form-objectives-objective" *ngFor="let objective of role.educationnalObjectives, let i = index">
<input name="objective" type="text" [(ngModel)]="role.educationnalObjectives[i].objective" (change)="editTrace($event, 'Obj_['+(i)+']')" placeholder="Nom de l'objectif"
matTooltip="Les objectifs visés pour ce rôle en particulier"
<input name="objective" type="text" [(ngModel)]="role.educationnalObjectives[i].objective" (change)="editTrace($event, 'Obj_['+(i)+']')" [placeholder]="translate.instant('role_objective_placeholder')"
[matTooltip]="translate.instant('role_objective_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"/>
<button mat-button *ngIf="role.educationnalObjectives.length > 1" (click)="removeEducationnalObjective(i)"><mat-icon fontIcon="remove"></mat-icon></button>
</div>
<button mat-button class="piece-form-objectives-add" (click)="addEducationnalObjective()"><mat-icon fontIcon="add"></mat-icon></button>
</div>
<div class="piece-form-rewards">
<label for="reward">Récompense(s)</label>
<label for="reward">{{'role_reward_label' | translate}}</label>
<div class="piece-form-rewards-reward" *ngFor="let reward of role.rewards, let i = index">
<div class="piece-form-rewards-reward-type">
<label>Type</label>
<label>{{'role_reward_type_label' | translate}}</label>
<select [(ngModel)]="reward.type" (change)="changeRewardType(i, reward.type)"
matTooltip="Ce que le rôle va obtenir à la fin de sa quête (gagner en compétence, gagner un objet, débloquer une quête, …)"
[matTooltip]="translate.instant('role_reward_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips">
<option value="quest">Débuter une nouvelle quête</option>
<option value="skill">Travailler un champ de compétence</option>
<option value="quest">{{'role_reward_type_newQuest' | translate}}</option>
<option value="skill">{{'role_reward_type_skill' | translate}}</option>
<!--<option value="character">Récupérer le contact d'un PNJ</option>-->
<option value="objective">Atteindre un objectif pédagoqique</option>
<option value="objects">Récupérer un objet</option>
<option value="objective">{{'role_reward_type_objective' | translate}}</option>
<option value="objects">{{'role_reward_type_object' | translate}}</option>
<!--<option value="discuss">Changer de discussion</option>-->
<option value="other">Autre</option>
<option value="other">{{'role_reward_type_other' | translate}}</option>
</select>
</div>
<div class="piece-form-rewards-reward-objects" *ngIf="reward.type == 'objects'">
<div class="piece-form-rewards-reward-objects-object" *ngFor="let object of getObjectsReward(i).objects, let j = index">
<input type="number" [(ngModel)]="object.number" (change)="editTrace($event, 'Reward_['+i+']_object_['+j+']_quantity')"/>
<input type="text" [(ngModel)]="object.name" (change)="editTrace($event, 'Reward_['+i+']_object_['+j+']_name')" placeholder="Nom de l'objet"/>
<input type="text" [(ngModel)]="object.name" (change)="editTrace($event, 'Reward_['+i+']_object_['+j+']_name')" [placeholder]="translate.instant('role_reward_type_object_placeholder')"/>
<button mat-button (click)="removeObject(i,j)"><mat-icon fontIcon="remove"></mat-icon></button>
</div>
<button mat-button class="piece-form-rewards-reward-objects-add" (click)="addObject(i)"><mat-icon fontIcon="add"></mat-icon></button>
......@@ -94,7 +94,7 @@ matTooltipPosition="left" [matTooltipDisabled]="!tooltipService.activatedTooltip
<div class="piece-form-rewards-reward-skill" *ngIf="reward.type == 'skill'">
<input type="number" [(ngModel)]="getSkillReward(i).quantity" (change)="editTrace($event, 'Reward_['+i+']_quantity')"/>
<select [(ngModel)]="getSkillReward(i).skill" (change)="editTrace($event, 'Reward_['+i+']_skill')"
matTooltip="Choisir une compétence créée ci-dessous"
[matTooltip]="translate.instant('role_reward_type_skill_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips">
<ng-container *ngFor="let skill of role.ressources">
<option [ngValue]="skill" *ngIf="skill.type == 'attribut'">{{skill.name}}</option>
......@@ -104,7 +104,7 @@ matTooltipPosition="left" [matTooltipDisabled]="!tooltipService.activatedTooltip
</div>
<div class="piece-form-rewards-reward-quest" *ngIf="reward.type == 'quest'">
<select (change)="changeQuestReward(i, $event)"
matTooltip="Choisir une quête d'une autre mission avec le même nom de Rôle"
[matTooltip]="translate.instant('role_reward_type_newQuest_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips">
<ng-container *ngFor="let mission of scenario.missions; let indexMission = index">
<ng-container *ngFor="let quest of mission.roles; let indexRole = index">
......@@ -119,7 +119,7 @@ matTooltipPosition="left" [matTooltipDisabled]="!tooltipService.activatedTooltip
</div>
<div class="piece-form-rewards-reward-objective" *ngIf="reward.type == 'objective'">
<select [(ngModel)]="getObjectiveReward(i).objective" (change)="editTrace($event, 'Reward_['+i+']_objective')"
matTooltip="Choisir un objectif pédagogique créé ci-dessus"
[matTooltip]="translate.instant('role_reward_type_objective_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips">
<option [ngValue]="objective" *ngFor="let objective of role.educationnalObjectives">{{objective.objective}}</option>
</select>
......@@ -136,33 +136,33 @@ matTooltipPosition="left" [matTooltipDisabled]="!tooltipService.activatedTooltip
</div>
<div class="piece-form-personnalization">
<div class="piece-form-title">Personnalisation</div>
<div class="piece-form-title">{{'role_personnalization_title' | translate}}</div>
<div class="piece-form-personnalization-appearance">
<label>Apparence, équipement</label>
<label>{{'role_personnalization_label' | translate}}</label>
<textarea [(ngModel)]="role.stuff" (change)="editTrace($event, 'equipment')"
matTooltip="Si le rôle a une tenue particulière ou des objets spécifiques"
[matTooltip]="translate.instant('role_personnalization_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></textarea>
</div>
</div>
<div class="piece-form-ressources"
matTooltip="Objets, ressources disponibles pour ce rôle"
[matTooltip]="translate.instant('role_ressource_tooltip')"
matTooltipPosition="before" [matTooltipDisabled]="!tooltipService.activatedTooltips">
<div class="piece-form-title">Ressources & compétences</div>
<div class="piece-form-title">{{'role_ressource_title' | translate}}</div>
<div class="piece-form-ressources-ressource" *ngFor="let ressource of role.ressources, let i = index">
<div class="piece-form-ressources-ressource-name">
<label for="name">Nom</label>
<label for="name">{{'role_ressource_name_label' | translate}}</label>
<input name="name" type="text" [(ngModel)]="ressource.name" (change)="editTrace($event, 'Skill/Ressource_['+i+']_name')"/>
</div>
<div class="piece-form-ressources-ressource-quantity">
<label for="quantity">Nombre / stats</label>
<label for="quantity">{{'role_ressource_quantity_label' | translate}}</label>
<input name="quantity" type="text" [(ngModel)]="ressource.number" (change)="editTrace($event, 'Skill/Ressource_['+i+']_stats')">
</div>
<div class="piece-form-ressources-ressource-quantity">
<label for="type">Type</label>
<label for="type">{{'role_ressource_type_label' |translate}}</label>
<select name="type" [(ngModel)]="ressource.type" (change)="editTrace($event, 'Skill/Ressource_['+i+']_type')">
<option value="ressource">Objet</option>
<option value="attribut">Compétence</option>
<option value="ressource">{{'role_ressource_type_object' | translate}}</option>
<option value="attribut">{{'role_ressource_type_skill' | translate}}</option>
</select>
</div>
<button mat-button><mat-icon fontIcon="remove" (click)="removeRessource(i)"></mat-icon></button>
......@@ -170,39 +170,39 @@ matTooltipPosition="left" [matTooltipDisabled]="!tooltipService.activatedTooltip
<button mat-button class="piece-form-ressources-add" (click)="addRessource()"><mat-icon fontIcon="add"></mat-icon></button>
</div>
<div class="piece-form-title">Rôle supplémentaire</div>
<div class="piece-form-title">{{'role_supplementaryRole_title' | translate}}</div>
<div class="piece-form-supplementary" [style.background]="'linear-gradient(302deg, '+supplementaryRole.color+' 0%, '+supplementaryRole.color+' 50%, #9ad5ec 50%, #9ad5ec 100%)'"
*ngFor="let supplementaryRole of role.supplementaryRoles, let i = index">
<div class="piece-form-supplementary-form">
<div>
<div class="piece-form-supplementary-form-name">
<label for="name">Nom</label>
<label for="name">{{'role_supplementaryRole_name_label' | translate}}</label>
<input name="name" type="text" [(ngModel)]="supplementaryRole.name" (change)="editTrace($event, 'Secondary_role_['+i+']_name')"
matTooltip="Intitulé du rôle supplémentaire"
[matTooltip]="translate.instant('role_supplementaryRole_name_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"/>
</div>
<div class="piece-form-supplementary-form-color">
<label for="color">Couleur</label>
<label for="color">{{'role_supplementaryRole_color_label' | translate}}</label>
<input name="color" type="color" [(ngModel)]="supplementaryRole.color" (change)="editTrace($event, 'Secondary_role_['+i+']_color')"
matTooltip="Mettre une couleur différente pour ces Rôles additionnels permet de repérer plus rapidement les Tâches qui leur sont associées"
[matTooltip]="translate.instant('role_supplementaryRole_color_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"/>
</div>
<div class="piece-form-supplementary-form-textarea">
<label for="objectives">Objectifs</label>
<label for="objectives">{{'role_supplementaryRole_objective_label' | translate}}</label>
<textarea name="objectives" [(ngModel)]="supplementaryRole.objectives" (change)="editTrace($event, 'Secondary_role_['+i+']_obj')"
matTooltip="Objectifs (pédagogiques) de ce rôle supplémentaire"
[matTooltip]="translate.instant('role_supplementaryRole_objective_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></textarea>
</div>
<div class="piece-form-supplementary-form-textarea">
<label for="skills">Compétences</label>
<label for="skills">{{'role_supplementaryRole_skill_label' | translate}}</label>
<textarea name="skills" [(ngModel)]="supplementaryRole.skills" (change)="editTrace($event, 'Secondary_role_['+i+']_skill')"
matTooltip="Compétences spécifiques à ce rôle pour effectuer les tâches qui lui seront liées"
[matTooltip]="translate.instant('role_supplementaryRole_skill_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></textarea>
</div>
<div class="piece-form-supplementary-form-textarea">
<label for="rules">Règles</label>
<label for="rules">{{'role_supplementaryRole_rule_label' | translate}}</label>
<textarea name="rules" [(ngModel)]="supplementaryRole.rules" (change)="editTrace($event, 'Secondary_role_['+i+']_rule')"
matTooltip="Règles spécifiques à ce rôle (a-t-il des contraintes ou des droits, accès supplémentaires ?)"
[matTooltip]="translate.instant('role_supplementaryRole_rule_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></textarea>
</div>
<button mat-button (click)="removeSupplementaryRole(i)"><mat-icon fontIcon="remove"></mat-icon></button>
......
......@@ -19,6 +19,7 @@ import { CleanDialogComponent } from 'src/app/components/dialogs/clean-dialog/cl
import { CreateDialogComponent } from 'src/app/components/dialogs/create-dialog/create-dialog.component';
import { Trace } from 'src/app/class/trace/trace';
import { MinimapService } from 'src/app/services/minimap/minimap.service';
import { TranslateService } from '@ngx-translate/core';
@Component({
selector: 'app-role',
......@@ -33,7 +34,7 @@ export class RoleComponent implements OnInit {
@Input() i: number = 0;
@Input() missionIndex: number = 0;
constructor(protected pieceDetailsService: PieceDetailsService, protected tooltipService: TooltipService, public dialog: MatDialog, private minimapService: MinimapService) { }
constructor(protected pieceDetailsService: PieceDetailsService, protected tooltipService: TooltipService, public dialog: MatDialog, private minimapService: MinimapService, protected translate: TranslateService) { }
ngOnInit(): void {
this.mission.equalizeLengths();
......@@ -50,7 +51,7 @@ export class RoleComponent implements OnInit {
}
onClickAdd(): void {
const dialogRef = this.dialog.open(CreateDialogComponent, { data: 'un nouveau Rôle pour la Mission '+(this.missionIndex+1) });
const dialogRef = this.dialog.open(CreateDialogComponent, { data: this.translate.instant('role_new')+' '+(this.missionIndex+1) });
dialogRef.afterClosed().subscribe(result => {
if (result == true) {
this.mission.roles.push(new Role());
......@@ -61,7 +62,7 @@ export class RoleComponent implements OnInit {
}
onClickErase(): void {
const dialogRef = this.dialog.open(CleanDialogComponent, { data: 'Role '+(this.role.intitule ? '<'+this.role.intitule+'>' : (this.i+1)) });
const dialogRef = this.dialog.open(CleanDialogComponent, { data: this.translate.instant('role_clean')+' '+(this.role.intitule ? '<'+this.role.intitule+'>' : (this.i+1)) });
dialogRef.afterClosed().subscribe(result => {
if (result == true) {
this.role.intitule = '';
......@@ -91,7 +92,7 @@ export class RoleComponent implements OnInit {
}
onClickDelete(): void {
const dialogRef = this.dialog.open(SuppressDialogComponent, { data: 'ce Rôle '+(this.role.intitule ? '<'+this.role.intitule+'>' : this.i+1) });
const dialogRef = this.dialog.open(SuppressDialogComponent, { data: this.translate.instant('role_delete')+' '+(this.role.intitule ? '<'+this.role.intitule+'>' : this.i+1) });
dialogRef.afterClosed().subscribe(result => {
let missionIndex: number = this.scenario.missions.findIndex(mission => mission == this.mission);
if (result == true) {
......@@ -119,7 +120,7 @@ export class RoleComponent implements OnInit {
}
removeEducationnalObjective(index: number): void {
const dialogRef = this.dialog.open(SuppressDialogComponent, { data: 'cette Objectif Pédagogique' });
const dialogRef = this.dialog.open(SuppressDialogComponent, { data: this.translate.instant('role_objective_delete') });
dialogRef.afterClosed().subscribe(result => {
if (result == true) {
this.role.educationnalObjectives.splice(index, 1);
......@@ -138,7 +139,7 @@ export class RoleComponent implements OnInit {
}
removeRessource(index: number): void {
const dialogRef = this.dialog.open(SuppressDialogComponent, { data: 'cette Ressource' });
const dialogRef = this.dialog.open(SuppressDialogComponent, { data: this.translate.instant('role_ressource_delete') });
dialogRef.afterClosed().subscribe(result => {
if (result == true) {
this.role.tasks.forEach(inlineTasks => {
......@@ -166,7 +167,7 @@ export class RoleComponent implements OnInit {
}
removeSupplementaryRole(index: number) {
const dialogRef = this.dialog.open(SuppressDialogComponent, { data: 'ce Rôle Supplémentaire'+(this.role.supplementaryRoles[index].name ? ' <'+this.role.supplementaryRoles[index].name+'>' : '') });
const dialogRef = this.dialog.open(SuppressDialogComponent, { data: this.translate.instant('role_supplementaryRole_delete')+(this.role.supplementaryRoles[index].name ? ' <'+this.role.supplementaryRoles[index].name+'>' : '') });
dialogRef.afterClosed().subscribe(result => {
if (result == true) {
this.role.supplementaryRoles.splice(index, 1);
......@@ -202,7 +203,7 @@ export class RoleComponent implements OnInit {
}
removeReward(index: number): void {
const dialogRef = this.dialog.open(SuppressDialogComponent, { data: 'cette Récompense' });
const dialogRef = this.dialog.open(SuppressDialogComponent, { data: this.translate.instant('role_reward_delete') });
dialogRef.afterClosed().subscribe(result => {
if (result == true) {
this.role.rewards.splice(index, 1);
......@@ -245,7 +246,7 @@ export class RoleComponent implements OnInit {
}
removeObject(i: number, j: number): void {
const dialogRef = this.dialog.open(SuppressDialogComponent, { data: 'cet Objet de la Récompense' });
const dialogRef = this.dialog.open(SuppressDialogComponent, { data: this.translate.instant('role_reward_type_object_delete') });
dialogRef.afterClosed().subscribe(result => {
if (result == true) {
this.getObjectsReward(i).objects.splice(j, 1);
......
......@@ -3,29 +3,29 @@
<div class="piece-menu" [class]="displayMenu">
<mat-icon fontIcon="backspace" (click)="onClickErase()"
matTooltip="Effacer le contenu de cette tuile."
[matTooltip]="translate.instant('clearPiece_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
</div>
<div class="piece-form">
<div class="piece-form-rules">
<div class="piece-form-title">Règles du jeu</div>
<div class="piece-form-title">{{'rules_title' | translate}}</div>
<textarea [(ngModel)]="scenario.gameRules" (change)="editTrace($event,'rules')"
matTooltip="Éléments importants à prendre en compte dans les règles du jeu"
[matTooltip]="translate.instant('rules_rule_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></textarea>
</div>
<div class="piece-form-ressources">
<div class="piece-form-title">Ressources / objets</div>
<div class="piece-form-title">{{'rules_ressource_title' | translate}}</div>
<div class="piece-form-ressources-object">
<div class="piece-form-ressources-object-infos" *ngFor="let ressource of scenario.ressources; let i = index"
matTooltip="Objets, ressources disponibles pour TOUS les rôles"
[matTooltip]="translate.instant('rules_ressource_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips">
<div class="piece-form-ressources-object-infos-name">
<label for="name">Nom</label>
<label for="name">{{'rules_ressource_name_label' | translate}}</label>
<input name="name" type="text" [(ngModel)]="ressource.name" (change)="editTrace($event,'Ressource_['+i+']_name')"/>
</div>
<div class="piece-form-ressources-object-infos-quantity">
<label for="quantity">Quantité</label>
<label for="quantity">{{'rules_ressource_quantity_label' | translate}}</label>
<input name="quantity" type="number" min="1"[(ngModel)]="ressource.number" (change)="editTrace($event,'Ressource_['+i+']_quantity')"/>
</div>
<button mat-button (click)="removeRessource(i)"><mat-icon fontIcon="remove"></mat-icon></button>
......
......@@ -9,6 +9,7 @@ import { PieceDetailsService } from 'src/app/services/piece-details/piece-detail
import { Task } from 'src/app/class/task/task';
import { Trace } from 'src/app/class/trace/trace';
import { MinimapService } from 'src/app/services/minimap/minimap.service';
import { TranslateService } from '@ngx-translate/core';
@Component({
selector: 'app-rules',
......@@ -20,7 +21,7 @@ export class RulesComponent implements OnInit {
displayMenu: string = 'hide';
@Input() scenario: Scenario = new Scenario();
constructor(protected tooltipService: TooltipService, public dialog: MatDialog, protected pieceDetailsService: PieceDetailsService, private minimapService: MinimapService) { }
constructor(protected tooltipService: TooltipService, public dialog: MatDialog, protected pieceDetailsService: PieceDetailsService, private minimapService: MinimapService, protected translate: TranslateService) { }
ngOnInit(): void {
}
......@@ -33,7 +34,7 @@ export class RulesComponent implements OnInit {
}
onClickErase(): void {
const dialogRef = this.dialog.open(CleanDialogComponent, { data: 'Règles du jeu (cela inclut la suppression de toutes les ressources)' });
const dialogRef = this.dialog.open(CleanDialogComponent, { data: this.translate.instant('rules_clean') });
dialogRef.afterClosed().subscribe(result => {
if (result == true) {
this.scenario.gameRules = '';
......@@ -70,7 +71,7 @@ export class RulesComponent implements OnInit {
}
removeRessource(index: number): void {
const dialogRef = this.dialog.open(SuppressDialogComponent, { data: 'cette Ressource' });
const dialogRef = this.dialog.open(SuppressDialogComponent, { data: this.translate.instant('rules_delete') });
dialogRef.afterClosed().subscribe(result => {
if (result == true) {
this.scenario.missions.forEach(mission => {
......
<div class="piece" [ngStyle]="{'width': pieceWidth+'px'}" (mouseover)="displayMenu='show'" (mouseleave)="displayMenu='hide'" (click)="onClickPiece()"
[class]="pieceDetailsService.piece == step ? 'isActive' : 'border'"
matTooltip="Permet de découper le scénario en grandes étapes."
[matTooltip]="translate.instant('step_tooltip')"
matTooltipPosition="below" [matTooltipDisabled]="!tooltipService.activatedTooltips">
<div class="piece-attach piece-attach-right"></div>
<div class="piece-attach piece-attach-left"></div>
<div class="piece-menu" [class]="displayMenu">
<mat-icon fontIcon="arrow_back_ios" (click)="moveStep('left'); editTrace($event,'Step_moveLeft')" *ngIf="index > 0"
matTooltip="Décaler la tuile vers la gauche. Dans le cas où une tuile est déjà présente, leurs places sont inversées."
[matTooltip]="translate.instant('moveLeft_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
<mat-icon fontIcon="backspace" (click)="onClickErase()"
matTooltip="Effacer le contenu de cette tuile."
[matTooltip]="translate.instant('clearPiece_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
<mat-icon fontIcon="delete" (click)="onClickDelete()"
matTooltip="Supprimer la tuile."
[matTooltip]="translate.instant('deletePiece_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
<mat-icon fontIcon="arrow_forward_ios" (click)="moveStep('right'); editTrace($event,'Step_moveRight')"
matTooltip="Décaler la tuile vers la droite. Dans le cas où une tuile est déjà présente, leurs places sont inversées."
[matTooltip]="translate.instant('moveRight_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
</div>
<div class="piece-form">
<div class="piece-form-title">Étape {{getStepNumber()}}</div>
<div class="piece-form-title">{{'step_title' | translate}} {{getStepNumber()}}</div>
<mat-icon class="piece-form-comment" fontIcon="comment" *ngIf="step.comments.length > 0"></mat-icon>
<textarea [(ngModel)]="step.description" [style.background-image]="index == FirstStepIndex() ? urlIcon : ''" (change)="editTrace($event,'Step_content')"></textarea>
<div class="piece-form-duration"
matTooltip="Durée de l'étape' (en unité de temps, minutes ou tours). Il est conseillé d'utiliser les mêmes unités sur toutes les tuiles pour pouvoir comparer plus facilement les durées des actions."
[matTooltip]="translate.instant('step_duration_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips">
<label for="duration">Durée</label>
<label for="duration">{{'step_duration_label' | translate}}</label>
<input name="duration" type="number" [(ngModel)]="step.duration" (input)="durationChange()" min="1" (change)="step.duration < 1 ? step.duration = 1 : ''; editTrace($event, 'Step_duration')"/>
<select name="duration" [(ngModel)]="step.durationUnit" (change)="durationChange(); editTrace($event, 'Step_duration_unit')">
<option value="UT">UT</option>
<option value="min">min</option>
<option value="tours">tours</option>
<option value="UT">{{'step_duration_ut' | translate}}</option>
<option value="min">{{'step_duration_min' | translate}}</option>
<option value="tours">{{'step_duration_turn' | translate}}</option>
</select>
</div>
</div>
......
......@@ -10,6 +10,7 @@ import { TooltipService } from 'src/app/services/tooltip/tooltip.service';
import { Trace } from 'src/app/class/trace/trace';
import { Scenario } from 'src/app/class/scenario/scenario';
import { MinimapService } from 'src/app/services/minimap/minimap.service';
import { TranslateService } from '@ngx-translate/core';
@Component({
selector: 'app-step',
......@@ -30,7 +31,7 @@ export class StepComponent implements OnInit {
pieceWidth: number = 400;
urlIcon: string = 'url("./assets/background-images/step.png")';
constructor(protected pieceDetailsService: PieceDetailsService, public dialog: MatDialog, protected tooltipService: TooltipService, private minimapService: MinimapService) { }
constructor(protected pieceDetailsService: PieceDetailsService, public dialog: MatDialog, protected tooltipService: TooltipService, private minimapService: MinimapService, protected translate: TranslateService) { }
ngOnInit(): void {
this.setPieceWidth();
......@@ -99,7 +100,7 @@ export class StepComponent implements OnInit {
}
onClickErase(): void {
const dialogRef = this.dialog.open(CleanDialogComponent, { data: 'Étape' });
const dialogRef = this.dialog.open(CleanDialogComponent, { data: this.translate.instant('step_clean') });
dialogRef.afterClosed().subscribe(result => {
if (result == true) {
this.step.description = '';
......@@ -121,7 +122,7 @@ export class StepComponent implements OnInit {
}
onClickDelete(): void {
const dialogRef = this.dialog.open(SuppressDialogComponent, { data: 'cette Étape de '+(this.parent instanceof Mission ? 'Mission' : 'Rôle') });
const dialogRef = this.dialog.open(SuppressDialogComponent, { data: this.translate.instant('step_delete')+' '+(this.parent instanceof Mission ? this.translate.instant('mission') : this.translate.instant('role_title')) });
dialogRef.afterClosed().subscribe(result => {
if (result == true) {
if (this.parent instanceof Mission) {
......
......@@ -2,7 +2,7 @@
[style.background]="task.supplementaryRole ?
'linear-gradient(140deg, var(--piece-background-color) 0%, var(--piece-background-color) 55%,'+task.supplementaryRole.color+' 55%,'+task.supplementaryRole.color+' 100%)'
: 'var(--piece-background-color)'"
matTooltip="Tâches annexe: ces tâches ne sont pas obligatoires pour atteindre les objectifs pédagogiques définis. Elles sont rapides et permettent aux joueurs plus rapides d'être occupés en attendant que les autres finissent leurs tâches. Il est préférable d'en mettre."
[matTooltip]="translate.instant('annexeTask_tooltip')"
matTooltipPosition="before" [matTooltipDisabled]="!tooltipService.activatedTooltips"
[class]="pieceDetailsService.piece == task ? 'isActive' : 'border'">
<div class="piece-attach piece-attach-left"></div>
......@@ -11,41 +11,41 @@
<div class="piece-menu" [class]="displayMenu">
<div>
<mat-icon fontIcon="change_circle" [matMenuTriggerFor]="menuChange"
matTooltip="Changer le type de cette tuile."
[matTooltip]="translate.instant('task_transform_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
<mat-menu #menuChange="matMenu">
<button class="piece-menu-changeMenuButton" [style.background-color]="'#b9dfe3'" mat-menu-item (click)="onClickChange('normal')">Transformer en Tâche</button>
<button class="piece-menu-changeMenuButton" [style.background-color]="'#e8e3b3'" mat-menu-item (click)="onClickChange('optionnal')">Transformer Tâche optionnelle</button>
<button class="piece-menu-changeMenuButton" [style.background-color]="'#b28386'" mat-menu-item (click)="onClickChange('final')" *ngIf="canChangeInFinalTask()">Transformer une Tâche finale</button>
<button class="piece-menu-changeMenuButton" [style.background-color]="'#b9dfe3'" mat-menu-item (click)="onClickChange('normal')">{{'task_transform_normalTask' | translate}}</button>
<button class="piece-menu-changeMenuButton" [style.background-color]="'#e8e3b3'" mat-menu-item (click)="onClickChange('optionnal')">{{'task_transform_optionnalTask' | translate}}</button>
<button class="piece-menu-changeMenuButton" [style.background-color]="'#b28386'" mat-menu-item (click)="onClickChange('final')" *ngIf="canChangeInFinalTask()">{{'task_transform_finalTask' | translate}}</button>
</mat-menu>
</div>
<mat-icon fontIcon="backspace" (click)="onClickErase()"
matTooltip="Effacer le contenu de cette tuile."
[matTooltip]="translate.instant('clearPiece_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
<mat-icon fontIcon="delete" (click)="onClickDelete()"
matTooltip="Supprimer la tuile."
[matTooltip]="translate.instant('deletePiece_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
<div class="piece-menu-directioncross">
<div class="piece-menu-directioncross-left">
<mat-icon style="transform: rotate(0turn) scale(0.6);" fontIcon="arrow_back_ios" (click)="moveTask('left'); editMoveTrace($event,'Task_moveLeft')"
matTooltip="Décaler la tuile vers la gauche. Dans le cas où une tuile est déjà présente, leurs places sont inversées."
[matTooltip]="translate.instant('moveLeft_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
</div>
<div class="piece-menu-directioncross-updownarrows">
<div class="piece-menu-updownarrows-up">
<mat-icon style="transform: rotate(0.25turn) scale(0.6);" fontIcon="arrow_back_ios" (click)="moveTask('top'); editMoveTrace($event,'Task_moveTop')"
matTooltip="Décaler la tuile vers le haut (ceci placera la tuile à la fin de la ligne)."
[matTooltip]="translate.instant('moveTop_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
</div>
<div class="piece-menu-directioncross-updownarrows-down">
<mat-icon style="transform: rotate(0.75turn) scale(0.6);" fontIcon="arrow_back_ios" (click)="moveTask('bottom'); editMoveTrace($event,'Task_moveBottom')"
matTooltip="Décaler la tuile vers le bas (ceci placera la tuile à la fin de la ligne)."
[matTooltip]="translate.instant('moveBottom_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
</div>
</div>
<div class="piece-menu-directioncross-right">
<mat-icon style="transform: rotate(0.5turn) scale(0.6);" fontIcon="arrow_back_ios" (click)="moveTask('right'); editMoveTrace($event,'Task_moveRight')"
matTooltip="Décaler la tuile vers la droite. Dans le cas où une tuile est déjà présente, leurs places sont inversées."
[matTooltip]="translate.instant('moveRight_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
</div>
</div>
......@@ -53,9 +53,9 @@
<div class="piece-prerequires" [class]="pieceDetailsService.piece == task ? displayPrequires : 'hide'">
<div class="piece-prerequires-prerequires">
<label class="piece-prerequires-title">Antécédents</label>
<label class="piece-prerequires-title">{{'task_prerequire_antecedents_title' | translate}}</label>
<div class="piece-prerequires-form">
<div style="text-align: center;" *ngIf="j == 0">La première tâche de la ligne ne peut pas avoir d'antécédent</div>
<div style="text-align: center;" *ngIf="j == 0">{{'task_prerequire_antecedents_err1' | translate}}</div>
<ng-container *ngIf="hasPossibleAntecedents()">
<ng-container *ngFor="let inlineTask of role.tasks">
<ng-container *ngFor="let element of inlineTask; let index = index">
......@@ -66,11 +66,11 @@
</ng-container>
</ng-container>
</ng-container>
<div style="text-align: center;" *ngIf="!hasPossibleAntecedents() && j != 0">Veuillez d'abord entrer des identifiants aux tâches précédentes</div>
<div style="text-align: center;" *ngIf="!hasPossibleAntecedents() && j != 0">{{'task_prerequire_antecedents_err2' | translate}}</div>
</div>
</div>
<div class="piece-prerequires-ressources">
<label class="piece-prerequires-title">Ressources & Compétences</label>
<label class="piece-prerequires-title">{{'task_prerequire_ressource_title' | translate}}</label>
<div class="piece-prerequires-form">
<ng-container *ngFor="let ressource of scenario.ressources">
<div class="piece-prerequires-ressources-element" *ngIf="ressource.name">
......@@ -115,25 +115,25 @@
<div class="piece-form">
<div class="piece-form-top">
<input class="piece-form-top-identifier" name="identifier" type="text" [value]="task.identifier" (change)="changeIdentifier($event)" placeholder="A" min="1" maxlength="5"
matTooltip="Identifiant de la tâche (ex: A, B, C, …)"
[matTooltip]="translate.instant('task_identifier_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"/>
<div class="piece-form-top-title">Tâche annexe</div>
<div class="piece-form-top-title">{{'annexeTask_title' | translate}}</div>
<mat-icon class="piece-form-top-comment" fontIcon="comment" *ngIf="task.comments.length > 0"></mat-icon>
<mat-icon class="piece-form-top-repeat" fontIcon="refresh" *ngIf="task.repeat.iteration > 0 || task.repeat.while != ''"></mat-icon>
</div>
<textarea class="piece-form-content" [(ngModel)]="task.objective" (change)="editTrace($event,'Task_action')" [style.background-image]="(i == findFirstIndexOfTaskType('annexe')[0] && j == findFirstIndexOfTaskType('annexe')[1]) ? urlIcon : ''"
placeholder="Vérifier ses connaissances sur les formulaires PHP"
matTooltip="Action à effectuer (interagir avec un objet, parler avec quelqu'un, …)"
[placeholder]="translate.instant('annexeTask_action_placeholder')"
[matTooltip]="translate.instant('task_action_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></textarea>
<div class="piece-form-bottom">
<div class="piece-form-bottom-duration"
matTooltip="Durée de la tâche (en unité de temps, minutes ou tours). Il est conseillé d'utiliser les mêmes unités sur toutes les tuiles pour pouvoir comparer plus facilement les durées des actions."
[matTooltip]="translate.instant('task_duration_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips">
<input name="value" type="number" [(ngModel)]="task.duration" (input)="durationChange()" min="1" (change)="task.duration < 1 ? task.duration = 1 : ''; editTrace($event,'Task_duration')"/>
<select name="unite" [(ngModel)]="task.durationUnit" (change)="durationChange(); editTrace($event,'Task_duration_unit')">
<option value="UT">UT</option>
<option value="min">min</option>
<option value="tours">tours</option>
<option value="UT">{{'task_duration_ut' | translate}}</option>
<option value="min">{{'task_duration_min' | translate}}</option>
<option value="tours">{{'task_duration_turn' | translate}}</option>
</select>
</div>
<mat-icon class="piece-form-bottom-character" fontIcon="person" *ngIf="task.characters.length > 0"
......@@ -141,9 +141,9 @@
[style.background]="task.characters.length > 1 ? 'linear-gradient('+ task.characters[0].color +','+ task.characters[task.characters.length-1].color +')' : 'white'"></mat-icon>
<mat-icon class="piece-form-bottom-interrupt" fontIcon="front_hand" *ngIf="task.interrupt != ''"></mat-icon>
<button mat-button class="piece-form-bottom-prerequires" (click)="changeDisplayPrerequires()"
matTooltip="Prérequis pour effectuer cette tâche"
[matTooltip]="translate.instant('task_prerequire_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips">
Prérequis
{{'task_prerequire_label' | translate}}
</button>
</div>
</div>
......
......@@ -15,6 +15,7 @@ import { MatSnackBar } from '@angular/material/snack-bar';
import { IdentifierSnackbarComponent } from 'src/app/components/snackbars/identifier-snackbar/identifier-snackbar.component';
import { Trace } from 'src/app/class/trace/trace';
import { MinimapService } from 'src/app/services/minimap/minimap.service';
import { TranslateService } from '@ngx-translate/core';
@Component({
selector: 'app-annexe-task',
......@@ -42,7 +43,7 @@ export class AnnexeTaskComponent implements OnInit {
antecedent: boolean = false;
constructor(protected pieceDetailsService: PieceDetailsService, protected tooltipService: TooltipService, public dialog: MatDialog,
private _snackBar: MatSnackBar, private minimapService: MinimapService) { }
private _snackBar: MatSnackBar, private minimapService: MinimapService, protected translate: TranslateService) { }
ngOnInit(): void {
this.setPieceWidth();
......@@ -90,7 +91,7 @@ export class AnnexeTaskComponent implements OnInit {
}
onClickErase(): void {
const dialogRef = this.dialog.open(CleanDialogComponent, { data: 'Tâche annexe' });
const dialogRef = this.dialog.open(CleanDialogComponent, { data: this.translate.instant('task_prefix')+' '+this.translate.instant('annexeTask_title') });
dialogRef.afterClosed().subscribe(result => {
if (result == true) {
this.task.duration = 1;
......@@ -124,7 +125,7 @@ export class AnnexeTaskComponent implements OnInit {
}
onClickDelete(): void {
const dialogRef = this.dialog.open(SuppressDialogComponent, { data: 'cette Tâche annexe' });
const dialogRef = this.dialog.open(SuppressDialogComponent, { data: this.translate.instant('task_prefix')+' '+this.translate.instant('annexeTask_title') });
dialogRef.afterClosed().subscribe(result => {
if (result == true) {
this.role.tasks.forEach(inlineTasks => {
......
......@@ -2,7 +2,7 @@
[style.background]="task.supplementaryRole ?
'linear-gradient(140deg, var(--piece-background-color) 0%, var(--piece-background-color) 55%,'+task.supplementaryRole.color+' 55%,'+task.supplementaryRole.color+' 100%)'
: 'var(--piece-background-color)'"
matTooltip="Tâche finale: il s'agit de la dernière action à effectuer pour clore la quête."
[matTooltip]="translate.instant('finalTask_tooltip')"
matTooltipPosition="before" [matTooltipDisabled]="!tooltipService.activatedTooltips"
[class]="pieceDetailsService.piece == task ? 'isActive' : 'border'">
<div class="piece-attach piece-attach-left"></div>
......@@ -10,41 +10,41 @@
<div class="piece-menu" [class]="displayMenu">
<div>
<mat-icon fontIcon="change_circle" [matMenuTriggerFor]="menuChange"
matTooltip="Changer le type de cette tuile."
[matTooltip]="translate.instant('task_transform_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
<mat-menu #menuChange="matMenu">
<button class="piece-menu-changeMenuButton" [style.background-color]="'#b9dfe3'" mat-menu-item (click)="onClickChange('normal')">Transformer en Tâche</button>
<button class="piece-menu-changeMenuButton" [style.background-color]="'#bccecc'" mat-menu-item (click)="onClickChange('annexe')">Transformer Tâche annexe</button>
<button class="piece-menu-changeMenuButton" [style.background-color]="'#e8e3b3'" mat-menu-item (click)="onClickChange('optionnal')">Transformer une Tâche optionnelle</button>
<button class="piece-menu-changeMenuButton" [style.background-color]="'#b9dfe3'" mat-menu-item (click)="onClickChange('normal')">{{'task_transform_normalTask' | translate}}</button>
<button class="piece-menu-changeMenuButton" [style.background-color]="'#bccecc'" mat-menu-item (click)="onClickChange('annexe')">{{'task_transform_annexeTask' | translate}}</button>
<button class="piece-menu-changeMenuButton" [style.background-color]="'#e8e3b3'" mat-menu-item (click)="onClickChange('optionnal')">{{'task_transform_optionnalTask' | translate}}</button>
</mat-menu>
</div>
<mat-icon fontIcon="backspace" (click)="onClickErase()"
matTooltip="Effacer le contenu de cette tuile."
[matTooltip]="translate.instant('clearPiece_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
<mat-icon fontIcon="delete" (click)="onClickDelete()"
matTooltip="Supprimer la tuile."
[matTooltip]="translate.instant('deletePiece_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
<div class="piece-menu-directioncross">
<div class="piece-menu-directioncross-left">
<mat-icon style="transform: rotate(0turn) scale(0.6);" fontIcon="arrow_back_ios" (click)="moveTask('left'); editMoveTrace($event,'Task_moveLeft')"
matTooltip="Décaler la tuile vers la gauche."
[matTooltip]="translate.instant('moveLeftFinal_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
</div>
<div class="piece-menu-directioncross-updownarrows">
<div class="piece-menu-updownarrows-up">
<mat-icon style="transform: rotate(0.25turn) scale(0.6);" fontIcon="arrow_back_ios" (click)="moveTask('top'); editMoveTrace($event,'Task_moveTop')"
matTooltip="Décaler la tuile vers le haut (ceci placera la tuile à la fin de la ligne)."
[matTooltip]="translate.instant('moveTop_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
</div>
<div class="piece-menu-directioncross-updownarrows-down">
<mat-icon style="transform: rotate(0.75turn) scale(0.6);" fontIcon="arrow_back_ios" (click)="moveTask('bottom'); editMoveTrace($event,'Task_moveBottom')"
matTooltip="Décaler la tuile vers le bas (ceci placera la tuile à la fin de la ligne)."
[matTooltip]="translate.instant('moveBottom_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
</div>
</div>
<div class="piece-menu-directioncross-right">
<mat-icon style="transform: rotate(0.5turn) scale(0.6);" fontIcon="arrow_back_ios" (click)="moveTask('right'); editMoveTrace($event,'Task_moveRight')"
matTooltip="Décaler la tuile vers la droite."
[matTooltip]="translate.instant('moveRightFinal_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
</div>
</div>
......@@ -52,7 +52,7 @@
<div class="piece-symbolchoice" [class]="displaySymbolChoice">
<div class="piece-symbolchoice-header">
<label>Choisir un symbole de tâche commune :</label>
<label>{{'task_common_label' | translate}}</label>
<div><mat-icon fontIcon="delete" (click)="setSymbol('','')"></mat-icon></div>
</div>
<div class="piece-symbolchoice-symbols">
......@@ -81,9 +81,9 @@
<div class="piece-prerequires" [class]="pieceDetailsService.piece == task ? displayPrequires : 'hide'">
<div class="piece-prerequires-prerequires">
<label class="piece-prerequires-title">Antécédents</label>
<label class="piece-prerequires-title">{{'task_prerequire_antecedents_title' | translate}}</label>
<div class="piece-prerequires-form">
<div style="text-align: center;" *ngIf="j == 0">La première tâche de la ligne ne peut pas avoir d'antécédent</div>
<div style="text-align: center;" *ngIf="j == 0">{{'task_prerequire_antecedents_err1' | translate}}</div>
<ng-container *ngIf="hasPossibleAntecedents()">
<ng-container *ngFor="let inlineTask of role.tasks">
<ng-container *ngFor="let element of inlineTask; let index = index">
......@@ -94,11 +94,11 @@
</ng-container>
</ng-container>
</ng-container>
<div style="text-align: center;" *ngIf="!hasPossibleAntecedents() && j != 0">Veuillez d'abord entrer des identifiants aux tâches précédentes</div>
<div style="text-align: center;" *ngIf="!hasPossibleAntecedents() && j != 0">{{'task_prerequire_antecedents_err2' | translate}}</div>
</div>
</div>
<div class="piece-prerequires-ressources">
<label class="piece-prerequires-title">Ressources & Compétences</label>
<label class="piece-prerequires-title">{{'task_prerequire_ressource_title' | translate}}</label>
<div class="piece-prerequires-form">
<ng-container *ngFor="let ressource of scenario.ressources">
<div class="piece-prerequires-ressources-element" *ngIf="ressource.name">
......@@ -143,30 +143,30 @@
<div class="piece-form">
<div class="piece-form-top">
<input class="piece-form-top-identifier" name="identifier" type="text" [value]="task.identifier" (change)="changeIdentifier($event)" placeholder="A" min="1" maxlength="5"
matTooltip="Identifiant de la tâche (ex: A, B, C, …)"
[matTooltip]="translate.instant('task_identifier_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"/>
<div class="piece-form-top-title">Tâche finale</div>
<div class="piece-form-top-title">{{'finalTask_title' | translate}}</div>
<mat-icon class="piece-form-top-comment" fontIcon="comment" *ngIf="task.comments.length > 0"></mat-icon>
<mat-icon class="piece-form-top-repeat" fontIcon="refresh" *ngIf="task.repeat.iteration > 0 || task.repeat.while != ''"></mat-icon>
<button mat-button class="piece-form-top-symbol" (click)="changeDisplaySymbolChoice()"
matTooltip="Indicateur de tâche commune: si cette tâche doit être faite avec un autre rôle, mettez le même symbole sur la tâche de ces deux rôles"
[matTooltip]="translate.instant('task_common_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips">
<mat-icon *ngIf="task.symbol.symbol" [style.color]="task.symbol.color" [fontIcon]="task.symbol.symbol"></mat-icon>
</button>
</div>
<textarea class="piece-form-content" [(ngModel)]="task.objective" (change)="editTrace($event,'Task_action')" [style.background-image]="(i == findFirstIndexOfTaskType('final')[0] && j == findFirstIndexOfTaskType('final')[1]) ? urlIcon : ''"
placeholder="Mettre le site web en ligne"
matTooltip="Action à effectuer (interagir avec un objet, parler avec quelqu'un, …)"
[placeholder]="translate.instant('finalTask_action_placeholder')"
[matTooltip]="translate.instant('task_action_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></textarea>
<div class="piece-form-bottom">
<div class="piece-form-bottom-duration"
matTooltip="Durée de la tâche (en unité de temps, minutes ou tours). Il est conseillé d'utiliser les mêmes unités sur toutes les tuiles pour pouvoir comparer plus facilement les durées des actions."
[matTooltip]="translate.instant('task_duration_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips">
<input name="value" type="number" [(ngModel)]="task.duration" (input)="durationChange()" min="1" (change)="task.duration < 1 ? task.duration = 1 : ''; editTrace($event,'Task_duration')"/>
<select name="unite" [(ngModel)]="task.durationUnit" (change)="durationChange(); editTrace($event,'Task_duration_unit')">
<option value="UT">UT</option>
<option value="min">min</option>
<option value="tours">tours</option>
<option value="UT">{{'task_duration_ut' | translate}}</option>
<option value="min">{{'task_duration_min' | translate}}</option>
<option value="tours">{{'task_duration_turn' | translate}}</option>
</select>
</div>
<mat-icon class="piece-form-character" fontIcon="person" *ngIf="task.characters.length > 0"
......@@ -174,9 +174,9 @@
[style.background]="task.characters.length > 1 ? 'linear-gradient('+ task.characters[0].color +','+ task.characters[task.characters.length-1].color +')' : 'white'"></mat-icon>
<mat-icon class="piece-form-interrupt" fontIcon="front_hand" *ngIf="task.interrupt != ''"></mat-icon>
<button mat-button class="piece-form-bottom-prerequires" (click)="changeDisplayPrerequires()"
matTooltip="Prérequis pour effectuer cette tâche"
[matTooltip]="translate.instant('task_prerequire_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips">
Prérequis
{{'task_prerequire_label' | translate}}
</button>
</div>
</div>
......
......@@ -15,6 +15,7 @@ import { MatSnackBar } from '@angular/material/snack-bar';
import { IdentifierSnackbarComponent } from 'src/app/components/snackbars/identifier-snackbar/identifier-snackbar.component';
import { Trace } from 'src/app/class/trace/trace';
import { MinimapService } from 'src/app/services/minimap/minimap.service';
import { TranslateService } from '@ngx-translate/core';
@Component({
selector: 'app-final-task',
......@@ -42,7 +43,7 @@ export class FinalTaskComponent implements OnInit {
antecedent: boolean = false;
constructor(protected pieceDetailsService: PieceDetailsService, protected tooltipService: TooltipService, public dialog: MatDialog,
private _snackBar: MatSnackBar, private minimapService: MinimapService) { }
private _snackBar: MatSnackBar, private minimapService: MinimapService, protected translate: TranslateService) { }
ngOnInit(): void {
this.setPieceWidth();
......@@ -90,7 +91,7 @@ export class FinalTaskComponent implements OnInit {
}
onClickErase(): void {
const dialogRef = this.dialog.open(CleanDialogComponent, { data: 'Tâche finale' });
const dialogRef = this.dialog.open(CleanDialogComponent, { data: this.translate.instant('finalTask_title') });
dialogRef.afterClosed().subscribe(result => {
if (result == true) {
this.task.duration = 1;
......@@ -136,7 +137,7 @@ export class FinalTaskComponent implements OnInit {
}
onClickDelete(): void {
const dialogRef = this.dialog.open(SuppressDialogComponent, { data: 'cette Tâche finale' });
const dialogRef = this.dialog.open(SuppressDialogComponent, { data: this.translate.instant('task_prefix')+' '+this.translate.instant('finalTask_title') });
dialogRef.afterClosed().subscribe(result => {
if (result == true) {
this.role.tasks.forEach(inlineTasks => {
......
......@@ -2,7 +2,7 @@
[style.background]="task.supplementaryRole ?
'linear-gradient(140deg, var(--piece-background-color) 0%, var(--piece-background-color) 55%,'+task.supplementaryRole.color+' 55%,'+task.supplementaryRole.color+' 100%)'
: 'var(--piece-background-color)'"
matTooltip="Tâche optionnelle: cette tâche peut être réalisée ou non. À la différence d'une tâche annexe, les tâches optionnelles sont utiles pour répondre aux objectifs pédagogiques, comme les tâches simples, mais offent la possibilité au joueur de réaliser la tâche de plusieurs manières différentes."
[matTooltip]="translate.instant('optionnalTask_tooltip')"
matTooltipPosition="before" [matTooltipDisabled]="!tooltipService.activatedTooltips"
[class]="pieceDetailsService.piece == task ? 'isActive' : 'border'">
<div class="piece-attach piece-attach-left"></div>
......@@ -11,41 +11,41 @@
<div class="piece-menu" [class]="displayMenu">
<div>
<mat-icon fontIcon="change_circle" [matMenuTriggerFor]="menuChange"
matTooltip="Changer le type de cette tuile."
[matTooltip]="translate.instant('task_transform_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
<mat-menu #menuChange="matMenu">
<button class="piece-menu-changeMenuButton" [style.background-color]="'#b9dfe3'" mat-menu-item (click)="onClickChange('normal')">Transformer en Tâche</button>
<button class="piece-menu-changeMenuButton" [style.background-color]="'#bccecc'" mat-menu-item (click)="onClickChange('annexe')">Transformer Tâche annexe</button>
<button class="piece-menu-changeMenuButton" [style.background-color]="'#b28386'" mat-menu-item (click)="onClickChange('final')" *ngIf="canChangeInFinalTask()">Transformer une Tâche finale</button>
<button class="piece-menu-changeMenuButton" [style.background-color]="'#b9dfe3'" mat-menu-item (click)="onClickChange('normal')">{{'task_transform_normalTask' | translate}}</button>
<button class="piece-menu-changeMenuButton" [style.background-color]="'#bccecc'" mat-menu-item (click)="onClickChange('annexe')">{{'task_transform_annexeTask' | translate}}</button>
<button class="piece-menu-changeMenuButton" [style.background-color]="'#b28386'" mat-menu-item (click)="onClickChange('final')" *ngIf="canChangeInFinalTask()">{{'task_transform_finalTask' | translate}}</button>
</mat-menu>
</div>
<mat-icon fontIcon="backspace" (click)="onClickErase()"
matTooltip="Effacer le contenu de cette tuile."
[matTooltip]="translate.instant('clearPiece_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
<mat-icon fontIcon="delete" (click)="onClickDelete()"
matTooltip="Supprimer la tuile."
[matTooltip]="translate.instant('deletePiece_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
<div class="piece-menu-directioncross">
<div class="piece-menu-directioncross-left">
<mat-icon style="transform: rotate(0turn) scale(0.6);" fontIcon="arrow_back_ios" (click)="moveTask('left'); editMoveTrace($event,'Task_moveLeft')"
matTooltip="Décaler la tuile vers la gauche. Dans le cas où une tuile est déjà présente, leurs places sont inversées."
[matTooltip]="translate.instant('moveLeft_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
</div>
<div class="piece-menu-directioncross-updownarrows">
<div class="piece-menu-updownarrows-up">
<mat-icon style="transform: rotate(0.25turn) scale(0.6);" fontIcon="arrow_back_ios" (click)="moveTask('top'); editMoveTrace($event,'Task_moveTop')"
matTooltip="Décaler la tuile vers le haut (ceci placera la tuile à la fin de la ligne)."
[matTooltip]="translate.instant('moveTop_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
</div>
<div class="piece-menu-directioncross-updownarrows-down">
<mat-icon style="transform: rotate(0.75turn) scale(0.6);" fontIcon="arrow_back_ios" (click)="moveTask('bottom'); editMoveTrace($event,'Task_moveBottom')"
matTooltip="Décaler la tuile vers le bas (ceci placera la tuile à la fin de la ligne)."
[matTooltip]="translate.instant('moveBottom_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
</div>
</div>
<div class="piece-menu-directioncross-right">
<mat-icon style="transform: rotate(0.5turn) scale(0.6);" fontIcon="arrow_back_ios" (click)="moveTask('right'); editMoveTrace($event,'Task_moveRight')"
matTooltip="Décaler la tuile vers la droite. Dans le cas où une tuile est déjà présente, leurs places sont inversées."
[matTooltip]="translate.instant('moveRight_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
</div>
</div>
......@@ -53,7 +53,7 @@
<div class="piece-symbolchoice" [class]="displaySymbolChoice">
<div class="piece-symbolchoice-header">
<label>Choisir un symbole de tâche commune :</label>
<label>{{'task_common_label' | translate}}</label>
<div><mat-icon fontIcon="delete" (click)="setSymbol('','')"></mat-icon></div>
</div>
<div class="piece-symbolchoice-symbols">
......@@ -82,9 +82,9 @@
<div class="piece-prerequires" [class]="pieceDetailsService.piece == task ? displayPrequires : 'hide'">
<div class="piece-prerequires-prerequires">
<label class="piece-prerequires-title">Antécédents</label>
<label class="piece-prerequires-title">{{'task_prerequire_antecedents_title' | translate}}</label>
<div class="piece-prerequires-form">
<div style="text-align: center;" *ngIf="j == 0">La première tâche de la ligne ne peut pas avoir d'antécédent</div>
<div style="text-align: center;" *ngIf="j == 0">{{'task_prerequire_antecedents_err1' | translate}}</div>
<ng-container *ngIf="hasPossibleAntecedents()">
<ng-container *ngFor="let inlineTask of role.tasks">
<ng-container *ngFor="let element of inlineTask; let index = index">
......@@ -95,11 +95,11 @@
</ng-container>
</ng-container>
</ng-container>
<div style="text-align: center;" *ngIf="!hasPossibleAntecedents() && j != 0">Veuillez d'abord entrer des identifiants aux tâches précédentes</div>
<div style="text-align: center;" *ngIf="!hasPossibleAntecedents() && j != 0">{{'task_prerequire_antecedents_err2' | translate}}</div>
</div>
</div>
<div class="piece-prerequires-ressources">
<label class="piece-prerequires-title">Ressources & Compétences</label>
<label class="piece-prerequires-title">{{'task_prerequire_ressource_title' | translate}}</label>
<div class="piece-prerequires-form">
<ng-container *ngFor="let ressource of scenario.ressources">
<div class="piece-prerequires-ressources-element" *ngIf="ressource.name">
......@@ -144,30 +144,30 @@
<div class="piece-form">
<div class="piece-form-top">
<input class="piece-form-top-identifier" name="identifier" type="text" [value]="task.identifier" (change)="changeIdentifier($event)" placeholder="A" min="1" maxlength="5"
matTooltip="Identifiant de la tâche (ex: A, B, C, …)"
[matTooltip]="translate.instant('task_identifier_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"/>
<div class="piece-form-top-title">Tâche<br>optionnelle</div>
<div class="piece-form-top-title">{{'optionnalTask_title1' | translate}}<br>{{'optionnalTask_title2' | translate}}</div>
<mat-icon class="piece-form-top-comment" fontIcon="comment" *ngIf="task.comments.length > 0"></mat-icon>
<mat-icon class="piece-form-top-repeat" fontIcon="refresh" *ngIf="task.repeat.iteration > 0 || task.repeat.while != ''"></mat-icon>
<button mat-button class="piece-form-top-symbol" (click)="changeDisplaySymbolChoice()"
matTooltip="Indicateur de tâche commune: si cette tâche doit être faite avec un autre rôle, mettez le même symbole sur la tâche de ces deux rôles"
[matTooltip]="translate.instant('task_common_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips">
<mat-icon *ngIf="task.symbol.symbol" [style.color]="task.symbol.color" [fontIcon]="task.symbol.symbol"></mat-icon>
</button>
</div>
<textarea class="piece-form-content" [(ngModel)]="task.objective" (change)="editTrace($event,'Task_action')" [style.background-image]="(i == findFirstIndexOfTaskType('optionnal')[0] && j == findFirstIndexOfTaskType('optionnal')[1]) ? urlIcon : ''"
placeholder="Partir d'un template / Partir de zéro"
matTooltip="Action à effectuer (interagir avec un objet, parler avec quelqu'un, …)"
[placeholder]="translate.instant('optionnalTask_action_placeholder')"
[matTooltip]="translate.instant('task_action_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></textarea>
<div class="piece-form-bottom">
<div class="piece-form-bottom-duration"
matTooltip="Durée de la tâche (en unité de temps, minutes ou tours). Il est conseillé d'utiliser les mêmes unités sur toutes les tuiles pour pouvoir comparer plus facilement les durées des actions."
[matTooltip]="translate.instant('task_duration_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips">
<input name="value" type="number" [(ngModel)]="task.duration" (input)="durationChange()" min="1" (change)="task.duration < 1 ? task.duration = 1 : ''; editTrace($event,'Task_duration')"/>
<select name="unite" [(ngModel)]="task.durationUnit" (change)="durationChange(); editTrace($event,'Task_duration_unit')">
<option value="UT">UT</option>
<option value="min">min</option>
<option value="tours">tours</option>
<option value="UT">{{'task_duration_ut' | translate}}</option>
<option value="min">{{'task_duration_min' | translate}}</option>
<option value="tours">{{'task_duration_turn' | translate}}</option>
</select>
</div>
<mat-icon class="piece-form-character" fontIcon="person" *ngIf="task.characters.length > 0"
......@@ -175,9 +175,9 @@
[style.background]="task.characters.length > 1 ? 'linear-gradient('+ task.characters[0].color +','+ task.characters[task.characters.length-1].color +')' : 'white'"></mat-icon>
<mat-icon class="piece-form-interrupt" fontIcon="front_hand" *ngIf="task.interrupt != ''"></mat-icon>
<button mat-button class="piece-form-bottom-prerequires" (click)="changeDisplayPrerequires()"
matTooltip="Prérequis pour effectuer cette tâche"
[matTooltip]="translate.instant('task_prerequire_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips">
Prérequis
{{'task_prerequire_label' | translate}}
</button>
</div>
</div>
......
......@@ -15,6 +15,7 @@ import { MatSnackBar } from '@angular/material/snack-bar';
import { IdentifierSnackbarComponent } from 'src/app/components/snackbars/identifier-snackbar/identifier-snackbar.component';
import { Trace } from 'src/app/class/trace/trace';
import { MinimapService } from 'src/app/services/minimap/minimap.service';
import { TranslateService } from '@ngx-translate/core';
@Component({
selector: 'app-optionnal-task',
......@@ -42,7 +43,7 @@ export class OptionnalTaskComponent implements OnInit {
antecedent: boolean = false;
constructor(protected pieceDetailsService: PieceDetailsService, protected tooltipService: TooltipService, public dialog: MatDialog,
private _snackBar: MatSnackBar, private minimapService: MinimapService) { }
private _snackBar: MatSnackBar, private minimapService: MinimapService, protected translate: TranslateService) { }
ngOnInit(): void {
this.setPieceWidth();
......@@ -90,7 +91,7 @@ export class OptionnalTaskComponent implements OnInit {
}
onClickErase(): void {
const dialogRef = this.dialog.open(CleanDialogComponent, { data: 'Tâche optionnelle' });
const dialogRef = this.dialog.open(CleanDialogComponent, { data: this.translate.instant('optionnalTask_title') });
dialogRef.afterClosed().subscribe(result => {
if (result == true) {
this.task.duration = 1;
......@@ -135,7 +136,7 @@ export class OptionnalTaskComponent implements OnInit {
}
onClickDelete(): void {
const dialogRef = this.dialog.open(SuppressDialogComponent, { data: 'cette Tâche optionnelle' });
const dialogRef = this.dialog.open(SuppressDialogComponent, { data: this.translate.instant('task_prefix')+' '+this.translate.instant('optionnalTask_title') });
dialogRef.afterClosed().subscribe(result => {
if (result == true) {
this.role.tasks.forEach(inlineTasks => {
......
......@@ -8,32 +8,32 @@
<div class="piece-menu" [class]="displayMenu">
<mat-icon fontIcon="backspace" (click)="onClickErase()"
matTooltip="Effacer le contenu de cette tuile."
[matTooltip]="translate.instant('clearPiece_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
<mat-icon fontIcon="delete" (click)="onClickDelete()"
matTooltip="Supprimer la tuile."
[matTooltip]="translate.instant('deletePiece_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
<div class="piece-menu-directioncross">
<div class="piece-menu-directioncross-left">
<mat-icon style="transform: rotate(0turn) scale(0.6);" fontIcon="arrow_back_ios" (click)="moveTask('left'); editMoveTrace($event,'Task_moveLeft')"
matTooltip="Décaler la tuile vers la gauche. Dans le cas où une tuile est déjà présente, leurs places sont inversées."
[matTooltip]="translate.instant('moveLeft_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
</div>
<div class="piece-menu-directioncross-updownarrows">
<div class="piece-menu-updownarrows-up">
<mat-icon style="transform: rotate(0.25turn) scale(0.6);" fontIcon="arrow_back_ios" (click)="moveTask('top'); editMoveTrace($event,'Task_moveTop')"
matTooltip="Décaler la tuile vers le haut (ceci placera la tuile à la fin de la ligne)."
[matTooltip]="translate.instant('moveTop_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
</div>
<div class="piece-menu-directioncross-updownarrows-down">
<mat-icon style="transform: rotate(0.75turn) scale(0.6);" fontIcon="arrow_back_ios" (click)="moveTask('bottom'); editMoveTrace($event,'Task_moveBottom')"
matTooltip="Décaler la tuile vers le bas (ceci placera la tuile à la fin de la ligne)."
[matTooltip]="translate.instant('moveBottom_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
</div>
</div>
<div class="piece-menu-directioncross-right">
<mat-icon style="transform: rotate(0.5turn) scale(0.6);" fontIcon="arrow_back_ios" (click)="moveTask('right'); editMoveTrace($event,'Task_moveRight')"
matTooltip="Décaler la tuile vers la droite. Dans le cas où une tuile est déjà présente, leurs places sont inversées."
[matTooltip]="translate.instant('moveRight_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
</div>
</div>
......@@ -41,7 +41,7 @@
<div class="piece-symbolchoice" [class]="displaySymbolChoice">
<div class="piece-symbolchoice-header">
<label>Choisir un symbole de tâche commune :</label>
<label>{{'task_common_label' | translate}}</label>
<div><mat-icon fontIcon="delete" (click)="setSymbol('','')"></mat-icon></div>
</div>
<div class="piece-symbolchoice-symbols">
......@@ -70,9 +70,9 @@
<div class="piece-prerequires" [class]="pieceDetailsService.piece == task ? displayPrequires : 'hide'">
<div class="piece-prerequires-prerequires">
<label class="piece-prerequires-title">Antécédents</label>
<label class="piece-prerequires-title">{{'task_prerequire_antecedents_title' | translate}}</label>
<div class="piece-prerequires-form">
<div style="text-align: center;" *ngIf="j == 0">La première tâche de la ligne ne peut pas avoir d'antécédent</div>
<div style="text-align: center;" *ngIf="j == 0">{{'task_prerequire_antecedents_err1' | translate}}</div>
<ng-container *ngIf="hasPossibleAntecedents()">
<ng-container *ngFor="let inlineTask of role.tasks">
<ng-container *ngFor="let element of inlineTask; let index = index">
......@@ -83,11 +83,11 @@
</ng-container>
</ng-container>
</ng-container>
<div style="text-align: center;" *ngIf="!hasPossibleAntecedents() && j != 0">Veuillez d'abord entrer des identifiants aux tâches précédentes</div>
<div style="text-align: center;" *ngIf="!hasPossibleAntecedents() && j != 0">{{'task_prerequire_antecedents_err2' | translate}}</div>
</div>
</div>
<div class="piece-prerequires-ressources">
<label class="piece-prerequires-title">Ressources & Compétences</label>
<label class="piece-prerequires-title">{{'task_prerequire_ressource_title' | translate}}</label>
<div class="piece-prerequires-form">
<ng-container *ngFor="let ressource of scenario.ressources">
<div class="piece-prerequires-ressources-element" *ngIf="ressource.name">
......@@ -132,30 +132,30 @@
<div class="piece-form">
<div class="piece-form-top">
<input class="piece-form-top-identifier" name="identifier" type="text" [value]="task.identifier" (change)="changeIdentifier($event)" placeholder="A" min="1" maxlength="5"
matTooltip="Identifiant de la tâche (ex: A, B, C, …)"
[matTooltip]="translate.instant('task_identifier_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"/>
<div class="piece-form-top-title">Événement<br>aléatoire</div>
<div class="piece-form-top-title">{{'randomEvent_title1' | translate}}<br>{{'randomEvent_title2' | translate}}</div>
<mat-icon class="piece-form-top-comment" fontIcon="comment" *ngIf="task.comments.length > 0"></mat-icon>
<mat-icon class="piece-form-top-repeat" fontIcon="refresh" *ngIf="task.repeat.iteration > 0 || task.repeat.while != ''"></mat-icon>
<button mat-button class="piece-form-top-symbol" (click)="changeDisplaySymbolChoice()"
matTooltip="Indicateur de tâche commune: si cette tâche doit être faite avec un autre rôle, mettez le même symbole sur la tâche de ces deux rôles"
[matTooltip]="translate.instant('task_common_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips">
<mat-icon *ngIf="task.symbol.symbol" [style.color]="task.symbol.color" [fontIcon]="task.symbol.symbol"></mat-icon>
</button>
</div>
<textarea class="piece-form-content" [(ngModel)]="task.objective" (change)="editTrace($event,'Task_action')" [style.background-image]="(i == findFirstIndexOfTaskType('event')[0] && j == findFirstIndexOfTaskType('event')[1]) ? urlIcon : ''"
placeholder="Le client modifie sa demande"
matTooltip="Action à effectuer (interagir avec un objet, parler avec quelqu'un, …)"
[placeholder]="translate.instant('randomEvent_action_placeholder')"
[matTooltip]="translate.instant('task_action_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></textarea>
<div class="piece-form-bottom">
<div class="piece-form-bottom-duration"
matTooltip="Durée de la tâche (en unité de temps, minutes ou tours). Il est conseillé d'utiliser les mêmes unités sur toutes les tuiles pour pouvoir comparer plus facilement les durées des actions."
[matTooltip]="translate.instant('task_duration_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips">
<input name="value" type="number" [(ngModel)]="task.duration" (input)="durationChange()" min="1" (change)="task.duration < 1 ? task.duration = 1 : ''; editTrace($event,'Task_duration')"/>
<select name="unite" [(ngModel)]="task.durationUnit" (change)="durationChange(); editTrace($event,'Task_duration_unit')">
<option value="UT">UT</option>
<option value="min">min</option>
<option value="tours">tours</option>
<option value="UT">{{'task_duration_ut' | translate}}</option>
<option value="min">{{'task_duration_min' | translate}}</option>
<option value="tours">{{'task_duration_turn' | translate}}</option>
</select>
</div>
<mat-icon class="piece-form-bottom-character" fontIcon="person" *ngIf="task.characters.length > 0"
......@@ -163,9 +163,9 @@
[style.background]="task.characters.length > 1 ? 'linear-gradient('+ task.characters[0].color +','+ task.characters[task.characters.length-1].color +')' : 'white'"></mat-icon>
<mat-icon class="piece-form-bottom-interrupt" fontIcon="front_hand" *ngIf="task.interrupt != ''"></mat-icon>
<button mat-button class="piece-form-bottom-prerequires" (click)="changeDisplayPrerequires()"
matTooltip="Prérequis pour effectuer cette tâche"
[matTooltip]="translate.instant('task_prerequire_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips">
Prérequis
{{'task_prerequire_label' | translate}}
</button>
</div>
</div>
......
......@@ -15,6 +15,7 @@ import { MatSnackBar } from '@angular/material/snack-bar';
import { IdentifierSnackbarComponent } from 'src/app/components/snackbars/identifier-snackbar/identifier-snackbar.component';
import { Trace } from 'src/app/class/trace/trace';
import { MinimapService } from 'src/app/services/minimap/minimap.service';
import { TranslateService } from '@ngx-translate/core';
@Component({
selector: 'app-random-event',
......@@ -42,7 +43,7 @@ export class RandomEventComponent implements OnInit {
antecedent: boolean = false;
constructor(protected pieceDetailsService: PieceDetailsService, protected tooltipService: TooltipService, public dialog: MatDialog,
private _snackBar: MatSnackBar, private minimapService: MinimapService) { }
private _snackBar: MatSnackBar, private minimapService: MinimapService, protected translate: TranslateService) { }
ngOnInit(): void {
this.setPieceWidth();
......@@ -90,7 +91,7 @@ export class RandomEventComponent implements OnInit {
}
onClickErase(): void {
const dialogRef = this.dialog.open(CleanDialogComponent, { data: 'Événement aléatoire' });
const dialogRef = this.dialog.open(CleanDialogComponent, { data: this.translate.instant('randomEvent_title') });
dialogRef.afterClosed().subscribe(result => {
if (result == true) {
this.task.duration = 1;
......@@ -126,7 +127,7 @@ export class RandomEventComponent implements OnInit {
}
onClickDelete(): void {
const dialogRef = this.dialog.open(SuppressDialogComponent, { data: 'cet Événement aléatoire' });
const dialogRef = this.dialog.open(SuppressDialogComponent, { data: this.translate.instant('task_prefix')+' '+this.translate.instant('randomEvent_title') });
dialogRef.afterClosed().subscribe(result => {
if (result == true) {
this.role.tasks.forEach(inlineTasks => {
......
......@@ -4,42 +4,42 @@
<div class="piece-menu" [class]="displayMenu">
<mat-icon fontIcon="backspace" (click)="onClickErase()"
matTooltip="Effacer le contenu de cette tuile."
[matTooltip]="translate.instant('clearPiece_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
<mat-icon fontIcon="delete" (click)="onClickDelete()"
matTooltip="Supprimer la tuile."
[matTooltip]="translate.instant('deletePiece_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
<div class="piece-menu-directioncross">
<div class="piece-menu-directioncross-left">
<mat-icon style="transform: rotate(0turn) scale(0.6);" fontIcon="arrow_back_ios" (click)="moveTask('left'); editMoveTrace($event,'Task_moveLeft')"
matTooltip="Décaler la tuile vers la gauche."
[matTooltip]="translate.instant('moveLeftFinal_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
</div>
<div class="piece-menu-directioncross-updownarrows">
<div class="piece-menu-updownarrows-up">
<mat-icon style="transform: rotate(0.25turn) scale(0.6);" fontIcon="arrow_back_ios" (click)="moveTask('top'); editMoveTrace($event,'Task_moveTop')"
matTooltip="Décaler la tuile vers le haut (ceci placera la tuile à la fin de la ligne)."
[matTooltip]="translate.instant('moveTop_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
</div>
<div class="piece-menu-directioncross-updownarrows-down">
<mat-icon style="transform: rotate(0.75turn) scale(0.6);" fontIcon="arrow_back_ios" (click)="moveTask('bottom'); editMoveTrace($event,'Task_moveBottom')"
matTooltip="Décaler la tuile vers le bas (ceci placera la tuile à la fin de la ligne)."
[matTooltip]="translate.instant('moveBottom_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
</div>
</div>
<div class="piece-menu-directioncross-right">
<mat-icon style="transform: rotate(0.5turn) scale(0.6);" fontIcon="arrow_back_ios" (click)="moveTask('right'); editMoveTrace($event,'Task_moveRight')"
matTooltip="Décaler la tuile vers la droite."
[matTooltip]="translate.instant('moveRightFinal_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
</div>
</div>
</div>
<div class="piece-form">
<label>Recommencer<br>le tour jusqu'à ce que :</label>
<label>{{'repeatTask_title' | translate}}<br>{{'repeatTask_while' | translate}}</label>
<textarea [(ngModel)]="task.objective" [(ngModel)]="task.objective" (change)="editTrace($event,'Task_action')" [style.background-image]="(i == findFirstIndexOfTaskType('repeat')[0] && j == findFirstIndexOfTaskType('repeat')[1]) ? urlIcon : ''"
placeholder="Faire valider au commanditaire"
matTooltip="Action à effectuer (interagir avec un objet, parler avec quelqu'un, …)"
[placeholder]="translate.instant('repeatTask_action_placeholder')"
[matTooltip]="translate.instant('task_action_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></textarea>
</div>
<mat-icon class="piece-form-comment" fontIcon="comment" *ngIf="task.comments.length > 0"></mat-icon>
......
......@@ -10,6 +10,7 @@ import { CleanDialogComponent } from 'src/app/components/dialogs/clean-dialog/cl
import { Scenario } from 'src/app/class/scenario/scenario';
import { Trace } from 'src/app/class/trace/trace';
import { MinimapService } from 'src/app/services/minimap/minimap.service';
import { TranslateService } from '@ngx-translate/core';
@Component({
selector: 'app-repeat-task',
......@@ -32,7 +33,7 @@ export class RepeatTaskComponent implements OnInit {
urlIcon: string = 'url("./assets/background-images/repeatTask.png")';
constructor(protected pieceDetailsService: PieceDetailsService, protected tooltipService: TooltipService, public dialog: MatDialog, private minimapService: MinimapService) { }
constructor(protected pieceDetailsService: PieceDetailsService, protected tooltipService: TooltipService, public dialog: MatDialog, private minimapService: MinimapService, protected translate: TranslateService) { }
ngOnInit(): void {
this.mission.equalizeLengths();
......@@ -40,7 +41,7 @@ export class RepeatTaskComponent implements OnInit {
}
onClickErase(): void {
const dialogRef = this.dialog.open(CleanDialogComponent, { data: 'Répétition de tour' });
const dialogRef = this.dialog.open(CleanDialogComponent, { data: this.translate.instant('repeatTask_title') });
dialogRef.afterClosed().subscribe(result => {
if (result == true) {
this.task.objective = '';
......@@ -60,7 +61,7 @@ export class RepeatTaskComponent implements OnInit {
}
onClickDelete(): void {
const dialogRef = this.dialog.open(SuppressDialogComponent, { data: 'cette Répétition de tour' });
const dialogRef = this.dialog.open(SuppressDialogComponent, { data: this.translate.instant('task_prefix')+' '+this.translate.instant('repeatTask_title') });
dialogRef.afterClosed().subscribe(result => {
if (result == true) {
this.role.tasks.forEach(inlineTasks => {
......
......@@ -9,41 +9,41 @@
<div class="piece-menu" [class]="displayMenu">
<div>
<mat-icon fontIcon="change_circle" [matMenuTriggerFor]="menuChange"
matTooltip="Changer le type de cette tuile."
[matTooltip]="translate.instant('task_transform_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
<mat-menu #menuChange="matMenu">
<button class="piece-menu-changeMenuButton" [style.background-color]="'#bccecc'" mat-menu-item (click)="onClickChange('annexe')">Transformer en Tâche annexe</button>
<button class="piece-menu-changeMenuButton" [style.background-color]="'#e8e3b3'" mat-menu-item (click)="onClickChange('optionnal')">Transformer Tâche optionnelle</button>
<button class="piece-menu-changeMenuButton" [style.background-color]="'#b28386'" mat-menu-item (click)="onClickChange('final')" *ngIf="canChangeInFinalTask()">Transformer une Tâche finale</button>
<button class="piece-menu-changeMenuButton" [style.background-color]="'#bccecc'" mat-menu-item (click)="onClickChange('annexe')">{{'task_transform_annexeTask' | translate}}</button>
<button class="piece-menu-changeMenuButton" [style.background-color]="'#e8e3b3'" mat-menu-item (click)="onClickChange('optionnal')">{{'task_transform_optionnalTask' | translate}}</button>
<button class="piece-menu-changeMenuButton" [style.background-color]="'#b28386'" mat-menu-item (click)="onClickChange('final')" *ngIf="canChangeInFinalTask()">{{'task_transform_finalTask' | translate}}</button>
</mat-menu>
</div>
<mat-icon fontIcon="backspace" (click)="onClickErase()"
matTooltip="Effacer le contenu de cette tuile."
[matTooltip]="translate.instant('clearPiece_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
<mat-icon fontIcon="delete" (click)="onClickDelete()"
matTooltip="Supprimer la tuile."
[matTooltip]="translate.instant('deletePiece_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
<div class="piece-menu-directioncross">
<div class="piece-menu-directioncross-left">
<mat-icon style="transform: rotate(0turn) scale(0.6);" fontIcon="arrow_back_ios" (click)="moveTask('left'); editMoveTrace($event,'Task_moveLeft')"
matTooltip="Décaler la tuile vers la gauche. Dans le cas où une tuile est déjà présente, leurs places sont inversées."
[matTooltip]="translate.instant('moveLeft_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
</div>
<div class="piece-menu-directioncross-updownarrows">
<div class="piece-menu-updownarrows-up">
<mat-icon style="transform: rotate(0.25turn) scale(0.6);" fontIcon="arrow_back_ios" (click)="moveTask('top'); editMoveTrace($event,'Task_moveTop')"
matTooltip="Décaler la tuile vers le haut (ceci placera la tuile à la fin de la ligne)."
[matTooltip]="translate.instant('moveTop_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
</div>
<div class="piece-menu-directioncross-updownarrows-down">
<mat-icon style="transform: rotate(0.75turn) scale(0.6);" fontIcon="arrow_back_ios" (click)="moveTask('bottom'); editMoveTrace($event,'Task_moveBottom')"
matTooltip="Décaler la tuile vers le bas (ceci placera la tuile à la fin de la ligne)."
[matTooltip]="translate.instant('moveBottom_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
</div>
</div>
<div class="piece-menu-directioncross-right">
<mat-icon style="transform: rotate(0.5turn) scale(0.6);" fontIcon="arrow_back_ios" (click)="moveTask('right'); editMoveTrace($event,'Task_moveRight')"
matTooltip="Décaler la tuile vers la droite. Dans le cas où une tuile est déjà présente, leurs places sont inversées."
[matTooltip]="translate.instant('moveRight_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></mat-icon>
</div>
</div>
......@@ -51,7 +51,7 @@
<div class="piece-symbolchoice" [class]="displaySymbolChoice">
<div class="piece-symbolchoice-header">
<label>Choisir un symbole de tâche commune :</label>
<label>{{'task_common_label' | translate}}</label>
<div><mat-icon fontIcon="delete" (click)="setSymbol('','')"></mat-icon></div>
</div>
<div class="piece-symbolchoice-symbols">
......@@ -80,9 +80,9 @@
<div class="piece-prerequires" [class]="pieceDetailsService.piece == task ? displayPrequires : 'hide'">
<div class="piece-prerequires-prerequires">
<label class="piece-prerequires-title">Antécédents</label>
<label class="piece-prerequires-title">{{'task_prerequire_antecedents_title' | translate}}</label>
<div class="piece-prerequires-form">
<div style="text-align: center;" *ngIf="j == 0">La première tâche de la ligne ne peut pas avoir d'antécédent</div>
<div style="text-align: center;" *ngIf="j == 0">{{'task_prerequire_antecedents_err1' | translate}}</div>
<ng-container *ngIf="hasPossibleAntecedents()">
<ng-container *ngFor="let inlineTask of role.tasks">
<ng-container *ngFor="let element of inlineTask; let index = index">
......@@ -93,11 +93,11 @@
</ng-container>
</ng-container>
</ng-container>
<div style="text-align: center;" *ngIf="!hasPossibleAntecedents() && j != 0">Veuillez d'abord entrer des identifiants aux tâches précédentes</div>
<div style="text-align: center;" *ngIf="!hasPossibleAntecedents() && j != 0">{{'task_prerequire_antecedents_err2' | translate}}</div>
</div>
</div>
<div class="piece-prerequires-ressources">
<label class="piece-prerequires-title">Ressources & Compétences</label>
<label class="piece-prerequires-title">{{'task_prerequire_ressource_title' | translate}}</label>
<div class="piece-prerequires-form">
<ng-container *ngFor="let ressource of scenario.ressources">
<div class="piece-prerequires-ressources-element" *ngIf="ressource.name">
......@@ -142,30 +142,30 @@
<div class="piece-form">
<div class="piece-form-top">
<input class="piece-form-top-identifier" name="identifier" type="text" [value]="task.identifier" (change)="changeIdentifier($event)" placeholder="A" min="1" maxlength="5"
matTooltip="Identifiant de la tâche (ex: A, B, C, …)"
[matTooltip]="translate.instant('task_identifier_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"/>
<div class="piece-form-top-title">Tâche</div>
<div class="piece-form-top-title">{{'normalTask_title' | translate}}</div>
<mat-icon class="piece-form-top-comment" fontIcon="comment" *ngIf="task.comments.length > 0"></mat-icon>
<mat-icon class="piece-form-top-repeat" fontIcon="refresh" *ngIf="task.repeat.iteration > 0 || task.repeat.while != ''"></mat-icon>
<button mat-button class="piece-form-top-symbol" (click)="changeDisplaySymbolChoice()"
matTooltip="Indicateur de tâche commune: si cette tâche doit être faite avec un autre rôle, mettez le même symbole sur la tâche de ces deux rôles"
[matTooltip]="translate.instant('task_common_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips">
<mat-icon *ngIf="task.symbol.symbol" [style.color]="task.symbol.color" [fontIcon]="task.symbol.symbol"></mat-icon>
</button>
</div>
<textarea class="piece-form-content" [(ngModel)]="task.objective" (change)="editTrace($event,'Task_action')" [style.background-image]="(i == findFirstIndexOfTaskType('normal')[0] && j == findFirstIndexOfTaskType('normal')[1]) ? urlIcon : ''"
placeholder="Positionner dans l'ordre les balises HTML principales"
matTooltip="Action à effectuer (interagir avec un objet, parler avec quelqu'un, …)"
[placeholder]="translate.instant('normalTask_action_placeholder')"
[matTooltip]="translate.instant('task_action_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips"></textarea>
<div class="piece-form-bottom">
<div class="piece-form-bottom-duration"
matTooltip="Durée de la tâche (en unité de temps, minutes ou tours). Il est conseillé d'utiliser les mêmes unités sur toutes les tuiles pour pouvoir comparer plus facilement les durées des actions."
[matTooltip]="translate.instant('task_duration_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips">
<input name="value" type="number" [(ngModel)]="task.duration" (input)="durationChange()" min="1" (change)="task.duration < 1 ? task.duration = 1 : ''; editTrace($event,'Task_duration')"/>
<select name="unite" [(ngModel)]="task.durationUnit" (change)="durationChange(); editTrace($event,'Task_duration_unit')">
<option value="UT">UT</option>
<option value="min">min</option>
<option value="tours">tours</option>
<option value="UT">{{'task_duration_ut' | translate}}</option>
<option value="min">{{'task_duration_min' | translate}}</option>
<option value="tours">{{'task_duration_turn' | translate}}</option>
</select>
</div>
<mat-icon class="piece-form-bottom-character" fontIcon="person" *ngIf="task.characters.length > 0"
......@@ -173,9 +173,9 @@
[style.background]="task.characters.length > 1 ? 'linear-gradient('+ task.characters[0].color +','+ task.characters[task.characters.length-1].color +')' : 'white'"></mat-icon>
<mat-icon class="piece-form-bottom-interrupt" fontIcon="front_hand" *ngIf="task.interrupt != ''"></mat-icon>
<button mat-button class="piece-form-bottom-prerequires" (click)="changeDisplayPrerequires()"
matTooltip="Prérequis pour effectuer cette tâche"
[matTooltip]="translate.instant('task_prerequire_tooltip')"
matTooltipPosition="above" [matTooltipDisabled]="!tooltipService.activatedTooltips">
Prérequis
{{'task_prerequire_label' | translate}}
</button>
</div>
</div>
......
......@@ -15,6 +15,7 @@ import { MatSnackBar } from '@angular/material/snack-bar';
import { IdentifierSnackbarComponent } from 'src/app/components/snackbars/identifier-snackbar/identifier-snackbar.component';
import { Trace } from 'src/app/class/trace/trace';
import { MinimapService } from 'src/app/services/minimap/minimap.service';
import { TranslateService } from '@ngx-translate/core';
@Component({
selector: 'app-task',
......@@ -42,7 +43,7 @@ export class TaskComponent implements OnInit {
antecedent: boolean = false;
constructor(protected pieceDetailsService: PieceDetailsService, protected tooltipService: TooltipService, public dialog: MatDialog,
private _snackBar: MatSnackBar, private minimapService: MinimapService) { }
private _snackBar: MatSnackBar, private minimapService: MinimapService, protected translate: TranslateService) { }
ngOnInit(): void {
this.setPieceWidth();
......@@ -90,7 +91,7 @@ export class TaskComponent implements OnInit {
}
onClickErase(): void {
const dialogRef = this.dialog.open(CleanDialogComponent, { data: 'Tâche' });
const dialogRef = this.dialog.open(CleanDialogComponent, { data: this.translate.instant('normalTask_title') });
dialogRef.afterClosed().subscribe(result => {
if (result == true) {
this.task.duration = 1;
......@@ -135,7 +136,7 @@ export class TaskComponent implements OnInit {
}
onClickDelete(): void {
const dialogRef = this.dialog.open(SuppressDialogComponent, { data: 'cette Tâche' });
const dialogRef = this.dialog.open(SuppressDialogComponent, { data: this.translate.instant('task_prefix')+' '+this.translate.instant('normalTask_title') });
dialogRef.afterClosed().subscribe(result => {
if (result == true) {
this.role.tasks.forEach(inlineTasks => {
......
<div class="piece"
matTooltip="Permet d'affecter un ou des personnages précédemment créé(s) à la tâche."
[matTooltip]="translate.instant('sider_char_tooltip')"
matTooltipPosition="before" [matTooltipDisabled]="!tooltipService.activatedTooltips">
<div class="piece-form">
<div class="piece-form-select">
<div class="piece-form-title">Affecter un personnage non joueur déjà créé</div>
<div class="piece-form-title">{{'sider_char_select_title' | translate}}</div>
<div class="piece-form-select-container">
<mat-icon fontIcon="person"></mat-icon>
<div class="piece-form-select-container-select">
<label for="name">Nom</label>
<label for="name">{{'char_name_label' | translate}}</label>
<select name="name" [(ngModel)]="selectedAssignCharacter">
<ng-container *ngFor="let character of scenario.characters">
<option [ngValue]="character" *ngIf="notAlreadyAssigned(character)">{{character.name}}</option>
......@@ -15,29 +15,29 @@ matTooltipPosition="before" [matTooltipDisabled]="!tooltipService.activatedToolt
</select>
</div>
</div>
<button mat-button (click)="assignCharacter()">Sélectionner</button>
<button mat-button (click)="assignCharacter()">{{'sider_char_button_select' | translate}}</button>
</div>
<div>
<div class="piece-form-title">Personnage(s) non joueur utilisé(s)</div>
<div class="piece-form-title">{{'sider_chars_title' | translate}}</div>
<div class="piece-form-character-create" *ngFor="let character of task.characters, let index = index">
<div class="piece-form-character-create-top">
<mat-icon fontIcon="person"></mat-icon>
<div class="piece-form-character-create-top-name">
<label for="name">Nom</label>
<label for="name">{{'char_name_label' | translate}}</label>
<input name="name" type="text" [(ngModel)]="character.name" disabled/>
</div>
</div>
<div class="piece-form-character-infos">
<div class="piece-form-character-infos-description">
<label for="description">Description</label>
<label for="description">{{'char_description_label' | translate}}</label>
<textarea name="description" [(ngModel)]="character.description" disabled></textarea>
</div>
<div class="piece-form-character-infos-color">
<label for="color">Couleur</label>
<label for="color">{{'char_color_label' | translate}}</label>
<input name="color" type="color" [(ngModel)]="character.color" disabled/>
</div>
</div>
<button mat-button (click)="unassignCharacter(index)">Retirer de ma tâche</button>
<button mat-button (click)="unassignCharacter(index)">{{'sider_char_button_unselect' | translate}}</button>
</div>
</div>
......
import { Component, Input, OnInit } from '@angular/core';
import { MatDialog } from '@angular/material/dialog';
import { TranslateService } from '@ngx-translate/core';
import { Character } from 'src/app/class/character/character';
import { Scenario } from 'src/app/class/scenario/scenario';
import { Task } from 'src/app/class/task/task';
......@@ -20,7 +21,7 @@ export class CharactersComponent implements OnInit {
selectedAssignCharacter!: Character | undefined;
selectedDeleteCharacterIndex!: number;
constructor(protected tooltipService: TooltipService, public dialog: MatDialog, private pieceDetailsService: PieceDetailsService) { }
constructor(protected tooltipService: TooltipService, public dialog: MatDialog, private pieceDetailsService: PieceDetailsService, protected translate: TranslateService) { }
ngOnInit(): void {
}
......
<div class="piece"
matTooltip="Permet de rajouter des commentaires sur une tuile"
[matTooltip]="translate.instant('comments_tooltip')"
matTooltipPosition="before" [matTooltipDisabled]="!tooltipService.activatedTooltips">
<div class="piece-form">
<div class="piece-form-title">Commentaires</div>
<div class="piece-form-title">{{'comments_title' | translate}}</div>
<div class="piece-form-comments">
<app-comment *ngFor="let comment of piece.comments, let i = index" [comment]="comment" [comments]="piece.comments" [index]="i" [scenario]="scenario"></app-comment>
......@@ -10,10 +10,10 @@ matTooltipPosition="before" [matTooltipDisabled]="!tooltipService.activatedToolt
<div class="piece-form-newcomment">
<div class="piece-form-newcomment-form">
<label>Nouveau commentaire</label>
<label>{{'comments_newComment' | translate}}</label>
<textarea [(ngModel)]="newComment" (change)="editTrace($event,'newComment')"></textarea>
</div>
<button mat-button (click)="addComment()">Ajouter un commentaire</button>
<button mat-button (click)="addComment()">{{'comments_button_newComment' | translate}}</button>
</div>
</div>
......
......@@ -8,6 +8,7 @@ import { Comment } from 'src/app/class/comment/comment';
import { TooltipService } from 'src/app/services/tooltip/tooltip.service';
import { Trace } from 'src/app/class/trace/trace';
import { PieceDetailsService } from 'src/app/services/piece-details/piece-details.service';
import { TranslateService } from '@ngx-translate/core';
@Component({
selector: 'app-comments',
......@@ -20,7 +21,7 @@ export class CommentsComponent implements OnInit {
@Input() scenario: Scenario = new Scenario();
newComment: string = '';
constructor(protected tooltipService: TooltipService, private pieceDetailsService: PieceDetailsService) { }
constructor(protected tooltipService: TooltipService, private pieceDetailsService: PieceDetailsService, protected translate: TranslateService) { }
ngOnInit(): void {
}
......
<div class="piece"
matTooltip="Une tâche peut être interrompue par un autre rôle, ceci est plutôt utilisé dans les jeux compétitifs"
[matTooltip]="translate.instant('interruption_tooltip')"
matTooltipPosition="before" [matTooltipDisabled]="!tooltipService.activatedTooltips">
<div class="piece-form">
<div class="piece-form-header">
<mat-icon fontIcon="front_hand"></mat-icon>
<div class="piece-form-header-label">
<label>Interruption de la tâche</label>
<label>{{'interruption_title' | translate}}</label>
</div>
</div>
<div class="piece-form-textarea">
......
import { Component, Input, OnInit } from '@angular/core';
import { TranslateService } from '@ngx-translate/core';
import { Scenario } from 'src/app/class/scenario/scenario';
import { Task } from 'src/app/class/task/task';
import { Trace } from 'src/app/class/trace/trace';
......@@ -15,7 +16,7 @@ export class InteruptComponent implements OnInit {
@Input() task: Task = new Task('normal');
@Input() scenario: Scenario = new Scenario();
constructor(protected tooltipService: TooltipService, private pieceDetailsService: PieceDetailsService) { }
constructor(protected tooltipService: TooltipService, private pieceDetailsService: PieceDetailsService, protected translate: TranslateService) { }
ngOnInit(): void {
}
......
<div class="piece"
matTooltip="Une tâche peut-être répétée un certain nombre de fois avant d'être résolue"
[matTooltip]="translate.instant('repeat_tooltip')"
matTooltipPosition="before" [matTooltipDisabled]="!tooltipService.activatedTooltips">
<div class="piece-form">
<div class="piece-form-header">
<mat-icon fontIcon="refresh"></mat-icon>
<div class="piece-form-header-for">
<label>Répéter</label>
<label>{{'repeat_title1' | translate}}</label>
<input type="text" [(ngModel)]="task.repeat.iteration" (change)="editTrace($event,'repeat_nbTimes')"/>
<label>fois</label>
<label>{{'repeat_title2' | translate}}</label>
</div>
</div>
<div class="piece-form-while">
<label>ou jusqu'à ce que :</label>
<label>{{'repeat_title3' | translate}}</label>
<textarea [(ngModel)]="task.repeat.while" (change)="editTrace($event,'repeat_stopCondition')"></textarea>
</div>
</div>
......
import { Component, Input, OnInit } from '@angular/core';
import { TranslateService } from '@ngx-translate/core';
import { Scenario } from 'src/app/class/scenario/scenario';
import { Task } from 'src/app/class/task/task';
import { Trace } from 'src/app/class/trace/trace';
......@@ -15,7 +16,7 @@ export class RepeatComponent implements OnInit {
@Input() scenario: Scenario = new Scenario();
@Input() task: Task = new Task('normal');
constructor(protected tooltipService: TooltipService, private pieceDetailsService: PieceDetailsService) { }
constructor(protected tooltipService: TooltipService, private pieceDetailsService: PieceDetailsService, protected translate: TranslateService) { }
ngOnInit(): void {
}
......
<div class="piece"
matTooltip="Ceci permet de choisir combien de joueurs représenteront chaque rôle si le nombre de joueurs est amené à varier"
[matTooltip]="translate.instant('occurence_tooltip')"
matTooltipPosition="before" [matTooltipDisabled]="!tooltipService.activatedTooltips">
<div class="piece-form">
<div class="piece-title">Occurrence du rôle</div>
<div class="piece-title">{{'occurence_title' | translate}}</div>
<div class="piece-form-occurrence" *ngFor="let occurence of role.occurences, let i = index">
<div class="piece-form-occurrence-text">
<input type="number" [(ngModel)]="occurence.iteration" (change)="editTrace($event,'Occurrence_['+i+']_nbRole')"/>
<label> entre </label>
<label> {{'occurence_between' | translate}} </label>
<input type="number" [(ngModel)]="occurence.min" (change)="editTrace($event,'Occurrence_['+i+']_playersMin')"/>
<label> et </label>
<label> {{'occurence_and' | translate}} </label>
<input type="number" [(ngModel)]="occurence.max" (change)="editTrace($event,'Occurrence_['+i+']_playersMax')"/>
<label> joueurs</label>
<label> {{'occurence_player' | translate}}</label>
</div>
<button mat-button (click)="removeOccurrence(i)"><mat-icon fontIcon="remove"></mat-icon></button>
</div>
......
import { Component, Input, OnInit } from '@angular/core';
import { TranslateService } from '@ngx-translate/core';
import { RoleOccurrence } from 'src/app/class/role-occurrence/role-occurrence';
import { Role } from 'src/app/class/role/role';
import { Scenario } from 'src/app/class/scenario/scenario';
......@@ -16,7 +17,7 @@ export class RoleOccurenceComponent implements OnInit {
@Input() scenario: Scenario = new Scenario();
@Input() role: Role = new Role();
constructor(protected tooltipService: TooltipService, private pieceDetailsService: PieceDetailsService) { }
constructor(protected tooltipService: TooltipService, private pieceDetailsService: PieceDetailsService, protected translate: TranslateService) { }
ngOnInit(): void {
}
......
<div class="piece" [style.background]="task.supplementaryRole ?
'linear-gradient(165deg, rgba(154,213,236,1) 0%, rgba(154,213,236,1) 55%,'+task.supplementaryRole.color+' 55%,'+task.supplementaryRole.color+' 100%)'
: 'linear-gradient(165deg, rgba(154,213,236,1) 0%, rgba(154,213,236,1) 55%, rgba(0,0,0,1) 55%, rgba(0,0,0,1) 100%)'"
matTooltip="Sert à associer ou non une tâche à un Rôle supplémentaire"
[matTooltip]="translate.instant('supplementaryRole_tooltip')"
matTooltipPosition="before" [matTooltipDisabled]="!tooltipService.activatedTooltips">
<div class="piece-form">
<div class="piece-title">Tâche liée au rôle supplémentaire</div>
<div class="piece-title">{{'supplementaryRole_title' | translate}}</div>
<!--
<div class="piece-form-checkbox">
<input type="checkbox" [(ngModel)]="checkbox"/>
......@@ -12,9 +12,9 @@
</div>
œ-->
<div class="piece-form-select">
<label>Rôle</label>
<label>{{'supplementaryRole_label' | translate}}</label>
<select [(ngModel)]="task.supplementaryRole" (change)="editTrace($event,'supplementaryRole')">
<option selected [ngValue]="undefined">Aucun</option>
<option selected [ngValue]="undefined">{{'supplementaryRole_none' | translate}}</option>
<ng-container *ngFor="let supplementaryRole of role.supplementaryRoles">
<option [ngValue]="supplementaryRole">{{supplementaryRole.name}}</option>
</ng-container>
......
......@@ -5,6 +5,7 @@ import { TooltipService } from 'src/app/services/tooltip/tooltip.service';
import { Scenario } from 'src/app/class/scenario/scenario';
import { PieceDetailsService } from 'src/app/services/piece-details/piece-details.service';
import { Trace } from 'src/app/class/trace/trace';
import { TranslateService } from '@ngx-translate/core';
@Component({
selector: 'app-supplementary-task',
......@@ -17,7 +18,7 @@ export class SupplementaryTaskComponent implements OnInit {
@Input() task: Task = new Task('normal');
@Input() role: Role = new Role();
constructor(protected tooltipService: TooltipService, private pieceDetailsService: PieceDetailsService) { }
constructor(protected tooltipService: TooltipService, private pieceDetailsService: PieceDetailsService, protected translate: TranslateService) { }
ngOnInit(): void {
}
......
{
"clearPiece_tooltip": "Clear the content of this tile.",
"deletePiece_tooltip": "Delete the tile",
"moveRight_tooltip": "Shift the tile to the right. In case a tile is already present, their positions are swapped.",
"moveRightFinal_tooltip": "Shift the tile to the right.",
"moveLeft_tooltip": "Shift the tile to the left. In case a tile is already present, their positions are swapped.",
"moveLeftFinal_tooltip": "Shift the tile to the left.",
"moveTop_tooltip": "Shift the tile upwards (this will place the tile at the end of the line).",
"moveBottom_tooltip": "Shift the tile downwards (this will place the tile at the end of the line).",
"plus_tooltip": "Add a new tile of this type.",
"zoomIn_tooltip": "Zoom In.",
"zoomOut_tooltip": "Zoom Out.",
"enableHelp_label": "Enable the aids",
"enableHelp_tooltip": "Description of each element of the RLG Maker.",
"unity_label": "Integrate the game into Unity (WIP)",
"unity_tooltip": "Usage in a specific game template. Contact gaelle.guigon@imt-nord-europe.fr for more information. Not available in this version.",
"download_tooltip": "Download a backup of the scenario.",
"upload_tooltip": "Import a backup of the scenario.",
"manual_tooltip": "Download the user manual (FR).",
"lang_tooltip": "Change the language.",
"snackbar_identifier": "Attention, this identifier is already used in this Role.",
"snackbar_loading_fail": "File upload failed.",
"snackbar_loading_success": "File upload successful.",
"siderTitle_game": "Game",
"siderTitle_mission": "Mission",
"siderTitle_role": "Role",
"siderTitle_task": "Task",
"siderTitle_step": "Step",
"dialog_clear_title": "Clear the content",
"dialog_clear_content": "Are you sure you want to erase the content of this tile",
"dialog_create_title": "Create an element",
"dialog_create_content": "Are you sure you want to create",
"dialog_delete_title": "Delete the element",
"dialog_delete_content1": "Are you sure you want to delete",
"dialog_delete_content2": "and all that it implies ?",
"dialog_save_title": "Download the scenario",
"dialog_save_content": "Project name :",
"dialog_save_placeholder": "My Scenario",
"dialog_button_yes": "Yes",
"dialog_button_no": "No",
"dialog_button_save": "Download",
"dialog_button_cancel": "Cancel",
"game_tooltip": "The game includes one or more Missions. Each Mission comprises at least 2 Roles. The Roles can be different within the various Missions of the game.",
"gameEducationnalObjective_title": "Educationnal objective",
"gameEducationnalObjective_objective_label": "Common for the game",
"gameEducationnalObjective_objective_placeholder": "- Improving softskills\n- Learn to cooperate",
"gameEducationnalObjective_objective_tooltip": "What you want to achieve in a training situation. Start each objective with a verb. If your game is divided into several missions, make a distinction between the overall objectives of the game and the objectives of each mission.",
"gameContext_title": "Game background",
"gameContext_universe_label": "Universe",
"gameContext_universe_placeholder": "Realistic",
"gameContext_universe_tooltip": "Is the game realistic or futuristic, medieval-fantasy, post-apocalyptic, science fiction?",
"gameContext_support_label": "Medium / Device(s)",
"gameContext_support_placeholder": "3D computer game",
"gameContext_support_tooltip": "Will your game be on computer, in VR, on tablet/smartphone or without any particular technology?",
"gameContext_duration_label": "Duration",
"gameContext_duration_placeholder": "3 hrs.",
"gameContext_duration_tooltip": "How long will the game last? Knowing that the game includes 1 or more missions. A mission could be the length of a lesson, and the game would take place over several lessons.",
"gameContext_intrigue_label": "Plot",
"gameContext_intrigue_placeholder": "You're an intern in a communications agency and need to prove yourself before being hired.",
"gameContext_intrigue_tooltip": "What's the story behind the game? What's at stake for the players?",
"gameContext_other_label": "Miscellaneous",
"gameContext_other_placeholder": "Context of use: location, presence of tutor/trainer, when to use the game, equipment required",
"gameContext_other_tooltip": "Any other element you wish to include in the game that is not defined in the tiles",
"mission": "Mission",
"mission_add_tooltip": "Add a new mission.",
"mission_delete_tooltip": "Delete the mission",
"mission_tooltip": "The mission is common to all roles.",
"mission_new": "a new Mission",
"mission_delete": "this Mission",
"missionEducationnalObjective_clean": "Educationnal Objective of the Mission",
"missionEducationnalObjective_title": "Educationnal objective",
"missionEducationnalObjective_objective_label": "Common for mission",
"missionEducationnalObjective_objective_placeholder": "Understand the roles involved in designing a website",
"missionEducationnalObjective_objective_tooltip": "What you want to achieve in a training situation. Start each objective with a verb. If your game consists of several missions, distinguish between the overall objectives of the game and the objectives of each mission.",
"missionContext_clean": "Mission background",
"missionContext_title": "Mission background",
"missionContext_duration_label": "Duration",
"missionContext_duration_placeholder": "1 hr",
"missionContext_duration_tooltip": "How long will the mission last?",
"missionContext_intrigue_label": "Plot",
"missionContext_intrigue_placeholder": "Design an ergonomic website for your first customer",
"missionContext_intrigue_tooltip": "What's the story behind the mission? What's at stake for the players?",
"missionContext_communication_label": "Means of communication",
"missionContext_communication_placeholder": "Online chat, online voice, face-to-face, walkie-talkie, carrier pigeon...",
"missionContext_communication_tooltip": "How will the players communicate with each other: verbally, by chat, by computer voice, by message, etc.?",
"missionContext_other_label": "Miscellaneous",
"missionContext_other_placeholder": "Context of use: location, presence of tutor/trainer, when to use the game, equipment required, target audience",
"missionContext_other_tooltip": "Any other element you wish to include in the mission that is not defined in the tiles",
"role_add_tooltip": "Add a new role",
"role_delete_tooltip": "Delete the role",
"role_tooltip": "First role played by a player. The second one is found lower on the page.",
"role_new": "a new Role for the Mission",
"role_delete": "this Role",
"role_clean": "Role",
"role_title": "Role",
"role_intitule_label": "Title",
"role_intitule_placeholder": "Web Developer",
"role_intitule_tooltip": "Name of this role",
"role_name_label": "Quest name",
"role_name_placeholder": "Website integration",
"role_name_tooltip": "In 2-3 words, the title of this role's quest",
"role_description_label": "Description",
"role_description_tooltip": "Details of this role if necessary.",
"role_objective_label": "Educational objectives",
"role_objective_placeholder": "Objective name",
"role_objective_tooltip": "The objectives for this role in particular",
"role_objective_delete": "this Educational objective",
"role_reward_label": "Reward",
"role_reward_tooltip": "What the role will obtain at the end of its quest (increase in skill, win an item, unlock a quest, etc.)",
"role_reward_type_label": "Type",
"role_reward_type_newQuest": "Start a new quest",
"role_reward_type_newQuest_tooltip": "Choose a quest from another mission with the same Role name",
"role_reward_type_skill": "Develop a field of expertise",
"role_reward_type_skill_tooltip": "Choose a skill created below",
"role_reward_type_objective": "Achieve an educational objective",
"role_reward_type_objective_tooltip": "Choose an educational objective created above",
"role_reward_type_object": "Retrieve an item",
"role_reward_type_object_placeholder": "Name of the object",
"role_reward_type_object_delete": "this Object of the Reward",
"role_reward_type_other": "Other",
"role_reward_delete": "this Reward",
"role_personnalization_title": "Customization",
"role_personnalization_label": "Appearance, equipment",
"role_personnalization_tooltip": "If the role has a particular outfit or specific objects",
"role_ressource_title": "Resources & skills",
"role_ressource_tooltip": "Objects and resources available for this role",
"role_ressource_name_label": "Name",
"role_ressource_quantity_label": "Number / stats",
"role_ressource_type_label": "Type",
"role_ressource_type_object": "Object",
"role_ressource_type_skill": "Skill",
"role_ressource_delete": "this Ressource",
"role_supplementaryRole_title": "Additional role",
"role_supplementaryRole_name_label": "Name",
"role_supplementaryRole_name_tooltip": "Additional role title",
"role_supplementaryRole_color_label": "Color",
"role_supplementaryRole_color_tooltip": "Using a different color for these additional Roles makes it easier to identify the Tasks associated with them.",
"role_supplementaryRole_objective_label": "Objectives",
"role_supplementaryRole_objective_tooltip": "Educational objectives of this additional role",
"role_supplementaryRole_skill_label": "Skills",
"role_supplementaryRole_skill_tooltip": "Role-specific skills to perform related tasks",
"role_supplementaryRole_rule_label": "Rules",
"role_supplementaryRole_rule_tooltip": "Rules specific to this role (does it have any constraints or additional rights or access?)",
"role_supplementaryRole_delete": "this Additional role",
"steps_mission": "Chronology of the mission",
"steps_role": "Chronology of the role",
"step_title": "Step",
"step_tooltip": "Enables the scenario to be split into major stages.",
"step_duration_label": "Duration",
"step_duration_tooltip": "Duration of the step (in units of time, minutes, or turns). It is advisable to use the same units across all tiles for easier comparison of action durations.",
"step_duration_ut": "TU",
"step_duration_min": "min",
"step_duration_turn": "turns",
"step_clean": "Step",
"step_delete": "this Step of",
"task_prefix": "cette",
"task_identifier_tooltip": "Task identifier (e.g. A, B, C, ...)",
"task_common_tooltip": "Common task indicator: if this task is to be done with another role, put the same symbol on the task of both roles.",
"task_common_label": "Choose a common task symbol:",
"task_action_tooltip": "Action to be performed (interacting with an object, talking to someone, etc.)",
"task_duration_tooltip": "Task duration (in units of time, minutes, or turns). It is recommended to use the same units across all tiles for easier comparison of action durations.",
"task_duration_ut": "TU",
"task_duration_min": "min",
"task_duration_turn": "turns",
"task_prerequire_label": "Prerequisites",
"task_prerequire_tooltip": "Prerequisites for this task",
"task_prerequire_antecedents_title": "Antecedents",
"task_prerequire_antecedents_err1": "The first task in the line cannot have an antecedent",
"task_prerequire_antecedents_err2": "Please first input identifiers for the preceding tasks",
"task_prerequire_ressource_title": "Resources & Skills",
"task_transform_tooltip": "Change the type of this tile.",
"task_transform_normalTask": "Convert to Task",
"task_transform_annexeTask": "Convert to Subtask",
"task_transform_optionnalTask": "Convert to Optional Task",
"task_transform_finalTask": "Convert to Final Task",
"normalTask_title": "Task",
"normalTask_action_placeholder": "Ordering the main HTML tags",
"normalTask_add": "Add a Task",
"annexeTask_title": "Subtask",
"annexeTask_tooltip": "Subtasks: these tasks are not mandatory to achieve the defined educational objectives. They are quick and allow faster players to be occupied while waiting for others to finish their tasks. It is advisable to include them.",
"annexeTask_action_placeholder": "Test your knowledge of PHP forms",
"annexeTask_add": "Add a Subtask",
"optionnalTask_title": "Optionnal Task",
"optionnalTask_title1": "Optionnal",
"optionnalTask_title2": "Task",
"optionnalTask_tooltip": "Optional Task: this task can be completed or not. Unlike a subtask, optional tasks are useful for achieving educational objectives, like simple tasks, but offer the player the possibility to complete the task in several different ways.",
"optionnalTask_action_placeholder": "Starting from a template / Starting from scratch",
"optionnalTask_add": "Add an Optionnal Task",
"randomEvent_title": "Random Event",
"randomEvent_title1": "Random",
"randomEvent_title2": "Event",
"randomEvent_action_placeholder": "The client is modifying their request",
"randomEvent_add": "Add a Random Event",
"finalTask_title": "Final Task",
"finalTask_tooltip": "Final Task: This is the last action to be completed to conclude the quest.",
"finalTask_action_placeholder": "Putting the website online",
"finalTask_add": "Add a Final Task",
"repeatTask_title": "Repeat",
"repeatTask_while": "until:",
"repeatTask_action_placeholder": "Validate with the sponsor",
"repeatTask_add": "Restart the turn",
"char_create_title": "Create a new non playable character",
"char_create_tooltip": "If non-player characters (NPCs) are to be involved in the scenario, they must be described with this tile. Each character has its own color and is visible on the tasks in which it is involved. The teacher can be considered a character if he/she doesn't have a full Role.",
"char_name_label": "Name",
"char_description_label": "Description",
"char_color_label": "Color",
"chars_title": "Non playable characters",
"char_tooltip": "To involve this character in a Task or Random Event, click on the respective tile and select this character from the sidebar.",
"char_button_create": "Create",
"char_button_delete": "Delete",
"char_clean": "Non playable characters (this includes the deletion of all characters)",
"char_delete": "this non playable character",
"sider_char_tooltip": "Allows assigning one or more previously created characters to the task.",
"sider_char_select_title": "Assigning a character already created",
"sider_char_button_select": "Assign",
"sider_chars_title": "Non playable charater(s) used",
"sider_char_button_unselect": "Remove from my task",
"rules_title": "Game rules",
"rules_rule_tooltip": "Important elements to take into account in the rules of the game",
"rules_ressource_title": "Resources / Items",
"rules_ressource_name_label": "Name",
"rules_ressource_quantity_label": "Quantity",
"rules_ressource_tooltip": "Objects and resources available for ALL roles",
"rules_clean": "Game rules (This includes the deletion of all resources",
"rules_delete": "this Resource",
"occurence_title": "Role occurrence",
"occurence_tooltip": "This allows selecting how many players will represent each role if the number of players is subject to change.",
"occurence_between": "between",
"occurence_and": "and",
"occurence_player": "players",
"interruption_title": "Task interruption",
"interruption_tooltip": "A task can be interrupted by another role, this is more commonly used in competitive games.",
"repeat_tooltip": "A task can be repeated a certain number of times before being resolved.",
"repeat_title1": "Repeat",
"repeat_title2": "times",
"repeat_title3": "or until:",
"supplementaryRole_title": "Task related to the additional role",
"supplementaryRole_tooltip": "Used to associate or not associate a task with an additional role.",
"supplementaryRole_label": "Role",
"supplementaryRole_none": "None",
"comments_tooltip": "Allows adding comments on a tile.",
"comments_title": "Comments",
"comments_newComment": "New comment",
"comments_button_edit": "Edit",
"comments_button_delete": "Delete",
"comments_button_answer": "Answer",
"comments_button_newComment": "Add a comment",
"comments_answer_delete": "this Answer",
"comments_comment_delete": "this Comment"
}
\ No newline at end of file
{
"clearPiece_tooltip": "Effacer le contenu de cette tuile",
"deletePiece_tooltip": "Supprimer la tuile",
"moveRight_tooltip": "Décaler la tuile vers la droite. Dans le cas où une tuile est déjà présente, leurs places sont inversées.",
"moveRightFinal_tooltip": "Décaler la tuile vers la droite.",
"moveLeft_tooltip": "Décaler la tuile vers la gauche. Dans le cas où une tuile est déjà présente, leurs places sont inversées.",
"moveLeftFinal_tooltip": "Décaler la tuile vers la gauche.",
"moveTop_tooltip": "Décaler la tuile vers le haut (ceci placera la tuile à la fin de la ligne).",
"moveBottom_tooltip": "Décaler la tuile vers le bas (ceci placera la tuile à la fin de la ligne).",
"plus_tooltip": "Ajouter une nouvelle tuilde de ce type.",
"zoomIn_tooltip": "Zoomer.",
"zoomOut_tooltip": "Dézoomer.",
"enableHelp_label": "Activer les aides",
"enableHelp_tooltip": "Descriptif de chaque élément du RLG Maker.",
"unity_label": "Intégrer le jeu sous Unity (WIP)",
"unity_tooltip": "Utilisation dans un template de jeu précis. Contacter gaelle.guigon@imt-nord-europe.fr pour plus d’informations. Non disponible dans cette version.",
"download_tooltip": "Télécharger une sauvegarde du scénario.",
"upload_tooltip": "Importer une sauvegarde du scénario.",
"manual_tooltip": "Télécharger le manuel d'utilisation",
"lang_tooltip": "Changer la langue.",
"snackbar_identifier": "Attention, cet identifiant est déjà utilisé dans ce Rôle",
"snackbar_loading_fail": "Chargement du fichier échoué",
"snackbar_loading_success": "Chargement du fichier réussi",
"siderTitle_game": "Jeu",
"siderTitle_mission": "Mission",
"siderTitle_role": "Rôle",
"siderTitle_task": "Tâche",
"siderTitle_step": "Étape",
"dialog_clear_title": "Effacer le contenu",
"dialog_clear_content": "Êtes vous sûr de vouloir effacer le contenu de cette tuile",
"dialog_create_title": "Créer un élément",
"dialog_create_content": "Êtes vous sûr de vouloir créer",
"dialog_delete_title": "Supprimer l'élément",
"dialog_delete_content1": "Êtes vous sûr de vouloir supprimer",
"dialog_delete_content2": "et tout ce que ce la implique ?",
"dialog_save_title": "Télécharger le scénario",
"dialog_save_content": "Nom du projet :",
"dialog_save_placeholder": "Mon Scénario",
"dialog_button_yes": "Oui",
"dialog_button_no": "Non",
"dialog_button_save": "Télécharger",
"dialog_button_cancel": "Annuler",
"game_tooltip": "Le jeu comprend une ou plusieurs Missions. Chaque mission comprend au moins 2 Rôles. Les Rôles peuvent être différents au sein des différentes Missions du jeu.",
"gameEducationnalObjective_title": "Objectif(s) pédagogique",
"gameEducationnalObjective_objective_label": "Commun pour le jeu",
"gameEducationnalObjective_objective_placeholder": "- Améliorer les softskills\n- Apprendre à coopérer",
"gameEducationnalObjective_objective_tooltip": "Ce que l’on veut atteindre en situation de formation. Commencer chaque objectif par un verbe. Si votre jeu est composé de plusieurs missions, distinguez les objectifs globaux du jeu et les objectifs de chaque mission.",
"gameContext_title": "Contexte du jeu",
"gameContext_universe_label": "Univers",
"gameContext_universe_placeholder": "Réaliste",
"gameContext_universe_tooltip": "Est-ce que le jeu est réaliste ou est-il futuriste, médiéval-fantastique, post-apocalyptique, est-ce de la science-fiction ?",
"gameContext_support_label": "Medium / Support(s)",
"gameContext_support_placeholder": "Jeu en 3D sur ordinateur",
"gameContext_support_tooltip": "Votre jeu sera-t-il sur ordinateur, en VR, sur tablette / smartphone ou sans technologie particulière ?",
"gameContext_duration_label": "Durée",
"gameContext_duration_placeholder": "3h",
"gameContext_duration_tooltip": "Combien de temps va durer le jeu ? Sachant que le jeu comporte 1 ou plusieurs missions. Une mission peut être la durée d’une séance de cours et le jeu se déroulerait sur plusieurs séances de cours.",
"gameContext_intrigue_label": "Intrigue",
"gameContext_intrigue_placeholder": "Vous êtes stagiaire dans une agence de communication et devez faire vos preuves pour être embauché.e",
"gameContext_intrigue_tooltip": "Quelle est l’histoire du jeu ? Quel est l’enjeu pour les joueurs ?",
"gameContext_other_label": "Contexte d'utilisation",
"gameContext_other_placeholder": "Contexte d’utilisation : lieu, présence de tuteur/formateur, à quel moment du cursus utiliser ce jeu, matériel nécessaire",
"gameContext_other_tooltip": "Tout autre élément que vous souhaiteriez prendre en compte dans le jeu et non défini dans les tuiles",
"mission": "Mission",
"mission_add_tooltip": "Ajouter une mission.",
"mission_delete_tooltip": "Supprimer la mission",
"mission_tooltip": "La mission est commune à tous les Rôles",
"mission_new": "une nouvelle Mission",
"mission_delete": "cette Mission",
"missionEducationnalObjective_clean": "Objectif(s) pédagogique de la Mission",
"missionEducationnalObjective_title": "Objectif(s) pédagogique",
"missionEducationnalObjective_objective_label": "Commun pour la mission",
"missionEducationnalObjective_objective_placeholder": "Comprendre les rôles impliqués dans la conception d'un site web",
"missionEducationnalObjective_objective_tooltip": "Ce que l’on veut atteindre en situation de formation. Commencer chaque objectif par un verbe. Si votre jeu est composé de plusieurs missions, distinguez les objectifs globaux du jeu et les objectifs de chaque mission",
"missionContext_clean": "Contexte de la Mission",
"missionContext_title": "Contexte de la Mission",
"missionContext_duration_label": "Durée",
"missionContext_duration_placeholder": "1h",
"missionContext_duration_tooltip": "Combien de temps va durer la mission ?",
"missionContext_intrigue_label": "Intrigue",
"missionContext_intrigue_placeholder": "Concevez un site web ergonomique pour votre premier client",
"missionContext_intrigue_tooltip": "Quelle est l’histoire de la mission ? Quel est l’enjeu pour les joueurs ?",
"missionContext_communication_label": "Moyen(s) de communication",
"missionContext_communication_placeholder": "Chat en ligne, vocal en ligne, face à face, talkie walkie, pigeon voyageur...",
"missionContext_communication_tooltip": "Comment les joueurs vont-ils communiquer entre eux : à l'oral, par chat, en vocal sur ordinateur, par messages, etc.",
"missionContext_other_label": "Contexte d'utilisation",
"missionContext_other_placeholder": "Contexte d’utilisation : lieu, présence de tuteur/formateur, à quel moment du cursus utiliser ce jeu, matériel nécessaire, public cible",
"missionContext_other_tooltip": "Tout autre élément que vous souhaiteriez prendre en compte dans la mission et non défini dans les tuiles",
"role_add_tooltip": "Ajouter un rôle.",
"role_delete_tooltip": "Supprimer le rôle",
"role_tooltip": "Premier Rôle incarné par un joueur. Le deuxième se trouve un plus bas dans la page.",
"role_new": "un nouveau Rôle pour la Mission",
"role_delete": "ce Rôle",
"role_clean": "Rôle",
"role_title": "Rôle",
"role_intitule_label": "Intitulé",
"role_intitule_placeholder": "Développeur/euse web",
"role_intitule_tooltip": "Nom de ce rôle.",
"role_name_label": "Nom de la quête",
"role_name_placeholder": "Intégration de site web",
"role_name_tooltip": "En 2-3 mots, l'intitulé de la quête de ce rôle",
"role_description_label": "Description",
"role_description_tooltip": "Élément précis sur ce rôle si nécessaire.",
"role_objective_label": "Objectif(s) pédagogique(s)",
"role_objective_placeholder": "Nom de l'objectif",
"role_objective_tooltip": "Les objectifs visés pour ce rôle en particulier",
"role_objective_delete": "cet Objectif pédagogique",
"role_reward_label": "Récompense(s)",
"role_reward_tooltip": "Ce que le rôle va obtenir à la fin de sa quête (gagner en compétence, gagner un objet, débloquer une quête, …)",
"role_reward_type_label": "Type",
"role_reward_type_newQuest": "Débuter une nouvelle quête",
"role_reward_type_newQuest_tooltip": "Choisir une quête d'une autre mission avec le même nom de Rôle",
"role_reward_type_skill": "Travailler un champ de compétence",
"role_reward_type_skill_tooltip": "Choisir une compétence créée ci-dessous",
"role_reward_type_objective": "Atteindre un objectif pédagogique",
"role_reward_type_objective_tooltip": "Choisir un objectif pédagogique créé ci-dessus",
"role_reward_type_object": "Récupérer un objet",
"role_reward_type_object_placeholder": "Nom de l'objet",
"role_reward_type_object_delete": "cet Objet de la Récompense",
"role_reward_type_other": "Autre",
"role_reward_delete": "cette Récompense",
"role_personnalization_title": "Personnalisation",
"role_personnalization_label": "Apparence, équipement",
"role_personnalization_tooltip": "Si le rôle a une tenue particulière ou des objets spécifiques",
"role_ressource_title": "Ressources & compétences",
"role_ressource_tooltip": "Objets, ressources disponibles pour ce rôle",
"role_ressource_name_label": "Nom",
"role_ressource_quantity_label": "Nombre / stats",
"role_ressource_type_label": "Type",
"role_ressource_type_object": "Objet",
"role_ressource_type_skill": "Compétence",
"role_ressource_delete": "cette Ressource",
"role_supplementaryRole_title": "Rôle supplémentaire",
"role_supplementaryRole_name_label": "Nom",
"role_supplementaryRole_name_tooltip": "Intitulé du rôle supplémentaire",
"role_supplementaryRole_color_label": "Couleur",
"role_supplementaryRole_color_tooltip": "Mettre une couleur différente pour ces Rôles additionnels permet de repérer plus rapidement les Tâches qui leur sont associées",
"role_supplementaryRole_objective_label": "Objectifs",
"role_supplementaryRole_objective_tooltip": "Objectifs (pédagogiques) de ce rôle supplémentaire",
"role_supplementaryRole_skill_label": "Compétences",
"role_supplementaryRole_skill_tooltip": "Compétences spécifiques à ce rôle pour effectuer les tâches qui lui seront liées",
"role_supplementaryRole_rule_label": "Règles",
"role_supplementaryRole_rule_tooltip": "Règles spécifiques à ce rôle (a-t-il des contraintes ou des droits, accès supplémentaires ?)",
"role_supplementaryRole_delete": "ce Rôle supplémentaire",
"steps_mission": "Chronologie de la mission",
"steps_role": "Chronologie du rôle",
"step_title": "Étape",
"step_tooltip": "Permet de découper le scénario en grandes étapes.",
"step_duration_label": "Durée",
"step_duration_tooltip": "Durée de l'étape' (en unité de temps, minutes ou tours). Il est conseillé d'utiliser les mêmes unités sur toutes les tuiles pour pouvoir comparer plus facilement les durées des actions.",
"step_duration_ut": "UT",
"step_duration_min": "min",
"step_duration_turn": "tours",
"step_clean": "Étape",
"step_delete": "cette Étape de",
"task_prefix": "cette",
"task_identifier_tooltip": "Identifiant de la tâche (ex: A, B, C, …)",
"task_common_tooltip": "Indicateur de tâche commune: si cette tâche doit être faite avec un autre rôle, mettez le même symbole sur la tâche de ces deux rôles",
"task_common_label": "Choisir un symbole de tâche commune :",
"task_action_tooltip": "Action à effectuer (interagir avec un objet, parler avec quelqu'un, …)",
"task_duration_tooltip": "Durée de la tâche (en unité de temps, minutes ou tours). Il est conseillé d'utiliser les mêmes unités sur toutes les tuiles pour pouvoir comparer plus facilement les durées des actions.",
"task_duration_ut": "UT",
"task_duration_min": "min",
"task_duration_turn": "tours",
"task_prerequire_label": "Prérequis",
"task_prerequire_tooltip": "Prérequis pour effectuer cette tâche",
"task_prerequire_antecedents_title": "Antécédents",
"task_prerequire_antecedents_err1": "La première tâche de la ligne ne peut pas avoir d'antécédent",
"task_prerequire_antecedents_err2": "Veuillez d'abord entrer des identifiants aux tâches précédentes",
"task_prerequire_ressource_title": "Ressources & Compétences",
"task_transform_tooltip": "Changer le type de cette tuile.",
"task_transform_normalTask": "Transformer en Tâche",
"task_transform_annexeTask": "Transformer en Tâche annexe",
"task_transform_optionnalTask": "Transformer en Tâche optionnelle",
"task_transform_finalTask": "Transformer en Tâche finale",
"normalTask_title": "Tâche",
"normalTask_action_placeholder": "Positionner dans l'ordre les balises HTML principales",
"normalTask_add": "Ajouter une Tâche",
"annexeTask_title": "Tâche annexe",
"annexeTask_tooltip": "Tâches annexe: ces tâches ne sont pas obligatoires pour atteindre les objectifs pédagogiques définis. Elles sont rapides et permettent aux joueurs plus rapides d'être occupés en attendant que les autres finissent leurs tâches. Il est préférable d'en mettre.",
"annexeTask_action_placeholder": "Vérifier ses connaissances sur les formulaires PHP",
"annexeTask_add": "Ajouter une Tâche annexe",
"optionnalTask_title": "Tâche optionnelle",
"optionnalTask_title1": "Tâche",
"optionnalTask_title2": "optionnelle",
"optionnalTask_tooltip": "Tâche optionnelle: cette tâche peut être réalisée ou non. À la différence d'une tâche annexe, les tâches optionnelles sont utiles pour répondre aux objectifs pédagogiques, comme les tâches simples, mais offent la possibilité au joueur de réaliser la tâche de plusieurs manières différentes.",
"optionnalTask_action_placeholder": "Partir d'un template / Partir de zéro",
"optionnalTask_add": "Ajouter une Tâche optionnelle",
"randomEvent_title": "Événement aléatoire",
"randomEvent_title1": "Événement",
"randomEvent_title2": "aléatoire",
"randomEvent_action_placeholder": "Le client modifie sa demande",
"randomEvent_add": "Ajouter un Événement aléatoire",
"finalTask_title": "Tâche finale",
"finalTask_tooltip": "Tâche finale: il s'agit de la dernière action à effectuer pour clore la quête.",
"finalTask_action_placeholder": "Mettre le site web en ligne",
"finalTask_add": "Ajouter une Tâche finale",
"repeatTask_title": "Recommencer",
"repeatTask_while": "le tour jusqu'à ce que :",
"repeatTask_action_placeholder": "Faire valider au commanditaire",
"repeatTask_add": "Recommencer le tour",
"char_create_title": "Créer un nouveau personnage non joueur",
"char_create_tooltip": "Si des personnages non joueurs (PNJ) doivent intervenir dans le scénario, ils doivent être décrits avec cette tuile. Chaque personnage a sa propre couleur et sont visibles sur les tâches où ils interviennent. L'enseignant peut être considéré comme un personnage s'il n'a pas un Rôle à part entière.",
"char_name_label": "Nom",
"char_description_label": "Description",
"char_color_label": "Couleur",
"chars_title": "Personnages non joueur",
"char_tooltip": "Pour faire intervenir ce personnage sur une Tâche ou Événement aléatoire, cliquez sur la tuile en question et sélectionnez ce personnage dans la barre latérale.",
"char_button_create": "Créer",
"char_button_delete": "Supprimer",
"char_clean": "Personnages non joueur (cela inclut la suppression de tous les personnages)",
"char_delete": "ce Personnage non joueur",
"sider_char_tooltip": "Permet d'affecter un ou des personnages précédemment créé(s) à la tâche.",
"sider_char_select_title": "Affecter un personnage non joueur déjà créé",
"sider_char_button_select": "Sélectionner",
"sider_chars_title": "Personnage(s) non joueur utilisé(s)",
"sider_char_button_unselect": "Retirer de ma tâche",
"rules_title": "Règles du jeu",
"rules_rule_tooltip": "Éléments importants à prendre en compte dans les règles du jeu.",
"rules_ressource_title": "Ressources / objets",
"rules_ressource_name_label": "Nom",
"rules_ressource_quantity_label": "Quantité",
"rules_ressource_tooltip": "Objets, ressources disponibles pour TOUS les rôles",
"rules_clean": "Règles du jeu (cela inclut la suppression de toutes les ressources)",
"rules_delete": "cette Ressource",
"occurence_title": "Occurence du rôle",
"occurence_tooltip": "Ceci permet de choisir combien de joueurs représenteront chaque rôle si le nombre de joueurs est amené à varier.",
"occurence_between": "entre",
"occurence_and": "et",
"occurence_player": "joueurs",
"interruption_title": "Interruption de la tâche",
"interruption_tooltip": "Une tâche peut être interrompue par un autre rôle, ceci est plutôt utilisé dans les jeux compétitifs.",
"repeat_tooltip": "Une tâche peut-être répétée un certain nombre de fois avant d'être résolue.",
"repeat_title1": "Répéter",
"repeat_title2": "fois",
"repeat_title3": "ou jusqu'à ce que :",
"supplementaryRole_title": "Tâche liée au rôle supplémentaire",
"supplementaryRole_tooltip": "Sert à associer ou non une tâche à un Rôle supplémentaire.",
"supplementaryRole_label": "Rôle",
"supplementaryRole_none": "Aucun",
"comments_tooltip": "Permet de rajouter des commentaires sur une tuile.",
"comments_title": "Commentaires",
"comments_newComment": "Nouveau commentaire",
"comments_button_edit": "Modifier",
"comments_button_delete": "Supprimer",
"comments_button_answer": "Répondre",
"comments_button_newComment": "Ajouter un commentaire",
"comments_answer_delete": "cette Réponse",
"comments_comment_delete": "ce Commentaire"
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment