Skip to content
Snippets Groups Projects
Commit 4d5572fd authored by ncastejon's avatar ncastejon
Browse files

Merge branch '376-changelog' into development

parents 6c936c94 e6ff3600
Branches
Tags
1 merge request!46Version 2.2.0
Showing
with 564 additions and 359 deletions
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
"backendUrls": { "backendUrls": {
"organizations": "https://kong-dev.alpha.grandlyon.com/organizations", "organizations": "https://kong-dev.alpha.grandlyon.com/organizations",
"resources": "https://kong-dev.alpha.grandlyon.com/resources", "resources": "https://kong-dev.alpha.grandlyon.com/resources",
"changelog": "https://kong-dev.alpha.grandlyon.com/changelog",
"credits": "https://kong-dev.alpha.grandlyon.com/credits", "credits": "https://kong-dev.alpha.grandlyon.com/credits",
"auth": "https://kong-dev.alpha.grandlyon.com/authentication/", "auth": "https://kong-dev.alpha.grandlyon.com/authentication/",
"middlewareLegacyAuth": "https://kong-dev.alpha.grandlyon.com/middleware-legacy/", "middlewareLegacyAuth": "https://kong-dev.alpha.grandlyon.com/middleware-legacy/",
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
"backendUrls": { "backendUrls": {
"organizations": "https://kong-rec.alpha.grandlyon.com/organizations", "organizations": "https://kong-rec.alpha.grandlyon.com/organizations",
"resources": "https://kong-rec.alpha.grandlyon.com/resources", "resources": "https://kong-rec.alpha.grandlyon.com/resources",
"changelog": "https://kong-rec.alpha.grandlyon.com/changelog",
"credits": "https://kong-rec.alpha.grandlyon.com/credits", "credits": "https://kong-rec.alpha.grandlyon.com/credits",
"auth": "https://kong-rec.alpha.grandlyon.com/authentication/", "auth": "https://kong-rec.alpha.grandlyon.com/authentication/",
"middlewareLegacyAuth": "https://kong-rec.alpha.grandlyon.com/middleware-legacy/", "middlewareLegacyAuth": "https://kong-rec.alpha.grandlyon.com/middleware-legacy/",
......
...@@ -27,6 +27,10 @@ ...@@ -27,6 +27,10 @@
<div> <div>
<a [routerLink]="['/', AppRoutes.contact.uri]" i18n="@@footer.contactus">Contact Us</a> <a [routerLink]="['/', AppRoutes.contact.uri]" i18n="@@footer.contactus">Contact Us</a>
</div> </div>
<div class="changelog">
<span class="bullet"></span>
<a [routerLink]="['/', AppRoutes.changelog.uri]" i18n="@@footer.changelog">Last changes</a>
</div>
<div> <div>
<span class="bullet"></span> <span class="bullet"></span>
<a [href]="catalogueUrl" i18n="@@footer.catalogueDownload">Download the catalogue</a> <a [href]="catalogueUrl" i18n="@@footer.catalogueDownload">Download the catalogue</a>
...@@ -61,8 +65,7 @@ ...@@ -61,8 +65,7 @@
<li> <li>
<a href="https://www.grandlyon.com/" target="_blank"> <a href="https://www.grandlyon.com/" target="_blank">
<img i18n-title="@@footer.metropole.site.title" title="Access the Lyon Metropolis website (new window)" <img i18n-title="@@footer.metropole.site.title" title="Access the Lyon Metropolis website (new window)"
class="plus-logo" src="./assets/img/footer-plus.png" class="plus-logo" src="./assets/img/footer-plus.png" alt="">
alt="">
</a> </a>
</li> </li>
<li> <li>
...@@ -75,4 +78,4 @@ ...@@ -75,4 +78,4 @@
</ul> </ul>
</div> </div>
</div> </div>
</footer> </footer>
\ No newline at end of file
...@@ -43,6 +43,10 @@ footer.footer { ...@@ -43,6 +43,10 @@ footer.footer {
display: flex; display: flex;
flex-flow: column; flex-flow: column;
.changelog > * {
color: $yellow-dd-color;
}
.links-section:first-of-type { .links-section:first-of-type {
margin-bottom: 0.3rem; margin-bottom: 0.3rem;
......
...@@ -5,6 +5,7 @@ export class AppConfig { ...@@ -5,6 +5,7 @@ export class AppConfig {
organizations: string; organizations: string;
resources: string; resources: string;
credits: string; credits: string;
changelog: string;
auth: string; auth: string;
middlewareLegacyAuth: string; middlewareLegacyAuth: string;
email: string; email: string;
......
<div class="page-container has-padding has-white-background">
<div class="page-header-container">
<app-page-header [pageInfo]="pageHeaderInfo"></app-page-header>
<p class="description">
<ng-container i18n="@@changelog.description">
Your recommendations to improve this portal are regularly integrated.
Here is the list of the last evolutions of the portal. If you wish to contribute to the optimization of the portal, do not hesitate to </ng-container>
<a [routerLink]="['/', AppRoutes.contact.uri]" i18n="@@organizations.contactus">contact us</a>.
</p>
</div>
<div id="content">
<ul class="timeline" *ngIf="changelogs">
<ng-container *ngFor="let changelog of changelogs; let i = index">
<div class="last-update is-hidden-mobile" *ngIf="i === 0" i18n="@@changelog.lastupdate">Last update</div>
<div class="last-update is-hidden-tablet" *ngIf="i === 0">
<p i18n="@@changelog.lastupdate.mobile1">Last</p><p i18n="@@changelog.lastupdate.mobile2">update</p>
</div>
<li class="event" [attr.data-date]="changelog.createDate | date: 'yyyy.MM.dd'">
<h2 class="version">{{ changelog.version }}</h2>
<div class="type-change" *ngIf="changelog.majorImprovements && changelog.majorImprovements.length > 0">
<p class="type-change-title" i18n="@@changelog.major">Major improvements</p>
<ul>
<li *ngFor="let majorImprovement of changelog.majorImprovements">
{{ majorImprovement }}
</li>
</ul>
</div>
<div class="type-change" *ngIf="changelog.majorImprovements && changelog.minorImprovements.length > 0">
<p class="type-change-title" i18n="@@changelog.minor">Minor improvements</p>
<ul>
<li *ngFor="let majorImprovement of changelog.minorImprovements">
{{ majorImprovement }}
</li>
</ul>
</div>
<div class="type-change" *ngIf="changelog.majorImprovements && changelog.bugfixes.length > 0">
<p class="type-change-title" i18n="@@changelog.bugfixes">Bug fixes</p>
<ul>
<li *ngFor="let majorImprovement of changelog.bugfixes">
{{ majorImprovement }}
</li>
</ul>
</div>
</li>
</ng-container>
</ul>
</div>
</div>
\ No newline at end of file
@import './../../../../scss/variables.scss';
@import './../../../../../node_modules/bulma/sass/utilities/_all.sass';
$spacing: 30px;
$date: 120px;
$dotborder: 2px;
$dot: 7px;
$line: 2px;
/* Base */
.description {
font-size: 1rem;
font-weight: 600;
padding-bottom: 1.875rem;
@media screen and (min-width: $tablet) {
margin-left: 6rem;
width: 70%;
}
}
strong {
font-weight: 600;
}
#content {
margin-top: $spacing;
text-align: center;
}
/* Timeline */
.timeline {
border-left: $line solid $grey-super-light-color;
position: relative;
line-height: 1.4em;
font-size: 1.03em;
padding: $spacing;
text-align: left;
margin-left: 10%;
@media screen and (min-width: $tablet) {
margin-left: 33%;
}
.last-update {
display: inline-block;
position: absolute;
left: -137px;
text-align: right;
font-size: 0.75rem;
top: 15px;
padding: 0 5px 0 5px;
border: 1px solid $yellow-dd-color;
&.is-hidden-tablet {
left: 30px;
line-height: 1;
padding: 3px 5px 3px 5px;
top: -20px;
text-align: left;
}
}
.event {
padding-bottom: ($spacing * 0.5);
position: relative;
.version {
line-height: 1;
font-weight: bold;
font-size: 1.375rem;
}
.type-change {
margin-bottom: 2rem;
}
.type-change-title {
font-size: 0.75rem;
font-weight: 600;
margin-bottom: 0.5rem;
@media screen and (min-width: $tablet) {
font-size: 0.875rem;
}
}
ul {
list-style: none;
padding: 0;
margin: 0;
line-height: 1.2rem;
@media screen and (min-width: $tablet) {
line-height: unset;
}
li::before {
font-family: "Open sans", sans-serif;
content: "• ";
color: $yellow-dd-color;
font-size: 1.25rem;
vertical-align: sub;
}
}
&:last-of-type {
padding-bottom: 0;
margin-bottom: 0;
border: none;
}
&::before,
&::after {
position: absolute;
display: block;
top: 0;
}
&::before {
content: attr(data-date);
text-align: right;
font-weight: 600;
font-size: 0.75rem;
min-width: $date;
top: -30px;
left: -60px;
@media screen and (min-width: $tablet) {
left: ((($date * 0.6) + $spacing + $line + $dot + ($dotborder * 2)) * 1.5) * -1;
top: unset;
font-size: 0.875rem;
}
}
&::after {
box-shadow: 0 0 0 $dotborder white;
left: ($spacing + $line + ($dot * 0.35)) * -1;
background: $grey-dark-color;
border-radius: 50%;
height: $dot;
width: $dot;
content: "";
top: 5px;
}
&:first-of-type {
&::after {
background: $yellow-dd-color;
height: 13px;
width: 13px;
left: round(($spacing + $line + (13 * 0.35)) * -1);
}
}
}
}
import { Component, OnInit } from '@angular/core';
import { IPageHeaderInfo } from '../../../shared/models';
import { pageTitles } from '../../../../i18n/traductions';
import { AppRoutes } from '../../../routes';
import { Changelog } from '../../models';
import { ChangelogsService } from '../../services';
import { environment } from '../../../../environments/environment';
@Component({
selector: 'app-changelog',
templateUrl: './changelog.component.html',
styleUrls: ['./changelog.component.scss']
})
export class ChangelogComponent implements OnInit {
AppRoutes = AppRoutes;
pageHeaderInfo: IPageHeaderInfo = {
title: pageTitles.changelog,
hasBetaStyle: true,
};
changelogs: Changelog[];
constructor(
private _changelogService: ChangelogsService,
) { }
ngOnInit() {
this._changelogService.getChangelogs().subscribe((changelogs) => {
if (window.location.href.includes(environment.angularAppHost.en)) {
this.changelogs = changelogs.filter((changelog) => {
return changelog.language === 'EN';
});
} else {
this.changelogs = changelogs.filter((changelog) => {
return changelog.language === 'FR';
});
}
console.log(this.changelogs);
});
}
}
...@@ -6,6 +6,8 @@ import { CMSPostDetailComponent } from './cms-post-detail/cms-post-detail.compon ...@@ -6,6 +6,8 @@ import { CMSPostDetailComponent } from './cms-post-detail/cms-post-detail.compon
import { OrganizationsComponent } from './organizations/organizations.component'; import { OrganizationsComponent } from './organizations/organizations.component';
import { CreditsComponent } from './credits/credits.component'; import { CreditsComponent } from './credits/credits.component';
import { SiteMapComponent } from './site-map/site-map.component'; import { SiteMapComponent } from './site-map/site-map.component';
import { ChangelogComponent } from './changelog/changelog.component';
export { export {
CMSPageComponent, CMSPageComponent,
...@@ -15,6 +17,7 @@ export { ...@@ -15,6 +17,7 @@ export {
OrganizationsComponent, OrganizationsComponent,
CreditsComponent, CreditsComponent,
SiteMapComponent, SiteMapComponent,
ChangelogComponent,
}; };
// tslint:disable-next-line:variable-name // tslint:disable-next-line:variable-name
...@@ -26,4 +29,5 @@ export const EditorialisationComponents = [ ...@@ -26,4 +29,5 @@ export const EditorialisationComponents = [
OrganizationsComponent, OrganizationsComponent,
CreditsComponent, CreditsComponent,
SiteMapComponent, SiteMapComponent,
ChangelogComponent,
]; ];
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router'; import { Routes, RouterModule } from '@angular/router';
import { import {
HomeComponent, OrganizationsComponent, CMSPageComponent, CMSDraftsListComponent, SiteMapComponent, HomeComponent, OrganizationsComponent, CMSPageComponent, CMSDraftsListComponent, SiteMapComponent, ChangelogComponent,
} from './components'; } from './components';
import { CMSPostDetailComponent } from './components/cms-post-detail/cms-post-detail.component'; import { CMSPostDetailComponent } from './components/cms-post-detail/cms-post-detail.component';
import { PostDetailResolver } from './resolvers/post-detail.resolver'; import { PostDetailResolver } from './resolvers/post-detail.resolver';
...@@ -56,6 +56,14 @@ export const routes: Routes = [ ...@@ -56,6 +56,14 @@ export const routes: Routes = [
uri: AppRoutes.siteMap.uri, uri: AppRoutes.siteMap.uri,
}, },
}, },
{
path: AppRoutes.changelog.uri,
component: ChangelogComponent,
data: {
title: AppRoutes.changelog.title,
uri: AppRoutes.changelog.uri,
},
},
{ {
path: AppRoutes.legalNotices.uri, path: AppRoutes.legalNotices.uri,
component: CMSPageComponent, component: CMSPageComponent,
......
export interface IChangelog {
_id?: string;
version: string;
createDate: Date;
updateDate: Date;
language: string;
majorImprovements: string[];
minorImprovements: string[];
bugfixes: string[];
}
export class Changelog implements IChangelog {
_id?: string;
version: string;
createDate: Date;
updateDate: Date;
language: string;
majorImprovements: string[];
minorImprovements: string[];
bugfixes: string[];
constructor(changelog: IChangelog) {
this._id = changelog._id;
this.version = changelog.version;
this.createDate = changelog.createDate;
this.updateDate = changelog.updateDate;
this.language = changelog.language;
this.majorImprovements = changelog.majorImprovements;
this.minorImprovements = changelog.minorImprovements;
this.bugfixes = changelog.bugfixes;
}
}
\ No newline at end of file
export { IOrganization, Organization } from './organization.model'; export { IOrganization, Organization } from './organization.model';
export { ICredit, Credit } from './credit.model'; export { ICredit, Credit } from './credit.model';
export { IChangelog, Changelog } from './changelog.model';
export { IGhostContentResponse, CMSContent, ICMSMedia, ICMSCategory } from './cms-content.model'; export { IGhostContentResponse, CMSContent, ICMSMedia, ICMSCategory } from './cms-content.model';
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { IChangelog, Changelog } from '../models';
import { map } from 'rxjs/operators';
import { APP_CONFIG } from '../../core/services/app-config.service';
@Injectable()
export class ChangelogsService {
constructor(
private _httpClient: HttpClient,
) { }
getChangelogs() {
return this._httpClient.get<IChangelog[]>(`${APP_CONFIG.backendUrls.changelog}/changelog`).pipe(
map((changelogsBack) => {
const changelogs = [];
changelogsBack.forEach((changelog) => {
changelogs.push(new Changelog(changelog));
});
return changelogs;
}));
}
}
// import { HttpClient } from '@angular/common/http';
// import { ErrorService } from '../../core/services';
// import { of, throwError } from 'rxjs';
// import { EditorialisationService } from './editorialisation.service';
// import {
// CMSPage, ICMSPageResponse, CMSPost,
// IGhostPostResponse, ICMSMedia,
// } from '../models';
// import { environment } from '../../../environments/environment';
// import { ElasticsearchService } from '../../geosource/services';
// import { IElasticsearchResponse } from '../../geosource/models';
// import { IPostsESOptions } from '../../geosource/models/elasticsearch-options.model';
// describe('EditorialisationService', () => {
// let editorialisationService: EditorialisationService;
// let httpClientMock: HttpClient;
// let errorServiceMock: ErrorService;
// let elasticServiceMock: ElasticsearchService;
// const elasticResponseMock = {
// hits: {
// hits: [{
// _source: {},
// }],
// },
// };
// beforeEach(() => {
// httpClientMock = {
// get(url, options) {
// return of('');
// },
// } as HttpClient;
// errorServiceMock = {
// handleError(err, options) { return new Error(options.message); },
// } as ErrorService;
// elasticServiceMock = {
// getWPPosts: () => {
// return of(elasticResponseMock as IElasticsearchResponse);
// },
// getPosts: (options?: IPostsESOptions) => {
// return of(elasticResponseMock as IElasticsearchResponse);
// },
// } as ElasticsearchService;
// editorialisationService = new EditorialisationService(errorServiceMock, httpClientMock, elasticServiceMock);
// });
// describe('getPage()', () => {
// it('should return a cms page', () => {
// // Given
// const page = {
// content: {
// rendered: 'Page content',
// },
// status: 'Published',
// title: {
// rendered: 'Page title',
// },
// } as ICMSPageResponse;
// const getSpy = spyOn(httpClientMock, 'get').and.callFake(() => {
// return of([page]);
// });
// // When
// const observable = editorialisationService.getPage('1');
// // Then
// expect(observable).toBeTruthy();
// expect(getSpy).toHaveBeenCalled();
// observable.subscribe((result) => {
// expect(result).toEqual(new CMSPage(page));
// });
// });
// it('should return null when cms return an empty array', () => {
// // Given
// const getSpy = spyOn(httpClientMock, 'get').and.callFake(() => {
// return of([]);
// });
// // When
// const observable = editorialisationService.getPage('1');
// // Then
// expect(observable).toBeTruthy();
// expect(getSpy).toHaveBeenCalled();
// observable.subscribe((result) => {
// expect(result).toBe(null);
// });
// });
// it('should call the errorService if an error occurs', () => {
// // Given
// const error = new Error('Fake Error');
// const getSpy = spyOn(httpClientMock, 'get').and.callFake(() => {
// return throwError(error);
// });
// const handleErrorSpy = spyOn(errorServiceMock, 'handleError').and.callThrough();
// // When
// const observable = editorialisationService.getPage('1');
// // Then
// expect(observable).toBeTruthy();
// expect(getSpy).toHaveBeenCalled();
// observable.subscribe(
// () => { },
// (err) => {
// expect(handleErrorSpy).toHaveBeenCalledWith(error, jasmine.any(Object));
// },
// );
// });
// });
// describe('getPostsList()', () => {
// let post;
// beforeEach(() => {
// post = {
// uuid: '1',
// title: 'test post',
// status: 'published',
// categories: ['applications'],
// publicationDate: '2018-05-02T08:58:09',
// content: 'Post content',
// featuredMedia: 'url',
// excerpt: '',
// } as IGhostPostResponse;
// });
// it('should return a list of posts', () => {
// // Given
// elasticResponseMock.hits.hits[0]._source = post;
// // When
// const observable = editorialisationService.getPostsList();
// // Then
// expect(observable).toBeTruthy();
// observable.subscribe((postsList) => {
// expect(postsList.length).toBe(1);
// expect(postsList[0] instanceof CMSPost).toBeTruthy();
// });
// });
// });
// describe('getPostById()', () => {
// let post;
// beforeEach(() => {
// post = {
// uuid: '1',
// title: 'test post',
// status: 'published',
// categories: ['applications'],
// publicationDate: '2018-05-02T08:58:09',
// content: 'Post content',
// featuredMedia: 'url',
// excerpt: '',
// } as IGhostPostResponse;
// });
// it('should return a CMS post', () => {
// // Given
// elasticResponseMock.hits.hits[0]._source = post;
// // When
// const observable = editorialisationService.getPostById(post.id);
// // Then
// expect(observable).toBeTruthy();
// observable.subscribe((res) => {
// expect(res instanceof CMSPost).toBeTruthy();
// });
// });
// it('should add the categories name', () => {
// // Given
// elasticResponseMock.hits.hits[0]._source = post;
// // When
// const observable = editorialisationService.getPostById('0');
// // Then
// observable.subscribe((result) => {
// expect(result.categories[0]).toBe('applications');
// });
// });
// });
// describe('getPostVideoHome()', () => {
// it('should return the post containing the video to be displayed on the home page', () => {
// // Given
// const post = {
// uuid: '1',
// title: 'test post',
// status: 'published',
// categories: ['applications', environment.cmsContent.categoryUniqueContent],
// publicationDate: '2018-05-02T08:58:09',
// content: 'Post content',
// featuredMedia: 'url',
// excerpt: '',
// } as IGhostPostResponse;
// elasticResponseMock.hits.hits[0]._source = post;
// // When
// const observable = editorialisationService.getPostVideoHome();
// // Then
// expect(observable).toBeTruthy();
// observable.subscribe((result) => {
// expect(result).toEqual(new CMSPost(post));
// });
// });
// });
// });
import { EditorialisationService } from './editorialisation.service'; import { EditorialisationService } from './editorialisation.service';
import { OrganizationsService } from './organizations.service'; import { OrganizationsService } from './organizations.service';
import { CreditsService } from './credits.service'; import { CreditsService } from './credits.service';
import { ChangelogsService } from './changelog.service';
export { export {
EditorialisationService, EditorialisationService,
OrganizationsService, OrganizationsService,
CreditsService, CreditsService,
ChangelogsService,
}; };
// tslint:disable-next-line:variable-name // tslint:disable-next-line:variable-name
...@@ -13,4 +15,5 @@ export const EditorialisationServices = [ ...@@ -13,4 +15,5 @@ export const EditorialisationServices = [
EditorialisationService, EditorialisationService,
OrganizationsService, OrganizationsService,
CreditsService, CreditsService,
ChangelogsService,
]; ];
// tslint:disable-next-line:variable-name // tslint:disable-next-line:variable-name
export const AppRoutes = { export const AppRoutes = {
root: { root: {
url: "", url: '',
title: { title: {
fr: "Données métropolitaines du Grand Lyon", fr: 'Données métropolitaines du Grand Lyon',
en: "Métropolitan data of the Grand Lyon" en: 'Métropolitan data of the Grand Lyon',
} },
}, },
signin: { signin: {
uri: "login", uri: 'login',
title: { title: {
fr: "Connexion", fr: 'Connexion',
en: "Log In" en: 'Log In',
} },
}, },
signup: { signup: {
uri: "sign-up", uri: 'sign-up',
title: { title: {
fr: "Inscription", fr: 'Inscription',
en: "Sign up" en: 'Sign up',
} },
}, },
passwordForgotten: { passwordForgotten: {
uri: "mot-de-passe-oublie", uri: 'mot-de-passe-oublie',
title: { title: {
fr: "Mot de passe oublié", fr: 'Mot de passe oublié',
en: "Forgotten password" en: 'Forgotten password',
} },
}, },
passwordReset: { passwordReset: {
uri: "reinitialiser-mon-mot-de-passe", uri: 'reinitialiser-mon-mot-de-passe',
title: { title: {
fr: "Reinitialiser mon mot de passe", fr: 'Reinitialiser mon mot de passe',
en: "Reset my password" en: 'Reset my password',
} },
}, },
accessManagement: { accessManagement: {
uri: "gerer-les-acces", uri: 'gerer-les-acces',
title: { title: {
fr: "Gérer les accès", fr: 'Gérer les accès',
en: "Manage accesses" en: 'Manage accesses',
} },
}, },
userServices: { userServices: {
uri: "mes-acces", uri: 'mes-acces',
title: { title: {
fr: "Mes accès aux données", fr: 'Mes accès aux données',
en: "Data accesses" en: 'Data accesses',
} },
}, },
availableData: { availableData: {
uri: "donnees-disponibles", uri: 'donnees-disponibles',
title: { title: {
fr: "Données disponibles", fr: 'Données disponibles',
en: "Available data" en: 'Available data',
} },
}, },
userProfil: { userProfil: {
uri: "mon-profil", uri: 'mon-profil',
title: { title: {
fr: "Mon profil", fr: 'Mon profil',
en: "My profile" en: 'My profile',
} },
}, },
userInfo: { userInfo: {
uri: "mes-informations", uri: 'mes-informations',
title: { title: {
fr: "Mes informations", fr: 'Mes informations',
en: "My information" en: 'My information',
} },
}, },
userPasswordUpdate: { userPasswordUpdate: {
uri: "modifier-mon-mot-de-passe", uri: 'modifier-mon-mot-de-passe',
title: { title: {
fr: "Modifier mon mot de passe", fr: 'Modifier mon mot de passe',
en: "Change my password" en: 'Change my password',
} },
}, },
home: { home: {
uri: "accueil", uri: 'accueil',
title: { title: {
fr: "Accueil", fr: 'Accueil',
en: "Home" en: 'Home',
} },
}, },
approach: { approach: {
uri: "demarche", uri: 'demarche',
title: { title: {
fr: "Démarche", fr: 'Démarche',
en: "Approach" en: 'Approach',
} },
}, },
documentation: { documentation: {
uri: "documentation", uri: 'documentation',
title: { title: {
fr: "Documentation", fr: 'Documentation',
en: "Documentation" en: 'Documentation',
} },
}, },
credits: { credits: {
uri: "credits", uri: 'credits',
title: { title: {
fr: "Crédits", fr: 'Crédits',
en: "Credits" en: 'Credits',
} },
}, },
cgu: { cgu: {
uri: "cgu", uri: 'cgu',
title: { title: {
fr: "Conditions générales d'utilisation", fr: 'Conditions générales d\'utilisation',
en: "Terms of use" en: 'Terms of use',
} },
}, },
beginners: { beginners: {
uri: "debutants", uri: 'debutants',
title: { title: {
fr: "Débutants", fr: 'Débutants',
en: "Beginners" en: 'Beginners',
} },
}, },
accessibility: { accessibility: {
uri: "accessibilite", uri: 'accessibilite',
title: { title: {
fr: "Accessibilité", fr: 'Accessibilité',
en: "Accessibility" en: 'Accessibility',
} },
}, },
contact: { contact: {
uri: "contact", uri: 'contact',
title: { title: {
fr: "Contact", fr: 'Contact',
en: "Contact" en: 'Contact',
} },
}, },
siteMap: { siteMap: {
uri: "plan-du-site", uri: 'plan-du-site',
title: { title: {
fr: "Plan du site", fr: 'Plan du site',
en: "Site map" en: 'Site map',
} },
},
changelog: {
uri: 'dernieres-evolutions',
title: {
fr: 'Dernières évolutions',
en: 'Last changes',
},
}, },
dataProducers: { dataProducers: {
uri: "producteurs-de-donnees", uri: 'producteurs-de-donnees',
title: { title: {
fr: "Producteurs de données", fr: 'Producteurs de données',
en: "Data producers" en: 'Data producers',
} },
},
actors: {
uri: 'acteurs',
title: {
fr: 'Acteurs',
en: 'Actors',
},
}, },
legalNotices: { legalNotices: {
uri: "mentions-legales", uri: 'mentions-legales',
title: { title: {
fr: "Mentions légales", fr: 'Mentions légales',
en: "Legal notices" en: 'Legal notices',
} },
}, },
articles: { articles: {
uri: "articles", uri: 'articles',
title: { title: {
fr: "Articles", fr: 'Articles',
en: "Articles" en: 'Articles',
} },
}, },
drafts: { drafts: {
uri: "drafts", uri: 'drafts',
title: { title: {
fr: "Brouillons", fr: 'Brouillons',
en: "Drafts" en: 'Drafts',
} },
}, },
research: { research: {
uri: "recherche", uri: 'recherche',
title: { title: {
fr: "Recherche", fr: 'Recherche',
en: "Research" en: 'Research',
} },
}, },
datasets: { datasets: {
uri: "datasets", uri: 'datasets',
title: { title: {
fr: "Jeux de données", fr: 'Jeux de données',
en: "Datasets" en: 'Datasets',
} },
}, },
info: { info: {
uri: "info", uri: 'info',
title: { title: {
fr: "Information", fr: 'Information',
en: "Information" en: 'Information',
} },
}, },
data: { data: {
uri: "donnees", uri: 'donnees',
title: { title: {
fr: "Données", fr: 'Données',
en: "Data" en: 'Data',
} },
}, },
map: { map: {
uri: "carte", uri: 'carte',
title: { title: {
fr: "Carte", fr: 'Carte',
en: "Map" en: 'Map',
} },
}, },
resources: { resources: {
uri: "resources", uri: 'resources',
title: { title: {
fr: "Ressources", fr: 'Ressources',
en: "Resources" en: 'Resources',
} },
}, },
beta: { beta: {
uri: "pourquoi-une-version-beta", uri: 'pourquoi-une-version-beta',
title: { title: {
fr: "Pourquoi une version bêta ?", fr: 'Pourquoi une version bêta ?',
en: "Why a beta version?" en: 'Why a beta version?',
} },
}, },
error: { error: {
uri: "error", uri: 'error',
title: { title: {
fr: "Erreur", fr: 'Erreur',
en: "Error" en: 'Error',
} },
}, },
page404: { page404: {
uri: "page-404", uri: 'page-404',
title: { title: {
fr: "Page non trouvée", fr: 'Page non trouvée',
en: "Page not found" en: 'Page not found',
} },
} },
}; };
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
"backendUrls": { "backendUrls": {
"organizations": "http://localhost:3000/organizations", "organizations": "http://localhost:3000/organizations",
"resources": "http://localhost:3003", "resources": "http://localhost:3003",
"credits": "http://localhost:3005/credits", "changelog": "http://localhost:3007",
"auth": "https://kong-dev.alpha.grandlyon.com/authentication/", "auth": "https://kong-dev.alpha.grandlyon.com/authentication/",
"middlewareLegacyAuth": "https://kong-dev.alpha.grandlyon.com/middleware-legacy/", "middlewareLegacyAuth": "https://kong-dev.alpha.grandlyon.com/middleware-legacy/",
"email": "http://localhost:3001", "email": "http://localhost:3001",
......
...@@ -63,6 +63,10 @@ ...@@ -63,6 +63,10 @@
<source>RSS Feed (new window)</source> <source>RSS Feed (new window)</source>
<target>RSS Feed (new window)</target> <target>RSS Feed (new window)</target>
</trans-unit> </trans-unit>
<trans-unit id="footer.changelog" datatype="html">
<source>Last changes</source>
<target>Last changes</target>
</trans-unit>
<trans-unit id="footer.facebook" datatype="html"> <trans-unit id="footer.facebook" datatype="html">
<source>Facebook (new window)</source> <source>Facebook (new window)</source>
<target>Facebook (new window)</target> <target>Facebook (new window)</target>
...@@ -527,6 +531,36 @@ ...@@ -527,6 +531,36 @@
<source>Go back to home page</source> <source>Go back to home page</source>
<target>Go back to home page</target> <target>Go back to home page</target>
</trans-unit> </trans-unit>
<trans-unit id="changelog.description" datatype="html">
<source>Your recommendations to improve this portal are regularly integrated.
Here is the list of the last evolutions of the portal. If you wish to contribute to the optimization of the portal, do not hesitate to </source>
<target>Your recommendations to improve this portal are regularly integrated.
Here is the list of the last evolutions of the portal. If you wish to contribute to the optimization of the portal, do not hesitate to </target>
</trans-unit>
<trans-unit id="changelog.major" datatype="html">
<source>Major improvements</source>
<target>Major improvements</target>
</trans-unit>
<trans-unit id="changelog.minor" datatype="html">
<source>Minor improvements</source>
<target>Minor improvements</target>
</trans-unit>
<trans-unit id="changelog.bugfixes" datatype="html">
<source>Bug fixes</source>
<target>Bug fixes</target>
</trans-unit>
<trans-unit id="changelog.lastupdate" datatype="html">
<source>Last update</source>
<target>Last update</target>
</trans-unit>
<trans-unit id="changelog.lastupdate.mobile1" datatype="html">
<source>Last</source>
<target>Last</target>
</trans-unit>
<trans-unit id="changelog.lastupdate.mobile2" datatype="html">
<source>update</source>
<target>update</target>
</trans-unit>
<trans-unit id="organizations.description" datatype="html"> <trans-unit id="organizations.description" datatype="html">
<source>The Lyon Metropolitan Area has opened its portal to all stakeholders in the region who wish to distribute their data, in open data or restricted access. If you wish to make your data available on this shared platform, do not hesitate to </source> <source>The Lyon Metropolitan Area has opened its portal to all stakeholders in the region who wish to distribute their data, in open data or restricted access. If you wish to make your data available on this shared platform, do not hesitate to </source>
<target>The Lyon Metropolitan Area has opened its portal to all stakeholders in the region who wish to distribute their data, in open data or restricted access. If you wish to make your data available on this shared platform, do not hesitate to </target> <target>The Lyon Metropolitan Area has opened its portal to all stakeholders in the region who wish to distribute their data, in open data or restricted access. If you wish to make your data available on this shared platform, do not hesitate to </target>
......
...@@ -31,6 +31,10 @@ ...@@ -31,6 +31,10 @@
<source>Credits</source> <source>Credits</source>
<target>Crédits</target> <target>Crédits</target>
</trans-unit> </trans-unit>
<trans-unit id="footer.changelog" datatype="html">
<source>Last changes</source>
<target>Dernières évolutions</target>
</trans-unit>
<trans-unit id="footer.cgu" datatype="html"> <trans-unit id="footer.cgu" datatype="html">
<source>Terms of use</source> <source>Terms of use</source>
<target>Conditions générales d'utilisation</target> <target>Conditions générales d'utilisation</target>
...@@ -539,6 +543,36 @@ données sont en accès restreint. Pour consulter ou utiliser l’intégralité ...@@ -539,6 +543,36 @@ données sont en accès restreint. Pour consulter ou utiliser l’intégralité
<source>The Lyon Metropolitan Area has opened its portal to all stakeholders in the region who wish to distribute their data, in open data or restricted access. If you wish to make your data available on this shared platform, do not hesitate to </source> <source>The Lyon Metropolitan Area has opened its portal to all stakeholders in the region who wish to distribute their data, in open data or restricted access. If you wish to make your data available on this shared platform, do not hesitate to </source>
<target>La Métropole de Lyon a ouvert son portail à tous les acteurs du territoire qui souhaitent diffuser leurs données, <target>La Métropole de Lyon a ouvert son portail à tous les acteurs du territoire qui souhaitent diffuser leurs données,
en open data ou en accès restreint. Si vous souhaitez mettre à disposition vos données sur cette plateforme mutualisée, n’hésitez pas à </target> en open data ou en accès restreint. Si vous souhaitez mettre à disposition vos données sur cette plateforme mutualisée, n’hésitez pas à </target>
</trans-unit>
<trans-unit id="changelog.description" datatype="html">
<source>Your recommendations to improve this portal are regularly integrated.
Here is the list of the last evolutions of the portal. If you wish to contribute to the optimization of the portal, do not hesitate to </source>
<target>Vos recommandations afin d’améliorer ce portail sont régulièrement intégrées.
Voici la liste des dernières évolutions du portail. Si vous souhaitez contribuer à l’optimisation du portail, n’hésitez pas à </target>
</trans-unit>
<trans-unit id="changelog.lastupdate" datatype="html">
<source>Last update</source>
<target>Dernière mise-à-jour</target>
</trans-unit>
<trans-unit id="changelog.major" datatype="html">
<source>Major improvements</source>
<target>Changements majeurs</target>
</trans-unit>
<trans-unit id="changelog.minor" datatype="html">
<source>Minor improvements</source>
<target>Changements mineurs</target>
</trans-unit>
<trans-unit id="changelog.bugfixes" datatype="html">
<source>Bug fixes</source>
<target>Corrections de bug</target>
</trans-unit>
<trans-unit id="changelog.lastupdate.mobile1" datatype="html">
<source>Last</source>
<target>Dernière</target>
</trans-unit>
<trans-unit id="changelog.lastupdate.mobile2" datatype="html">
<source>update</source>
<target>mise-à-jour</target>
</trans-unit> </trans-unit>
<trans-unit id="organizations.contactus" datatype="html"> <trans-unit id="organizations.contactus" datatype="html">
<source>contact us</source> <source>contact us</source>
......
...@@ -237,6 +237,8 @@ export const subjects = [ ...@@ -237,6 +237,8 @@ export const subjects = [
export const pageTitles = { export const pageTitles = {
siteMap: 'Plan du site', siteMap: 'Plan du site',
dataProducers: 'Producteurs de données', dataProducers: 'Producteurs de données',
changelog: 'Dernières évolutions',
actors: 'Les acteurs',
signup: 'Inscription', signup: 'Inscription',
login: 'Connexion', login: 'Connexion',
passwordReset: 'Réinitialisation du mot de passe', passwordReset: 'Réinitialisation du mot de passe',
...@@ -284,4 +286,4 @@ export const cmsPageLink = { ...@@ -284,4 +286,4 @@ export const cmsPageLink = {
title: 'Voir la documentation', title: 'Voir la documentation',
imgAlt: 'Picto documentation', imgAlt: 'Picto documentation',
}, },
}; };
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment