split date choice

This commit is contained in:
Tykayn 2021-05-17 15:25:22 +02:00 committed by tykayn
parent 5c7aac3a53
commit 003f27ae82
48 changed files with 721 additions and 507 deletions

View File

@ -60,6 +60,6 @@ build:
# artifacts: # artifacts:
# paths: # paths:
# - public # - public
# expire_in: 30 days # expire_in: 30 dateList
# only: # only:
# - master # - master

View File

@ -63,7 +63,7 @@ export class PollConfig {
owner_modifier_token = ''; // key to change a vote stack owner_modifier_token = ''; // key to change a vote stack
canModifyAnswers = true; // bool for the frontend selector canModifyAnswers = true; // bool for the frontend selector
whoCanChangeAnswers = 'everybody'; // everybody, self, nobody (= just admin) whoCanChangeAnswers = 'everybody'; // everybody, self, nobody (= just admin)
dateList: any = otherDefaultDates; // sets of days as strings, config to set identical time for days in a special days poll dateList: any = otherDefaultDates; // sets of dateList as strings, config to set identical time for dateList in a special dateList poll
timeList: DateChoice[] = otherDefaultDates; // ranges of time expressed as strings timeList: DateChoice[] = otherDefaultDates; // ranges of time expressed as strings
answers: PollAnswer[] = defaultAnswers; answers: PollAnswer[] = defaultAnswers;

View File

@ -8,7 +8,7 @@ export const mockGraphConfig = {
visibility: 'link_only', visibility: 'link_only',
// date specific poll // date specific poll
allowSeveralHours: 'true', allowSeveralHours: 'true',
dateLgfgfgfgist: ['jeudi', 'vendredi', 'samedi'], // sets of days as strings dateLgfgfgfgist: ['jeudi', 'vendredi', 'samedi'], // sets of dateList as strings
timeList: ['08:00', '08:30', '09:00'], // ranges of time expressed as strings timeList: ['08:00', '08:30', '09:00'], // ranges of time expressed as strings
answers: [ answers: [
{ {

View File

@ -95,20 +95,7 @@
</div> </div>
<div *ngIf="'false' === config.allowSeveralHours" class="identical-dates"> <div *ngIf="'false' === config.allowSeveralHours" class="identical-dates">
<div *ngFor="let time of config.timeList; index as id" class="time-choice">
<label for="timeChoices_{{ id }}">
<i class="fa fa-clock-o" aria-hidden="true"></i>
</label>
<input
[(ngModel)]="time.literal"
name="timeChoices_{{ id }}"
type="text"
id="timeChoices_{{ id }}"
/>
<button (click)="time.timeList.splice(id, 1)" class="btn btn-warning">
<i class="fa fa-times" aria-hidden="true"></i>
</button>
</div>
</div> </div>
<hr /> <hr />
<span class="count-dates title"> <span class="count-dates title">

View File

@ -30,7 +30,7 @@ export class DatesComponent extends BaseComponent implements OnInit {
} }
countDays() { countDays() {
// compute the number of days in the date interval // compute the number of dateList in the date interval
if (this.endDateInterval && this.startDateInterval) { if (this.endDateInterval && this.startDateInterval) {
this.intervalDays = this.dateUtilities.dayDiff(this.endDateInterval, this.startDateInterval).toFixed(0); this.intervalDays = this.dateUtilities.dayDiff(this.endDateInterval, this.startDateInterval).toFixed(0);
} }

View File

@ -48,7 +48,7 @@ export class ConfigService extends PollConfig {
} }
/** /**
* add some days to a date, to compute intervals * add some dateList to a date, to compute intervals
* @param days * @param days
* @param date * @param date
*/ */

View File

@ -68,7 +68,7 @@ export class Poll {
public modification_policy = 'everybody'; public modification_policy = 'everybody';
public dateChoices: DateChoice[] = []; public dateChoices: DateChoice[] = [];
// sets of days as strings, config to set identical time for days in a special days poll // sets of dateList as strings, config to set identical time for dateList in a special dateList poll
public timeSlices: TimeSlices[] = []; // ranges of time expressed as strings public timeSlices: TimeSlices[] = []; // ranges of time expressed as strings
constructor(public owner: Owner = new Owner(), public title = 'mon titre', public custom_url: string = '') {} constructor(public owner: Owner = new Owner(), public title = 'mon titre', public custom_url: string = '') {}

View File

@ -1,11 +1,12 @@
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { DateChoice } from '../../../../mocks/old-stuff/config/defaultConfigs';
@Injectable({ @Injectable({
providedIn: 'root', providedIn: 'root',
}) })
export class DateUtilitiesService { export class DateUtilitiesService {
/** /**
* add some days to a date, to compute intervals * add some dateList to a date, to compute intervals
* @param days * @param days
* @param date * @param date
*/ */
@ -27,7 +28,7 @@ export class DateUtilitiesService {
const dates = []; const dates = [];
while (+d1 < +d2) { while (+d1 < +d2) {
dates.push({ dates.push({
literal: this.formateDate(d1), literal: this.formateDateToInputStringNg(d1),
date_object: d1, date_object: d1,
}); });
d1.setDate(d1.getDate() + interval); d1.setDate(d1.getDate() + interval);
@ -36,7 +37,7 @@ export class DateUtilitiesService {
} }
/** /**
* get the number of days between two dates * get the number of dateList between two dates
* @param d1 * @param d1
* @param d2 * @param d2
*/ */
@ -50,7 +51,7 @@ export class DateUtilitiesService {
* YYYY-MM-DD * YYYY-MM-DD
* @param date * @param date
*/ */
formateDate(date) { formateDateToInputStringNg(date: Date): string {
return [ return [
date.getFullYear(), date.getFullYear(),
this.getDoubleDigits(date.getMonth() + 1), this.getDoubleDigits(date.getMonth() + 1),
@ -58,24 +59,69 @@ export class DateUtilitiesService {
].join('-'); ].join('-');
} }
parseInputDateToDateObject(inputDateString: string) { /**
const boom = inputDateString.split('-'); * transform a date object to a short date string
* @param inputDate
*/
parseInputDateToDateObject(inputDate: Date): Date {
const boom = inputDate.toISOString().substring(0, 10).split('-');
const converted = new Date(boom['0'], boom['1'] - 1, boom['2']); const converted = new Date(boom['0'], boom['1'] - 1, boom['2']);
console.log('converted', converted); console.log('converted', converted);
return converted; return converted;
} }
/**
* get double in string
* @param str
*/
getDoubleDigits(str) { getDoubleDigits(str) {
return ('00' + str).slice(-2); return ('00' + str).slice(-2);
} }
/**
* compute the number of dateList in the date interval
* @param startDateInterval
* @param endDateInterval
*/
countDays(startDateInterval: Date, endDateInterval: Date): number { countDays(startDateInterval: Date, endDateInterval: Date): number {
// compute the number of days in the date interval
if (endDateInterval && startDateInterval) { if (endDateInterval && startDateInterval) {
return this.dayDiff(endDateInterval, startDateInterval); return this.dayDiff(endDateInterval, startDateInterval);
} }
return 0; return 0;
} }
/**
* fill default dates for today + the next 3 dateList
*/
makeDefaultDateChoices(): DateChoice[] {
const today = new Date();
const ladate = this.addDaysToDate(1, today);
const ladate2 = this.addDaysToDate(2, today);
const ladate3 = this.addDaysToDate(3, today);
const ladate4 = this.addDaysToDate(4, today);
return [
{
literal: this.formateDateToInputStringNg(ladate),
timeList: [],
date_object: ladate,
},
{
literal: this.formateDateToInputStringNg(ladate2),
timeList: [],
date_object: ladate2,
},
{
literal: this.formateDateToInputStringNg(ladate3),
timeList: [],
date_object: ladate3,
},
{
literal: this.formateDateToInputStringNg(ladate4),
timeList: [],
date_object: ladate4,
},
];
}
} }

View File

@ -212,6 +212,8 @@ export class PollService implements Resolve<Poll> {
newpoll.password = form.value.password; newpoll.password = form.value.password;
newpoll.kind = form.value.kind; newpoll.kind = form.value.kind;
newpoll.allow_comments = form.value.allowComments; newpoll.allow_comments = form.value.allowComments;
// merge choices from storage
newpoll.choices = this.storageService.choices;
newpoll.dateChoices = this.storageService.dateList; newpoll.dateChoices = this.storageService.dateList;
newpoll.timeSlices = this.storageService.timeSlices; newpoll.timeSlices = this.storageService.timeSlices;

View File

@ -16,6 +16,7 @@ import {
} from '../../../../mocks/old-stuff/config/defaultConfigs'; } from '../../../../mocks/old-stuff/config/defaultConfigs';
import { Poll } from '../models/poll.model'; import { Poll } from '../models/poll.model';
import { Owner } from '../models/owner.model'; import { Owner } from '../models/owner.model';
import { DateUtilitiesService } from './date.utilities.service';
@Injectable({ @Injectable({
providedIn: 'root', providedIn: 'root',
@ -31,7 +32,7 @@ export class StorageService {
public userPolls: Poll[] = []; public userPolls: Poll[] = [];
@LocalStorage() @LocalStorage()
public dateList: DateChoice[] = otherDefaultDates; public dateList: DateChoice[] = [];
@LocalStorage() @LocalStorage()
public timeSlices: TimeSlices[]; public timeSlices: TimeSlices[];
@ -39,15 +40,19 @@ export class StorageService {
@LocalStorage() @LocalStorage()
public vote_stack: Stack = new Stack(); public vote_stack: Stack = new Stack();
constructor() { @LocalStorage()
public choices: Choice[];
constructor(public dateUtilities: DateUtilitiesService) {
if (environment.autofill) { if (environment.autofill) {
this.userPolls.push(new Poll(new Owner(), 'Démo: Anniversaire de tonton Patrick', 'aujourdhui-ou-demain')); this.userPolls.push(new Poll(new Owner(), 'Démo: Anniversaire de tonton Patrick', 'aujourdhui-ou-demain'));
this.userPolls.push(new Poll(new Owner(), 'Démo: Atelier cuisine du quartier', 'aujourdhui-ou-demain')); this.userPolls.push(new Poll(new Owner(), 'Démo: Atelier cuisine du quartier', 'aujourdhui-ou-demain'));
this.userPolls.push( this.userPolls.push(
new Poll(new Owner(), 'Démo: Réunion du département des chatons', 'aujourdhui-ou-demain') new Poll(new Owner(), 'Démo: Réunion du département des chatons', 'aujourdhui-ou-demain')
); );
// this.timeSlices = basicSlicesOfDay;
} }
this.dateList = this.dateUtilities.makeDefaultDateChoices();
} }
setChoicesForVoteStack(choices_list: Choice[]) { setChoicesForVoteStack(choices_list: Choice[]) {

View File

@ -19,6 +19,10 @@ import { AdvancedConfigComponent } from './form/advanced-config/advanced-config.
import { CalendarModule } from 'primeng'; import { CalendarModule } from 'primeng';
import { DragDropModule } from '@angular/cdk/drag-drop'; import { DragDropModule } from '@angular/cdk/drag-drop';
import { AppModule } from '../../app.module'; import { AppModule } from '../../app.module';
import { IntervalComponent } from './form/date/interval/interval.component';
import { DayListComponent } from './form/date/list/day/day-list.component';
import { PickerComponent } from './form/date/picker/picker.component';
import { TimeListComponent } from './form/date/list/time/time-list.component';
@NgModule({ @NgModule({
declarations: [ declarations: [
@ -32,6 +36,10 @@ import { AppModule } from '../../app.module';
KindSelectComponent, KindSelectComponent,
BaseConfigComponent, BaseConfigComponent,
AdvancedConfigComponent, AdvancedConfigComponent,
IntervalComponent,
DayListComponent,
PickerComponent,
TimeListComponent,
], ],
imports: [ imports: [
CalendarModule, CalendarModule,

View File

@ -6,46 +6,11 @@
{{ 'dates.add' | translate }} {{ 'dates.add' | translate }}
<!-- interval--> <!-- interval-->
<button <!-- <app-date-interval></app-date-interval>-->
(click)="showDateInterval = !showDateInterval"
[ngClass]="{ active: showDateInterval }"
class="btn btn--primary"
id="toggle_interval_button"
>
<i class="fa fa-clock-o" aria-hidden="true"></i>
<span>
{{ 'dates.add_interval' | translate }}
</span>
</button>
<fieldset *ngIf="showDateInterval" class="date-interval form-row is-boxed">
<h2>{{ 'dates.add_interval' | translate }}</h2>
<div class="columns">
<div class="column">
{{ 'dates.interval_propose' | translate }}
</div>
<div class="column">
<label for="start_interval" class="hidden">start</label>
<input id="start_interval" (change)="countDays()" formControlName="startDateInterval" type="date" />
</div>
</div>
<div class="columns">
<div class="column">
{{ 'dates.interval_span' | translate }}
</div>
<div class="column">
<label for="end_interval" class="hidden">end</label>
<input id="end_interval" formControlName="endDateInterval" type="date" />
</div>
</div>
<button (click)="addIntervalOfDates()" class="btn btn-block btn--primary">
<i class="fa fa-plus" aria-hidden="true"></i>
{{ 'dates.interval_button' | translate }}
{{ intervalDays }}
{{ 'dates.interval_button_dates' | translate }}
</button>
</fieldset>
</form> </form>
<div class="dates-list"> <div class="dates-list">
<!-- différentes horaires-->
<div class="different-hours" *ngIf="displaySeveralHoursChoice">
<button <button
class="btn" class="btn"
[class.is-primary]="form.value.hasSeveralHours" [class.is-primary]="form.value.hasSeveralHours"
@ -64,7 +29,6 @@
Tous les jours auront les mêmes plages de temps Tous les jours auront les mêmes plages de temps
</span> </span>
</div> </div>
<fieldset class="range-container is-boxed">
<div class="actions columns"> <div class="actions columns">
<div class="column"></div> <div class="column"></div>
<div class="column has-text-right"> <div class="column has-text-right">
@ -102,8 +66,7 @@
</span> </span>
</button> </button>
</div> </div>
</div> <fieldset class="range-container is-boxed">
<div class="range-time" *ngIf="!form.value.hasSeveralHours"> <div class="range-time" *ngIf="!form.value.hasSeveralHours">
<h2> <h2>
<span class="count-dates-txt"> <span class="count-dates-txt">
@ -122,36 +85,10 @@
<i class="fa fa-refresh"></i> <i class="fa fa-refresh"></i>
</button> </button>
</div> </div>
<div class="identical-dates" cdkDropListGroup>
<div
class="time-list"
cdkDropList
[cdkDropListData]="timeList"
(cdkDropListDropped)="dropTimeItem($event)"
>
<div *ngFor="let time of timeList; index as time_id" class="time-choice movable" cdkDrag>
<div class="columns">
<div class="column">
<label class="button pull-left" [for]="'timeChoices_' + time_id">
<i class="icon fa fa-arrows-v" aria-hidden="true"></i>
</label>
<input
class="pull-left"
[(ngModel)]="time.literal"
name="timeChoices_{{ time_id }}"
type="text"
id="timeChoices_{{ time_id }}"
/>
<button (click)="timeList.splice(time_id, 1)" class="button is-warning">
<i class="fa fa-times" aria-hidden="true"></i>
</button>
</div>
</div>
</div>
</div>
</div>
</div> </div>
</fieldset> </fieldset>
</div>
</div>
<hr /> <hr />
<div class="main-box is-boxed"> <div class="main-box is-boxed">
@ -172,80 +109,7 @@
</div> </div>
</div> </div>
<div <app-day-list [dateList]="dateList" [hasSeveralHours]="form.value.hasSeveralHours"></app-day-list>
class="columns days-list"
cdkDropList
[cdkDropListData]="dateList"
(cdkDropListDropped)="dropDayItem($event)"
>
<div class="column">
<!-- TODO lier au formulaire les valeurs des dates-->
<h2>Dates</h2>
<div *ngFor="let choice of dateList; index as id" class="date-choice" cdkDrag>
<input
[(ngModel)]="choice.date_object"
name="dateChoices_{{ id }}"
id="dateChoices_{{ id }}"
useValueAsDate
type="date"
/>
<button (click)="dateList.splice(id, 1)" class="btn btn-warning">
<i class="fa fa-times" aria-hidden="true"></i>
</button>
<button
(click)="addTimeToDate(choice, id)"
*ngIf="form.value.hasSeveralHours"
class="btn btn--primary"
>
{{ 'dates.add_time' | translate }}
</button>
<div *ngIf="form.value.hasSeveralHours" class="several-times">
plage horaire distincte
<br />
<div *ngFor="let timeItem of choice.timeList; index as idTime" class="time-choice">
<input
[(ngModel)]="timeItem.literal"
name="dateTime_{{ id }}_Choices_{{ idTime }}"
id="dateTime_{{ id }}_Choices_{{ idTime }}"
type="text"
/>
<button (click)="choice.timeList.splice(idTime, 1)" class="btn btn-warning">
<i class="fa fa-times" aria-hidden="true"></i>
</button>
</div>
</div>
</div>
</div>
<!-- date picker calendrier-->
<!-- <div class="column calendar-column">-->
<!-- <button class="btn" (click)="selectionKind = 'range'" [class.is-primary]="selectionKind == 'range'">-->
<!-- plage de jours-->
<!-- </button>-->
<!-- <button-->
<!-- class="btn"-->
<!-- (click)="selectionKind = 'multiple'"-->
<!-- [class.is-primary]="selectionKind == 'multiple'"-->
<!-- >-->
<!-- jours séparés-->
<!-- </button>-->
<!-- <button class="btn" (click)="setDefaultDatesForInterval()">-->
<!-- réinitialiser</button-->
<!-- ><button class="btn" (click)="dateCalendarEnum = [today]">-->
<!-- vider-->
<!-- </button>-->
<!-- <div class="text-center">-->
<!-- <br />-->
<!-- <p-calendar-->
<!-- [(ngModel)]="dateCalendarEnum"-->
<!-- [locale]="'calendar_widget' | translate"-->
<!-- [inline]="true"-->
<!-- [monthNavigator]="true"-->
<!-- [selectionMode]="selectionKind"-->
<!-- ></p-calendar>-->
<!-- </div>-->
<!-- </div>-->
</div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -24,18 +24,17 @@ import { StorageService } from '../../../../core/services/storage.service';
}) })
export class DateSelectComponent implements OnInit { export class DateSelectComponent implements OnInit {
@Input() @Input()
public form: FormGroup; form: FormGroup;
public showDateInterval = false; displaySeveralHoursChoice = false;
public allowSeveralHours = false; allowSeveralHours = false;
today = new Date(); today = new Date();
startDateInterval: string;
endDateInterval: string; endDateInterval: string;
intervalDays: any;
intervalDaysDefault = 7; intervalDaysDefault = 7;
dateList: DateChoice[]; // sets of days as strings, config to set identical time for days in a special days poll dateList: DateChoice[]; // sets of dateList as strings, config to set identical time for dateList in a special dateList poll
timeList: TimeSlices[]; // ranges of time expressed as strings timeList: TimeSlices[]; // ranges of time expressed as strings
dateCalendarEnum: Date[] = [new Date('02/09/2021')];
selectionKind = 'range'; selectionKind = 'range';
constructor( constructor(
@ -44,7 +43,6 @@ export class DateSelectComponent implements OnInit {
private uuidService: UuidService, private uuidService: UuidService,
private toastService: ToastService, private toastService: ToastService,
private pollService: PollService, private pollService: PollService,
public dateUtilities: DateUtilitiesService,
private apiService: ApiService, private apiService: ApiService,
private storageService: StorageService, private storageService: StorageService,
private router: Router, private router: Router,
@ -63,72 +61,7 @@ export class DateSelectComponent implements OnInit {
return this.form.get('dateChoices') as FormArray; return this.form.get('dateChoices') as FormArray;
} }
ngOnInit(): void { ngOnInit(): void {}
// this.setDefaultDatesForInterval();
}
/**
* default interval of dates proposed is from today to 7 days more
*/
setDefaultDatesForInterval(): void {
const dateCurrent = new Date();
const dateJson = dateCurrent.toISOString();
this.startDateInterval = dateJson.substring(0, 10);
this.endDateInterval = this.dateUtilities
.addDaysToDate(this.intervalDaysDefault, dateCurrent)
.toISOString()
.substring(0, 10);
this.form.patchValue({
startDateInterval: this.startDateInterval,
endDateInterval: this.endDateInterval,
});
this.dateCalendarEnum = [dateCurrent, this.dateUtilities.addDaysToDate(this.intervalDaysDefault, dateCurrent)];
this.countDays();
}
countDays(): void {
this.intervalDays = this.dateUtilities.countDays(
this.dateUtilities.parseInputDateToDateObject(this.startDateInterval),
this.dateUtilities.parseInputDateToDateObject(this.endDateInterval)
);
// this.cd.detectChanges();
}
/**
* add all the dates between the start and end dates in the interval section
*/
addIntervalOfDates(): void {
const newIntervalArray = this.dateUtilities.getDatesInRange(
this.dateUtilities.parseInputDateToDateObject(this.startDateInterval),
this.dateUtilities.parseInputDateToDateObject(this.endDateInterval),
1
);
const converted = [];
newIntervalArray.forEach((element) => {
converted.push({
literal: element.literal,
date_object: element.date_object,
timeList: [],
});
});
this.dateList = [...new Set(converted)];
// add only dates that are not already present with a Set of unique items
console.log('this.dateList', this.dateList);
this.showDateInterval = false;
this.form.patchValue({ choices: this.dateList });
// this.dateList.forEach(elem=>{
// const newControlGroup = this.fb.group({
// label: this.fb.control('', [Validators.required]),
// url: ['', [Validators.required]],
// });
//
// this.choices.push(newControlGroup);
// })
this.toastService.display(`les dates ont été ajoutées aux réponses possibles.`);
}
/** /**
* change time spans * change time spans
@ -141,33 +74,25 @@ export class DateSelectComponent implements OnInit {
removeAllTimes() { removeAllTimes() {
this.timeList = []; this.timeList = [];
this.dateList.map((elem) => (elem.timeList = []));
this.toastService.display('périodes horaires vidées'); this.toastService.display('périodes horaires vidées');
} }
resetTimes() { resetTimes() {
this.timeList = defaultTimeOfDay; this.timeList = defaultTimeOfDay;
this.dateList.map((elem) => (elem.timeList = Object.create(defaultTimeOfDay)));
this.toastService.display('périodes horaires réinitialisées'); this.toastService.display('périodes horaires réinitialisées');
} }
/**
* add a time period to a specific date choice,
* focus on the new input
* @param config
* @param id
*/
addTimeToDate(config: any, id: number) {
this.timeList.push({
literal: '',
});
const selector = '[ng-reflect-choice_label="dateTime_' + id + '_Choices_' + (this.timeList.length - 1) + '"]';
// this.cd.detectChanges();
const elem = this.document.querySelector(selector);
if (elem) {
elem.focus();
}
}
addChoice(optionalLabel = ''): void { addChoice(optionalLabel = ''): void {
if (this.form.value.kind == 'date') {
this.storageService.dateList.push({
literal: '',
timeList: [],
date_object: new Date(),
});
} else {
const newControlGroup = this.fb.group({ const newControlGroup = this.fb.group({
label: this.fb.control('', [Validators.required]), label: this.fb.control('', [Validators.required]),
imageUrl: ['', [Validators.required]], imageUrl: ['', [Validators.required]],
@ -179,11 +104,13 @@ export class DateSelectComponent implements OnInit {
imageUrl: 'mon url', imageUrl: 'mon url',
}); });
} }
this.dateChoices.push(newControlGroup);
// this.cd.detectChanges();
console.log('this.choices.length', this.choices.length);
this.focusOnChoice(this.choices.length - 1); this.dateChoices.push(newControlGroup);
}
// this.cd.detectChanges();
console.log('this.choices.length', this.storageService.dateList.length);
this.focusOnChoice(this.storageService.dateList.length - 1);
} }
focusOnChoice(index): void { focusOnChoice(index): void {
@ -204,82 +131,9 @@ export class DateSelectComponent implements OnInit {
this.choices.setValue([]); this.choices.setValue([]);
} }
/**
* handle keyboard shortcuts
* @param $event
* @param choice_number
*/
keyOnChoice($event: KeyboardEvent, choice_number: number): void {
$event.preventDefault();
console.log('this.choices.length', this.choices.length);
console.log('choice_number', choice_number);
const lastChoice = this.choices.length - 1 === choice_number;
// TODO handle shortcuts
// reset field with Ctrl + D
// add a field with Ctrl + N
// go to previous choice with arrow up
// go to next choice with arrow down
console.log('$event', $event);
if ($event.key == 'ArrowUp' && choice_number > 0) {
this.focusOnChoice(choice_number - 1);
}
if ($event.key == 'ArrowDown') {
// add a field if we are on the last choice
if (lastChoice) {
this.addChoice();
this.toastService.display('choix ajouté par raccourci "flèche bas"');
} else {
this.focusOnChoice(choice_number + 1);
}
}
if ($event.ctrlKey && $event.key == 'Backspace') {
this.deleteChoiceField(choice_number);
this.toastService.display('choix supprimé par raccourci "Ctrl + retour"');
// this.cd.detectChanges();
this.focusOnChoice(Math.min(choice_number - 1, 0));
}
if ($event.ctrlKey && $event.key == 'Enter') {
// go to other fields
const elem = this.document.querySelector('#creatorEmail');
if (elem) {
elem.focus();
}
}
}
setDemoValues(): void { setDemoValues(): void {
this.addChoice('orange'); this.addChoice('orange');
this.addChoice('raisin'); this.addChoice('raisin');
this.addChoice('abricot'); this.addChoice('abricot');
} }
dropTimeItem(event: any): void {
// moveItemInArray(this.timeSlices, event.previousIndex, event.currentIndex);
if (event.previousContainer === event.container) {
moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);
} else {
transferArrayItem(
event.previousContainer.data,
event.container.data,
event.previousIndex,
event.currentIndex
);
}
}
dropDayItem(event: any): void {
// moveItemInArray(this.timeSlices, event.previousIndex, event.currentIndex);
if (event.previousContainer === event.container) {
moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);
} else {
transferArrayItem(
event.previousContainer.data,
event.container.data,
event.previousIndex,
event.currentIndex
);
}
}
} }

View File

@ -0,0 +1,43 @@
<div class="interval" [formGroup]="form">
<button
(click)="showDateInterval = !showDateInterval"
[ngClass]="{ active: showDateInterval }"
class="btn btn--primary"
id="toggle_interval_button"
>
<i class="fa fa-clock-o" aria-hidden="true"></i>
<span>
{{ 'dates.add_interval' | translate }}
</span>
</button>
<fieldset *ngIf="showDateInterval" class="date-interval form-row is-boxed">
<div class="columns">
<div class="column">
{{ 'dates.interval_propose' | translate }}
</div>
<div class="column">
<label for="start_interval" class="hidden">start</label>
<input id="start_interval" (change)="countDays()" formControlName="startDateInterval" type="date" />
</div>
</div>
<div class="columns">
<div class="column">
{{ 'dates.interval_span' | translate }}
</div>
<div class="column">
<label for="end_interval" class="hidden">end</label>
<input id="end_interval" formControlName="endDateInterval" type="date" />
<div class="well">
{{ form.value.endDateInterval }}
</div>
</div>
</div>
<div class="span resume">soit {{ intervalDays }} jours.</div>
<button (click)="addIntervalOfDates()" class="btn btn-block btn--primary">
<i class="fa fa-plus" aria-hidden="true"></i>
{{ 'dates.interval_button' | translate }}
{{ intervalDays }}
{{ 'dates.interval_button_dates' | translate }}
</button>
</fieldset>
</div>

View File

@ -0,0 +1,24 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { IntervalComponent } from './interval.component';
describe('IntervalComponent', () => {
let component: IntervalComponent;
let fixture: ComponentFixture<IntervalComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [IntervalComponent],
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(IntervalComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,93 @@
import { Component, Input, OnInit } from '@angular/core';
import { environment } from '../../../../../../environments/environment';
import { DateUtilitiesService } from '../../../../../core/services/date.utilities.service';
import { FormArray, FormGroup } from '@angular/forms';
import { ToastService } from '../../../../../core/services/toast.service';
import { DateChoice } from '../../../../../../../mocks/old-stuff/config/defaultConfigs';
@Component({
selector: 'app-date-interval',
templateUrl: './interval.component.html',
styleUrls: ['./interval.component.scss'],
})
export class IntervalComponent implements OnInit {
@Input()
public form: FormGroup;
showDateInterval = true;
intervalDays: any;
intervalDaysDefault = environment.interval_days_default;
startDateInterval: Date;
startDateIntervalString: string;
endDateInterval: Date;
endDateIntervalString: string;
dateList: DateChoice[]; // sets of dateList as strings, config to set identical time for dateList in a special dateList poll
dateCalendarEnum: Date[] = [new Date('02/09/2021')];
constructor(public dateUtilities: DateUtilitiesService, private toastService: ToastService) {}
ngOnInit(): void {
this.setDefaultDatesForInterval();
}
countDays(): void {
this.intervalDays = this.dateUtilities.countDays(
this.dateUtilities.parseInputDateToDateObject(this.startDateInterval),
this.dateUtilities.parseInputDateToDateObject(this.endDateInterval)
);
// this.cd.detectChanges();
}
/**
* add all the dates between the start and end dates in the interval section
*/
addIntervalOfDates(): void {
const newIntervalArray = this.dateUtilities.getDatesInRange(
this.dateUtilities.parseInputDateToDateObject(this.startDateInterval),
this.dateUtilities.parseInputDateToDateObject(this.endDateInterval),
1
);
const converted = [];
newIntervalArray.forEach((element) => {
converted.push({
literal: element.literal,
date_object: element.date_object,
timeList: [],
});
});
this.dateList = [...new Set(converted)];
// add only dates that are not already present with a Set of unique items
console.log('this.dateList', this.dateList);
this.showDateInterval = false;
this.form.patchValue({ choices: this.dateList });
this.toastService.display(`les dates ont été ajoutées aux réponses possibles.`);
}
get dateChoices() {
return this.form.get('dateChoices') as FormArray;
}
/**
* default interval of dates proposed is from today to 7 dateList more
*/
setDefaultDatesForInterval(): void {
if (this.form) {
const dateCurrent = new Date();
// const dateJson = dateCurrent.toISOString();
this.startDateInterval = dateCurrent;
this.endDateInterval = this.dateUtilities.addDaysToDate(this.intervalDaysDefault, dateCurrent);
this.form.patchValue({
startDateInterval: this.startDateInterval,
endDateInterval: this.endDateInterval,
});
this.dateCalendarEnum = [
dateCurrent,
this.dateUtilities.addDaysToDate(this.intervalDaysDefault, dateCurrent),
];
this.countDays();
}
}
}

View File

@ -0,0 +1,36 @@
<div class="columns days-list" cdkDropList [cdkDropListData]="dateList" (cdkDropListDropped)="dropDayItem($event)">
<div class="column">
<!-- TODO lier au formulaire les valeurs des dates-->
<h2>Dates</h2>
<div *ngFor="let choice of dateList; index as id" class="date-choice" cdkDrag>
<input
[(ngModel)]="choice.date_object"
name="dateChoices_{{ id }}"
id="dateChoices_{{ id }}"
useValueAsDate
type="date"
/>
<button (click)="dateList.splice(id, 1)" class="btn btn-warning">
<i class="fa fa-times" aria-hidden="true"></i>
</button>
<button (click)="addTimeToDate(choice, id)" *ngIf="hasSeveralHours" class="btn btn--primary">
{{ 'dates.add_time' | translate }}
</button>
<div *ngIf="hasSeveralHours" class="several-times">
plage horaire distincte
<br />
<div *ngFor="let timeItem of choice.timeList; index as idTime" class="time-choice">
<input
[(ngModel)]="timeItem.literal"
name="dateTime_{{ id }}_Choices_{{ idTime }}"
id="dateTime_{{ id }}_Choices_{{ idTime }}"
type="text"
/>
<button (click)="choice.timeList.splice(idTime, 1)" class="btn btn-warning">
<i class="fa fa-times" aria-hidden="true"></i>
</button>
</div>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,24 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { DayListComponent } from './day-list.component';
describe('ListComponent', () => {
let component: DayListComponent;
let fixture: ComponentFixture<DayListComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [DayListComponent],
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(DayListComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,110 @@
import { Component, Inject, Input, OnInit } from '@angular/core';
import { CdkDragDrop, moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';
import { DateChoice } from '../../../../../../../../mocks/old-stuff/config/defaultConfigs';
import { DOCUMENT } from '@angular/common';
@Component({
selector: 'app-day-list',
templateUrl: './day-list.component.html',
styleUrls: ['./day-list.component.scss'],
})
export class DayListComponent implements OnInit {
@Input()
public dateList: DateChoice[] = [];
@Input()
public hasSeveralHours: boolean;
timeList: any;
constructor(@Inject(DOCUMENT) private document: any) {}
ngOnInit(): void {}
dropTimeItem(event: any): void {
// moveItemInArray(this.timeSlices, event.previousIndex, event.currentIndex);
if (event.previousContainer === event.container) {
moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);
} else {
transferArrayItem(
event.previousContainer.data,
event.container.data,
event.previousIndex,
event.currentIndex
);
}
}
dropDayItem(event: any): void {
// moveItemInArray(this.timeSlices, event.previousIndex, event.currentIndex);
if (event.previousContainer === event.container) {
moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);
} else {
transferArrayItem(
event.previousContainer.data,
event.container.data,
event.previousIndex,
event.currentIndex
);
}
}
/**
* add a time period to a specific date choice,
* focus on the new input
* @param config
* @param id
*/
addTimeToDate(config: any, id: number) {
this.timeList.push({
literal: '',
});
const selector = '[ng-reflect-choice_label="dateTime_' + id + '_Choices_' + (this.timeList.length - 1) + '"]';
// this.cd.detectChanges();
const elem = this.document.querySelector(selector);
if (elem) {
elem.focus();
}
}
/**
* handle keyboard shortcuts
* @param $event
* @param choice_number
*/
keyOnChoice($event: KeyboardEvent, choice_number: number): void {
$event.preventDefault();
console.log('this.choices.length', this.choices.length);
console.log('choice_number', choice_number);
const lastChoice = this.choices.length - 1 === choice_number;
// TODO handle shortcuts
// reset field with Ctrl + D
// add a field with Ctrl + N
// go to previous choice with arrow up
// go to next choice with arrow down
console.log('$event', $event);
if ($event.key == 'ArrowUp' && choice_number > 0) {
this.focusOnChoice(choice_number - 1);
}
if ($event.key == 'ArrowDown') {
// add a field if we are on the last choice
if (lastChoice) {
this.addChoice();
this.toastService.display('choix ajouté par raccourci "flèche bas"');
} else {
this.focusOnChoice(choice_number + 1);
}
}
if ($event.ctrlKey && $event.key == 'Backspace') {
this.deleteChoiceField(choice_number);
this.toastService.display('choix supprimé par raccourci "Ctrl + retour"');
// this.cd.detectChanges();
this.focusOnChoice(Math.min(choice_number - 1, 0));
}
if ($event.ctrlKey && $event.key == 'Enter') {
// go to other fields
const elem = this.document.querySelector('#creatorEmail');
if (elem) {
elem.focus();
}
}
}
}

View File

@ -0,0 +1,10 @@
<p>time-list works!</p>
<div *ngFor="let time of timeList; index as id" class="time-choice">
<label for="timeChoices_{{ id }}">
<i class="fa fa-clock-o" aria-hidden="true"></i>
</label>
<input [(ngModel)]="time.literal" name="timeChoices_{{ id }}" type="text" id="timeChoices_{{ id }}" />
<button (click)="time.timeList.splice(id, 1)" class="btn btn-warning">
<i class="fa fa-times" aria-hidden="true"></i>
</button>
</div>

View File

@ -0,0 +1,24 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TimeListComponent } from './time-list.component';
describe('TimeListComponent', () => {
let component: TimeListComponent;
let fixture: ComponentFixture<TimeListComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [TimeListComponent],
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(TimeListComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,16 @@
import { Component, Input, OnInit } from '@angular/core';
import { TimeSlices } from '../../../../../../../../mocks/old-stuff/config/defaultConfigs';
@Component({
selector: 'app-time-list',
templateUrl: './time-list.component.html',
styleUrls: ['./time-list.component.scss'],
})
export class TimeListComponent implements OnInit {
@Input()
public timeSlices: TimeSlices[];
timeList: any;
constructor() {}
ngOnInit(): void {}
}

View File

@ -0,0 +1,28 @@
<!-- date picker calendrier-->
<div class="picker" [formGroup]="form">
<div class="column calendar-column">
<button class="btn" (click)="selectionKind = 'range'" [class.is-primary]="selectionKind == 'range'">
plage de jours
</button>
<button class="btn" (click)="selectionKind = 'multiple'" [class.is-primary]="selectionKind == 'multiple'">
jours séparés
</button>
<button class="btn" (click)="setDefaultDatesForInterval()">
réinitialiser
</button>
<button class="btn" (click)="dateCalendarEnum = [today]">
vider
</button>
<div class="text-center">
<br />
<p-calendar
[(ngModel)]="dateCalendarEnum"
[locale]="'calendar_widget' | translate"
[inline]="true"
[monthNavigator]="true"
[selectionMode]="selectionKind"
></p-calendar>
</div>
</div>
</div>

View File

@ -0,0 +1,24 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { PickerComponent } from './picker.component';
describe('PickerComponent', () => {
let component: PickerComponent;
let fixture: ComponentFixture<PickerComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [PickerComponent],
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(PickerComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,21 @@
import { Component, Input, OnInit } from '@angular/core';
import { FormGroup } from '@angular/forms';
@Component({
selector: 'app-picker',
templateUrl: './picker.component.html',
styleUrls: ['./picker.component.scss'],
})
export class PickerComponent implements OnInit {
@Input()
public form: FormGroup;
selectionKind = 'multiple';
dateCalendarEnum: any[];
today: Date = new Date();
constructor() {}
ngOnInit(): void {}
setDefaultDatesForInterval() {}
}

View File

@ -1,7 +1,6 @@
<div class="admin-form padded"> <div class="admin-form padded">
<div class="container is-max-widescreen"> <div class="container is-max-widescreen">
<form [formGroup]="form"> <form [formGroup]="form">
<app-errors-list [form]="form"></app-errors-list>
<header class="columns"> <header class="columns">
<div class="column"> <div class="column">
<h1 class="title is-2"> <h1 class="title is-2">
@ -40,27 +39,28 @@
*ngIf="advancedDisplayEnabled" *ngIf="advancedDisplayEnabled"
></app-advanced-config> ></app-advanced-config>
<div class="bar-nav-admin"> <!-- <div class="bar-nav-admin">-->
<div class="columns"> <!-- <div class="columns">-->
<div class="column"> <!-- <div class="column">-->
<p class="control"> <!-- <p class="control">-->
<a class="button is-light" (click)="goPreviousStep()"> <!-- <a class="button is-light" (click)="goPreviousStep()">-->
Précédent <!-- Précédent-->
</a> <!-- </a>-->
</p> <!-- </p>-->
</div> <!-- </div>-->
<div class="column"> <!-- <div class="column">-->
<p class="control text-right"> <!-- <p class="control text-right">-->
<a class="button is-primary" (click)="goNextStep()"> <!-- <a class="button is-primary" (click)="goNextStep()">-->
Suivant <!-- Suivant-->
</a> <!-- </a>-->
</p> <!-- </p>-->
</div> <!-- </div>-->
</div> <!-- </div>-->
</div> <!-- </div>-->
</div> </div>
</main> </main>
<app-picker [form]="form" *ngIf="displayDatePicker"></app-picker>
<app-errors-list [form]="form"></app-errors-list>
<p> <p>
<i> <i>
{{ 'choices.helper' | translate }} {{ 'choices.helper' | translate }}
@ -108,6 +108,4 @@
</div> </div>
</form> </form>
</div> </div>
<!-- <app-success [poll]="poll"></app-success>-->
</div> </div>

View File

@ -9,7 +9,6 @@ import { Router } from '@angular/router';
import { environment } from '../../../../environments/environment'; import { environment } from '../../../../environments/environment';
import { PollUtilitiesService } from '../../../core/services/poll.utilities.service'; import { PollUtilitiesService } from '../../../core/services/poll.utilities.service';
import { StorageService } from '../../../core/services/storage.service'; import { StorageService } from '../../../core/services/storage.service';
import { defaultDates, defaultTimeOfDay } from '../../../../../mocks/old-stuff/config/defaultConfigs';
@Component({ @Component({
selector: 'app-admin-form', selector: 'app-admin-form',
@ -21,7 +20,8 @@ export class FormComponent implements OnInit {
public poll?: Poll; public poll?: Poll;
public form: FormGroup; public form: FormGroup;
public advancedDisplayEnabled = true; public displayDatePicker = false;
public advancedDisplayEnabled = false;
public show_debug_data = false; public show_debug_data = false;
public currentStep = 'base'; public currentStep = 'base';
public steps = ['base', 'choices', 'advanced']; public steps = ['base', 'choices', 'advanced'];

View File

@ -17,7 +17,6 @@ export class LanguageSelectorComponent implements OnInit {
ngOnInit(): void { ngOnInit(): void {
this.availableLanguages = this.languageService.getAvailableLanguages(); this.availableLanguages = this.languageService.getAvailableLanguages();
console.log('this.availableLanguages', this.availableLanguages);
this.currentLang = this.languageService.getLangage(); this.currentLang = this.languageService.getLangage();
this.nextLang(); this.nextLang();
@ -29,10 +28,6 @@ export class LanguageSelectorComponent implements OnInit {
nextLang(): void { nextLang(): void {
console.log('this.currentLang ', this.currentLang); console.log('this.currentLang ', this.currentLang);
console.log('this.storageService.language ', this.storageService.language);
console.log("this.availableLanguages['FR']", this.availableLanguages['FR']);
console.log('this.availableLanguages', this.availableLanguages);
console.log('TODO'); console.log('TODO');
} }
} }

View File

@ -82,7 +82,7 @@ msgstr ""
#: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days #: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days
#: +it+is+developed+by+the+Framasoft+association. #: +it+is+developed+by+the+Framasoft+association.
msgid "" msgid ""
"software developed by the University of Strasbourg. These days, it is " "software developed by the University of Strasbourg. These dateList, it is "
"developed by the Framasoft association." "developed by the Framasoft association."
msgstr "" msgstr ""
"eo diazezet Framadate. Ur meziant diorroet gant Skol-Veur Straßburg an hini " "eo diazezet Framadate. Ur meziant diorroet gant Skol-Veur Straßburg an hini "
@ -916,7 +916,7 @@ msgid "Your name"
msgstr "Hoc'h anv" msgstr "Hoc'h anv"
#: .Generic.days #: .Generic.days
msgid "days" msgid "dateList"
msgstr "a zevezhioù" msgstr "a zevezhioù"
#: .Generic.for #: .Generic.for
@ -1632,7 +1632,7 @@ msgid "Remove a time slot"
msgstr "Dileml an eur diwezhañ" msgstr "Dileml an eur diwezhañ"
#: .Step+2+date.Remove+all+days #: .Step+2+date.Remove+all+days
msgid "Remove all days" msgid "Remove all dateList"
msgstr "Dilemel an holl zevezhioù" msgstr "Dilemel an holl zevezhioù"
#: .Step+2+date.Remove+all+times #: .Step+2+date.Remove+all+times
@ -1647,13 +1647,13 @@ msgstr "Dilemel an devezh-mañ"
#: +two+time+slots+on+one+day+or+two+days). #: +two+time+slots+on+one+day+or+two+days).
msgid "" msgid ""
"To schedule an event you need to provide at least two choices (e.g., two " "To schedule an event you need to provide at least two choices (e.g., two "
"time slots on one day or two days)." "time slots on one day or two dateList)."
msgstr "" msgstr ""
"Evit krouiñ ur sontadeg deiziadoù eo ret deoc'h kinnig daou zibab d'an " "Evit krouiñ ur sontadeg deiziadoù eo ret deoc'h kinnig daou zibab d'an "
"nebeutañ (div eur evit an hevelep devezh pe daou zevezh)." "nebeutañ (div eur evit an hevelep devezh pe daou zevezh)."
#: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons #: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons
msgid "You can add or remove additional days and times with the buttons" msgid "You can add or remove additional dateList and times with the buttons"
msgstr "" msgstr ""
"Gallout a rit ouzhpennañ pe dilemel devezhioù hag eurioù ouzhpenn gant an " "Gallout a rit ouzhpennañ pe dilemel devezhioù hag eurioù ouzhpenn gant an "
"afelloù" "afelloù"
@ -1711,7 +1711,7 @@ msgid "Your poll will automatically be archived"
msgstr "Diellaouet e vo ho sontadeg ent emgefreek" msgstr "Diellaouet e vo ho sontadeg ent emgefreek"
#: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days. #: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days.
msgid "Your poll will be automatically archived in %d days." msgid "Your poll will be automatically archived in %d dateList."
msgstr "Diellaouet e vo ho sontadeg a-benn %d a zevezhioù ent emgefreek." msgstr "Diellaouet e vo ho sontadeg a-benn %d a zevezhioù ent emgefreek."
#: .Step+3.after+the+last+date+of+your+poll. #: .Step+3.after+the+last+date+of+your+poll.

View File

@ -84,7 +84,7 @@ msgstr ""
#: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days #: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days
#: +it+is+developed+by+the+Framasoft+association. #: +it+is+developed+by+the+Framasoft+association.
msgid "" msgid ""
"software developed by the University of Strasbourg. These days, it is " "software developed by the University of Strasbourg. These dateList, it is "
"developed by the Framasoft association." "developed by the Framasoft association."
msgstr "" msgstr ""
"programari desenvolupat per la Universitat d'Estrasburg. Actualment " "programari desenvolupat per la Universitat d'Estrasburg. Actualment "
@ -933,7 +933,7 @@ msgid "Your name"
msgstr "El vostre nom" msgstr "El vostre nom"
#: .Generic.days #: .Generic.days
msgid "days" msgid "dateList"
msgstr "dies" msgstr "dies"
#: .Generic.for #: .Generic.for
@ -1650,7 +1650,7 @@ msgid "Remove a time slot"
msgstr "Elimina un espai horari" msgstr "Elimina un espai horari"
#: .Step+2+date.Remove+all+days #: .Step+2+date.Remove+all+days
msgid "Remove all days" msgid "Remove all dateList"
msgstr "Elimina tots els dies" msgstr "Elimina tots els dies"
#: .Step+2+date.Remove+all+times #: .Step+2+date.Remove+all+times
@ -1665,13 +1665,13 @@ msgstr "Elimina aquest dia"
#: +two+time+slots+on+one+day+or+two+days). #: +two+time+slots+on+one+day+or+two+days).
msgid "" msgid ""
"To schedule an event you need to provide at least two choices (e.g., two " "To schedule an event you need to provide at least two choices (e.g., two "
"time slots on one day or two days)." "time slots on one day or two dateList)."
msgstr "" msgstr ""
"Per a programar un esdeveniment, cal que proporcioneu almenys dues opcions (" "Per a programar un esdeveniment, cal que proporcioneu almenys dues opcions ("
"per exemple, dos espais horaris en un o dos dies)." "per exemple, dos espais horaris en un o dos dies)."
#: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons #: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons
msgid "You can add or remove additional days and times with the buttons" msgid "You can add or remove additional dateList and times with the buttons"
msgstr "Podeu afegir o treure dies i hores addicionals amb els botons" msgstr "Podeu afegir o treure dies i hores addicionals amb els botons"
#: .Step+3.Back+to+step+2 #: .Step+3.Back+to+step+2
@ -1727,7 +1727,7 @@ msgid "Your poll will automatically be archived"
msgstr "L'enquesta s'arxivarà automàticament" msgstr "L'enquesta s'arxivarà automàticament"
#: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days. #: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days.
msgid "Your poll will be automatically archived in %d days." msgid "Your poll will be automatically archived in %d dateList."
msgstr "L'enquesta s'arxivarà automàticament d'aquí a %d dies." msgstr "L'enquesta s'arxivarà automàticament d'aquí a %d dies."
#: .Step+3.after+the+last+date+of+your+poll. #: .Step+3.after+the+last+date+of+your+poll.

View File

@ -85,7 +85,7 @@ msgstr ""
#: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days #: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days
#: +it+is+developed+by+the+Framasoft+association. #: +it+is+developed+by+the+Framasoft+association.
msgid "" msgid ""
"software developed by the University of Strasbourg. These days, it is " "software developed by the University of Strasbourg. These dateList, it is "
"developed by the Framasoft association." "developed by the Framasoft association."
msgstr "" msgstr ""
", einer von der Universität von Straßburg entwickelten Software. Heute wird " ", einer von der Universität von Straßburg entwickelten Software. Heute wird "
@ -942,7 +942,7 @@ msgid "Your name"
msgstr "Ihr Name" msgstr "Ihr Name"
#: .Generic.days #: .Generic.days
msgid "days" msgid "dateList"
msgstr "Tage" msgstr "Tage"
#: .Generic.for #: .Generic.for
@ -1662,7 +1662,7 @@ msgid "Remove a time slot"
msgstr "Eine Uhrzeit entfernen" msgstr "Eine Uhrzeit entfernen"
#: .Step+2+date.Remove+all+days #: .Step+2+date.Remove+all+days
msgid "Remove all days" msgid "Remove all dateList"
msgstr "Alle Tage entfernen" msgstr "Alle Tage entfernen"
#: .Step+2+date.Remove+all+times #: .Step+2+date.Remove+all+times
@ -1677,14 +1677,14 @@ msgstr "Diesen Tag entfernen"
#: +two+time+slots+on+one+day+or+two+days). #: +two+time+slots+on+one+day+or+two+days).
msgid "" msgid ""
"To schedule an event you need to provide at least two choices (e.g., two " "To schedule an event you need to provide at least two choices (e.g., two "
"time slots on one day or two days)." "time slots on one day or two dateList)."
msgstr "" msgstr ""
"Um eine Terminabsprache zu konfigurieren, müssen Sie mindestens zwei " "Um eine Terminabsprache zu konfigurieren, müssen Sie mindestens zwei "
"alternative Zeitpunkte vorschlagen (zwei Uhrzeiten am gleichen Tag oder " "alternative Zeitpunkte vorschlagen (zwei Uhrzeiten am gleichen Tag oder "
"verschiedene Tage)." "verschiedene Tage)."
#: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons #: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons
msgid "You can add or remove additional days and times with the buttons" msgid "You can add or remove additional dateList and times with the buttons"
msgstr "" msgstr ""
"Sie können weitere Tage und Uhrzeiten über die Buttons hinzufügen oder " "Sie können weitere Tage und Uhrzeiten über die Buttons hinzufügen oder "
"entfernen" "entfernen"
@ -1742,7 +1742,7 @@ msgid "Your poll will automatically be archived"
msgstr "Ihre Umfrage wird automatisch archiviert" msgstr "Ihre Umfrage wird automatisch archiviert"
#: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days. #: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days.
msgid "Your poll will be automatically archived in %d days." msgid "Your poll will be automatically archived in %d dateList."
msgstr "Ihre Umfrage wird automatisch in %d Tagen archiviert werden." msgstr "Ihre Umfrage wird automatisch in %d Tagen archiviert werden."
#: .Step+3.after+the+last+date+of+your+poll. #: .Step+3.after+the+last+date+of+your+poll.

View File

@ -83,7 +83,7 @@ msgstr ""
#: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days,+it+is+developed+by+the+Framasoft+association. #: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days,+it+is+developed+by+the+Framasoft+association.
msgid "" msgid ""
"software developed by the University of Strasbourg. These days, it is " "software developed by the University of Strasbourg. These dateList, it is "
"developed by the Framasoft association." "developed by the Framasoft association."
msgstr "" msgstr ""
"λογισμικό αναπτυγμένο από το Πανεπιστήμιο του Στρασβούργου. Σήμερα, " "λογισμικό αναπτυγμένο από το Πανεπιστήμιο του Στρασβούργου. Σήμερα, "
@ -926,7 +926,7 @@ msgid "Your name"
msgstr "Το όνομά σας" msgstr "Το όνομά σας"
#: .Generic.days #: .Generic.days
msgid "days" msgid "dateList"
msgstr "ημέρες" msgstr "ημέρες"
#: .Generic.for #: .Generic.for
@ -1640,7 +1640,7 @@ msgid "Remove a time slot"
msgstr "Αφαίρεση ενός πεδίου ώρας" msgstr "Αφαίρεση ενός πεδίου ώρας"
#: .Step+2+date.Remove+all+days #: .Step+2+date.Remove+all+days
msgid "Remove all days" msgid "Remove all dateList"
msgstr "Αφαίρεση όλων των ημερών" msgstr "Αφαίρεση όλων των ημερών"
#: .Step+2+date.Remove+all+times #: .Step+2+date.Remove+all+times
@ -1654,13 +1654,13 @@ msgstr "Αφαίρεση αυτής της ημέρας"
#: .Step+2+date.To+schedule+an+event+you+need+to+provide+at+least+two+choices+(e.g.,+two+time+slots+on+one+day+or+two+days). #: .Step+2+date.To+schedule+an+event+you+need+to+provide+at+least+two+choices+(e.g.,+two+time+slots+on+one+day+or+two+days).
msgid "" msgid ""
"To schedule an event you need to provide at least two choices (e.g., two " "To schedule an event you need to provide at least two choices (e.g., two "
"time slots on one day or two days)." "time slots on one day or two dateList)."
msgstr "" msgstr ""
"Για τον προγραμματισμό μιας δραστηριότητας πρέπει να παρέχετε τουλάχιστον " "Για τον προγραμματισμό μιας δραστηριότητας πρέπει να παρέχετε τουλάχιστον "
"δύο επιλογές (π.χ, δύο πεδία ώρας σε μία ημέρα, ή δύο ημέρες)." "δύο επιλογές (π.χ, δύο πεδία ώρας σε μία ημέρα, ή δύο ημέρες)."
#: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons #: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons
msgid "You can add or remove additional days and times with the buttons" msgid "You can add or remove additional dateList and times with the buttons"
msgstr "Μπορείτε να προσθέσετε ή να αφαιρέσετε ημέρες και ώρες με τα κουμπιά" msgstr "Μπορείτε να προσθέσετε ή να αφαιρέσετε ημέρες και ώρες με τα κουμπιά"
#: .Step+3.Back+to+step+2 #: .Step+3.Back+to+step+2
@ -1714,7 +1714,7 @@ msgid "Your poll will automatically be archived"
msgstr "Η ψηφοφορία σας θα αρχειοθετηθεί αυτόματα" msgstr "Η ψηφοφορία σας θα αρχειοθετηθεί αυτόματα"
#: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days. #: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days.
msgid "Your poll will be automatically archived in %d days." msgid "Your poll will be automatically archived in %d dateList."
msgstr "Η ψηφοφορία σας θα αρχειοθετηθεί αυτόματα σε %d ημέρες." msgstr "Η ψηφοφορία σας θα αρχειοθετηθεί αυτόματα σε %d ημέρες."
#: .Step+3.after+the+last+date+of+your+poll. #: .Step+3.after+the+last+date+of+your+poll.

View File

@ -84,10 +84,10 @@ msgstr ""
#: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days #: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days
#: +it+is+developed+by+the+Framasoft+association. #: +it+is+developed+by+the+Framasoft+association.
msgid "" msgid ""
"software developed by the University of Strasbourg. These days, it is " "software developed by the University of Strasbourg. These dateList, it is "
"developed by the Framasoft association." "developed by the Framasoft association."
msgstr "" msgstr ""
"software developed by the University of Strasbourg. These days, it is " "software developed by the University of Strasbourg. These dateList, it is "
"developed by the Framasoft association." "developed by the Framasoft association."
#: .3rd+section.Grow+your+own #: .3rd+section.Grow+your+own
@ -931,8 +931,8 @@ msgid "Your name"
msgstr "Your name" msgstr "Your name"
#: .Generic.days #: .Generic.days
msgid "days" msgid "dateList"
msgstr "days" msgstr "dateList"
#: .Generic.for #: .Generic.for
msgid "for" msgid "for"
@ -1635,8 +1635,8 @@ msgid "Remove a time slot"
msgstr "Remove a time slot" msgstr "Remove a time slot"
#: .Step+2+date.Remove+all+days #: .Step+2+date.Remove+all+days
msgid "Remove all days" msgid "Remove all dateList"
msgstr "Remove all days" msgstr "Remove all dateList"
#: .Step+2+date.Remove+all+times #: .Step+2+date.Remove+all+times
msgid "Remove all times" msgid "Remove all times"
@ -1650,14 +1650,14 @@ msgstr "Remove this day"
#: +two+time+slots+on+one+day+or+two+days). #: +two+time+slots+on+one+day+or+two+days).
msgid "" msgid ""
"To schedule an event you need to provide at least two choices (e.g., two " "To schedule an event you need to provide at least two choices (e.g., two "
"time slots on one day or two days)." "time slots on one day or two dateList)."
msgstr "" msgstr ""
"To schedule an event you need to provide at least two choices (e.g., two " "To schedule an event you need to provide at least two choices (e.g., two "
"time slots on one day or two days)." "time slots on one day or two dateList)."
#: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons #: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons
msgid "You can add or remove additional days and times with the buttons" msgid "You can add or remove additional dateList and times with the buttons"
msgstr "You can add or remove additional days and times with the buttons" msgstr "You can add or remove additional dateList and times with the buttons"
#: .Step+3.Back+to+step+2 #: .Step+3.Back+to+step+2
msgid "Back to step 2" msgid "Back to step 2"
@ -1712,8 +1712,8 @@ msgid "Your poll will automatically be archived"
msgstr "Your poll will automatically be archived" msgstr "Your poll will automatically be archived"
#: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days. #: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days.
msgid "Your poll will be automatically archived in %d days." msgid "Your poll will be automatically archived in %d dateList."
msgstr "Your poll will be automatically archived in %d days." msgstr "Your poll will be automatically archived in %d dateList."
#: .Step+3.after+the+last+date+of+your+poll. #: .Step+3.after+the+last+date+of+your+poll.
msgid "after the last date of your poll." msgid "after the last date of your poll."

View File

@ -88,7 +88,7 @@ msgstr ""
#: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days #: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days
#: +it+is+developed+by+the+Framasoft+association. #: +it+is+developed+by+the+Framasoft+association.
msgid "" msgid ""
"software developed by the University of Strasbourg. These days, it is " "software developed by the University of Strasbourg. These dateList, it is "
"developed by the Framasoft association." "developed by the Framasoft association."
msgstr "" msgstr ""
"un software desarrollado por la Universidad de Estrasburgo. Ahora, su " "un software desarrollado por la Universidad de Estrasburgo. Ahora, su "
@ -945,7 +945,7 @@ msgid "Your name"
msgstr "Su nombre" msgstr "Su nombre"
#: .Generic.days #: .Generic.days
msgid "days" msgid "dateList"
msgstr "días" msgstr "días"
#: .Generic.for #: .Generic.for
@ -1664,7 +1664,7 @@ msgid "Remove a time slot"
msgstr "Eliminar una franja horaria" msgstr "Eliminar una franja horaria"
#: .Step+2+date.Remove+all+days #: .Step+2+date.Remove+all+days
msgid "Remove all days" msgid "Remove all dateList"
msgstr "Borrar todos los días" msgstr "Borrar todos los días"
#: .Step+2+date.Remove+all+times #: .Step+2+date.Remove+all+times
@ -1679,13 +1679,13 @@ msgstr "Eliminar este dia"
#: +two+time+slots+on+one+day+or+two+days). #: +two+time+slots+on+one+day+or+two+days).
msgid "" msgid ""
"To schedule an event you need to provide at least two choices (e.g., two " "To schedule an event you need to provide at least two choices (e.g., two "
"time slots on one day or two days)." "time slots on one day or two dateList)."
msgstr "" msgstr ""
"Para programar un evento, tiene que proponer por lo menos dos opciones (dos " "Para programar un evento, tiene que proponer por lo menos dos opciones (dos "
"horarios para un día, o dos días)." "horarios para un día, o dos días)."
#: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons #: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons
msgid "You can add or remove additional days and times with the buttons" msgid "You can add or remove additional dateList and times with the buttons"
msgstr "Puede agregar o borrar días y horarios con los botones" msgstr "Puede agregar o borrar días y horarios con los botones"
#: .Step+3.Back+to+step+2 #: .Step+3.Back+to+step+2
@ -1741,7 +1741,7 @@ msgid "Your poll will automatically be archived"
msgstr "Su encuesta estará archivada de manera automática" msgstr "Su encuesta estará archivada de manera automática"
#: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days. #: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days.
msgid "Your poll will be automatically archived in %d days." msgid "Your poll will be automatically archived in %d dateList."
msgstr "Su encuesta estará archivada de manera automática en %d días." msgstr "Su encuesta estará archivada de manera automática en %d días."
#: .Step+3.after+the+last+date+of+your+poll. #: .Step+3.after+the+last+date+of+your+poll.

View File

@ -87,7 +87,7 @@ msgstr ""
#: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days #: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days
#: +it+is+developed+by+the+Framasoft+association. #: +it+is+developed+by+the+Framasoft+association.
msgid "" msgid ""
"software developed by the University of Strasbourg. These days, it is " "software developed by the University of Strasbourg. These dateList, it is "
"developed by the Framasoft association." "developed by the Framasoft association."
msgstr "" msgstr ""
"un logiciel développé par l'Université de Strasbourg. Aujourd'hui, son " "un logiciel développé par l'Université de Strasbourg. Aujourd'hui, son "
@ -949,7 +949,7 @@ msgid "Your name"
msgstr "Votre nom" msgstr "Votre nom"
#: .Generic.days #: .Generic.days
msgid "days" msgid "dateList"
msgstr "jours" msgstr "jours"
#: .Generic.for #: .Generic.for
@ -1675,7 +1675,7 @@ msgid "Remove a time slot"
msgstr "Supprimer le dernier horaire" msgstr "Supprimer le dernier horaire"
#: .Step+2+date.Remove+all+days #: .Step+2+date.Remove+all+days
msgid "Remove all days" msgid "Remove all dateList"
msgstr "Effacer tous les jours" msgstr "Effacer tous les jours"
#: .Step+2+date.Remove+all+times #: .Step+2+date.Remove+all+times
@ -1690,13 +1690,13 @@ msgstr "Supprimer ce jour"
#: +two+time+slots+on+one+day+or+two+days). #: +two+time+slots+on+one+day+or+two+days).
msgid "" msgid ""
"To schedule an event you need to provide at least two choices (e.g., two " "To schedule an event you need to provide at least two choices (e.g., two "
"time slots on one day or two days)." "time slots on one day or two dateList)."
msgstr "" msgstr ""
"Pour créer un sondage spécial dates vous devez proposer au moins deux choix " "Pour créer un sondage spécial dates vous devez proposer au moins deux choix "
"(deux horaires pour une même journée ou deux jours)." "(deux horaires pour une même journée ou deux jours)."
#: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons #: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons
msgid "You can add or remove additional days and times with the buttons" msgid "You can add or remove additional dateList and times with the buttons"
msgstr "" msgstr ""
"Vous pouvez ajouter ou supprimer des jours et horaires supplémentaires avec " "Vous pouvez ajouter ou supprimer des jours et horaires supplémentaires avec "
"les boutons" "les boutons"
@ -1754,7 +1754,7 @@ msgid "Your poll will automatically be archived"
msgstr "Votre sondage sera automatiquement archivé" msgstr "Votre sondage sera automatiquement archivé"
#: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days. #: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days.
msgid "Your poll will be automatically archived in %d days." msgid "Your poll will be automatically archived in %d dateList."
msgstr "Votre sondage sera automatiquement archivé dans %d jours." msgstr "Votre sondage sera automatiquement archivé dans %d jours."
#: .Step+3.after+the+last+date+of+your+poll. #: .Step+3.after+the+last+date+of+your+poll.

View File

@ -75,7 +75,7 @@ msgstr ""
#: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days,+it+is+developed+by+the+Framasoft+association. #: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days,+it+is+developed+by+the+Framasoft+association.
msgid "" msgid ""
"software developed by the University of Strasbourg. These days, it is " "software developed by the University of Strasbourg. These dateList, it is "
"developed by the Framasoft association." "developed by the Framasoft association."
msgstr "" msgstr ""
@ -861,7 +861,7 @@ msgid "Your name"
msgstr "" msgstr ""
#: .Generic.days #: .Generic.days
msgid "days" msgid "dateList"
msgstr "" msgstr ""
#: .Generic.for #: .Generic.for
@ -1538,7 +1538,7 @@ msgid "Remove a time slot"
msgstr "" msgstr ""
#: .Step+2+date.Remove+all+days #: .Step+2+date.Remove+all+days
msgid "Remove all days" msgid "Remove all dateList"
msgstr "" msgstr ""
#: .Step+2+date.Remove+all+times #: .Step+2+date.Remove+all+times
@ -1552,11 +1552,11 @@ msgstr ""
#: .Step+2+date.To+schedule+an+event+you+need+to+provide+at+least+two+choices+(e.g.,+two+time+slots+on+one+day+or+two+days). #: .Step+2+date.To+schedule+an+event+you+need+to+provide+at+least+two+choices+(e.g.,+two+time+slots+on+one+day+or+two+days).
msgid "" msgid ""
"To schedule an event you need to provide at least two choices (e.g., two " "To schedule an event you need to provide at least two choices (e.g., two "
"time slots on one day or two days)." "time slots on one day or two dateList)."
msgstr "" msgstr ""
#: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons #: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons
msgid "You can add or remove additional days and times with the buttons" msgid "You can add or remove additional dateList and times with the buttons"
msgstr "" msgstr ""
#: .Step+3.Back+to+step+2 #: .Step+3.Back+to+step+2
@ -1605,7 +1605,7 @@ msgid "Your poll will automatically be archived"
msgstr "" msgstr ""
#: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days. #: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days.
msgid "Your poll will be automatically archived in %d days." msgid "Your poll will be automatically archived in %d dateList."
msgstr "" msgstr ""
#: .Step+3.after+the+last+date+of+your+poll. #: .Step+3.after+the+last+date+of+your+poll.

View File

@ -81,7 +81,7 @@ msgstr ""
#: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days,+it+is+developed+by+the+Framasoft+association. #: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days,+it+is+developed+by+the+Framasoft+association.
msgid "" msgid ""
"software developed by the University of Strasbourg. These days, it is " "software developed by the University of Strasbourg. These dateList, it is "
"developed by the Framasoft association." "developed by the Framasoft association."
msgstr "" msgstr ""
"un software desenvolvido pola Universidade de Estrasburgo. Agora, o seu " "un software desenvolvido pola Universidade de Estrasburgo. Agora, o seu "
@ -918,7 +918,7 @@ msgid "Your name"
msgstr "Seu nome" msgstr "Seu nome"
#: .Generic.days #: .Generic.days
msgid "days" msgid "dateList"
msgstr "días" msgstr "días"
#: .Generic.for #: .Generic.for
@ -1618,7 +1618,7 @@ msgid "Remove a time slot"
msgstr "Borrar unha hora" msgstr "Borrar unha hora"
#: .Step+2+date.Remove+all+days #: .Step+2+date.Remove+all+days
msgid "Remove all days" msgid "Remove all dateList"
msgstr "Borrar todos os días" msgstr "Borrar todos os días"
#: .Step+2+date.Remove+all+times #: .Step+2+date.Remove+all+times
@ -1632,13 +1632,13 @@ msgstr "Borrar este día"
#: .Step+2+date.To+schedule+an+event+you+need+to+provide+at+least+two+choices+(e.g.,+two+time+slots+on+one+day+or+two+days). #: .Step+2+date.To+schedule+an+event+you+need+to+provide+at+least+two+choices+(e.g.,+two+time+slots+on+one+day+or+two+days).
msgid "" msgid ""
"To schedule an event you need to provide at least two choices (e.g., two " "To schedule an event you need to provide at least two choices (e.g., two "
"time slots on one day or two days)." "time slots on one day or two dateList)."
msgstr "" msgstr ""
"Para programar unha enquisa, precisa fornecer polo menos dúas opcións (por " "Para programar unha enquisa, precisa fornecer polo menos dúas opcións (por "
"exemplo, dúas horas nun día ou dous días)." "exemplo, dúas horas nun día ou dous días)."
#: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons #: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons
msgid "You can add or remove additional days and times with the buttons" msgid "You can add or remove additional dateList and times with the buttons"
msgstr "Cos botóns pode engadir ou borrar días e horas adicionais" msgstr "Cos botóns pode engadir ou borrar días e horas adicionais"
#: .Step+3.Back+to+step+2 #: .Step+3.Back+to+step+2
@ -1692,7 +1692,7 @@ msgid "Your poll will automatically be archived"
msgstr "A súa enquisa será arquivada de xeito automático" msgstr "A súa enquisa será arquivada de xeito automático"
#: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days. #: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days.
msgid "Your poll will be automatically archived in %d days." msgid "Your poll will be automatically archived in %d dateList."
msgstr "A súa enquisa será arquivada de xeito automático en %d días." msgstr "A súa enquisa será arquivada de xeito automático en %d días."
#: .Step+3.after+the+last+date+of+your+poll. #: .Step+3.after+the+last+date+of+your+poll.

View File

@ -83,7 +83,7 @@ msgstr ""
#: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days #: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days
#: +it+is+developed+by+the+Framasoft+association. #: +it+is+developed+by+the+Framasoft+association.
msgid "" msgid ""
"software developed by the University of Strasbourg. These days, it is " "software developed by the University of Strasbourg. These dateList, it is "
"developed by the Framasoft association." "developed by the Framasoft association."
msgstr "" msgstr ""
"szoftveren alapul, melyet a Strasbourg-i Egyetem fejlesztett. Manapság a " "szoftveren alapul, melyet a Strasbourg-i Egyetem fejlesztett. Manapság a "
@ -926,7 +926,7 @@ msgid "Your name"
msgstr "Neve" msgstr "Neve"
#: .Generic.days #: .Generic.days
msgid "days" msgid "dateList"
msgstr "nap" msgstr "nap"
#: .Generic.for #: .Generic.for
@ -1636,7 +1636,7 @@ msgid "Remove a time slot"
msgstr "Idősáv eltávolítása" msgstr "Idősáv eltávolítása"
#: .Step+2+date.Remove+all+days #: .Step+2+date.Remove+all+days
msgid "Remove all days" msgid "Remove all dateList"
msgstr "Összes nap eltávolítása" msgstr "Összes nap eltávolítása"
#: .Step+2+date.Remove+all+times #: .Step+2+date.Remove+all+times
@ -1651,13 +1651,13 @@ msgstr "Nap eltávolítása"
#: +two+time+slots+on+one+day+or+two+days). #: +two+time+slots+on+one+day+or+two+days).
msgid "" msgid ""
"To schedule an event you need to provide at least two choices (e.g., two " "To schedule an event you need to provide at least two choices (e.g., two "
"time slots on one day or two days)." "time slots on one day or two dateList)."
msgstr "" msgstr ""
"Egy esemény ütemezéséhez legalább két lehetőséget kell megadni (azaz két " "Egy esemény ütemezéséhez legalább két lehetőséget kell megadni (azaz két "
"idősávot egy nap, vagy két napot)." "idősávot egy nap, vagy két napot)."
#: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons #: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons
msgid "You can add or remove additional days and times with the buttons" msgid "You can add or remove additional dateList and times with the buttons"
msgstr "A gombokkal további napokat és idősávokat adhat hozzá" msgstr "A gombokkal további napokat és idősávokat adhat hozzá"
#: .Step+3.Back+to+step+2 #: .Step+3.Back+to+step+2
@ -1713,7 +1713,7 @@ msgid "Your poll will automatically be archived"
msgstr "A szavazása automatikusan archiválva lesz" msgstr "A szavazása automatikusan archiválva lesz"
#: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days. #: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days.
msgid "Your poll will be automatically archived in %d days." msgid "Your poll will be automatically archived in %d dateList."
msgstr "A szavazása %d nap után automatikusan archiválva lesz." msgstr "A szavazása %d nap után automatikusan archiválva lesz."
#: .Step+3.after+the+last+date+of+your+poll. #: .Step+3.after+the+last+date+of+your+poll.

View File

@ -87,7 +87,7 @@ msgstr ""
#: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days #: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days
#: +it+is+developed+by+the+Framasoft+association. #: +it+is+developed+by+the+Framasoft+association.
msgid "" msgid ""
"software developed by the University of Strasbourg. These days, it is " "software developed by the University of Strasbourg. These dateList, it is "
"developed by the Framasoft association." "developed by the Framasoft association."
msgstr "" msgstr ""
"un software sviluppato dall'Università di Strasburgo. Oggi il suo sviluppo è " "un software sviluppato dall'Università di Strasburgo. Oggi il suo sviluppo è "
@ -941,7 +941,7 @@ msgid "Your name"
msgstr "Il tuo nome" msgstr "Il tuo nome"
#: .Generic.days #: .Generic.days
msgid "days" msgid "dateList"
msgstr "giorni" msgstr "giorni"
#: .Generic.for #: .Generic.for
@ -1653,7 +1653,7 @@ msgid "Remove a time slot"
msgstr "Eliminare l'ultimo orario" msgstr "Eliminare l'ultimo orario"
#: .Step+2+date.Remove+all+days #: .Step+2+date.Remove+all+days
msgid "Remove all days" msgid "Remove all dateList"
msgstr "Cancellare tutti i giorni" msgstr "Cancellare tutti i giorni"
#: .Step+2+date.Remove+all+times #: .Step+2+date.Remove+all+times
@ -1668,13 +1668,13 @@ msgstr "Eliminare questo giorno"
#: +two+time+slots+on+one+day+or+two+days). #: +two+time+slots+on+one+day+or+two+days).
msgid "" msgid ""
"To schedule an event you need to provide at least two choices (e.g., two " "To schedule an event you need to provide at least two choices (e.g., two "
"time slots on one day or two days)." "time slots on one day or two dateList)."
msgstr "" msgstr ""
"Per creare un evento, è meglio proporre almeno 2 scelte (2 orari per lo " "Per creare un evento, è meglio proporre almeno 2 scelte (2 orari per lo "
"stesso giorno o 2 giorni)." "stesso giorno o 2 giorni)."
#: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons #: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons
msgid "You can add or remove additional days and times with the buttons" msgid "You can add or remove additional dateList and times with the buttons"
msgstr "" msgstr ""
"Puoi aggiungere o eliminare dei giorni et orari ulteriori con i pulsanti" "Puoi aggiungere o eliminare dei giorni et orari ulteriori con i pulsanti"
@ -1731,7 +1731,7 @@ msgid "Your poll will automatically be archived"
msgstr "Il tuo sondaggio sarà archiviato automaticamente" msgstr "Il tuo sondaggio sarà archiviato automaticamente"
#: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days. #: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days.
msgid "Your poll will be automatically archived in %d days." msgid "Your poll will be automatically archived in %d dateList."
msgstr "Il tuo sondaggio verrà archiviata automaticamente in %d giorni." msgstr "Il tuo sondaggio verrà archiviata automaticamente in %d giorni."
#: .Step+3.after+the+last+date+of+your+poll. #: .Step+3.after+the+last+date+of+your+poll.

View File

@ -82,7 +82,7 @@ msgstr ""
#: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days #: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days
#: +it+is+developed+by+the+Framasoft+association. #: +it+is+developed+by+the+Framasoft+association.
msgid "" msgid ""
"software developed by the University of Strasbourg. These days, it is " "software developed by the University of Strasbourg. These dateList, it is "
"developed by the Framasoft association." "developed by the Framasoft association."
msgstr "" msgstr ""
"software ontwikkeld door de Universiteit van Straatsburg. Het wordt " "software ontwikkeld door de Universiteit van Straatsburg. Het wordt "
@ -922,7 +922,7 @@ msgid "Your name"
msgstr "Je naam" msgstr "Je naam"
#: .Generic.days #: .Generic.days
msgid "days" msgid "dateList"
msgstr "dagen" msgstr "dagen"
#: .Generic.for #: .Generic.for
@ -1628,7 +1628,7 @@ msgid "Remove a time slot"
msgstr "Verwijder een tijd" msgstr "Verwijder een tijd"
#: .Step+2+date.Remove+all+days #: .Step+2+date.Remove+all+days
msgid "Remove all days" msgid "Remove all dateList"
msgstr "Verwijder alle dagen" msgstr "Verwijder alle dagen"
#: .Step+2+date.Remove+all+times #: .Step+2+date.Remove+all+times
@ -1643,13 +1643,13 @@ msgstr "Verwijder deze dag"
#: +two+time+slots+on+one+day+or+two+days). #: +two+time+slots+on+one+day+or+two+days).
msgid "" msgid ""
"To schedule an event you need to provide at least two choices (e.g., two " "To schedule an event you need to provide at least two choices (e.g., two "
"time slots on one day or two days)." "time slots on one day or two dateList)."
msgstr "" msgstr ""
"Om een datum te prikken, moet je tenminste twee keuzes geven. (Bijvoorbeeld " "Om een datum te prikken, moet je tenminste twee keuzes geven. (Bijvoorbeeld "
"twee tijden op één dag of twee verschillende dagen)." "twee tijden op één dag of twee verschillende dagen)."
#: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons #: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons
msgid "You can add or remove additional days and times with the buttons" msgid "You can add or remove additional dateList and times with the buttons"
msgstr "Je kan extra dagen of tijden toevoegen en verwijderen met deze knoppen" msgstr "Je kan extra dagen of tijden toevoegen en verwijderen met deze knoppen"
#: .Step+3.Back+to+step+2 #: .Step+3.Back+to+step+2
@ -1704,7 +1704,7 @@ msgid "Your poll will automatically be archived"
msgstr "Je poll wordt automatisch gearchiveerd" msgstr "Je poll wordt automatisch gearchiveerd"
#: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days. #: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days.
msgid "Your poll will be automatically archived in %d days." msgid "Your poll will be automatically archived in %d dateList."
msgstr "Je poll wordt over %d dagen automatisch gearchiveerd." msgstr "Je poll wordt over %d dagen automatisch gearchiveerd."
#: .Step+3.after+the+last+date+of+your+poll. #: .Step+3.after+the+last+date+of+your+poll.

View File

@ -87,7 +87,7 @@ msgstr ""
#: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days #: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days
#: +it+is+developed+by+the+Framasoft+association. #: +it+is+developed+by+the+Framasoft+association.
msgid "" msgid ""
"software developed by the University of Strasbourg. These days, it is " "software developed by the University of Strasbourg. These dateList, it is "
"developed by the Framasoft association." "developed by the Framasoft association."
msgstr "" msgstr ""
"un logicial desvolopat per lUniversitat dEstrasborg. Uèi son desvolopament " "un logicial desvolopat per lUniversitat dEstrasborg. Uèi son desvolopament "
@ -942,7 +942,7 @@ msgid "Your name"
msgstr "Vòstre nom" msgstr "Vòstre nom"
#: .Generic.days #: .Generic.days
msgid "days" msgid "dateList"
msgstr "jorns" msgstr "jorns"
#: .Generic.for #: .Generic.for
@ -1660,7 +1660,7 @@ msgid "Remove a time slot"
msgstr "Suprimir lo darrièr orari" msgstr "Suprimir lo darrièr orari"
#: .Step+2+date.Remove+all+days #: .Step+2+date.Remove+all+days
msgid "Remove all days" msgid "Remove all dateList"
msgstr "Suprimir totes los jorns" msgstr "Suprimir totes los jorns"
#: .Step+2+date.Remove+all+times #: .Step+2+date.Remove+all+times
@ -1675,13 +1675,13 @@ msgstr "Suprimir aqueste jorn"
#: +two+time+slots+on+one+day+or+two+days). #: +two+time+slots+on+one+day+or+two+days).
msgid "" msgid ""
"To schedule an event you need to provide at least two choices (e.g., two " "To schedule an event you need to provide at least two choices (e.g., two "
"time slots on one day or two days)." "time slots on one day or two dateList)."
msgstr "" msgstr ""
"Per crear un sondatge especial datas vos cal prepausar almens doas causidas " "Per crear un sondatge especial datas vos cal prepausar almens doas causidas "
"(dos oraris per la meteissa jornada o dos jorns)." "(dos oraris per la meteissa jornada o dos jorns)."
#: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons #: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons
msgid "You can add or remove additional days and times with the buttons" msgid "You can add or remove additional dateList and times with the buttons"
msgstr "" msgstr ""
"Podètz apondre o suprimir de jorns e oraris suplementaris amb los botons" "Podètz apondre o suprimir de jorns e oraris suplementaris amb los botons"
@ -1738,7 +1738,7 @@ msgid "Your poll will automatically be archived"
msgstr "Vòstre sondatge serà archivat automaticament" msgstr "Vòstre sondatge serà archivat automaticament"
#: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days. #: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days.
msgid "Your poll will be automatically archived in %d days." msgid "Your poll will be automatically archived in %d dateList."
msgstr "Vòstre sondatge serà archivat automaticament dins %d jorns." msgstr "Vòstre sondatge serà archivat automaticament dins %d jorns."
#: .Step+3.after+the+last+date+of+your+poll. #: .Step+3.after+the+last+date+of+your+poll.

View File

@ -81,7 +81,7 @@ msgstr ""
#: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days,+it+is+developed+by+the+Framasoft+association. #: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days,+it+is+developed+by+the+Framasoft+association.
msgid "" msgid ""
"software developed by the University of Strasbourg. These days, it is " "software developed by the University of Strasbourg. These dateList, it is "
"developed by the Framasoft association." "developed by the Framasoft association."
msgstr "" msgstr ""
"mjukvara utvecklad av Strasbourgs universitet. Idag utvecklas den av " "mjukvara utvecklad av Strasbourgs universitet. Idag utvecklas den av "
@ -917,7 +917,7 @@ msgid "Your name"
msgstr "Ditt namn" msgstr "Ditt namn"
#: .Generic.days #: .Generic.days
msgid "days" msgid "dateList"
msgstr "dagar" msgstr "dagar"
#: .Generic.for #: .Generic.for
@ -1607,7 +1607,7 @@ msgid "Remove a time slot"
msgstr "Ta bort en tid" msgstr "Ta bort en tid"
#: .Step+2+date.Remove+all+days #: .Step+2+date.Remove+all+days
msgid "Remove all days" msgid "Remove all dateList"
msgstr "Ta bort alla dagar" msgstr "Ta bort alla dagar"
#: .Step+2+date.Remove+all+times #: .Step+2+date.Remove+all+times
@ -1621,13 +1621,13 @@ msgstr "Ta bort den här dagen"
#: .Step+2+date.To+schedule+an+event+you+need+to+provide+at+least+two+choices+(e.g.,+two+time+slots+on+one+day+or+two+days). #: .Step+2+date.To+schedule+an+event+you+need+to+provide+at+least+two+choices+(e.g.,+two+time+slots+on+one+day+or+two+days).
msgid "" msgid ""
"To schedule an event you need to provide at least two choices (e.g., two " "To schedule an event you need to provide at least two choices (e.g., two "
"time slots on one day or two days)." "time slots on one day or two dateList)."
msgstr "" msgstr ""
"För att schemalägga ett evenemang måste du ange minst två val (alltså minst " "För att schemalägga ett evenemang måste du ange minst två val (alltså minst "
"två tider samma dag eller två dagar)." "två tider samma dag eller två dagar)."
#: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons #: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons
msgid "You can add or remove additional days and times with the buttons" msgid "You can add or remove additional dateList and times with the buttons"
msgstr "Du kan lägga till och ta bort dagar och tider med knapparna" msgstr "Du kan lägga till och ta bort dagar och tider med knapparna"
#: .Step+3.Back+to+step+2 #: .Step+3.Back+to+step+2
@ -1680,7 +1680,7 @@ msgid "Your poll will automatically be archived"
msgstr "Din undersökning kommer arkiveras automatiskt" msgstr "Din undersökning kommer arkiveras automatiskt"
#: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days. #: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days.
msgid "Your poll will be automatically archived in %d days." msgid "Your poll will be automatically archived in %d dateList."
msgstr "Din undersökning kommer arkiveras automatiskt om %d dagar." msgstr "Din undersökning kommer arkiveras automatiskt om %d dagar."
#: .Step+3.after+the+last+date+of+your+poll. #: .Step+3.after+the+last+date+of+your+poll.

View File

@ -17,6 +17,7 @@ export const environment = {
showDemoWarning: true, showDemoWarning: true,
autofill: false, autofill: false,
autoSendNewPoll: false, autoSendNewPoll: false,
interval_days_default: 7,
appTitle: 'FramaDate Funky', appTitle: 'FramaDate Funky',
appVersion: '2.1.0', appVersion: '2.1.0',
appLogo: 'assets/img/logo.png', appLogo: 'assets/img/logo.png',

View File

@ -24,6 +24,7 @@ export const environment = {
autofill: true, autofill: true,
showDemoWarning: false, showDemoWarning: false,
autoSendNewPoll: false, autoSendNewPoll: false,
interval_days_default: 7,
appTitle: 'FramaDate Funky', appTitle: 'FramaDate Funky',
appVersion: '2.1.0', appVersion: '2.1.0',
appLogo: 'assets/img/logo.png', appLogo: 'assets/img/logo.png',