浏览代码

Download animation for topic + Softcoded chapters

master
kj1352 5 年前
父节点
当前提交
7248772ef8
共有 8 个文件被更改,包括 154 次插入116 次删除
  1. +1
    -1
      src/app/app-routing.module.ts
  2. +2
    -2
      src/app/reusable-components/confirmation-popup/confirmation-popup.component.html
  3. +2
    -2
      src/app/reusable-components/confirmation-popup/confirmation-popup.component.ts
  4. +2
    -2
      src/app/tabs/courses/chapter-notes/chapter-notes.component.html
  5. +31
    -105
      src/app/tabs/courses/course-details/course-details.component.html
  6. +48
    -0
      src/app/tabs/courses/course-details/course-details.component.scss
  7. +67
    -3
      src/app/tabs/courses/course-details/course-details.component.ts
  8. +1
    -1
      src/assets/custom-icons/download.svg

+ 1
- 1
src/app/app-routing.module.ts 查看文件

@@ -21,7 +21,7 @@ const routes: Routes = [
{ component: ChapterNotesComponent, path: 'chapter-notes/:heading' }, { component: ChapterNotesComponent, path: 'chapter-notes/:heading' },
{ component: VideoChapterComponent, path: 'video-chapter/:heading' }, { component: VideoChapterComponent, path: 'video-chapter/:heading' },
{ component: VideoNotesComponent, path: 'video-notes/:heading' }, { component: VideoNotesComponent, path: 'video-notes/:heading' },
{ component: QuizComponent, path: 'quiz' },
{ component: QuizComponent, path: 'quiz/:heading' },
{ component: CalendarComponent, path: 'calendar' }, { component: CalendarComponent, path: 'calendar' },
{ component: AttendanceComponent, path: 'attendance'}, { component: AttendanceComponent, path: 'attendance'},
{ component: ForumPageComponent, path: 'forum'}, { component: ForumPageComponent, path: 'forum'},


+ 2
- 2
src/app/reusable-components/confirmation-popup/confirmation-popup.component.html 查看文件

@@ -10,7 +10,7 @@
<strong> Note: </strong> You can always download it back if you would like to. <strong> Note: </strong> You can always download it back if you would like to.
</p> </p>
<div class="action-buttons"> <div class="action-buttons">
<button (click)="closePopup()"> Cancel </button>
<button class="confirmation-button" (click)="closePopup()"> Delete </button>
<button (click)="closePopup('false')"> Cancel </button>
<button class="confirmation-button" (click)="closePopup('true')"> Delete </button>
</div> </div>
</section> </section>

+ 2
- 2
src/app/reusable-components/confirmation-popup/confirmation-popup.component.ts 查看文件

@@ -13,8 +13,8 @@ export class ConfirmationPopupComponent implements OnInit {
ngOnInit(): void { ngOnInit(): void {
} }


closePopup() {
this.popupTerminator.emit(true);
closePopup(param: string) {
this.popupTerminator.emit(param);
} }


} }

+ 2
- 2
src/app/tabs/courses/chapter-notes/chapter-notes.component.html 查看文件

@@ -4,7 +4,7 @@
<svg-icon [applyClass]="true" class="icon" src="assets/custom-icons/close.svg"></svg-icon> <svg-icon [applyClass]="true" class="icon" src="assets/custom-icons/close.svg"></svg-icon>
</button> </button>
<h5> <h5>
<svg-icon [applyClass]="true" class="icon" src="assets/custom-icons/play-button.svg"></svg-icon>
<svg-icon [applyClass]="true" class="icon" src="assets/custom-icons/newspaper.svg"></svg-icon>
<span> {{ heading }} </span> <span> {{ heading }} </span>
</h5> </h5>
</header> </header>
@@ -24,7 +24,7 @@
<figure> <figure>
<img src="https://www.educationworld.in/wp-content/uploads/2018/12/notebook-near-math-supplies_23-2147847773.jpg" alt=""> <img src="https://www.educationworld.in/wp-content/uploads/2018/12/notebook-near-math-supplies_23-2147847773.jpg" alt="">
</figure> </figure>
<p> <p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aperiam dolore doloremque necessitatibus ut quae ipsum, voluptas fuga perferendis incidunt labore voluptatibus iusto ullam ab repudiandae commodi alias excepturi nulla! Vero? Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aperiam dolore doloremque necessitatibus ut quae ipsum, voluptas fuga perferendis incidunt labore voluptatibus iusto ullam ab repudiandae commodi alias excepturi nulla! Vero?
Lorem ipsum dolor sit amet, <a href="#">Lorem ipsum</a> consectetur adipisicing elit. Saepe et cupiditate at nam earum mollitia commodi cum quidem dolore aliquid nostrum architecto voluptatem eius recusandae, enim explicabo deserunt expedita similique. Lorem ipsum dolor sit amet, <a href="#">Lorem ipsum</a> consectetur adipisicing elit. Saepe et cupiditate at nam earum mollitia commodi cum quidem dolore aliquid nostrum architecto voluptatem eius recusandae, enim explicabo deserunt expedita similique.


