Commit 26455174 authored by ncastejon's avatar ncastejon
Browse files

Merge branch 'fusion-table-map-universe' of...

Merge branch 'fusion-table-map-universe' of https://gitlab.alpha.grandlyon.com/refonte-data/portail-data into fusion-table-map-universe
parents 1b5e5bff 232f3363
import { Component, OnInit, ElementRef, QueryList, ViewChildren, OnDestroy } from '@angular/core';
import { Component, OnInit, ElementRef, QueryList, ViewChildren, OnDestroy, Input } from '@angular/core';
import { DatasetDetailService } from '../../../services';
import { Data } from '../../../models';
import { Subscription } from '../../../../../../node_modules/rxjs';
......@@ -32,10 +32,7 @@ export class DatasetDataComponent implements OnInit, OnDestroy {
searchInput = new FormControl('');
// columns options
displayColumnsMenu = false;
selectedProperties: string[] = []; // Array of columns to be displayed
properties: string[];
// maxDisplayedColumns = 5; // Set the max number of columns to be displayed in the table
@Input() selectedProperties: string[];
constructor(
private _datasetDetailService: DatasetDetailService,
......@@ -68,15 +65,6 @@ export class DatasetDataComponent implements OnInit, OnDestroy {
initializeComponent() {
this.data = this._datasetDetailService.datasetData;
this.properties = [];
if (this.data && this.data.length > 0) {
// If dataset has data, initialize an array with the
// the key of each property
this.properties = this._datasetDetailService.dataset.fields.list;
// Initialize an array with max 'maxDisplayedColumns' properties
this.selectedProperties = Array.from(this.properties);
}
}
// Method called when the scrolled down
......@@ -107,16 +95,6 @@ export class DatasetDataComponent implements OnInit, OnDestroy {
return this._datasetDetailService.datasetDataNumber;
}
toogleColumsMenu() {
this.displayColumnsMenu = !this.displayColumnsMenu;
}
closeColumsMenu() {
if (this.displayColumnsMenu) {
this.displayColumnsMenu = false;
}
}
sortBy(key: string) {
this._datasetDetailService.sortBy(key);
this.newAsyncRequest();
......@@ -151,28 +129,12 @@ export class DatasetDataComponent implements OnInit, OnDestroy {
return this._datasetDetailService.researchMaxResult;
}
// Returns the index if found in the array, -1 if not found
columnIsSelected(name: string) {
return this.selectedProperties.findIndex(e => e === name);
}
// Return the type of the 'key' property of the input object
isPropertyComplex(element, key: string) {
const type = typeof element.properties[key];
return type === 'object' || Array.isArray(element.properties[key]);
}
toogleColumn(name: string) {
const index = this.selectedProperties.findIndex(e => e === name);
// If value found remove it from the array
if (index !== -1) {
this.selectedProperties.splice(index, 1);
} else {
// If not found add the value to the array
this.selectedProperties.push(name);
}
}
// Increments the number of curretly running async request by one
newAsyncRequest() {
this._pendingRequests += 1;
......
......@@ -7,13 +7,10 @@
<ul class="navigation-tabs">
<li [routerLinkActive]="'is-active'" *ngIf="hasData || hasMap">
<a (click)="setPosition()" [routerLink]="[AppRoutes.data.uri]" class="tab-link">
<svg class="tab-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36">
<g id="picto_x5F_tab">
<path
d="M31 3H5C2.2 3 0 5.2 0 8v20c0 2.8 2.2 5 5 5h26c2.8 0 5-2.2 5-5V8c0-2.8-2.2-5-5-5zm4 25c0 2.2-1.8 4-4 4H21v-6h14v2zm0-3H21v-6h14v6zm0-14v7H21v-7h-1v7H8v1h12v6H8v1h12v6H5c-2.2 0-4-1.8-4-4v-2h6v-1H1v-6h6v-1H1V8c0-2.2 1.8-4 4-4h15v6h1V4h10c2.2 0 4 1.8 4 4v3z"
class="primary" />
<path d="M35 10H8V4H7v6H1v1h6v21h1V11h27z" class="secondary" />
</g>
<svg class="tab-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 38 32">
<path class="primary"
d="M19 0L4.5 6.4v19.4L19 32l14.5-6.4V6.4L19 0zm13.5 24.9l-13 5.7-.5.3-13.5-5.8v-18l13.5-6 13.1 5.8L19 13l.5.2v.6l13-6.1v17.2z" />
<path class="secondary" d="M19 30.9l.5-.2V13.2L5.9 6.9l-.4.2v.7l13 6.1v16.8z" />
</svg>
<div>
<div>
......
......@@ -3,16 +3,36 @@
<app-restricted-access-banner></app-restricted-access-banner>
</div>
<div class="table-map-header">
<div></div>
<div>
<button class="button" type="button" (click)="toogleTable()" *ngIf="hasTable"
[disabled]="!hasMap || hasMap && !mapIsEnabled">
<i class="far" [ngClass]="{'fa-eye-slash': !tableIsEnabled, 'fa-eye': tableIsEnabled }"></i>
<div class="dropdown properties-dropdown" [ngClass]="{'is-active': displayColumnsMenu}"
(clickOutside)="closeColumsMenu()">
<div class="dropdown-trigger">
<button class="button button-with-icon" aria-haspopup="true" aria-controls="dropdown-menu"
(click)="toogleColumsMenu()" i18n="@@dataset.data.customizeButton">
</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" [id]="prop" type="checkbox" name="selectedColumns"
[checked]="columnIsSelected(prop) !== -1" (click)="toogleColumn(prop)">
<label [for]="prop">{{ prop }}</label>
</div>
</div>
</div>
</div>
</div>
<div class="right-section">
<button class="button button-toogle-table-map" type="button" (click)="toogleTable()" *ngIf="hasTable"
[ngClass]="{'is-greyish': hasTable && !tableIsEnabled}">
<img [src]="!tableIsEnabled ? './assets/img/picto_visible_off.svg' : './assets/img/picto_visible_on.svg'"
[alt]="!tableIsEnabled ? 'Pictogramme oeil fermé' : 'Pictogramme oeil ouvert'">
Table
</button>
<button class="button" type="button" (click)="toogleMap()" *ngIf="hasMap"
[disabled]="!hasTable || hasTable && !tableIsEnabled">
<i class="far" [ngClass]="{'fa-eye-slash': !mapIsEnabled, 'fa-eye': mapIsEnabled }"></i>
<button class="button button-toogle-table-map" type="button" (click)="toogleMap()" *ngIf="hasMap"
[ngClass]="{'is-greyish': hasMap && !mapIsEnabled}">
<img [src]="!mapIsEnabled ? './assets/img/picto_visible_off.svg' : './assets/img/picto_visible_on.svg'"
[alt]="!mapIsEnabled ? 'Pictogramme oeil fermé' : 'Pictogramme oeil ouvert'">
Map
</button>
<button class="button button-with-icon"
......@@ -24,7 +44,7 @@
<div class="table-map-container">
<div class="table-component-container" *ngIf="hasTable && tableIsEnabled"
[ngClass]="{'is-fullwidth': !hasMap || (hasMap && !mapIsEnabled) }">
<app-dataset-table></app-dataset-table>
<app-dataset-table [selectedProperties]="selectedProperties"></app-dataset-table>
</div>
<div class="map-component-container" *ngIf="hasMap && mapIsEnabled">
<app-dataset-map></app-dataset-map>
......
......@@ -13,27 +13,52 @@
.button {
height: 2.25rem;
}
.properties-dropdown button {
background-image: url('../../../../../assets/img/picto_colonnes.svg');
background-size: 36px 36px;
background-repeat: no-repeat;
background-position: center;
}
.dropdown-content {
max-height: 400px;
overflow-y: auto;
}
.right-section .button {
margin-left: 1rem;
}
i {
margin-right: 0.5rem;
.button-toogle-table-map {
width: 100px;
justify-content: flex-start;
img {
width: 26px;
}
}
.is-greyish {
background-color: #e7e7e7;
opacity: 0.7;
}
.button-with-icon {
width: 2.25rem;
}
.btn-exit-fullscreen {
background-image: url('../../../../../assets/img/exit-fullscreen.svg');
background-size: 20px 20px;
background-image: url('../../../../../assets/img/picto_fullscreen_off.svg');
background-size: 36px 36px;
background-repeat: no-repeat;
background-position: center;
}
.btn-fullscreen {
background-image: url('../../../../../assets/img/fullscreen.svg');
background-size: 20px 20px;
background-image: url('../../../../../assets/img/picto_fullscreen_on.svg');
background-size: 36px 36px;
background-repeat: no-repeat;
background-position: center;
}
......@@ -42,14 +67,17 @@
.table-map-container {
display: flex;
height: 80vh;
border-top: 1px solid $grey-super-light-color;
}
.table-component-container {
max-width: 50vw;
height: 100%;
border-right: 1px solid $grey-super-light-color;
&.is-fullwidth {
max-width: 99vw;
border-right: none;
}
}
......
......@@ -9,28 +9,39 @@ import { linkFormats } from '../../../models/metadata.model';
})
export class DatasetTableMapComponent implements OnInit {
// Component state
fullscreen = false;
displayColumnsMenu = false;
mapIsEnabled = true;
tableIsEnabled = true;
properties: string[];
selectedProperties: string[] = []; // Array of columns to be displayed
constructor(
private _datasetDetailService: DatasetDetailService,
) { }
ngOnInit() {
) {
this.properties = this._datasetDetailService.dataset.fields.list;
this.selectedProperties = Array.from(this.properties);
}
ngOnInit() { }
toogleFullscreen() {
this.fullscreen = !this.fullscreen;
// setTimeout(() => { this.map.resize(); }, 1);
}
toogleMap() {
this.mapIsEnabled = !this.mapIsEnabled;
if (this.hasTable && this.tableIsEnabled) {
this.mapIsEnabled = !this.mapIsEnabled;
}
}
toogleTable() {
this.tableIsEnabled = !this.tableIsEnabled;
if (this.hasMap && this.mapIsEnabled) {
this.tableIsEnabled = !this.tableIsEnabled;
}
}
get isSample(): boolean {
......@@ -54,4 +65,30 @@ export class DatasetTableMapComponent implements OnInit {
return this._datasetDetailService.datasetEditorialMetadata.isSearchable;
}
toogleColumsMenu() {
this.displayColumnsMenu = !this.displayColumnsMenu;
}
closeColumsMenu() {
if (this.displayColumnsMenu) {
this.displayColumnsMenu = false;
}
}
// Returns the index if found in the array, -1 if not found
columnIsSelected(name: string) {
return this.selectedProperties.findIndex(e => e === name);
}
toogleColumn(name: string) {
const index = this.selectedProperties.findIndex(e => e === name);
// If value found remove it from the array
if (index !== -1) {
this.selectedProperties.splice(index, 1);
} else {
// If not found add the value to the array
this.selectedProperties.push(name);
}
}
}
<!-- <div class="columns is-multiline page-header">
<div class="restricted-access-container" *ngIf="isSample">
<app-restricted-access-banner></app-restricted-access-banner>
</div>
<div class="column is-paddingless">
<div class="documents-number">
<span class="documents-number">
......
import { Component, OnInit, ElementRef, QueryList, ViewChildren, OnDestroy } from '@angular/core';
import { Component, OnInit, ElementRef, QueryList, ViewChildren, OnDestroy, Input } from '@angular/core';
import { DatasetDetailService } from '../../../services';
import { Data } from '../../../models';
import { Subscription } from '../../../../../../node_modules/rxjs';
......@@ -21,8 +21,6 @@ export class DatasetTableComponent implements OnInit, OnDestroy {
// Count the number of currently running queries in order do display or not a loading icon
private _pendingRequests: number = 0;
isSample = false;
// Infinite scroll
throttle = 300;
scrollDistance = 1;
......@@ -39,10 +37,7 @@ export class DatasetTableComponent implements OnInit, OnDestroy {
previousSelectedRow: string;
// columns options
displayColumnsMenu = false;
selectedProperties: string[] = []; // Array of columns to be displayed
properties: string[];
// maxDisplayedColumns = 5; // Set the max number of columns to be displayed in the table
@Input() selectedProperties: string[] = []; // Array of columns to be displayed
constructor(
private _datasetDetailService: DatasetDetailService,
......@@ -74,17 +69,7 @@ export class DatasetTableComponent implements OnInit, OnDestroy {
}
initializeComponent() {
this.isSample = this._datasetDetailService.dataset.editorialMetadata.isSample;
this.data = this._datasetDetailService.datasetData;
this.properties = [];
if (this.data && this.data.length > 0) {
// If dataset has data, initialize an array with the
// the key of each property
this.properties = this._datasetDetailService.dataset.fields.list;
// Initialize an array with max 'maxDisplayedColumns' properties
this.selectedProperties = Array.from(this.properties);
}
}
getStyle() {
......@@ -147,16 +132,6 @@ export class DatasetTableComponent implements OnInit, OnDestroy {
}
}
toogleColumsMenu() {
this.displayColumnsMenu = !this.displayColumnsMenu;
}
closeColumsMenu() {
if (this.displayColumnsMenu) {
this.displayColumnsMenu = false;
}
}
sortBy(key: string) {
// Set the new sort value in the service
this.openedData = [];
......@@ -194,28 +169,12 @@ export class DatasetTableComponent implements OnInit, OnDestroy {
return this._datasetDetailService.researchMaxResult;
}
// Returns the index if found in the array, -1 if not found
columnIsSelected(name: string) {
return this.selectedProperties.findIndex(e => e === name);
}
// Return the type of the 'key' property of the input object
isPropertyComplex(element, key: string) {
const type = typeof element.properties[key];
return type === 'object' || Array.isArray(element.properties[key]);
}
toogleColumn(name: string) {
const index = this.selectedProperties.findIndex(e => e === name);
// If value found remove it from the array
if (index !== -1) {
this.selectedProperties.splice(index, 1);
} else {
// If not found add the value to the array
this.selectedProperties.push(name);
}
}
// Increments the number of curretly running async request by one
newAsyncRequest() {
this._pendingRequests += 1;
......
......@@ -31,7 +31,7 @@ export const routes: Routes = [
children: [
{
path: '',
redirectTo: AppRoutes.info.uri,
redirectTo: AppRoutes.data.uri,
pathMatch: 'full',
},
{
......
......@@ -20,13 +20,9 @@
</div>
</div>
<div class="toggleFullScreen columns is-mobile is-marginless">
<div class="geolocation-container columns is-mobile is-marginless">
<div class="column">
<div class="mapboxgl-ctrl-group column-content">
<button class="mapboxgl-ctrl-icon"
[ngClass]="{'btn-exit-fullscreen': fullscreen === true, 'btn-fullscreen': fullscreen === false}"
type="button" (click)="toogleFullscreen()">
</button>
<div class="mapboxgl-ctrl-group">
<button class="mapboxgl-ctrl-icon" class="geolocation" type="button" (click)="centerToMyPosition()">
</button>
</div>
......
......@@ -3,7 +3,6 @@
#map {
background-color: white;
border: 1px solid $grey-super-light-color;
.data-details-opened {
animation: open_details 200ms;
......@@ -158,7 +157,7 @@
width: 100%;
@media screen and (max-width: $tablet) {
.toggleFullScreen {
.geolocation-container {
position: absolute;
top: 0;
right: 0;
......@@ -227,20 +226,9 @@
background-position: center;
}
.btn-exit-fullscreen {
background-image: url('../../../assets/img/exit-fullscreen.svg');
background-size: 20px 20px;
}
.btn-fullscreen {
background-image: url('../../../assets/img/fullscreen.svg');
background-size: 20px 20px;
}
.geolocation {
background-image: url('../../../assets/img/geolocation.svg');
background-size: 36px 36px;
border-top: 1px solid $grey-super-light-color;
}
button:focus,
......
......@@ -50,7 +50,6 @@ export class MapComponent implements OnInit, OnDestroy {
displayControls = false;
selectedData = null; // Contains the properties of the selected feature
fullscreen = false;
geolocation = false;
searchLocationResult = [];
......@@ -287,11 +286,6 @@ export class MapComponent implements OnInit, OnDestroy {
this.map.setPitch(val);
}
toogleFullscreen() {
this.fullscreen = !this.fullscreen;
setTimeout(() => { this.map.resize(); }, 1);
}
copyMaplink(inputElement) {
inputElement.select();
document.execCommand('copy');
......
<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg height="32px" style="enable-background:new 0 0 32 32;" version="1.1" viewBox="0 0 32 32" width="32px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g id="Layer_1"/><g id="fullscreen_x5F_exit_x5F_alt"><g><polygon points="22.586,25.414 29.172,32 32,29.172 25.414,22.586 28,20 20,20 20,28 " style="fill:#4E4E50;"/><polygon points="6.547,9.371 4,12 11.961,11.957 12,4 9.375,6.543 2.828,0 0,2.828 " style="fill:#4E4E50;"/><polygon points="0,29.172 2.828,32 9.414,25.414 12,28 12,20 4,20 6.586,22.586 " style="fill:#4E4E50;"/><polygon points="28.031,12 25.438,9.404 32,2.838 29.164,0 22.598,6.566 20,3.971 20,12 " style="fill:#4E4E50;"/></g></g></svg>
\ No newline at end of file
<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg height="32px" style="enable-background:new 0 0 32 32;" version="1.1" viewBox="0 0 32 32" width="32px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g id="Layer_1"/><g id="fullscreen_x5F_alt"><g><polygon points="29.414,26.586 22.828,20 20,22.828 26.586,29.414 24,32 32,32 32,24 " style="fill:#4E4E50;"/><polygon points="2.586,5.414 9.172,12 12,9.172 5.414,2.586 8,0 0,0 0,8 " style="fill:#4E4E50;"/><polygon points="26.586,2.586 20,9.172 22.828,12 29.414,5.414 32,8 32,0 24,0 " style="fill:#4E4E50;"/><polygon points="12,22.828 9.172,20 2.586,26.586 0,24 0,32 8,32 5.414,29.414 " style="fill:#4E4E50;"/></g></g></svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36">
<g fill="#464a57">
<path d="M12 14h-1V8.5c0-.3-.2-.5-.5-.5s-.5.2-.5.5V14H9c-.6 0-1 .4-1 1v1c0 .6.4 1 1 1h1v11.5c0 .3.2.5.5.5s.5-.2.5-.5V17h1c.6 0 1-.4 1-1v-1c0-.6-.4-1-1-1zM19 22h-1V8.5c0-.3-.2-.5-.5-.5s-.5.2-.5.5V22h-1c-.6 0-1 .4-1 1v1c0 .6.4 1 1 1h1v3.5c0 .3.2.5.5.5s.5-.2.5-.5V25h1c.6 0 1-.4 1-1v-1c0-.6-.4-1-1-1zM26 12h-1V8.5c0-.3-.2-.5-.5-.5s-.5.2-.5.5V12h-1c-.6 0-1 .4-1 1v1c0 .6.4 1 1 1h1v13.5c0 .3.2.5.5.5s.5-.2.5-.5V15h1c.6 0 1-.4 1-1v-1c0-.6-.4-1-1-1z"/>
<g>
<path d="M12 14h-1V8.5c0-.3-.2-.5-.5-.5s-.5.2-.5.5V14H9c-.6 0-1 .4-1 1v1c0 .6.4 1 1 1h1v11.5c0 .3.2.5.5.5s.5-.2.5-.5V17h1c.6 0 1-.4 1-1v-1c0-.6-.4-1-1-1zM19 22h-1V8.5c0-.3-.2-.5-.5-.5s-.5.2-.5.5V22h-1c-.6 0-1 .4-1 1v1c0 .6.4 1 1 1h1v3.5c0 .3.2.5.5.5s.5-.2.5-.5V25h1c.6 0 1-.4 1-1v-1c0-.6-.4-1-1-1zM26 12h-1V8.5c0-.3-.2-.5-.5-.5s-.5.2-.5.5V12h-1c-.6 0-1 .4-1 1v1c0 .6.4 1 1 1h1v13.5c0 .3.2.5.5.5s.5-.2.5-.5V15h1c.6 0 1-.4 1-1v-1c0-.6-.4-1-1-1z"/>
</g>
</g>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36">
<g fill="#464a57">
<path d="M24.1 24.9l4.9 4.3c.3.3.8.3 1.1 0 .3-.3.3-.7 0-1l-4.9-4.3h2.7c.4 0 .8-.3.8-.7s-.3-.7-.8-.7h-4.5c-.4 0-.8.3-.8.7v4c0 .3.2.6.6.7.5.1.9-.3.9-.7v-2.3zM27.9 12.1h-2.7l4.9-4.3c.3-.3.3-.7 0-1-.3-.3-.8-.3-1.1 0l-4.9 4.3V8.8c0-.4-.4-.8-.9-.7-.4.1-.6.4-.6.7v4c0 .4.3.7.8.7h4.5c.4 0 .7-.2.8-.6.1-.5-.3-.8-.8-.8zM8.1 23.9h2.7l-4.9 4.3c-.3.3-.3.7 0 1 .3.3.8.3 1.1 0l4.9-4.3v2.3c0 .4.3.7.8.7.4 0 .8-.3.8-.7v-4c0-.4-.3-.7-.8-.7H8.1c-.4 0-.7.2-.8.6-.1.5.3.8.8.8zM13.4 12.7v-4c0-.4-.3-.7-.8-.7-.4 0-.8.3-.8.7V11L6.9 6.8c-.3-.3-.8-.3-1.1 0-.3.3-.3.7 0 1l4.9 4.3H8.1c-.4 0-.8.3-.8.7s.3.7.8.7h4.5c.4-.1.8-.4.8-.8z"/>
<g>
<path d="M24.1 24.9l4.9 4.3c.3.3.8.3 1.1 0 .3-.3.3-.7 0-1l-4.9-4.3h2.7c.4 0 .8-.3.8-.7s-.3-.7-.8-.7h-4.5c-.4 0-.8.3-.8.7v4c0 .3.2.6.6.7.5.1.9-.3.9-.7v-2.3zM27.9 12.1h-2.7l4.9-4.3c.3-.3.3-.7 0-1-.3-.3-.8-.3-1.1 0l-4.9 4.3V8.8c0-.4-.4-.8-.9-.7-.4.1-.6.4-.6.7v4c0 .4.3.7.8.7h4.5c.4 0 .7-.2.8-.6.1-.5-.3-.8-.8-.8zM8.1 23.9h2.7l-4.9 4.3c-.3.3-.3.7 0 1 .3.3.8.3 1.1 0l4.9-4.3v2.3c0 .4.3.7.8.7.4 0 .8-.3.8-.7v-4c0-.4-.3-.7-.8-.7H8.1c-.4 0-.7.2-.8.6-.1.5.3.8.8.8zM13.4 12.7v-4c0-.4-.3-.7-.8-.7-.4 0-.8.3-.8.7V11L6.9 6.8c-.3-.3-.8-.3-1.1 0-.3.3-.3.7 0 1l4.9 4.3H8.1c-.4 0-.8.3-.8.7s.3.7.8.7h4.5c.4-.1.8-.4.8-.8z"/>
</g>
</g>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36">
<g fill="#464a57">
<path d="M9.9 11.8l4.9 4.3c.3.3.8.3 1.1 0 .3-.3.3-.7 0-1L11 10.9h2.7c.4 0 .8-.3.8-.7 0-.4-.3-.7-.8-.7H9.1c-.4 0-.8.3-.8.7v4c0 .3.2.6.6.7.5.1.9-.3.9-.7l.1-2.4zM13.6 25.1H11l4.9-4.3c.3-.3.3-.7 0-1-.3-.3-.8-.3-1.1 0l-4.9 4.3v-2.3c0-.4-.4-.8-.9-.7-.4.1-.6.4-.6.7v4c0 .4.3.7.8.7h4.5c.4 0 .7-.2.8-.6 0-.4-.4-.8-.9-.8zM22.4 10.9H25l-4.9 4.3c-.3.3-.3.7 0 1 .3.3.8.3 1.1 0l4.9-4.3v2.3c0 .4.3.7.8.7.4 0 .8-.3.8-.7v-4c0-.4-.3-.7-.8-.7h-4.5c-.4 0-.7.2-.8.6-.1.4.3.8.8.8zM27.7 25.8v-4c0-.4-.3-.7-.8-.7-.4 0-.8.3-.8.7v2.3l-4.9-4.3c-.3-.3-.8-.3-1.1 0-.3.3-.3.7 0 1l4.9 4.3h-2.7c-.4 0-.8.3-.8.7s.3.7.8.7h4.5c.5 0 .9-.3.9-.7z"/>
</g>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36">
<path fill="#818080" d="M27.8 19.8L26 18.1c.3-.4.5-.7.8-1.1.1-.2.2-.5.2-.8h-1c0 .1 0 .1-.1.2-.8 1.4-1.9 2.5-3.3 3.3-1.4.8-3 1.2-4.6 1.2s-3.2-.4-4.6-1.2c-1.4-.8-2.5-1.9-3.3-3.3-.1-.1-.1-.1-.1-.2H9c0 .3.1.5.2.8.2.4.5.8.8 1.1l-1.7 1.7.7.7 1.7-1.7c.6.7 1.4 1.2 2.3 1.7.1.1.2.1.4.2L12 23.3l.9.5 1.3-2.5c1.1.5 2.3.7 3.4.8v2.8h1V22c1.1-.1 2.1-.3 3.1-.7l1.3 2.4.9-.5-1.3-2.4c.2-.1.3-.2.5-.3.8-.5 1.6-1.1 2.2-1.8l1.7 1.7.8-.6z"/>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36">
<path fill="#fff" d="M18.1 24.1c-4.1 0-7.4-2-7.9-4.6.5-2.6 3.9-4.6 7.9-4.6 4.1 0 7.4 2 7.9 4.6-.5 2.6-3.8 4.6-7.9 4.6z"/>
<path fill="#464a57" d="M18.1 22.5c1.7 0 3-1.3 3-3s-1.3-3-3-3-3 1.3-3 3 1.3 3 3 3z"/>
<path fill="#464a57" d="M27.8 15.9l-.8-.7-1.5 1.5c-.8-.8-1.7-1.4-2.9-1.9l1.2-2.3-.8-.5-1.2 2.4c-1-.3-2-.5-3.1-.5V11h-1v2.9c-1.2 0-2.4.3-3.5.6L12.8 12l-.8.5 1.3 2.4c-1.1.5-2 1.1-2.7 1.9L9 15.2l-.7.7 1.7 1.7c-.4.6-.7 1.2-.8 1.9.5 3.2 4.3 5.6 8.9 5.6 4.6 0 8.4-2.5 8.9-5.6-.1-.7-.4-1.4-.8-2l1.6-1.6zm-9.7 8.2c-4.1 0-7.4-2-7.9-4.6.5-2.6 3.9-4.6 7.9-4.6 4.1 0 7.4 2 7.9 4.6-.5 2.6-3.8 4.6-7.9 4.6z"/>
</svg>
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment