aboutsummaryrefslogtreecommitdiff
path: root/src/Utils.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/Utils.ts')
-rw-r--r--src/Utils.ts85
1 files changed, 50 insertions, 35 deletions
diff --git a/src/Utils.ts b/src/Utils.ts
index 330ca59f9..852083834 100644
--- a/src/Utils.ts
+++ b/src/Utils.ts
@@ -1,12 +1,13 @@
-import v4 = require('uuid/v4');
-import v5 = require('uuid/v5');
-import { ColorState } from 'react-color';
+import { ColorResult } from 'react-color';
+import * as uuid from 'uuid';
+//import { Socket } from '../node_modules/socket.io-client';
+import * as Color from 'color';
import * as rp from 'request-promise';
-import { Socket } from 'socket.io';
+import { Socket } from '../node_modules/socket.io/dist/index';
import { DocumentType } from './client/documents/DocumentTypes';
import { Colors } from './client/views/global/globalEnums';
import { Message } from './server/Message';
-import Color = require('color');
+import { DocumentView } from './client/views/nodes/DocumentView';
export namespace Utils {
export let CLICK_TIME = 300;
@@ -48,11 +49,15 @@ export namespace Utils {
}
export function GenerateGuid(): string {
- return v4();
+ return uuid.v4();
}
export function GenerateDeterministicGuid(seed: string): string {
- return v5(seed, v5.URL);
+ return uuid.v5(seed, uuid.v5.URL);
+ }
+
+ export function GuestID() {
+ return '__guest__';
}
/**
@@ -139,7 +144,7 @@ export namespace Utils {
return (number < 16 ? '0' : '') + number.toString(16).toUpperCase();
}
- export function colorString(color: ColorState) {
+ export function colorString(color: ColorResult) {
return color.hex.startsWith('#') && color.hex.length < 8 ? color.hex + (color.rgb.a ? decimalToHexString(Math.round(color.rgb.a * 255)) : 'ff') : color.hex;
}
@@ -157,23 +162,19 @@ export namespace Utils {
const isTransparentFunctionHack = 'isTransparent(__value__)';
export const noRecursionHack = '__noRecursion';
- export const noDragsDocFilter = 'noDragDocs::any::check';
+
+ // special case filters
+ export const noDragDocsFilter = 'noDragDocs::any::check';
+ export const TransparentBackgroundFilter = `backgroundColor::${isTransparentFunctionHack},${noRecursionHack}::check`; // bcz: hack. noRecursion should probably be either another ':' delimited field, or it should be a modifier to the comparision (eg., check, x, etc) field
+ export const OpaqueBackgroundFilter = `backgroundColor::${isTransparentFunctionHack},${noRecursionHack}::x`; // bcz: hack. noRecursion should probably be either another ':' delimited field, or it should be a modifier to the comparision (eg., check, x, etc) field
+
export function IsRecursiveFilter(val: string) {
return !val.includes(noRecursionHack);
}
- export function HasTransparencyFilter(val: string) {
- return val.includes(isTransparentFunctionHack);
- }
- export function IsTransparentFilter() {
- // bcz: isTransparent(__value__) is a hack. it would be nice to have acual functions be parsed, but now Doc.matchFieldValue is hardwired to recognize just this one
- return `backgroundColor::${isTransparentFunctionHack},${noRecursionHack}::check`; // bcz: hack. noRecursion should probably be either another ':' delimited field, or it should be a modifier to the comparision (eg., check, x, etc) field
- }
- export function IsOpaqueFilter() {
- // bcz: isTransparent(__value__) is a hack. it would be nice to have acual functions be parsed, but now Doc.matchFieldValue is hardwired to recognize just this one
- return `backgroundColor::${isTransparentFunctionHack},${noRecursionHack}::x`; // bcz: hack. noRecursion should probably be either another ':' delimited field, or it should be a modifier to the comparision (eg., check, x, etc) field
- }
- export function IsPropUnsetFilter(prop: string) {
- return `${prop}::any,${noRecursionHack}::unset`;
+ export function HasFunctionFilter(val: string) {
+ if (val.includes(isTransparentFunctionHack)) return (color: string) => color !== '' && DashColor(color).alpha() !== 1;
+ // add other function filters here...
+ return undefined;
}
export function toRGBAstr(col: { r: number; g: number; b: number; a?: number }) {
@@ -402,14 +403,14 @@ export namespace Utils {
};
}
- export function Emit<T>(socket: Socket | SocketIOClient.Socket, message: Message<T>, args: T) {
+ export function Emit<T>(socket: Socket, message: Message<T>, args: T) {
log('Emit', message.Name, args, false);
socket.emit(message.Message, args);
}
- export function EmitCallback<T>(socket: Socket | SocketIOClient.Socket, message: Message<T>, args: T): Promise<any>;
- export function EmitCallback<T>(socket: Socket | SocketIOClient.Socket, message: Message<T>, args: T, fn: (args: any) => any): void;
- export function EmitCallback<T>(socket: Socket | SocketIOClient.Socket, message: Message<T>, args: T, fn?: (args: any) => any): void | Promise<any> {
+ export function EmitCallback<T>(socket: Socket, message: Message<T>, args: T): Promise<any>;
+ export function EmitCallback<T>(socket: Socket, message: Message<T>, args: T, fn: (args: any) => any): void;
+ export function EmitCallback<T>(socket: Socket, message: Message<T>, args: T, fn?: (args: any) => any): void | Promise<any> {
log('Emit', message.Name, args, false);
if (fn) {
socket.emit(message.Message, args, loggingCallback('Receiving', fn, message.Name));
@@ -418,7 +419,7 @@ export namespace Utils {
}
}
- export function AddServerHandler<T>(socket: Socket | SocketIOClient.Socket, message: Message<T>, handler: (args: T) => any) {
+ export function AddServerHandler<T>(socket: Socket, message: Message<T>, handler: (args: T) => any) {
socket.on(message.Message, loggingCallback('Incoming', handler, message.Name));
}
@@ -429,10 +430,10 @@ export namespace Utils {
});
}
export type RoomHandler = (socket: Socket, room: string) => any;
- export type UsedSockets = Socket | SocketIOClient.Socket;
+ export type UsedSockets = Socket;
export type RoomMessage = 'create or join' | 'created' | 'joined';
export function AddRoomHandler(socket: Socket, message: RoomMessage, handler: RoomHandler) {
- socket.on(message, room => handler(socket, room));
+ socket.on(message, (room: any) => handler(socket, room));
}
}
@@ -583,7 +584,7 @@ export function returnEmptyDoclist() {
return [] as any[];
}
-export let emptyPath = [];
+export let emptyPath: DocumentView[] = [];
export function emptyFunction() {
return undefined;
@@ -758,12 +759,9 @@ export function DashColor(color: string) {
}
export function lightOrDark(color: any) {
- if (color === 'transparent' || !color) return Colors.DARK_GRAY;
+ if (color === 'transparent' || !color) return Colors.BLACK;
if (color.startsWith?.('linear')) return Colors.BLACK;
- const nonAlphaColor = color.startsWith('#') ? (color as string).substring(0, 7) : color.startsWith('rgba') ? color.replace(/,.[^,]*\)/, ')').replace('rgba', 'rgb') : color;
- const col = DashColor(nonAlphaColor).rgb();
- const colsum = col.red() + col.green() + col.blue();
- if (colsum / col.alpha() > 400 || col.alpha() < 0.25) return Colors.DARK_GRAY;
+ if (DashColor(color).isLight()) return Colors.BLACK;
return Colors.WHITE;
}
@@ -897,3 +895,20 @@ export function setupMoveUpEvents(
document.addEventListener('pointerup', _upEvent, true);
document.addEventListener('click', _clickEvent, true);
}
+
+export function dateRangeStrToDates(dateStr: string) {
+ // dateStr in yyyy-mm-dd format
+ const dateRangeParts = dateStr.split('|'); // splits into from and to date
+ const fromParts = dateRangeParts[0].split('-');
+ const toParts = dateRangeParts[1].split('-');
+
+ const fromYear = parseInt(fromParts[0]);
+ const fromMonth = parseInt(fromParts[1]) - 1;
+ const fromDay = parseInt(fromParts[2]);
+
+ const toYear = parseInt(toParts[0]);
+ const toMonth = parseInt(toParts[1]) - 1;
+ const toDay = parseInt(toParts[2]);
+
+ return [new Date(fromYear, fromMonth, fromDay), new Date(toYear, toMonth, toDay)];
+}