+ 31
- 105
src/app/tabs/courses/course-details/course-details.component.html 查看文件

@@ -15,7 +15,7 @@


<header class="segment-header"> <header class="segment-header">
<button (click)="selectedSegment='home'" <button (click)="selectedSegment='home'"
[ngClass]="{'active': selectedSegment === 'home' }"> Home </button>
[ngClass]="{'active': selectedSegment === 'home' }"> Chapters </button>
<button (click)="selectedSegment='resources'" <button (click)="selectedSegment='resources'"
[ngClass]="{'active': selectedSegment === 'resources' }"> Resources </button> [ngClass]="{'active': selectedSegment === 'resources' }"> Resources </button>
<button (click)="selectedSegment='grades'" <button (click)="selectedSegment='grades'"
@@ -25,130 +25,56 @@
</header> </header>


<div class="segments-holder"> <div class="segments-holder">

<ul class="chapter-list" *ngIf="selectedSegment === 'home'"> <ul class="chapter-list" *ngIf="selectedSegment === 'home'">
<section class="test-prompt"> <section class="test-prompt">
<section class="prompt"> <section class="prompt">
<p> <p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quidem ab vel reiciendis. Repudiandae nobis pariatur laboriosam, natus quidem quos architecto provident similique officiis vero at cum excepturi eius, eligendi aperiam. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quidem ab vel reiciendis. Repudiandae nobis pariatur laboriosam, natus quidem quos architecto provident similique officiis vero at cum excepturi eius, eligendi aperiam.
</p> </p>
<button [routerLink]="['/quiz']"> Take the test now! </button>
<button> Take the test now! </button>
</section> </section>
</section> </section>


<li class="chapter completed" [ngClass]="{'active' : selectedChapter === 1}">
<div class="container" (click)="selectedChapter === 1? selectedChapter = null : selectedChapter = 1">
<svg-icon [applyClass]="true" class="icon checkmark" src="assets/custom-icons/checkmark.svg"></svg-icon>
<div class="chapter-heading">
<label> Chapter 1 </label>
<p> 5 Topics </p>
</div>
<svg-icon [applyClass]="true" class="icon arrow" src="assets/custom-icons/down-arrow.svg"></svg-icon>
</div>
<ul class="topic-list">
<li class="topic completed">
<svg-icon [applyClass]="true" class="icon checkmark" src="assets/custom-icons/checkmark.svg"></svg-icon>
<div class="topic-container">
<p [routerLink]="['/video-chapter/', 'Topic-1']">
<span class="type"> <svg-icon [applyClass]="true" class="type-icon" src="assets/custom-icons/play-button.svg"></svg-icon> Video: </span> Lorem ipsum dolor sit amet, consectetur adipisicing elit. Corrupti dolores illo perferendis, impedit fugiat officiis cum tenetur amet itaque suscipit, possimus. Quas ipsam corporis aliquid enim, quisquam nobis laudantium dolorum.
</p>
<button class="action-button" (click)="showDeletePopup = true">
<svg-icon [applyClass]="true" class="icon" src="assets/custom-icons/delete.svg"></svg-icon>
</button>
</div>
</li>

