diff options
13 files changed, 51 insertions, 29 deletions
diff --git a/client/package.json b/client/package.json index 50b33d7c3..3c4b9ead4 100644 --- a/client/package.json +++ b/client/package.json | |||
@@ -96,7 +96,6 @@ | |||
96 | "linkifyjs": "^2.1.5", | 96 | "linkifyjs": "^2.1.5", |
97 | "lodash-es": "^4.17.4", | 97 | "lodash-es": "^4.17.4", |
98 | "markdown-it": "^11.0.0", | 98 | "markdown-it": "^11.0.0", |
99 | "ngx-pipes": "^2.6.0", | ||
100 | "node-sass": "^4.9.3", | 99 | "node-sass": "^4.9.3", |
101 | "npm-font-source-sans-pro": "^1.0.2", | 100 | "npm-font-source-sans-pro": "^1.0.2", |
102 | "p2p-media-loader-hlsjs": "^0.6.2", | 101 | "p2p-media-loader-hlsjs": "^0.6.2", |
diff --git a/client/src/app/+admin/follows/video-redundancies-list/video-redundancies-list.component.ts b/client/src/app/+admin/follows/video-redundancies-list/video-redundancies-list.component.ts index c29f69475..07e2e0ff3 100644 --- a/client/src/app/+admin/follows/video-redundancies-list/video-redundancies-list.component.ts +++ b/client/src/app/+admin/follows/video-redundancies-list/video-redundancies-list.component.ts | |||
@@ -1,10 +1,9 @@ | |||
1 | import { BytesPipe } from 'ngx-pipes' | ||
2 | import { SortMeta } from 'primeng/api' | 1 | import { SortMeta } from 'primeng/api' |
3 | import { Component, OnInit } from '@angular/core' | 2 | import { Component, OnInit } from '@angular/core' |
4 | import { ConfirmService, Notifier, RestPagination, RestTable, ServerService } from '@app/core' | 3 | import { ConfirmService, Notifier, RestPagination, RestTable, ServerService } from '@app/core' |
5 | import { peertubeLocalStorage } from '@root-helpers/peertube-web-storage' | 4 | import { BytesPipe, RedundancyService } from '@app/shared/shared-main' |
6 | import { RedundancyService } from '@app/shared/shared-main' | ||
7 | import { I18n } from '@ngx-translate/i18n-polyfill' | 5 | import { I18n } from '@ngx-translate/i18n-polyfill' |
6 | import { peertubeLocalStorage } from '@root-helpers/peertube-web-storage' | ||
8 | import { VideoRedundanciesTarget, VideoRedundancy } from '@shared/models' | 7 | import { VideoRedundanciesTarget, VideoRedundancy } from '@shared/models' |
9 | import { VideosRedundancyStats } from '@shared/models/server' | 8 | import { VideosRedundancyStats } from '@shared/models/server' |
10 | 9 | ||
diff --git a/client/src/app/+videos/+video-edit/video-add-components/video-upload.component.ts b/client/src/app/+videos/+video-edit/video-add-components/video-upload.component.ts index 5a18cd78a..e18e3c9a7 100644 --- a/client/src/app/+videos/+video-edit/video-add-components/video-upload.component.ts +++ b/client/src/app/+videos/+video-edit/video-add-components/video-upload.component.ts | |||
@@ -1,4 +1,3 @@ | |||
1 | import { BytesPipe } from 'ngx-pipes' | ||
2 | import { Subscription } from 'rxjs' | 1 | import { Subscription } from 'rxjs' |
3 | import { HttpEventType, HttpResponse } from '@angular/common/http' | 2 | import { HttpEventType, HttpResponse } from '@angular/common/http' |
4 | import { Component, ElementRef, EventEmitter, OnDestroy, OnInit, Output, ViewChild } from '@angular/core' | 3 | import { Component, ElementRef, EventEmitter, OnDestroy, OnInit, Output, ViewChild } from '@angular/core' |
@@ -6,7 +5,7 @@ import { Router } from '@angular/router' | |||
6 | import { AuthService, CanComponentDeactivate, Notifier, ServerService, UserService } from '@app/core' | 5 | import { AuthService, CanComponentDeactivate, Notifier, ServerService, UserService } from '@app/core' |
7 | import { scrollToTop } from '@app/helpers' | 6 | import { scrollToTop } from '@app/helpers' |
8 | import { FormValidatorService } from '@app/shared/shared-forms' | 7 | import { FormValidatorService } from '@app/shared/shared-forms' |
9 | import { VideoCaptionService, VideoEdit, VideoService } from '@app/shared/shared-main' | 8 | import { BytesPipe, VideoCaptionService, VideoEdit, VideoService } from '@app/shared/shared-main' |
10 | import { LoadingBarService } from '@ngx-loading-bar/core' | 9 | import { LoadingBarService } from '@ngx-loading-bar/core' |
11 | import { I18n } from '@ngx-translate/i18n-polyfill' | 10 | import { I18n } from '@ngx-translate/i18n-polyfill' |
12 | import { VideoPrivacy } from '@shared/models' | 11 | import { VideoPrivacy } from '@shared/models' |
diff --git a/client/src/app/core/users/user.service.ts b/client/src/app/core/users/user.service.ts index aac2a0206..6e7a48519 100644 --- a/client/src/app/core/users/user.service.ts +++ b/client/src/app/core/users/user.service.ts | |||
@@ -1,10 +1,10 @@ | |||
1 | import { BytesPipe } from 'ngx-pipes' | ||
2 | import { SortMeta } from 'primeng/api' | 1 | import { SortMeta } from 'primeng/api' |
3 | import { from, Observable, of } from 'rxjs' | 2 | import { from, Observable, of } from 'rxjs' |
4 | import { catchError, concatMap, filter, first, map, shareReplay, throttleTime, toArray } from 'rxjs/operators' | 3 | import { catchError, concatMap, filter, first, map, shareReplay, throttleTime, toArray } from 'rxjs/operators' |
5 | import { HttpClient, HttpParams } from '@angular/common/http' | 4 | import { HttpClient, HttpParams } from '@angular/common/http' |
6 | import { Injectable } from '@angular/core' | 5 | import { Injectable } from '@angular/core' |
7 | import { AuthService } from '@app/core/auth' | 6 | import { AuthService } from '@app/core/auth' |
7 | import { BytesPipe } from '@app/shared/shared-main' | ||
8 | import { I18n } from '@ngx-translate/i18n-polyfill' | 8 | import { I18n } from '@ngx-translate/i18n-polyfill' |
9 | import { UserLocalStorageKeys } from '@root-helpers/users' | 9 | import { UserLocalStorageKeys } from '@root-helpers/users' |
10 | import { | 10 | import { |
diff --git a/client/src/app/shared/shared-forms/preview-upload.component.ts b/client/src/app/shared/shared-forms/preview-upload.component.ts index 7519734ba..7afff0b31 100644 --- a/client/src/app/shared/shared-forms/preview-upload.component.ts +++ b/client/src/app/shared/shared-forms/preview-upload.component.ts | |||
@@ -2,9 +2,9 @@ import { Component, forwardRef, Input, OnInit } from '@angular/core' | |||
2 | import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms' | 2 | import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms' |
3 | import { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser' | 3 | import { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser' |
4 | import { ServerService } from '@app/core' | 4 | import { ServerService } from '@app/core' |
5 | import { ServerConfig } from '@shared/models' | ||
6 | import { BytesPipe } from 'ngx-pipes' | ||
7 | import { I18n } from '@ngx-translate/i18n-polyfill' | 5 | import { I18n } from '@ngx-translate/i18n-polyfill' |
6 | import { ServerConfig } from '@shared/models' | ||
7 | import { BytesPipe } from '../shared-main' | ||
8 | 8 | ||
9 | @Component({ | 9 | @Component({ |
10 | selector: 'my-preview-upload', | 10 | selector: 'my-preview-upload', |
diff --git a/client/src/app/shared/shared-main/account/actor-avatar-info.component.ts b/client/src/app/shared/shared-main/account/actor-avatar-info.component.ts index 0c04ae4a6..1389218cc 100644 --- a/client/src/app/shared/shared-main/account/actor-avatar-info.component.ts +++ b/client/src/app/shared/shared-main/account/actor-avatar-info.component.ts | |||
@@ -1,7 +1,6 @@ | |||
1 | import { BytesPipe } from 'ngx-pipes' | ||
2 | import { Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core' | 1 | import { Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core' |
3 | import { Notifier, ServerService } from '@app/core' | 2 | import { Notifier, ServerService } from '@app/core' |
4 | import { Account, VideoChannel } from '@app/shared/shared-main' | 3 | import { Account, BytesPipe, VideoChannel } from '@app/shared/shared-main' |
5 | import { I18n } from '@ngx-translate/i18n-polyfill' | 4 | import { I18n } from '@ngx-translate/i18n-polyfill' |
6 | import { ServerConfig } from '@shared/models' | 5 | import { ServerConfig } from '@shared/models' |
7 | 6 | ||
diff --git a/client/src/app/shared/shared-main/angular/bytes.pipe.ts b/client/src/app/shared/shared-main/angular/bytes.pipe.ts new file mode 100644 index 000000000..f4f473568 --- /dev/null +++ b/client/src/app/shared/shared-main/angular/bytes.pipe.ts | |||
@@ -0,0 +1,34 @@ | |||
1 | import { Pipe, PipeTransform } from '@angular/core' | ||
2 | |||
3 | // Thanks: https://github.com/danrevah/ngx-pipes/blob/master/src/ng-pipes/pipes/math/bytes.ts | ||
4 | |||
5 | @Pipe({ name: 'bytes' }) | ||
6 | export class BytesPipe implements PipeTransform { | ||
7 | private dictionary: Array<{ max: number; type: string }> = [ | ||
8 | { max: 1024, type: 'B' }, | ||
9 | { max: 1048576, type: 'KB' }, | ||
10 | { max: 1073741824, type: 'MB' }, | ||
11 | { max: 1.0995116e12, type: 'GB' } | ||
12 | ] | ||
13 | |||
14 | transform (value: number, precision?: number | undefined): string | number { | ||
15 | const format = this.dictionary.find(d => value < d.max) || this.dictionary[this.dictionary.length - 1] | ||
16 | const calc = value / (format.max / 1024) | ||
17 | |||
18 | const num = precision === undefined | ||
19 | ? calc | ||
20 | : applyPrecision(calc, precision) | ||
21 | |||
22 | return `${num} ${format.type}` | ||
23 | } | ||
24 | } | ||
25 | |||
26 | function applyPrecision (num: number, precision: number) { | ||
27 | if (precision <= 0) { | ||
28 | return Math.round(num) | ||
29 | } | ||
30 | |||
31 | const tho = 10 ** precision | ||
32 | |||
33 | return Math.round(num * tho) / tho | ||
34 | } | ||
diff --git a/client/src/app/shared/shared-main/angular/index.ts b/client/src/app/shared/shared-main/angular/index.ts index 3b072fb84..9ba815136 100644 --- a/client/src/app/shared/shared-main/angular/index.ts +++ b/client/src/app/shared/shared-main/angular/index.ts | |||
@@ -1,3 +1,4 @@ | |||
1 | export * from './bytes.pipe' | ||
1 | export * from './from-now.pipe' | 2 | export * from './from-now.pipe' |
2 | export * from './infinite-scroller.directive' | 3 | export * from './infinite-scroller.directive' |
3 | export * from './number-formatter.pipe' | 4 | export * from './number-formatter.pipe' |
diff --git a/client/src/app/shared/shared-main/angular/number-formatter.pipe.ts b/client/src/app/shared/shared-main/angular/number-formatter.pipe.ts index 8a0756a36..e2eba3a60 100644 --- a/client/src/app/shared/shared-main/angular/number-formatter.pipe.ts +++ b/client/src/app/shared/shared-main/angular/number-formatter.pipe.ts | |||
@@ -1,6 +1,6 @@ | |||
1 | import { Pipe, PipeTransform } from '@angular/core' | 1 | import { Pipe, PipeTransform } from '@angular/core' |
2 | 2 | ||
3 | // Thanks: https://github.com/danrevah/ngx-pipes/blob/master/src/pipes/math/bytes.ts | 3 | // Thanks: https://github.com/danrevah/ngx-pipes/blob/master/src/ng-pipes/pipes/math/bytes.ts |
4 | 4 | ||
5 | @Pipe({ name: 'myNumberFormatter' }) | 5 | @Pipe({ name: 'myNumberFormatter' }) |
6 | export class NumberFormatterPipe implements PipeTransform { | 6 | export class NumberFormatterPipe implements PipeTransform { |
diff --git a/client/src/app/shared/shared-main/shared-main.module.ts b/client/src/app/shared/shared-main/shared-main.module.ts index c6192f6f8..6186db4d6 100644 --- a/client/src/app/shared/shared-main/shared-main.module.ts +++ b/client/src/app/shared/shared-main/shared-main.module.ts | |||
@@ -1,4 +1,3 @@ | |||
1 | import { BytesPipe, KeysPipe, NgPipesModule } from 'ngx-pipes' | ||
2 | import { SharedModule as PrimeSharedModule } from 'primeng/api' | 1 | import { SharedModule as PrimeSharedModule } from 'primeng/api' |
3 | import { ClipboardModule } from '@angular/cdk/clipboard' | 2 | import { ClipboardModule } from '@angular/cdk/clipboard' |
4 | import { CommonModule, DatePipe } from '@angular/common' | 3 | import { CommonModule, DatePipe } from '@angular/common' |
@@ -17,7 +16,7 @@ import { | |||
17 | import { I18n } from '@ngx-translate/i18n-polyfill' | 16 | import { I18n } from '@ngx-translate/i18n-polyfill' |
18 | import { SharedGlobalIconModule } from '../shared-icons' | 17 | import { SharedGlobalIconModule } from '../shared-icons' |
19 | import { AccountService, ActorAvatarInfoComponent, AvatarComponent } from './account' | 18 | import { AccountService, ActorAvatarInfoComponent, AvatarComponent } from './account' |
20 | import { FromNowPipe, InfiniteScrollerDirective, NumberFormatterPipe, PeerTubeTemplateDirective } from './angular' | 19 | import { FromNowPipe, InfiniteScrollerDirective, NumberFormatterPipe, PeerTubeTemplateDirective, BytesPipe } from './angular' |
21 | import { AUTH_INTERCEPTOR_PROVIDER } from './auth' | 20 | import { AUTH_INTERCEPTOR_PROVIDER } from './auth' |
22 | import { ActionDropdownComponent, ButtonComponent, DeleteButtonComponent, EditButtonComponent } from './buttons' | 21 | import { ActionDropdownComponent, ButtonComponent, DeleteButtonComponent, EditButtonComponent } from './buttons' |
23 | import { DateToggleComponent } from './date' | 22 | import { DateToggleComponent } from './date' |
@@ -47,7 +46,6 @@ import { VideoChannelService } from './video-channel' | |||
47 | ClipboardModule, | 46 | ClipboardModule, |
48 | 47 | ||
49 | PrimeSharedModule, | 48 | PrimeSharedModule, |
50 | NgPipesModule, | ||
51 | 49 | ||
52 | SharedGlobalIconModule | 50 | SharedGlobalIconModule |
53 | ], | 51 | ], |
@@ -57,8 +55,9 @@ import { VideoChannelService } from './video-channel' | |||
57 | ActorAvatarInfoComponent, | 55 | ActorAvatarInfoComponent, |
58 | 56 | ||
59 | FromNowPipe, | 57 | FromNowPipe, |
60 | InfiniteScrollerDirective, | ||
61 | NumberFormatterPipe, | 58 | NumberFormatterPipe, |
59 | BytesPipe, | ||
60 | InfiniteScrollerDirective, | ||
62 | PeerTubeTemplateDirective, | 61 | PeerTubeTemplateDirective, |
63 | 62 | ||
64 | ActionDropdownComponent, | 63 | ActionDropdownComponent, |
@@ -98,15 +97,15 @@ import { VideoChannelService } from './video-channel' | |||
98 | ClipboardModule, | 97 | ClipboardModule, |
99 | 98 | ||
100 | PrimeSharedModule, | 99 | PrimeSharedModule, |
101 | BytesPipe, | ||
102 | KeysPipe, | ||
103 | 100 | ||
104 | AvatarComponent, | 101 | AvatarComponent, |
105 | ActorAvatarInfoComponent, | 102 | ActorAvatarInfoComponent, |
106 | 103 | ||
107 | FromNowPipe, | 104 | FromNowPipe, |
108 | InfiniteScrollerDirective, | 105 | BytesPipe, |
109 | NumberFormatterPipe, | 106 | NumberFormatterPipe, |
107 | |||
108 | InfiniteScrollerDirective, | ||
110 | PeerTubeTemplateDirective, | 109 | PeerTubeTemplateDirective, |
111 | 110 | ||
112 | ActionDropdownComponent, | 111 | ActionDropdownComponent, |
diff --git a/client/src/app/shared/shared-main/users/user-quota.component.ts b/client/src/app/shared/shared-main/users/user-quota.component.ts index a8f56e4d6..6830ad8fe 100644 --- a/client/src/app/shared/shared-main/users/user-quota.component.ts +++ b/client/src/app/shared/shared-main/users/user-quota.component.ts | |||
@@ -1,8 +1,8 @@ | |||
1 | import { Subject } from 'rxjs' | 1 | import { Subject } from 'rxjs' |
2 | import { BytesPipe } from 'ngx-pipes' | ||
3 | import { Component, Input, OnInit } from '@angular/core' | 2 | import { Component, Input, OnInit } from '@angular/core' |
4 | import { User, UserService } from '@app/core' | 3 | import { User, UserService } from '@app/core' |
5 | import { I18n } from '@ngx-translate/i18n-polyfill' | 4 | import { I18n } from '@ngx-translate/i18n-polyfill' |
5 | import { BytesPipe } from '../angular' | ||
6 | 6 | ||
7 | @Component({ | 7 | @Component({ |
8 | selector: 'my-user-quota', | 8 | selector: 'my-user-quota', |
diff --git a/client/src/app/shared/shared-video-miniature/video-download.component.ts b/client/src/app/shared/shared-video-miniature/video-download.component.ts index 4fd06eacf..e3d6a1969 100644 --- a/client/src/app/shared/shared-video-miniature/video-download.component.ts +++ b/client/src/app/shared/shared-video-miniature/video-download.component.ts | |||
@@ -1,11 +1,10 @@ | |||
1 | import { mapValues, pick } from 'lodash-es' | 1 | import { mapValues, pick } from 'lodash-es' |
2 | import { BytesPipe } from 'ngx-pipes' | ||
3 | import { Component, ElementRef, ViewChild } from '@angular/core' | 2 | import { Component, ElementRef, ViewChild } from '@angular/core' |
4 | import { AuthService, Notifier } from '@app/core' | 3 | import { AuthService, Notifier } from '@app/core' |
5 | import { NgbActiveModal, NgbModal } from '@ng-bootstrap/ng-bootstrap' | 4 | import { NgbActiveModal, NgbModal } from '@ng-bootstrap/ng-bootstrap' |
6 | import { I18n } from '@ngx-translate/i18n-polyfill' | 5 | import { I18n } from '@ngx-translate/i18n-polyfill' |
7 | import { VideoCaption, VideoFile, VideoPrivacy } from '@shared/models' | 6 | import { VideoCaption, VideoFile, VideoPrivacy } from '@shared/models' |
8 | import { NumberFormatterPipe, VideoDetails, VideoService } from '../shared-main' | 7 | import { BytesPipe, NumberFormatterPipe, VideoDetails, VideoService } from '../shared-main' |
9 | 8 | ||
10 | type DownloadType = 'video' | 'subtitles' | 9 | type DownloadType = 'video' | 'subtitles' |
11 | type FileMetadata = { [key: string]: { label: string, value: string }} | 10 | type FileMetadata = { [key: string]: { label: string, value: string }} |
diff --git a/client/yarn.lock b/client/yarn.lock index 38aea725e..4fe21c1a5 100644 --- a/client/yarn.lock +++ b/client/yarn.lock | |||
@@ -7873,13 +7873,6 @@ next-tick@~1.0.0: | |||
7873 | resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" | 7873 | resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" |
7874 | integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= | 7874 | integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= |
7875 | 7875 | ||
7876 | ngx-pipes@^2.6.0: | ||
7877 | version "2.7.5" | ||
7878 | resolved "https://registry.yarnpkg.com/ngx-pipes/-/ngx-pipes-2.7.5.tgz#22e2e4b7015ae9103210dfa2dacd6f4ae4411639" | ||
7879 | integrity sha512-hlxHzu+snGJ038Z+HdkgEZRlZeE7suDTLWJD1yUP11eAM+xLPJAur1QtvvtZTHRHutOc7Wij1keBtuWIS9D0JQ== | ||
7880 | dependencies: | ||
7881 | tslib "^2.0.0" | ||
7882 | |||
7883 | nice-try@^1.0.4: | 7876 | nice-try@^1.0.4: |
7884 | version "1.0.5" | 7877 | version "1.0.5" |
7885 | resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" | 7878 | resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" |