diff --git a/src/app/core/services/app-config.service.ts b/src/app/core/services/app-config.service.ts index dc1bff9035c10e613cbbd0a34d5511288a9e8c25..8a59a13488dcf4821dc365c35bd16889223f520b 100644 --- a/src/app/core/services/app-config.service.ts +++ b/src/app/core/services/app-config.service.ts @@ -22,6 +22,16 @@ export class AppConfig { reuses: boolean; partners: boolean; }; + licenses: License[]; +} + +class License { + matchingKeys: string[]; + nameFr: string; + nameEn: string; + acronymFr: string; + acronymEn: string; + url: string; } export let APP_CONFIG: AppConfig = new AppConfig(); diff --git a/src/app/dataset-detail/components/dataset-api/dataset-api.component.scss b/src/app/dataset-detail/components/dataset-api/dataset-api.component.scss index b403a52537b793853c365f6bb3f7e2428e94a277..0a0b1a2b6541b441b209e82314cb9ed5858cd11e 100644 --- a/src/app/dataset-detail/components/dataset-api/dataset-api.component.scss +++ b/src/app/dataset-detail/components/dataset-api/dataset-api.component.scss @@ -86,12 +86,7 @@ h4 { font-size: 1rem; @media screen and (min-width: $tablet) { - font-size: 1.25rem; - padding-bottom: 1.5rem; padding-left: 1.5rem; - padding-top: 1.5rem; - - } } } diff --git a/src/app/dataset-detail/components/dataset-api/resources-queryable/resource-queryable/resource-queryable.component.scss b/src/app/dataset-detail/components/dataset-api/resources-queryable/resource-queryable/resource-queryable.component.scss index 8e11e2bfa510362314fc63aa10d03afc5ea1bed7..d4b9effad6e84b91052027a65bef1d7a8270ca24 100644 --- a/src/app/dataset-detail/components/dataset-api/resources-queryable/resource-queryable/resource-queryable.component.scss +++ b/src/app/dataset-detail/components/dataset-api/resources-queryable/resource-queryable/resource-queryable.component.scss @@ -16,7 +16,7 @@ margin-bottom: 1rem; span { - font-size: 1.125rem; + font-size: 1rem; font-weight: 600; line-height: 1; word-break: break-all; diff --git a/src/app/dataset-detail/components/dataset-api/resources-queryable/resources-queryable.component.scss b/src/app/dataset-detail/components/dataset-api/resources-queryable/resources-queryable.component.scss index 6cc62416383c687493029a39456cdf141cb05d25..5afad27caec97f74fddc2a75395c21ba5dc565ba 100644 --- a/src/app/dataset-detail/components/dataset-api/resources-queryable/resources-queryable.component.scss +++ b/src/app/dataset-detail/components/dataset-api/resources-queryable/resources-queryable.component.scss @@ -61,10 +61,6 @@ .resource-information { span { font-size: 0.875rem; - - @media screen and (min-width: $tablet) { - font-size: 1rem; - } } } diff --git a/src/app/dataset-detail/components/dataset-detail/dataset-detail.component.ts b/src/app/dataset-detail/components/dataset-detail/dataset-detail.component.ts index 7ecaea88402bea3bcfff2323cb24a6128d372125..417cc0739ec6fa1be74e14926ef427dd8721dc8b 100644 --- a/src/app/dataset-detail/components/dataset-detail/dataset-detail.component.ts +++ b/src/app/dataset-detail/components/dataset-detail/dataset-detail.component.ts @@ -4,6 +4,7 @@ import { ActivatedRoute, Router, Scroll } from '@angular/router'; import { Subscription } from 'rxjs'; import { filter } from 'rxjs/operators'; import { ViewportScroller } from '../../../../../node_modules/@angular/common'; +import { environment } from '../../../../environments/environment'; import { datatsetDataRepresentationType, geosource, reusesTypes } from '../../../../i18n/traductions'; import { NavigationHistoryService } from '../../../core/services'; import { AppRoutes } from '../../../routes'; @@ -73,8 +74,11 @@ export class DatasetDetailComponent implements OnInit, OnDestroy { get datasetDataNumber() { return this._datasetDetailService.datasetDataNumber; } - get datasetLicense(){ - return this.metadata.license; + get datasetLicense() { + if (window.location.href.includes(environment.angularAppHost.en)) { + return this.metadata.license.acronymEn; + } + return this.metadata.license.acronymFr; } get datasetUpdateFrequency() { @@ -179,8 +183,8 @@ export class DatasetDetailComponent implements OnInit, OnDestroy { [].concat(...this._datasetDetailService.dataset.reuses.map(reuse => reuse.reuseTypes)) ), ] - // Replace the keys by the labels - .map(e => reusesTypes[e]); + // Replace the keys by the labels + .map(e => reusesTypes[e]); } if (this._datasetDetailService.dataset.relatedNews.length > 0) { diff --git a/src/app/dataset-detail/components/dataset-info/dataset-info.component.html b/src/app/dataset-detail/components/dataset-info/dataset-info.component.html index 9c281452aa286066d53ac8491156f651bb1f655a..a808d7a176e35bae1b332bcf9ac6d2ff487f9db6 100644 --- a/src/app/dataset-detail/components/dataset-info/dataset-info.component.html +++ b/src/app/dataset-detail/components/dataset-info/dataset-info.component.html @@ -20,9 +20,14 @@ <span class="info-title" i18n="@@dataset.info.legalContraints"> Terms of use </span> - <a class="link" [href]="licenceUrl" target="_blank" *ngIf="licenceUrl"> - <span>{{ metadata.legalConstraints && metadata.legalConstraints.length > 0 ? metadata.legalConstraints[0] : '' }}</span> + <a class="link" [href]="license.url" target="_blank" *ngIf="license.url; else simpleLicenseName"> + <span>{{ license.nameFr }}</span><br> + <span>{{ license.nameEn }}</span> </a> + + <ng-template #simpleLicenseName> + <span>{{ license.nameFr }}</span> + </ng-template> </div> <app-info-partners class="mobile-section"></app-info-partners> @@ -151,10 +156,10 @@ <span class="keywords" *ngFor="let keyword of keywords">{{ keyword }}</span> </div> </div> - <div class="rightside"> - <app-info-summary></app-info-summary> - <app-info-partners></app-info-partners> - <app-info-contact></app-info-contact> - - </div> - </div> \ No newline at end of file + <div class="rightside"> + <app-info-summary></app-info-summary> + <app-info-partners></app-info-partners> + <app-info-contact></app-info-contact> + + </div> +</div> \ No newline at end of file diff --git a/src/app/dataset-detail/components/dataset-info/dataset-info.component.scss b/src/app/dataset-detail/components/dataset-info/dataset-info.component.scss index 6fc0ad77fac049a5cd0bd422791d07f6b3c445aa..a357d037d2731d6a713fbd32a9a3c1346be45455 100644 --- a/src/app/dataset-detail/components/dataset-info/dataset-info.component.scss +++ b/src/app/dataset-detail/components/dataset-info/dataset-info.component.scss @@ -12,24 +12,30 @@ p { background: #F2F2F2; display: flex; flex-direction: row; - .leftside{ - width:65%; - @media screen and(max-width: $tablet){ - width:100%; + + .leftside { + width: 65%; + + @media screen and(max-width: $tablet) { + width: 100%; } } - .rightside{ - width:35%; - margin-left:1rem; + + .rightside { + width: 35%; + margin-left: 1rem; display: flex; flex-direction: column; - @media screen and(max-width: $tablet){ + + @media screen and(max-width: $tablet) { display: none; } } - .mobile-section{ + + .mobile-section { display: none; - @media screen and(max-width: $tablet){ + + @media screen and(max-width: $tablet) { display: block; } } @@ -37,15 +43,15 @@ p { .info-section { white-space: pre-line; - padding:1.7rem 2rem; + padding: 1.7rem 2rem; background: white; box-shadow: 0px 6px 12px rgba(129, 128, 128, 0.1); border-radius: 8px; - + } .info-section:not(:first-of-type) { - margin-top:1rem; + margin-top: 1rem; } .info-subsection { @@ -96,30 +102,34 @@ p { } } -.categorie{ +.categorie { background: $blue-color; border-radius: 22px; - color:white; - margin:0 0.8rem 0 0; + color: white; + margin: 0 0.8rem 0 0; padding: 0.2rem 1.5rem 0.4rem 1.5rem; display: inline-block; - margin-bottom:0.7rem; + margin-bottom: 0.7rem; } -.keywords{ + +.keywords { background: $grey-background-color; border-radius: 22px; - color:$grey-dark-color; - margin:0 0.8rem 0 0; + color: $grey-dark-color; + margin: 0 0.8rem 0 0; padding: 0.2rem 1.5rem 0.4rem 1.5rem; display: inline-block; - margin-bottom:0.7rem; + margin-bottom: 0.7rem; } + .link { - display:inline-flex; + display: inline-flex; flex-direction: column; + line-height: 0.875; } + .link span { - font-size:0.8rem; + font-size: 0.875rem; text-decoration: underline; color: inherit; @@ -145,13 +155,15 @@ p { margin-top: 1em; } } -.geo-image{ - min-width:150px; - max-width:200px; + +.geo-image { + min-width: 150px; + max-width: 200px; } -.geo-thumbnail{ - img{ - height:100px; + +.geo-thumbnail { + img { + height: 100px; width: 130px; object-fit: cover; border: 1px solid $grey-super-light-color; diff --git a/src/app/dataset-detail/components/dataset-info/dataset-info.component.ts b/src/app/dataset-detail/components/dataset-info/dataset-info.component.ts index 6d2f375fc540ce14512a172bdf9e4a0cf18e90ab..c8f2c4f8869276ea0c522362935cb6aca3cf346b 100644 --- a/src/app/dataset-detail/components/dataset-info/dataset-info.component.ts +++ b/src/app/dataset-detail/components/dataset-info/dataset-info.component.ts @@ -2,7 +2,7 @@ import { Component, OnDestroy, OnInit } from '@angular/core'; import { Subscription } from 'rxjs'; import { datatsetDataRepresentationType } from '../../../../i18n/traductions'; import { AppRoutes } from '../../../routes'; -import { Metadata, typesMetadata } from '../../../shared/models'; +import { License, Metadata, typesMetadata } from '../../../shared/models'; import { DatasetDetailService } from '../../services'; @Component({ @@ -97,10 +97,8 @@ export class DatasetInfoComponent implements OnInit, OnDestroy { return this.metadata.getCategories(); } - get licenceUrl(): string { - const license = this.metadata.link.find(l => l.name.includes('Licence')); - const url = license && license.url ? license.url : null; - return url; + get license(): License { + return this.metadata.license; } get keywords() { diff --git a/src/app/dataset-detail/components/dataset-table-map/dataset-table-map.component.html b/src/app/dataset-detail/components/dataset-table-map/dataset-table-map.component.html index a4324b51aec3bc5569a9629f9a566c6de95f7578..4a69afdd069ead09a3c72e3cd8584376890c7f39 100644 --- a/src/app/dataset-detail/components/dataset-table-map/dataset-table-map.component.html +++ b/src/app/dataset-detail/components/dataset-table-map/dataset-table-map.component.html @@ -9,15 +9,15 @@ (clickOutside)="closeColumsMenu()"> <div class="dropdown-trigger"> <button class="button button-with-icon" aria-haspopup="true" aria-controls="dropdown-menu" - (click)="toogleColumsMenu()" i18n-aria-label="dataset.data.displayProperties" aria-label="Display the properties"> + (click)="toogleColumsMenu()" i18n-aria-label="@@dataset.data.displayProperties" + aria-label="Display the properties"> </button> </div> <div class="dropdown-menu" id="dropdown-menu" role="menu"> <div class="dropdown-content has-text-left"> <div class="field dropdown-item" *ngFor="let prop of properties"> - <input class="is-checkradio has-error is-small" [disabled]="" - [id]="prop" type="checkbox" name="selectedColumns" - [checked]="columnIsSelected(prop) !== -1" (click)="toogleColumn(prop)"> + <input class="is-checkradio has-error is-small" [disabled]="" [id]="prop" type="checkbox" + name="selectedColumns" [checked]="columnIsSelected(prop) !== -1" (click)="toogleColumn(prop)"> <label [for]="prop">{{ prop }}</label> </div> </div> @@ -110,7 +110,7 @@ <div class="field has-addons has-addons-centered is-centered"> <div class="control research-input" [ngClass]="{'has-icons-right': searchInput.value}"> <input type="text" class="input" [formControl]="searchInput" placeholder="Filter records" - i18-aria-label="@@dataset.data.filterReccordPlaceholder" aria-label="Filter records" + i18-aria-label="@@dataset.data.filterReccordPlaceholder" aria-label="Filter records" i18n-placeholder="@@dataset.data.filterReccordPlaceholder" (keydown.enter)="searchChanged()" /> <span class="icon is-small is-right reset-research-icon" *ngIf="searchInput.value" (click)="resetResearch()"> diff --git a/src/app/datasets/components/filter-list/filter-detail/filter-detail.component.scss b/src/app/datasets/components/filter-list/filter-detail/filter-detail.component.scss index 197643b7955b009f4a29dc2062f12b72eb8db5e4..d71ae77109b36efed61bee6ecf2e12ea476e9c83 100644 --- a/src/app/datasets/components/filter-list/filter-detail/filter-detail.component.scss +++ b/src/app/datasets/components/filter-list/filter-detail/filter-detail.component.scss @@ -86,17 +86,17 @@ aside.is-active { .icon-toggle-sub { cursor: pointer; - svg { - width: 0.8rem; - height: 0.6rem; - position: relative; - left: -5px; - transform: rotate(-90deg); - } - - svg.is-active { - transform: rotate(0deg); - } + svg { + width: 0.8rem; + height: 0.6rem; + position: relative; + left: -5px; + transform: rotate(-90deg); + } + + svg.is-active { + transform: rotate(0deg); + } } .column { @@ -155,5 +155,5 @@ a.link-without-decoration:hover { width: 0.3069375rem; height: 0.4911rem; top: 0.5rem; - left: 0.4rem; + left: 0.35rem; } diff --git a/src/app/shared/models/index.ts b/src/app/shared/models/index.ts index a8077c3fc086713fcce66d91fd9d0c253322ea5d..e2e9fd0c7d92a3321b4c12a71bb7e47c382c2aa3 100644 --- a/src/app/shared/models/index.ts +++ b/src/app/shared/models/index.ts @@ -5,6 +5,6 @@ export { Dataset, IDataset, IDatasetFields } from './dataset.model'; export { EditorialMetadata, IEditorialMetadata } from './editorial-metadata.model'; export { Highlights } from './highlights.model'; // tslint:disable-next-line: max-line-length -export { IMetadata, IMetadataLink, IParentDataset, IResponsibleParty, linkFormats, Metadata, typesMetadata } from './metadata.model'; +export { IMetadata, IMetadataLink, IParentDataset, IResponsibleParty, License, linkFormats, Metadata, typesMetadata } from './metadata.model'; export { PaginatorOptions } from './paginator-options.model'; diff --git a/src/app/shared/models/metadata.model.ts b/src/app/shared/models/metadata.model.ts index be8db2d6d9c19b4e55b248b40bf83559784c68b6..78003e8df5f68eb3ae1572647729360221749867 100644 --- a/src/app/shared/models/metadata.model.ts +++ b/src/app/shared/models/metadata.model.ts @@ -1,4 +1,5 @@ import { geosource } from '../../../i18n/traductions'; +import { APP_CONFIG } from '../../core/services/app-config.service'; export interface IMetadata { 'dataset_id'?: string; @@ -117,6 +118,31 @@ export interface IParentDataset { imageUrl?: string; } +export interface ILicense { + matchingKeys?: string[]; + nameFr?: string; + nameEn?: string; + acronymFr?: string; + acronymEn?: string; + url?: string; +} + +export class License { + nameFr: string; + nameEn: string; + acronymFr: string; + acronymEn: string; + url: string; + + constructor(data: ILicense) { + this.nameFr = data && data.nameFr ? data.nameFr : null; + this.nameEn = data && data.nameEn ? data.nameEn : null; + this.acronymFr = data && data.acronymFr ? data.acronymFr : null; + this.acronymEn = data && data.acronymEn ? data.acronymEn : null; + this.url = data && data.url ? data.url : null; + } +} + export class Metadata { 'dataset_id'?: string; 'dataset_index'?: string; @@ -131,7 +157,7 @@ export class Metadata { 'topic_category': string[]; highlight: any; legalConstraints: string[]; - license: string; + license: License; rights: string[]; 'total_documents': number; lineage: string; @@ -190,7 +216,7 @@ export class Metadata { this.topic_category = data.topic_category; this.highlight = data.highlight; this.legalConstraints = data.legalConstraints; - this.license = data.license; + this.license = this.setLicense(data.license); this.rights = data.rights; this.total_documents = data.total_documents; this.lineage = data.lineage; @@ -240,4 +266,15 @@ export class Metadata { return category.labelCategory; }); } + + private setLicense(licenseLabel): License { + + const matchingLicense = APP_CONFIG.licenses.find(licence => licence.matchingKeys.find(item => licenseLabel.includes(item))); + + const license = matchingLicense ? new License(matchingLicense) : new License( + { nameFr: licenseLabel, nameEn: licenseLabel, acronymFr: licenseLabel, acronymEn: licenseLabel } + ); + + return license; + } } diff --git a/src/assets/config/config.template.json b/src/assets/config/config.template.json index d76a0b12833c896805e10f304a4a58a3d3c06893..2ba7baf4ace1580e048574b17db90af1ed4bf59f 100644 --- a/src/assets/config/config.template.json +++ b/src/assets/config/config.template.json @@ -19,5 +19,6 @@ "credits": true, "reuses": true, "partners": true - } + }, + "licenses": [] } \ No newline at end of file diff --git a/src/i18n/traductions.fr.ts b/src/i18n/traductions.fr.ts index f1e768884da6e283bb56697c48042ce14088b432..2b5a33cb53a37628f4641462bc6e97bd3a7f1294 100644 --- a/src/i18n/traductions.fr.ts +++ b/src/i18n/traductions.fr.ts @@ -15,7 +15,7 @@ export const notificationMessages = { getCategoriesAndPost: 'Impossible de chager le post et les catégories', getHomeVideoPost: 'Impossible de charger le contenu du post', getMediaUrl: 'Impossible de récupérer l\'url du média', - getDataProducers: 'Impossible de charger la liste des producteurs de données.', + getDataProducers: 'Impossible de charger la liste des partenaires.', getCredits: 'Impossible de charger la liste des crédits.', getReuses: 'Impossible de charger la liste des réutilisations.', news: 'actualité', @@ -156,7 +156,7 @@ export const geosource = { filterCategories: { categories: 'Thématiques', keywords: 'Mots clés', - dataProducers: 'Producteurs', + dataProducers: 'Partenaires', licences: 'Licences', formats: 'Formats', services: 'Services', diff --git a/src/i18n/traductions.ts b/src/i18n/traductions.ts index b80ca58b2ddb2c3954435b923392c9cbe255efd5..eec1e462d80bf48d2cba5396722bd6cb79c1381b 100644 --- a/src/i18n/traductions.ts +++ b/src/i18n/traductions.ts @@ -16,7 +16,7 @@ export const notificationMessages = { getCategoriesAndPost: 'Failed to get the post and the categories', getHomeVideoPost: 'Failed to load home video post', getMediaUrl: 'Failed to get media url', - getDataProducers: 'Failed to get the list of data producers.', + getDataProducers: 'Failed to get the list of patners.', getCredits: 'Failed to get the list of credits.', getReuses: 'Failed to get the list of reuses.', news: 'news', @@ -157,7 +157,7 @@ export const geosource = { filterCategories: { categories: 'Themes', keywords: 'Keywords', - dataProducers: 'Producers', + dataProducers: 'Partners', licences: 'Licences', formats: 'Formats', services: 'Services',