<li class="topic completed">
<svg-icon [applyClass]="true" class="icon checkmark" src="assets/custom-icons/checkmark.svg"></svg-icon>
<div class="topic-container">
<p [routerLink]="['/chapter-notes/', 'Topic-2']">
<span class="type"> <svg-icon [applyClass]="true" class="type-icon" src="assets/custom-icons/newspaper.svg"></svg-icon> Notes: </span> Corrupti dolores illo perferendis, impedit fugiat officiis cum tenetur amet itaque suscipit, possimus. Quas ipsam corporis aliquid enim, quisquam nobis laudantium dolorum.
</p>
<button class="action-button" (click)="showDeletePopup = true">
<svg-icon [applyClass]="true" class="icon" src="assets/custom-icons/delete.svg"></svg-icon>
</button>
</div>
</li>

<li class="topic completed">
<svg-icon [applyClass]="true" class="icon checkmark" src="assets/custom-icons/checkmark.svg"></svg-icon>
<div class="topic-container">
<p [routerLink]="['/video-chapter/', 'Topic-3']">
<span class="type"> <svg-icon [applyClass]="true" class="type-icon" src="assets/custom-icons/play-button.svg"></svg-icon> Video: </span> Lorem ipsum dolor sit amet, consectetur adipisicing elit. Corrupti dolores illo perferendis, impedit fugiat officiis cum tenetur amet itaque suscipit, possimus. Quas ipsam corporis aliquid enim, quisquam nobis laudantium dolorum.
</p>
<button class="action-button">
<svg-icon [applyClass]="true" class="icon download" src="assets/custom-icons/download.svg"></svg-icon>
</button>
</div>
</li>

<li class="topic">
<svg-icon [applyClass]="true" class="icon checkmark" src="assets/custom-icons/checkmark.svg"></svg-icon>
<div class="topic-container">
<p [routerLink]="['/chapter-notes/', 'Topic-4']">
<span class="type"> <svg-icon [applyClass]="true" class="type-icon" src="assets/custom-icons/newspaper.svg"></svg-icon> Notes: </span> Corrupti dolores illo perferendis, impedit fugiat officiis cum tenetur amet itaque suscipit, possimus. Quas ipsam corporis aliquid enim, quisquam nobis laudantium dolorum.
</p>
<button class="action-button">
<svg-icon [applyClass]="true" class="icon download" src="assets/custom-icons/download.svg"></svg-icon>
</button>
</div>
</li>
</ul>
</li>
<li class="chapter" [ngClass]="{'active' : selectedChapter === 2}">
<div class="container" (click)="selectedChapter === 2 ? selectedChapter = null : selectedChapter = 2">
<li *ngFor="let chapter of chapterList; let i = index" class="chapter" [ngClass]="{'active' : selectedChapter === i, 'completed' : chapter.isCompleted}">
<div class="container" (click)="selectedChapter === i? selectedChapter = null : selectedChapter = i">
<svg-icon [applyClass]="true" class="icon checkmark" src="assets/custom-icons/checkmark.svg"></svg-icon> <svg-icon [applyClass]="true" class="icon checkmark" src="assets/custom-icons/checkmark.svg"></svg-icon>
<div class="chapter-heading"> <div class="chapter-heading">
<label> Chapter 2 </label>
<p> 5 Topics </p>
<label> {{ chapter.heading }} </label>
<p> {{ chapter.topics.length }} Topics </p>
</div> </div>
<svg-icon [applyClass]="true" class="icon arrow" src="assets/custom-icons/down-arrow.svg"></svg-icon> <svg-icon [applyClass]="true" class="icon arrow" src="assets/custom-icons/down-arrow.svg"></svg-icon>
</div> </div>
<ul class="topic-list"> <ul class="topic-list">
<li class="topic completed">
<li class="topic" *ngFor="let topic of chapter.topics; let j = index" [ngClass]="{'completed' : topic.isCompleted }">
<svg-icon [applyClass]="true" class="icon checkmark" src="assets/custom-icons/checkmark.svg"></svg-icon> <svg-icon [applyClass]="true" class="icon checkmark" src="assets/custom-icons/checkmark.svg"></svg-icon>
<div class="topic-container"> <div class="topic-container">
<p [routerLink]="['/video-chapter/', 'Topic-1']">
<span class="type"> <svg-icon [applyClass]="true" class="type-icon" src="assets/custom-icons/play-button.svg"></svg-icon> Video: </span> Lorem ipsum dolor sit amet, consectetur adipisicing elit. Corrupti dolores illo perferendis, impedit fugiat officiis cum tenetur amet itaque suscipit, possimus. Quas ipsam corporis aliquid enim, quisquam nobis laudantium dolorum.
<p [routerLink]="[topic.url, topic.param]">
<span class="type" *ngIf="topic.type === 'video'">
<svg-icon [applyClass]="true" class="type-icon" src="assets/custom-icons/play-button.svg"></svg-icon> Video:
</span>
<span class="type" *ngIf="topic.type === 'notes'">
<svg-icon [applyClass]="true" class="type-icon" src="assets/custom-icons/newspaper.svg"></svg-icon> Notes:
</span>
<span class="type" *ngIf="topic.type === 'quiz'">
<svg-icon [applyClass]="true" class="type-icon" src="assets/custom-icons/question-mark.svg"></svg-icon> Notes:
</span>
<strong> {{ topic.heading }} - </strong> {{ topic.description }}
</p> </p>
<button class="action-button" (click)="showDeletePopup = true">
<svg-icon [applyClass]="true" class="icon" src="assets/custom-icons/delete.svg"></svg-icon>
<button class="action-button" (click)="selectedTopic = j; showDeletePopup = true" *ngIf="topic.mediaState === 'downloaded'">
<svg-icon [applyClass]="true" class="icon delete" src="assets/custom-icons/delete.svg"></svg-icon>
</button> </button>
</div>
</li>

