Merge branch 'upstream/master' into search-bar-network-regex
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
/* tslint:disable */
|
||||
import { Pipe, PipeTransform } from '@angular/core';
|
||||
import { isNumberFinite, isPositive, isInteger, toDecimal } from './utils';
|
||||
import { isNumberFinite, isPositive, isInteger, toDecimal, toSigFigs } from './utils';
|
||||
|
||||
export type ByteUnit = 'B' | 'kB' | 'MB' | 'GB' | 'TB';
|
||||
|
||||
@@ -17,7 +17,7 @@ export class BytesPipe implements PipeTransform {
|
||||
'TB': {max: Number.MAX_SAFE_INTEGER, prev: 'GB'}
|
||||
};
|
||||
|
||||
transform(input: any, decimal: number = 0, from: ByteUnit = 'B', to?: ByteUnit): any {
|
||||
transform(input: any, decimal: number = 0, from: ByteUnit = 'B', to?: ByteUnit, plaintext = false, sigfigs?: number): any {
|
||||
|
||||
if (!(isNumberFinite(input) &&
|
||||
isNumberFinite(decimal) &&
|
||||
@@ -33,27 +33,35 @@ export class BytesPipe implements PipeTransform {
|
||||
unit = BytesPipe.formats[unit].prev!;
|
||||
}
|
||||
|
||||
let numberFormat = sigfigs == null ?
|
||||
(number) => toDecimal(number, decimal).toString() :
|
||||
(number) => toSigFigs(number, sigfigs);
|
||||
|
||||
if (to) {
|
||||
const format = BytesPipe.formats[to];
|
||||
|
||||
const result = toDecimal(BytesPipe.calculateResult(format, bytes), decimal);
|
||||
const result = numberFormat(BytesPipe.calculateResult(format, bytes));
|
||||
|
||||
return BytesPipe.formatResult(result, to);
|
||||
return BytesPipe.formatResult(result, to, plaintext);
|
||||
}
|
||||
|
||||
for (const key in BytesPipe.formats) {
|
||||
const format = BytesPipe.formats[key];
|
||||
if (bytes < format.max) {
|
||||
|
||||
const result = toDecimal(BytesPipe.calculateResult(format, bytes), decimal);
|
||||
const result = numberFormat(BytesPipe.calculateResult(format, bytes));
|
||||
|
||||
return BytesPipe.formatResult(result, key);
|
||||
return BytesPipe.formatResult(result, key, plaintext);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static formatResult(result: number, unit: string): string {
|
||||
return `${result} <span class="symbol">${unit}</span>`;
|
||||
static formatResult(result: string, unit: string, plaintext): string {
|
||||
if (plaintext) {
|
||||
return `${result} ${unit}`;
|
||||
} else {
|
||||
return `${result} <span class="symbol">${unit}</span>`;
|
||||
}
|
||||
}
|
||||
|
||||
static calculateResult(format: { max: number, prev?: ByteUnit }, bytes: number) {
|
||||
|
||||
@@ -54,6 +54,10 @@ export function toDecimal(value: number, decimal: number): number {
|
||||
return Math.round(value * Math.pow(10, decimal)) / Math.pow(10, decimal);
|
||||
}
|
||||
|
||||
export function toSigFigs(value: number, sigFigs: number): string {
|
||||
return value >= Math.pow(10, sigFigs - 1) ? Math.round(value).toString() : value.toPrecision(sigFigs);
|
||||
}
|
||||
|
||||
export function upperFirst(value: string): string {
|
||||
return value.slice(0, 1).toUpperCase() + value.slice(1);
|
||||
}
|
||||
@@ -309,3 +313,28 @@ export function takeWhile(input: any[], predicate: CollectionPredicate) {
|
||||
return takeUntil(input, (item: any, index: number | undefined, collection: any[] | undefined) =>
|
||||
!predicate(item, index, collection));
|
||||
}
|
||||
|
||||
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Browser_detection_using_the_user_agent
|
||||
export function hasTouchScreen(): boolean {
|
||||
let hasTouchScreen = false;
|
||||
if ('maxTouchPoints' in navigator) {
|
||||
hasTouchScreen = navigator.maxTouchPoints > 0;
|
||||
} else if ('msMaxTouchPoints' in navigator) {
|
||||
// @ts-ignore
|
||||
hasTouchScreen = navigator.msMaxTouchPoints > 0;
|
||||
} else {
|
||||
const mQ = matchMedia?.('(pointer:coarse)');
|
||||
if (mQ?.media === '(pointer:coarse)') {
|
||||
hasTouchScreen = !!mQ.matches;
|
||||
} else if ('orientation' in window) {
|
||||
hasTouchScreen = true; // deprecated, but good fallback
|
||||
} else {
|
||||
// @ts-ignore - Only as a last resort, fall back to user agent sniffing
|
||||
const UA = navigator.userAgent;
|
||||
hasTouchScreen =
|
||||
/\b(BlackBerry|webOS|iPhone|IEMobile)\b/i.test(UA) ||
|
||||
/\b(Android|Windows Phone|iPad|iPod)\b/i.test(UA);
|
||||
}
|
||||
}
|
||||
return hasTouchScreen;
|
||||
}
|
||||
Reference in New Issue
Block a user