commit
4aa01517f2
@ -0,0 +1,19 @@
|
||||
import {NgModule} from '@angular/core';
|
||||
import {RouterModule} from '@angular/router';
|
||||
|
||||
import {FundersComponent} from './funders.component';
|
||||
import {IsRouteEnabled} from "../openaireLibrary/error/isRouteEnabled.guard";
|
||||
import {PreviousRouteRecorder} from "../openaireLibrary/utils/piwik/previousRouteRecorder.guard";
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
RouterModule.forChild([
|
||||
{
|
||||
path: '', component: FundersComponent,
|
||||
canActivate: [IsRouteEnabled],
|
||||
canDeactivate: [PreviousRouteRecorder]
|
||||
}
|
||||
])
|
||||
]
|
||||
})
|
||||
export class FundersRoutingModule { }
|
@ -0,0 +1,48 @@
|
||||
@import (reference) "~src/assets/openaire-theme/less/color.less";
|
||||
|
||||
|
||||
.custom-coins-dot:after {
|
||||
content: "";
|
||||
background-image: url("~src/assets/explore-assets/funders/coins.svg");
|
||||
display: inline-block;
|
||||
background-size: 100% 100%;
|
||||
height: 35px;
|
||||
width: 35px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.custom-handshake-dot:after {
|
||||
content: "";
|
||||
background-image: url("~src/assets/explore-assets/funders/handshake.svg");
|
||||
display: inline-block;
|
||||
background-size: 100% 100%;
|
||||
height: 30px;
|
||||
width: 30px;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.custom-view-button {
|
||||
padding: 4px;
|
||||
background: @light-color;
|
||||
border: 1px solid @disable-color;
|
||||
border-radius: 4px;
|
||||
icon {
|
||||
color: @disable-color;
|
||||
}
|
||||
|
||||
&.active {
|
||||
background: transparent linear-gradient(315deg, @primary-light-color 0%, @primary-dark-color 100%) 0% 0% no-repeat padding-box;
|
||||
icon {
|
||||
color: @light-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.uk-card {
|
||||
&.funder-grid {
|
||||
border-bottom: 4px solid fade(@funder-color, 30%);
|
||||
}
|
||||
&.funder-list {
|
||||
border-left: 4px solid fade(@funder-color, 30%);
|
||||
}
|
||||
}
|
@ -0,0 +1,283 @@
|
||||
import {ChangeDetectorRef, Component, OnInit} from '@angular/core';
|
||||
import {Router} from '@angular/router';
|
||||
import {Subscriber, Subscription, zip} from "rxjs";
|
||||
import {Meta, Title} from "@angular/platform-browser";
|
||||
|
||||
import {EnvProperties} from "../openaireLibrary/utils/properties/env-properties";
|
||||
import {PiwikService} from "../openaireLibrary/utils/piwik/piwik.service";
|
||||
import {SEOService} from "../openaireLibrary/sharedComponents/SEO/SEO.service";
|
||||
import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.component";
|
||||
import {properties} from "../../environments/environment";
|
||||
import {RefineFieldResultsService} from '../openaireLibrary/services/refineFieldResults.service';
|
||||
import {StakeholderService} from '../openaireLibrary/monitor/services/stakeholder.service';
|
||||
import {Option} from '../openaireLibrary/sharedComponents/input/input.component';
|
||||
import {StringUtils} from '../openaireLibrary/utils/string-utils.class';
|
||||
import {HelperFunctions} from '../openaireLibrary/utils/HelperFunctions.class';
|
||||
import {NumberUtils} from '../openaireLibrary/utils/number-utils.class';
|
||||
import {LayoutService} from '../openaireLibrary/dashboard/sharedComponents/sidebar/layout.service';
|
||||
import {FormBuilder, FormControl} from '@angular/forms';
|
||||
import {debounceTime, distinctUntilChanged} from 'rxjs/operators';
|
||||
|
||||
@Component({
|
||||
selector: 'funders',
|
||||
templateUrl: './funders.component.html',
|
||||
styleUrls: ['funders.component.less']
|
||||
})
|
||||
|
||||
export class FundersComponent implements OnInit {
|
||||
private subscriptions: Subscription[] = [];
|
||||
url: string = null;
|
||||
pageTitle: string = "OpenAIRE - Explore | Funders";
|
||||
pageDescription: string = "Funders | Be an integral part of the open R&I ecosystem";
|
||||
properties: EnvProperties = properties;
|
||||
breadcrumbs: Breadcrumb[] = [{name: 'home', route: '/'}, {name: 'funders'}];
|
||||
showLoading: boolean = true;
|
||||
isMobile: boolean = false;
|
||||
funders: any[] = [];
|
||||
displayedFunders: any[] = [];
|
||||
showOptions: Option[];
|
||||
sortOptions: Option[];
|
||||
pageOptions: number[] = [10, 20, 30, 40];
|
||||
show: string = 'all';
|
||||
sortBy: string = 'alphAsc';
|
||||
gridView: boolean = true;
|
||||
currentPage: number = 1;
|
||||
pageSize: number = 10;
|
||||
keywordControl: FormControl;
|
||||
keyword: string;
|
||||
fundersNumber: number = 0;
|
||||
researchProductsNumber: number = 0;
|
||||
projectsNumber: number = 0;
|
||||
fundersMap = new Map<string, {
|
||||
"id": string,
|
||||
"name": string,
|
||||
"alias": string,
|
||||
"researchProducts": number,
|
||||
"openAccessResearchProducts": number,
|
||||
"openAccessPercentage": number,
|
||||
"projects": number,
|
||||
"monitorDashboard": string,
|
||||
"monitorDashboardStatus": string,
|
||||
"logoUrl": string
|
||||
}>();
|
||||
|
||||
constructor(private router: Router,
|
||||
private meta: Meta,
|
||||
private title: Title,
|
||||
private seoService: SEOService,
|
||||
private piwikService: PiwikService,
|
||||
private refineFieldResultsService: RefineFieldResultsService,
|
||||
private stakeholderService: StakeholderService,
|
||||
private layoutService: LayoutService,
|
||||
private cdr: ChangeDetectorRef,
|
||||
private fb: FormBuilder,) {
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
this.title.setTitle('OpenAIRE - Explore | Funders');
|
||||
this.properties = properties;
|
||||
this.subscriptions.push( this.piwikService.trackView(this.properties, this.pageTitle).subscribe());
|
||||
this.url = this.properties.domain + this.router.url;
|
||||
this.seoService.createLinkForCanonicalURL(this.url);
|
||||
this.updateUrl(this.url);
|
||||
this.updateTitle(this.pageTitle);
|
||||
this.updateDescription(this.pageDescription);
|
||||
this.subscriptions.push(this.layoutService.isMobile.subscribe(isMobile => {
|
||||
this.isMobile = isMobile;
|
||||
this.cdr.detectChanges();
|
||||
}));
|
||||
this.showOptions = [
|
||||
{value: 'all', label: 'All funders'},
|
||||
{value: 'dashboard', label: 'Funders with dashboard'}
|
||||
];
|
||||
this.sortOptions = [
|
||||
{value: 'alphAsc', label: 'Alphabetically Asc. (A-Z)'},
|
||||
{value: 'alphDsc', label: 'Alphabetically Dsc. (Z-A)'},
|
||||
{value: 'oaDsc', label: '"Open Access %" Dsc.'}
|
||||
];
|
||||
this.getFunders();
|
||||
this.keywordControl = this.fb.control('');
|
||||
this.subscriptions.push(this.keywordControl.valueChanges.pipe(debounceTime(500), distinctUntilChanged()).subscribe(value => {
|
||||
this.keyword = value;
|
||||
this.filtering();
|
||||
}));
|
||||
}
|
||||
|
||||
ngOnDestroy() {
|
||||
this.subscriptions.forEach(subscription => {
|
||||
if (subscription instanceof Subscriber) {
|
||||
subscription.unsubscribe();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private updateDescription(description: string) {
|
||||
this.meta.updateTag({content: description}, "name='description'");
|
||||
this.meta.updateTag({content: description}, "property='og:description'");
|
||||
}
|
||||
|
||||
private updateTitle(title: string) {
|
||||
var title = ((title.length > 50) ? title.substring(0, 50) : title);
|
||||
this.title.setTitle(title);
|
||||
this.meta.updateTag({content: title}, "property='og:title'");
|
||||
}
|
||||
|
||||
private updateUrl(url: string) {
|
||||
this.meta.updateTag({content: url}, "property='og:url'");
|
||||
}
|
||||
|
||||
private getFunders() {
|
||||
let refineParams = '&fq=resultbestaccessright%20exact%20%22Open%20Access%22';
|
||||
this.subscriptions.push(
|
||||
zip(
|
||||
this.refineFieldResultsService.getRefineFieldsResultsByEntityName(['relfunder'], 'result', this.properties),
|
||||
this.refineFieldResultsService.getRefineFieldsResultsByEntityName(['relfunder'], 'result', this.properties, refineParams),
|
||||
this.refineFieldResultsService.getRefineFieldsResultsByEntityName(['funder'], 'project', this.properties),
|
||||
this.stakeholderService.getStakeholders(this.properties.monitorServiceAPIURL, 'funder')
|
||||
).subscribe((data: any[]) => {
|
||||
// storing all needed data to a map
|
||||
// 1st call
|
||||
let queriedFunders1 = data[0][1][0].values;
|
||||
queriedFunders1.forEach(queriedFunder => {
|
||||
this.fundersMap.set(queriedFunder.id, {
|
||||
"id": queriedFunder.id,
|
||||
"name": queriedFunder.name,
|
||||
"alias": '',
|
||||
"researchProducts": +queriedFunder.number,
|
||||
"openAccessResearchProducts": 0,
|
||||
"openAccessPercentage": 0,
|
||||
"projects": 0,
|
||||
"monitorDashboard": '',
|
||||
"monitorDashboardStatus": '',
|
||||
"logoUrl": ''
|
||||
});
|
||||
});
|
||||
|
||||
// 2nd call
|
||||
let queriedFunders2 = data[1][1][0].values;
|
||||
queriedFunders2.forEach(queriedFunder => {
|
||||
if(this.fundersMap.has(queriedFunder.id)) {
|
||||
this.fundersMap.get(queriedFunder.id).openAccessResearchProducts = +queriedFunder.number;
|
||||
}
|
||||
});
|
||||
|
||||
// 3rd call
|
||||
let queriedFunders3 = data[2][1][0].values;
|
||||
queriedFunders3.forEach(queriedFunder => {
|
||||
if(+queriedFunder.number > 1) {
|
||||
if (this.fundersMap.has(queriedFunder.id)) {
|
||||
this.fundersMap.get(queriedFunder.id).projects = +queriedFunder.number;
|
||||
} else {
|
||||
this.fundersMap.set(queriedFunder.id, {
|
||||
"id": queriedFunder.id,
|
||||
"name": queriedFunder.name,
|
||||
"alias": '',
|
||||
"researchProducts": 0,
|
||||
"openAccessResearchProducts": 0,
|
||||
"openAccessPercentage": 0,
|
||||
"projects": +queriedFunder.number,
|
||||
"monitorDashboard": '',
|
||||
"monitorDashboardStatus": '',
|
||||
"logoUrl": ''
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// 4th call
|
||||
let queriedFunders4 = data[3];
|
||||
queriedFunders4.forEach(queriedFunder => {
|
||||
let id = queriedFunder.index_id + '||' + queriedFunder.index_name + '||' + queriedFunder.index_shortName;
|
||||
if(this.fundersMap.has(id)) {
|
||||
this.fundersMap.get(id).alias = queriedFunder.alias;
|
||||
this.fundersMap.get(id).monitorDashboard = queriedFunder.alias;
|
||||
this.fundersMap.get(id).monitorDashboardStatus = queriedFunder.visibility;
|
||||
this.fundersMap.get(id).logoUrl = (queriedFunder.isUpload ? properties.utilsService + "/download/" : "")+ (queriedFunder.logoUrl);
|
||||
}
|
||||
});
|
||||
this.fundersMap.forEach((value) => {
|
||||
if(value.openAccessResearchProducts > 0) {
|
||||
value.openAccessPercentage = Math.round((value.openAccessResearchProducts / value.researchProducts) * 100);
|
||||
}
|
||||
});
|
||||
// convert funders map into an array
|
||||
this.funders = Array.from(this.fundersMap.values());
|
||||
// calculate total numbers for intro content
|
||||
this.calculateNumbers();
|
||||
// sort funders
|
||||
this.funders.sort((a, b) => a['name'].localeCompare(b['name']));
|
||||
// initialize displayedFunders
|
||||
this.displayedFunders = this.funders;
|
||||
this.showLoading = false;
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
private calculateSum(array, property) {
|
||||
let sum = 0;
|
||||
array.forEach(element => {
|
||||
sum += element[property];
|
||||
});
|
||||
return sum;
|
||||
}
|
||||
|
||||
private calculateNumbers() {
|
||||
this.fundersNumber = this.funders.length;
|
||||
this.researchProductsNumber = this.calculateSum(this.funders, 'researchProducts');
|
||||
this.projectsNumber = this.calculateSum(this.funders, 'projects');
|
||||
}
|
||||
|
||||
get showContentWithNumbers() {
|
||||
return this.fundersNumber && this.researchProductsNumber && this.projectsNumber;
|
||||
}
|
||||
|
||||
formatNumber(num: number | string) {
|
||||
let formatted = NumberUtils.roundNumber(+num);
|
||||
return formatted.number + formatted.size;
|
||||
}
|
||||
|
||||
urlEncodeAndQuote(str: string): string {
|
||||
return StringUtils.quote(StringUtils.URIEncode(str));
|
||||
}
|
||||
|
||||
sortByChanged() {
|
||||
switch(this.sortBy) {
|
||||
case 'alphAsc':
|
||||
this.funders = this.funders.sort((a, b) => a['name'].localeCompare(b['name']));
|
||||
break;
|
||||
case 'alphDsc':
|
||||
this.funders = this.funders.sort((a, b) => b['name'].localeCompare(a['name']));
|
||||
break;
|
||||
case 'oaDsc':
|
||||
this.funders = this.funders.sort((a, b) => b['openAccessPercentage'] - a['openAccessPercentage']);
|
||||
break;
|
||||
}
|
||||
this.filtering();
|
||||
}
|
||||
|
||||
sizeChanged($event) {
|
||||
this.pageSize = $event;
|
||||
this.currentPage = 1;
|
||||
}
|
||||
|
||||
filtering() {
|
||||
let displayedFunders = this.funders;
|
||||
if(!this.keyword){
|
||||
this.keyword = '';
|
||||
}
|
||||
if(this.funders.length) {
|
||||
displayedFunders = displayedFunders.filter(item => (item['name'] && item['name'].toLowerCase().includes(this.keyword.toLowerCase())) || (item['alias'] && item['alias'].toLowerCase().includes(this.keyword.toLowerCase())));
|
||||
}
|
||||
if(this.show == 'dashboard') {
|
||||
displayedFunders = displayedFunders.filter(funder => funder.monitorDashboard && funder.monitorDashboard?.length > 0 && funder.monitorDashboardStatus != 'PRIVATE');
|
||||
}
|
||||
|
||||
this.displayedFunders = displayedFunders;
|
||||
this.currentPage = 1;
|
||||
}
|
||||
|
||||
public updateCurrentPage($event) {
|
||||
this.currentPage = $event.value;
|
||||
HelperFunctions.scrollToId('target');
|
||||
}
|
||||
}
|
@ -0,0 +1,47 @@
|
||||
import {NgModule} from '@angular/core';
|
||||
import {CommonModule} from '@angular/common';
|
||||
import {RouterModule} from '@angular/router';
|
||||
|
||||
import {FundersComponent} from './funders.component';
|
||||
import {FundersRoutingModule} from "./funders-routing.module";
|
||||
import {AlertModalModule} from "../openaireLibrary/utils/modal/alertModal.module";
|
||||
import {PiwikService} from "../openaireLibrary/utils/piwik/piwik.service";
|
||||
import {IsRouteEnabled} from "../openaireLibrary/error/isRouteEnabled.guard";
|
||||
import {Schema2jsonldModule} from "../openaireLibrary/sharedComponents/schema2jsonld/schema2jsonld.module";
|
||||
import {SEOServiceModule} from "../openaireLibrary/sharedComponents/SEO/SEOService.module";
|
||||
import {BreadcrumbsModule} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.module";
|
||||
import {LoadingModule} from "../openaireLibrary/utils/loading/loading.module";
|
||||
import {RefineFieldResultsServiceModule} from '../openaireLibrary/services/refineFieldResultsService.module';
|
||||
import {LogoUrlPipeModule} from '../openaireLibrary/utils/pipes/logoUrlPipe.module';
|
||||
import {IconsModule} from '../openaireLibrary/utils/icons/icons.module';
|
||||
import {IconsService} from '../openaireLibrary/utils/icons/icons.service';
|
||||
import {open_access} from '../openaireLibrary/utils/icons/icons';
|
||||
import {closed_access} from '../openaireLibrary/utils/icons/icons';
|
||||
import {InputModule} from '../openaireLibrary/sharedComponents/input/input.module';
|
||||
import {PagingModule} from '../openaireLibrary/utils/paging.module';
|
||||
import {SearchInputModule} from '../openaireLibrary/sharedComponents/search-input/search-input.module';
|
||||
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
FundersRoutingModule, CommonModule, RouterModule, AlertModalModule,
|
||||
Schema2jsonldModule, SEOServiceModule, BreadcrumbsModule, LoadingModule,
|
||||
RefineFieldResultsServiceModule, LogoUrlPipeModule, IconsModule, InputModule,
|
||||
PagingModule, SearchInputModule
|
||||
],
|
||||
declarations: [
|
||||
FundersComponent
|
||||
],
|
||||
providers: [
|
||||
PiwikService, IsRouteEnabled
|
||||
],
|
||||
exports: [
|
||||
FundersComponent
|
||||
]
|
||||
})
|
||||
|
||||
export class FundersModule {
|
||||
constructor(private iconsService: IconsService) {
|
||||
this.iconsService.registerIcons([open_access, closed_access]);
|
||||
}
|
||||
}
|
@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg id="Layer_2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 315.47 315.47"><defs><style>.cls-1{fill:#241983;}.cls-2,.cls-3{fill:#00d8c4;}.cls-3{fill-rule:evenodd;}</style></defs><g id="Layer_1-2"><g><circle class="cls-1" cx="157.73" cy="157.73" r="157.73"/><g><ellipse class="cls-2" cx="116.85" cy="98.6" rx="63.94" ry="37.92"/><ellipse class="cls-2" cx="199.59" cy="167.66" rx="63.94" ry="37.92"/><path class="cls-3" d="M260.39,185.84c1.25-1.88,2.51-3.76,3.13-5.95-.31,13.48,1.25,14.42-.94,21.63-5.01,17.24-38.86,29.77-64.25,29.15-21.63-.31-39.18-2.82-54.85-15.98-4.39-3.76-9.4-7.52-9.72-12.85,0-10.03,0-11.6,.31-23.82,10.34,38.86,102.8,41.37,126.31,7.84Z"/><path class="cls-3" d="M262.58,209.66c.94,8.78-1.57,13.79-1.88,20.06-.94,14.73-35.1,24.76-61.43,25.07-31.34,.31-63.62-12.22-64.25-24.76-.63-11.28,0-5.33-.94-20.06,21.31,32.28,105.31,31.97,128.5-.31Z"/><path class="cls-3" d="M116.85,140.71c38.55,.31,57.67-17.86,61.74-25.07,1.88-3.45-.31,12.85-.94,13.16-14.1,4.07-31.03,10.03-40.43,21.94-2.82,3.45-3.76,7.52-5.01,12.54,0,.31-13.48-.31-14.42-.31-28.21,0-61.12-13.48-65.82-35.73-.63-4.39,0-8.15,0-17.55,10.03,19.75,36.67,30.71,64.88,31.03Z"/><path class="cls-3" d="M116.85,166.72c5.01,.31,15.04,0,15.04,0-.94,8.78-.63,12.85-1.25,23.19,0,.31-71.15,3.76-78.67-33.85-.63-4.07,0-7.84,0-17.55,15.67,21.31,42.94,27.27,64.88,28.21Z"/><path class="cls-3" d="M130.01,194.3s.94,12.54,.63,21.94c0,.31-68.95,1.88-78.04-27.58l-.63-21.31c16.92,23.51,52.65,27.58,78.04,26.95Z"/></g></g></g></svg>
|
After Width: | Height: | Size: 1.5 KiB |
Binary file not shown.
After Width: | Height: | Size: 1.2 MiB |
@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg id="Layer_2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 349.02 349.02"><defs><style>.cls-1{fill:#241983;}.cls-2{fill:#00d8c4;}</style></defs><g id="Layer_1-2"><g><circle class="cls-1" cx="157.73" cy="191.29" r="157.73"/><circle class="cls-2" cx="191.29" cy="157.73" r="157.73"/><g><path class="cls-1" d="M256.1,204.17c-2.11,2.33-6.37,2.17-9.98,1.47-.48-.08-.92-.31-1.28-.63l-32.35-27.83c-1.19-1.02-2.98-.89-4,.3l-.09,.12c-1.03,1.19-.89,2.97,.3,3.99l30.02,25.77c2.65,2.28,4.22,5.62,4.02,9.11-.07,1.13-.33,2.12-.88,2.75-1.59,1.81-5.94,1.91-11.98,.31-.39-.11-.76-.3-1.06-.55l-29.86-24.26c-1.21-.98-2.99-.8-3.98,.41l-.1,.14c-.99,1.21-.81,3,.4,3.98l27.98,22.8c1.06,.86,1.35,2.35,.71,3.55-1.73,3.19-4.15,6.39-6.5,7.07-1.26,.32-2.6-.04-3.53-.95-7.32-5.58-19.43-16.03-24.3-20.25-1.18-1.03-2.96-.9-3.99,.27l-.11,.14c-1.03,1.18-.91,2.98,.27,4l.62,.53,1.89,1.65c3.54,3.05,8.35,7.14,12.98,10.95,1.86,1.53,1.08,4.59-1.3,4.98-4.14,.67-8.61,.56-11.87-1.65-7.97-5.42-54.63-39.44-68.11-49.28-1.09-.63-2.87-1.45-5.62-2.17-.23-.06-.49-.12-.74-.18-1.61-.38-3.55-.72-5.83-.98l-40.65-6.77c-2.22-.37-3.6-2.63-2.9-4.77l20.33-62.82c.49-1.52,2.14-2.34,3.65-1.81l32.32,11.51s7.68,1.65,18.24,1.56l13.52-.1c2.18-.01,3.57,2.35,2.48,4.25l-7.31,12.76,.04,.79c.01,1.83,.34,18.11,7.32,23.57,7.63,5.9,16.14,3.97,25.24-5.76l1.57-1.66c6.95-7.4,14.03-13.31,26.54-4.4,1.64,1.17,3.21,2.44,4.71,3.79l6.97,6.65,.68,.63,3.07,2.75,1.05,.99,2.48,2.4,1.35,1.27,2.45,2.18,1.3,1.24,2.4,2.29,1.05,1.05,2.32,2.23,1.18,1.14,2.28,2.27,.87,.82,2.5,2.43,.56,.55,2.59,2.48,.24,.26,8.24,7.98c.4,.39,.67,.86,.79,1.4,.69,3.06,1.31,8.49-1.18,11.29Z"/><path class="cls-1" d="M317.97,154.23c1.2,2.26,.16,5.06-2.22,5.99l-42.33,16.43h-.04c-.37,.04-3.24,.46-8.83,4.49l-5.07,5.23-.92-.92-.72-.69-1.02-.99-1.42-1.37-.58-.59-1.99-1.92-.31-.25-1.18-.82-.29-.24-1.87-1.79-1.08-1.05-1.91-1.82-1.17-1.14-1.98-1.9-1.3-1.24-2.19-2.1-1.13-1.11-7-6.64-.9-.83-2.65-2.48-1.11-1.05-2.58-2.42-.93-.86-3.08-2.74-.52-.5-3.45-3.16c-.89-.83-1.78-1.56-2.66-2.28l-.59-.5c-.85-.68-1.71-1.31-2.53-1.87l-.45-.3c-.75-.5-1.5-.97-2.24-1.4l-.39-.21c-.79-.45-1.57-.84-2.35-1.18l-.5-.2c-.78-.34-1.56-.64-2.3-.87-.71-.22-1.44-.4-2.18-.55l-.41,.02c-.69-.12-1.39-.21-2.09-.26l-.29,.02c-.64,0-1.29,.04-1.93,.11h-.17c-1.04,.07-2.06,.21-3.07,.45-.98,.22-1.94,.54-2.87,.91-1.85,.78-3.6,1.78-5.2,2.98-1.6,1.18-3.11,2.48-4.52,3.87l-1.96,1.98-1.71,1.82c-8.92,9.55-13.96,7.76-17.4,5.12-3.3-2.52-4.79-11.54-5.05-17.43-.03-.53,.11-1.05,.37-1.5l8.85-15.47c1.69-2.93,4.63-4.93,7.98-5.4l18.75-2.64c3.84-.53,7.74-.37,11.53,.5l32.18,7.43s.06,.02,.09,.02c.84,.24,7.71,1.93,16.41-3.05l34.34-19.52c1.39-.8,3.16-.29,3.91,1.12l30.21,56.76Z"/></g></g></g></svg>
|
After Width: | Height: | Size: 2.6 KiB |
File diff suppressed because one or more lines are too long
Before Width: | Height: | Size: 169 KiB |
Loading…
Reference in New Issue