<li class="topic completed">
<svg-icon [applyClass]="true" class="icon checkmark" src="assets/custom-icons/checkmark.svg"></svg-icon>
<div class="topic-container">
<p [routerLink]="['/chapter-notes/', 'Topic-2']">
<span class="type"> <svg-icon [applyClass]="true" class="type-icon" src="assets/custom-icons/newspaper.svg"></svg-icon> Notes: </span> Corrupti dolores illo perferendis, impedit fugiat officiis cum tenetur amet itaque suscipit, possimus. Quas ipsam corporis aliquid enim, quisquam nobis laudantium dolorum.
</p>
<button class="action-button" (click)="showDeletePopup = true">
<svg-icon [applyClass]="true" class="icon" src="assets/custom-icons/delete.svg"></svg-icon>
</button>
</div>
</li>

<li class="topic">
<svg-icon [applyClass]="true" class="icon checkmark" src="assets/custom-icons/checkmark.svg"></svg-icon>
<div class="topic-container">
<p [routerLink]="['/video-chapter/', 'Topic-3']">
<span class="type"> <svg-icon [applyClass]="true" class="type-icon" src="assets/custom-icons/play-button.svg"></svg-icon> Video: </span> Lorem ipsum dolor sit amet, consectetur adipisicing elit. Corrupti dolores illo perferendis, impedit fugiat officiis cum tenetur amet itaque suscipit, possimus. Quas ipsam corporis aliquid enim, quisquam nobis laudantium dolorum.
</p>
<button class="action-button">
<button class="action-button" (click)="selectedTopic = j; downloadMedia()" *ngIf="topic.mediaState === 'none'">
<svg-icon [applyClass]="true" class="icon download" src="assets/custom-icons/download.svg"></svg-icon> <svg-icon [applyClass]="true" class="icon download" src="assets/custom-icons/download.svg"></svg-icon>
</button> </button>
</div>
</li>

<li class="topic">
<svg-icon [applyClass]="true" class="icon checkmark" src="assets/custom-icons/checkmark.svg"></svg-icon>
<div class="topic-container">
<p [routerLink]="['/chapter-notes/', 'Topic-4']">
<span class="type"> <svg-icon [applyClass]="true" class="type-icon" src="assets/custom-icons/newspaper.svg"></svg-icon> Notes: </span> Corrupti dolores illo perferendis, impedit fugiat officiis cum tenetur amet itaque suscipit, possimus. Quas ipsam corporis aliquid enim, quisquam nobis laudantium dolorum.
</p>
<button class="action-button">
<svg-icon [applyClass]="true" class="icon download" src="assets/custom-icons/download.svg"></svg-icon>
<button class="action-button progress-button" (click)="topic.mediaState = 'none'" *ngIf="topic.mediaState === 'downloading'">
<svg width="40" height="40" viewBox="0 0 40 40">
<circle cx="20" cy="20" r="18.5" fill="none" stroke="#cecece" stroke-width="4" />
<circle cx="20" cy="20" r="18.5" fill="none" stroke-width="4"
stroke-dasharray="116.8" stroke-dashoffset="46.72" id="progress" />
</svg>
<!-- stroke-dasharray = 2 pi r -->
<!-- r = w/2 - stroke-width/2 -->
<!-- stroke-dashoffset = (stroke-dasharray) * (1 - 0.6) -->
</button> </button>
</div> </div>
</li> </li>
@@ -156,7 +82,7 @@
</li> </li>


<div class="confirmation-popup" [ngClass]="{'active' : showDeletePopup }"> <div class="confirmation-popup" [ngClass]="{'active' : showDeletePopup }">
<app-confirmation-popup (popupTerminator)="getPopupDecision($event)"></app-confirmation-popup>
<app-confirmation-popup (popupTerminator)="getPopupDeleteDecision($event)"></app-confirmation-popup>
</div> </div>
</ul> </ul>




+ 48
- 0
src/app/tabs/courses/course-details/course-details.component.scss 查看文件

@@ -267,6 +267,7 @@
align-self: flex-start; align-self: flex-start;
position: relative; position: relative;
z-index: 2; z-index: 2;
overflow: visible;


&.checkmark { &.checkmark {
align-self: center; align-self: center;
@@ -274,9 +275,56 @@
border-radius: 50%; border-radius: 50%;
} }


&.delete {
fill: var(--danger-dark);
}

&.download { &.download {
fill: var(--teal-green); fill: var(--teal-green);
} }

&.downloading {
fill: var(--teal-green);
overflow: visible;

#download-arrow {
animation: verticalMovement 1s infinite;
fill: var(--light-grey);
}
}
}

.progress-button {
transform: scale(0.6)translateX(17px);
}

#progress {
stroke: var(--green);
animation: fill 2s forwards;
}

@keyframes fill {
0% {
stroke-dashoffset: calc(116.8 * (1 - 0.2));
}
50% {
stroke-dashoffset: calc(116.8 * (1 - 0.5));
}
100% {
stroke-dashoffset: calc(116.8 * (1 - 0.999999));
}
}
}

@keyframes verticalMovement {
0% {
transform: translateY(0px);
}
50% {
transform: translateY(20px);
}
0% {
transform: translateY(0px);
} }
} }




+ 67
- 3
src/app/tabs/courses/course-details/course-details.component.ts 查看文件

@@ -12,9 +12,60 @@ export class CourseDetailsComponent implements OnInit {
selectedSegment: string = 'home'; selectedSegment: string = 'home';
heading: string; heading: string;
routeSubscription: Subscription; routeSubscription: Subscription;
selectedChapter: number = 1;
selectedChapter: number = 0;
showDeletePopup: boolean = false; showDeletePopup: boolean = false;
isSubSegment: boolean = true; isSubSegment: boolean = true;
selectedTopic: number;

chapterList = [{
heading: 'Chapter 1',
isCompleted: false,
topics: [{
heading: 'Living Things',
description: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
mediaState: 'downloaded',
isCompleted: true,
type: 'video',
url: '/video-chapter',
param: 'Living Things'
}, {
heading: 'Living Things-1',
description: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
mediaState: 'none',
isCompleted: true,
type: 'notes',
url: '/chapter-notes',
param: 'Living Things-1'
}, {
heading: 'Living Things-2',
description: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
mediaState: 'none',
isCompleted: false,
type: 'quiz',
url: '/quiz',
param: 'Living Things-2'
}]
}, {
heading: 'Chapter 2',
isCompleted: true,
topics: [{
heading: 'Earth',
description: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
mediaState: 'none',
isCompleted: true,
type: 'video',
url: '/video-chapter',
param: 'Earth'
}, {
heading: 'Earth-2',
description: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
mediaState: 'none',
isCompleted: true,
type: 'quiz',
url: '/quiz-chapter',
param: 'Earth-2'
}]
}];


constructor( constructor(
private route: ActivatedRoute, private route: ActivatedRoute,
@@ -35,10 +86,23 @@ export class CourseDetailsComponent implements OnInit {
this.location.back(); this.location.back();
} }


getPopupDecision(e : boolean) {
if (e) {
getPopupDeleteDecision(e : string) {
if (e === 'false') {
this.showDeletePopup = false;
}

if (e === 'true') {
this.chapterList[this.selectedChapter].topics[this.selectedTopic].mediaState = 'none';
this.showDeletePopup = false; this.showDeletePopup = false;
} }
} }


downloadMedia() {
this.chapterList[this.selectedChapter].topics[this.selectedTopic].mediaState = 'downloading';

setTimeout(() => {
this.chapterList[this.selectedChapter].topics[this.selectedTopic].mediaState = 'downloaded';
}, 1500);
}

} }

+ 1
- 1
src/assets/custom-icons/download.svg 查看文件

@@ -9,7 +9,7 @@
c0-11,9-19.9,20-19.9c11,0,20,8.9,20,19.9v7.1c1-0.1,1.7-0.1,2.4-0.1c5.3,0,10.5,2.1,14.2,5.799c3.8,3.801,6,8.801,6,14.101 c0-11,9-19.9,20-19.9c11,0,20,8.9,20,19.9v7.1c1-0.1,1.7-0.1,2.4-0.1c5.3,0,10.5,2.1,14.2,5.799c3.8,3.801,6,8.801,6,14.101
c0,1.101-0.101,2.101-0.3,3.101c5.6-0.9,17.399-5.101,17.399-23.301c0-9.7-6-18.2-14.399-21.7c-0.2-24.3-20-43.9-44.301-43.9 c0,1.101-0.101,2.101-0.3,3.101c5.6-0.9,17.399-5.101,17.399-23.301c0-9.7-6-18.2-14.399-21.7c-0.2-24.3-20-43.9-44.301-43.9
c-16.6,0-31,9.1-38.6,22.6c-16.3,2.8-28.6,17.7-27.7,35C0.846,76.519,11.246,88.418,24.846,92.219z"/> c-16.6,0-31,9.1-38.6,22.6c-16.3,2.8-28.6,17.7-27.7,35C0.846,76.519,11.246,88.418,24.846,92.219z"/>
<path d="M65.446,54.319c-4.9,0-9,4-9,8.9v27.199l-7-6.6c-1.7-1.699-3.5-2.6-5.9-2.6s-4.5,0.9-6.2,2.6c-1.7,1.7-2.6,3.9-2.6,6.301
<path id="download-arrow" d="M65.446,54.319c-4.9,0-9,4-9,8.9v27.199l-7-6.6c-1.7-1.699-3.5-2.6-5.9-2.6s-4.5,0.9-6.2,2.6c-1.7,1.7-2.6,3.9-2.6,6.301
c0,0.699,0.1,1.399,0.2,2c0.4,1.6,1.2,3.1,2.4,4.299c22,22,22,22,22,22c1.8,1.701,4.2,2.5,6.7,2.4c2.2-0.199,4.3-1.199,6-2.9 c0,0.699,0.1,1.399,0.2,2c0.4,1.6,1.2,3.1,2.4,4.299c22,22,22,22,22,22c1.8,1.701,4.2,2.5,6.7,2.4c2.2-0.199,4.3-1.199,6-2.9
c0.2-0.199,21.5-21.5,21.5-21.5c1.2-1.199,2-2.6,2.3-4.199c0.2-0.7,0.301-1.4,0.301-2.1c0-2.4-1-4.601-2.601-6.301 c0.2-0.199,21.5-21.5,21.5-21.5c1.2-1.199,2-2.6,2.3-4.199c0.2-0.7,0.301-1.4,0.301-2.1c0-2.4-1-4.601-2.601-6.301
c-1.7-1.699-4-2.6-6.3-2.6c-2.4,0-5,0.9-6.6,2.6l-6.2,6.6V63.219C74.446,58.319,70.346,54.319,65.446,54.319z"/> c-1.7-1.699-4-2.6-6.3-2.6c-2.4,0-5,0.9-6.6,2.6l-6.2,6.6V63.219C74.446,58.319,70.346,54.319,65.446,54.319z"/>