From 1cdb04707301bc51b3ed6dd1c15c79a7b989b7f7 Mon Sep 17 00:00:00 2001 From: Tyler Schicke Date: Mon, 1 Apr 2019 19:54:05 -0400 Subject: Started refactoring props and collections --- src/client/views/Main.tsx | 2 +- .../views/collections/CollectionDockingView.tsx | 2 +- src/client/views/collections/CollectionPDFView.tsx | 17 ++++++------ .../views/collections/CollectionSchemaView.tsx | 13 +++++----- .../views/collections/CollectionVideoView.tsx | 7 ++--- src/client/views/collections/CollectionView.tsx | 15 ++++++----- .../views/collections/CollectionViewBase.tsx | 9 ++----- .../collectionFreeForm/CollectionFreeFormView.tsx | 2 +- src/client/views/nodes/AudioBox.tsx | 2 +- src/client/views/nodes/DocumentContentsView.tsx | 23 ++++++++++++++--- src/client/views/nodes/DocumentView.tsx | 11 +------- src/client/views/nodes/FieldView.tsx | 11 ++++---- src/client/views/nodes/FormattedTextBox.tsx | 10 ++++---- src/client/views/nodes/ImageBox.tsx | 8 +++--- src/client/views/nodes/KeyValueBox.tsx | 4 +-- src/client/views/nodes/KeyValuePair.tsx | 13 +++++----- src/client/views/nodes/PDFBox.tsx | 30 +++++++++++----------- src/client/views/nodes/VideoBox.tsx | 12 ++++----- src/client/views/nodes/WebBox.tsx | 4 +-- 19 files changed, 98 insertions(+), 97 deletions(-) (limited to 'src') diff --git a/src/client/views/Main.tsx b/src/client/views/Main.tsx index 75855c3d1..82fd1e7c9 100644 --- a/src/client/views/Main.tsx +++ b/src/client/views/Main.tsx @@ -228,7 +228,7 @@ export class Main extends React.Component { PanelWidth={this.pwidthFunc} PanelHeight={this.pheightFunc} isTopMost={true} - SelectOnLoad={false} + selectOnLoad={false} focus={this.focusDocument} ContainingCollectionView={undefined} /> } diff --git a/src/client/views/collections/CollectionDockingView.tsx b/src/client/views/collections/CollectionDockingView.tsx index f123149dd..c67354139 100644 --- a/src/client/views/collections/CollectionDockingView.tsx +++ b/src/client/views/collections/CollectionDockingView.tsx @@ -317,7 +317,7 @@ export class DockedFrameRenderer extends React.Component { PanelHeight={this._nativeHeight} ScreenToLocalTransform={this.ScreenToLocalTransform} isTopMost={true} - SelectOnLoad={false} + selectOnLoad={false} focus={(doc: Document) => { }} ContainingCollectionView={undefined} /> diff --git a/src/client/views/collections/CollectionPDFView.tsx b/src/client/views/collections/CollectionPDFView.tsx index 4d2daf149..6bb3bacc7 100644 --- a/src/client/views/collections/CollectionPDFView.tsx +++ b/src/client/views/collections/CollectionPDFView.tsx @@ -8,6 +8,7 @@ import { CollectionViewProps } from "./CollectionViewBase"; import "./CollectionPDFView.scss" import React = require("react"); import { FieldId } from "../../../fields/Field"; +import { CollectionFreeFormView } from "./collectionFreeForm/CollectionFreeFormView"; @observer @@ -30,7 +31,8 @@ export class CollectionPDFView extends React.Component {
-
); + + ); } // "inherited" CollectionView API starts here... @@ -47,13 +49,12 @@ export class CollectionPDFView extends React.Component { } } - get collectionViewType(): CollectionViewType { return CollectionViewType.Freeform; } - get subView(): any { return CollectionView.SubView(this); } - render() { - return (
- {this.subView} - {this.props.isSelected() ? this.uIButtons : (null)} -
) + return ( +
+ + {this.props.isSelected() ? this.uIButtons : (null)} +
+ ) } } \ No newline at end of file diff --git a/src/client/views/collections/CollectionSchemaView.tsx b/src/client/views/collections/CollectionSchemaView.tsx index 0ff6c3b40..0c7e28691 100644 --- a/src/client/views/collections/CollectionSchemaView.tsx +++ b/src/client/views/collections/CollectionSchemaView.tsx @@ -73,19 +73,18 @@ export class CollectionSchemaView extends CollectionViewBase { renderCell = (rowProps: CellInfo) => { let props: FieldViewProps = { - doc: rowProps.value[0], + Document: rowProps.value[0], fieldKey: rowProps.value[1], isSelected: () => false, select: () => { }, isTopMost: false, - bindings: {}, selectOnLoad: false, } let contents = ( ) let reference = React.createRef(); - let onItemDown = setupDrag(reference, () => props.doc, (containingCollection: CollectionView) => this.props.removeDocument(props.doc)); + let onItemDown = setupDrag(reference, () => props.Document, (containingCollection: CollectionView) => this.props.removeDocument(props.Document)); let applyToDoc = (doc: Document, value: string) => { let script = CompileScript(value, { this: doc }, true); if (!script.compiled) { @@ -105,20 +104,20 @@ export class CollectionSchemaView extends CollectionViewBase { return false; } return ( -
+
{ - let field = props.doc.Get(props.fieldKey); + let field = props.Document.Get(props.fieldKey); if (field && field instanceof Field) { return field.ToScriptString(); } return field || ""; }} SetValue={(value: string) => { - return applyToDoc(props.doc, value); + return applyToDoc(props.Document, value); }} OnFillDown={(value: string) => { this.props.Document.GetTAsync>(this.props.fieldKey, ListField).then((val) => { @@ -298,7 +297,7 @@ export class CollectionSchemaView extends CollectionViewBase { {doc instanceof Document ? { } } - get collectionViewType(): CollectionViewType { return CollectionViewType.Freeform; } - get subView(): any { return CollectionView.SubView(this); } - - render() { trace(); return (
- {this.subView} + {this.props.isSelected() ? this.uIButtons : (null)}
) } diff --git a/src/client/views/collections/CollectionView.tsx b/src/client/views/collections/CollectionView.tsx index a1498e0ae..e6351618c 100644 --- a/src/client/views/collections/CollectionView.tsx +++ b/src/client/views/collections/CollectionView.tsx @@ -10,7 +10,7 @@ import { NumberField } from "../../../fields/NumberField"; import { CollectionFreeFormView } from "./collectionFreeForm/CollectionFreeFormView"; import { CollectionDockingView } from "./CollectionDockingView"; import { CollectionSchemaView } from "./CollectionSchemaView"; -import { CollectionViewProps } from "./CollectionViewBase"; +import { CollectionViewProps, SubCollectionViewProps } from "./CollectionViewBase"; import { CollectionTreeView } from "./CollectionTreeView"; import { Field, FieldId, FieldWaiting } from "../../../fields/Field"; import { CurrentUserUtils } from "../../../server/authentication/models/current_user_utils"; @@ -39,7 +39,6 @@ export class CollectionView extends React.Component { public active: () => boolean = () => CollectionView.Active(this); addDocument = (doc: Document, allowDuplicates: boolean): boolean => { return CollectionView.AddDocument(this.props, doc, allowDuplicates); } removeDocument = (doc: Document): boolean => { return CollectionView.RemoveDocument(this.props, doc); } - get subView() { return CollectionView.SubView(this); } public static Active(self: CollectionView): boolean { var isSelected = self.props.isSelected(); @@ -140,9 +139,13 @@ export class CollectionView extends React.Component { } } - public static SubView(self: CollectionView) { - let subProps = { ...self.props, addDocument: self.addDocument, removeDocument: self.removeDocument, active: self.active, CollectionView: self } - switch (self.collectionViewType) { + public static SubViewProps(self: CollectionView): SubCollectionViewProps { + return { ...self.props, addDocument: self.addDocument, removeDocument: self.removeDocument, active: self.active, CollectionView: self } + } + + private get SubView() { + let subProps = CollectionView.SubViewProps(this); + switch (this.collectionViewType) { case CollectionViewType.Freeform: return () case CollectionViewType.Schema: return () case CollectionViewType.Docking: return () @@ -153,7 +156,7 @@ export class CollectionView extends React.Component { render() { return (
- {this.subView} + {this.SubView}
) } } diff --git a/src/client/views/collections/CollectionViewBase.tsx b/src/client/views/collections/CollectionViewBase.tsx index 987f3cb6c..c5a6c53b3 100644 --- a/src/client/views/collections/CollectionViewBase.tsx +++ b/src/client/views/collections/CollectionViewBase.tsx @@ -17,15 +17,10 @@ import { NumberField } from "../../../fields/NumberField"; import request = require("request"); import { ServerUtils } from "../../../server/ServerUtil"; import { Server } from "../../Server"; +import { FieldViewProps } from "../nodes/FieldView"; -export interface CollectionViewProps { - fieldKey: Key; - Document: Document; +export interface CollectionViewProps extends FieldViewProps { ScreenToLocalTransform: () => Transform; - isSelected: () => boolean; - isTopMost: boolean; - select: (ctrlPressed: boolean) => void; - bindings: any; panelWidth: () => number; panelHeight: () => number; focus: (doc: Document) => void; diff --git a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx index 60fb95ff5..51ab85b71 100644 --- a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx +++ b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx @@ -231,7 +231,7 @@ export class CollectionFreeFormView extends CollectionViewBase { RemoveDocument: this.props.removeDocument, ScreenToLocalTransform: this.getTransform, isTopMost: false, - SelectOnLoad: document.Id == this._selectOnLoaded, + selectOnLoad: document.Id == this._selectOnLoaded, PanelWidth: document.Width, PanelHeight: document.Height, ContentScaling: this.noScaling, diff --git a/src/client/views/nodes/AudioBox.tsx b/src/client/views/nodes/AudioBox.tsx index 6daf15f5f..0ce991485 100644 --- a/src/client/views/nodes/AudioBox.tsx +++ b/src/client/views/nodes/AudioBox.tsx @@ -28,7 +28,7 @@ export class AudioBox extends React.Component { render() { - let field = this.props.doc.Get(this.props.fieldKey) + let field = this.props.Document.Get(this.props.fieldKey) let path = field == FieldWaiting ? "http://techslides.com/demos/samples/sample.mp3" : field instanceof AudioField ? field.Data.href : "http://techslides.com/demos/samples/sample.mp3"; diff --git a/src/client/views/nodes/DocumentContentsView.tsx b/src/client/views/nodes/DocumentContentsView.tsx index 77551649c..a5e4b1a17 100644 --- a/src/client/views/nodes/DocumentContentsView.tsx +++ b/src/client/views/nodes/DocumentContentsView.tsx @@ -1,6 +1,6 @@ import { computed } from "mobx"; import { observer } from "mobx-react"; -import { FieldWaiting } from "../../../fields/Field"; +import { FieldWaiting, Field } from "../../../fields/Field"; import { Key } from "../../../fields/Key"; import { KeyStore } from "../../../fields/KeyStore"; import { ListField } from "../../../fields/ListField"; @@ -11,7 +11,7 @@ import { CollectionSchemaView } from "../collections/CollectionSchemaView"; import { CollectionVideoView } from "../collections/CollectionVideoView"; import { CollectionView } from "../collections/CollectionView"; import { AudioBox } from "./AudioBox"; -import { DocumentViewProps, JsxBindings } from "./DocumentView"; +import { DocumentViewProps } from "./DocumentView"; import "./DocumentView.scss"; import { FormattedTextBox } from "./FormattedTextBox"; import { ImageBox } from "./ImageBox"; @@ -21,8 +21,16 @@ import { VideoBox } from "./VideoBox"; import { WebBox } from "./WebBox"; import { HistogramBox } from "../../northstar/dash-nodes/HistogramBox"; import React = require("react"); +import { Document } from "../../../fields/Document"; +import { FieldViewProps } from "./FieldView"; +import { Without } from "../../../Utils"; const JsxParser = require('react-jsx-parser').default; //TODO Why does this need to be imported like this? +type BindingProps = Without +export interface JsxBindings { + props: BindingProps; + [keyName: string]: BindingProps | Field; +} @observer export class DocumentContentsView extends React.ComponentKey to an actual key Kestore.keyname e.g, "DataKey" => KeyStore.Data } diff --git a/src/client/views/nodes/DocumentView.tsx b/src/client/views/nodes/DocumentView.tsx index 71613ca4f..6530dafc6 100644 --- a/src/client/views/nodes/DocumentView.tsx +++ b/src/client/views/nodes/DocumentView.tsx @@ -32,7 +32,7 @@ export interface DocumentViewProps { PanelWidth: () => number; PanelHeight: () => number; focus: (doc: Document) => void; - SelectOnLoad: boolean; + selectOnLoad: boolean; } export interface JsxArgs extends DocumentViewProps { Keys: { [name: string]: Key } @@ -76,15 +76,6 @@ export function FakeJsxArgs(keys: string[], fields: string[] = []): JsxArgs { return args; } -export interface JsxBindings { - Document: Document; - isSelected: () => boolean; - select: (isCtrlPressed: boolean) => void; - isTopMost: boolean; - SelectOnLoad: boolean; - [prop: string]: any; -} - @observer diff --git a/src/client/views/nodes/FieldView.tsx b/src/client/views/nodes/FieldView.tsx index 4e83ec7b9..43688989b 100644 --- a/src/client/views/nodes/FieldView.tsx +++ b/src/client/views/nodes/FieldView.tsx @@ -28,23 +28,22 @@ import { KeyStore } from "../../../fields/KeyStore"; // export interface FieldViewProps { fieldKey: Key; - doc: Document; + Document: Document; isSelected: () => boolean; - select: () => void; + select: (isCtrlPressed: boolean) => void; isTopMost: boolean; selectOnLoad: boolean; - bindings: any; } @observer export class FieldView extends React.Component { public static LayoutString(fieldType: { name: string }, fieldStr: string = "DataKey") { - return `<${fieldType.name} doc={Document} DocumentViewForField={DocumentView} bindings={bindings} fieldKey={${fieldStr}} isSelected={isSelected} select={select} selectOnLoad={SelectOnLoad} isTopMost={isTopMost} />`; + return `<${fieldType.name} {...props} fieldKey={${fieldStr}} />`; } @computed get field(): FieldValue { - const { doc, fieldKey } = this.props; + const { Document: doc, fieldKey } = this.props; return doc.Get(fieldKey); } render() { @@ -76,7 +75,7 @@ export class FieldView extends React.Component { PanelWidth={() => 100} PanelHeight={() => 100} isTopMost={true} - SelectOnLoad={false} + selectOnLoad={false} focus={() => { }} isSelected={() => false} select={() => false} diff --git a/src/client/views/nodes/FormattedTextBox.tsx b/src/client/views/nodes/FormattedTextBox.tsx index 512ad7d70..99ba9addc 100644 --- a/src/client/views/nodes/FormattedTextBox.tsx +++ b/src/client/views/nodes/FormattedTextBox.tsx @@ -55,7 +55,7 @@ export class FormattedTextBox extends React.Component { if (this._editorView) { const state = this._editorView.state.apply(tx); this._editorView.updateState(state); - const { doc, fieldKey } = this.props; + const { Document: doc, fieldKey } = this.props; doc.SetDataOnPrototype(fieldKey, JSON.stringify(state.toJSON()), RichTextField); // doc.SetData(fieldKey, JSON.stringify(state.toJSON()), RichTextField); } @@ -74,7 +74,7 @@ export class FormattedTextBox extends React.Component { ] }; - let field = this.props.doc.GetT(this.props.fieldKey, RichTextField); + let field = this.props.Document.GetT(this.props.fieldKey, RichTextField); if (field && field != FieldWaiting && field.Data) { state = EditorState.fromJSON(config, JSON.parse(field.Data)); } else { @@ -88,7 +88,7 @@ export class FormattedTextBox extends React.Component { } this._reactionDisposer = reaction(() => { - const field = this.props.doc.GetT(this.props.fieldKey, RichTextField); + const field = this.props.Document.GetT(this.props.fieldKey, RichTextField); return field && field != FieldWaiting ? field.Data : undefined; }, (field) => { if (field && this._editorView) { @@ -96,7 +96,7 @@ export class FormattedTextBox extends React.Component { } }) if (this.props.selectOnLoad) { - this.props.select(); + this.props.select(false); this._editorView!.focus(); } } @@ -116,7 +116,7 @@ export class FormattedTextBox extends React.Component { @action onChange(e: React.ChangeEvent) { - const { fieldKey, doc } = this.props; + const { fieldKey, Document: doc } = this.props; doc.SetOnPrototype(fieldKey, new RichTextField(e.target.value)) // doc.SetData(fieldKey, e.target.value, RichTextField); } diff --git a/src/client/views/nodes/ImageBox.tsx b/src/client/views/nodes/ImageBox.tsx index 60d1f7214..9b9dfe645 100644 --- a/src/client/views/nodes/ImageBox.tsx +++ b/src/client/views/nodes/ImageBox.tsx @@ -39,7 +39,7 @@ export class ImageBox extends React.Component { onLoad = (target: any) => { var h = this._imgRef.current!.naturalHeight; var w = this._imgRef.current!.naturalWidth; - this.props.doc.SetNumber(KeyStore.NativeHeight, this.props.doc.GetNumber(KeyStore.NativeWidth, 0) * h / w) + this.props.Document.SetNumber(KeyStore.NativeHeight, this.props.Document.GetNumber(KeyStore.NativeWidth, 0) * h / w) } componentDidMount() { @@ -91,7 +91,7 @@ export class ImageBox extends React.Component { } specificContextMenu = (e: React.MouseEvent): void => { - let field = this.props.doc.GetT(this.props.fieldKey, ImageField); + let field = this.props.Document.GetT(this.props.fieldKey, ImageField); if (field && field !== FieldWaiting) { let url = field.Data.href; ContextMenu.Instance.addItem({ @@ -103,10 +103,10 @@ export class ImageBox extends React.Component { } render() { - let field = this.props.doc.Get(this.props.fieldKey); + let field = this.props.Document.Get(this.props.fieldKey); let path = field == FieldWaiting ? "https://image.flaticon.com/icons/svg/66/66163.svg" : field instanceof ImageField ? field.Data.href : "http://www.cs.brown.edu/~bcz/face.gif"; - let nativeWidth = this.props.doc.GetNumber(KeyStore.NativeWidth, 1); + let nativeWidth = this.props.Document.GetNumber(KeyStore.NativeWidth, 1); return (
Image not found diff --git a/src/client/views/nodes/KeyValueBox.tsx b/src/client/views/nodes/KeyValueBox.tsx index 283c1f732..a3478143d 100644 --- a/src/client/views/nodes/KeyValueBox.tsx +++ b/src/client/views/nodes/KeyValueBox.tsx @@ -34,7 +34,7 @@ export class KeyValueBox extends React.Component { onEnterKey = (e: React.KeyboardEvent): void => { if (e.key == 'Enter') { if (this._keyInput && this._valueInput) { - let doc = this.props.doc.GetT(KeyStore.Data, Document); + let doc = this.props.Document.GetT(KeyStore.Data, Document); if (!doc || doc == FieldWaiting) { return } @@ -69,7 +69,7 @@ export class KeyValueBox extends React.Component { } createTable = () => { - let doc = this.props.doc.GetT(KeyStore.Data, Document); + let doc = this.props.Document.GetT(KeyStore.Data, Document); if (!doc || doc == FieldWaiting) { return Loading... } diff --git a/src/client/views/nodes/KeyValuePair.tsx b/src/client/views/nodes/KeyValuePair.tsx index 7ed5ee272..2fc11328f 100644 --- a/src/client/views/nodes/KeyValuePair.tsx +++ b/src/client/views/nodes/KeyValuePair.tsx @@ -43,12 +43,11 @@ export class KeyValuePair extends React.Component { } let props: FieldViewProps = { - doc: this.props.doc, + Document: this.props.doc, fieldKey: this.key, isSelected: () => false, select: () => { }, isTopMost: false, - bindings: {}, selectOnLoad: false, } let contents = ( @@ -61,15 +60,15 @@ export class KeyValuePair extends React.Component {
{this.key.Name}
{ - let field = props.doc.Get(props.fieldKey); + let field = props.Document.Get(props.fieldKey); if (field && field instanceof Field) { return field.ToScriptString(); } @@ -82,12 +81,12 @@ export class KeyValuePair extends React.Component { } let field = script(); if (field instanceof Field) { - props.doc.Set(props.fieldKey, field); + props.Document.Set(props.fieldKey, field); return true; } else { let dataField = ToField(field); if (dataField) { - props.doc.Set(props.fieldKey, dataField); + props.Document.Set(props.fieldKey, dataField); return true; } } diff --git a/src/client/views/nodes/PDFBox.tsx b/src/client/views/nodes/PDFBox.tsx index 28a1f9757..3b5e3a570 100644 --- a/src/client/views/nodes/PDFBox.tsx +++ b/src/client/views/nodes/PDFBox.tsx @@ -87,8 +87,8 @@ export class PDFBox extends React.Component { @observable private _interactive: boolean = false; @observable private _loaded: boolean = false; - @computed private get curPage() { return this.props.doc.GetNumber(KeyStore.CurPage, 1); } - @computed private get thumbnailPage() { return this.props.doc.GetNumber(KeyStore.ThumbnailPage, -1); } + @computed private get curPage() { return this.props.Document.GetNumber(KeyStore.CurPage, 1); } + @computed private get thumbnailPage() { return this.props.Document.GetNumber(KeyStore.ThumbnailPage, -1); } componentDidMount() { this._reactionDisposer = reaction( @@ -379,10 +379,10 @@ export class PDFBox extends React.Component { setTimeout(() => { var me = this; htmlToImage.toPng(this._mainDiv.current!, - { width: me.props.doc.GetNumber(KeyStore.NativeWidth, 0), height: me.props.doc.GetNumber(KeyStore.NativeHeight, 0), quality: 0.5 }) + { width: me.props.Document.GetNumber(KeyStore.NativeWidth, 0), height: me.props.Document.GetNumber(KeyStore.NativeHeight, 0), quality: 0.5 }) .then(function (dataUrl: string) { - me.props.doc.SetData(KeyStore.Thumbnail, new URL(dataUrl), ImageField); - me.props.doc.SetNumber(KeyStore.ThumbnailPage, me.props.doc.GetNumber(KeyStore.CurPage, -1)); + me.props.Document.SetData(KeyStore.Thumbnail, new URL(dataUrl), ImageField); + me.props.Document.SetNumber(KeyStore.ThumbnailPage, me.props.Document.GetNumber(KeyStore.CurPage, -1)); }) .catch(function (error: any) { console.error('oops, something went wrong!', error); @@ -409,7 +409,7 @@ export class PDFBox extends React.Component { } // bcz: the number of pages should really be set when the document is imported. - this.props.doc.SetNumber(KeyStore.NumPages, page._transport.numPages); + this.props.Document.SetNumber(KeyStore.NumPages, page._transport.numPages); if (this._perPageInfo.length == 0) { //Makes sure it only runs once this._perPageInfo = [...Array(page._transport.numPages)] } @@ -421,13 +421,13 @@ export class PDFBox extends React.Component { // bcz: the nativeHeight should really be set when the document is imported. // also, the native dimensions could be different for different pages of the PDF // so this design is flawed. - var nativeWidth = this.props.doc.GetNumber(KeyStore.NativeWidth, 0); - if (!this.props.doc.GetNumber(KeyStore.NativeHeight, 0)) { + var nativeWidth = this.props.Document.GetNumber(KeyStore.NativeWidth, 0); + if (!this.props.Document.GetNumber(KeyStore.NativeHeight, 0)) { var nativeHeight = nativeWidth * r.entry.height / r.entry.width; - this.props.doc.SetNumber(KeyStore.Height, nativeHeight / nativeWidth * this.props.doc.GetNumber(KeyStore.Width, 0)); - this.props.doc.SetNumber(KeyStore.NativeHeight, nativeHeight); + this.props.Document.SetNumber(KeyStore.Height, nativeHeight / nativeWidth * this.props.Document.GetNumber(KeyStore.Width, 0)); + this.props.Document.SetNumber(KeyStore.NativeHeight, nativeHeight); } - if (!this.props.doc.GetT(KeyStore.Thumbnail, ImageField)) { + if (!this.props.Document.GetT(KeyStore.Thumbnail, ImageField)) { this.saveThumbnail(); } } @@ -436,8 +436,8 @@ export class PDFBox extends React.Component { get pdfContent() { let page = this.curPage; const renderHeight = 2400; - let pdfUrl = this.props.doc.GetT(this.props.fieldKey, PDFField); - let xf = this.props.doc.GetNumber(KeyStore.NativeHeight, 0) / renderHeight; + let pdfUrl = this.props.Document.GetT(this.props.fieldKey, PDFField); + let xf = this.props.Document.GetNumber(KeyStore.NativeHeight, 0) / renderHeight; return
@@ -454,7 +454,7 @@ export class PDFBox extends React.Component { @computed get pdfRenderer() { let proxy = this._loaded ? (null) : this.imageProxyRenderer; - let pdfUrl = this.props.doc.GetT(this.props.fieldKey, PDFField); + let pdfUrl = this.props.Document.GetT(this.props.fieldKey, PDFField); if ((!this._interactive && proxy) || !pdfUrl || pdfUrl == FieldWaiting) { return proxy; } @@ -468,7 +468,7 @@ export class PDFBox extends React.Component { @computed get imageProxyRenderer() { - let thumbField = this.props.doc.Get(KeyStore.Thumbnail); + let thumbField = this.props.Document.Get(KeyStore.Thumbnail); if (thumbField) { let path = thumbField == FieldWaiting || this.thumbnailPage != this.curPage ? "https://image.flaticon.com/icons/svg/66/66163.svg" : thumbField instanceof ImageField ? thumbField.Data.href : "http://cs.brown.edu/people/bcz/prairie.jpg"; diff --git a/src/client/views/nodes/VideoBox.tsx b/src/client/views/nodes/VideoBox.tsx index 7c0db83a8..72495a964 100644 --- a/src/client/views/nodes/VideoBox.tsx +++ b/src/client/views/nodes/VideoBox.tsx @@ -20,7 +20,7 @@ export class VideoBox extends React.Component { super(props); } - @computed private get curPage() { return this.props.doc.GetNumber(KeyStore.CurPage, -1); } + @computed private get curPage() { return this.props.Document.GetNumber(KeyStore.CurPage, -1); } _loaded: boolean = false; @@ -31,12 +31,12 @@ export class VideoBox extends React.Component { // bcz: the nativeHeight should really be set when the document is imported. // also, the native dimensions could be different for different pages of the PDF // so this design is flawed. - var nativeWidth = this.props.doc.GetNumber(KeyStore.NativeWidth, 0); - var nativeHeight = this.props.doc.GetNumber(KeyStore.NativeHeight, 0); + var nativeWidth = this.props.Document.GetNumber(KeyStore.NativeWidth, 0); + var nativeHeight = this.props.Document.GetNumber(KeyStore.NativeHeight, 0); var newNativeHeight = nativeWidth * r.entry.height / r.entry.width; if (!nativeHeight && newNativeHeight != nativeHeight && !isNaN(newNativeHeight)) { - this.props.doc.SetNumber(KeyStore.Height, newNativeHeight / nativeWidth * this.props.doc.GetNumber(KeyStore.Width, 0)); - this.props.doc.SetNumber(KeyStore.NativeHeight, newNativeHeight); + this.props.Document.SetNumber(KeyStore.Height, newNativeHeight / nativeWidth * this.props.Document.GetNumber(KeyStore.Width, 0)); + this.props.Document.SetNumber(KeyStore.NativeHeight, newNativeHeight); } } else { this._loaded = true; @@ -56,7 +56,7 @@ export class VideoBox extends React.Component { } render() { - let field = this.props.doc.GetT(this.props.fieldKey, VideoField); + let field = this.props.Document.GetT(this.props.fieldKey, VideoField); if (!field || field === FieldWaiting) { return
Loading
} diff --git a/src/client/views/nodes/WebBox.tsx b/src/client/views/nodes/WebBox.tsx index 2ca8d49ce..92e2fabd4 100644 --- a/src/client/views/nodes/WebBox.tsx +++ b/src/client/views/nodes/WebBox.tsx @@ -16,10 +16,10 @@ export class WebBox extends React.Component { super(props); } - @computed get html(): string { return this.props.doc.GetHtml(KeyStore.Data, ""); } + @computed get html(): string { return this.props.Document.GetHtml(KeyStore.Data, ""); } render() { - let field = this.props.doc.Get(this.props.fieldKey); + let field = this.props.Document.Get(this.props.fieldKey); let path = field == FieldWaiting ? "https://image.flaticon.com/icons/svg/66/66163.svg" : field instanceof WebField ? field.Data.href : "https://crossorigin.me/" + "https://cs.brown.edu"; -- cgit v1.2.3-70-g09d2 From adecb4a47cac3c2f92d11d8f500d4decf70a06d1 Mon Sep 17 00:00:00 2001 From: Tyler Schicke Date: Tue, 2 Apr 2019 13:00:00 -0400 Subject: More work on collection refactor --- .../views/collections/CollectionBaseView.tsx | 139 ++++++++++++++++ src/client/views/collections/CollectionView.tsx | 178 ++++----------------- .../views/collections/CollectionViewBase.tsx | 15 +- src/client/views/nodes/FieldView.tsx | 5 + 4 files changed, 174 insertions(+), 163 deletions(-) create mode 100644 src/client/views/collections/CollectionBaseView.tsx (limited to 'src') diff --git a/src/client/views/collections/CollectionBaseView.tsx b/src/client/views/collections/CollectionBaseView.tsx new file mode 100644 index 000000000..c8c840085 --- /dev/null +++ b/src/client/views/collections/CollectionBaseView.tsx @@ -0,0 +1,139 @@ +import * as React from 'react'; +import { FieldViewProps } from '../nodes/FieldView'; +import { KeyStore } from '../../../fields/KeyStore'; +import { NumberField } from '../../../fields/NumberField'; +import { FieldWaiting, Field } from '../../../fields/Field'; +import { ContextMenu } from '../ContextMenu'; +import { SelectionManager } from '../../util/SelectionManager'; +import { Document } from '../../../fields/Document'; +import { ListField } from '../../../fields/ListField'; +import { action } from 'mobx'; +import { Transform } from '../../util/Transform'; + +export enum CollectionViewType { + Invalid, + Freeform, + Schema, + Docking, + Tree, +} + +export interface CollectionRenderProps { + addDocument: (document: Document, allowDuplicates: boolean) => void; + removeDocument: (document: Document) => boolean; + active: () => boolean; +} + +export interface CollectionViewProps extends FieldViewProps { + onContextMenu?: (e: React.MouseEvent) => void; + children: (type: CollectionViewType, props: CollectionRenderProps) => JSX.Element | null; +} + +export class CollectionBaseView extends React.Component { + get collectionViewType(): CollectionViewType { + let Document = this.props.Document; + let viewField = Document.GetT(KeyStore.ViewType, NumberField); + if (viewField === FieldWaiting) { + return CollectionViewType.Invalid; + } else if (viewField) { + return viewField.Data; + } else { + return CollectionViewType.Freeform; + } + } + + active = (): boolean => { + var isSelected = this.props.isSelected(); + var childSelected = SelectionManager.SelectedDocuments().some(view => view.props.ContainingCollectionView == self); + var topMost = this.props.isTopMost; + return isSelected || childSelected || topMost; + } + + createsCycle(documentToAdd: Document, containerDocument: Document): boolean { + let data = documentToAdd.GetList(KeyStore.Data, []); + for (let i = 0; i < data.length; i++) { + if (this.createsCycle(data[i], containerDocument)) + return true; + } + let annots = documentToAdd.GetList(KeyStore.Annotations, []); + for (let i = 0; i < annots.length; i++) { + if (this.createsCycle(annots[i], containerDocument)) + return true; + } + for (let containerProto: any = containerDocument; containerProto && containerProto != FieldWaiting; containerProto = containerProto.GetPrototype()) { + if (containerProto.Id == documentToAdd.Id) + return true; + } + return false; + } + + @action.bound + addDocument(doc: Document, allowDuplicates: boolean): boolean { + let props = this.props; + var curPage = props.Document.GetNumber(KeyStore.CurPage, -1); + doc.SetOnPrototype(KeyStore.Page, new NumberField(curPage)); + if (curPage >= 0) { + doc.SetOnPrototype(KeyStore.AnnotationOn, props.Document); + } + if (props.Document.Get(props.fieldKey) instanceof Field) { + //TODO This won't create the field if it doesn't already exist + const value = props.Document.GetData(props.fieldKey, ListField, new Array()) + if (!this.createsCycle(doc, props.Document)) { + if (!value.some(v => v.Id == doc.Id) || allowDuplicates) + value.push(doc); + } + else + return false; + } else { + let proto = props.Document.GetPrototype(); + if (!proto || proto == FieldWaiting || !this.createsCycle(proto, doc)) { + props.Document.SetOnPrototype(props.fieldKey, new ListField([doc])); + } + else + return false; + } + return true; + } + + @action.bound + removeDocument(doc: Document): boolean { + const props = this.props; + //TODO This won't create the field if it doesn't already exist + const value = props.Document.GetData(props.fieldKey, ListField, new Array()) + let index = -1; + for (let i = 0; i < value.length; i++) { + if (value[i].Id == doc.Id) { + index = i; + break; + } + } + doc.GetTAsync(KeyStore.AnnotationOn, Document).then((annotationOn) => { + if (annotationOn == props.Document) { + doc.Set(KeyStore.AnnotationOn, undefined, true); + } + }) + + if (index !== -1) { + value.splice(index, 1) + + SelectionManager.DeselectAll() + ContextMenu.Instance.clearItems() + return true; + } + return false + } + + render() { + const props: CollectionRenderProps = { + addDocument: this.addDocument, + removeDocument: this.removeDocument, + active: this.active + } + return ( +
+ {this.props.children(this.collectionViewType, props)} +
+ ) + } + +} \ No newline at end of file diff --git a/src/client/views/collections/CollectionView.tsx b/src/client/views/collections/CollectionView.tsx index e6351618c..51cc99595 100644 --- a/src/client/views/collections/CollectionView.tsx +++ b/src/client/views/collections/CollectionView.tsx @@ -1,137 +1,28 @@ -import { action, computed, observable } from "mobx"; -import { observer } from "mobx-react"; -import { Document } from "../../../fields/Document"; -import { ListField } from "../../../fields/ListField"; -import { SelectionManager } from "../../util/SelectionManager"; -import { ContextMenu } from "../ContextMenu"; -import React = require("react"); -import { KeyStore } from "../../../fields/KeyStore"; -import { NumberField } from "../../../fields/NumberField"; -import { CollectionFreeFormView } from "./collectionFreeForm/CollectionFreeFormView"; -import { CollectionDockingView } from "./CollectionDockingView"; -import { CollectionSchemaView } from "./CollectionSchemaView"; -import { CollectionViewProps, SubCollectionViewProps } from "./CollectionViewBase"; -import { CollectionTreeView } from "./CollectionTreeView"; -import { Field, FieldId, FieldWaiting } from "../../../fields/Field"; -import { CurrentUserUtils } from "../../../server/authentication/models/current_user_utils"; - -export enum CollectionViewType { - Invalid, - Freeform, - Schema, - Docking, - Tree -} - -export const COLLECTION_BORDER_WIDTH = 1; - -@observer -export class CollectionView extends React.Component { - - public static LayoutString(fieldKey: string = "DataKey") { - return `<${CollectionView.name} Document={Document} - ScreenToLocalTransform={ScreenToLocalTransform} fieldKey={${fieldKey}} panelWidth={PanelWidth} panelHeight={PanelHeight} isSelected={isSelected} select={select} bindings={bindings} - isTopMost={isTopMost} SelectOnLoad={selectOnLoad} BackgroundView={BackgroundView} focus={focus}/>`; - } - - @observable - public SelectedDocs: FieldId[] = []; - public active: () => boolean = () => CollectionView.Active(this); - addDocument = (doc: Document, allowDuplicates: boolean): boolean => { return CollectionView.AddDocument(this.props, doc, allowDuplicates); } - removeDocument = (doc: Document): boolean => { return CollectionView.RemoveDocument(this.props, doc); } - - public static Active(self: CollectionView): boolean { - var isSelected = self.props.isSelected(); - var childSelected = SelectionManager.SelectedDocuments().some(view => view.props.ContainingCollectionView == self); - var topMost = self.props.isTopMost; - return isSelected || childSelected || topMost; - } - - static createsCycle(documentToAdd: Document, containerDocument: Document): boolean { - let data = documentToAdd.GetList(KeyStore.Data, []); - for (let i = 0; i < data.length; i++) { - if (CollectionView.createsCycle(data[i], containerDocument)) - return true; - } - let annots = documentToAdd.GetList(KeyStore.Annotations, []); - for (let i = 0; i < annots.length; i++) { - if (CollectionView.createsCycle(annots[i], containerDocument)) - return true; - } - for (let containerProto: any = containerDocument; containerProto && containerProto != FieldWaiting; containerProto = containerProto.GetPrototype()) { - if (containerProto.Id == documentToAdd.Id) - return true; - } - return false; - } - - @action - public static AddDocument(props: CollectionViewProps, doc: Document, allowDuplicates: boolean): boolean { - var curPage = props.Document.GetNumber(KeyStore.CurPage, -1); - doc.SetOnPrototype(KeyStore.Page, new NumberField(curPage)); - if (curPage >= 0) { - doc.SetOnPrototype(KeyStore.AnnotationOn, props.Document); - } - if (props.Document.Get(props.fieldKey) instanceof Field) { - //TODO This won't create the field if it doesn't already exist - const value = props.Document.GetData(props.fieldKey, ListField, new Array()) - if (!CollectionView.createsCycle(doc, props.Document)) { - if (!value.some(v => v.Id == doc.Id) || allowDuplicates) - value.push(doc); - } - else - return false; - } else { - let proto = props.Document.GetPrototype(); - if (!proto || proto == FieldWaiting || !CollectionView.createsCycle(proto, doc)) { - props.Document.SetOnPrototype(props.fieldKey, new ListField([doc])); - } - else - return false; - } - return true; - } - - @action - public static RemoveDocument(props: CollectionViewProps, doc: Document): boolean { - //TODO This won't create the field if it doesn't already exist - const value = props.Document.GetData(props.fieldKey, ListField, new Array()) - let index = -1; - for (let i = 0; i < value.length; i++) { - if (value[i].Id == doc.Id) { - index = i; - break; - } - } - doc.GetTAsync(KeyStore.AnnotationOn, Document).then((annotationOn) => { - if (annotationOn == props.Document) { - doc.Set(KeyStore.AnnotationOn, undefined, true); - } - }) - - if (index !== -1) { - value.splice(index, 1) - - SelectionManager.DeselectAll() - ContextMenu.Instance.clearItems() - return true; - } - return false - } - - get collectionViewType(): CollectionViewType { - let Document = this.props.Document; - let viewField = Document.GetT(KeyStore.ViewType, NumberField); - if (viewField === FieldWaiting) { - return CollectionViewType.Invalid; - } else if (viewField) { - return viewField.Data; - } else { - return CollectionViewType.Freeform; +import * as React from 'react' +import { FieldViewProps, FieldView } from '../nodes/FieldView'; +import { CollectionBaseView, CollectionViewType, CollectionRenderProps } from './CollectionBaseView'; +import { CollectionFreeFormView } from './collectionFreeForm/CollectionFreeFormView'; +import { CollectionSchemaView } from './CollectionSchemaView'; +import { CollectionDockingView } from './CollectionDockingView'; +import { CollectionTreeView } from './CollectionTreeView'; +import { ContextMenu } from '../ContextMenu'; +import { CurrentUserUtils } from '../../../server/authentication/models/current_user_utils'; +import { KeyStore } from '../../../fields/KeyStore'; +export class CollectionView extends React.Component { + public static LayoutString(fieldStr: string = "DataKey") { return FieldView.LayoutString(CollectionView, fieldStr) } + + private SubView = (type: CollectionViewType, renderProps: CollectionRenderProps) => { + let props = { ...renderProps, ...this.props }; + switch (type) { + case CollectionViewType.Freeform: return () + case CollectionViewType.Schema: return () + case CollectionViewType.Docking: return () + case CollectionViewType.Tree: return () } + return (null); } - specificContextMenu = (e: React.MouseEvent): void => { + onContextMenu = (e: React.MouseEvent): void => { if (!e.isPropagationStopped() && this.props.Document.Id != CurrentUserUtils.MainDocId) { // need to test this because GoldenLayout causes a parallel hierarchy in the React DOM for its children and the main document view7 ContextMenu.Instance.addItem({ description: "Freeform", event: () => this.props.Document.SetNumber(KeyStore.ViewType, CollectionViewType.Freeform) }) ContextMenu.Instance.addItem({ description: "Schema", event: () => this.props.Document.SetNumber(KeyStore.ViewType, CollectionViewType.Schema) }) @@ -139,24 +30,11 @@ export class CollectionView extends React.Component { } } - public static SubViewProps(self: CollectionView): SubCollectionViewProps { - return { ...self.props, addDocument: self.addDocument, removeDocument: self.removeDocument, active: self.active, CollectionView: self } - } - - private get SubView() { - let subProps = CollectionView.SubViewProps(this); - switch (this.collectionViewType) { - case CollectionViewType.Freeform: return () - case CollectionViewType.Schema: return () - case CollectionViewType.Docking: return () - case CollectionViewType.Tree: return () - } - return (null); - } - render() { - return (
- {this.SubView} -
) + return ( + + {this.SubView} + > + ) } -} +} \ No newline at end of file diff --git a/src/client/views/collections/CollectionViewBase.tsx b/src/client/views/collections/CollectionViewBase.tsx index c5a6c53b3..ca4f3b12f 100644 --- a/src/client/views/collections/CollectionViewBase.tsx +++ b/src/client/views/collections/CollectionViewBase.tsx @@ -20,17 +20,9 @@ import { Server } from "../../Server"; import { FieldViewProps } from "../nodes/FieldView"; export interface CollectionViewProps extends FieldViewProps { - ScreenToLocalTransform: () => Transform; - panelWidth: () => number; - panelHeight: () => number; - focus: (doc: Document) => void; } export interface SubCollectionViewProps extends CollectionViewProps { - active: () => boolean; - addDocument: (doc: Document, allowDuplicates: boolean) => boolean; - removeDocument: (doc: Document) => boolean; - CollectionView: CollectionView; } export type CursorEntry = TupleField<[string, string], [number, number]>; @@ -127,8 +119,6 @@ export class CollectionViewBase extends React.Component @action protected onDrop(e: React.DragEvent, options: DocumentOptions): void { - let that = this; - let html = e.dataTransfer.getData("text/html"); let text = e.dataTransfer.getData("text/plain"); @@ -151,7 +141,6 @@ export class CollectionViewBase extends React.Component let item = e.dataTransfer.items[i]; if (item.kind === "string" && item.type.indexOf("uri") != -1) { e.dataTransfer.items[i].getAsString(action((s: string) => { - let document: Document; request.head(ServerUtils.prepend(RouteStore.corsProxy + "/" + s), (err, res, body) => { let type = res.headers["content-type"]; if (type) { @@ -184,11 +173,11 @@ export class CollectionViewBase extends React.Component runInAction(() => { let doc = this.getDocumentFromType(type, path, { ...options, nativeWidth: 300, width: 300 }) - let docs = that.props.Document.GetT(KeyStore.Data, ListField); + let docs = this.props.Document.GetT(KeyStore.Data, ListField); if (docs != FieldWaiting) { if (!docs) { docs = new ListField(); - that.props.Document.Set(KeyStore.Data, docs) + this.props.Document.Set(KeyStore.Data, docs) } if (doc) { docs.Data.push(doc); diff --git a/src/client/views/nodes/FieldView.tsx b/src/client/views/nodes/FieldView.tsx index 43688989b..2a7d3175f 100644 --- a/src/client/views/nodes/FieldView.tsx +++ b/src/client/views/nodes/FieldView.tsx @@ -33,6 +33,11 @@ export interface FieldViewProps { select: (isCtrlPressed: boolean) => void; isTopMost: boolean; selectOnLoad: boolean; + addDocument: (document: Document, allowDuplicates: boolean) => boolean; + removeDocument: (document: Document) => boolean; + ScreenToLocalTransform: () => Transform; + active: () => boolean; + focus: (doc: Document) => void; } @observer -- cgit v1.2.3-70-g09d2 From 5889bf159ee0a0f6567683b2bb8c2475feccf9ec Mon Sep 17 00:00:00 2001 From: Tyler Schicke Date: Wed, 3 Apr 2019 01:38:29 -0400 Subject: Almost compiles --- src/Utils.ts | 10 ++++++ src/client/Server.ts | 2 +- src/client/documents/Documents.ts | 3 +- src/client/northstar/dash-nodes/HistogramBox.tsx | 14 ++++---- src/client/util/DragManager.ts | 2 +- src/client/util/Transform.ts | 2 +- src/client/util/type_decls.d | 2 +- src/client/views/Main.tsx | 10 +++--- .../views/collections/CollectionBaseView.tsx | 28 +++++++++++++--- .../views/collections/CollectionDockingView.tsx | 9 ++--- src/client/views/collections/CollectionPDFView.tsx | 36 ++++++++++---------- .../views/collections/CollectionSchemaView.tsx | 12 +++++-- .../views/collections/CollectionTreeView.tsx | 3 +- .../views/collections/CollectionVideoView.tsx | 39 +++++++++++----------- src/client/views/collections/CollectionView.tsx | 4 +-- .../views/collections/CollectionViewBase.tsx | 7 ++-- .../CollectionFreeFormRemoteCursors.tsx | 17 ++-------- .../collectionFreeForm/CollectionFreeFormView.tsx | 30 +++++++++++------ src/client/views/nodes/DocumentContentsView.tsx | 18 +++++++++- src/client/views/nodes/DocumentView.tsx | 37 +++++++++----------- src/client/views/nodes/FieldView.tsx | 17 ++++++---- src/client/views/nodes/KeyValuePair.tsx | 4 +++ src/fields/Field.ts | 4 +-- 23 files changed, 181 insertions(+), 129 deletions(-) (limited to 'src') diff --git a/src/Utils.ts b/src/Utils.ts index a5d9bd0ca..3eb192eb8 100644 --- a/src/Utils.ts +++ b/src/Utils.ts @@ -86,4 +86,14 @@ export class Utils { } } +export function returnTrue() { + return true; +} + +export function returnFalse() { + return false; +} + +export function emptyFunction() { } + export type Without = Pick>; \ No newline at end of file diff --git a/src/client/Server.ts b/src/client/Server.ts index 37e3c2c0d..c301b04d3 100644 --- a/src/client/Server.ts +++ b/src/client/Server.ts @@ -42,7 +42,7 @@ export class Server { reaction(() => { return this.ClientFieldsCached.get(fieldid); }, (field, reaction) => { - if (field !== "") { + if (field !== FieldWaiting) { reaction.dispose() cb(field) } diff --git a/src/client/documents/Documents.ts b/src/client/documents/Documents.ts index 0bf275df8..15f980895 100644 --- a/src/client/documents/Documents.ts +++ b/src/client/documents/Documents.ts @@ -17,7 +17,8 @@ import { HistogramOperation } from "../northstar/operations/HistogramOperation"; import { Server } from "../Server"; import { CollectionPDFView } from "../views/collections/CollectionPDFView"; import { CollectionVideoView } from "../views/collections/CollectionVideoView"; -import { CollectionView, CollectionViewType } from "../views/collections/CollectionView"; +import { CollectionView } from "../views/collections/CollectionView"; +import { CollectionViewType } from "../views/collections/CollectionBaseView"; import { AudioBox } from "../views/nodes/AudioBox"; import { FormattedTextBox } from "../views/nodes/FormattedTextBox"; import { ImageBox } from "../views/nodes/ImageBox"; diff --git a/src/client/northstar/dash-nodes/HistogramBox.tsx b/src/client/northstar/dash-nodes/HistogramBox.tsx index a968def96..4457c9502 100644 --- a/src/client/northstar/dash-nodes/HistogramBox.tsx +++ b/src/client/northstar/dash-nodes/HistogramBox.tsx @@ -117,14 +117,14 @@ export class HistogramBox extends React.Component { activateHistogramOperation(catalog?: Catalog) { if (catalog) { - this.props.doc.GetTAsync(this.props.fieldKey, HistogramField).then((histoOp: Opt) => runInAction(() => { + this.props.Document.GetTAsync(this.props.fieldKey, HistogramField).then((histoOp: Opt) => runInAction(() => { this.HistoOp = histoOp ? histoOp.Data : HistogramOperation.Empty; if (this.HistoOp != HistogramOperation.Empty) { - reaction(() => this.props.doc.GetList(KeyStore.LinkedFromDocs, []), (docs: Document[]) => this.HistoOp.Links.splice(0, this.HistoOp.Links.length, ...docs), { fireImmediately: true }); - reaction(() => this.props.doc.GetList(KeyStore.BrushingDocs, []).length, + reaction(() => this.props.Document.GetList(KeyStore.LinkedFromDocs, []), (docs: Document[]) => this.HistoOp.Links.splice(0, this.HistoOp.Links.length, ...docs), { fireImmediately: true }); + reaction(() => this.props.Document.GetList(KeyStore.BrushingDocs, []).length, () => { - let brushingDocs = this.props.doc.GetList(KeyStore.BrushingDocs, [] as Document[]); - let proto = this.props.doc.GetPrototype() as Document; + let brushingDocs = this.props.Document.GetList(KeyStore.BrushingDocs, [] as Document[]); + let proto = this.props.Document.GetPrototype() as Document; this.HistoOp.BrushLinks.splice(0, this.HistoOp.BrushLinks.length, ...brushingDocs.map((brush, i) => { brush.SetNumber(KeyStore.BackgroundColor, StyleConstants.BRUSH_COLORS[i % StyleConstants.BRUSH_COLORS.length]); let brushed = brush.GetList(KeyStore.BrushingDocs, [] as Document[]); @@ -139,8 +139,8 @@ export class HistogramBox extends React.Component { render() { let labelY = this.HistoOp && this.HistoOp.Y ? this.HistoOp.Y.PresentedName : "<...>"; let labelX = this.HistoOp && this.HistoOp.X ? this.HistoOp.X.PresentedName : "<...>"; - var h = this.props.isTopMost ? this.PanelHeight : this.props.doc.GetNumber(KeyStore.Height, 0); - var w = this.props.isTopMost ? this.PanelWidth : this.props.doc.GetNumber(KeyStore.Width, 0); + var h = this.props.isTopMost ? this.PanelHeight : this.props.Document.GetNumber(KeyStore.Height, 0); + var w = this.props.isTopMost ? this.PanelWidth : this.props.Document.GetNumber(KeyStore.Width, 0); let loff = this.SizeConverter.LeftOffset; let toff = this.SizeConverter.TopOffset; let roff = this.SizeConverter.RightOffset; diff --git a/src/client/util/DragManager.ts b/src/client/util/DragManager.ts index 70b1c9829..53bbae18d 100644 --- a/src/client/util/DragManager.ts +++ b/src/client/util/DragManager.ts @@ -110,7 +110,7 @@ export namespace DragManager { xOffset?: number; yOffset?: number; aliasOnDrop?: boolean; - removeDocument?: (collectionDrop: CollectionView) => void; + moveDocument?: (targetCollection: Document, addDocument: (document: Document) => void) => void; [id: string]: any; } export function StartDocumentDrag(ele: HTMLElement, dragData: DocumentDragData, options?: DragOptions) { diff --git a/src/client/util/Transform.ts b/src/client/util/Transform.ts index 3e1039166..889134e3e 100644 --- a/src/client/util/Transform.ts +++ b/src/client/util/Transform.ts @@ -3,7 +3,7 @@ export class Transform { private _translateY: number = 0; private _scale: number = 1; - static get Identity(): Transform { + static Identity(): Transform { return new Transform(0, 0, 1); } diff --git a/src/client/util/type_decls.d b/src/client/util/type_decls.d index 4f69053b1..47c3481b2 100644 --- a/src/client/util/type_decls.d +++ b/src/client/util/type_decls.d @@ -181,7 +181,7 @@ declare class Key extends Field { Copy(): Field; ToScriptString(): string; } -declare type FIELD_WAITING = ""; +declare type FIELD_WAITING = null; declare type Opt = T | undefined; declare type FieldValue = Opt | FIELD_WAITING; // @ts-ignore diff --git a/src/client/views/Main.tsx b/src/client/views/Main.tsx index 82fd1e7c9..bcbe6b987 100644 --- a/src/client/views/Main.tsx +++ b/src/client/views/Main.tsx @@ -6,7 +6,7 @@ import { Document } from '../../fields/Document'; import { KeyStore } from '../../fields/KeyStore'; import "./Main.scss"; import { MessageStore } from '../../server/Message'; -import { Utils } from '../../Utils'; +import { Utils, returnTrue } from '../../Utils'; import * as request from 'request' import * as rp from 'request-promise' import { Documents } from '../documents/Documents'; @@ -212,7 +212,6 @@ export class Main extends React.Component { this.workspacesShown = !this.workspacesShown; } - screenToLocalTransform = () => Transform.Identity pwidthFunc = () => this.pwidth; pheightFunc = () => this.pheight; focusDocument = (doc: Document) => { } @@ -221,15 +220,16 @@ export class Main extends React.Component { get content() { return !this.mainContainer ? (null) : } diff --git a/src/client/views/collections/CollectionBaseView.tsx b/src/client/views/collections/CollectionBaseView.tsx index c8c840085..c9f640c4a 100644 --- a/src/client/views/collections/CollectionBaseView.tsx +++ b/src/client/views/collections/CollectionBaseView.tsx @@ -19,16 +19,21 @@ export enum CollectionViewType { } export interface CollectionRenderProps { - addDocument: (document: Document, allowDuplicates: boolean) => void; + addDocument: (document: Document, allowDuplicates?: boolean) => boolean; removeDocument: (document: Document) => boolean; + moveDocument: (document: Document, targetCollection: Document, addDocument: (document: Document) => void) => boolean; active: () => boolean; } export interface CollectionViewProps extends FieldViewProps { onContextMenu?: (e: React.MouseEvent) => void; - children: (type: CollectionViewType, props: CollectionRenderProps) => JSX.Element | null; + children: (type: CollectionViewType, props: CollectionRenderProps) => JSX.Element | JSX.Element[] | null; + className?: string; + contentRef?: React.Ref; } +export const COLLECTION_BORDER_WIDTH = 1; + export class CollectionBaseView extends React.Component { get collectionViewType(): CollectionViewType { let Document = this.props.Document; @@ -44,7 +49,7 @@ export class CollectionBaseView extends React.Component { active = (): boolean => { var isSelected = this.props.isSelected(); - var childSelected = SelectionManager.SelectedDocuments().some(view => view.props.ContainingCollectionView == self); + var childSelected = SelectionManager.SelectedDocuments().some(view => view.props.ContainingCollectionView == this); var topMost = this.props.isTopMost; return isSelected || childSelected || topMost; } @@ -68,7 +73,7 @@ export class CollectionBaseView extends React.Component { } @action.bound - addDocument(doc: Document, allowDuplicates: boolean): boolean { + addDocument(doc: Document, allowDuplicates: boolean = false): boolean { let props = this.props; var curPage = props.Document.GetNumber(KeyStore.CurPage, -1); doc.SetOnPrototype(KeyStore.Page, new NumberField(curPage)); @@ -123,14 +128,27 @@ export class CollectionBaseView extends React.Component { return false } + @action.bound + moveDocument(doc: Document, targetCollection: Document, addDocument: (doc: Document) => void): boolean { + if (this.props.Document === targetCollection) { + return false; + } + if (this.removeDocument(doc)) { + addDocument(doc); + return true; + } + return false; + } + render() { const props: CollectionRenderProps = { addDocument: this.addDocument, removeDocument: this.removeDocument, + moveDocument: this.moveDocument, active: this.active } return ( -
+
{this.props.children(this.collectionViewType, props)}
) diff --git a/src/client/views/collections/CollectionDockingView.tsx b/src/client/views/collections/CollectionDockingView.tsx index c67354139..bb34340fb 100644 --- a/src/client/views/collections/CollectionDockingView.tsx +++ b/src/client/views/collections/CollectionDockingView.tsx @@ -8,12 +8,12 @@ import { Document } from "../../../fields/Document"; import { KeyStore } from "../../../fields/KeyStore"; import Measure from "react-measure"; import { FieldId, Opt, Field } from "../../../fields/Field"; -import { Utils } from "../../../Utils"; +import { Utils, returnTrue } from "../../../Utils"; import { Server } from "../../Server"; import { undoBatch } from "../../util/UndoManager"; import { DocumentView } from "../nodes/DocumentView"; import "./CollectionDockingView.scss"; -import { COLLECTION_BORDER_WIDTH } from "./CollectionView"; +import { COLLECTION_BORDER_WIDTH } from "./CollectionBaseView"; import React = require("react"); import { SubCollectionViewProps } from "./CollectionViewBase"; import { ServerUtils } from "../../../server/ServerUtil"; @@ -310,14 +310,15 @@ export class DockedFrameRenderer extends React.Component { var content =
{ }} ContainingCollectionView={undefined} />
diff --git a/src/client/views/collections/CollectionPDFView.tsx b/src/client/views/collections/CollectionPDFView.tsx index 6bb3bacc7..14ed70b8c 100644 --- a/src/client/views/collections/CollectionPDFView.tsx +++ b/src/client/views/collections/CollectionPDFView.tsx @@ -1,23 +1,20 @@ import { action, computed, observable } from "mobx"; import { observer } from "mobx-react"; -import { Document } from "../../../fields/Document"; import { KeyStore } from "../../../fields/KeyStore"; import { ContextMenu } from "../ContextMenu"; -import { CollectionView, CollectionViewType } from "./CollectionView"; import { CollectionViewProps } from "./CollectionViewBase"; import "./CollectionPDFView.scss" import React = require("react"); -import { FieldId } from "../../../fields/Field"; import { CollectionFreeFormView } from "./collectionFreeForm/CollectionFreeFormView"; +import { FieldView } from "../nodes/FieldView"; +import { CollectionRenderProps, CollectionBaseView, CollectionViewType } from "./CollectionBaseView"; @observer export class CollectionPDFView extends React.Component { public static LayoutString(fieldKey: string = "DataKey") { - return `<${CollectionPDFView.name} Document={Document} - ScreenToLocalTransform={ScreenToLocalTransform} fieldKey={${fieldKey}} panelWidth={PanelWidth} panelHeight={PanelHeight} isSelected={isSelected} select={select} bindings={bindings} - isTopMost={isTopMost} SelectOnLoad={selectOnLoad} BackgroundView={BackgroundView} focus={focus}/>`; + return FieldView.LayoutString(CollectionPDFView, fieldKey); } private get curPage() { return this.props.Document.GetNumber(KeyStore.CurPage, -1); } @@ -35,26 +32,27 @@ export class CollectionPDFView extends React.Component { ); } - // "inherited" CollectionView API starts here... - @observable - public SelectedDocs: FieldId[] = [] - public active: () => boolean = () => CollectionView.Active(this); - - addDocument = (doc: Document, allowDuplicates: boolean): boolean => { return CollectionView.AddDocument(this.props, doc, allowDuplicates); } - removeDocument = (doc: Document): boolean => { return CollectionView.RemoveDocument(this.props, doc); } - - specificContextMenu = (e: React.MouseEvent): void => { + onContextMenu = (e: React.MouseEvent): void => { if (!e.isPropagationStopped() && this.props.Document.Id != "mainDoc") { // need to test this because GoldenLayout causes a parallel hierarchy in the React DOM for its children and the main document view7 ContextMenu.Instance.addItem({ description: "PDFOptions", event: () => { } }); } } - render() { + private subView = (_type: CollectionViewType, renderProps: CollectionRenderProps) => { + let props = { ...renderProps, ...this.props }; return ( -
- + <> + {this.props.isSelected() ? this.uIButtons : (null)} -
+ + ) + } + + render() { + return ( + + {this.subView} + ) } } \ No newline at end of file diff --git a/src/client/views/collections/CollectionSchemaView.tsx b/src/client/views/collections/CollectionSchemaView.tsx index 0c7e28691..0eacd38b0 100644 --- a/src/client/views/collections/CollectionSchemaView.tsx +++ b/src/client/views/collections/CollectionSchemaView.tsx @@ -22,9 +22,11 @@ import { EditableView } from "../EditableView"; import { DocumentView } from "../nodes/DocumentView"; import { FieldView, FieldViewProps } from "../nodes/FieldView"; import "./CollectionSchemaView.scss"; -import { CollectionView, COLLECTION_BORDER_WIDTH } from "./CollectionView"; +import { CollectionView } from "./CollectionView"; import { CollectionViewBase } from "./CollectionViewBase"; import { TextField } from "../../../fields/TextField"; +import { COLLECTION_BORDER_WIDTH } from "./CollectionBaseView"; +import { emptyFunction, returnFalse } from "../../../Utils"; // bcz: need to add drag and drop of rows and columns. This seems like it might work for rows: https://codesandbox.io/s/l94mn1q657 @@ -79,6 +81,9 @@ export class CollectionSchemaView extends CollectionViewBase { select: () => { }, isTopMost: false, selectOnLoad: false, + ScreenToLocalTransform: Transform.Identity, + focus: emptyFunction, + active: returnFalse } let contents = ( @@ -295,15 +300,16 @@ export class CollectionSchemaView extends CollectionViewBase { {({ measureRef }) =>
{doc instanceof Document ? : null} diff --git a/src/client/views/collections/CollectionTreeView.tsx b/src/client/views/collections/CollectionTreeView.tsx index 70790af18..6f9ba40d2 100644 --- a/src/client/views/collections/CollectionTreeView.tsx +++ b/src/client/views/collections/CollectionTreeView.tsx @@ -10,9 +10,10 @@ import { ListField } from "../../../fields/ListField"; import { setupDrag } from "../../util/DragManager"; import { EditableView } from "../EditableView"; import "./CollectionTreeView.scss"; -import { CollectionView, COLLECTION_BORDER_WIDTH } from "./CollectionView"; +import { CollectionView } from "./CollectionView"; import { CollectionViewBase } from "./CollectionViewBase"; import React = require("react") +import { COLLECTION_BORDER_WIDTH } from './CollectionBaseView'; export interface TreeViewProps { diff --git a/src/client/views/collections/CollectionVideoView.tsx b/src/client/views/collections/CollectionVideoView.tsx index 1f0143d87..7cb461b4d 100644 --- a/src/client/views/collections/CollectionVideoView.tsx +++ b/src/client/views/collections/CollectionVideoView.tsx @@ -3,12 +3,14 @@ import { observer } from "mobx-react"; import { Document } from "../../../fields/Document"; import { KeyStore } from "../../../fields/KeyStore"; import { ContextMenu } from "../ContextMenu"; -import { CollectionView, CollectionViewType } from "./CollectionView"; +import { CollectionView } from "./CollectionView"; +import { CollectionViewType, CollectionBaseView, CollectionRenderProps } from "./CollectionBaseView"; import { CollectionViewProps } from "./CollectionViewBase"; import React = require("react"); import { FieldId } from "../../../fields/Field"; import "./CollectionVideoView.scss" -import { CollectionFreeFormView } from "./CollectionFreeFormView"; +import { CollectionFreeFormView } from "./collectionFreeForm/CollectionFreeFormView"; +import { FieldView } from "../nodes/FieldView"; @observer @@ -20,9 +22,7 @@ export class CollectionVideoView extends React.Component { @observable _isPlaying: boolean = false; public static LayoutString(fieldKey: string = "DataKey") { - return `<${CollectionVideoView.name} Document={Document} - ScreenToLocalTransform={ScreenToLocalTransform} fieldKey={${fieldKey}} panelWidth={PanelWidth} panelHeight={PanelHeight} isSelected={isSelected} select={select} bindings={bindings} - isTopMost={isTopMost} SelectOnLoad={selectOnLoad} BackgroundView={BackgroundView} focus={focus}/>`; + return FieldView.LayoutString(CollectionVideoView, fieldKey); } private get uIButtons() { let scaling = Math.min(1.8, this.props.ScreenToLocalTransform().transformDirection(1, 1)[0]); @@ -102,26 +102,27 @@ export class CollectionVideoView extends React.Component { } - // "inherited" CollectionView API starts here... - - @observable - public SelectedDocs: FieldId[] = [] - public active: () => boolean = () => CollectionView.Active(this); - - addDocument = (doc: Document, allowDuplicates: boolean): boolean => { return CollectionView.AddDocument(this.props, doc, allowDuplicates); } - removeDocument = (doc: Document): boolean => { return CollectionView.RemoveDocument(this.props, doc); } - - specificContextMenu = (e: React.MouseEvent): void => { + onContextMenu = (e: React.MouseEvent): void => { if (!e.isPropagationStopped() && this.props.Document.Id != "mainDoc") { // need to test this because GoldenLayout causes a parallel hierarchy in the React DOM for its children and the main document view7 ContextMenu.Instance.addItem({ description: "VideoOptions", event: () => { } }); } } + private subView = (_type: CollectionViewType, renderProps: CollectionRenderProps) => { + let props = { ...renderProps, ...this.props }; + return ( + <> + + {this.props.isSelected() ? this.uIButtons : (null)} + + ) + } + render() { trace(); - return (
- - {this.props.isSelected() ? this.uIButtons : (null)} -
) + return ( + + {this.subView} + ) } } \ No newline at end of file diff --git a/src/client/views/collections/CollectionView.tsx b/src/client/views/collections/CollectionView.tsx index 51cc99595..d440dcff9 100644 --- a/src/client/views/collections/CollectionView.tsx +++ b/src/client/views/collections/CollectionView.tsx @@ -12,7 +12,7 @@ export class CollectionView extends React.Component { public static LayoutString(fieldStr: string = "DataKey") { return FieldView.LayoutString(CollectionView, fieldStr) } private SubView = (type: CollectionViewType, renderProps: CollectionRenderProps) => { - let props = { ...renderProps, ...this.props }; + let props = { ...this.props, ...renderProps }; switch (type) { case CollectionViewType.Freeform: return () case CollectionViewType.Schema: return () @@ -34,7 +34,7 @@ export class CollectionView extends React.Component { return ( {this.SubView} - > + ) } } \ No newline at end of file diff --git a/src/client/views/collections/CollectionViewBase.tsx b/src/client/views/collections/CollectionViewBase.tsx index ca4f3b12f..4a0b2312e 100644 --- a/src/client/views/collections/CollectionViewBase.tsx +++ b/src/client/views/collections/CollectionViewBase.tsx @@ -20,6 +20,9 @@ import { Server } from "../../Server"; import { FieldViewProps } from "../nodes/FieldView"; export interface CollectionViewProps extends FieldViewProps { + addDocument: (document: Document, allowDuplicates?: boolean) => boolean; + removeDocument: (document: Document) => boolean; + moveDocument: (document: Document, targetCollection: Document, addDocument: (document: Document) => void) => boolean; } export interface SubCollectionViewProps extends CollectionViewProps { @@ -72,8 +75,8 @@ export class CollectionViewBase extends React.Component de.data.draggedDocument.GetTAsync(key, NumberField, (f: Opt) => f ? de.data.droppedDocument.SetNumber(key, f.Data) : null)); } let added = this.props.addDocument(de.data.droppedDocument, false); - if (added && de.data.removeDocument && !de.data.aliasOnDrop) { - de.data.removeDocument(this.props.CollectionView); + if (added && de.data.moveDocument && !de.data.aliasOnDrop) { + de.data.moveDocument(this.props.Document, this.props.addDocument); } e.stopPropagation(); return added; diff --git a/src/client/views/collections/collectionFreeForm/CollectionFreeFormRemoteCursors.tsx b/src/client/views/collections/collectionFreeForm/CollectionFreeFormRemoteCursors.tsx index 19382e66f..f664f4e65 100644 --- a/src/client/views/collections/collectionFreeForm/CollectionFreeFormRemoteCursors.tsx +++ b/src/client/views/collections/collectionFreeForm/CollectionFreeFormRemoteCursors.tsx @@ -1,21 +1,8 @@ -import { action, computed, observable } from "mobx"; +import { computed } from "mobx"; import { observer } from "mobx-react"; -import { Document } from "../../../../fields/Document"; -import { FieldWaiting } from "../../../../fields/Field"; import { KeyStore } from "../../../../fields/KeyStore"; -import { TextField } from "../../../../fields/TextField"; -import { DragManager } from "../../../util/DragManager"; -import { Transform } from "../../../util/Transform"; -import { undoBatch } from "../../../util/UndoManager"; -import { InkingCanvas } from "../../InkingCanvas"; -import { CollectionFreeFormDocumentView } from "../../nodes/CollectionFreeFormDocumentView"; -import { DocumentContentsView } from "../../nodes/DocumentContentsView"; -import { DocumentViewProps } from "../../nodes/DocumentView"; -import { COLLECTION_BORDER_WIDTH } from "../CollectionView"; -import { CollectionViewBase, CollectionViewProps, CursorEntry } from "../CollectionViewBase"; -import { CollectionFreeFormLinksView } from "./CollectionFreeFormLinksView"; +import { CollectionViewProps, CursorEntry } from "../CollectionViewBase"; import "./CollectionFreeFormView.scss"; -import { MarqueeView } from "./MarqueeView"; import React = require("react"); import v5 = require("uuid/v5"); import { CurrentUserUtils } from "../../../../server/authentication/models/current_user_utils"; diff --git a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx index 51ab85b71..144d121db 100644 --- a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx +++ b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx @@ -11,7 +11,7 @@ import { InkingCanvas } from "../../InkingCanvas"; import { CollectionFreeFormDocumentView } from "../../nodes/CollectionFreeFormDocumentView"; import { DocumentContentsView } from "../../nodes/DocumentContentsView"; import { DocumentViewProps } from "../../nodes/DocumentView"; -import { COLLECTION_BORDER_WIDTH } from "../CollectionView"; +import { COLLECTION_BORDER_WIDTH } from "../CollectionBaseView"; import { CollectionViewBase } from "../CollectionViewBase"; import { CollectionFreeFormLinksView } from "./CollectionFreeFormLinksView"; import "./CollectionFreeFormView.scss"; @@ -20,6 +20,8 @@ import React = require("react"); import v5 = require("uuid/v5"); import { CollectionFreeFormRemoteCursors } from "./CollectionFreeFormRemoteCursors"; import { PreviewCursor } from "./PreviewCursor"; +import { DocumentManager } from "../../../util/DocumentManager"; +import { SelectionManager } from "../../../util/SelectionManager"; @observer export class CollectionFreeFormView extends CollectionViewBase { @@ -39,8 +41,13 @@ export class CollectionFreeFormView extends CollectionViewBase { } public selectDocuments = (docs: Document[]) => { - this.props.CollectionView.SelectedDocs.length = 0; - docs.map(d => this.props.CollectionView.SelectedDocs.push(d.Id)); + SelectionManager.DeselectAll; + docs.map(doc => { + const dv = DocumentManager.Instance.getDocumentView(doc); + if (dv) { + SelectionManager.SelectDoc(dv, true); + } + }) } public getActiveDocuments = () => { @@ -59,6 +66,8 @@ export class CollectionFreeFormView extends CollectionViewBase { @observable private _lastX: number = 0; @observable private _lastY: number = 0; + private outerElement?: HTMLDivElement; + @computed get panX(): number { return this.props.Document.GetNumber(KeyStore.PanX, 0) } @computed get panY(): number { return this.props.Document.GetNumber(KeyStore.PanY, 0) } @computed get scale(): number { return this.props.Document.GetNumber(KeyStore.Scale, 1); } @@ -66,8 +75,8 @@ export class CollectionFreeFormView extends CollectionViewBase { @computed get nativeWidth() { return this.props.Document.GetNumber(KeyStore.NativeWidth, 0); } @computed get nativeHeight() { return this.props.Document.GetNumber(KeyStore.NativeHeight, 0); } @computed get zoomScaling() { return this.props.Document.GetNumber(KeyStore.Scale, 1); } - @computed get centeringShiftX() { return !this.props.Document.GetNumber(KeyStore.NativeWidth, 0) ? this.props.panelWidth() / 2 : 0; } // shift so pan position is at center of window for non-overlay collections - @computed get centeringShiftY() { return !this.props.Document.GetNumber(KeyStore.NativeHeight, 0) ? this.props.panelHeight() / 2 : 0; }// shift so pan position is at center of window for non-overlay collections + @computed get centeringShiftX() { return !this.props.Document.GetNumber(KeyStore.NativeWidth, 0) && this.outerElement ? this.outerElement.clientWidth / 2 : 0; } // shift so pan position is at center of window for non-overlay collections + @computed get centeringShiftY() { return !this.props.Document.GetNumber(KeyStore.NativeHeight, 0) && this.outerElement ? this.outerElement.clientHeight / 2 : 0; }// shift so pan position is at center of window for non-overlay collections @undoBatch @action @@ -227,16 +236,17 @@ export class CollectionFreeFormView extends CollectionViewBase { getDocumentViewProps(document: Document): DocumentViewProps { return { Document: document, - AddDocument: this.props.addDocument, - RemoveDocument: this.props.removeDocument, + addDocument: this.props.addDocument, + removeDocument: this.props.removeDocument, ScreenToLocalTransform: this.getTransform, isTopMost: false, selectOnLoad: document.Id == this._selectOnLoaded, PanelWidth: document.Width, PanelHeight: document.Height, ContentScaling: this.noScaling, - ContainingCollectionView: this.props.CollectionView, - focus: this.focusDocument + ContainingCollectionView: undefined, + focus: this.focusDocument, + parentActive: this.props.active, } } @@ -266,7 +276,7 @@ export class CollectionFreeFormView extends CollectionViewBase { getTransform = (): Transform => this.props.ScreenToLocalTransform().translate(-COLLECTION_BORDER_WIDTH, -COLLECTION_BORDER_WIDTH).translate(-this.centeringShiftX, -this.centeringShiftY).transform(this.getLocalTransform()) getContainerTransform = (): Transform => this.props.ScreenToLocalTransform().translate(-COLLECTION_BORDER_WIDTH, -COLLECTION_BORDER_WIDTH) - getLocalTransform = (): Transform => Transform.Identity.scale(1 / this.scale).translate(this.panX, this.panY); + getLocalTransform = (): Transform => Transform.Identity().scale(1 / this.scale).translate(this.panX, this.panY); noScaling = () => 1; childViews = () => this.views; diff --git a/src/client/views/nodes/DocumentContentsView.tsx b/src/client/views/nodes/DocumentContentsView.tsx index a5e4b1a17..2574b374a 100644 --- a/src/client/views/nodes/DocumentContentsView.tsx +++ b/src/client/views/nodes/DocumentContentsView.tsx @@ -44,7 +44,18 @@ export class DocumentContentsView extends React.Component; Document: Document; - AddDocument?: (doc: Document, allowDuplicates: boolean) => boolean; - RemoveDocument?: (doc: Document) => boolean; + addDocument?: (doc: Document, allowDuplicates?: boolean) => boolean; + removeDocument?: (doc: Document) => boolean; + moveDocument?: (doc: Document, targetCollection: Document, addDocument: (document: Document) => void) => boolean; ScreenToLocalTransform: () => Transform; isTopMost: boolean; ContentScaling: () => number; @@ -33,6 +35,7 @@ export interface DocumentViewProps { PanelHeight: () => number; focus: (doc: Document) => void; selectOnLoad: boolean; + parentActive: () => boolean; } export interface JsxArgs extends DocumentViewProps { Keys: { [name: string]: Key } @@ -83,9 +86,8 @@ export class DocumentView extends React.Component { private _mainCont = React.createRef(); private _downX: number = 0; private _downY: number = 0; - private _reactionDisposer: Opt; - @computed get active(): boolean { return SelectionManager.IsSelected(this) || !this.props.ContainingCollectionView || this.props.ContainingCollectionView.active(); } - @computed get topMost(): boolean { return !this.props.ContainingCollectionView || this.props.ContainingCollectionView.collectionViewType == CollectionViewType.Docking; } + @computed get active(): boolean { return SelectionManager.IsSelected(this) || this.props.parentActive(); } + @computed get topMost(): boolean { return this.props.isTopMost; } @computed get layout(): string { return this.props.Document.GetText(KeyStore.Layout, "

Error loading layout data

"); } @computed get layoutKeys(): Key[] { return this.props.Document.GetData(KeyStore.LayoutKeys, ListField, new Array()); } @computed get layoutFields(): Key[] { return this.props.Document.GetData(KeyStore.LayoutFields, ListField, new Array()); } @@ -119,12 +121,6 @@ export class DocumentView extends React.Component { runInAction(() => { DocumentManager.Instance.DocumentViews.push(this); }) - this._reactionDisposer = reaction( - () => this.props.ContainingCollectionView && this.props.ContainingCollectionView.SelectedDocs.slice(), - () => { - if (this.props.ContainingCollectionView && this.props.ContainingCollectionView.SelectedDocs.indexOf(this.props.Document.Id) != -1) - SelectionManager.SelectDoc(this, true); - }); } componentDidUpdate() { @@ -144,9 +140,6 @@ export class DocumentView extends React.Component { DocumentManager.Instance.DocumentViews.splice(DocumentManager.Instance.DocumentViews.indexOf(this), 1); }) - if (this._reactionDisposer) { - this._reactionDisposer(); - } } startDragging(x: number, y: number, dropAliasOfDraggedDoc: boolean) { @@ -156,9 +149,9 @@ export class DocumentView extends React.Component { dragData.aliasOnDrop = dropAliasOfDraggedDoc; dragData.xOffset = x - left; dragData.yOffset = y - top; - dragData.removeDocument = (dropCollectionView: CollectionView) => { - if (this.props.RemoveDocument && this.props.ContainingCollectionView !== dropCollectionView) { - this.props.RemoveDocument(this.props.Document); + dragData.moveDocument = (targetCollection: Document, addDocument: (document: Document) => void) => { + if (this.props.moveDocument) { + this.props.moveDocument(this.props.Document, targetCollection, addDocument) } } DragManager.StartDocumentDrag(this._mainCont.current, dragData, { @@ -197,14 +190,14 @@ export class DocumentView extends React.Component { } deleteClicked = (): void => { - if (this.props.RemoveDocument) { - this.props.RemoveDocument(this.props.Document); + if (this.props.removeDocument) { + this.props.removeDocument(this.props.Document); } } fieldsClicked = (e: React.MouseEvent): void => { - if (this.props.AddDocument) { - this.props.AddDocument(Documents.KVPDocument(this.props.Document, { width: 300, height: 300 }), false); + if (this.props.addDocument) { + this.props.addDocument(Documents.KVPDocument(this.props.Document, { width: 300, height: 300 }), false); } } fullScreenClicked = (e: React.MouseEvent): void => { diff --git a/src/client/views/nodes/FieldView.tsx b/src/client/views/nodes/FieldView.tsx index 2a7d3175f..57af55f9f 100644 --- a/src/client/views/nodes/FieldView.tsx +++ b/src/client/views/nodes/FieldView.tsx @@ -19,6 +19,7 @@ import { ListField } from "../../../fields/ListField"; import { DocumentContentsView } from "./DocumentContentsView"; import { Transform } from "../../util/Transform"; import { KeyStore } from "../../../fields/KeyStore"; +import { returnFalse } from "../../../Utils"; // @@ -33,8 +34,9 @@ export interface FieldViewProps { select: (isCtrlPressed: boolean) => void; isTopMost: boolean; selectOnLoad: boolean; - addDocument: (document: Document, allowDuplicates: boolean) => boolean; - removeDocument: (document: Document) => boolean; + addDocument?: (document: Document, allowDuplicates?: boolean) => boolean; + removeDocument?: (document: Document) => boolean; + moveDocument?: (document: Document, targetCollection: Document, addDocument: (document: Document) => void) => boolean; ScreenToLocalTransform: () => Transform; active: () => boolean; focus: (doc: Document) => void; @@ -73,19 +75,20 @@ export class FieldView extends React.Component { } else if (field instanceof Document) { return ( Transform.Identity} + addDocument={undefined} + removeDocument={undefined} + ScreenToLocalTransform={Transform.Identity} ContentScaling={() => 1} PanelWidth={() => 100} PanelHeight={() => 100} - isTopMost={true} + isTopMost={true} //TODO Why is this top most? selectOnLoad={false} focus={() => { }} isSelected={() => false} select={() => false} layoutKey={KeyStore.Layout} - ContainingCollectionView={undefined} />) + ContainingCollectionView={undefined} + parentActive={this.props.active} />) } else if (field instanceof ListField) { return (
diff --git a/src/client/views/nodes/KeyValuePair.tsx b/src/client/views/nodes/KeyValuePair.tsx index 2fc11328f..e178cbc8d 100644 --- a/src/client/views/nodes/KeyValuePair.tsx +++ b/src/client/views/nodes/KeyValuePair.tsx @@ -11,6 +11,7 @@ import { Key } from '../../../fields/Key'; import { Server } from "../../Server" import { EditableView } from "../EditableView"; import { CompileScript, ToField } from "../../util/Scripting"; +import { Transform } from '../../util/Transform'; // Represents one row in a key value plane @@ -49,6 +50,9 @@ export class KeyValuePair extends React.Component { select: () => { }, isTopMost: false, selectOnLoad: false, + active: () => false, + ScreenToLocalTransform: Transform.Identity, + focus: () => { }, } let contents = ( diff --git a/src/fields/Field.ts b/src/fields/Field.ts index d48509a47..0d0e56f77 100644 --- a/src/fields/Field.ts +++ b/src/fields/Field.ts @@ -12,8 +12,8 @@ export function Cast(field: FieldValue, ctor: { new(): T return undefined; } -export const FieldWaiting: FIELD_WAITING = ""; -export type FIELD_WAITING = ""; +export const FieldWaiting: FIELD_WAITING = null; +export type FIELD_WAITING = null; export type FieldId = string; export type Opt = T | undefined; export type FieldValue = Opt | FIELD_WAITING; -- cgit v1.2.3-70-g09d2 From dc2a998acdae1545c8e7bf9ee9f4ca98bba82ac9 Mon Sep 17 00:00:00 2001 From: Tyler Schicke Date: Thu, 4 Apr 2019 01:30:01 -0400 Subject: Started adding linting --- package.json | 2 + src/Utils.ts | 2 +- src/client/Server.ts | 52 +++++++------- src/client/SocketStub.ts | 2 +- src/client/northstar/manager/Gateway.ts | 24 +++---- src/client/util/DocumentManager.ts | 10 +-- src/client/util/DragManager.ts | 23 +++--- src/client/util/Scripting.ts | 14 ++-- src/client/util/SelectionManager.ts | 5 +- src/client/util/Transform.ts | 50 ++++++------- src/client/util/TypedEvent.ts | 5 +- src/client/util/UndoManager.ts | 4 +- src/client/views/DocumentDecorations.tsx | 2 +- src/client/views/EditableView.tsx | 4 +- src/client/views/InkingCanvas.tsx | 14 ++-- src/client/views/InkingControl.tsx | 4 +- src/client/views/InkingStroke.tsx | 7 +- src/client/views/Main.tsx | 13 ++-- .../views/collections/CollectionBaseView.tsx | 4 +- .../views/collections/CollectionSchemaView.tsx | 17 ++--- .../views/collections/CollectionVideoView.tsx | 2 +- .../views/collections/CollectionViewBase.tsx | 5 +- .../CollectionFreeFormLinksView.tsx | 18 ++--- .../collectionFreeForm/CollectionFreeFormView.tsx | 4 +- .../collections/collectionFreeForm/MarqueeView.tsx | 2 +- .../views/nodes/CollectionFreeFormDocumentView.tsx | 12 ++-- src/client/views/nodes/DocumentView.tsx | 5 +- src/client/views/nodes/FieldView.tsx | 5 +- src/client/views/nodes/ImageBox.tsx | 2 +- src/client/views/nodes/KeyValueBox.tsx | 5 +- src/client/views/nodes/PDFBox.tsx | 36 +++++----- src/client/views/nodes/VideoBox.tsx | 4 +- src/debug/Viewer.tsx | 7 +- src/fields/Document.ts | 14 ++-- src/fields/WebField.ts | 2 +- src/mobile/ImageUpload.tsx | 5 +- .../authentication/controllers/WorkspacesMenu.tsx | 2 +- .../authentication/controllers/user_controller.ts | 12 ++-- src/server/database.ts | 2 +- src/server/index.ts | 8 +-- test/test.ts | 2 +- tslint.json | 56 +++++++++++++++ webpack.config.js | 83 ++++++++++++---------- 43 files changed, 292 insertions(+), 259 deletions(-) create mode 100644 tslint.json (limited to 'src') diff --git a/package.json b/package.json index 27b3eead1..4fc253834 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,8 @@ "scss-loader": "0.0.1", "style-loader": "^0.23.1", "ts-node": "^7.0.1", + "tslint": "^5.15.0", + "tslint-loader": "^3.5.4", "typescript": "^3.3.3333", "webpack": "^4.29.6", "webpack-cli": "^3.2.3", diff --git a/src/Utils.ts b/src/Utils.ts index 3eb192eb8..8bd7f2f5c 100644 --- a/src/Utils.ts +++ b/src/Utils.ts @@ -18,7 +18,7 @@ export class Utils { return { scale: 1, translateX: 1, translateY: 1 } } const rect = ele.getBoundingClientRect(); - const scale = ele.offsetWidth == 0 && rect.width == 0 ? 1 : rect.width / ele.offsetWidth; + const scale = ele.offsetWidth === 0 && rect.width === 0 ? 1 : rect.width / ele.offsetWidth; const translateX = rect.left; const translateY = rect.top; diff --git a/src/client/Server.ts b/src/client/Server.ts index c301b04d3..e3f4448cb 100644 --- a/src/client/Server.ts +++ b/src/client/Server.ts @@ -21,11 +21,11 @@ export class Server { let fn = (cb: (field: Opt) => void) => { let cached = this.ClientFieldsCached.get(fieldid); - if (!cached) { + if (cached === undefined) { this.ClientFieldsCached.set(fieldid, FieldWaiting); SocketStub.SEND_FIELD_REQUEST(fieldid, action((field: Field | undefined) => { let cached = this.ClientFieldsCached.get(fieldid); - if (cached != FieldWaiting) + if (cached !== FieldWaiting) cb(cached); else { if (field) { @@ -36,23 +36,22 @@ export class Server { cb(field) } })); - } else if (cached != FieldWaiting) { + } else if (cached !== FieldWaiting) { setTimeout(() => cb(cached as Field), 0); } else { - reaction(() => { - return this.ClientFieldsCached.get(fieldid); - }, (field, reaction) => { - if (field !== FieldWaiting) { - reaction.dispose() - cb(field) - } - }) + reaction(() => + this.ClientFieldsCached.get(fieldid), (field, reaction) => { + if (field !== FieldWaiting) { + reaction.dispose() + cb(field) + } + }) } } if (callback) { fn(callback); } else { - return new Promise(res => fn(res)); + return new Promise(fn); } } @@ -92,24 +91,23 @@ export class Server { } } } - reaction(() => { - return waitingFieldIds.map(id => this.ClientFieldsCached.get(id)); - }, (cachedFields, reaction) => { - if (!cachedFields.some(field => !field || field === FieldWaiting)) { - reaction.dispose(); - for (let field of cachedFields) { - let realField = field as Field; - existingFields[realField.Id] = realField; + reaction(() => + waitingFieldIds.map(id => this.ClientFieldsCached.get(id)), (cachedFields, reaction) => { + if (!cachedFields.some(field => !field)) { + reaction.dispose(); + for (let field of cachedFields) { + let realField = field as Field; + existingFields[realField.Id] = realField; + } + cb({ ...fields, ...existingFields }) } - cb({ ...fields, ...existingFields }) - } - }, { fireImmediately: true }) + }, { fireImmediately: true }) })); }; if (callback) { fn(callback); } else { - return new Promise(res => fn(res)); + return new Promise(fn); } } @@ -153,19 +151,19 @@ export class Server { @action private static cacheField(clientField: Field) { var cached = this.ClientFieldsCached.get(clientField.Id); - if (!cached || cached == FieldWaiting) { + if (!cached || cached === FieldWaiting) { this.ClientFieldsCached.set(clientField.Id, clientField); } else { // probably should overwrite the values within any field that was already here... } - return this.ClientFieldsCached.get(clientField.Id) as Field; + return this.ClientFieldsCached.get(clientField.Id); } @action static updateField(field: { _id: string, data: any, type: Types }) { if (Server.ClientFieldsCached.has(field._id)) { var f = Server.ClientFieldsCached.get(field._id); - if (f && f != FieldWaiting) { + if (f && f !== FieldWaiting) { // console.log("Applying : " + field._id); f.UpdateFromServer(field.data); f.init(() => { }); diff --git a/src/client/SocketStub.ts b/src/client/SocketStub.ts index 5045037c5..c3cd8bee6 100644 --- a/src/client/SocketStub.ts +++ b/src/client/SocketStub.ts @@ -55,7 +55,7 @@ export class SocketStub { if (callback) { fn(callback); } else { - return new Promise(res => fn(res)) + return new Promise(fn) } } diff --git a/src/client/northstar/manager/Gateway.ts b/src/client/northstar/manager/Gateway.ts index 5ae5e4f47..3e72a50ae 100644 --- a/src/client/northstar/manager/Gateway.ts +++ b/src/client/northstar/manager/Gateway.ts @@ -246,18 +246,18 @@ export class Settings { else { this.ServerUrl = environment["SERVER_URL"] ? environment["SERVER_URL"] : document.URL; }*/ - this.ServerUrl = environment["SERVER_URL"] ? environment["SERVER_URL"] : document.URL; - this.ServerApiPath = environment["SERVER_API_PATH"]; - this.SampleSize = environment["SAMPLE_SIZE"]; - this.XBins = environment["X_BINS"]; - this.YBins = environment["Y_BINS"]; - this.SplashTimeInMS = environment["SPLASH_TIME_IN_MS"]; - this.ShowFpsCounter = environment["SHOW_FPS_COUNTER"]; - this.ShowShutdownButton = environment["SHOW_SHUTDOWN_BUTTON"]; - this.IsMenuFixed = environment["IS_MENU_FIXED"]; - this.IsDarpa = environment["IS_DARPA"]; - this.IsIGT = environment["IS_IGT"]; - this.DegreeOfParallelism = environment["DEGREE_OF_PARALLISM"]; + this.ServerUrl = environment.SERVER_URL ? environment.SERVER_URL : document.URL; + this.ServerApiPath = environment.SERVER_API_PATH; + this.SampleSize = environment.SAMPLE_SIZE; + this.XBins = environment.X_BINS; + this.YBins = environment.Y_BINS; + this.SplashTimeInMS = environment.SPLASH_TIME_IN_MS; + this.ShowFpsCounter = environment.SHOW_FPS_COUNTER; + this.ShowShutdownButton = environment.SHOW_SHUTDOWN_BUTTON; + this.IsMenuFixed = environment.IS_MENU_FIXED; + this.IsDarpa = environment.IS_DARPA; + this.IsIGT = environment.IS_IGT; + this.DegreeOfParallelism = environment.DEGREE_OF_PARALLISM; } public static get Instance(): Settings { diff --git a/src/client/util/DocumentManager.ts b/src/client/util/DocumentManager.ts index bf59fbb43..7cb368f47 100644 --- a/src/client/util/DocumentManager.ts +++ b/src/client/util/DocumentManager.ts @@ -29,7 +29,7 @@ export class DocumentManager { public getAllDocumentViews(collection: Document) { return this.DocumentViews.filter(dv => - dv.props.ContainingCollectionView && dv.props.ContainingCollectionView.props.Document == collection); + dv.props.ContainingCollectionView && dv.props.ContainingCollectionView.props.Document === collection); } public getDocumentView(toFind: Document): DocumentView | null { @@ -47,7 +47,7 @@ export class DocumentManager { return; } let docSrc = doc.GetT(KeyStore.Prototype, Document); - if (docSrc && docSrc != FieldWaiting && Object.is(docSrc, toFind)) { + if (docSrc && docSrc !== FieldWaiting && Object.is(docSrc, toFind)) { toReturn = view; } }) @@ -67,7 +67,7 @@ export class DocumentManager { toReturn.push(view); } else { let docSrc = doc.GetT(KeyStore.Prototype, Document); - if (docSrc && docSrc != FieldWaiting && Object.is(docSrc, toFind)) { + if (docSrc && docSrc !== FieldWaiting && Object.is(docSrc, toFind)) { toReturn.push(view); } } @@ -80,11 +80,11 @@ export class DocumentManager { public get LinkedDocumentViews() { return DocumentManager.Instance.DocumentViews.reduce((pairs, dv) => { let linksList = dv.props.Document.GetT(KeyStore.LinkedToDocs, ListField); - if (linksList && linksList != FieldWaiting && linksList.Data.length) { + if (linksList && linksList !== FieldWaiting && linksList.Data.length) { pairs.push(...linksList.Data.reduce((pairs, link) => { if (link instanceof Document) { let linkToDoc = link.GetT(KeyStore.LinkedToDocs, Document); - if (linkToDoc && linkToDoc != FieldWaiting) { + if (linkToDoc && linkToDoc !== FieldWaiting) { DocumentManager.Instance.getDocumentViews(linkToDoc).map(docView1 => { pairs.push({ a: dv, b: docView1, l: link }) }) diff --git a/src/client/util/DragManager.ts b/src/client/util/DragManager.ts index 96c965c23..ff778302b 100644 --- a/src/client/util/DragManager.ts +++ b/src/client/util/DragManager.ts @@ -6,6 +6,7 @@ import { ImageField } from "../../fields/ImageField"; import { KeyStore } from "../../fields/KeyStore"; import { CollectionView } from "../views/collections/CollectionView"; import { DocumentView } from "../views/nodes/DocumentView"; +import { emptyFunction } from "../../Utils"; export function setupDrag(_reference: React.RefObject, docFunc: () => Document, removeFunc: (containingCollection: CollectionView) => void = () => { }) { let onRowMove = action((e: PointerEvent): void => { @@ -24,7 +25,7 @@ export function setupDrag(_reference: React.RefObject, docFunc: }); let onItemDown = (e: React.PointerEvent) => { // if (this.props.isSelected() || this.props.isTopMost) { - if (e.button == 0) { + if (e.button === 0) { e.stopPropagation(); if (e.shiftKey) { CollectionDockingView.Instance.StartOtherDrag([docFunc()], e); @@ -88,7 +89,7 @@ export namespace DragManager { if ("canDrop" in element.dataset) { throw new Error("Element is already droppable, can't make it droppable again"); } - element.dataset["canDrop"] = "true"; + element.dataset.canDrop = "true"; const handler = (e: Event) => { const ce = e as CustomEvent; options.handlers.drop(e, ce.detail); @@ -96,7 +97,7 @@ export namespace DragManager { element.addEventListener("dashOnDrop", handler); return () => { element.removeEventListener("dashOnDrop", handler); - delete element.dataset["canDrop"] + delete element.dataset.canDrop }; } @@ -167,11 +168,11 @@ export namespace DragManager { let thumbnail = docs[0].GetT(KeyStore.Thumbnail, ImageField); if (pdfBox && pdfBox.childElementCount && thumbnail) { let img = new Image(); - img!.src = thumbnail.toString(); - img!.style.position = "absolute"; - img!.style.width = `${rect.width / scaleX}px`; - img!.style.height = `${rect.height / scaleY}px`; - pdfBox.replaceChild(img!, pdfBox.children[0]) + img.src = thumbnail.toString(); + img.style.position = "absolute"; + img.style.width = `${rect.width / scaleX}px`; + img.style.height = `${rect.height / scaleY}px`; + pdfBox.replaceChild(img, pdfBox.children[0]) } } @@ -224,9 +225,9 @@ export namespace DragManager { }); const target = document.elementFromPoint(e.x, e.y); removed.map(r => { - let dragEle: HTMLElement = r[0]!; - let parent: HTMLElement | null = r[1]; - if (parent) + let dragEle = r[0]; + let parent = r[1]; + if (parent && dragEle) parent.appendChild(dragEle); }); if (target) { diff --git a/src/client/util/Scripting.ts b/src/client/util/Scripting.ts index 4e97b9401..8aef44a3a 100644 --- a/src/client/util/Scripting.ts +++ b/src/client/util/Scripting.ts @@ -26,7 +26,7 @@ export interface ExecutableScript { } function Compile(script: string | undefined, diagnostics: Opt, scope: { [name: string]: any }): ExecutableScript { - const compiled = !(diagnostics && diagnostics.some(diag => diag.category == ts.DiagnosticCategory.Error)); + const compiled = !(diagnostics && diagnostics.some(diag => diag.category === ts.DiagnosticCategory.Error)); let func: () => Opt; if (compiled && script) { @@ -40,7 +40,7 @@ function Compile(script: string | undefined, diagnostics: Opt, scope: { [ paramNames.push(prop); params.push(scope[prop]); } - let thisParam = scope["this"]; + let thisParam = scope.this; let compiledFunction = new Function(...paramNames, script); func = function (): Opt { return compiledFunction.apply(thisParam, params) @@ -49,10 +49,8 @@ function Compile(script: string | undefined, diagnostics: Opt, scope: { [ func = () => undefined; } - return Object.assign(func, - { - compiled - }); + Object.assign(func, { compiled }); + return func as ExecutableScript; } interface File { @@ -125,9 +123,9 @@ export function CompileScript(script: string, scope?: { [name: string]: any }, a } export function ToField(data: any): Opt { - if (typeof data == "string") { + if (typeof data === "string") { return new TextField(data); - } else if (typeof data == "number") { + } else if (typeof data === "number") { return new NumberField(data); } return undefined; diff --git a/src/client/util/SelectionManager.ts b/src/client/util/SelectionManager.ts index 05810b61c..494420f0b 100644 --- a/src/client/util/SelectionManager.ts +++ b/src/client/util/SelectionManager.ts @@ -40,9 +40,8 @@ export namespace SelectionManager { export function DeselectAll(except?: Document): void { let found: DocumentView | undefined = undefined; if (except) { - for (let i = 0; i < manager.SelectedDocuments.length; i++) { - let view = manager.SelectedDocuments[i]; - if (view.props.Document == except) + for (const view of manager.SelectedDocuments) { + if (view.props.Document === except) found = view; } } diff --git a/src/client/util/Transform.ts b/src/client/util/Transform.ts index 889134e3e..8608264a1 100644 --- a/src/client/util/Transform.ts +++ b/src/client/util/Transform.ts @@ -62,33 +62,26 @@ export class Transform { return this; } - translated = (x: number, y: number): Transform => { - return this.copy().translate(x, y); - } + translated = (x: number, y: number): Transform => + this.copy().translate(x, y) - preTranslated = (x: number, y: number): Transform => { - return this.copy().preTranslate(x, y); - } + preTranslated = (x: number, y: number): Transform => + this.copy().preTranslate(x, y) - scaled = (scale: number): Transform => { - return this.copy().scale(scale); - } + scaled = (scale: number): Transform => + this.copy().scale(scale) - scaledAbout = (scale: number, x: number, y: number): Transform => { - return this.copy().scaleAbout(scale, x, y); - } + scaledAbout = (scale: number, x: number, y: number): Transform => + this.copy().scaleAbout(scale, x, y) - preScaled = (scale: number): Transform => { - return this.copy().preScale(scale); - } + preScaled = (scale: number): Transform => + this.copy().preScale(scale) - transformed = (transform: Transform): Transform => { - return this.copy().transform(transform); - } + transformed = (transform: Transform): Transform => + this.copy().transform(transform) - preTransformed = (transform: Transform): Transform => { - return this.copy().preTransform(transform); - } + preTransformed = (transform: Transform): Transform => + this.copy().preTransform(transform) transformPoint = (x: number, y: number): [number, number] => { x *= this._scale; @@ -98,9 +91,8 @@ export class Transform { return [x, y]; } - transformDirection = (x: number, y: number): [number, number] => { - return [x * this._scale, y * this._scale]; - } + transformDirection = (x: number, y: number): [number, number] => + [x * this._scale, y * this._scale] transformBounds(x: number, y: number, width: number, height: number): { x: number, y: number, width: number, height: number } { [x, y] = this.transformPoint(x, y); @@ -108,12 +100,10 @@ export class Transform { return { x, y, width, height }; } - inverse = () => { - return new Transform(-this._translateX / this._scale, -this._translateY / this._scale, 1 / this._scale) - } + inverse = () => + new Transform(-this._translateX / this._scale, -this._translateY / this._scale, 1 / this._scale) - copy = () => { - return new Transform(this._translateX, this._translateY, this._scale); - } + copy = () => + new Transform(this._translateX, this._translateY, this._scale) } \ No newline at end of file diff --git a/src/client/util/TypedEvent.ts b/src/client/util/TypedEvent.ts index 0714a7f5c..c590d3734 100644 --- a/src/client/util/TypedEvent.ts +++ b/src/client/util/TypedEvent.ts @@ -36,7 +36,6 @@ export class TypedEvent { this.listenersOncer = []; } - pipe = (te: TypedEvent): Disposable => { - return this.on((e) => te.emit(e)); - } + pipe = (te: TypedEvent): Disposable => + this.on((e) => te.emit(e)) } \ No newline at end of file diff --git a/src/client/util/UndoManager.ts b/src/client/util/UndoManager.ts index 6d1b2f1b8..1e5028375 100644 --- a/src/client/util/UndoManager.ts +++ b/src/client/util/UndoManager.ts @@ -159,8 +159,8 @@ export namespace UndoManager { } undoing = true; - for (let i = 0; i < commands.length; i++) { - commands[i].redo(); + for (const command of commands) { + command.redo(); } undoing = false; diff --git a/src/client/views/DocumentDecorations.tsx b/src/client/views/DocumentDecorations.tsx index d0699e1ab..b0aa190e5 100644 --- a/src/client/views/DocumentDecorations.tsx +++ b/src/client/views/DocumentDecorations.tsx @@ -75,7 +75,7 @@ export class DocumentDecorations extends React.Component { this._dragging = true; document.removeEventListener("pointermove", this.onBackgroundMove); document.removeEventListener("pointerup", this.onBackgroundUp); - DragManager.StartDocumentDrag(SelectionManager.SelectedDocuments().map(docView => (docView as any)._mainCont!.current!), dragData, { + DragManager.StartDocumentDrag(SelectionManager.SelectedDocuments().map(docView => (docView as any)._mainCont.current), dragData, { handlers: { dragComplete: action(() => this._dragging = false), }, diff --git a/src/client/views/EditableView.tsx b/src/client/views/EditableView.tsx index 29bf6add7..982aacdea 100644 --- a/src/client/views/EditableView.tsx +++ b/src/client/views/EditableView.tsx @@ -38,7 +38,7 @@ export class EditableView extends React.Component { @action onKeyDown = (e: React.KeyboardEvent) => { - if (e.key == "Enter") { + if (e.key === "Enter") { if (!e.ctrlKey) { if (this.props.SetValue(e.currentTarget.value)) { this.editing = false; @@ -47,7 +47,7 @@ export class EditableView extends React.Component { this.props.OnFillDown(e.currentTarget.value); this.editing = false; } - } else if (e.key == "Escape") { + } else if (e.key === "Escape") { this.editing = false; } } diff --git a/src/client/views/InkingCanvas.tsx b/src/client/views/InkingCanvas.tsx index cad4b74b1..a2956f1b6 100644 --- a/src/client/views/InkingCanvas.tsx +++ b/src/client/views/InkingCanvas.tsx @@ -56,7 +56,7 @@ export class InkingCanvas extends React.Component { @action onPointerDown = (e: React.PointerEvent): void => { - if (e.button != 0 || e.altKey || e.ctrlKey || InkingControl.Instance.selectedTool === InkTool.None) { + if (e.button !== 0 || e.altKey || e.ctrlKey || InkingControl.Instance.selectedTool === InkTool.None) { return; } document.addEventListener("pointermove", this.onPointerMove, true); @@ -64,7 +64,7 @@ export class InkingCanvas extends React.Component { e.stopPropagation(); e.preventDefault(); - if (InkingControl.Instance.selectedTool != InkTool.Eraser) { + if (InkingControl.Instance.selectedTool !== InkTool.Eraser) { // start the new line, saves a uuid to represent the field of the stroke this._currentStrokeId = Utils.GenerateGuid(); this.inkData.set(this._currentStrokeId, { @@ -94,7 +94,7 @@ export class InkingCanvas extends React.Component { onPointerMove = (e: PointerEvent): void => { e.stopPropagation() e.preventDefault(); - if (InkingControl.Instance.selectedTool != InkTool.Eraser) { + if (InkingControl.Instance.selectedTool !== InkTool.Eraser) { let data = this.inkData; // add points to new line as it is being drawn let strokeData = data.get(this._currentStrokeId); if (strokeData) { @@ -121,7 +121,7 @@ export class InkingCanvas extends React.Component { get drawnPaths() { let curPage = this.props.Document.GetNumber(KeyStore.CurPage, -1) let paths = Array.from(this.inkData).reduce((paths, [id, strokeData]) => { - if (strokeData.page == -1 || strokeData.page == curPage) + if (strokeData.page === -1 || strokeData.page === curPage) paths.push( { }, [] as JSX.Element[]); return [ - {paths.filter(path => path.props.tool == InkTool.Highlighter)} + {paths.filter(path => path.props.tool === InkTool.Highlighter)} , - {paths.filter(path => path.props.tool != InkTool.Highlighter)} + {paths.filter(path => path.props.tool !== InkTool.Highlighter)} ]; } render() { - let svgCanvasStyle = InkingControl.Instance.selectedTool != InkTool.None ? "canSelect" : "noSelect"; + let svgCanvasStyle = InkingControl.Instance.selectedTool !== InkTool.None ? "canSelect" : "noSelect"; return (
diff --git a/src/client/views/InkingControl.tsx b/src/client/views/InkingControl.tsx index c1519dff8..13f0a0acc 100644 --- a/src/client/views/InkingControl.tsx +++ b/src/client/views/InkingControl.tsx @@ -36,9 +36,9 @@ export class InkingControl extends React.Component { @action switchColor = (color: ColorResult): void => { this._selectedColor = color.hex; - if (SelectionManager.SelectedDocuments().length == 1) { + if (SelectionManager.SelectedDocuments().length === 1) { var sdoc = SelectionManager.SelectedDocuments()[0]; - if (sdoc.props.ContainingCollectionView && sdoc.props.ContainingCollectionView) { + if (sdoc.props.ContainingCollectionView) { sdoc.props.Document.SetDataOnPrototype(KeyStore.BackgroundColor, color.hex, TextField); } } diff --git a/src/client/views/InkingStroke.tsx b/src/client/views/InkingStroke.tsx index 615f8af7e..dbb79c0c6 100644 --- a/src/client/views/InkingStroke.tsx +++ b/src/client/views/InkingStroke.tsx @@ -29,9 +29,8 @@ export class InkingStroke extends React.Component { } } - parseData = (line: Array<{ x: number, y: number }>): string => { - return !line.length ? "" : "M " + line.map(p => (p.x + this.props.offsetX) + " " + (p.y + this.props.offsetY)).join(" L "); - } + parseData = (line: Array<{ x: number, y: number }>): string => + !line.length ? "" : "M " + line.map(p => (p.x + this.props.offsetX) + " " + (p.y + this.props.offsetY)).join(" L ") createStyle() { switch (this._strokeTool) { @@ -49,7 +48,7 @@ export class InkingStroke extends React.Component { let pathStyle = this.createStyle(); let pathData = this.parseData(this.props.line); - let pointerEvents: any = InkingControl.Instance.selectedTool == InkTool.Eraser ? "all" : "none"; + let pointerEvents: any = InkingControl.Instance.selectedTool === InkTool.Eraser ? "all" : "none"; return ( diff --git a/src/client/views/Main.tsx b/src/client/views/Main.tsx index 8f67c006d..446c3d55f 100644 --- a/src/client/views/Main.tsx +++ b/src/client/views/Main.tsx @@ -204,9 +204,7 @@ export class Main extends React.Component { @observable workspacesShown: boolean = false; - areWorkspacesShown = () => { - return this.workspacesShown; - } + areWorkspacesShown = () => this.workspacesShown @action toggleWorkspaces = () => { this.workspacesShown = !this.workspacesShown; @@ -373,8 +371,7 @@ export class Main extends React.Component { } } -Documents.initProtos().then(() => { - return CurrentUserUtils.loadCurrentUser() -}).then(() => { - ReactDOM.render(
, document.getElementById('root')); -}); +Documents.initProtos().then(() => + CurrentUserUtils.loadCurrentUser()).then(() => { + ReactDOM.render(
, document.getElementById('root')); + }); diff --git a/src/client/views/collections/CollectionBaseView.tsx b/src/client/views/collections/CollectionBaseView.tsx index 301467d99..9b68ee06c 100644 --- a/src/client/views/collections/CollectionBaseView.tsx +++ b/src/client/views/collections/CollectionBaseView.tsx @@ -2,7 +2,7 @@ import * as React from 'react'; import { FieldViewProps } from '../nodes/FieldView'; import { KeyStore } from '../../../fields/KeyStore'; import { NumberField } from '../../../fields/NumberField'; -import { FieldWaiting, Field } from '../../../fields/Field'; +import { FieldWaiting, Field, FieldValue } from '../../../fields/Field'; import { ContextMenu } from '../ContextMenu'; import { SelectionManager } from '../../util/SelectionManager'; import { Document } from '../../../fields/Document'; @@ -72,7 +72,7 @@ export class CollectionBaseView extends React.Component { if (this.createsCycle(annots[i], containerDocument)) return true; } - for (let containerProto: any = containerDocument; containerProto && containerProto != FieldWaiting; containerProto = containerProto.GetPrototype()) { + for (let containerProto: FieldValue = containerDocument; containerProto && containerProto != FieldWaiting; containerProto = containerProto.GetPrototype()) { if (containerProto.Id == documentToAdd.Id) return true; } diff --git a/src/client/views/collections/CollectionSchemaView.tsx b/src/client/views/collections/CollectionSchemaView.tsx index 78a813a99..ced46cc25 100644 --- a/src/client/views/collections/CollectionSchemaView.tsx +++ b/src/client/views/collections/CollectionSchemaView.tsx @@ -122,9 +122,7 @@ export class CollectionSchemaView extends CollectionViewBase { } return field || ""; }} - SetValue={(value: string) => { - return applyToDoc(props.Document, value); - }} + SetValue={(value: string) => applyToDoc(props.Document, value)} OnFillDown={(value: string) => { this.props.Document.GetTAsync>(this.props.fieldKey, ListField).then((val) => { if (val) { @@ -240,12 +238,8 @@ export class CollectionSchemaView extends CollectionViewBase { getContentScaling = (): number => this._contentScaling; getPanelWidth = (): number => this._panelWidth; getPanelHeight = (): number => this._panelHeight; - getTransform = (): Transform => { - return this.props.ScreenToLocalTransform().translate(- COLLECTION_BORDER_WIDTH - this.DIVIDER_WIDTH - this._dividerX, - COLLECTION_BORDER_WIDTH).scale(1 / this._contentScaling); - } - getPreviewTransform = (): Transform => { - return this.props.ScreenToLocalTransform().translate(- COLLECTION_BORDER_WIDTH - this.DIVIDER_WIDTH - this._dividerX - this._tableWidth, - COLLECTION_BORDER_WIDTH).scale(1 / this._contentScaling); - } + getTransform = (): Transform => this.props.ScreenToLocalTransform().translate(- COLLECTION_BORDER_WIDTH - this.DIVIDER_WIDTH - this._dividerX, - COLLECTION_BORDER_WIDTH).scale(1 / this._contentScaling) + getPreviewTransform = (): Transform => this.props.ScreenToLocalTransform().translate(- COLLECTION_BORDER_WIDTH - this.DIVIDER_WIDTH - this._dividerX - this._tableWidth, - COLLECTION_BORDER_WIDTH).scale(1 / this._contentScaling) focusDocument = (doc: Document) => { } @@ -332,9 +326,8 @@ export class CollectionSchemaView extends CollectionViewBase {
Show Preview
Displayed Columns
    - {Array.from(Object.keys(allKeys)).map(item => { - return () - })} + {Array.from(Object.keys(allKeys)).map(item => + ())}
diff --git a/src/client/views/collections/CollectionVideoView.tsx b/src/client/views/collections/CollectionVideoView.tsx index 7cb461b4d..3ab6db5ef 100644 --- a/src/client/views/collections/CollectionVideoView.tsx +++ b/src/client/views/collections/CollectionVideoView.tsx @@ -43,7 +43,7 @@ export class CollectionVideoView extends React.Component { @action mainCont = (ele: HTMLDivElement | null) => { if (ele) { - this._player = ele!.getElementsByTagName("video")[0]; + this._player = ele.getElementsByTagName("video")[0]; if (this.props.Document.GetNumber(KeyStore.CurPage, -1) >= 0) { this._currentTimecode = this.props.Document.GetNumber(KeyStore.CurPage, -1); } diff --git a/src/client/views/collections/CollectionViewBase.tsx b/src/client/views/collections/CollectionViewBase.tsx index 71a639137..51280275c 100644 --- a/src/client/views/collections/CollectionViewBase.tsx +++ b/src/client/views/collections/CollectionViewBase.tsx @@ -171,9 +171,8 @@ export class CollectionViewBase extends React.Component fetch(upload, { method: 'POST', body: formData - }).then((res: Response) => { - return res.json() - }).then(json => { + }).then((res: Response) => + res.json()).then(json => { json.map((file: any) => { let path = window.location.origin + file runInAction(() => { diff --git a/src/client/views/collections/collectionFreeForm/CollectionFreeFormLinksView.tsx b/src/client/views/collections/collectionFreeForm/CollectionFreeFormLinksView.tsx index eb20b3100..b682ab303 100644 --- a/src/client/views/collections/collectionFreeForm/CollectionFreeFormLinksView.tsx +++ b/src/client/views/collections/collectionFreeForm/CollectionFreeFormLinksView.tsx @@ -37,11 +37,11 @@ export class CollectionFreeFormLinksView extends React.Component) => field.Data.findIndex(brush => { let bdocs = brush.GetList(KeyStore.BrushingDocs, [] as Document[]); - return (bdocs.length == 0 || (bdocs[0] == dstTarg && bdocs[1] == srcTarg) || (bdocs[0] == srcTarg && bdocs[1] == dstTarg)) + return (bdocs.length === 0 || (bdocs[0] === dstTarg && bdocs[1] === srcTarg) || (bdocs[0] === srcTarg && bdocs[1] === dstTarg)) }); let brushAction = (field: ListField) => { let found = findBrush(field); - if (found != -1) + if (found !== -1) field.Data.splice(found, 1); }; if (Math.abs(x1 + x1w - x2) < 20 || Math.abs(x2 + x2w - x1) < 20) { @@ -50,7 +50,7 @@ export class CollectionFreeFormLinksView extends React.Component) => (findBrush(field) == -1) && field.Data.push(linkDoc); + brushAction = brushAction = (field: ListField) => (findBrush(field) === -1) && field.Data.push(linkDoc); } dstTarg.GetOrCreateAsync(KeyStore.BrushingDocs, ListField, brushAction); srcTarg.GetOrCreateAsync(KeyStore.BrushingDocs, ListField, brushAction); @@ -63,10 +63,10 @@ export class CollectionFreeFormLinksView extends React.Component sv.props.ContainingCollectionView && sv.props.ContainingCollectionView.props.Document == this.props.Document); + return equalViews.filter(sv => sv.props.ContainingCollectionView && sv.props.ContainingCollectionView.props.Document === this.props.Document); } @computed @@ -78,14 +78,14 @@ export class CollectionFreeFormLinksView extends React.Component targetViews.map(tv => possiblePairs.push({ a: sv.props.Document, b: tv.props.Document }))); possiblePairs.map(possiblePair => { if (!drawnPairs.reduce((found, drawnPair) => { - let match = (possiblePair.a == drawnPair.a && possiblePair.b == drawnPair.b); + let match = (possiblePair.a === drawnPair.a && possiblePair.b === drawnPair.b); if (match) { - if (!drawnPair.l.reduce((found, link) => found || link.Id == connection.l.Id, false)) + if (!drawnPair.l.reduce((found, link) => found || link.Id === connection.l.Id, false)) drawnPair.l.push(connection.l); } return match || found; }, false)) { - drawnPairs.push({ a: possiblePair.a, b: possiblePair.b, l: [connection.l] as Document[] }); + drawnPairs.push({ a: possiblePair.a, b: possiblePair.b, l: [connection.l] }); } }) return drawnPairs diff --git a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx index b04438ede..8c5d3f536 100644 --- a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx +++ b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx @@ -83,8 +83,8 @@ export class CollectionFreeFormView extends CollectionViewBase { drop = (e: Event, de: DragManager.DropEvent) => { if (super.drop(e, de)) { if (de.data instanceof DragManager.DocumentDragData) { - let screenX = de.x - (de.data.xOffset as number || 0); - let screenY = de.y - (de.data.yOffset as number || 0); + let screenX = de.x - (de.data.xOffset || 0); + let screenY = de.y - (de.data.yOffset || 0); const [x, y] = this.getTransform().transformPoint(screenX, screenY); let dragDoc = de.data.draggedDocuments[0]; let dragX = dragDoc.GetNumber(KeyStore.X, 0); diff --git a/src/client/views/collections/collectionFreeForm/MarqueeView.tsx b/src/client/views/collections/collectionFreeForm/MarqueeView.tsx index e2239c8be..b068d49d0 100644 --- a/src/client/views/collections/collectionFreeForm/MarqueeView.tsx +++ b/src/client/views/collections/collectionFreeForm/MarqueeView.tsx @@ -146,7 +146,7 @@ export class MarqueeView extends React.Component if (InkingCanvas.IntersectStrokeRect(value, this.Bounds)) { idata.set(key, { - pathData: value.pathData.map(val => { return { x: val.x + centerShiftX, y: val.y + centerShiftY } }), + pathData: value.pathData.map(val => ({ x: val.x + centerShiftX, y: val.y + centerShiftY })), color: value.color, width: value.width, tool: value.tool, diff --git a/src/client/views/nodes/CollectionFreeFormDocumentView.tsx b/src/client/views/nodes/CollectionFreeFormDocumentView.tsx index d52b662bd..e6475ee2a 100644 --- a/src/client/views/nodes/CollectionFreeFormDocumentView.tsx +++ b/src/client/views/nodes/CollectionFreeFormDocumentView.tsx @@ -52,14 +52,12 @@ export class CollectionFreeFormDocumentView extends React.Component { - return this.nativeWidth > 0 ? this.width / this.nativeWidth : 1; - } + contentScaling = () => + this.nativeWidth > 0 ? this.width / this.nativeWidth : 1 - getTransform = (): Transform => { - return this.props.ScreenToLocalTransform(). - translate(-this.props.Document.GetNumber(KeyStore.X, 0), -this.props.Document.GetNumber(KeyStore.Y, 0)).scale(1 / this.contentScaling()); - } + getTransform = (): Transform => + this.props.ScreenToLocalTransform(). + translate(-this.props.Document.GetNumber(KeyStore.X, 0), -this.props.Document.GetNumber(KeyStore.Y, 0)).scale(1 / this.contentScaling()) @computed get docView() { diff --git a/src/client/views/nodes/DocumentView.tsx b/src/client/views/nodes/DocumentView.tsx index 6c05f6924..34eb8919f 100644 --- a/src/client/views/nodes/DocumentView.tsx +++ b/src/client/views/nodes/DocumentView.tsx @@ -287,9 +287,8 @@ export class DocumentView extends React.Component { } - isSelected = () => { - return SelectionManager.IsSelected(this); - } + isSelected = () => + SelectionManager.IsSelected(this) select = (ctrlPressed: boolean) => { SelectionManager.SelectDoc(this, ctrlPressed) diff --git a/src/client/views/nodes/FieldView.tsx b/src/client/views/nodes/FieldView.tsx index 4c6062a2f..d6035a076 100644 --- a/src/client/views/nodes/FieldView.tsx +++ b/src/client/views/nodes/FieldView.tsx @@ -96,9 +96,8 @@ export class FieldView extends React.Component { } else if (field instanceof ListField) { return (
- {(field as ListField).Data.map(f => { - return f instanceof Document ? f.Title : f.GetValue().toString(); - }).join(", ")} + {(field as ListField).Data.map(f => + f instanceof Document ? f.Title : f.GetValue().toString()).join(", ")}
) } // bcz: this belongs here, but it doesn't render well so taking it out for now diff --git a/src/client/views/nodes/ImageBox.tsx b/src/client/views/nodes/ImageBox.tsx index 9b9dfe645..c5f29f7b0 100644 --- a/src/client/views/nodes/ImageBox.tsx +++ b/src/client/views/nodes/ImageBox.tsx @@ -104,7 +104,7 @@ export class ImageBox extends React.Component { render() { let field = this.props.Document.Get(this.props.fieldKey); - let path = field == FieldWaiting ? "https://image.flaticon.com/icons/svg/66/66163.svg" : + let path = field === FieldWaiting ? "https://image.flaticon.com/icons/svg/66/66163.svg" : field instanceof ImageField ? field.Data.href : "http://www.cs.brown.edu/~bcz/face.gif"; let nativeWidth = this.props.Document.GetNumber(KeyStore.NativeWidth, 1); return ( diff --git a/src/client/views/nodes/KeyValueBox.tsx b/src/client/views/nodes/KeyValueBox.tsx index a3478143d..9b067aeeb 100644 --- a/src/client/views/nodes/KeyValueBox.tsx +++ b/src/client/views/nodes/KeyValueBox.tsx @@ -103,14 +103,13 @@ export class KeyValueBox extends React.Component { this._valueInput = e.currentTarget.value; } - newKeyValue = () => { - return ( + newKeyValue = () => + ( ) - } render() { return (
diff --git a/src/client/views/nodes/PDFBox.tsx b/src/client/views/nodes/PDFBox.tsx index 3b5e3a570..66c9f477e 100644 --- a/src/client/views/nodes/PDFBox.tsx +++ b/src/client/views/nodes/PDFBox.tsx @@ -94,7 +94,7 @@ export class PDFBox extends React.Component { this._reactionDisposer = reaction( () => [this.curPage, this.thumbnailPage], () => { - if (this.curPage > 0 && this.thumbnailPage > 0 && this.curPage != this.thumbnailPage) { + if (this.curPage > 0 && this.thumbnailPage > 0 && this.curPage !== this.thumbnailPage) { this.saveThumbnail(); this._interactive = true; } @@ -165,16 +165,16 @@ export class PDFBox extends React.Component { let obj: Object = { parentDivs: [], spans: [] }; //@ts-ignore - if (range.commonAncestorContainer.className == 'react-pdf__Page__textContent') { //multiline highlighting case + if (range.commonAncestorContainer.className === 'react-pdf__Page__textContent') { //multiline highlighting case obj = this.highlightNodes(range.commonAncestorContainer.childNodes) } else { //single line highlighting case let parentDiv = range.commonAncestorContainer.parentElement if (parentDiv) { - if (parentDiv.className == 'react-pdf__Page__textContent') { //when highlight is overwritten + if (parentDiv.className === 'react-pdf__Page__textContent') { //when highlight is overwritten obj = this.highlightNodes(parentDiv.childNodes) } else { parentDiv.childNodes.forEach((child) => { - if (child.nodeName == 'SPAN') { + if (child.nodeName === 'SPAN') { //@ts-ignore obj.parentDivs.push(parentDiv) //@ts-ignore @@ -197,7 +197,7 @@ export class PDFBox extends React.Component { let temp = { parentDivs: [], spans: [] } nodes.forEach((div) => { div.childNodes.forEach((child) => { - if (child.nodeName == 'SPAN') { + if (child.nodeName === 'SPAN') { //@ts-ignore temp.parentDivs.push(div) //@ts-ignore @@ -221,7 +221,7 @@ export class PDFBox extends React.Component { let index: any; this._pageInfo.divs.forEach((obj: any) => { obj.spans.forEach((element: any) => { - if (element == span) { + if (element === span) { if (!index) { index = this._pageInfo.divs.indexOf(obj); } @@ -230,11 +230,11 @@ export class PDFBox extends React.Component { }) if (this._pageInfo.anno.length >= index + 1) { - if (this._currAnno.length == 0) { + if (this._currAnno.length === 0) { this._currAnno.push(this._pageInfo.anno[index]); } } else { - if (this._currAnno.length == 0) { //if there are no current annotation + if (this._currAnno.length === 0) { //if there are no current annotation let div = span.offsetParent; //@ts-ignore let divX = div.style.left @@ -315,7 +315,7 @@ export class PDFBox extends React.Component { * starts drawing the line when user presses down. */ onDraw = () => { - if (this._currTool != null) { + if (this._currTool !== null) { this._currTool.style.backgroundColor = "grey"; } @@ -340,13 +340,13 @@ export class PDFBox extends React.Component { * for changing color (for ink/pen) */ onColorChange = (e: React.PointerEvent) => { - if (e.currentTarget.innerHTML == "Red") { + if (e.currentTarget.innerHTML === "Red") { this._currColor = "red"; - } else if (e.currentTarget.innerHTML == "Blue") { + } else if (e.currentTarget.innerHTML === "Blue") { this._currColor = "blue"; - } else if (e.currentTarget.innerHTML == "Green") { + } else if (e.currentTarget.innerHTML === "Green") { this._currColor = "green"; - } else if (e.currentTarget.innerHTML == "Black") { + } else if (e.currentTarget.innerHTML === "Black") { this._currColor = "black"; } @@ -358,7 +358,7 @@ export class PDFBox extends React.Component { */ onHighlight = () => { this._drawToolOn = false; - if (this._currTool != null) { + if (this._currTool !== null) { this._currTool.style.backgroundColor = "grey"; } if (this._highlightTool.current) { @@ -394,7 +394,7 @@ export class PDFBox extends React.Component { onLoaded = (page: any) => { if (this._mainDiv.current) { this._mainDiv.current.childNodes.forEach((element) => { - if (element.nodeName == "DIV") { + if (element.nodeName === "DIV") { element.childNodes[0].childNodes.forEach((e) => { if (e instanceof HTMLCanvasElement) { @@ -410,7 +410,7 @@ export class PDFBox extends React.Component { // bcz: the number of pages should really be set when the document is imported. this.props.Document.SetNumber(KeyStore.NumPages, page._transport.numPages); - if (this._perPageInfo.length == 0) { //Makes sure it only runs once + if (this._perPageInfo.length === 0) { //Makes sure it only runs once this._perPageInfo = [...Array(page._transport.numPages)] } this._loaded = true; @@ -455,7 +455,7 @@ export class PDFBox extends React.Component { get pdfRenderer() { let proxy = this._loaded ? (null) : this.imageProxyRenderer; let pdfUrl = this.props.Document.GetT(this.props.fieldKey, PDFField); - if ((!this._interactive && proxy) || !pdfUrl || pdfUrl == FieldWaiting) { + if ((!this._interactive && proxy) || !pdfUrl || pdfUrl === FieldWaiting) { return proxy; } return [ @@ -470,7 +470,7 @@ export class PDFBox extends React.Component { get imageProxyRenderer() { let thumbField = this.props.Document.Get(KeyStore.Thumbnail); if (thumbField) { - let path = thumbField == FieldWaiting || this.thumbnailPage != this.curPage ? "https://image.flaticon.com/icons/svg/66/66163.svg" : + let path = thumbField === FieldWaiting || this.thumbnailPage !== this.curPage ? "https://image.flaticon.com/icons/svg/66/66163.svg" : thumbField instanceof ImageField ? thumbField.Data.href : "http://cs.brown.edu/people/bcz/prairie.jpg"; return ; } diff --git a/src/client/views/nodes/VideoBox.tsx b/src/client/views/nodes/VideoBox.tsx index 72495a964..b4590df34 100644 --- a/src/client/views/nodes/VideoBox.tsx +++ b/src/client/views/nodes/VideoBox.tsx @@ -50,8 +50,8 @@ export class VideoBox extends React.Component { @action setVideoRef = (vref: HTMLVideoElement | null) => { if (this.curPage >= 0 && vref) { - vref!.currentTime = this.curPage; - (vref! as any).AHackBecauseSomethingResetsTheVideoToZero = this.curPage; + vref.currentTime = this.curPage; + (vref as any).AHackBecauseSomethingResetsTheVideoToZero = this.curPage; } } diff --git a/src/debug/Viewer.tsx b/src/debug/Viewer.tsx index 7fdd77bf3..9f52d0ea6 100644 --- a/src/debug/Viewer.tsx +++ b/src/debug/Viewer.tsx @@ -87,7 +87,7 @@ class DocumentViewer extends React.Component<{ field: Document }> { return (
({key ? key.Name : kv[0]}): - +
) }) @@ -177,9 +177,8 @@ class Viewer extends React.Component { onChange={this.inputOnChange} onKeyDown={this.onKeyPress} />
- {this.ids.map(id => { - return - })} + {this.ids.map(id => + )}
) diff --git a/src/fields/Document.ts b/src/fields/Document.ts index 85ff6ddcb..45e4f93f6 100644 --- a/src/fields/Document.ts +++ b/src/fields/Document.ts @@ -30,9 +30,9 @@ export class Document extends Field { } } - public Width = () => { return this.GetNumber(KeyStore.Width, 0) } - public Height = () => { return this.GetNumber(KeyStore.Height, this.GetNumber(KeyStore.NativeWidth, 0) ? this.GetNumber(KeyStore.NativeHeight, 0) / this.GetNumber(KeyStore.NativeWidth, 0) * this.GetNumber(KeyStore.Width, 0) : 0) } - public Scale = () => { return this.GetNumber(KeyStore.Scale, 1) } + public Width = () => this.GetNumber(KeyStore.Width, 0) + public Height = () => this.GetNumber(KeyStore.Height, this.GetNumber(KeyStore.NativeWidth, 0) ? this.GetNumber(KeyStore.NativeHeight, 0) / this.GetNumber(KeyStore.NativeWidth, 0) * this.GetNumber(KeyStore.Width, 0) : 0) + public Scale = () => this.GetNumber(KeyStore.Scale, 1) @computed public get Title(): string { @@ -90,7 +90,7 @@ export class Document extends Field { } } else { let doc: FieldValue = this; - while (doc && doc != FieldWaiting && field != FieldWaiting) { + while (doc && doc !== FieldWaiting && field !== FieldWaiting) { let curField = doc.fields.get(key.Id); let curProxy = doc._proxies.get(key.Id); if (!curField || (curProxy && curField.field.Id !== curProxy)) { @@ -118,7 +118,7 @@ export class Document extends Field { break; } } - if (doc == FieldWaiting) + if (doc === FieldWaiting) field = FieldWaiting; } @@ -165,7 +165,7 @@ export class Document extends Field { if (callback) { fn(callback); } else { - return new Promise(res => fn(res)); + return new Promise(fn); } } @@ -356,7 +356,7 @@ export class Document extends Field { let fields: [string, string][] = [] this._proxies.forEach((field, key) => { if (field) { - fields.push([key, field as string]) + fields.push([key, field]) } }); diff --git a/src/fields/WebField.ts b/src/fields/WebField.ts index 6c4de5000..0cbcc6d33 100644 --- a/src/fields/WebField.ts +++ b/src/fields/WebField.ts @@ -4,7 +4,7 @@ import { Types } from "../server/Message"; export class WebField extends BasicField { constructor(data: URL | undefined = undefined, id?: FieldId, save: boolean = true) { - super(data == undefined ? new URL("https://crossorigin.me/" + "https://cs.brown.edu/") : data, save, id); + super(data === undefined ? new URL("https://crossorigin.me/" + "https://cs.brown.edu/") : data, save, id); } toString(): string { diff --git a/src/mobile/ImageUpload.tsx b/src/mobile/ImageUpload.tsx index ae48dd2c6..c4d346876 100644 --- a/src/mobile/ImageUpload.tsx +++ b/src/mobile/ImageUpload.tsx @@ -33,9 +33,8 @@ const onFileLoad = (file: any) => { fetch(upload, { method: 'POST', body: formData - }).then((res: Response) => { - return res.json() - }).then(json => { + }).then((res: Response) => + res.json()).then(json => { json.map((file: any) => { let path = window.location.origin + file var doc: Document = Documents.ImageDocument(path, { nativeWidth: 200, width: 200 }) diff --git a/src/server/authentication/controllers/WorkspacesMenu.tsx b/src/server/authentication/controllers/WorkspacesMenu.tsx index 8e14cf98e..835432c8e 100644 --- a/src/server/authentication/controllers/WorkspacesMenu.tsx +++ b/src/server/authentication/controllers/WorkspacesMenu.tsx @@ -73,7 +73,7 @@ export class WorkspacesMenu extends React.Component { {i + 1} - { return s.Title }} + GetValue={() => s.Title} SetValue={(title: string): boolean => { s.SetText(KeyStore.Title, title); return true; diff --git a/src/server/authentication/controllers/user_controller.ts b/src/server/authentication/controllers/user_controller.ts index e365b8dce..2bbb334b5 100644 --- a/src/server/authentication/controllers/user_controller.ts +++ b/src/server/authentication/controllers/user_controller.ts @@ -4,7 +4,7 @@ import * as passport from "passport"; import { IVerifyOptions } from "passport-local"; import "../config/passport"; import * as request from "express-validator"; -const flash = require("express-flash"); +import flash = require("express-flash"); import * as session from "express-session"; import * as pug from 'pug'; import * as async from 'async'; @@ -109,12 +109,12 @@ export let postLogin = (req: Request, res: Response, next: NextFunction) => { } passport.authenticate("local", (err: Error, user: DashUserModel, info: IVerifyOptions) => { - if (err) { return next(err); } + if (err) { next(err); return } if (!user) { return res.redirect(RouteStore.signup); } req.logIn(user, (err) => { - if (err) { return next(err); } + if (err) { next(err); return } res.redirect(RouteStore.home); }); })(req, res, next); @@ -158,7 +158,8 @@ export let postForgot = function (req: Request, res: Response, next: NextFunctio User.findOne({ email }, function (err, user: DashUserModel) { if (!user) { // NO ACCOUNT WITH SUBMITTED EMAIL - return res.redirect(RouteStore.forgot); + res.redirect(RouteStore.forgot); + return } user.passwordResetToken = token; user.passwordResetExpires = new Date(Date.now() + 3600000); // 1 HOUR @@ -228,7 +229,8 @@ export let postReset = function (req: Request, res: Response) { user.save(function (err) { if (err) { - return res.redirect(RouteStore.login); + res.redirect(RouteStore.login); + return; } req.logIn(user, function (err) { if (err) { diff --git a/src/server/database.ts b/src/server/database.ts index a42d29aac..87a0b3c70 100644 --- a/src/server/database.ts +++ b/src/server/database.ts @@ -27,7 +27,7 @@ export class Database { console.log(err.errmsg); } if (res) { - console.log(JSON.stringify(res.result)); + // console.log(JSON.stringify(res.result)); } callback() }); diff --git a/src/server/index.ts b/src/server/index.ts index 17d7432e0..0c61f6885 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -264,11 +264,9 @@ function deleteFields() { } function deleteAll() { - return Database.Instance.deleteAll().then(() => { - return Database.Instance.deleteAll('sessions') - }).then(() => { - return Database.Instance.deleteAll('users') - }); + return Database.Instance.deleteAll().then(() => + Database.Instance.deleteAll('sessions')).then(() => + Database.Instance.deleteAll('users')); } function barReceived(guid: String) { diff --git a/test/test.ts b/test/test.ts index 0fa1ea15b..db24cae5f 100644 --- a/test/test.ts +++ b/test/test.ts @@ -152,7 +152,7 @@ describe("Reference", () => { let ran = false; reaction(() => { let field = doc2.GetT(key, NumberField); - if (field && field != FieldWaiting) { + if (field && field !== FieldWaiting) { return field.Data; } return undefined; diff --git a/tslint.json b/tslint.json new file mode 100644 index 000000000..54876916e --- /dev/null +++ b/tslint.json @@ -0,0 +1,56 @@ +{ + "rules": { + // "no-non-null-assertion": true, + "no-return-await": true, + "no-string-literal": true, + // "no-var-keyword": true, + // "no-var-requires": true, + "prefer-object-spread": true, + "prefer-for-of": true, + "no-unnecessary-type-assertion": true, + // "no-void-expression": [ + // true, + // "ignore-arrow-function-shorthand" + // ], + "triple-equals": true, + // "prefer-const": true, + "no-unnecessary-callback-wrapper": true, + // "align": [ + // true, + // "parameters", + // "arguments", + // "statements", + // "members", + // "elements" + // ], + "class-name": true, + "arrow-return-shorthand": true, + // "object-literal-shorthand": true, + // "object-literal-sort-keys": true, + // "semicolon": [ + // true, + // "always" + // ], + // "curly": [ + // true, + // "ignore-same-line" + // ], + // "quotemark": [ + // true, + // "double", + // "jsx-double", + // "avoid-template", + // "avoid-escape" + // ], + "no-tautology-expression": true, + "unnecessary-constructor": true + // "trailing-comma": [ + // true, + // { + // "multiline": "always", + // "singleline": "never" + // } + // ], + // "ordered-imports": true + } +} \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js index 5ba9dd4b5..50079255f 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -28,44 +28,53 @@ module.exports = { extensions: ['.js', '.ts', '.tsx'] }, module: { - rules: [{ - test: [/\.tsx?$/, /\.ts?$/,], - loader: "awesome-typescript-loader", - include: path.join(__dirname, 'src') - }, - { - test: /\.scss|css$/, - use: [ - { - loader: "style-loader" - }, - { - loader: "css-loader" - }, - { - loader: "sass-loader" - } - ] - }, - { - test: /\.(jpg|png|pdf)$/, - use: [ - { - loader: 'file-loader' - } - ] - }, - { - test: /\.(png|jpg|gif)$/i, - use: [ - { - loader: 'url-loader', - options: { - limit: 8192 + rules: [ + { + test: [/\.tsx?$/, /\.ts?$/,], + enforce: 'pre', + use: [ + { + loader: "tslint-loader", } - } - ] - }] + ] + }, { + test: [/\.tsx?$/, /\.ts?$/,], + loader: "awesome-typescript-loader", + include: path.join(__dirname, 'src') + }, + { + test: /\.scss|css$/, + use: [ + { + loader: "style-loader" + }, + { + loader: "css-loader" + }, + { + loader: "sass-loader" + } + ] + }, + { + test: /\.(jpg|png|pdf)$/, + use: [ + { + loader: 'file-loader' + } + ] + }, + { + test: /\.(png|jpg|gif)$/i, + use: [ + { + loader: 'url-loader', + options: { + limit: 8192 + } + } + ] + }] }, plugins: [ new CopyWebpackPlugin([{ from: "deploy", to: path.join(__dirname, "build") }]), -- cgit v1.2.3-70-g09d2 From 93bed89512baa506c1b5ed2223ffc83fa6b5390e Mon Sep 17 00:00:00 2001 From: Tyler Schicke Date: Thu, 4 Apr 2019 18:26:33 -0400 Subject: Changed linter stuff --- src/client/Server.ts | 12 ++--- src/client/util/DocumentManager.ts | 4 +- src/client/util/Transform.ts | 30 ++++-------- src/client/util/TypedEvent.ts | 3 +- src/client/views/DocumentDecorations.tsx | 2 +- src/client/views/InkingStroke.tsx | 5 +- src/client/views/Main.tsx | 9 ++-- .../views/collections/CollectionViewBase.tsx | 13 +++--- .../collectionFreeForm/CollectionFreeFormView.tsx | 10 ++-- .../views/nodes/CollectionFreeFormDocumentView.tsx | 8 ++-- src/client/views/nodes/DocumentView.tsx | 6 ++- src/client/views/nodes/FieldView.tsx | 5 +- src/debug/Viewer.tsx | 3 +- src/fields/Document.ts | 2 +- src/mobile/ImageUpload.tsx | 54 +++++++++++----------- src/server/index.ts | 8 ++-- 16 files changed, 82 insertions(+), 92 deletions(-) (limited to 'src') diff --git a/src/client/Server.ts b/src/client/Server.ts index e3f4448cb..45c7144ca 100644 --- a/src/client/Server.ts +++ b/src/client/Server.ts @@ -39,8 +39,8 @@ export class Server { } else if (cached !== FieldWaiting) { setTimeout(() => cb(cached as Field), 0); } else { - reaction(() => - this.ClientFieldsCached.get(fieldid), (field, reaction) => { + reaction(() => this.ClientFieldsCached.get(fieldid), + (field, reaction) => { if (field !== FieldWaiting) { reaction.dispose() cb(field) @@ -91,8 +91,8 @@ export class Server { } } } - reaction(() => - waitingFieldIds.map(id => this.ClientFieldsCached.get(id)), (cachedFields, reaction) => { + reaction(() => waitingFieldIds.map(id => this.ClientFieldsCached.get(id)), + (cachedFields, reaction) => { if (!cachedFields.some(field => !field)) { reaction.dispose(); for (let field of cachedFields) { @@ -151,7 +151,7 @@ export class Server { @action private static cacheField(clientField: Field) { var cached = this.ClientFieldsCached.get(clientField.Id); - if (!cached || cached === FieldWaiting) { + if (!cached) { this.ClientFieldsCached.set(clientField.Id, clientField); } else { // probably should overwrite the values within any field that was already here... @@ -163,7 +163,7 @@ export class Server { static updateField(field: { _id: string, data: any, type: Types }) { if (Server.ClientFieldsCached.has(field._id)) { var f = Server.ClientFieldsCached.get(field._id); - if (f && f !== FieldWaiting) { + if (f) { // console.log("Applying : " + field._id); f.UpdateFromServer(field.data); f.init(() => { }); diff --git a/src/client/util/DocumentManager.ts b/src/client/util/DocumentManager.ts index 7cb368f47..fb489edb6 100644 --- a/src/client/util/DocumentManager.ts +++ b/src/client/util/DocumentManager.ts @@ -42,7 +42,7 @@ export class DocumentManager { let doc = view.props.Document; // if (view.props.ContainingCollectionView instanceof CollectionFreeFormView) { - if (Object.is(doc, toFind)) { + if (doc === toFind) { toReturn = view; return; } @@ -63,7 +63,7 @@ export class DocumentManager { let doc = view.props.Document; // if (view.props.ContainingCollectionView instanceof CollectionFreeFormView) { - if (Object.is(doc, toFind)) { + if (doc === toFind) { toReturn.push(view); } else { let docSrc = doc.GetT(KeyStore.Prototype, Document); diff --git a/src/client/util/Transform.ts b/src/client/util/Transform.ts index 8608264a1..54effd512 100644 --- a/src/client/util/Transform.ts +++ b/src/client/util/Transform.ts @@ -62,26 +62,19 @@ export class Transform { return this; } - translated = (x: number, y: number): Transform => - this.copy().translate(x, y) + translated = (x: number, y: number): Transform => this.copy().translate(x, y) - preTranslated = (x: number, y: number): Transform => - this.copy().preTranslate(x, y) + preTranslated = (x: number, y: number): Transform => this.copy().preTranslate(x, y) - scaled = (scale: number): Transform => - this.copy().scale(scale) + scaled = (scale: number): Transform => this.copy().scale(scale) - scaledAbout = (scale: number, x: number, y: number): Transform => - this.copy().scaleAbout(scale, x, y) + scaledAbout = (scale: number, x: number, y: number): Transform => this.copy().scaleAbout(scale, x, y) - preScaled = (scale: number): Transform => - this.copy().preScale(scale) + preScaled = (scale: number): Transform => this.copy().preScale(scale) - transformed = (transform: Transform): Transform => - this.copy().transform(transform) + transformed = (transform: Transform): Transform => this.copy().transform(transform) - preTransformed = (transform: Transform): Transform => - this.copy().preTransform(transform) + preTransformed = (transform: Transform): Transform => this.copy().preTransform(transform) transformPoint = (x: number, y: number): [number, number] => { x *= this._scale; @@ -91,8 +84,7 @@ export class Transform { return [x, y]; } - transformDirection = (x: number, y: number): [number, number] => - [x * this._scale, y * this._scale] + transformDirection = (x: number, y: number): [number, number] => [x * this._scale, y * this._scale] transformBounds(x: number, y: number, width: number, height: number): { x: number, y: number, width: number, height: number } { [x, y] = this.transformPoint(x, y); @@ -100,10 +92,8 @@ export class Transform { return { x, y, width, height }; } - inverse = () => - new Transform(-this._translateX / this._scale, -this._translateY / this._scale, 1 / this._scale) + inverse = () => new Transform(-this._translateX / this._scale, -this._translateY / this._scale, 1 / this._scale) - copy = () => - new Transform(this._translateX, this._translateY, this._scale) + copy = () => new Transform(this._translateX, this._translateY, this._scale) } \ No newline at end of file diff --git a/src/client/util/TypedEvent.ts b/src/client/util/TypedEvent.ts index c590d3734..1b251da25 100644 --- a/src/client/util/TypedEvent.ts +++ b/src/client/util/TypedEvent.ts @@ -36,6 +36,5 @@ export class TypedEvent { this.listenersOncer = []; } - pipe = (te: TypedEvent): Disposable => - this.on((e) => te.emit(e)) + pipe = (te: TypedEvent): Disposable => this.on((e) => te.emit(e)) } \ No newline at end of file diff --git a/src/client/views/DocumentDecorations.tsx b/src/client/views/DocumentDecorations.tsx index b0aa190e5..a6117dfa0 100644 --- a/src/client/views/DocumentDecorations.tsx +++ b/src/client/views/DocumentDecorations.tsx @@ -75,7 +75,7 @@ export class DocumentDecorations extends React.Component { this._dragging = true; document.removeEventListener("pointermove", this.onBackgroundMove); document.removeEventListener("pointerup", this.onBackgroundUp); - DragManager.StartDocumentDrag(SelectionManager.SelectedDocuments().map(docView => (docView as any)._mainCont.current), dragData, { + DragManager.StartDocumentDrag(SelectionManager.SelectedDocuments().map(docView => docView.ContentRef.current!), dragData, { handlers: { dragComplete: action(() => this._dragging = false), }, diff --git a/src/client/views/InkingStroke.tsx b/src/client/views/InkingStroke.tsx index dbb79c0c6..12b15a3f0 100644 --- a/src/client/views/InkingStroke.tsx +++ b/src/client/views/InkingStroke.tsx @@ -29,8 +29,9 @@ export class InkingStroke extends React.Component { } } - parseData = (line: Array<{ x: number, y: number }>): string => - !line.length ? "" : "M " + line.map(p => (p.x + this.props.offsetX) + " " + (p.y + this.props.offsetY)).join(" L ") + parseData = (line: Array<{ x: number, y: number }>): string => { + return !line.length ? "" : "M " + line.map(p => (p.x + this.props.offsetX) + " " + (p.y + this.props.offsetY)).join(" L ") + } createStyle() { switch (this._strokeTool) { diff --git a/src/client/views/Main.tsx b/src/client/views/Main.tsx index 446c3d55f..33759d38a 100644 --- a/src/client/views/Main.tsx +++ b/src/client/views/Main.tsx @@ -371,7 +371,8 @@ export class Main extends React.Component { } } -Documents.initProtos().then(() => - CurrentUserUtils.loadCurrentUser()).then(() => { - ReactDOM.render(
, document.getElementById('root')); - }); +(async () => { + await Documents.initProtos() + await CurrentUserUtils.loadCurrentUser() + ReactDOM.render(
, document.getElementById('root')); +})() diff --git a/src/client/views/collections/CollectionViewBase.tsx b/src/client/views/collections/CollectionViewBase.tsx index 51280275c..2b858789f 100644 --- a/src/client/views/collections/CollectionViewBase.tsx +++ b/src/client/views/collections/CollectionViewBase.tsx @@ -134,7 +134,7 @@ export class CollectionViewBase extends React.Component e.stopPropagation() e.preventDefault() - if (html && html.indexOf(" return; } + // tslint:disable-next-line:prefer-for-of for (let i = 0; i < e.dataTransfer.items.length; i++) { const upload = window.location.origin + RouteStore.upload; let item = e.dataTransfer.items[i]; - if (item.kind === "string" && item.type.indexOf("uri") != -1) { + if (item.kind === "string" && item.type.indexOf("uri") !== -1) { e.dataTransfer.items[i].getAsString(action((s: string) => { request.head(ServerUtils.prepend(RouteStore.corsProxy + "/" + s), (err, res, body) => { let type = res.headers["content-type"]; @@ -160,7 +161,7 @@ export class CollectionViewBase extends React.Component })) } let type = item.type - if (item.kind == "file") { + if (item.kind === "file") { let file = item.getAsFile(); let formData = new FormData() @@ -171,15 +172,15 @@ export class CollectionViewBase extends React.Component fetch(upload, { method: 'POST', body: formData - }).then((res: Response) => - res.json()).then(json => { + }).then(async (res: Response) => { + const json = await res.json(); json.map((file: any) => { let path = window.location.origin + file runInAction(() => { let doc = this.getDocumentFromType(type, path, { ...options, nativeWidth: 300, width: 300 }) let docs = this.props.Document.GetT(KeyStore.Data, ListField); - if (docs != FieldWaiting) { + if (docs !== FieldWaiting) { if (!docs) { docs = new ListField(); this.props.Document.Set(KeyStore.Data, docs) diff --git a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx index 8c5d3f536..f03205739 100644 --- a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx +++ b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx @@ -54,7 +54,7 @@ export class CollectionFreeFormView extends CollectionViewBase { var curPage = this.props.Document.GetNumber(KeyStore.CurPage, -1); return this.props.Document.GetList(this.props.fieldKey, [] as Document[]).reduce((active, doc) => { var page = doc.GetNumber(KeyStore.Page, -1); - if (page == curPage || page == -1) { + if (page === curPage || page === -1) { active.push(doc); } return active; @@ -115,7 +115,7 @@ export class CollectionFreeFormView extends CollectionViewBase { @action onPointerDown = (e: React.PointerEvent): void => { - if (((e.button === 2 && (!this.isAnnotationOverlay || this.zoomScaling != 1)) || e.button == 0) && this.props.active()) { + if (((e.button === 2 && (!this.isAnnotationOverlay || this.zoomScaling !== 1)) || e.button === 0) && this.props.active()) { document.removeEventListener("pointermove", this.onPointerMove); document.addEventListener("pointermove", this.onPointerMove); document.removeEventListener("pointerup", this.onPointerUp); @@ -137,7 +137,7 @@ export class CollectionFreeFormView extends CollectionViewBase { @action onPointerMove = (e: PointerEvent): void => { if (!e.cancelBubble && this.props.active()) { - if ((!this.isAnnotationOverlay || this.zoomScaling != 1) && !e.shiftKey) { + if ((!this.isAnnotationOverlay || this.zoomScaling !== 1) && !e.shiftKey) { let x = this.props.Document.GetNumber(KeyStore.PanX, 0); let y = this.props.Document.GetNumber(KeyStore.PanY, 0); let [dx, dy] = this.getTransform().transformDirection(e.clientX - this._lastX, e.clientY - this._lastY); @@ -247,7 +247,7 @@ export class CollectionFreeFormView extends CollectionViewBase { removeDocument: this.props.removeDocument, ScreenToLocalTransform: this.getTransform, isTopMost: false, - selectOnLoad: document.Id == this._selectOnLoaded, + selectOnLoad: document.Id === this._selectOnLoaded, PanelWidth: document.Width, PanelHeight: document.Height, ContentScaling: this.noScaling, @@ -263,7 +263,7 @@ export class CollectionFreeFormView extends CollectionViewBase { var curPage = this.props.Document.GetNumber(KeyStore.CurPage, -1); return this.props.Document.GetList(this.props.fieldKey, [] as Document[]).filter(doc => doc).reduce((prev, doc) => { var page = doc.GetNumber(KeyStore.Page, -1); - if (page == curPage || page == -1) + if (page === curPage || page === -1) prev.push(); return prev; }, [] as JSX.Element[]) diff --git a/src/client/views/nodes/CollectionFreeFormDocumentView.tsx b/src/client/views/nodes/CollectionFreeFormDocumentView.tsx index e6475ee2a..ce453b4af 100644 --- a/src/client/views/nodes/CollectionFreeFormDocumentView.tsx +++ b/src/client/views/nodes/CollectionFreeFormDocumentView.tsx @@ -52,12 +52,12 @@ export class CollectionFreeFormDocumentView extends React.Component - this.nativeWidth > 0 ? this.width / this.nativeWidth : 1 + contentScaling = () => this.nativeWidth > 0 ? this.width / this.nativeWidth : 1 getTransform = (): Transform => - this.props.ScreenToLocalTransform(). - translate(-this.props.Document.GetNumber(KeyStore.X, 0), -this.props.Document.GetNumber(KeyStore.Y, 0)).scale(1 / this.contentScaling()) + this.props.ScreenToLocalTransform() + .translate(-this.props.Document.GetNumber(KeyStore.X, 0), -this.props.Document.GetNumber(KeyStore.Y, 0)) + .scale(1 / this.contentScaling()) @computed get docView() { diff --git a/src/client/views/nodes/DocumentView.tsx b/src/client/views/nodes/DocumentView.tsx index 34eb8919f..3b146654c 100644 --- a/src/client/views/nodes/DocumentView.tsx +++ b/src/client/views/nodes/DocumentView.tsx @@ -85,6 +85,9 @@ export function FakeJsxArgs(keys: string[], fields: string[] = []): JsxArgs { @observer export class DocumentView extends React.Component { private _mainCont = React.createRef(); + public get ContentRef() { + return this._mainCont; + } private _downX: number = 0; private _downY: number = 0; @computed get active(): boolean { return SelectionManager.IsSelected(this) || this.props.parentActive(); } @@ -287,8 +290,7 @@ export class DocumentView extends React.Component { } - isSelected = () => - SelectionManager.IsSelected(this) + isSelected = () => SelectionManager.IsSelected(this) select = (ctrlPressed: boolean) => { SelectionManager.SelectDoc(this, ctrlPressed) diff --git a/src/client/views/nodes/FieldView.tsx b/src/client/views/nodes/FieldView.tsx index d6035a076..d9422ae9b 100644 --- a/src/client/views/nodes/FieldView.tsx +++ b/src/client/views/nodes/FieldView.tsx @@ -96,8 +96,7 @@ export class FieldView extends React.Component { } else if (field instanceof ListField) { return (
- {(field as ListField).Data.map(f => - f instanceof Document ? f.Title : f.GetValue().toString()).join(", ")} + {(field as ListField).Data.map(f => f instanceof Document ? f.Title : f.GetValue().toString()).join(", ")}
) } // bcz: this belongs here, but it doesn't render well so taking it out for now @@ -107,7 +106,7 @@ export class FieldView extends React.Component { else if (field instanceof NumberField) { return

{field.Data}

} - else if (field != FieldWaiting) { + else if (field !== FieldWaiting) { return

{JSON.stringify(field.GetValue())}

} else diff --git a/src/debug/Viewer.tsx b/src/debug/Viewer.tsx index 9f52d0ea6..f13cccd24 100644 --- a/src/debug/Viewer.tsx +++ b/src/debug/Viewer.tsx @@ -177,8 +177,7 @@ class Viewer extends React.Component { onChange={this.inputOnChange} onKeyDown={this.onKeyPress} />
- {this.ids.map(id => - )} + {this.ids.map(id => )}
) diff --git a/src/fields/Document.ts b/src/fields/Document.ts index 45e4f93f6..6d13c96b8 100644 --- a/src/fields/Document.ts +++ b/src/fields/Document.ts @@ -90,7 +90,7 @@ export class Document extends Field { } } else { let doc: FieldValue = this; - while (doc && doc !== FieldWaiting && field !== FieldWaiting) { + while (doc && field !== FieldWaiting) { let curField = doc.fields.get(key.Id); let curProxy = doc._proxies.get(key.Id); if (!curField || (curProxy && curField.field.Id !== curProxy)) { diff --git a/src/mobile/ImageUpload.tsx b/src/mobile/ImageUpload.tsx index c4d346876..c3684a0eb 100644 --- a/src/mobile/ImageUpload.tsx +++ b/src/mobile/ImageUpload.tsx @@ -9,6 +9,7 @@ import { RouteStore } from '../server/RouteStore'; import { ServerUtils } from '../server/ServerUtil'; import "./ImageUpload.scss"; import React = require('react'); +import { Opt } from '../fields/Field'; @@ -20,47 +21,44 @@ import React = require('react'); // } // } -const onFileLoad = (file: any) => { +const onFileLoad = async (file: any) => { let imgPrev = document.getElementById("img_preview") if (imgPrev) { let files: File[] = file.target.files; - if (files.length != 0) { + if (files.length !== 0) { console.log(files[0]); let formData = new FormData(); formData.append("file", files[0]); const upload = window.location.origin + "/upload" - fetch(upload, { + const res = await fetch(upload, { method: 'POST', body: formData - }).then((res: Response) => - res.json()).then(json => { - json.map((file: any) => { - let path = window.location.origin + file - var doc: Document = Documents.ImageDocument(path, { nativeWidth: 200, width: 200 }) + }); + const json = await res.json(); + json.map(async (file: any) => { + let path = window.location.origin + file + var doc: Document = Documents.ImageDocument(path, { nativeWidth: 200, width: 200 }) - rp.get(ServerUtils.prepend(RouteStore.getUserDocumentId)).then(res => { - if (res) { - return Server.GetField(res); - } - throw new Error("No user id returned"); - }).then(field => { - if (field instanceof Document) { - return field.GetTAsync(KeyStore.OptionalRightCollection, Document) - } - }).then(pending => { - if (pending) { - pending.GetOrCreateAsync(KeyStore.Data, ListField, list => { - list.Data.push(doc); - }) - } - }); + const res = await rp.get(ServerUtils.prepend(RouteStore.getUserDocumentId)); + if (!res) { + throw new Error("No user id returned"); + } + const field = await Server.GetField(res); + let pending: Opt; + if (field instanceof Document) { + pending = await field.GetTAsync(KeyStore.OptionalRightCollection, Document) + } + if (pending) { + pending.GetOrCreateAsync(KeyStore.Data, ListField, list => { + list.Data.push(doc); + }) + } + }); - // console.log(window.location.origin + file[0]) + // console.log(window.location.origin + file[0]) - //imgPrev.setAttribute("src", window.location.origin + files[0].name) - }) - }) + //imgPrev.setAttribute("src", window.location.origin + files[0].name) } } } diff --git a/src/server/index.ts b/src/server/index.ts index 0c61f6885..ce8bbefe8 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -263,10 +263,10 @@ function deleteFields() { return Database.Instance.deleteAll(); } -function deleteAll() { - return Database.Instance.deleteAll().then(() => - Database.Instance.deleteAll('sessions')).then(() => - Database.Instance.deleteAll('users')); +async function deleteAll() { + await Database.Instance.deleteAll(); + await Database.Instance.deleteAll('sessions'); + await Database.Instance.deleteAll('users'); } function barReceived(guid: String) { -- cgit v1.2.3-70-g09d2 From 318dacd846ab06358e26ca49e711e06434287d16 Mon Sep 17 00:00:00 2001 From: Tyler Schicke Date: Thu, 4 Apr 2019 19:37:10 -0400 Subject: Most stuff seems to be working --- src/client/util/DragManager.ts | 9 +++++---- src/client/views/collections/CollectionBaseView.tsx | 16 +++++++++------- src/client/views/collections/CollectionSchemaView.tsx | 18 +++++++++--------- src/client/views/collections/CollectionTreeView.tsx | 19 +++++++++++++++---- src/client/views/collections/CollectionView.tsx | 7 ++++++- src/client/views/collections/CollectionViewBase.tsx | 2 ++ .../collectionFreeForm/CollectionFreeFormView.tsx | 1 + src/client/views/nodes/DocumentView.tsx | 2 +- 8 files changed, 48 insertions(+), 26 deletions(-) (limited to 'src') diff --git a/src/client/util/DragManager.ts b/src/client/util/DragManager.ts index ff778302b..d8e70a8b4 100644 --- a/src/client/util/DragManager.ts +++ b/src/client/util/DragManager.ts @@ -6,9 +6,9 @@ import { ImageField } from "../../fields/ImageField"; import { KeyStore } from "../../fields/KeyStore"; import { CollectionView } from "../views/collections/CollectionView"; import { DocumentView } from "../views/nodes/DocumentView"; -import { emptyFunction } from "../../Utils"; +import { returnFalse } from "../../Utils"; -export function setupDrag(_reference: React.RefObject, docFunc: () => Document, removeFunc: (containingCollection: CollectionView) => void = () => { }) { +export function setupDrag(_reference: React.RefObject, docFunc: () => Document, moveFunc?: DragManager.MoveFunction) { let onRowMove = action((e: PointerEvent): void => { e.stopPropagation(); e.preventDefault(); @@ -16,7 +16,7 @@ export function setupDrag(_reference: React.RefObject, docFunc: document.removeEventListener("pointermove", onRowMove); document.removeEventListener('pointerup', onRowUp); var dragData = new DragManager.DocumentDragData([docFunc()]); - dragData.removeDocument = removeFunc; + dragData.moveDocument = moveFunc; DragManager.StartDocumentDrag([_reference.current!], dragData); }); let onRowUp = action((e: PointerEvent): void => { @@ -101,6 +101,7 @@ export namespace DragManager { }; } + export type MoveFunction = (document: Document, targetCollection: Document, addDocument: (document: Document) => boolean) => boolean; export class DocumentDragData { constructor(dragDoc: Document[]) { this.draggedDocuments = dragDoc; @@ -111,7 +112,7 @@ export namespace DragManager { xOffset?: number; yOffset?: number; aliasOnDrop?: boolean; - moveDocument?: (document: Document, targetCollection: Document, addDocument: (document: Document) => boolean) => boolean; + moveDocument?: MoveFunction; [id: string]: any; } diff --git a/src/client/views/collections/CollectionBaseView.tsx b/src/client/views/collections/CollectionBaseView.tsx index 9b68ee06c..ee752a2ca 100644 --- a/src/client/views/collections/CollectionBaseView.tsx +++ b/src/client/views/collections/CollectionBaseView.tsx @@ -9,6 +9,7 @@ import { Document } from '../../../fields/Document'; import { ListField } from '../../../fields/ListField'; import { action } from 'mobx'; import { Transform } from '../../util/Transform'; +import { observer } from 'mobx-react'; export enum CollectionViewType { Invalid, @@ -35,6 +36,7 @@ export interface CollectionViewProps extends FieldViewProps { export const COLLECTION_BORDER_WIDTH = 1; +@observer export class CollectionBaseView extends React.Component { get collectionViewType(): CollectionViewType { let Document = this.props.Document; @@ -72,8 +74,8 @@ export class CollectionBaseView extends React.Component { if (this.createsCycle(annots[i], containerDocument)) return true; } - for (let containerProto: FieldValue = containerDocument; containerProto && containerProto != FieldWaiting; containerProto = containerProto.GetPrototype()) { - if (containerProto.Id == documentToAdd.Id) + for (let containerProto: FieldValue = containerDocument; containerProto && containerProto !== FieldWaiting; containerProto = containerProto.GetPrototype()) { + if (containerProto.Id === documentToAdd.Id) return true; } return false; @@ -91,14 +93,14 @@ export class CollectionBaseView extends React.Component { //TODO This won't create the field if it doesn't already exist const value = props.Document.GetData(props.fieldKey, ListField, new Array()) if (!this.createsCycle(doc, props.Document)) { - if (!value.some(v => v.Id == doc.Id) || allowDuplicates) + if (!value.some(v => v.Id === doc.Id) || allowDuplicates) value.push(doc); } else return false; } else { let proto = props.Document.GetPrototype(); - if (!proto || proto == FieldWaiting || !this.createsCycle(proto, doc)) { + if (!proto || proto === FieldWaiting || !this.createsCycle(proto, doc)) { props.Document.SetOnPrototype(props.fieldKey, new ListField([doc])); } else @@ -114,13 +116,13 @@ export class CollectionBaseView extends React.Component { const value = props.Document.GetData(props.fieldKey, ListField, new Array()) let index = -1; for (let i = 0; i < value.length; i++) { - if (value[i].Id == doc.Id) { + if (value[i].Id === doc.Id) { index = i; break; } } doc.GetTAsync(KeyStore.AnnotationOn, Document).then((annotationOn) => { - if (annotationOn == props.Document) { + if (annotationOn === props.Document) { doc.Set(KeyStore.AnnotationOn, undefined, true); } }) @@ -138,7 +140,7 @@ export class CollectionBaseView extends React.Component { @action.bound moveDocument(doc: Document, targetCollection: Document, addDocument: (doc: Document) => boolean): boolean { if (this.props.Document === targetCollection) { - return false; + return true; } if (this.removeDocument(doc)) { return addDocument(doc); diff --git a/src/client/views/collections/CollectionSchemaView.tsx b/src/client/views/collections/CollectionSchemaView.tsx index ced46cc25..9dade94f1 100644 --- a/src/client/views/collections/CollectionSchemaView.tsx +++ b/src/client/views/collections/CollectionSchemaView.tsx @@ -90,7 +90,7 @@ export class CollectionSchemaView extends CollectionViewBase { ) let reference = React.createRef(); - let onItemDown = setupDrag(reference, () => props.Document, (containingCollection: CollectionView) => this.props.removeDocument(props.Document)); + let onItemDown = setupDrag(reference, () => props.Document, this.props.moveDocument); let applyToDoc = (doc: Document, value: string) => { let script = CompileScript(value, { this: doc }, true); if (!script.compiled) { @@ -150,7 +150,7 @@ export class CollectionSchemaView extends CollectionViewBase { } }), style: { - background: rowInfo.index == this._selectedIndex ? "lightGray" : "white", + background: rowInfo.index === this._selectedIndex ? "lightGray" : "white", //color: rowInfo.index == this._selectedIndex ? "white" : "black" } }; @@ -179,8 +179,8 @@ export class CollectionSchemaView extends CollectionViewBase { @action toggleExpander = (event: React.ChangeEvent) => { this._startSplitPercent = this.splitPercentage; - if (this._startSplitPercent == this.splitPercentage) { - this.props.Document.SetNumber(KeyStore.SchemaSplitPercentage, this.splitPercentage == 0 ? 33 : 0); + if (this._startSplitPercent === this.splitPercentage) { + this.props.Document.SetNumber(KeyStore.SchemaSplitPercentage, this.splitPercentage === 0 ? 33 : 0); } } @@ -209,8 +209,8 @@ export class CollectionSchemaView extends CollectionViewBase { onDividerUp = (e: PointerEvent): void => { document.removeEventListener("pointermove", this.onDividerMove); document.removeEventListener('pointerup', this.onDividerUp); - if (this._startSplitPercent == this.splitPercentage) { - this.props.Document.SetNumber(KeyStore.SchemaSplitPercentage, this.splitPercentage == 0 ? 33 : 0); + if (this._startSplitPercent === this.splitPercentage) { + this.props.Document.SetNumber(KeyStore.SchemaSplitPercentage, this.splitPercentage === 0 ? 33 : 0); } } onDividerDown = (e: React.PointerEvent) => { @@ -290,7 +290,7 @@ export class CollectionSchemaView extends CollectionViewBase { let doc: any = selected ? selected.Get(new Key(this.previewScript)) : undefined; // let doc = CompileScript(this.previewScript, { this: selected }, true)(); - let content = this._selectedIndex == -1 || !selected ? (null) : ( + let content = this._selectedIndex === -1 || !selected ? (null) : ( {({ measureRef }) =>
@@ -313,7 +313,7 @@ export class CollectionSchemaView extends CollectionViewBase { } ) - let dividerDragger = this.splitPercentage == 0 ? (null) : + let dividerDragger = this.splitPercentage === 0 ? (null) :
//options button and menu @@ -323,7 +323,7 @@ export class CollectionSchemaView extends CollectionViewBase {
Options
Preview Window
-
Show Preview
+
Show Preview
Displayed Columns
    {Array.from(Object.keys(allKeys)).map(item => diff --git a/src/client/views/collections/CollectionTreeView.tsx b/src/client/views/collections/CollectionTreeView.tsx index 6f9ba40d2..32d74164d 100644 --- a/src/client/views/collections/CollectionTreeView.tsx +++ b/src/client/views/collections/CollectionTreeView.tsx @@ -7,7 +7,7 @@ import { Document } from "../../../fields/Document"; import { FieldWaiting } from "../../../fields/Field"; import { KeyStore } from "../../../fields/KeyStore"; import { ListField } from "../../../fields/ListField"; -import { setupDrag } from "../../util/DragManager"; +import { setupDrag, DragManager } from "../../util/DragManager"; import { EditableView } from "../EditableView"; import "./CollectionTreeView.scss"; import { CollectionView } from "./CollectionView"; @@ -19,6 +19,7 @@ import { COLLECTION_BORDER_WIDTH } from './CollectionBaseView'; export interface TreeViewProps { document: Document; deleteDoc: (doc: Document) => void; + moveDocument: DragManager.MoveFunction; } export enum BulletType { @@ -49,6 +50,16 @@ class TreeView extends React.Component { } } + @action + move: DragManager.MoveFunction = (document, target, addDoc) => { + if (this.props.document === target) { + return true; + } + //TODO This should check if it was removed + this.remove(document) + return addDoc(document); + } + renderBullet(type: BulletType) { let onClicked = action(() => this._collapsed = !this._collapsed); let bullet: IconProp | undefined = undefined; @@ -64,7 +75,7 @@ class TreeView extends React.Component { */ renderTitle() { let reference = React.createRef(); - let onItemDown = setupDrag(reference, () => this.props.document, (containingCollection: CollectionView) => this.props.deleteDoc(this.props.document)); + let onItemDown = setupDrag(reference, () => this.props.document, this.props.moveDocument); let editableView = (titleString: string) => ( { if (!this._collapsed) { bulletType = BulletType.Collapsible; childElements =
      - {children.Data.map(value => )} + {children.Data.map(value => )}
    } else bulletType = BulletType.Collapsed; @@ -122,7 +133,7 @@ export class CollectionTreeView extends CollectionViewBase { var children = this.props.Document.GetT>(KeyStore.Data, ListField); let childrenElement = !children || children === FieldWaiting ? (null) : (children.Data.map(value => - ) + ) ) return ( diff --git a/src/client/views/collections/CollectionView.tsx b/src/client/views/collections/CollectionView.tsx index d440dcff9..5b4caf58d 100644 --- a/src/client/views/collections/CollectionView.tsx +++ b/src/client/views/collections/CollectionView.tsx @@ -8,16 +8,21 @@ import { CollectionTreeView } from './CollectionTreeView'; import { ContextMenu } from '../ContextMenu'; import { CurrentUserUtils } from '../../../server/authentication/models/current_user_utils'; import { KeyStore } from '../../../fields/KeyStore'; +import { observer } from 'mobx-react'; + +@observer export class CollectionView extends React.Component { public static LayoutString(fieldStr: string = "DataKey") { return FieldView.LayoutString(CollectionView, fieldStr) } private SubView = (type: CollectionViewType, renderProps: CollectionRenderProps) => { let props = { ...this.props, ...renderProps }; switch (type) { - case CollectionViewType.Freeform: return () case CollectionViewType.Schema: return () case CollectionViewType.Docking: return () case CollectionViewType.Tree: return () + case CollectionViewType.Freeform: + default: + return () } return (null); } diff --git a/src/client/views/collections/CollectionViewBase.tsx b/src/client/views/collections/CollectionViewBase.tsx index 2b858789f..147e5fd6b 100644 --- a/src/client/views/collections/CollectionViewBase.tsx +++ b/src/client/views/collections/CollectionViewBase.tsx @@ -80,6 +80,8 @@ export class CollectionViewBase extends React.Component } else if (de.data.moveDocument) { const move = de.data.moveDocument; added = de.data.droppedDocuments.reduce((added, d) => added || move(d, this.props.Document, this.props.addDocument), false) + } else { + added = de.data.droppedDocuments.reduce((added, d) => added || this.props.addDocument(d), false) } e.stopPropagation(); return added; diff --git a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx index f03205739..4aad06607 100644 --- a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx +++ b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx @@ -245,6 +245,7 @@ export class CollectionFreeFormView extends CollectionViewBase { Document: document, addDocument: this.props.addDocument, removeDocument: this.props.removeDocument, + moveDocument: this.props.moveDocument, ScreenToLocalTransform: this.getTransform, isTopMost: false, selectOnLoad: document.Id === this._selectOnLoaded, diff --git a/src/client/views/nodes/DocumentView.tsx b/src/client/views/nodes/DocumentView.tsx index 3b146654c..2a9b3b9ac 100644 --- a/src/client/views/nodes/DocumentView.tsx +++ b/src/client/views/nodes/DocumentView.tsx @@ -27,7 +27,7 @@ export interface DocumentViewProps { Document: Document; addDocument?: (doc: Document, allowDuplicates?: boolean) => boolean; removeDocument?: (doc: Document) => boolean; - moveDocument?: (doc: Document, targetCollection: Document, addDocument: (document: Document) => void) => boolean; + moveDocument?: (doc: Document, targetCollection: Document, addDocument: (document: Document) => boolean) => boolean; ScreenToLocalTransform: () => Transform; isTopMost: boolean; ContentScaling: () => number; -- cgit v1.2.3-70-g09d2 From dc20420e4757824974ba4b2ea3926d541f5e8b60 Mon Sep 17 00:00:00 2001 From: Tyler Schicke Date: Thu, 4 Apr 2019 20:13:19 -0400 Subject: fixed merge --- src/client/views/DocumentDecorations.tsx | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/client/views/DocumentDecorations.tsx b/src/client/views/DocumentDecorations.tsx index 99588480d..11bf24505 100644 --- a/src/client/views/DocumentDecorations.tsx +++ b/src/client/views/DocumentDecorations.tsx @@ -55,9 +55,9 @@ export class DocumentDecorations extends React.Component<{}, { value: string }> enterPressed = (e: any) => { var key = e.keyCode || e.which; // enter pressed - if (key == 13) { + if (key === 13) { var text = e.target.value; - if (text[0] == '#') { + if (text[0] === '#') { let command = text.slice(1, text.length); this._fieldKey = new Key(command) // if (command == "Title" || command == "title") { @@ -156,7 +156,7 @@ export class DocumentDecorations extends React.Component<{}, { value: string }> onCloseUp = (e: PointerEvent): void => { e.stopPropagation(); if (e.button === 0) { - SelectionManager.SelectedDocuments().map(dv => dv.props.RemoveDocument && dv.props.RemoveDocument(dv.props.Document)); + SelectionManager.SelectedDocuments().map(dv => dv.props.removeDocument && dv.props.removeDocument(dv.props.Document)); SelectionManager.DeselectAll(); document.removeEventListener("pointermove", this.onCloseMove); document.removeEventListener("pointerup", this.onCloseUp); @@ -211,7 +211,7 @@ export class DocumentDecorations extends React.Component<{}, { value: string }> } onLinkerButtonMoved = (e: PointerEvent): void => { - if (this._linkerButton.current != null) { + if (this._linkerButton.current !== null) { document.removeEventListener("pointermove", this.onLinkerButtonMoved) document.removeEventListener("pointerup", this.onLinkerButtonUp) let dragData = new DragManager.LinkDragData(SelectionManager.SelectedDocuments()[0]); @@ -240,25 +240,24 @@ export class DocumentDecorations extends React.Component<{}, { value: string }> } onLinkButtonMoved = async (e: PointerEvent) => { - if (this._linkButton.current != null) { + if (this._linkButton.current !== null) { document.removeEventListener("pointermove", this.onLinkButtonMoved) document.removeEventListener("pointerup", this.onLinkButtonUp); let sourceDoc = SelectionManager.SelectedDocuments()[0].props.Document; let srcTarg = sourceDoc.GetT(KeyStore.Prototype, Document) - let draggedDocs = (srcTarg && srcTarg != FieldWaiting) ? + let draggedDocs = (srcTarg && srcTarg !== FieldWaiting) ? srcTarg.GetList(KeyStore.LinkedToDocs, [] as Document[]).map(linkDoc => (linkDoc.GetT(KeyStore.LinkedToDocs, Document)) as Document) : []; - let draggedFromDocs = (srcTarg && srcTarg != FieldWaiting) ? + let draggedFromDocs = (srcTarg && srcTarg !== FieldWaiting) ? srcTarg.GetList(KeyStore.LinkedFromDocs, [] as Document[]).map(linkDoc => (linkDoc.GetT(KeyStore.LinkedFromDocs, Document)) as Document) : []; draggedDocs.push(...draggedFromDocs); if (draggedDocs.length) { let moddrag = [] as Document[]; - for (let i = 0; i < draggedDocs.length; i++) { - let doc = await draggedDocs[i].GetTAsync(KeyStore.AnnotationOn, Document); - if (doc) - moddrag.push(doc); + for (const draggedDoc of draggedDocs) { + let doc = await draggedDoc.GetTAsync(KeyStore.AnnotationOn, Document); + if (doc) moddrag.push(doc); } let dragData = new DragManager.DocumentDragData(moddrag); DragManager.StartDocumentDrag([this._linkButton.current], dragData, { -- cgit v1.2.3-70-g09d2 From 0403ee1f31d3f127a44aaabdfd21785d7efa6430 Mon Sep 17 00:00:00 2001 From: Tyler Schicke Date: Fri, 5 Apr 2019 01:17:41 -0400 Subject: Fixed remaining linter warnings --- src/client/northstar/core/BaseObject.ts | 2 +- .../northstar/core/attribute/AttributeModel.ts | 4 +- .../core/attribute/AttributeTransformationModel.ts | 2 +- .../core/attribute/CalculatedAttributeModel.ts | 4 +- src/client/northstar/core/filter/FilterModel.ts | 6 +- .../northstar/core/filter/ValueComparision.ts | 8 +- src/client/northstar/dash-fields/HistogramField.ts | 8 +- .../dash-nodes/HistogramBinPrimitiveCollection.ts | 46 ++++----- src/client/northstar/dash-nodes/HistogramBox.tsx | 12 +-- .../dash-nodes/HistogramBoxPrimitives.tsx | 18 ++-- .../dash-nodes/HistogramLabelPrimitives.tsx | 10 +- src/client/northstar/manager/Gateway.ts | 8 +- src/client/northstar/model/ModelExtensions.ts | 14 +-- src/client/northstar/model/ModelHelpers.ts | 10 +- .../model/binRanges/DateTimeVisualBinRange.ts | 24 ++--- .../northstar/model/binRanges/VisualBinRange.ts | 4 - .../model/binRanges/VisualBinRangeHelper.ts | 7 +- .../northstar/model/idea/MetricTypeMapping.ts | 28 +++--- src/client/northstar/operations/BaseOperation.ts | 8 +- .../northstar/operations/HistogramOperation.ts | 2 +- src/client/northstar/utils/ArrayUtil.ts | 14 +-- src/client/northstar/utils/GeometryUtil.ts | 2 +- src/client/northstar/utils/MathUtil.ts | 12 +-- src/client/northstar/utils/SizeConverter.ts | 4 +- src/client/northstar/utils/Utils.ts | 12 +-- src/client/views/DocumentDecorations.tsx | 4 +- src/client/views/Main.tsx | 4 +- .../views/collections/CollectionBaseView.tsx | 8 +- .../views/collections/CollectionDockingView.tsx | 30 +++--- src/client/views/collections/CollectionPDFView.tsx | 2 +- .../views/collections/CollectionSchemaView.tsx | 2 +- .../views/collections/CollectionVideoView.tsx | 4 +- src/client/views/collections/CollectionView.tsx | 2 +- .../views/collections/CollectionViewBase.tsx | 4 +- .../collectionFreeForm/CollectionFreeFormView.tsx | 4 +- .../collections/collectionFreeForm/MarqueeView.tsx | 12 +-- .../collectionFreeForm/PreviewCursor.tsx | 2 +- src/client/views/nodes/Annotation.tsx | 108 ++++++++++----------- src/client/views/nodes/AudioBox.tsx | 2 +- src/client/views/nodes/DocumentContentsView.tsx | 2 +- src/client/views/nodes/KeyValueBox.tsx | 6 +- src/client/views/nodes/LinkBox.tsx | 2 +- src/client/views/nodes/LinkMenu.tsx | 2 +- src/client/views/nodes/VideoBox.tsx | 2 +- src/client/views/nodes/WebBox.tsx | 2 +- src/fields/AudioField.ts | 2 +- src/fields/BasicField.ts | 2 +- src/fields/ImageField.ts | 2 +- src/fields/ListField.ts | 10 +- src/fields/PDFField.ts | 2 +- src/fields/VideoField.ts | 2 +- src/server/index.ts | 2 +- 52 files changed, 245 insertions(+), 250 deletions(-) (limited to 'src') diff --git a/src/client/northstar/core/BaseObject.ts b/src/client/northstar/core/BaseObject.ts index e9e766e31..f1761e643 100644 --- a/src/client/northstar/core/BaseObject.ts +++ b/src/client/northstar/core/BaseObject.ts @@ -4,7 +4,7 @@ import { IDisposable } from '../utils/IDisposable' export class BaseObject implements IEquatable, IDisposable { public Equals(other: Object): boolean { - return this == other; + return this === other; } public Dispose(): void { diff --git a/src/client/northstar/core/attribute/AttributeModel.ts b/src/client/northstar/core/attribute/AttributeModel.ts index 124a5b45a..230bfecc8 100644 --- a/src/client/northstar/core/attribute/AttributeModel.ts +++ b/src/client/northstar/core/attribute/AttributeModel.ts @@ -34,7 +34,7 @@ export class ColumnAttributeModel extends AttributeModel { } public Equals(other: ColumnAttributeModel): boolean { - return this.Attribute.rawName == other.Attribute.rawName; + return this.Attribute.rawName === other.Attribute.rawName; } } @@ -105,7 +105,7 @@ export class BackendAttributeModel extends AttributeModel { } public Equals(other: BackendAttributeModel): boolean { - return this.Id == other.Id; + return this.Id === other.Id; } } \ No newline at end of file diff --git a/src/client/northstar/core/attribute/AttributeTransformationModel.ts b/src/client/northstar/core/attribute/AttributeTransformationModel.ts index cc5aa7154..f50b78d51 100644 --- a/src/client/northstar/core/attribute/AttributeTransformationModel.ts +++ b/src/client/northstar/core/attribute/AttributeTransformationModel.ts @@ -41,7 +41,7 @@ export class AttributeTransformationModel implements IEquatable { } public Equals(other: AttributeTransformationModel): boolean { - return this.AggregateFunction == other.AggregateFunction && + return this.AggregateFunction === other.AggregateFunction && this.AttributeModel.Equals(other.AttributeModel); } } \ No newline at end of file diff --git a/src/client/northstar/core/attribute/CalculatedAttributeModel.ts b/src/client/northstar/core/attribute/CalculatedAttributeModel.ts index ab96c794d..0b8e0d12c 100644 --- a/src/client/northstar/core/attribute/CalculatedAttributeModel.ts +++ b/src/client/northstar/core/attribute/CalculatedAttributeModel.ts @@ -11,7 +11,7 @@ export class CalculatedAttributeManager { public static CreateBackendAttributeModel(id: string, dataType: DataType, displayName: string, codeName: string, visualizationHints: VisualizationHint[]): BackendAttributeModel { var filtered = this.AllCalculatedAttributes.filter(am => { if (am instanceof BackendAttributeModel && - am.Id == id) { + am.Id === id) { return true; } return false; @@ -27,7 +27,7 @@ export class CalculatedAttributeManager { public static CreateCodeAttributeModel(code: string, codeName: string, visualizationHints: VisualizationHint[]): CodeAttributeModel { var filtered = this.AllCalculatedAttributes.filter(am => { if (am instanceof CodeAttributeModel && - am.CodeName == codeName) { + am.CodeName === codeName) { return true; } return false; diff --git a/src/client/northstar/core/filter/FilterModel.ts b/src/client/northstar/core/filter/FilterModel.ts index aee99d2b6..20fca77f5 100644 --- a/src/client/northstar/core/filter/FilterModel.ts +++ b/src/client/northstar/core/filter/FilterModel.ts @@ -46,16 +46,16 @@ export class FilterModel { let filtered = baseOperation.FilterModels.filter(fm => fm && fm.ValueComparisons.length > 0); if (!isFirst && filtered.length > 0) { filterModels.push(...filtered); - ret = "(" + baseOperation.FilterModels.filter(fm => fm != null).map(fm => fm.ToPythonString()).join(" || ") + ")"; + ret = "(" + baseOperation.FilterModels.filter(fm => fm !== null).map(fm => fm.ToPythonString()).join(" || ") + ")"; } if (Utils.isBaseFilterConsumer(baseOperation) && baseOperation.Links) { let children = new Array(); let linkedGraphNodes = baseOperation.Links; linkedGraphNodes.map(linkVm => { let filterDoc = linkVm.Get(KeyStore.LinkedFromDocs); - if (filterDoc && filterDoc != FieldWaiting && filterDoc instanceof Document) { + if (filterDoc && filterDoc !== FieldWaiting && filterDoc instanceof Document) { let filterHistogram = filterDoc.GetT(KeyStore.Data, HistogramField); - if (filterHistogram && filterHistogram != FieldWaiting) { + if (filterHistogram && filterHistogram !== FieldWaiting) { if (!visitedFilterProviders.has(filterHistogram.Data)) { let child = FilterModel.GetFilterModelsRecursive(filterHistogram.Data, visitedFilterProviders, filterModels, false); if (child !== "") { diff --git a/src/client/northstar/core/filter/ValueComparision.ts b/src/client/northstar/core/filter/ValueComparision.ts index 1e729d06e..1a3e461f5 100644 --- a/src/client/northstar/core/filter/ValueComparision.ts +++ b/src/client/northstar/core/filter/ValueComparision.ts @@ -20,7 +20,7 @@ export class ValueComparison { if (this.Predicate !== (other as ValueComparison).Predicate) return false; let isComplex = (typeof this.Value === "object"); - if (!isComplex && this.Value != (other as ValueComparison).Value) + if (!isComplex && this.Value !== (other as ValueComparison).Value) return false; if (isComplex && !this.Value.Equals((other as ValueComparison).Value)) return false; @@ -58,13 +58,13 @@ export class ValueComparison { var rawName = this.attributeModel.CodeName; switch (this.Predicate) { case Predicate.STARTS_WITH: - ret += rawName + " != null && " + rawName + ".StartsWith(" + val + ") "; + ret += rawName + " !== null && " + rawName + ".StartsWith(" + val + ") "; return ret; case Predicate.ENDS_WITH: - ret += rawName + " != null && " + rawName + ".EndsWith(" + val + ") "; + ret += rawName + " !== null && " + rawName + ".EndsWith(" + val + ") "; return ret; case Predicate.CONTAINS: - ret += rawName + " != null && " + rawName + ".Contains(" + val + ") "; + ret += rawName + " !== null && " + rawName + ".Contains(" + val + ") "; return ret; default: ret += rawName + " " + op + " " + val + " "; diff --git a/src/client/northstar/dash-fields/HistogramField.ts b/src/client/northstar/dash-fields/HistogramField.ts index 90be70b80..f939ccd83 100644 --- a/src/client/northstar/dash-fields/HistogramField.ts +++ b/src/client/northstar/dash-fields/HistogramField.ts @@ -16,7 +16,7 @@ export class HistogramField extends BasicField { omitKeys(obj: any, keys: any) { var dup: any = {}; for (var key in obj) { - if (keys.indexOf(key) == -1) { + if (keys.indexOf(key) === -1) { dup[key] = obj[key]; } } @@ -54,13 +54,13 @@ export class HistogramField extends BasicField { let schema = CurrentUserUtils.GetNorthstarSchema(jp.SchemaName); if (schema) { CurrentUserUtils.GetAllNorthstarColumnAttributes(schema).map(attr => { - if (attr.displayName == jp.X.AttributeModel.Attribute.DisplayName) { + if (attr.displayName === jp.X.AttributeModel.Attribute.DisplayName) { X = new AttributeTransformationModel(new ColumnAttributeModel(attr), jp.X.AggregateFunction); } - if (attr.displayName == jp.Y.AttributeModel.Attribute.DisplayName) { + if (attr.displayName === jp.Y.AttributeModel.Attribute.DisplayName) { Y = new AttributeTransformationModel(new ColumnAttributeModel(attr), jp.Y.AggregateFunction); } - if (attr.displayName == jp.V.AttributeModel.Attribute.DisplayName) { + if (attr.displayName === jp.V.AttributeModel.Attribute.DisplayName) { V = new AttributeTransformationModel(new ColumnAttributeModel(attr), jp.V.AggregateFunction); } }); diff --git a/src/client/northstar/dash-nodes/HistogramBinPrimitiveCollection.ts b/src/client/northstar/dash-nodes/HistogramBinPrimitiveCollection.ts index 43e768c62..cdae90c8b 100644 --- a/src/client/northstar/dash-nodes/HistogramBinPrimitiveCollection.ts +++ b/src/client/northstar/dash-nodes/HistogramBinPrimitiveCollection.ts @@ -48,28 +48,28 @@ export class HistogramBinPrimitiveCollection { // adjust brush rects (stacking or not) var allBrushIndex = ModelHelpers.AllBrushIndex(this.histoResult); - var filteredBinPrims = this.BinPrimitives.filter(b => b.BrushIndex != allBrushIndex && b.DataValue != 0.0); + var filteredBinPrims = this.BinPrimitives.filter(b => b.BrushIndex !== allBrushIndex && b.DataValue !== 0.0); filteredBinPrims.reduce((sum, fbp) => { - if (histoBox.ChartType == ChartType.VerticalBar) { - if (this.histoOp.Y.AggregateFunction == AggregateFunction.Count) { + if (histoBox.ChartType === ChartType.VerticalBar) { + if (this.histoOp.Y.AggregateFunction === AggregateFunction.Count) { fbp.Rect = new PIXIRectangle(fbp.Rect.x, fbp.Rect.y - sum, fbp.Rect.width, fbp.Rect.height); fbp.MarginRect = new PIXIRectangle(fbp.MarginRect.x, fbp.MarginRect.y - sum, fbp.MarginRect.width, fbp.MarginRect.height); return sum + fbp.Rect.height; } - if (this.histoOp.Y.AggregateFunction == AggregateFunction.Avg) { + if (this.histoOp.Y.AggregateFunction === AggregateFunction.Avg) { var w = fbp.Rect.width / 2.0; fbp.Rect = new PIXIRectangle(fbp.Rect.x + sum, fbp.Rect.y, fbp.Rect.width / filteredBinPrims.length, fbp.Rect.height); fbp.MarginRect = new PIXIRectangle(fbp.MarginRect.x - w + sum + (fbp.Rect.width / 2.0), fbp.MarginRect.y, fbp.MarginRect.width, fbp.MarginRect.height); return sum + fbp.Rect.width; } } - else if (histoBox.ChartType == ChartType.HorizontalBar) { - if (this.histoOp.X.AggregateFunction == AggregateFunction.Count) { + else if (histoBox.ChartType === ChartType.HorizontalBar) { + if (this.histoOp.X.AggregateFunction === AggregateFunction.Count) { fbp.Rect = new PIXIRectangle(fbp.Rect.x + sum, fbp.Rect.y, fbp.Rect.width, fbp.Rect.height); fbp.MarginRect = new PIXIRectangle(fbp.MarginRect.x + sum, fbp.MarginRect.y, fbp.MarginRect.width, fbp.MarginRect.height); return sum + fbp.Rect.width; } - if (this.histoOp.X.AggregateFunction == AggregateFunction.Avg) { + if (this.histoOp.X.AggregateFunction === AggregateFunction.Avg) { var h = fbp.Rect.height / 2.0; fbp.Rect = new PIXIRectangle(fbp.Rect.x, fbp.Rect.y + sum, fbp.Rect.width, fbp.Rect.height / filteredBinPrims.length); fbp.MarginRect = new PIXIRectangle(fbp.MarginRect.x, fbp.MarginRect.y - h + sum + (fbp.Rect.height / 2.0), fbp.MarginRect.width, fbp.MarginRect.height); @@ -79,19 +79,19 @@ export class HistogramBinPrimitiveCollection { return 0; }, 0); this.BinPrimitives = this.BinPrimitives.reverse(); - var f = this.BinPrimitives.filter(b => b.BrushIndex == allBrushIndex); + var f = this.BinPrimitives.filter(b => b.BrushIndex === allBrushIndex); this.HitGeom = f.length > 0 ? f[0].Rect : PIXIRectangle.EMPTY; } private setupBrushing(bin: Bin, normalization: number) { var overlapBrushIndex = ModelHelpers.OverlapBrushIndex(this.histoResult); var orderedBrushes = [this.histoResult.brushes![0], this.histoResult.brushes![overlapBrushIndex]]; - this.histoResult.brushes!.map(brush => brush.brushIndex != 0 && brush.brushIndex != overlapBrushIndex && orderedBrushes.push(brush)); + this.histoResult.brushes!.map(brush => brush.brushIndex !== 0 && brush.brushIndex !== overlapBrushIndex && orderedBrushes.push(brush)); return { orderedBrushes, maxAxis: orderedBrushes.reduce((prev, Brush) => { let aggResult = this.getBinValue(normalization, bin, Brush.brushIndex!); - return aggResult != undefined && aggResult > prev ? aggResult : prev; + return aggResult !== undefined && aggResult > prev ? aggResult : prev; }, Number.MIN_VALUE) }; } @@ -99,7 +99,7 @@ export class HistogramBinPrimitiveCollection { private createHeatmapBinPrimitives(bin: Bin, brush: Brush, brushFactorSum: number): number { let unNormalizedValue = this.getBinValue(2, bin, brush.brushIndex!); - if (unNormalizedValue == undefined) + if (unNormalizedValue === undefined) return brushFactorSum; var normalizedValue = (unNormalizedValue - this._histoBox.ValueRange[0]) / (Math.abs((this._histoBox.ValueRange[1] - this._histoBox.ValueRange[0])) < HistogramBinPrimitiveCollection.TOLERANCE ? @@ -112,7 +112,7 @@ export class HistogramBinPrimitiveCollection { let [yFrom, yTo] = this.sizeConverter.DataToScreenYAxisRange(this._histoBox.VisualBinRanges, 1, bin); var returnBrushFactorSum = brushFactorSum; - if (allUnNormalizedValue != undefined) { + if (allUnNormalizedValue !== undefined) { var brushFactor = (unNormalizedValue / allUnNormalizedValue); returnBrushFactorSum += brushFactor; returnBrushFactorSum = Math.min(returnBrushFactorSum, 1.0); @@ -141,11 +141,11 @@ export class HistogramBinPrimitiveCollection { private createSinglePointChartBinPrimitives(bin: Bin, brush: Brush): number { let unNormalizedValue = this.getBinValue(2, bin, brush.brushIndex!); - if (unNormalizedValue != undefined) { + if (unNormalizedValue !== undefined) { let [xFrom, xTo] = this.sizeConverter.DataToScreenPointRange(0, bin, ModelHelpers.CreateAggregateKey(this.histoOp.Schema!.distinctAttributeParameters, this.histoOp.X, this.histoResult, brush.brushIndex!)); let [yFrom, yTo] = this.sizeConverter.DataToScreenPointRange(1, bin, ModelHelpers.CreateAggregateKey(this.histoOp.Schema!.distinctAttributeParameters, this.histoOp.Y, this.histoResult, brush.brushIndex!)); - if (xFrom != undefined && yFrom != undefined && xTo != undefined && yTo != undefined) + if (xFrom !== undefined && yFrom !== undefined && xTo !== undefined && yTo !== undefined) this.createBinPrimitive(-1, brush, PIXIRectangle.EMPTY, 0, xFrom, xTo, yFrom, yTo, this.baseColorFromBrush(brush), 1, unNormalizedValue); } return 0; @@ -153,7 +153,7 @@ export class HistogramBinPrimitiveCollection { private createVerticalBarChartBinPrimitives(bin: Bin, brush: Brush, binBrushMaxAxis: number, normalization: number): number { let dataValue = this.getBinValue(1, bin, brush.brushIndex!); - if (dataValue != undefined) { + if (dataValue !== undefined) { let [yFrom, yValue, yTo] = this.sizeConverter.DataToScreenNormalizedRange(dataValue, normalization, 1, binBrushMaxAxis); let [xFrom, xTo] = this.sizeConverter.DataToScreenXAxisRange(this._histoBox.VisualBinRanges, 0, bin); @@ -163,14 +163,14 @@ export class HistogramBinPrimitiveCollection { this.sizeConverter.DataToScreenY(yValue - yMarginAbsolute) - this.sizeConverter.DataToScreenY(yValue + yMarginAbsolute)); this.createBinPrimitive(1, brush, marginRect, 0, xFrom, xTo, yFrom, yTo, - this.baseColorFromBrush(brush), normalization != 0 ? 1 : 0.6 * binBrushMaxAxis / this.sizeConverter.DataRanges[1] + 0.4, dataValue); + this.baseColorFromBrush(brush), normalization !== 0 ? 1 : 0.6 * binBrushMaxAxis / this.sizeConverter.DataRanges[1] + 0.4, dataValue); } return 0; } private createHorizontalBarChartBinPrimitives(bin: Bin, brush: Brush, binBrushMaxAxis: number, normalization: number): number { let dataValue = this.getBinValue(0, bin, brush.brushIndex!); - if (dataValue != undefined) { + if (dataValue !== undefined) { let [xFrom, xValue, xTo] = this.sizeConverter.DataToScreenNormalizedRange(dataValue, normalization, 0, binBrushMaxAxis); let [yFrom, yTo] = this.sizeConverter.DataToScreenYAxisRange(this._histoBox.VisualBinRanges, 1, bin); @@ -181,15 +181,15 @@ export class HistogramBinPrimitiveCollection { 2.0); this.createBinPrimitive(0, brush, marginRect, 0, xFrom, xTo, yFrom, yTo, - this.baseColorFromBrush(brush), normalization != 1 ? 1 : 0.6 * binBrushMaxAxis / this.sizeConverter.DataRanges[0] + 0.4, dataValue); + this.baseColorFromBrush(brush), normalization !== 1 ? 1 : 0.6 * binBrushMaxAxis / this.sizeConverter.DataRanges[0] + 0.4, dataValue); } return 0; } public getBinValue(axis: number, bin: Bin, brushIndex: number) { - var aggregateKey = ModelHelpers.CreateAggregateKey(this.histoOp.Schema!.distinctAttributeParameters, axis == 0 ? this.histoOp.X : axis == 1 ? this.histoOp.Y : this.histoOp.V, this.histoResult, brushIndex); + var aggregateKey = ModelHelpers.CreateAggregateKey(this.histoOp.Schema!.distinctAttributeParameters, axis === 0 ? this.histoOp.X : axis === 1 ? this.histoOp.Y : this.histoOp.V, this.histoResult, brushIndex); let dataValue = ModelHelpers.GetAggregateResult(bin, aggregateKey) as DoubleValueAggregateResult; - return dataValue != null && dataValue.hasResult ? dataValue.result : undefined; + return dataValue !== null && dataValue.hasResult ? dataValue.result : undefined; } private getMargin(bin: Bin, brush: Brush, axis: AttributeTransformationModel) { @@ -218,13 +218,13 @@ export class HistogramBinPrimitiveCollection { private baseColorFromBrush(brush: Brush): number { let bc = StyleConstants.BRUSH_COLORS; - if (brush.brushIndex == ModelHelpers.RestBrushIndex(this.histoResult)) { + if (brush.brushIndex === ModelHelpers.RestBrushIndex(this.histoResult)) { return StyleConstants.HIGHLIGHT_COLOR; } - else if (brush.brushIndex == ModelHelpers.OverlapBrushIndex(this.histoResult)) { + else if (brush.brushIndex === ModelHelpers.OverlapBrushIndex(this.histoResult)) { return StyleConstants.OVERLAP_COLOR; } - else if (brush.brushIndex == ModelHelpers.AllBrushIndex(this.histoResult)) { + else if (brush.brushIndex === ModelHelpers.AllBrushIndex(this.histoResult)) { return 0x00ff00; } else if (bc.length > 0) { diff --git a/src/client/northstar/dash-nodes/HistogramBox.tsx b/src/client/northstar/dash-nodes/HistogramBox.tsx index 5938bf9b1..c9658d741 100644 --- a/src/client/northstar/dash-nodes/HistogramBox.tsx +++ b/src/client/northstar/dash-nodes/HistogramBox.tsx @@ -55,7 +55,7 @@ export class HistogramBox extends React.Component { dropX = (e: Event, de: DragManager.DropEvent) => { if (de.data instanceof DragManager.DocumentDragData) { let h = de.data.draggedDocuments[0].GetT(KeyStore.Data, HistogramField); - if (h && h != FieldWaiting) { + if (h && h !== FieldWaiting) { this.HistoOp.X = h.Data.X; } e.stopPropagation(); @@ -66,7 +66,7 @@ export class HistogramBox extends React.Component { dropY = (e: Event, de: DragManager.DropEvent) => { if (de.data instanceof DragManager.DocumentDragData) { let h = de.data.draggedDocuments[0].GetT(KeyStore.Data, HistogramField); - if (h && h != FieldWaiting) { + if (h && h !== FieldWaiting) { this.HistoOp.Y = h.Data.X; } e.stopPropagation(); @@ -76,11 +76,11 @@ export class HistogramBox extends React.Component { @action xLabelPointerDown = (e: React.PointerEvent) => { - this.HistoOp.X = new AttributeTransformationModel(this.HistoOp.X.AttributeModel, this.HistoOp.X.AggregateFunction == AggregateFunction.None ? AggregateFunction.Count : AggregateFunction.None); + this.HistoOp.X = new AttributeTransformationModel(this.HistoOp.X.AttributeModel, this.HistoOp.X.AggregateFunction === AggregateFunction.None ? AggregateFunction.Count : AggregateFunction.None); } @action yLabelPointerDown = (e: React.PointerEvent) => { - this.HistoOp.Y = new AttributeTransformationModel(this.HistoOp.Y.AttributeModel, this.HistoOp.Y.AggregateFunction == AggregateFunction.None ? AggregateFunction.Count : AggregateFunction.None); + this.HistoOp.Y = new AttributeTransformationModel(this.HistoOp.Y.AttributeModel, this.HistoOp.Y.AggregateFunction === AggregateFunction.None ? AggregateFunction.Count : AggregateFunction.None); } componentDidMount() { @@ -119,7 +119,7 @@ export class HistogramBox extends React.Component { if (catalog) { this.props.Document.GetTAsync(this.props.fieldKey, HistogramField).then((histoOp: Opt) => runInAction(() => { this.HistoOp = histoOp ? histoOp.Data : HistogramOperation.Empty; - if (this.HistoOp != HistogramOperation.Empty) { + if (this.HistoOp !== HistogramOperation.Empty) { reaction(() => this.props.Document.GetList(KeyStore.LinkedFromDocs, []), (docs: Document[]) => this.HistoOp.Links.splice(0, this.HistoOp.Links.length, ...docs), { fireImmediately: true }); reaction(() => this.props.Document.GetList(KeyStore.BrushingDocs, []).length, () => { @@ -128,7 +128,7 @@ export class HistogramBox extends React.Component { this.HistoOp.BrushLinks.splice(0, this.HistoOp.BrushLinks.length, ...brushingDocs.map((brush, i) => { brush.SetNumber(KeyStore.BackgroundColor, StyleConstants.BRUSH_COLORS[i % StyleConstants.BRUSH_COLORS.length]); let brushed = brush.GetList(KeyStore.BrushingDocs, [] as Document[]); - return { l: brush, b: brushed[0].Id == proto.Id ? brushed[1] : brushed[0] } + return { l: brush, b: brushed[0].Id === proto.Id ? brushed[1] : brushed[0] } })); }, { fireImmediately: true }); reaction(() => this.createOperationParamsCache, () => this.HistoOp.Update(), { fireImmediately: true }); diff --git a/src/client/northstar/dash-nodes/HistogramBoxPrimitives.tsx b/src/client/northstar/dash-nodes/HistogramBoxPrimitives.tsx index e9adb3ce5..66d31846c 100644 --- a/src/client/northstar/dash-nodes/HistogramBoxPrimitives.tsx +++ b/src/client/northstar/dash-nodes/HistogramBoxPrimitives.tsx @@ -44,7 +44,7 @@ export class HistogramBoxPrimitives extends React.Component bp.BrushIndex == allBrushIndex); + let allBrushPrim = ArrayUtil.FirstOrDefault(binPrimitives, bp => bp.BrushIndex === allBrushIndex); return !allBrushPrim ? () => { } : () => runInAction(() => { if (ArrayUtil.Contains(this.histoOp.FilterModels, filterModel)) { this._selectedPrims.splice(this._selectedPrims.indexOf(allBrushPrim!), 1); @@ -63,9 +63,9 @@ export class HistogramBoxPrimitives extends React.Component { let r = this.props.HistoBox.SizeConverter.DataToScreenRange(binLabel.minValue!, binLabel.maxValue!, axis); - prims.push(this.drawLine(r.xFrom, r.yFrom, axis == 0 ? 0 : r.xTo - r.xFrom, axis == 0 ? r.yTo - r.yFrom : 0)); - if (i == labels.length - 1) - prims.push(this.drawLine(axis == 0 ? r.xTo : r.xFrom, axis == 0 ? r.yFrom : r.yTo, axis == 0 ? 0 : r.xTo - r.xFrom, axis == 0 ? r.yTo - r.yFrom : 0)); + prims.push(this.drawLine(r.xFrom, r.yFrom, axis === 0 ? 0 : r.xTo - r.xFrom, axis === 0 ? r.yTo - r.yFrom : 0)); + if (i === labels.length - 1) + prims.push(this.drawLine(axis === 0 ? r.xTo : r.xFrom, axis === 0 ? r.yFrom : r.yTo, axis === 0 ? 0 : r.xTo - r.xFrom, axis === 0 ? r.yTo - r.yFrom : 0)); return prims; }, [] as JSX.Element[]); } @@ -86,8 +86,8 @@ export class HistogramBoxPrimitives extends React.Component); return this.drawEntity(xFrom, yFrom, line); } @@ -102,10 +102,10 @@ export class HistogramBoxPrimitives extends React.Component { if (e.button == 0) tapHandler() }} + let rect = (
    { if (e.button === 0) tapHandler() }} style={{ - borderBottomStyle: barAxis == 1 ? "none" : "solid", - borderLeftStyle: barAxis == 0 ? "none" : "solid", + borderBottomStyle: barAxis === 1 ? "none" : "solid", + borderLeftStyle: barAxis === 0 ? "none" : "solid", width: `${widthPercent}%`, height: `${heightPercent}%`, background: color ? `${LABColor.RGBtoHexString(color)}` : "" diff --git a/src/client/northstar/dash-nodes/HistogramLabelPrimitives.tsx b/src/client/northstar/dash-nodes/HistogramLabelPrimitives.tsx index 93b237deb..dd62e9146 100644 --- a/src/client/northstar/dash-nodes/HistogramLabelPrimitives.tsx +++ b/src/client/northstar/dash-nodes/HistogramLabelPrimitives.tsx @@ -34,7 +34,7 @@ export class HistogramLabelPrimitives extends React.ComponentFontStyles.AxisLabel.fontSize + 5))); sc.MaxLabelSizes[axis].coords[axis] + 5); @@ -47,17 +47,17 @@ export class HistogramLabelPrimitives extends React.Component -
    +
    {label}
    diff --git a/src/client/northstar/manager/Gateway.ts b/src/client/northstar/manager/Gateway.ts index 3e72a50ae..ba6fe2ad5 100644 --- a/src/client/northstar/manager/Gateway.ts +++ b/src/client/northstar/manager/Gateway.ts @@ -49,7 +49,7 @@ export class Gateway { public async Compile(data: any): Promise { const json = await this.MakePostJsonRequest("compile", data); - if (json != null) { + if (json !== null) { const cr = CompileResults.fromJS(json); return cr; } @@ -108,7 +108,7 @@ export class Gateway { public async StartOperation(data: any): Promise { const json = await this.MakePostJsonRequest("operation", data); - if (json != null) { + if (json !== null) { const or = OperationReference.fromJS(json); return or; } @@ -116,7 +116,7 @@ export class Gateway { public async GetResult(data: any): Promise { const json = await this.MakePostJsonRequest("result", data); - if (json != null) { + if (json !== null) { const res = Result.fromJS(json); return res; } @@ -163,7 +163,7 @@ export class Gateway { public static ConstructUrl(appendix: string): string { let base = Settings.Instance.ServerUrl; - if (base.slice(-1) == "/") { + if (base.slice(-1) === "/") { base = base.slice(0, -1); } let url = base + "/" + Settings.Instance.ServerApiPath + "/" + appendix; diff --git a/src/client/northstar/model/ModelExtensions.ts b/src/client/northstar/model/ModelExtensions.ts index 9fcba7f1c..e4bf77ed8 100644 --- a/src/client/northstar/model/ModelExtensions.ts +++ b/src/client/northstar/model/ModelExtensions.ts @@ -3,23 +3,23 @@ import { Utils } from '../utils/Utils' import { FilterModel } from '../core/filter/FilterModel' -(SingleDimensionAggregateParameters as any).prototype["Equals"] = function (other: Object) { +(SingleDimensionAggregateParameters as any).prototype.Equals = function (other: Object) { if (!Utils.EqualityHelper(this, other)) return false; if (!Utils.EqualityHelper((this as SingleDimensionAggregateParameters).attributeParameters!, (other as SingleDimensionAggregateParameters).attributeParameters!)) return false; - if (!((this as SingleDimensionAggregateParameters).attributeParameters! as any)["Equals"]((other as SingleDimensionAggregateParameters).attributeParameters)) return false; + if (!((this as SingleDimensionAggregateParameters).attributeParameters! as any).Equals((other as SingleDimensionAggregateParameters).attributeParameters)) return false; return true; } { - (AttributeParameters as any).prototype["Equals"] = function (other: AttributeParameters) { + (AttributeParameters as any).prototype.Equals = function (other: AttributeParameters) { return (this).constructor.name === (other).constructor.name && this.rawName === other.rawName; } } { - (Solution as any).prototype["Equals"] = function (other: Object) { + (Solution as any).prototype.Equals = function (other: Object) { if (!Utils.EqualityHelper(this, other)) return false; if ((this as Solution).solutionId !== (other as Solution).solutionId) return false; return true; @@ -27,11 +27,11 @@ import { FilterModel } from '../core/filter/FilterModel' } { - (MarginAggregateParameters as any).prototype["Equals"] = function (other: Object) { + (MarginAggregateParameters as any).prototype.Equals = function (other: Object) { if (!Utils.EqualityHelper(this, other)) return false; if (!Utils.EqualityHelper((this as SingleDimensionAggregateParameters).attributeParameters!, (other as SingleDimensionAggregateParameters).attributeParameters!)) return false; - if (!((this as SingleDimensionAggregateParameters).attributeParameters! as any)["Equals"]((other as SingleDimensionAggregateParameters).attributeParameters!)) return false; + if (!((this as SingleDimensionAggregateParameters).attributeParameters! as any).Equals((other as SingleDimensionAggregateParameters).attributeParameters!)) return false; if ((this as MarginAggregateParameters).aggregateFunction !== (other as MarginAggregateParameters).aggregateFunction) return false; return true; @@ -39,7 +39,7 @@ import { FilterModel } from '../core/filter/FilterModel' } { - (Brush as any).prototype["Equals"] = function (other: Object) { + (Brush as any).prototype.Equals = function (other: Object) { if (!Utils.EqualityHelper(this, other)) return false; if ((this as Brush).brushEnum !== (other as Brush).brushEnum) return false; if ((this as Brush).brushIndex !== (other as Brush).brushIndex) return false; diff --git a/src/client/northstar/model/ModelHelpers.ts b/src/client/northstar/model/ModelHelpers.ts index d0711fb69..1a58e6180 100644 --- a/src/client/northstar/model/ModelHelpers.ts +++ b/src/client/northstar/model/ModelHelpers.ts @@ -16,7 +16,7 @@ export class ModelHelpers { public static CreateAggregateKey(distinctAttributeParameters: AttributeParameters | undefined, atm: AttributeTransformationModel, histogramResult: HistogramResult, brushIndex: number, aggParameters?: SingleDimensionAggregateParameters): AggregateKey { { - if (aggParameters == undefined) { + if (aggParameters === undefined) { aggParameters = ModelHelpers.GetAggregateParameter(distinctAttributeParameters, atm); } else { @@ -146,7 +146,7 @@ export class ModelHelpers { } public static GetAggregateResult(bin: Bin, aggregateKey: AggregateKey) { - if (aggregateKey.aggregateParameterIndex == -1 || aggregateKey.brushIndex == -1) { + if (aggregateKey.aggregateParameterIndex === -1 || aggregateKey.brushIndex === -1) { return null; } return bin.aggregateResults![aggregateKey.aggregateParameterIndex! * bin.ySize! + aggregateKey.brushIndex!]; @@ -157,9 +157,9 @@ export class ModelHelpers { var ret = new Array(); ret.push(AggregateFunction.None); ret.push(AggregateFunction.Count); - if (atm.AttributeModel.DataType == DataType.Float || - atm.AttributeModel.DataType == DataType.Double || - atm.AttributeModel.DataType == DataType.Int) { + if (atm.AttributeModel.DataType === DataType.Float || + atm.AttributeModel.DataType === DataType.Double || + atm.AttributeModel.DataType === DataType.Int) { ret.push(AggregateFunction.Avg); ret.push(AggregateFunction.Sum); } diff --git a/src/client/northstar/model/binRanges/DateTimeVisualBinRange.ts b/src/client/northstar/model/binRanges/DateTimeVisualBinRange.ts index 9313fb1a7..f5872aa4c 100644 --- a/src/client/northstar/model/binRanges/DateTimeVisualBinRange.ts +++ b/src/client/northstar/model/binRanges/DateTimeVisualBinRange.ts @@ -39,24 +39,24 @@ export class DateTimeVisualBinRange extends VisualBinRange { public GetLabel(value: number): string { var dt = DateTimeVisualBinRange.TicksToDate(value); - if (this.DataBinRange.step!.dateTimeStepGranularity == DateTimeStepGranularity.Second || - this.DataBinRange.step!.dateTimeStepGranularity == DateTimeStepGranularity.Minute) { + if (this.DataBinRange.step!.dateTimeStepGranularity === DateTimeStepGranularity.Second || + this.DataBinRange.step!.dateTimeStepGranularity === DateTimeStepGranularity.Minute) { return ("" + this.pad(dt.getMinutes(), 2) + ":" + this.pad(dt.getSeconds(), 2)); //return dt.ToString("mm:ss"); } - else if (this.DataBinRange.step!.dateTimeStepGranularity == DateTimeStepGranularity.Hour) { + else if (this.DataBinRange.step!.dateTimeStepGranularity === DateTimeStepGranularity.Hour) { return (this.pad(dt.getHours(), 2) + ":" + this.pad(dt.getMinutes(), 2)); //return dt.ToString("HH:mm"); } - else if (this.DataBinRange.step!.dateTimeStepGranularity == DateTimeStepGranularity.Day) { + else if (this.DataBinRange.step!.dateTimeStepGranularity === DateTimeStepGranularity.Day) { return ((dt.getMonth() + 1) + "/" + dt.getDate() + "/" + dt.getFullYear()); //return dt.ToString("MM/dd/yyyy"); } - else if (this.DataBinRange.step!.dateTimeStepGranularity == DateTimeStepGranularity.Month) { + else if (this.DataBinRange.step!.dateTimeStepGranularity === DateTimeStepGranularity.Month) { //return dt.ToString("MM/yyyy"); return ((dt.getMonth() + 1) + "/" + dt.getFullYear()); } - else if (this.DataBinRange.step!.dateTimeStepGranularity == DateTimeStepGranularity.Year) { + else if (this.DataBinRange.step!.dateTimeStepGranularity === DateTimeStepGranularity.Year) { return "" + dt.getFullYear(); } return "n/a"; @@ -82,22 +82,22 @@ export class DateTimeVisualBinRange extends VisualBinRange { public static AddToDateTimeTicks(ticks: number, dateTimeStep: DateTimeStep): number { var copiedDate = DateTimeVisualBinRange.TicksToDate(ticks); var returnDate: Date = new Date(Date.now()); - if (dateTimeStep.dateTimeStepGranularity == DateTimeStepGranularity.Second) { + if (dateTimeStep.dateTimeStepGranularity === DateTimeStepGranularity.Second) { returnDate = new Date(copiedDate.setSeconds(copiedDate.getSeconds() + dateTimeStep.dateTimeStepValue!)); } - else if (dateTimeStep.dateTimeStepGranularity == DateTimeStepGranularity.Minute) { + else if (dateTimeStep.dateTimeStepGranularity === DateTimeStepGranularity.Minute) { returnDate = new Date(copiedDate.setMinutes(copiedDate.getMinutes() + dateTimeStep.dateTimeStepValue!)); } - else if (dateTimeStep.dateTimeStepGranularity == DateTimeStepGranularity.Hour) { + else if (dateTimeStep.dateTimeStepGranularity === DateTimeStepGranularity.Hour) { returnDate = new Date(copiedDate.setHours(copiedDate.getHours() + dateTimeStep.dateTimeStepValue!)); } - else if (dateTimeStep.dateTimeStepGranularity == DateTimeStepGranularity.Day) { + else if (dateTimeStep.dateTimeStepGranularity === DateTimeStepGranularity.Day) { returnDate = new Date(copiedDate.setDate(copiedDate.getDate() + dateTimeStep.dateTimeStepValue!)); } - else if (dateTimeStep.dateTimeStepGranularity == DateTimeStepGranularity.Month) { + else if (dateTimeStep.dateTimeStepGranularity === DateTimeStepGranularity.Month) { returnDate = new Date(copiedDate.setMonth(copiedDate.getMonth() + dateTimeStep.dateTimeStepValue!)); } - else if (dateTimeStep.dateTimeStepGranularity == DateTimeStepGranularity.Year) { + else if (dateTimeStep.dateTimeStepGranularity === DateTimeStepGranularity.Year) { returnDate = new Date(copiedDate.setFullYear(copiedDate.getFullYear() + dateTimeStep.dateTimeStepValue!)); } return DateTimeVisualBinRange.DateToTicks(returnDate); diff --git a/src/client/northstar/model/binRanges/VisualBinRange.ts b/src/client/northstar/model/binRanges/VisualBinRange.ts index f53008f9a..a0766e494 100644 --- a/src/client/northstar/model/binRanges/VisualBinRange.ts +++ b/src/client/northstar/model/binRanges/VisualBinRange.ts @@ -2,10 +2,6 @@ import { BinLabel } from '../../model/idea/idea' export abstract class VisualBinRange { - constructor() { - - } - public abstract AddStep(value: number): number; public abstract GetValueFromIndex(index: number): number; diff --git a/src/client/northstar/model/binRanges/VisualBinRangeHelper.ts b/src/client/northstar/model/binRanges/VisualBinRangeHelper.ts index 53d585bb4..63ee61909 100644 --- a/src/client/northstar/model/binRanges/VisualBinRangeHelper.ts +++ b/src/client/northstar/model/binRanges/VisualBinRangeHelper.ts @@ -39,8 +39,7 @@ export class VisualBinRangeHelper { var aggregateKey = ModelHelpers.CreateAggregateKey(distinctAttributeParameters, attr, histoResult, ModelHelpers.AllBrushIndex(histoResult)); var minValue = Number.MAX_VALUE; var maxValue = Number.MIN_VALUE; - for (var b = 0; b < histoResult.brushes!.length; b++) { - var brush = histoResult.brushes![b]; + for (const brush of histoResult.brushes!) { aggregateKey.brushIndex = brush.brushIndex; for (var key in histoResult.bins) { if (histoResult.bins.hasOwnProperty(key)) { @@ -56,12 +55,12 @@ export class VisualBinRangeHelper { let visualBinRange = QuantitativeVisualBinRange.Initialize(minValue, maxValue, 10, false); - if (chartType == ChartType.HorizontalBar || chartType == ChartType.VerticalBar) { + if (chartType === ChartType.HorizontalBar || chartType === ChartType.VerticalBar) { visualBinRange = QuantitativeVisualBinRange.Initialize(Math.min(0, minValue), Math.max(0, (visualBinRange as QuantitativeVisualBinRange).DataBinRange.maxValue!), SETTINGS_X_BINS, false); } - else if (chartType == ChartType.SinglePoint) { + else if (chartType === ChartType.SinglePoint) { visualBinRange = QuantitativeVisualBinRange.Initialize(Math.min(0, minValue), Math.max(0, maxValue), SETTINGS_X_BINS, false); } diff --git a/src/client/northstar/model/idea/MetricTypeMapping.ts b/src/client/northstar/model/idea/MetricTypeMapping.ts index 11e0c871a..e9759cf16 100644 --- a/src/client/northstar/model/idea/MetricTypeMapping.ts +++ b/src/client/northstar/model/idea/MetricTypeMapping.ts @@ -5,20 +5,20 @@ import { Dictionary } from 'typescript-collections'; export class MetricTypeMapping { public static GetMetricInterpretation(metricType: MetricType): MetricInterpretation { - if (metricType == MetricType.Accuracy || - metricType == MetricType.F1 || - metricType == MetricType.F1Macro || - metricType == MetricType.F1Micro || - metricType == MetricType.JaccardSimilarityScore || - metricType == MetricType.ObjectDetectionAveragePrecision || - metricType == MetricType.Precision || - metricType == MetricType.PrecisionAtTopK || - metricType == MetricType.NormalizedMutualInformation || - metricType == MetricType.Recall || - metricType == MetricType.RocAucMacro || - metricType == MetricType.RocAuc || - metricType == MetricType.RocAucMicro || - metricType == MetricType.RSquared) { + if (metricType === MetricType.Accuracy || + metricType === MetricType.F1 || + metricType === MetricType.F1Macro || + metricType === MetricType.F1Micro || + metricType === MetricType.JaccardSimilarityScore || + metricType === MetricType.ObjectDetectionAveragePrecision || + metricType === MetricType.Precision || + metricType === MetricType.PrecisionAtTopK || + metricType === MetricType.NormalizedMutualInformation || + metricType === MetricType.Recall || + metricType === MetricType.RocAucMacro || + metricType === MetricType.RocAuc || + metricType === MetricType.RocAucMicro || + metricType === MetricType.RSquared) { return MetricInterpretation.HigherIsBetter; } return MetricInterpretation.LowerIsBetter; diff --git a/src/client/northstar/operations/BaseOperation.ts b/src/client/northstar/operations/BaseOperation.ts index f545b2c58..a14337763 100644 --- a/src/client/northstar/operations/BaseOperation.ts +++ b/src/client/northstar/operations/BaseOperation.ts @@ -29,11 +29,11 @@ export abstract class BaseOperation { // let filterModels: FilterModel[] = []; // return FilterModel.GetFilterModelsRecursive(this, new Set>(), filterModels, true) // if (this.OverridingFilters.length > 0) { - // return "(" + this.OverridingFilters.filter(fm => fm != null).map(fm => fm.ToPythonString()).join(" || ") + ")"; + // return "(" + this.OverridingFilters.filter(fm => fm !== null).map(fm => fm.ToPythonString()).join(" || ") + ")"; // } // let rdg = MainManager.Instance.MainViewModel.FilterReverseDependencyGraph; // let sliceModel = this.TypedViewModel.IncomingSliceModel; - // if (sliceModel != null && sliceModel.Source != null && instanceOfIBaseFilterProvider(sliceModel.Source) && rdg.has(sliceModel.Source)) { + // if (sliceModel !== null && sliceModel.Source !== null && instanceOfIBaseFilterProvider(sliceModel.Source) && rdg.has(sliceModel.Source)) { // let filterModels = sliceModel.Source.FilterModels.map(f => f); // return FilterModel.GetFilterModelsRecursive(rdg.get(sliceModel.Source), new Set>(), filterModels, false); // } @@ -99,8 +99,8 @@ export abstract class BaseOperation { if (result instanceof ErrorResult) { throw new Error((result as ErrorResult).message); } - if (this.RequestSalt == pollPromise.RequestSalt) { - if (result && (!this.Result || this.Result.progress != result.progress)) { + if (this.RequestSalt === pollPromise.RequestSalt) { + if (result && (!this.Result || this.Result.progress !== result.progress)) { /*if (operationViewModel.Result !== null && operationViewModel.Result !== undefined) { let t1 = performance.now(); console.log((t1 - start) + " milliseconds."); diff --git a/src/client/northstar/operations/HistogramOperation.ts b/src/client/northstar/operations/HistogramOperation.ts index e63de1632..7f48d1629 100644 --- a/src/client/northstar/operations/HistogramOperation.ts +++ b/src/client/northstar/operations/HistogramOperation.ts @@ -67,7 +67,7 @@ export class HistogramOperation extends BaseOperation implements IBaseFilterCons let brushes: string[] = []; this.BrushLinks.map(brushLink => { let brushHistogram = brushLink.b.GetT(KeyStore.Data, HistogramField); - if (brushHistogram && brushHistogram != FieldWaiting) { + if (brushHistogram && brushHistogram !== FieldWaiting) { let filterModels: FilterModel[] = []; brushes.push(FilterModel.GetFilterModelsRecursive(brushHistogram.Data, new Set(), filterModels, false)); } diff --git a/src/client/northstar/utils/ArrayUtil.ts b/src/client/northstar/utils/ArrayUtil.ts index f35c98317..a52ca6d96 100644 --- a/src/client/northstar/utils/ArrayUtil.ts +++ b/src/client/northstar/utils/ArrayUtil.ts @@ -7,14 +7,14 @@ export class ArrayUtil { return false; } let isComplex = typeof arr1[0] === "object"; - for (let i = 0; i < arr1.length; i++) { - if (isComplex && "Equals" in arr1[i]) { - if (arr1[i].Equals(arr2)) { + for (const ele of arr1) { + if (isComplex && "Equals" in ele) { + if (ele.Equals(arr2)) { return true; } } else { - if (arr1[i] === arr2) { + if (ele === arr2) { return true; } } @@ -63,9 +63,9 @@ export class ArrayUtil { public static Distinct(arr: any[]): any[] { let ret = []; - for (let i = 0; i < arr.length; i++) { - if (!ArrayUtil.Contains(ret, arr[i])) { - ret.push(arr[i]); + for (const ele of arr) { + if (!ArrayUtil.Contains(ret, ele)) { + ret.push(ele); } } return ret; diff --git a/src/client/northstar/utils/GeometryUtil.ts b/src/client/northstar/utils/GeometryUtil.ts index d5f3ba631..6d8acea20 100644 --- a/src/client/northstar/utils/GeometryUtil.ts +++ b/src/client/northstar/utils/GeometryUtil.ts @@ -85,7 +85,7 @@ export class GeometryUtil { // var xi = vs[i].x, yi = vs[i].y; // var xj = vs[j].x, yj = vs[j].y; - // var intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + // var intersect = ((yi > y) !== (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); // if (intersect) // inside = !inside; // } diff --git a/src/client/northstar/utils/MathUtil.ts b/src/client/northstar/utils/MathUtil.ts index bb7e73871..7aa255096 100644 --- a/src/client/northstar/utils/MathUtil.ts +++ b/src/client/northstar/utils/MathUtil.ts @@ -93,7 +93,7 @@ export class MathUtil { public static DistToLineSegment(v: PIXIPoint, w: PIXIPoint, p: PIXIPoint) { // Return minimum distance between line segment vw and point p var l2 = MathUtil.DistSquared(v, w); // i.e. |w-v|^2 - avoid a sqrt - if (l2 == 0.0) return MathUtil.Dist(p, v); // v == w case + if (l2 === 0.0) return MathUtil.Dist(p, v); // v === w case // Consider the line extending the segment, parameterized as v + t (w - v). // We find projection of point p onto the line. // It falls where t = [(p-v) . (w-v)] / |w-v|^2 @@ -117,7 +117,7 @@ export class MathUtil { var b2 = ps2.x - pe2.x; var delta = a1 * b2 - a2 * b1; - if (delta == 0) { + if (delta === 0) { return undefined; } var c2 = a2 * ps2.x + b2 * ps2.y; @@ -147,19 +147,19 @@ export class MathUtil { var ret = new Array(); var dist = this.Dist(lineFrom, lineTo) var inter = this.LineSegmentIntersection(lineFrom, lineTo, r1, r2); - if (inter != null && this.PointInPIXIRectangle(inter, rect) && + if (inter && this.PointInPIXIRectangle(inter, rect) && this.Dist(inter, lineFrom) < dist && this.Dist(inter, lineTo) < dist) ret.push(inter); inter = this.LineSegmentIntersection(lineFrom, lineTo, r2, r3); - if (inter != null && this.PointInPIXIRectangle(inter, rect) && + if (inter && this.PointInPIXIRectangle(inter, rect) && this.Dist(inter, lineFrom) < dist && this.Dist(inter, lineTo) < dist) ret.push(inter); inter = this.LineSegmentIntersection(lineFrom, lineTo, r3, r4); - if (inter != null && this.PointInPIXIRectangle(inter, rect) && + if (inter && this.PointInPIXIRectangle(inter, rect) && this.Dist(inter, lineFrom) < dist && this.Dist(inter, lineTo) < dist) ret.push(inter); inter = this.LineSegmentIntersection(lineFrom, lineTo, r4, r1); - if (inter != null && this.PointInPIXIRectangle(inter, rect) && + if (inter && this.PointInPIXIRectangle(inter, rect) && this.Dist(inter, lineFrom) < dist && this.Dist(inter, lineTo) < dist) ret.push(inter); return ret; diff --git a/src/client/northstar/utils/SizeConverter.ts b/src/client/northstar/utils/SizeConverter.ts index bb91ed4a7..b5c4a16ab 100644 --- a/src/client/northstar/utils/SizeConverter.ts +++ b/src/client/northstar/utils/SizeConverter.ts @@ -54,7 +54,7 @@ export class SizeConverter { } public DataToScreenNormalizedRange(dataValue: number, normalization: number, axis: number, binBrushMaxAxis: number) { - var value = normalization != 1 - axis || binBrushMaxAxis == 0 ? dataValue : (dataValue - 0) / (binBrushMaxAxis - 0) * this.DataRanges[axis]; + var value = normalization !== 1 - axis || binBrushMaxAxis === 0 ? dataValue : (dataValue - 0) / (binBrushMaxAxis - 0) * this.DataRanges[axis]; var from = this.DataToScreenCoord(Math.min(0, value), axis); var to = this.DataToScreenCoord(Math.max(0, value), axis); return [from, value, to]; @@ -85,7 +85,7 @@ export class SizeConverter { return flip ? (this.RenderDimension) - retY : retY; } public DataToScreenCoord(v: number, axis: number) { - if (axis == 0) + if (axis === 0) return this.DataToScreenX(v); return this.DataToScreenY(v); } diff --git a/src/client/northstar/utils/Utils.ts b/src/client/northstar/utils/Utils.ts index b35dce820..c96b4cbd9 100644 --- a/src/client/northstar/utils/Utils.ts +++ b/src/client/northstar/utils/Utils.ts @@ -27,17 +27,17 @@ export class Utils { public static isBaseBrushable(obj: Object): obj is IBaseBrushable { let typed = >obj; - return typed != null && typed.BrusherModels !== undefined; + return typed !== null && typed.BrusherModels !== undefined; } public static isBaseFilterProvider(obj: Object): obj is IBaseFilterProvider { let typed = obj; - return typed != null && typed.FilterModels !== undefined; + return typed !== null && typed.FilterModels !== undefined; } public static isBaseFilterConsumer(obj: Object): obj is IBaseFilterConsumer { let typed = obj; - return typed != null && typed.FilterOperand !== undefined; + return typed !== null && typed.FilterOperand !== undefined; } public static EncodeQueryData(data: any): string { @@ -63,9 +63,9 @@ export class Utils { public static GetQueryVariable(variable: string) { let query = window.location.search.substring(1); let vars = query.split("&"); - for (let i = 0; i < vars.length; i++) { - let pair = vars[i].split("="); - if (decodeURIComponent(pair[0]) == variable) { + for (const variable of vars) { + let pair = variable.split("="); + if (decodeURIComponent(pair[0]) === variable) { return decodeURIComponent(pair[1]); } } diff --git a/src/client/views/DocumentDecorations.tsx b/src/client/views/DocumentDecorations.tsx index 11bf24505..1bb00a3fc 100644 --- a/src/client/views/DocumentDecorations.tsx +++ b/src/client/views/DocumentDecorations.tsx @@ -60,10 +60,10 @@ export class DocumentDecorations extends React.Component<{}, { value: string }> if (text[0] === '#') { let command = text.slice(1, text.length); this._fieldKey = new Key(command) - // if (command == "Title" || command == "title") { + // if (command === "Title" || command === "title") { // this._fieldKey = KeyStore.Title; // } - // else if (command == "Width" || command == "width") { + // else if (command === "Width" || command === "width") { // this._fieldKey = KeyStore.Width; // } this._title = "changed" diff --git a/src/client/views/Main.tsx b/src/client/views/Main.tsx index 33759d38a..74f868c11 100644 --- a/src/client/views/Main.tsx +++ b/src/client/views/Main.tsx @@ -62,7 +62,7 @@ export class Main extends React.Component { @computed private get mainContainer(): Document | undefined { let doc = this.userDocument.GetT(KeyStore.ActiveWorkspace, Document); - return doc == FieldWaiting ? undefined : doc; + return doc === FieldWaiting ? undefined : doc; } private set mainContainer(doc: Document | undefined) { @@ -84,7 +84,7 @@ export class Main extends React.Component { configure({ enforceActions: "observed" }); if (window.location.pathname !== RouteStore.home) { let pathname = window.location.pathname.split("/"); - if (pathname.length > 1 && pathname[pathname.length - 2] == 'doc') { + if (pathname.length > 1 && pathname[pathname.length - 2] === 'doc') { CurrentUserUtils.MainDocId = pathname[pathname.length - 1]; } }; diff --git a/src/client/views/collections/CollectionBaseView.tsx b/src/client/views/collections/CollectionBaseView.tsx index ee752a2ca..7a5ab6e3c 100644 --- a/src/client/views/collections/CollectionBaseView.tsx +++ b/src/client/views/collections/CollectionBaseView.tsx @@ -65,13 +65,13 @@ export class CollectionBaseView extends React.Component { createsCycle(documentToAdd: Document, containerDocument: Document): boolean { let data = documentToAdd.GetList(KeyStore.Data, []); - for (let i = 0; i < data.length; i++) { - if (this.createsCycle(data[i], containerDocument)) + for (const doc of data) { + if (this.createsCycle(doc, containerDocument)) return true; } let annots = documentToAdd.GetList(KeyStore.Annotations, []); - for (let i = 0; i < annots.length; i++) { - if (this.createsCycle(annots[i], containerDocument)) + for (const annot of annots) { + if (this.createsCycle(annot, containerDocument)) return true; } for (let containerProto: FieldValue = containerDocument; containerProto && containerProto !== FieldWaiting; containerProto = containerProto.GetPrototype()) { diff --git a/src/client/views/collections/CollectionDockingView.tsx b/src/client/views/collections/CollectionDockingView.tsx index 1b0ad0bee..2380709d2 100644 --- a/src/client/views/collections/CollectionDockingView.tsx +++ b/src/client/views/collections/CollectionDockingView.tsx @@ -101,12 +101,12 @@ export class CollectionDockingView extends React.Component this.props.Document.GetText(KeyStore.Data, ""), () => { - if (!this._goldenLayout || this._ignoreStateChange != JSON.stringify(this._goldenLayout.toConfig())) { + if (!this._goldenLayout || this._ignoreStateChange !== JSON.stringify(this._goldenLayout.toConfig())) { setTimeout(() => this.setupGoldenLayout(), 1); } this._ignoreStateChange = ""; @@ -193,7 +193,7 @@ export class CollectionDockingView extends React.Component { var className = (e.target as any).className; - if ((className == "lm_title" || className == "lm_tab lm_active") && (e.ctrlKey || e.altKey)) { + if ((className === "lm_title" || className === "lm_tab lm_active") && (e.ctrlKey || e.altKey)) { e.stopPropagation(); e.preventDefault(); let docid = (e.target as any).DashDocId; @@ -209,7 +209,7 @@ export class CollectionDockingView extends React.Component { - if (tab.hasOwnProperty("contentItem") && tab.contentItem.config.type != "stack") { - if (tab.titleElement[0].textContent.indexOf("-waiting") != -1) { + if (tab.hasOwnProperty("contentItem") && tab.contentItem.config.type !== "stack") { + if (tab.titleElement[0].textContent.indexOf("-waiting") !== -1) { Server.GetField(tab.contentItem.config.props.documentId, action((f: Opt) => { - if (f != undefined && f instanceof Document) { + if (f !== undefined && f instanceof Document) { f.GetTAsync(KeyStore.Title, TextField, (tfield) => { - if (tfield != undefined) { + if (tfield !== undefined) { tab.titleElement[0].textContent = f.Title; } }) @@ -296,9 +296,9 @@ export class DockedFrameRenderer extends React.Component { Server.GetField(this.props.documentId, action((f: Opt) => this._document = f as Document)); } - private _nativeWidth = () => { return this._document!.GetNumber(KeyStore.NativeWidth, this._panelWidth); } - private _nativeHeight = () => { return this._document!.GetNumber(KeyStore.NativeHeight, this._panelHeight); } - private _contentScaling = () => { return this._panelWidth / (this._nativeWidth() ? this._nativeWidth() : this._panelWidth); } + private _nativeWidth = () => this._document!.GetNumber(KeyStore.NativeWidth, this._panelWidth) + private _nativeHeight = () => this._document!.GetNumber(KeyStore.NativeHeight, this._panelHeight) + private _contentScaling = () => this._panelWidth / (this._nativeWidth() ? this._nativeWidth() : this._panelWidth) ScreenToLocalTransform = () => { let { scale, translateX, translateY } = Utils.GetScreenTransform(this._mainCont.current!); diff --git a/src/client/views/collections/CollectionPDFView.tsx b/src/client/views/collections/CollectionPDFView.tsx index 14ed70b8c..1f2e71f6e 100644 --- a/src/client/views/collections/CollectionPDFView.tsx +++ b/src/client/views/collections/CollectionPDFView.tsx @@ -33,7 +33,7 @@ export class CollectionPDFView extends React.Component { } onContextMenu = (e: React.MouseEvent): void => { - if (!e.isPropagationStopped() && this.props.Document.Id != "mainDoc") { // need to test this because GoldenLayout causes a parallel hierarchy in the React DOM for its children and the main document view7 + if (!e.isPropagationStopped() && this.props.Document.Id !== "mainDoc") { // need to test this because GoldenLayout causes a parallel hierarchy in the React DOM for its children and the main document view7 ContextMenu.Instance.addItem({ description: "PDFOptions", event: () => { } }); } } diff --git a/src/client/views/collections/CollectionSchemaView.tsx b/src/client/views/collections/CollectionSchemaView.tsx index 9dade94f1..3817d5333 100644 --- a/src/client/views/collections/CollectionSchemaView.tsx +++ b/src/client/views/collections/CollectionSchemaView.tsx @@ -151,7 +151,7 @@ export class CollectionSchemaView extends CollectionViewBase { }), style: { background: rowInfo.index === this._selectedIndex ? "lightGray" : "white", - //color: rowInfo.index == this._selectedIndex ? "white" : "black" + //color: rowInfo.index === this._selectedIndex ? "white" : "black" } }; } diff --git a/src/client/views/collections/CollectionVideoView.tsx b/src/client/views/collections/CollectionVideoView.tsx index 3ab6db5ef..afadfeefb 100644 --- a/src/client/views/collections/CollectionVideoView.tsx +++ b/src/client/views/collections/CollectionVideoView.tsx @@ -61,7 +61,7 @@ export class CollectionVideoView extends React.Component { @action updateTimecode = () => { if (this._player) { - if ((this._player as any).AHackBecauseSomethingResetsTheVideoToZero != -1) { + if ((this._player as any).AHackBecauseSomethingResetsTheVideoToZero !== -1) { this._player.currentTime = (this._player as any).AHackBecauseSomethingResetsTheVideoToZero; (this._player as any).AHackBecauseSomethingResetsTheVideoToZero = -1; } else { @@ -103,7 +103,7 @@ export class CollectionVideoView extends React.Component { } onContextMenu = (e: React.MouseEvent): void => { - if (!e.isPropagationStopped() && this.props.Document.Id != "mainDoc") { // need to test this because GoldenLayout causes a parallel hierarchy in the React DOM for its children and the main document view7 + if (!e.isPropagationStopped() && this.props.Document.Id !== "mainDoc") { // need to test this because GoldenLayout causes a parallel hierarchy in the React DOM for its children and the main document view7 ContextMenu.Instance.addItem({ description: "VideoOptions", event: () => { } }); } } diff --git a/src/client/views/collections/CollectionView.tsx b/src/client/views/collections/CollectionView.tsx index 5b4caf58d..1b0cfd57b 100644 --- a/src/client/views/collections/CollectionView.tsx +++ b/src/client/views/collections/CollectionView.tsx @@ -28,7 +28,7 @@ export class CollectionView extends React.Component { } onContextMenu = (e: React.MouseEvent): void => { - if (!e.isPropagationStopped() && this.props.Document.Id != CurrentUserUtils.MainDocId) { // need to test this because GoldenLayout causes a parallel hierarchy in the React DOM for its children and the main document view7 + if (!e.isPropagationStopped() && this.props.Document.Id !== CurrentUserUtils.MainDocId) { // need to test this because GoldenLayout causes a parallel hierarchy in the React DOM for its children and the main document view7 ContextMenu.Instance.addItem({ description: "Freeform", event: () => this.props.Document.SetNumber(KeyStore.ViewType, CollectionViewType.Freeform) }) ContextMenu.Instance.addItem({ description: "Schema", event: () => this.props.Document.SetNumber(KeyStore.ViewType, CollectionViewType.Schema) }) ContextMenu.Instance.addItem({ description: "Treeview", event: () => this.props.Document.SetNumber(KeyStore.ViewType, CollectionViewType.Tree) }) diff --git a/src/client/views/collections/CollectionViewBase.tsx b/src/client/views/collections/CollectionViewBase.tsx index b4784ae9c..3af3c5d63 100644 --- a/src/client/views/collections/CollectionViewBase.tsx +++ b/src/client/views/collections/CollectionViewBase.tsx @@ -91,11 +91,11 @@ export class CollectionViewBase extends React.Component let sourceDoc: Document = de.data.linkSourceDocumentView.props.Document; if (sourceDoc) runInAction(() => { let srcTarg = sourceDoc.GetT(KeyStore.Prototype, Document) - if (srcTarg && srcTarg != FieldWaiting) { + if (srcTarg && srcTarg !== FieldWaiting) { let linkDocs = srcTarg.GetList(KeyStore.LinkedToDocs, [] as Document[]); linkDocs.map(linkDoc => { let targDoc = linkDoc.GetT(KeyStore.LinkedToDocs, Document); - if (targDoc && targDoc != FieldWaiting) { + if (targDoc && targDoc !== FieldWaiting) { let dropdoc = targDoc.MakeDelegate(); de.data.droppedDocuments.push(dropdoc); this.props.addDocument(dropdoc, false); diff --git a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx index 19227f5e0..52e40d64a 100644 --- a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx +++ b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx @@ -176,8 +176,8 @@ export class CollectionFreeFormView extends CollectionViewBase { e.stopPropagation(); e.preventDefault(); } else { - // if (modes[e.deltaMode] == 'pixels') coefficient = 50; - // else if (modes[e.deltaMode] == 'lines') coefficient = 1000; // This should correspond to line-height?? + // if (modes[e.deltaMode] === 'pixels') coefficient = 50; + // else if (modes[e.deltaMode] === 'lines') coefficient = 1000; // This should correspond to line-height?? let transform = this.getTransform(); let deltaScale = (1 - (e.deltaY / coefficient)); diff --git a/src/client/views/collections/collectionFreeForm/MarqueeView.tsx b/src/client/views/collections/collectionFreeForm/MarqueeView.tsx index 7022fd972..704db1d4a 100644 --- a/src/client/views/collections/collectionFreeForm/MarqueeView.tsx +++ b/src/client/views/collections/collectionFreeForm/MarqueeView.tsx @@ -48,7 +48,7 @@ export class MarqueeView extends React.Component @action onPointerDown = (e: React.PointerEvent): void => { - if (e.buttons == 1 && !e.altKey && !e.metaKey && this.props.container.props.active()) { + if (e.buttons === 1 && !e.altKey && !e.metaKey && this.props.container.props.active()) { this._downX = this._lastX = e.pageX; this._downY = this._lastY = e.pageY; this._used = false; @@ -63,7 +63,7 @@ export class MarqueeView extends React.Component this._lastX = e.pageX; this._lastY = e.pageY; if (!e.cancelBubble) { - if (!this._used && e.buttons == 1 && !e.altKey && !e.metaKey && + if (!this._used && e.buttons === 1 && !e.altKey && !e.metaKey && (Math.abs(this._lastX - this._downX) > MarqueeView.DRAG_THRESHOLD || Math.abs(this._lastY - this._downY) > MarqueeView.DRAG_THRESHOLD)) { this._visible = true; } @@ -99,15 +99,15 @@ export class MarqueeView extends React.Component @action marqueeCommand = (e: KeyboardEvent) => { - if (e.key == "Backspace" || e.key == "Delete") { + if (e.key === "Backspace" || e.key === "Delete") { this.marqueeSelect().map(d => this.props.removeDocument(d)); let ink = this.props.container.props.Document.GetT(KeyStore.Ink, InkField); - if (ink && ink != FieldWaiting) { + if (ink && ink !== FieldWaiting) { this.marqueeInkDelete(ink.Data); } this.cleanupInteractions(); } - if (e.key == "c") { + if (e.key === "c") { let bounds = this.Bounds; let selected = this.marqueeSelect().map(d => { this.props.removeDocument(d); @@ -118,7 +118,7 @@ export class MarqueeView extends React.Component return d; }); let ink = this.props.container.props.Document.GetT(KeyStore.Ink, InkField); - let inkData = ink && ink != FieldWaiting ? ink.Data : undefined; + let inkData = ink && ink !== FieldWaiting ? ink.Data : undefined; //setTimeout(() => { let newCollection = Documents.FreeformDocument(selected, { x: bounds.left, diff --git a/src/client/views/collections/collectionFreeForm/PreviewCursor.tsx b/src/client/views/collections/collectionFreeForm/PreviewCursor.tsx index 93c98f7b0..599461f85 100644 --- a/src/client/views/collections/collectionFreeForm/PreviewCursor.tsx +++ b/src/client/views/collections/collectionFreeForm/PreviewCursor.tsx @@ -33,7 +33,7 @@ export class PreviewCursor extends React.Component { @action onPointerDown = (e: React.PointerEvent) => { - if (e.button == 0 && this.props.container.props.active()) { + if (e.button === 0 && this.props.container.props.active()) { document.removeEventListener("keypress", this.onKeyPress, false); this._showOnUp = true; this.DownX = e.pageX; diff --git a/src/client/views/nodes/Annotation.tsx b/src/client/views/nodes/Annotation.tsx index a2c7be1a8..e4f17940c 100644 --- a/src/client/views/nodes/Annotation.tsx +++ b/src/client/views/nodes/Annotation.tsx @@ -4,13 +4,13 @@ import { observer } from "mobx-react" import { observable, action } from 'mobx'; import 'react-pdf/dist/Page/AnnotationLayer.css' -interface IProps{ +interface IProps { Span: HTMLSpanElement; - X: number; - Y: number; - Highlights: any[]; - Annotations: any[]; - CurrAnno: any[]; + X: number; + Y: number; + Highlights: any[]; + Annotations: any[]; + CurrAnno: any[]; } @@ -23,95 +23,95 @@ interface IProps{ */ @observer export class Annotation extends React.Component { - + /** * changes color of the span (highlighted section) */ - onColorChange = (e:React.PointerEvent) => { - if (e.currentTarget.innerHTML == "r"){ + onColorChange = (e: React.PointerEvent) => { + if (e.currentTarget.innerHTML === "r") { this.props.Span.style.backgroundColor = "rgba(255,0,0, 0.3)" - } else if (e.currentTarget.innerHTML == "b"){ + } else if (e.currentTarget.innerHTML === "b") { this.props.Span.style.backgroundColor = "rgba(0,255, 255, 0.3)" - } else if (e.currentTarget.innerHTML == "y"){ + } else if (e.currentTarget.innerHTML === "y") { this.props.Span.style.backgroundColor = "rgba(255,255,0, 0.3)" - } else if (e.currentTarget.innerHTML == "g"){ + } else if (e.currentTarget.innerHTML === "g") { this.props.Span.style.backgroundColor = "rgba(76, 175, 80, 0.3)" } - + } /** * removes the highlighted span. Supposed to remove Annotation too, but I don't know how to unmount this */ @action - onRemove = (e:any) => { - let index:number = -1; + onRemove = (e: any) => { + let index: number = -1; //finding the highlight in the highlight array this.props.Highlights.forEach((e) => { - for (let i = 0; i < e.spans.length; i++){ - if (e.spans[i] == this.props.Span){ - index = this.props.Highlights.indexOf(e); - this.props.Highlights.splice(index, 1); + for (const span of e.spans) { + if (span === this.props.Span) { + index = this.props.Highlights.indexOf(e); + this.props.Highlights.splice(index, 1); } } }) //removing from CurrAnno and Annotation array - this.props.Annotations.splice(index, 1); + this.props.Annotations.splice(index, 1); this.props.CurrAnno.pop() - + //removing span from div - if(this.props.Span.parentElement){ - let nodesArray = this.props.Span.parentElement.childNodes; + if (this.props.Span.parentElement) { + let nodesArray = this.props.Span.parentElement.childNodes; nodesArray.forEach((e) => { - if (e == this.props.Span){ - if (this.props.Span.parentElement){ + if (e === this.props.Span) { + if (this.props.Span.parentElement) { this.props.Highlights.forEach((item) => { - if (item == e){ - item.remove(); + if (item === e) { + item.remove(); } }) - e.remove(); + e.remove(); } } - }) + }) } - - + + } render() { return ( -
    -
    +
    +
    -
    - - - - +
    + + + +
    - +
    -
    -
    - + ); } } \ No newline at end of file diff --git a/src/client/views/nodes/AudioBox.tsx b/src/client/views/nodes/AudioBox.tsx index 0ce991485..1bd934c25 100644 --- a/src/client/views/nodes/AudioBox.tsx +++ b/src/client/views/nodes/AudioBox.tsx @@ -29,7 +29,7 @@ export class AudioBox extends React.Component { render() { let field = this.props.Document.Get(this.props.fieldKey) - let path = field == FieldWaiting ? "http://techslides.com/demos/samples/sample.mp3" : + let path = field === FieldWaiting ? "http://techslides.com/demos/samples/sample.mp3" : field instanceof AudioField ? field.Data.href : "http://techslides.com/demos/samples/sample.mp3"; return ( diff --git a/src/client/views/nodes/DocumentContentsView.tsx b/src/client/views/nodes/DocumentContentsView.tsx index 1c9155dce..34cc326aa 100644 --- a/src/client/views/nodes/DocumentContentsView.tsx +++ b/src/client/views/nodes/DocumentContentsView.tsx @@ -77,7 +77,7 @@ export class DocumentContentsView extends React.Component { @action onEnterKey = (e: React.KeyboardEvent): void => { - if (e.key == 'Enter') { + if (e.key === 'Enter') { if (this._keyInput && this._valueInput) { let doc = this.props.Document.GetT(KeyStore.Data, Document); - if (!doc || doc == FieldWaiting) { + if (!doc || doc === FieldWaiting) { return } let realDoc = doc; @@ -70,7 +70,7 @@ export class KeyValueBox extends React.Component { createTable = () => { let doc = this.props.Document.GetT(KeyStore.Data, Document); - if (!doc || doc == FieldWaiting) { + if (!doc || doc === FieldWaiting) { return Loading... } let realDoc = doc; diff --git a/src/client/views/nodes/LinkBox.tsx b/src/client/views/nodes/LinkBox.tsx index e81f8fec7..4791d6029 100644 --- a/src/client/views/nodes/LinkBox.tsx +++ b/src/client/views/nodes/LinkBox.tsx @@ -49,7 +49,7 @@ export class LinkBox extends React.Component { } else if (contextDoc instanceof Document) { this.props.pairedDoc.GetTAsync(KeyStore.Page, NumberField).then((pfield: any) => { contextDoc.GetTAsync(KeyStore.CurPage, NumberField).then((cfield: any) => { - if (pfield != cfield) + if (pfield !== cfield) contextDoc.SetNumber(KeyStore.CurPage, pfield.Data); let contextView = DocumentManager.Instance.getDocumentView(contextDoc); if (contextView) { diff --git a/src/client/views/nodes/LinkMenu.tsx b/src/client/views/nodes/LinkMenu.tsx index 5eeb40772..6c2d24630 100644 --- a/src/client/views/nodes/LinkMenu.tsx +++ b/src/client/views/nodes/LinkMenu.tsx @@ -24,7 +24,7 @@ export class LinkMenu extends React.Component { renderLinkItems(links: Document[], key: Key, type: string) { return links.map(link => { let doc = link.GetT(key, Document); - if (doc && doc != FieldWaiting) { + if (doc && doc !== FieldWaiting) { return this._editingLink = link)} type={type} /> } }) diff --git a/src/client/views/nodes/VideoBox.tsx b/src/client/views/nodes/VideoBox.tsx index b4590df34..a08b320e8 100644 --- a/src/client/views/nodes/VideoBox.tsx +++ b/src/client/views/nodes/VideoBox.tsx @@ -34,7 +34,7 @@ export class VideoBox extends React.Component { var nativeWidth = this.props.Document.GetNumber(KeyStore.NativeWidth, 0); var nativeHeight = this.props.Document.GetNumber(KeyStore.NativeHeight, 0); var newNativeHeight = nativeWidth * r.entry.height / r.entry.width; - if (!nativeHeight && newNativeHeight != nativeHeight && !isNaN(newNativeHeight)) { + if (!nativeHeight && newNativeHeight !== nativeHeight && !isNaN(newNativeHeight)) { this.props.Document.SetNumber(KeyStore.Height, newNativeHeight / nativeWidth * this.props.Document.GetNumber(KeyStore.Width, 0)); this.props.Document.SetNumber(KeyStore.NativeHeight, newNativeHeight); } diff --git a/src/client/views/nodes/WebBox.tsx b/src/client/views/nodes/WebBox.tsx index 92e2fabd4..c1d389001 100644 --- a/src/client/views/nodes/WebBox.tsx +++ b/src/client/views/nodes/WebBox.tsx @@ -20,7 +20,7 @@ export class WebBox extends React.Component { render() { let field = this.props.Document.Get(this.props.fieldKey); - let path = field == FieldWaiting ? "https://image.flaticon.com/icons/svg/66/66163.svg" : + let path = field === FieldWaiting ? "https://image.flaticon.com/icons/svg/66/66163.svg" : field instanceof WebField ? field.Data.href : "https://crossorigin.me/" + "https://cs.brown.edu"; let content = this.html ? diff --git a/src/fields/AudioField.ts b/src/fields/AudioField.ts index 8864471ae..252a5b74e 100644 --- a/src/fields/AudioField.ts +++ b/src/fields/AudioField.ts @@ -4,7 +4,7 @@ import { Types } from "../server/Message"; export class AudioField extends BasicField { constructor(data: URL | undefined = undefined, id?: FieldId, save: boolean = true) { - super(data == undefined ? new URL("http://techslides.com/demos/samples/sample.mp3") : data, save, id); + super(data === undefined ? new URL("http://techslides.com/demos/samples/sample.mp3") : data, save, id); } toString(): string { diff --git a/src/fields/BasicField.ts b/src/fields/BasicField.ts index a92c4a236..3083a1937 100644 --- a/src/fields/BasicField.ts +++ b/src/fields/BasicField.ts @@ -46,7 +46,7 @@ export abstract class BasicField extends Field { @action TrySetValue(value: any): boolean { - if (typeof value == typeof this.data) { + if (typeof value === typeof this.data) { this.Data = value; return true; } diff --git a/src/fields/ImageField.ts b/src/fields/ImageField.ts index a9ece7d7b..ef616b2ad 100644 --- a/src/fields/ImageField.ts +++ b/src/fields/ImageField.ts @@ -4,7 +4,7 @@ import { Types } from "../server/Message"; export class ImageField extends BasicField { constructor(data: URL | undefined = undefined, id?: FieldId, save: boolean = true) { - super(data == undefined ? new URL("http://cs.brown.edu/~bcz/bob_fettucine.jpg") : data, save, id); + super(data === undefined ? new URL("http://cs.brown.edu/~bcz/bob_fettucine.jpg") : data, save, id); } toString(): string { diff --git a/src/fields/ListField.ts b/src/fields/ListField.ts index c4008bd12..815a3df73 100644 --- a/src/fields/ListField.ts +++ b/src/fields/ListField.ts @@ -26,7 +26,7 @@ export class ListField extends BasicField { } this.observeDisposer = observe(this.Data as IObservableArray, (change: IArrayChange | IArraySplice) => { this.updateProxies() - if (change.type == "splice") { + if (change.type === "splice") { UndoManager.AddEvent({ undo: () => this.Data.splice(change.index, change.addedCount, ...change.removed), redo: () => this.Data.splice(change.index, change.removedCount, ...change.added) @@ -57,8 +57,8 @@ export class ListField extends BasicField { } private arraysEqual(a: any[], b: any[]) { if (a === b) return true; - if (a == null || b == null) return false; - if (a.length != b.length) return false; + if (a === null || b === null) return false; + if (a.length !== b.length) return false; // If you don't care about the order of the elements inside // the array, you should sort both arrays here. @@ -79,9 +79,9 @@ export class ListField extends BasicField { var added = this.data.length < this._proxies.length; var deleted = this.data.length > this._proxies.length; for (let i = 0; i < dataids.length && added; i++) - added = proxies.indexOf(dataids[i]) != -1; + added = proxies.indexOf(dataids[i]) !== -1; for (let i = 0; i < this._proxies.length && deleted; i++) - deleted = dataids.indexOf(proxies[i]) != -1; + deleted = dataids.indexOf(proxies[i]) !== -1; this._processingServerUpdate = true; for (let i = 0; i < proxies.length && added; i++) { diff --git a/src/fields/PDFField.ts b/src/fields/PDFField.ts index b6625387e..436c1cf2b 100644 --- a/src/fields/PDFField.ts +++ b/src/fields/PDFField.ts @@ -7,7 +7,7 @@ import { Types } from "../server/Message"; export class PDFField extends BasicField { constructor(data: URL | undefined = undefined, id?: FieldId, save: boolean = true) { - super(data == undefined ? new URL("http://cs.brown.edu/~bcz/bob_fettucine.jpg") : data, save, id); + super(data === undefined ? new URL("http://cs.brown.edu/~bcz/bob_fettucine.jpg") : data, save, id); } toString(): string { diff --git a/src/fields/VideoField.ts b/src/fields/VideoField.ts index 626e4ec83..992cc1641 100644 --- a/src/fields/VideoField.ts +++ b/src/fields/VideoField.ts @@ -4,7 +4,7 @@ import { Types } from "../server/Message"; export class VideoField extends BasicField { constructor(data: URL | undefined = undefined, id?: FieldId, save: boolean = true) { - super(data == undefined ? new URL("http://techslides.com/demos/sample-videos/small.mp4") : data, save, id); + super(data === undefined ? new URL("http://techslides.com/demos/sample-videos/small.mp4") : data, save, id); } toString(): string { diff --git a/src/server/index.ts b/src/server/index.ts index ce8bbefe8..f60e6e293 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -143,7 +143,7 @@ addSecureRoute( Method.GET, (user, res, req) => { let detector = new mobileDetect(req.headers['user-agent'] || ""); - if (detector.mobile() != null) { + if (detector.mobile() !== null) { res.sendFile(path.join(__dirname, '../../deploy/mobile/image.html')); } else { res.sendFile(path.join(__dirname, '../../deploy/index.html')); -- cgit v1.2.3-70-g09d2 From 0703e2c8556d2b3219e575987657f95a89a13f76 Mon Sep 17 00:00:00 2001 From: Tyler Schicke Date: Fri, 5 Apr 2019 23:45:46 -0400 Subject: added server gitignore --- src/server/public/files/.gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 src/server/public/files/.gitignore (limited to 'src') diff --git a/src/server/public/files/.gitignore b/src/server/public/files/.gitignore new file mode 100644 index 000000000..f59ec20aa --- /dev/null +++ b/src/server/public/files/.gitignore @@ -0,0 +1 @@ +* \ No newline at end of file -- cgit v1.2.3-70-g09d2 From 49310acbdfd7ca239c939208b3766c54e980f6f1 Mon Sep 17 00:00:00 2001 From: ab Date: Sat, 6 Apr 2019 18:43:15 -0400 Subject: drop fraught but technically undoable --- src/client/util/TooltipTextMenu.tsx | 2 +- src/client/util/UndoManager.ts | 23 ++++++-- src/client/views/InkingCanvas.tsx | 14 +++-- src/client/views/InkingControl.tsx | 3 +- .../views/collections/CollectionDockingView.tsx | 1 + src/client/views/collections/CollectionView.tsx | 7 +-- .../views/collections/CollectionViewBase.tsx | 60 ++++++++++++--------- .../collectionFreeForm/CollectionFreeFormView.tsx | 2 +- src/client/views/nodes/PDFBox.tsx | 4 +- src/server/database.ts | 6 +-- .../upload_011289d8c22f5422cf6f7e27a8c780ef.jpg | Bin 0 -> 218352 bytes .../upload_01b38428ccc02261e24689b9d887b206.PNG | Bin 0 -> 14176 bytes .../upload_01e81815633ee270c8b4ffca88a7773e.jpg | Bin 0 -> 218352 bytes .../upload_031371580a23b87aaafb587ece875819.png | Bin 0 -> 4183 bytes .../upload_03c44479fe728bbcc2f76dab407544d5.png | Bin 0 -> 10718 bytes .../upload_05ceaf4112a0e3754a53ab59f4b1ff07.png | Bin 0 -> 6199 bytes .../upload_061bdf72416cbef898d4cd1a0152ce1f.jpg | Bin 0 -> 218352 bytes .../upload_07488f31d6eacb28458c11eb982fa654.jpg | Bin 0 -> 218352 bytes .../upload_08afadab5ded674ec3f244b2bd124b8b.PNG | Bin 0 -> 14176 bytes .../upload_09df67e3e4c3bcd2a571d8be5f0acf48.PNG | Bin 0 -> 7337 bytes .../upload_10b64e99df3aac032564573c3699bda4.png | Bin 0 -> 10718 bytes .../upload_11162dd1b00ed2a26923aa9d2fa9889e.png | Bin 0 -> 4183 bytes .../upload_115d44864ee866f2986188501a59342b.png | Bin 0 -> 10718 bytes .../upload_1465783317d01ed75e87e169b56928fd.PNG | Bin 0 -> 14176 bytes .../upload_156cb9406f94654dea0e227e377f0a75.PNG | Bin 0 -> 7337 bytes .../upload_166eb5d1d46cf268a59e01b4b32528cd.PNG | Bin 0 -> 7337 bytes .../upload_17d2b2f3ec801e6fdcc6d29e523e946b.PNG | Bin 0 -> 7337 bytes .../upload_1863f67c2c193452cc5192f0ebac2a7b.png | Bin 0 -> 6199 bytes .../upload_18d64bf4a483e78a36153abcd26af503.png | Bin 0 -> 20776 bytes .../upload_1a7925dd1140a2b5a7cc5c62ad20a8e8.png | Bin 0 -> 20776 bytes .../upload_1c47eb68831fff82bc6982e5df4d02d5.PNG | Bin 0 -> 14176 bytes .../upload_1c8f6233068ed1535384500768557e68.png | Bin 0 -> 20776 bytes .../upload_1ea7ee56753d0327192da9666de9e305.PNG | Bin 0 -> 14160 bytes .../upload_2098441ee0ad89e51e825e2fb5f641d2.png | Bin 0 -> 4183 bytes .../upload_23a30791fc2afceb92310a665d364dbd.jpg | Bin 0 -> 218352 bytes .../upload_2436e82c2c54dd8f33f74e4440d11104.png | Bin 0 -> 10718 bytes .../upload_2443e73bbbd67712bcedc04f0ead5617.PNG | Bin 0 -> 14160 bytes .../upload_2515fc22ce67c256bf3039bc84e54432.jpg | Bin 0 -> 136356 bytes .../upload_280bb85121601366f65632649edd9425.jpg | Bin 0 -> 136356 bytes .../upload_284a94d4ba485d6799ee772521846a59.jpg | Bin 0 -> 218352 bytes .../upload_28550bbb245dfbe9b24b2354ed349f0c.jpg | Bin 0 -> 218352 bytes .../upload_2abbef5268ab7ca77dad96775cb52345.png | Bin 0 -> 6199 bytes .../upload_2b5ec0fba66b5b3b5e47a2c53a1005be.jpg | Bin 0 -> 218352 bytes .../upload_2b6f66b8972b2f4991239720bb1df7d4.png | Bin 0 -> 6199 bytes .../upload_2b75a95a64abfe997aa8e12a69d2bc43.png | Bin 0 -> 498481 bytes .../upload_2c689fe57038ad6a324297e92badd705.png | Bin 0 -> 20776 bytes .../upload_2d86441185e38ed16bbf4234d8857e13.PNG | Bin 0 -> 14176 bytes .../upload_2e68bb961e82faddbaa501c5c4e51795.png | Bin 0 -> 6199 bytes .../upload_303438040b77efc92ad5a6617edf7000.png | Bin 0 -> 4183 bytes .../upload_303b28fc64dd65c58382fe2b0a513190.jpg | Bin 0 -> 136356 bytes .../upload_319f73a65644974e6502a79dfb60b777.jpg | Bin 0 -> 218352 bytes .../upload_33290055bf62326211eb846bc32d7ab9.PNG | Bin 0 -> 14176 bytes .../upload_352949a7d58209759d0ab420726acce3.png | Bin 0 -> 20776 bytes .../upload_365e7ad24d7b896dc24525068e8f0fba.png | Bin 0 -> 4183 bytes .../upload_38001ea16c21a82601586e9d7c823e5f.png | Bin 0 -> 20776 bytes .../upload_3bb64e7eb87805eb7c2c67352ab3e3f6.PNG | Bin 0 -> 14176 bytes .../upload_3cb5a8a9454a1b42a69a3d274c0a00e7.png | Bin 0 -> 6199 bytes .../upload_3db8e110c40cb0770e79a61171eba542.jpg | Bin 0 -> 218352 bytes .../upload_41fc781a82b1f33b631e5aa68c6a1a76.PNG | Bin 0 -> 14160 bytes .../upload_42ecb2422b80f6da3afb62543391f58c.PNG | Bin 0 -> 7337 bytes .../upload_431be602a66059169d1f4c4cd4646476.PNG | Bin 0 -> 14176 bytes .../upload_4543a61bc7c5f79c788b749a9ce7535a.PNG | Bin 0 -> 7337 bytes .../upload_45e88f05b821eca6b85c1fc7b048af63.jpg | Bin 0 -> 136356 bytes .../upload_493879305f109a4412223137f7031944.png | Bin 0 -> 6199 bytes .../upload_49ac63665b883ea4702733fc8d70f6b1.PNG | Bin 0 -> 14176 bytes .../upload_4bc2bdf9a392b8e567b964f59cfd32a8.PNG | Bin 0 -> 7337 bytes .../upload_4e4560c1f0081b87af4c010792d799fc.jpg | Bin 0 -> 136356 bytes .../upload_4e56e150f5c92f8980c4df49603747cc.png | Bin 0 -> 6199 bytes .../upload_4e897855f35d0aa419d27bfaedae4435.png | Bin 0 -> 10718 bytes .../upload_5495509165b60d3c04b8e509a7d187ba.PNG | Bin 0 -> 14176 bytes .../upload_54d3dcb522f9fe3beb060103248a5ee9.png | Bin 0 -> 10718 bytes .../upload_568996cd49829901200e1bec2b49a176.PNG | Bin 0 -> 7337 bytes .../upload_5757898e2b8507438e1bdaf7b7fee4bb.png | Bin 0 -> 10718 bytes .../upload_57c4353c9d3250bac49753be6b8973c6.png | Bin 0 -> 20776 bytes .../upload_57f2901b84275f3e40ca9d41cb7c057d.PNG | Bin 0 -> 14176 bytes .../upload_580d262f8a55c2fe3acbc6f0e690ad56.png | Bin 0 -> 6199 bytes .../upload_58782b7ba1ac3963c4fdd5a987bf0aca.PNG | Bin 0 -> 7337 bytes .../upload_588f580df306a338f7be0483dc30d576.jpg | Bin 0 -> 136356 bytes .../upload_590c965f849c296ae3841689ce80b548.png | Bin 0 -> 20776 bytes .../upload_5915c6516d7a7db8164f7e395b81973e.PNG | Bin 0 -> 7337 bytes .../upload_594db1ea036d584bc71de979ce57832b.PNG | Bin 0 -> 14176 bytes .../upload_5bf829a0b264b321b9b17267ab06a11b.png | Bin 0 -> 20776 bytes .../upload_5cba158af25fb2058c1b2e130cd3fefc.png | Bin 0 -> 6199 bytes .../upload_5d5f91ac61a5e55192c1de4402483126.png | Bin 0 -> 10718 bytes .../upload_5ea64a359728395c1608b8783f6fb192.PNG | Bin 0 -> 7337 bytes .../upload_5f0bace6da44bc7084c6ad01fcfe1012.png | Bin 0 -> 4183 bytes .../upload_5fe9f9fe6eb4a78dcde144c9d4e5d6bb.png | Bin 0 -> 10718 bytes .../upload_604cd121c8ecb30eb4d13cded9ce8746.png | Bin 0 -> 20776 bytes .../upload_60f89c7647c6ed08d977e485fea9e033.jpg | Bin 0 -> 218352 bytes .../upload_62900e4354015fc2bc78f00afbc1bc21.png | Bin 0 -> 10718 bytes .../upload_62f1a7fa74224de7248c62d6d4242fd0.jpg | Bin 0 -> 218352 bytes .../upload_63a7127553e83f381212c80f607c6db5.png | Bin 0 -> 10718 bytes .../upload_63c37ab66ad16d68ef96670b1d04ee1c.png | Bin 0 -> 6199 bytes .../upload_665fb37c1505fdf48a665990caf09d26.png | Bin 0 -> 4183 bytes .../upload_67c7a2ac39caabaac7b90861a1314b8f.png | Bin 0 -> 10718 bytes .../upload_680394edbfb281065997525cc114f996.PNG | Bin 0 -> 7337 bytes .../upload_684090a0c50a035aaa0df23c18043df8.png | Bin 0 -> 10718 bytes .../upload_6bd24b1193058458d6ea268b06963931.PNG | Bin 0 -> 7337 bytes .../upload_6bde8211989cf1b540b3c6dcf16cd51a.PNG | Bin 0 -> 7337 bytes .../upload_6d5051266bd739f260105072299b5c79.png | Bin 0 -> 4183 bytes .../upload_6d9a3ec37d85659265f2b622a6d24dcb.jpg | Bin 0 -> 136356 bytes .../upload_6f222fae83f0185e361bf6a757ba9800.png | Bin 0 -> 10718 bytes .../upload_6f5b0c8a474e44d76cbbea5f629e8fba.png | Bin 0 -> 498481 bytes .../upload_7068f1e2ec782980b4eded2ff974da7f.jpg | Bin 0 -> 136356 bytes .../upload_72c05840ea8bddc44575309923d4c63b.jpg | Bin 0 -> 218352 bytes .../upload_73b42f2f26e037078c1f1c63913fc9aa.jpg | Bin 0 -> 136356 bytes .../upload_7412310b57204cb3c36d5aba670589fc.PNG | Bin 0 -> 14176 bytes .../upload_75d331ba20a80ca0f6fd18bc0b37b8b3.PNG | Bin 0 -> 14176 bytes .../upload_77eab9365e5c11d5e1ac08fca6c862ab.png | Bin 0 -> 4183 bytes .../upload_786b4b94fda60ba60da3dfe2be091b6b.png | Bin 0 -> 6199 bytes .../upload_793745d2b6c8a5c3dbeea343b9332846.PNG | Bin 0 -> 14160 bytes .../upload_7c369564861f079a17bd77081ace597b.PNG | Bin 0 -> 14160 bytes .../upload_7c7f3f317ea27a2ddad9e8a34f636b78.png | Bin 0 -> 20776 bytes .../upload_7f357bbbe7756dabad0b9cb49c9ceb0c.PNG | Bin 0 -> 14176 bytes .../upload_814802d9faf217a7b09c1c95c4ecfd05.png | Bin 0 -> 48172 bytes .../upload_83180cda4fa509f6ff0654376c1da7f2.jpg | Bin 0 -> 218352 bytes .../upload_8321ece56de47e0bf5345fe30d23414e.PNG | Bin 0 -> 7337 bytes .../upload_871f1af44ec7a2140f32433f3015d603.jpg | Bin 0 -> 218352 bytes .../upload_892d1d9d981f679fedaa2c5bf193fd20.jpg | Bin 0 -> 136356 bytes .../upload_89721bf0d244b1fcc52f70a7d9e3593b.jpg | Bin 0 -> 136356 bytes .../upload_89e66f8d531a44a63fa3355602813ae7.png | Bin 0 -> 6199 bytes .../upload_8a6090d2b978221d0810b954f7b14065.PNG | Bin 0 -> 14176 bytes .../upload_8b92f6ffc9a8c8353fd141c6dc71895f.jpg | Bin 0 -> 136356 bytes .../upload_8bfca62429aada8f6b5dae1dcde24cab.png | Bin 0 -> 20776 bytes .../upload_8e9e27d1918f3a0a5f242397079e66fa.png | Bin 0 -> 20776 bytes .../upload_8ef0953ff77d42848b6e7f37e9bd506d.PNG | Bin 0 -> 14176 bytes .../upload_902c6b9c79da47ec00238f4831795077.jpg | Bin 0 -> 218352 bytes .../upload_90d380b38492369c1470868b019f0d0c.jpg | Bin 0 -> 218352 bytes .../upload_95af42b1b5db521aa1539980fe85e71a.jpg | Bin 0 -> 136356 bytes .../upload_97031060c857a0e8f15af3fcc038a2b8.jpg | Bin 0 -> 218352 bytes .../upload_97903efc6c08245acaea37eefacf289f.png | Bin 0 -> 20776 bytes .../upload_9974b3459e182fef33b8e467058b7525.png | Bin 0 -> 4183 bytes .../upload_9a8429dac8feba05bbda2b53b5da4efa.jpg | Bin 0 -> 218352 bytes .../upload_9bbc86def05076b89080adcc37481324.jpg | Bin 0 -> 136356 bytes .../upload_9cd52fc451f3d459021127a7d51d108b.png | Bin 0 -> 20776 bytes .../upload_9de9f004f258cee8c55bf872362d6453.jpg | Bin 0 -> 218352 bytes .../upload_a0286ae2a1eec8c31c8276ec067d91aa.png | Bin 0 -> 20776 bytes .../upload_a04473da584e5a602d0f8984a670a91c.jpg | Bin 0 -> 136356 bytes .../upload_a2cf3f6ab4ab5b249ebf8100e461aa27.png | Bin 0 -> 4183 bytes .../upload_a3095034ec19353c9ee55221088f01d8.PNG | Bin 0 -> 14176 bytes .../upload_a520a6856021104b8130f8d3b42d85c0.png | Bin 0 -> 6199 bytes .../upload_a5c26f52ddcbd705ffbd3dfd7cd2ce40.jpg | Bin 0 -> 136356 bytes .../upload_a60864ff7892974e941e42a2441e530d.png | Bin 0 -> 6199 bytes .../upload_a77f86dbeaa0c3cecc2516f9d9cecf1d.png | Bin 0 -> 4183 bytes .../upload_aa2bbeb0871a2d6b4b54524ac2758270.jpg | Bin 0 -> 218352 bytes .../upload_aa9fec4828bfdfef3ae20d43997fb274.png | Bin 0 -> 10718 bytes .../upload_ab2bba2cee88991561f20d7cd69ec6e1.png | Bin 0 -> 10718 bytes .../upload_ae1c01e481fc6b753c78605bfbe680b9.png | Bin 0 -> 20776 bytes .../upload_b0d25a0dccc640f78dcbc291f930b5d6.png | Bin 0 -> 6199 bytes .../upload_b0e527b27b7cabf651b29c9d834d24f3.PNG | Bin 0 -> 7337 bytes .../upload_b0ea7e49e84cf91075962a75c76d3233.png | Bin 0 -> 6199 bytes .../upload_b1b334829e1d99d7cd32fae5044cc103.PNG | Bin 0 -> 7337 bytes .../upload_b52adf6e1ecdbbe76aa3c038ddc3b02b.PNG | Bin 0 -> 14160 bytes .../upload_b6c992aa6c434520887521e11bb5f492.png | Bin 0 -> 4183 bytes .../upload_ba04eb816ef3bec770aa7eebf3b21cb1.PNG | Bin 0 -> 14176 bytes .../upload_ba58066314a79d1c845241fb4400e44d.png | Bin 0 -> 20776 bytes .../upload_bb6b521b4df6bd783d6a5b83a66caa0a.jpg | Bin 0 -> 136356 bytes .../upload_bcb173a15068ded66b39623ab18bfdb7.jpg | Bin 0 -> 218352 bytes .../upload_be4034faba6a5313dfb8a53e18ffc188.png | Bin 0 -> 10718 bytes .../upload_be5f90995b34cd30d9a269b5a9f10fcc.PNG | Bin 0 -> 7337 bytes .../upload_c1a964ca145f45e7e666cfaf7c8398e3.png | Bin 0 -> 4183 bytes .../upload_c6764790a8182d796acddb76d3df595e.PNG | Bin 0 -> 14176 bytes .../upload_c81bff72d05e0bb7f13376a46506ec2a.jpg | Bin 0 -> 39678 bytes .../upload_c98c0184a19b621b2bc0575b49996a69.png | Bin 0 -> 20776 bytes .../upload_cb4d875a9f73d1f735da5ae82dce6eb1.jpg | Bin 0 -> 136356 bytes .../upload_cd08524995e5f124505fe3d7ab38a41f.png | Bin 0 -> 4183 bytes .../upload_cd73b55488fcc7e5e5e5f2a4c43bc1fd.png | Bin 0 -> 20776 bytes .../upload_ce357d5a6d727ac44110c60dd379428f.png | Bin 0 -> 10718 bytes .../upload_d00c34a1e1c319a9373b5f136c38a866.jpg | Bin 0 -> 136356 bytes .../upload_d242527805ab4c52f2385ae57b85e6fb.png | Bin 0 -> 20776 bytes .../upload_d28007fa68c809cd3c0a78d4a8727275.png | Bin 0 -> 4183 bytes .../upload_d35ea9c62bf8da0352a16193b880469e.jpg | Bin 0 -> 218352 bytes .../upload_d4e0e9d2aee31b5931129dc3bc83e813.png | Bin 0 -> 6199 bytes .../upload_d5801c03d9562a612d1907085ba39373.jpg | Bin 0 -> 218352 bytes .../upload_d6d0e3a302e0edafa70785c39041e522.PNG | Bin 0 -> 14176 bytes .../upload_d6e725cc697751599b177e0cf330b9f2.jpg | Bin 0 -> 218352 bytes .../upload_d794d56fcab3b93b6c79aa201cba34f8.png | Bin 0 -> 48172 bytes .../upload_d8abeaef04a42678432e5e1d3377a2d0.png | Bin 0 -> 20776 bytes .../upload_dac5245c657d29c1c4dfba98472fb50d.pdf | Bin 0 -> 331305 bytes .../upload_db3c5a0b560c9da35607359d86cf2b97.png | Bin 0 -> 4183 bytes .../upload_dc8821dc596b1938c855e0affbe614dd.png | Bin 0 -> 20776 bytes .../upload_df7697c4832990aad0e8d9f0daa1711b.png | Bin 0 -> 10718 bytes .../upload_e009e45db30e47383fad5d71908dc69d.png | Bin 0 -> 20776 bytes .../upload_e15738d092ff38197dc1fb41a4747d16.jpg | Bin 0 -> 218352 bytes .../upload_e51079d9af97a412353d63c60e1ea96d.png | Bin 0 -> 4183 bytes .../upload_e5422cdcfa80628842ff3aacf14ad25e.png | Bin 0 -> 20776 bytes .../upload_e6256196c38216ac539ef7e8ee28ab02.png | Bin 0 -> 6199 bytes .../upload_e9668199bd12c905f27be76b11366d68.png | Bin 0 -> 6199 bytes .../upload_e98ebeeebd5f0ddc98ea9b3a2d9f40d2.png | Bin 0 -> 4183 bytes .../upload_eb2f002129e0cfb5c940f6b4ecc5a8f2.jpg | Bin 0 -> 136356 bytes .../upload_ec02ff06b3154d269086e23ebf6ad942.png | Bin 0 -> 10718 bytes .../upload_ef3873102a70850a4da2040eab002c55.jpg | Bin 0 -> 136356 bytes .../upload_f259c9aa37b0919d6d20ad8d75e8329e.png | Bin 0 -> 10718 bytes .../upload_f48143c75b8c2412785e3ed31ebbb150.PNG | Bin 0 -> 7337 bytes .../upload_f5347da10a373480807fc3469533b9fe.png | Bin 0 -> 4183 bytes .../upload_f6e36f6d3de7a2036eeff617f186b78f.png | Bin 0 -> 4183 bytes .../upload_f6f1ed7a268523278457de08ee61bcfa.PNG | Bin 0 -> 7337 bytes .../upload_f73607b7cf818631165aca9d32ef19c5.jpg | Bin 0 -> 136356 bytes .../upload_f804a6c7ec796718d66108af0b1e6d0e.png | Bin 0 -> 10718 bytes .../upload_f9ed03ab046d7f579d6f531df9c4050a.PNG | Bin 0 -> 14176 bytes .../upload_fac4f686367ad63f2fcc1d8b4f74f123.png | Bin 0 -> 4183 bytes .../upload_faebd8bdc2b00efe50b232c9cf4e63b6.PNG | Bin 0 -> 7337 bytes .../upload_fb3cc3a1d715a6ffa1c72bde91faf3af.png | Bin 0 -> 6199 bytes .../upload_fe2dbe44900645eba61207748f63ade3.jpg | Bin 0 -> 136356 bytes .../upload_ffd58755419ab98f03d56fedd16736e9.jpg | Bin 0 -> 218352 bytes 205 files changed, 79 insertions(+), 43 deletions(-) create mode 100644 src/server/public/files/upload_011289d8c22f5422cf6f7e27a8c780ef.jpg create mode 100644 src/server/public/files/upload_01b38428ccc02261e24689b9d887b206.PNG create mode 100644 src/server/public/files/upload_01e81815633ee270c8b4ffca88a7773e.jpg create mode 100644 src/server/public/files/upload_031371580a23b87aaafb587ece875819.png create mode 100644 src/server/public/files/upload_03c44479fe728bbcc2f76dab407544d5.png create mode 100644 src/server/public/files/upload_05ceaf4112a0e3754a53ab59f4b1ff07.png create mode 100644 src/server/public/files/upload_061bdf72416cbef898d4cd1a0152ce1f.jpg create mode 100644 src/server/public/files/upload_07488f31d6eacb28458c11eb982fa654.jpg create mode 100644 src/server/public/files/upload_08afadab5ded674ec3f244b2bd124b8b.PNG create mode 100644 src/server/public/files/upload_09df67e3e4c3bcd2a571d8be5f0acf48.PNG create mode 100644 src/server/public/files/upload_10b64e99df3aac032564573c3699bda4.png create mode 100644 src/server/public/files/upload_11162dd1b00ed2a26923aa9d2fa9889e.png create mode 100644 src/server/public/files/upload_115d44864ee866f2986188501a59342b.png create mode 100644 src/server/public/files/upload_1465783317d01ed75e87e169b56928fd.PNG create mode 100644 src/server/public/files/upload_156cb9406f94654dea0e227e377f0a75.PNG create mode 100644 src/server/public/files/upload_166eb5d1d46cf268a59e01b4b32528cd.PNG create mode 100644 src/server/public/files/upload_17d2b2f3ec801e6fdcc6d29e523e946b.PNG create mode 100644 src/server/public/files/upload_1863f67c2c193452cc5192f0ebac2a7b.png create mode 100644 src/server/public/files/upload_18d64bf4a483e78a36153abcd26af503.png create mode 100644 src/server/public/files/upload_1a7925dd1140a2b5a7cc5c62ad20a8e8.png create mode 100644 src/server/public/files/upload_1c47eb68831fff82bc6982e5df4d02d5.PNG create mode 100644 src/server/public/files/upload_1c8f6233068ed1535384500768557e68.png create mode 100644 src/server/public/files/upload_1ea7ee56753d0327192da9666de9e305.PNG create mode 100644 src/server/public/files/upload_2098441ee0ad89e51e825e2fb5f641d2.png create mode 100644 src/server/public/files/upload_23a30791fc2afceb92310a665d364dbd.jpg create mode 100644 src/server/public/files/upload_2436e82c2c54dd8f33f74e4440d11104.png create mode 100644 src/server/public/files/upload_2443e73bbbd67712bcedc04f0ead5617.PNG create mode 100644 src/server/public/files/upload_2515fc22ce67c256bf3039bc84e54432.jpg create mode 100644 src/server/public/files/upload_280bb85121601366f65632649edd9425.jpg create mode 100644 src/server/public/files/upload_284a94d4ba485d6799ee772521846a59.jpg create mode 100644 src/server/public/files/upload_28550bbb245dfbe9b24b2354ed349f0c.jpg create mode 100644 src/server/public/files/upload_2abbef5268ab7ca77dad96775cb52345.png create mode 100644 src/server/public/files/upload_2b5ec0fba66b5b3b5e47a2c53a1005be.jpg create mode 100644 src/server/public/files/upload_2b6f66b8972b2f4991239720bb1df7d4.png create mode 100644 src/server/public/files/upload_2b75a95a64abfe997aa8e12a69d2bc43.png create mode 100644 src/server/public/files/upload_2c689fe57038ad6a324297e92badd705.png create mode 100644 src/server/public/files/upload_2d86441185e38ed16bbf4234d8857e13.PNG create mode 100644 src/server/public/files/upload_2e68bb961e82faddbaa501c5c4e51795.png create mode 100644 src/server/public/files/upload_303438040b77efc92ad5a6617edf7000.png create mode 100644 src/server/public/files/upload_303b28fc64dd65c58382fe2b0a513190.jpg create mode 100644 src/server/public/files/upload_319f73a65644974e6502a79dfb60b777.jpg create mode 100644 src/server/public/files/upload_33290055bf62326211eb846bc32d7ab9.PNG create mode 100644 src/server/public/files/upload_352949a7d58209759d0ab420726acce3.png create mode 100644 src/server/public/files/upload_365e7ad24d7b896dc24525068e8f0fba.png create mode 100644 src/server/public/files/upload_38001ea16c21a82601586e9d7c823e5f.png create mode 100644 src/server/public/files/upload_3bb64e7eb87805eb7c2c67352ab3e3f6.PNG create mode 100644 src/server/public/files/upload_3cb5a8a9454a1b42a69a3d274c0a00e7.png create mode 100644 src/server/public/files/upload_3db8e110c40cb0770e79a61171eba542.jpg create mode 100644 src/server/public/files/upload_41fc781a82b1f33b631e5aa68c6a1a76.PNG create mode 100644 src/server/public/files/upload_42ecb2422b80f6da3afb62543391f58c.PNG create mode 100644 src/server/public/files/upload_431be602a66059169d1f4c4cd4646476.PNG create mode 100644 src/server/public/files/upload_4543a61bc7c5f79c788b749a9ce7535a.PNG create mode 100644 src/server/public/files/upload_45e88f05b821eca6b85c1fc7b048af63.jpg create mode 100644 src/server/public/files/upload_493879305f109a4412223137f7031944.png create mode 100644 src/server/public/files/upload_49ac63665b883ea4702733fc8d70f6b1.PNG create mode 100644 src/server/public/files/upload_4bc2bdf9a392b8e567b964f59cfd32a8.PNG create mode 100644 src/server/public/files/upload_4e4560c1f0081b87af4c010792d799fc.jpg create mode 100644 src/server/public/files/upload_4e56e150f5c92f8980c4df49603747cc.png create mode 100644 src/server/public/files/upload_4e897855f35d0aa419d27bfaedae4435.png create mode 100644 src/server/public/files/upload_5495509165b60d3c04b8e509a7d187ba.PNG create mode 100644 src/server/public/files/upload_54d3dcb522f9fe3beb060103248a5ee9.png create mode 100644 src/server/public/files/upload_568996cd49829901200e1bec2b49a176.PNG create mode 100644 src/server/public/files/upload_5757898e2b8507438e1bdaf7b7fee4bb.png create mode 100644 src/server/public/files/upload_57c4353c9d3250bac49753be6b8973c6.png create mode 100644 src/server/public/files/upload_57f2901b84275f3e40ca9d41cb7c057d.PNG create mode 100644 src/server/public/files/upload_580d262f8a55c2fe3acbc6f0e690ad56.png create mode 100644 src/server/public/files/upload_58782b7ba1ac3963c4fdd5a987bf0aca.PNG create mode 100644 src/server/public/files/upload_588f580df306a338f7be0483dc30d576.jpg create mode 100644 src/server/public/files/upload_590c965f849c296ae3841689ce80b548.png create mode 100644 src/server/public/files/upload_5915c6516d7a7db8164f7e395b81973e.PNG create mode 100644 src/server/public/files/upload_594db1ea036d584bc71de979ce57832b.PNG create mode 100644 src/server/public/files/upload_5bf829a0b264b321b9b17267ab06a11b.png create mode 100644 src/server/public/files/upload_5cba158af25fb2058c1b2e130cd3fefc.png create mode 100644 src/server/public/files/upload_5d5f91ac61a5e55192c1de4402483126.png create mode 100644 src/server/public/files/upload_5ea64a359728395c1608b8783f6fb192.PNG create mode 100644 src/server/public/files/upload_5f0bace6da44bc7084c6ad01fcfe1012.png create mode 100644 src/server/public/files/upload_5fe9f9fe6eb4a78dcde144c9d4e5d6bb.png create mode 100644 src/server/public/files/upload_604cd121c8ecb30eb4d13cded9ce8746.png create mode 100644 src/server/public/files/upload_60f89c7647c6ed08d977e485fea9e033.jpg create mode 100644 src/server/public/files/upload_62900e4354015fc2bc78f00afbc1bc21.png create mode 100644 src/server/public/files/upload_62f1a7fa74224de7248c62d6d4242fd0.jpg create mode 100644 src/server/public/files/upload_63a7127553e83f381212c80f607c6db5.png create mode 100644 src/server/public/files/upload_63c37ab66ad16d68ef96670b1d04ee1c.png create mode 100644 src/server/public/files/upload_665fb37c1505fdf48a665990caf09d26.png create mode 100644 src/server/public/files/upload_67c7a2ac39caabaac7b90861a1314b8f.png create mode 100644 src/server/public/files/upload_680394edbfb281065997525cc114f996.PNG create mode 100644 src/server/public/files/upload_684090a0c50a035aaa0df23c18043df8.png create mode 100644 src/server/public/files/upload_6bd24b1193058458d6ea268b06963931.PNG create mode 100644 src/server/public/files/upload_6bde8211989cf1b540b3c6dcf16cd51a.PNG create mode 100644 src/server/public/files/upload_6d5051266bd739f260105072299b5c79.png create mode 100644 src/server/public/files/upload_6d9a3ec37d85659265f2b622a6d24dcb.jpg create mode 100644 src/server/public/files/upload_6f222fae83f0185e361bf6a757ba9800.png create mode 100644 src/server/public/files/upload_6f5b0c8a474e44d76cbbea5f629e8fba.png create mode 100644 src/server/public/files/upload_7068f1e2ec782980b4eded2ff974da7f.jpg create mode 100644 src/server/public/files/upload_72c05840ea8bddc44575309923d4c63b.jpg create mode 100644 src/server/public/files/upload_73b42f2f26e037078c1f1c63913fc9aa.jpg create mode 100644 src/server/public/files/upload_7412310b57204cb3c36d5aba670589fc.PNG create mode 100644 src/server/public/files/upload_75d331ba20a80ca0f6fd18bc0b37b8b3.PNG create mode 100644 src/server/public/files/upload_77eab9365e5c11d5e1ac08fca6c862ab.png create mode 100644 src/server/public/files/upload_786b4b94fda60ba60da3dfe2be091b6b.png create mode 100644 src/server/public/files/upload_793745d2b6c8a5c3dbeea343b9332846.PNG create mode 100644 src/server/public/files/upload_7c369564861f079a17bd77081ace597b.PNG create mode 100644 src/server/public/files/upload_7c7f3f317ea27a2ddad9e8a34f636b78.png create mode 100644 src/server/public/files/upload_7f357bbbe7756dabad0b9cb49c9ceb0c.PNG create mode 100644 src/server/public/files/upload_814802d9faf217a7b09c1c95c4ecfd05.png create mode 100644 src/server/public/files/upload_83180cda4fa509f6ff0654376c1da7f2.jpg create mode 100644 src/server/public/files/upload_8321ece56de47e0bf5345fe30d23414e.PNG create mode 100644 src/server/public/files/upload_871f1af44ec7a2140f32433f3015d603.jpg create mode 100644 src/server/public/files/upload_892d1d9d981f679fedaa2c5bf193fd20.jpg create mode 100644 src/server/public/files/upload_89721bf0d244b1fcc52f70a7d9e3593b.jpg create mode 100644 src/server/public/files/upload_89e66f8d531a44a63fa3355602813ae7.png create mode 100644 src/server/public/files/upload_8a6090d2b978221d0810b954f7b14065.PNG create mode 100644 src/server/public/files/upload_8b92f6ffc9a8c8353fd141c6dc71895f.jpg create mode 100644 src/server/public/files/upload_8bfca62429aada8f6b5dae1dcde24cab.png create mode 100644 src/server/public/files/upload_8e9e27d1918f3a0a5f242397079e66fa.png create mode 100644 src/server/public/files/upload_8ef0953ff77d42848b6e7f37e9bd506d.PNG create mode 100644 src/server/public/files/upload_902c6b9c79da47ec00238f4831795077.jpg create mode 100644 src/server/public/files/upload_90d380b38492369c1470868b019f0d0c.jpg create mode 100644 src/server/public/files/upload_95af42b1b5db521aa1539980fe85e71a.jpg create mode 100644 src/server/public/files/upload_97031060c857a0e8f15af3fcc038a2b8.jpg create mode 100644 src/server/public/files/upload_97903efc6c08245acaea37eefacf289f.png create mode 100644 src/server/public/files/upload_9974b3459e182fef33b8e467058b7525.png create mode 100644 src/server/public/files/upload_9a8429dac8feba05bbda2b53b5da4efa.jpg create mode 100644 src/server/public/files/upload_9bbc86def05076b89080adcc37481324.jpg create mode 100644 src/server/public/files/upload_9cd52fc451f3d459021127a7d51d108b.png create mode 100644 src/server/public/files/upload_9de9f004f258cee8c55bf872362d6453.jpg create mode 100644 src/server/public/files/upload_a0286ae2a1eec8c31c8276ec067d91aa.png create mode 100644 src/server/public/files/upload_a04473da584e5a602d0f8984a670a91c.jpg create mode 100644 src/server/public/files/upload_a2cf3f6ab4ab5b249ebf8100e461aa27.png create mode 100644 src/server/public/files/upload_a3095034ec19353c9ee55221088f01d8.PNG create mode 100644 src/server/public/files/upload_a520a6856021104b8130f8d3b42d85c0.png create mode 100644 src/server/public/files/upload_a5c26f52ddcbd705ffbd3dfd7cd2ce40.jpg create mode 100644 src/server/public/files/upload_a60864ff7892974e941e42a2441e530d.png create mode 100644 src/server/public/files/upload_a77f86dbeaa0c3cecc2516f9d9cecf1d.png create mode 100644 src/server/public/files/upload_aa2bbeb0871a2d6b4b54524ac2758270.jpg create mode 100644 src/server/public/files/upload_aa9fec4828bfdfef3ae20d43997fb274.png create mode 100644 src/server/public/files/upload_ab2bba2cee88991561f20d7cd69ec6e1.png create mode 100644 src/server/public/files/upload_ae1c01e481fc6b753c78605bfbe680b9.png create mode 100644 src/server/public/files/upload_b0d25a0dccc640f78dcbc291f930b5d6.png create mode 100644 src/server/public/files/upload_b0e527b27b7cabf651b29c9d834d24f3.PNG create mode 100644 src/server/public/files/upload_b0ea7e49e84cf91075962a75c76d3233.png create mode 100644 src/server/public/files/upload_b1b334829e1d99d7cd32fae5044cc103.PNG create mode 100644 src/server/public/files/upload_b52adf6e1ecdbbe76aa3c038ddc3b02b.PNG create mode 100644 src/server/public/files/upload_b6c992aa6c434520887521e11bb5f492.png create mode 100644 src/server/public/files/upload_ba04eb816ef3bec770aa7eebf3b21cb1.PNG create mode 100644 src/server/public/files/upload_ba58066314a79d1c845241fb4400e44d.png create mode 100644 src/server/public/files/upload_bb6b521b4df6bd783d6a5b83a66caa0a.jpg create mode 100644 src/server/public/files/upload_bcb173a15068ded66b39623ab18bfdb7.jpg create mode 100644 src/server/public/files/upload_be4034faba6a5313dfb8a53e18ffc188.png create mode 100644 src/server/public/files/upload_be5f90995b34cd30d9a269b5a9f10fcc.PNG create mode 100644 src/server/public/files/upload_c1a964ca145f45e7e666cfaf7c8398e3.png create mode 100644 src/server/public/files/upload_c6764790a8182d796acddb76d3df595e.PNG create mode 100644 src/server/public/files/upload_c81bff72d05e0bb7f13376a46506ec2a.jpg create mode 100644 src/server/public/files/upload_c98c0184a19b621b2bc0575b49996a69.png create mode 100644 src/server/public/files/upload_cb4d875a9f73d1f735da5ae82dce6eb1.jpg create mode 100644 src/server/public/files/upload_cd08524995e5f124505fe3d7ab38a41f.png create mode 100644 src/server/public/files/upload_cd73b55488fcc7e5e5e5f2a4c43bc1fd.png create mode 100644 src/server/public/files/upload_ce357d5a6d727ac44110c60dd379428f.png create mode 100644 src/server/public/files/upload_d00c34a1e1c319a9373b5f136c38a866.jpg create mode 100644 src/server/public/files/upload_d242527805ab4c52f2385ae57b85e6fb.png create mode 100644 src/server/public/files/upload_d28007fa68c809cd3c0a78d4a8727275.png create mode 100644 src/server/public/files/upload_d35ea9c62bf8da0352a16193b880469e.jpg create mode 100644 src/server/public/files/upload_d4e0e9d2aee31b5931129dc3bc83e813.png create mode 100644 src/server/public/files/upload_d5801c03d9562a612d1907085ba39373.jpg create mode 100644 src/server/public/files/upload_d6d0e3a302e0edafa70785c39041e522.PNG create mode 100644 src/server/public/files/upload_d6e725cc697751599b177e0cf330b9f2.jpg create mode 100644 src/server/public/files/upload_d794d56fcab3b93b6c79aa201cba34f8.png create mode 100644 src/server/public/files/upload_d8abeaef04a42678432e5e1d3377a2d0.png create mode 100644 src/server/public/files/upload_dac5245c657d29c1c4dfba98472fb50d.pdf create mode 100644 src/server/public/files/upload_db3c5a0b560c9da35607359d86cf2b97.png create mode 100644 src/server/public/files/upload_dc8821dc596b1938c855e0affbe614dd.png create mode 100644 src/server/public/files/upload_df7697c4832990aad0e8d9f0daa1711b.png create mode 100644 src/server/public/files/upload_e009e45db30e47383fad5d71908dc69d.png create mode 100644 src/server/public/files/upload_e15738d092ff38197dc1fb41a4747d16.jpg create mode 100644 src/server/public/files/upload_e51079d9af97a412353d63c60e1ea96d.png create mode 100644 src/server/public/files/upload_e5422cdcfa80628842ff3aacf14ad25e.png create mode 100644 src/server/public/files/upload_e6256196c38216ac539ef7e8ee28ab02.png create mode 100644 src/server/public/files/upload_e9668199bd12c905f27be76b11366d68.png create mode 100644 src/server/public/files/upload_e98ebeeebd5f0ddc98ea9b3a2d9f40d2.png create mode 100644 src/server/public/files/upload_eb2f002129e0cfb5c940f6b4ecc5a8f2.jpg create mode 100644 src/server/public/files/upload_ec02ff06b3154d269086e23ebf6ad942.png create mode 100644 src/server/public/files/upload_ef3873102a70850a4da2040eab002c55.jpg create mode 100644 src/server/public/files/upload_f259c9aa37b0919d6d20ad8d75e8329e.png create mode 100644 src/server/public/files/upload_f48143c75b8c2412785e3ed31ebbb150.PNG create mode 100644 src/server/public/files/upload_f5347da10a373480807fc3469533b9fe.png create mode 100644 src/server/public/files/upload_f6e36f6d3de7a2036eeff617f186b78f.png create mode 100644 src/server/public/files/upload_f6f1ed7a268523278457de08ee61bcfa.PNG create mode 100644 src/server/public/files/upload_f73607b7cf818631165aca9d32ef19c5.jpg create mode 100644 src/server/public/files/upload_f804a6c7ec796718d66108af0b1e6d0e.png create mode 100644 src/server/public/files/upload_f9ed03ab046d7f579d6f531df9c4050a.PNG create mode 100644 src/server/public/files/upload_fac4f686367ad63f2fcc1d8b4f74f123.png create mode 100644 src/server/public/files/upload_faebd8bdc2b00efe50b232c9cf4e63b6.PNG create mode 100644 src/server/public/files/upload_fb3cc3a1d715a6ffa1c72bde91faf3af.png create mode 100644 src/server/public/files/upload_fe2dbe44900645eba61207748f63ade3.jpg create mode 100644 src/server/public/files/upload_ffd58755419ab98f03d56fedd16736e9.jpg (limited to 'src') diff --git a/src/client/util/TooltipTextMenu.tsx b/src/client/util/TooltipTextMenu.tsx index 2a613ba8b..3a6eadac0 100644 --- a/src/client/util/TooltipTextMenu.tsx +++ b/src/client/util/TooltipTextMenu.tsx @@ -49,7 +49,7 @@ export class TooltipTextMenu { e.preventDefault(); view.focus(); items.forEach(({ command, dom }) => { - if (dom.contains(e.srcElement)) { + if (e.srcElement && dom.contains(e.srcElement as Node)) { let active = command(view.state, view.dispatch, view); //uncomment this if we want the bullet button to disappear if current selection is bulleted // dom.style.display = active ? "" : "none" diff --git a/src/client/util/UndoManager.ts b/src/client/util/UndoManager.ts index 6d1b2f1b8..92a6c14e2 100644 --- a/src/client/util/UndoManager.ts +++ b/src/client/util/UndoManager.ts @@ -34,7 +34,20 @@ function propertyDecorator(target: any, key: string | symbol) { } }) } -export function undoBatch(target: any, key: string | symbol, descriptor?: TypedPropertyDescriptor): any { + +export function undoBatch(target: any, key: string | symbol, descriptor?: TypedPropertyDescriptor): any; +export function undoBatch(fn: (...args: any[]) => any): (...args: any[]) => any; +export function undoBatch(target: any, key?: string | symbol, descriptor?: TypedPropertyDescriptor): any { + if (!key) { + return function () { + let batch = UndoManager.StartBatch(""); + try { + return target.apply(undefined, arguments) + } finally { + batch.end(); + } + } + } if (!descriptor) { propertyDecorator(target, key); return; @@ -84,6 +97,7 @@ export namespace UndoManager { export function GetOpenBatches(): Without[] { return openBatches; } + export class Batch { private disposed: boolean = false; @@ -125,8 +139,11 @@ export namespace UndoManager { export function RunInBatch(fn: () => void, batchName: string) { let batch = StartBatch(batchName); - fn(); - batch.end(); + try { + fn(); + } finally { + batch.end(); + } } export const Undo = action(() => { diff --git a/src/client/views/InkingCanvas.tsx b/src/client/views/InkingCanvas.tsx index 123ff679b..f7a3601bc 100644 --- a/src/client/views/InkingCanvas.tsx +++ b/src/client/views/InkingCanvas.tsx @@ -10,6 +10,7 @@ import "./InkingCanvas.scss"; import { InkingControl } from "./InkingControl"; import { InkingStroke } from "./InkingStroke"; import React = require("react"); +import { undoBatch } from "../util/UndoManager"; interface InkCanvasProps { getScreenTransform: () => Transform; @@ -21,10 +22,13 @@ export class InkingCanvas extends React.Component { static InkOffset: number = 50000; private _currentStrokeId: string = ""; public static IntersectStrokeRect(stroke: StrokeData, selRect: { left: number, top: number, width: number, height: number }): boolean { - return stroke.pathData.reduce((inside, val) => inside || - (selRect.left < val.x - InkingCanvas.InkOffset && selRect.left + selRect.width > val.x - InkingCanvas.InkOffset && - selRect.top < val.y - InkingCanvas.InkOffset && selRect.top + selRect.height > val.y - InkingCanvas.InkOffset) - , false); + return stroke.pathData.reduce((inside: boolean, val) => inside || + ( + selRect.left < val.x - InkingCanvas.InkOffset && + selRect.left + selRect.width > val.x - InkingCanvas.InkOffset && + selRect.top < val.y - InkingCanvas.InkOffset && + selRect.top + selRect.height > val.y - InkingCanvas.InkOffset + ), false); } @computed @@ -83,7 +87,7 @@ export class InkingCanvas extends React.Component { } this.inkData = data; } - } + }; relativeCoordinatesForEvent = (ex: number, ey: number): { x: number, y: number } => { let [x, y] = this.props.getScreenTransform().transformPoint(ex, ey); diff --git a/src/client/views/InkingControl.tsx b/src/client/views/InkingControl.tsx index c1519dff8..dcaf472ca 100644 --- a/src/client/views/InkingControl.tsx +++ b/src/client/views/InkingControl.tsx @@ -21,7 +21,7 @@ export class InkingControl extends React.Component { @observable private _selectedColor: string = "rgb(244, 67, 54)"; @observable private _selectedWidth: string = "25"; @observable private _open: boolean = false; - @observable private _colorPickerDisplay: boolean = false; + @observable private _colorPickerDisplay = false; constructor(props: Readonly<{}>) { super(props); @@ -76,6 +76,7 @@ export class InkingControl extends React.Component { this._open = !this._open; } + @action toggleColorPicker = () => { this._colorPickerDisplay = !this._colorPickerDisplay; diff --git a/src/client/views/collections/CollectionDockingView.tsx b/src/client/views/collections/CollectionDockingView.tsx index 39e0dd989..4d9985db3 100644 --- a/src/client/views/collections/CollectionDockingView.tsx +++ b/src/client/views/collections/CollectionDockingView.tsx @@ -226,6 +226,7 @@ export class CollectionDockingView extends React.Component { this.stateChanged(); } + tabCreated = (tab: any) => { if (tab.hasOwnProperty("contentItem") && tab.contentItem.config.type != "stack") { if (tab.titleElement[0].textContent.indexOf("-waiting") != -1) { diff --git a/src/client/views/collections/CollectionView.tsx b/src/client/views/collections/CollectionView.tsx index 014aa1d8f..42ed3c86b 100644 --- a/src/client/views/collections/CollectionView.tsx +++ b/src/client/views/collections/CollectionView.tsx @@ -14,6 +14,7 @@ import { CollectionViewProps } from "./CollectionViewBase"; import { CollectionTreeView } from "./CollectionTreeView"; import { Field, FieldId, FieldWaiting } from "../../../fields/Field"; import { CurrentUserUtils } from "../../../server/authentication/models/current_user_utils"; +import { undoBatch } from "../../util/UndoManager"; export enum CollectionViewType { Invalid, @@ -134,9 +135,9 @@ export class CollectionView extends React.Component { specificContextMenu = (e: React.MouseEvent): void => { if (!e.isPropagationStopped() && this.props.Document.Id != CurrentUserUtils.MainDocId) { // need to test this because GoldenLayout causes a parallel hierarchy in the React DOM for its children and the main document view7 - ContextMenu.Instance.addItem({ description: "Freeform", event: () => this.props.Document.SetNumber(KeyStore.ViewType, CollectionViewType.Freeform) }) - ContextMenu.Instance.addItem({ description: "Schema", event: () => this.props.Document.SetNumber(KeyStore.ViewType, CollectionViewType.Schema) }) - ContextMenu.Instance.addItem({ description: "Treeview", event: () => this.props.Document.SetNumber(KeyStore.ViewType, CollectionViewType.Tree) }) + ContextMenu.Instance.addItem({ description: "Freeform", event: undoBatch(() => this.props.Document.SetNumber(KeyStore.ViewType, CollectionViewType.Freeform)) }) + ContextMenu.Instance.addItem({ description: "Schema", event: undoBatch(() => this.props.Document.SetNumber(KeyStore.ViewType, CollectionViewType.Schema)) }) + ContextMenu.Instance.addItem({ description: "Treeview", event: undoBatch(() => this.props.Document.SetNumber(KeyStore.ViewType, CollectionViewType.Tree)) }) } } diff --git a/src/client/views/collections/CollectionViewBase.tsx b/src/client/views/collections/CollectionViewBase.tsx index 316d20c9d..2042b2712 100644 --- a/src/client/views/collections/CollectionViewBase.tsx +++ b/src/client/views/collections/CollectionViewBase.tsx @@ -4,7 +4,7 @@ import { ListField } from "../../../fields/ListField"; import React = require("react"); import { KeyStore } from "../../../fields/KeyStore"; import { FieldWaiting, Opt } from "../../../fields/Field"; -import { undoBatch } from "../../util/UndoManager"; +import { undoBatch, UndoManager } from "../../util/UndoManager"; import { DragManager } from "../../util/DragManager"; import { Documents, DocumentOptions } from "../../documents/Documents"; import { Key } from "../../../fields/Key"; @@ -14,9 +14,10 @@ import { RouteStore } from "../../../server/RouteStore"; import { TupleField } from "../../../fields/TupleField"; import { CurrentUserUtils } from "../../../server/authentication/models/current_user_utils"; import { NumberField } from "../../../fields/NumberField"; -import request = require("request"); +import * as rp from "request-promise"; import { ServerUtils } from "../../../server/ServerUtil"; import { Server } from "../../Server"; +import { emptyStatement } from "babel-types"; export interface CollectionViewProps { fieldKey: Key; @@ -130,6 +131,7 @@ export class CollectionViewBase extends React.Component return ctor ? ctor(path, options) : undefined; } + @undoBatch @action protected onDrop(e: React.DragEvent, options: DocumentOptions): void { let that = this; @@ -151,23 +153,28 @@ export class CollectionViewBase extends React.Component return; } + let batch = UndoManager.StartBatch("collection view drop"); + let promises: Promise[] = []; for (let i = 0; i < e.dataTransfer.items.length; i++) { const upload = window.location.origin + RouteStore.upload; let item = e.dataTransfer.items[i]; if (item.kind === "string" && item.type.indexOf("uri") != -1) { - e.dataTransfer.items[i].getAsString(action((s: string) => { - let document: Document; - request.head(ServerUtils.prepend(RouteStore.corsProxy + "/" + s), (err, res, body) => { + let str: string; + let prom = new Promise(res => + e.dataTransfer.items[i].getAsString(res)).then(action((s: string) => { + str = s; + return rp.head(ServerUtils.prepend(RouteStore.corsProxy + "/" + s)) + })).then(res => { let type = res.headers["content-type"]; if (type) { - let doc = this.getDocumentFromType(type, s, { ...options, width: 300, nativeWidth: 300 }) + let doc = this.getDocumentFromType(type, str, { ...options, width: 300, nativeWidth: 300 }) if (doc) { this.props.addDocument(doc, false); } } }); - // this.props.addDocument(Documents.WebDocument(s, { ...options, width: 300, height: 300 }), false) - })) + promises.push(prom); + // this.props.addDocument(Documents.WebDocument(s, { ...options, width: 300, height: 300 }), false) } let type = item.type if (item.kind == "file") { @@ -178,31 +185,36 @@ export class CollectionViewBase extends React.Component formData.append('file', file) } - fetch(upload, { + let prom = fetch(upload, { method: 'POST', body: formData }).then((res: Response) => { return res.json() }).then(json => { - json.map((file: any) => { + json.map(action((file: any) => { let path = window.location.origin + file - runInAction(() => { - let doc = this.getDocumentFromType(type, path, { ...options, nativeWidth: 300, width: 300 }) - - let docs = that.props.Document.GetT(KeyStore.Data, ListField); - if (docs != FieldWaiting) { - if (!docs) { - docs = new ListField(); - that.props.Document.Set(KeyStore.Data, docs) - } - if (doc) { - docs.Data.push(doc); - } + let doc = this.getDocumentFromType(type, path, { ...options, nativeWidth: 300, width: 300 }) + + let docs = that.props.Document.GetT(KeyStore.Data, ListField); + if (docs != FieldWaiting) { + if (!docs) { + docs = new ListField(); + that.props.Document.Set(KeyStore.Data, docs) + } + if (doc) { + docs.Data.push(doc); } - }) - }) + } + })) }) + promises.push(prom); } } + + if (promises.length) { + Promise.all(promises).catch(() => { }).then(() => batch.end()); + } else { + batch.end(); + } } } diff --git a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx index c5178f69d..2dcf645d0 100644 --- a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx +++ b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx @@ -188,7 +188,7 @@ export class CollectionFreeFormView extends CollectionViewBase { onDrop = (e: React.DragEvent): void => { var pt = this.getTransform().transformPoint(e.pageX, e.pageY); super.onDrop(e, { x: pt[0], y: pt[1] }); - } + }; onDragOver = (): void => { } diff --git a/src/client/views/nodes/PDFBox.tsx b/src/client/views/nodes/PDFBox.tsx index 28a1f9757..ba022b007 100644 --- a/src/client/views/nodes/PDFBox.tsx +++ b/src/client/views/nodes/PDFBox.tsx @@ -151,7 +151,7 @@ export class PDFBox extends React.Component { */ makeEditableAndHighlight = (colour: string) => { var range, sel = window.getSelection(); - if (sel.rangeCount && sel.getRangeAt) { + if (sel && sel.rangeCount && sel.getRangeAt) { range = sel.getRangeAt(0); } document.designMode = "on"; @@ -159,7 +159,7 @@ export class PDFBox extends React.Component { document.execCommand("HiliteColor", false, colour); } - if (range) { + if (sel && range) { sel.removeAllRanges(); sel.addRange(range); diff --git a/src/server/database.ts b/src/server/database.ts index a42d29aac..374cedcbb 100644 --- a/src/server/database.ts +++ b/src/server/database.ts @@ -26,9 +26,9 @@ export class Database { console.log(err.message); console.log(err.errmsg); } - if (res) { - console.log(JSON.stringify(res.result)); - } + // if (res) { + // console.log(JSON.stringify(res.result)); + // } callback() }); } diff --git a/src/server/public/files/upload_011289d8c22f5422cf6f7e27a8c780ef.jpg b/src/server/public/files/upload_011289d8c22f5422cf6f7e27a8c780ef.jpg new file mode 100644 index 000000000..bb78e4c23 Binary files /dev/null and b/src/server/public/files/upload_011289d8c22f5422cf6f7e27a8c780ef.jpg differ diff --git a/src/server/public/files/upload_01b38428ccc02261e24689b9d887b206.PNG b/src/server/public/files/upload_01b38428ccc02261e24689b9d887b206.PNG new file mode 100644 index 000000000..2b64654dd Binary files /dev/null and b/src/server/public/files/upload_01b38428ccc02261e24689b9d887b206.PNG differ diff --git a/src/server/public/files/upload_01e81815633ee270c8b4ffca88a7773e.jpg b/src/server/public/files/upload_01e81815633ee270c8b4ffca88a7773e.jpg new file mode 100644 index 000000000..bb78e4c23 Binary files /dev/null and b/src/server/public/files/upload_01e81815633ee270c8b4ffca88a7773e.jpg differ diff --git a/src/server/public/files/upload_031371580a23b87aaafb587ece875819.png b/src/server/public/files/upload_031371580a23b87aaafb587ece875819.png new file mode 100644 index 000000000..0bacb6189 Binary files /dev/null and b/src/server/public/files/upload_031371580a23b87aaafb587ece875819.png differ diff --git a/src/server/public/files/upload_03c44479fe728bbcc2f76dab407544d5.png b/src/server/public/files/upload_03c44479fe728bbcc2f76dab407544d5.png new file mode 100644 index 000000000..2ff127e97 Binary files /dev/null and b/src/server/public/files/upload_03c44479fe728bbcc2f76dab407544d5.png differ diff --git a/src/server/public/files/upload_05ceaf4112a0e3754a53ab59f4b1ff07.png b/src/server/public/files/upload_05ceaf4112a0e3754a53ab59f4b1ff07.png new file mode 100644 index 000000000..23e8efe47 Binary files /dev/null and b/src/server/public/files/upload_05ceaf4112a0e3754a53ab59f4b1ff07.png differ diff --git a/src/server/public/files/upload_061bdf72416cbef898d4cd1a0152ce1f.jpg b/src/server/public/files/upload_061bdf72416cbef898d4cd1a0152ce1f.jpg new file mode 100644 index 000000000..bb78e4c23 Binary files /dev/null and b/src/server/public/files/upload_061bdf72416cbef898d4cd1a0152ce1f.jpg differ diff --git a/src/server/public/files/upload_07488f31d6eacb28458c11eb982fa654.jpg b/src/server/public/files/upload_07488f31d6eacb28458c11eb982fa654.jpg new file mode 100644 index 000000000..bb78e4c23 Binary files /dev/null and b/src/server/public/files/upload_07488f31d6eacb28458c11eb982fa654.jpg differ diff --git a/src/server/public/files/upload_08afadab5ded674ec3f244b2bd124b8b.PNG b/src/server/public/files/upload_08afadab5ded674ec3f244b2bd124b8b.PNG new file mode 100644 index 000000000..2b64654dd Binary files /dev/null and b/src/server/public/files/upload_08afadab5ded674ec3f244b2bd124b8b.PNG differ diff --git a/src/server/public/files/upload_09df67e3e4c3bcd2a571d8be5f0acf48.PNG b/src/server/public/files/upload_09df67e3e4c3bcd2a571d8be5f0acf48.PNG new file mode 100644 index 000000000..9105f02e3 Binary files /dev/null and b/src/server/public/files/upload_09df67e3e4c3bcd2a571d8be5f0acf48.PNG differ diff --git a/src/server/public/files/upload_10b64e99df3aac032564573c3699bda4.png b/src/server/public/files/upload_10b64e99df3aac032564573c3699bda4.png new file mode 100644 index 000000000..2ff127e97 Binary files /dev/null and b/src/server/public/files/upload_10b64e99df3aac032564573c3699bda4.png differ diff --git a/src/server/public/files/upload_11162dd1b00ed2a26923aa9d2fa9889e.png b/src/server/public/files/upload_11162dd1b00ed2a26923aa9d2fa9889e.png new file mode 100644 index 000000000..0bacb6189 Binary files /dev/null and b/src/server/public/files/upload_11162dd1b00ed2a26923aa9d2fa9889e.png differ diff --git a/src/server/public/files/upload_115d44864ee866f2986188501a59342b.png b/src/server/public/files/upload_115d44864ee866f2986188501a59342b.png new file mode 100644 index 000000000..2ff127e97 Binary files /dev/null and b/src/server/public/files/upload_115d44864ee866f2986188501a59342b.png differ diff --git a/src/server/public/files/upload_1465783317d01ed75e87e169b56928fd.PNG b/src/server/public/files/upload_1465783317d01ed75e87e169b56928fd.PNG new file mode 100644 index 000000000..2b64654dd Binary files /dev/null and b/src/server/public/files/upload_1465783317d01ed75e87e169b56928fd.PNG differ diff --git a/src/server/public/files/upload_156cb9406f94654dea0e227e377f0a75.PNG b/src/server/public/files/upload_156cb9406f94654dea0e227e377f0a75.PNG new file mode 100644 index 000000000..9105f02e3 Binary files /dev/null and b/src/server/public/files/upload_156cb9406f94654dea0e227e377f0a75.PNG differ diff --git a/src/server/public/files/upload_166eb5d1d46cf268a59e01b4b32528cd.PNG b/src/server/public/files/upload_166eb5d1d46cf268a59e01b4b32528cd.PNG new file mode 100644 index 000000000..9105f02e3 Binary files /dev/null and b/src/server/public/files/upload_166eb5d1d46cf268a59e01b4b32528cd.PNG differ diff --git a/src/server/public/files/upload_17d2b2f3ec801e6fdcc6d29e523e946b.PNG b/src/server/public/files/upload_17d2b2f3ec801e6fdcc6d29e523e946b.PNG new file mode 100644 index 000000000..9105f02e3 Binary files /dev/null and b/src/server/public/files/upload_17d2b2f3ec801e6fdcc6d29e523e946b.PNG differ diff --git a/src/server/public/files/upload_1863f67c2c193452cc5192f0ebac2a7b.png b/src/server/public/files/upload_1863f67c2c193452cc5192f0ebac2a7b.png new file mode 100644 index 000000000..23e8efe47 Binary files /dev/null and b/src/server/public/files/upload_1863f67c2c193452cc5192f0ebac2a7b.png differ diff --git a/src/server/public/files/upload_18d64bf4a483e78a36153abcd26af503.png b/src/server/public/files/upload_18d64bf4a483e78a36153abcd26af503.png new file mode 100644 index 000000000..c178a9106 Binary files /dev/null and b/src/server/public/files/upload_18d64bf4a483e78a36153abcd26af503.png differ diff --git a/src/server/public/files/upload_1a7925dd1140a2b5a7cc5c62ad20a8e8.png b/src/server/public/files/upload_1a7925dd1140a2b5a7cc5c62ad20a8e8.png new file mode 100644 index 000000000..c178a9106 Binary files /dev/null and b/src/server/public/files/upload_1a7925dd1140a2b5a7cc5c62ad20a8e8.png differ diff --git a/src/server/public/files/upload_1c47eb68831fff82bc6982e5df4d02d5.PNG b/src/server/public/files/upload_1c47eb68831fff82bc6982e5df4d02d5.PNG new file mode 100644 index 000000000..2b64654dd Binary files /dev/null and b/src/server/public/files/upload_1c47eb68831fff82bc6982e5df4d02d5.PNG differ diff --git a/src/server/public/files/upload_1c8f6233068ed1535384500768557e68.png b/src/server/public/files/upload_1c8f6233068ed1535384500768557e68.png new file mode 100644 index 000000000..c178a9106 Binary files /dev/null and b/src/server/public/files/upload_1c8f6233068ed1535384500768557e68.png differ diff --git a/src/server/public/files/upload_1ea7ee56753d0327192da9666de9e305.PNG b/src/server/public/files/upload_1ea7ee56753d0327192da9666de9e305.PNG new file mode 100644 index 000000000..acd759e09 Binary files /dev/null and b/src/server/public/files/upload_1ea7ee56753d0327192da9666de9e305.PNG differ diff --git a/src/server/public/files/upload_2098441ee0ad89e51e825e2fb5f641d2.png b/src/server/public/files/upload_2098441ee0ad89e51e825e2fb5f641d2.png new file mode 100644 index 000000000..0bacb6189 Binary files /dev/null and b/src/server/public/files/upload_2098441ee0ad89e51e825e2fb5f641d2.png differ diff --git a/src/server/public/files/upload_23a30791fc2afceb92310a665d364dbd.jpg b/src/server/public/files/upload_23a30791fc2afceb92310a665d364dbd.jpg new file mode 100644 index 000000000..bb78e4c23 Binary files /dev/null and b/src/server/public/files/upload_23a30791fc2afceb92310a665d364dbd.jpg differ diff --git a/src/server/public/files/upload_2436e82c2c54dd8f33f74e4440d11104.png b/src/server/public/files/upload_2436e82c2c54dd8f33f74e4440d11104.png new file mode 100644 index 000000000..2ff127e97 Binary files /dev/null and b/src/server/public/files/upload_2436e82c2c54dd8f33f74e4440d11104.png differ diff --git a/src/server/public/files/upload_2443e73bbbd67712bcedc04f0ead5617.PNG b/src/server/public/files/upload_2443e73bbbd67712bcedc04f0ead5617.PNG new file mode 100644 index 000000000..acd759e09 Binary files /dev/null and b/src/server/public/files/upload_2443e73bbbd67712bcedc04f0ead5617.PNG differ diff --git a/src/server/public/files/upload_2515fc22ce67c256bf3039bc84e54432.jpg b/src/server/public/files/upload_2515fc22ce67c256bf3039bc84e54432.jpg new file mode 100644 index 000000000..756f4572f Binary files /dev/null and b/src/server/public/files/upload_2515fc22ce67c256bf3039bc84e54432.jpg differ diff --git a/src/server/public/files/upload_280bb85121601366f65632649edd9425.jpg b/src/server/public/files/upload_280bb85121601366f65632649edd9425.jpg new file mode 100644 index 000000000..756f4572f Binary files /dev/null and b/src/server/public/files/upload_280bb85121601366f65632649edd9425.jpg differ diff --git a/src/server/public/files/upload_284a94d4ba485d6799ee772521846a59.jpg b/src/server/public/files/upload_284a94d4ba485d6799ee772521846a59.jpg new file mode 100644 index 000000000..bb78e4c23 Binary files /dev/null and b/src/server/public/files/upload_284a94d4ba485d6799ee772521846a59.jpg differ diff --git a/src/server/public/files/upload_28550bbb245dfbe9b24b2354ed349f0c.jpg b/src/server/public/files/upload_28550bbb245dfbe9b24b2354ed349f0c.jpg new file mode 100644 index 000000000..bb78e4c23 Binary files /dev/null and b/src/server/public/files/upload_28550bbb245dfbe9b24b2354ed349f0c.jpg differ diff --git a/src/server/public/files/upload_2abbef5268ab7ca77dad96775cb52345.png b/src/server/public/files/upload_2abbef5268ab7ca77dad96775cb52345.png new file mode 100644 index 000000000..23e8efe47 Binary files /dev/null and b/src/server/public/files/upload_2abbef5268ab7ca77dad96775cb52345.png differ diff --git a/src/server/public/files/upload_2b5ec0fba66b5b3b5e47a2c53a1005be.jpg b/src/server/public/files/upload_2b5ec0fba66b5b3b5e47a2c53a1005be.jpg new file mode 100644 index 000000000..bb78e4c23 Binary files /dev/null and b/src/server/public/files/upload_2b5ec0fba66b5b3b5e47a2c53a1005be.jpg differ diff --git a/src/server/public/files/upload_2b6f66b8972b2f4991239720bb1df7d4.png b/src/server/public/files/upload_2b6f66b8972b2f4991239720bb1df7d4.png new file mode 100644 index 000000000..23e8efe47 Binary files /dev/null and b/src/server/public/files/upload_2b6f66b8972b2f4991239720bb1df7d4.png differ diff --git a/src/server/public/files/upload_2b75a95a64abfe997aa8e12a69d2bc43.png b/src/server/public/files/upload_2b75a95a64abfe997aa8e12a69d2bc43.png new file mode 100644 index 000000000..5bac81362 Binary files /dev/null and b/src/server/public/files/upload_2b75a95a64abfe997aa8e12a69d2bc43.png differ diff --git a/src/server/public/files/upload_2c689fe57038ad6a324297e92badd705.png b/src/server/public/files/upload_2c689fe57038ad6a324297e92badd705.png new file mode 100644 index 000000000..c178a9106 Binary files /dev/null and b/src/server/public/files/upload_2c689fe57038ad6a324297e92badd705.png differ diff --git a/src/server/public/files/upload_2d86441185e38ed16bbf4234d8857e13.PNG b/src/server/public/files/upload_2d86441185e38ed16bbf4234d8857e13.PNG new file mode 100644 index 000000000..2b64654dd Binary files /dev/null and b/src/server/public/files/upload_2d86441185e38ed16bbf4234d8857e13.PNG differ diff --git a/src/server/public/files/upload_2e68bb961e82faddbaa501c5c4e51795.png b/src/server/public/files/upload_2e68bb961e82faddbaa501c5c4e51795.png new file mode 100644 index 000000000..23e8efe47 Binary files /dev/null and b/src/server/public/files/upload_2e68bb961e82faddbaa501c5c4e51795.png differ diff --git a/src/server/public/files/upload_303438040b77efc92ad5a6617edf7000.png b/src/server/public/files/upload_303438040b77efc92ad5a6617edf7000.png new file mode 100644 index 000000000..0bacb6189 Binary files /dev/null and b/src/server/public/files/upload_303438040b77efc92ad5a6617edf7000.png differ diff --git a/src/server/public/files/upload_303b28fc64dd65c58382fe2b0a513190.jpg b/src/server/public/files/upload_303b28fc64dd65c58382fe2b0a513190.jpg new file mode 100644 index 000000000..756f4572f Binary files /dev/null and b/src/server/public/files/upload_303b28fc64dd65c58382fe2b0a513190.jpg differ diff --git a/src/server/public/files/upload_319f73a65644974e6502a79dfb60b777.jpg b/src/server/public/files/upload_319f73a65644974e6502a79dfb60b777.jpg new file mode 100644 index 000000000..bb78e4c23 Binary files /dev/null and b/src/server/public/files/upload_319f73a65644974e6502a79dfb60b777.jpg differ diff --git a/src/server/public/files/upload_33290055bf62326211eb846bc32d7ab9.PNG b/src/server/public/files/upload_33290055bf62326211eb846bc32d7ab9.PNG new file mode 100644 index 000000000..2b64654dd Binary files /dev/null and b/src/server/public/files/upload_33290055bf62326211eb846bc32d7ab9.PNG differ diff --git a/src/server/public/files/upload_352949a7d58209759d0ab420726acce3.png b/src/server/public/files/upload_352949a7d58209759d0ab420726acce3.png new file mode 100644 index 000000000..c178a9106 Binary files /dev/null and b/src/server/public/files/upload_352949a7d58209759d0ab420726acce3.png differ diff --git a/src/server/public/files/upload_365e7ad24d7b896dc24525068e8f0fba.png b/src/server/public/files/upload_365e7ad24d7b896dc24525068e8f0fba.png new file mode 100644 index 000000000..0bacb6189 Binary files /dev/null and b/src/server/public/files/upload_365e7ad24d7b896dc24525068e8f0fba.png differ diff --git a/src/server/public/files/upload_38001ea16c21a82601586e9d7c823e5f.png b/src/server/public/files/upload_38001ea16c21a82601586e9d7c823e5f.png new file mode 100644 index 000000000..c178a9106 Binary files /dev/null and b/src/server/public/files/upload_38001ea16c21a82601586e9d7c823e5f.png differ diff --git a/src/server/public/files/upload_3bb64e7eb87805eb7c2c67352ab3e3f6.PNG b/src/server/public/files/upload_3bb64e7eb87805eb7c2c67352ab3e3f6.PNG new file mode 100644 index 000000000..2b64654dd Binary files /dev/null and b/src/server/public/files/upload_3bb64e7eb87805eb7c2c67352ab3e3f6.PNG differ diff --git a/src/server/public/files/upload_3cb5a8a9454a1b42a69a3d274c0a00e7.png b/src/server/public/files/upload_3cb5a8a9454a1b42a69a3d274c0a00e7.png new file mode 100644 index 000000000..23e8efe47 Binary files /dev/null and b/src/server/public/files/upload_3cb5a8a9454a1b42a69a3d274c0a00e7.png differ diff --git a/src/server/public/files/upload_3db8e110c40cb0770e79a61171eba542.jpg b/src/server/public/files/upload_3db8e110c40cb0770e79a61171eba542.jpg new file mode 100644 index 000000000..bb78e4c23 Binary files /dev/null and b/src/server/public/files/upload_3db8e110c40cb0770e79a61171eba542.jpg differ diff --git a/src/server/public/files/upload_41fc781a82b1f33b631e5aa68c6a1a76.PNG b/src/server/public/files/upload_41fc781a82b1f33b631e5aa68c6a1a76.PNG new file mode 100644 index 000000000..acd759e09 Binary files /dev/null and b/src/server/public/files/upload_41fc781a82b1f33b631e5aa68c6a1a76.PNG differ diff --git a/src/server/public/files/upload_42ecb2422b80f6da3afb62543391f58c.PNG b/src/server/public/files/upload_42ecb2422b80f6da3afb62543391f58c.PNG new file mode 100644 index 000000000..9105f02e3 Binary files /dev/null and b/src/server/public/files/upload_42ecb2422b80f6da3afb62543391f58c.PNG differ diff --git a/src/server/public/files/upload_431be602a66059169d1f4c4cd4646476.PNG b/src/server/public/files/upload_431be602a66059169d1f4c4cd4646476.PNG new file mode 100644 index 000000000..2b64654dd Binary files /dev/null and b/src/server/public/files/upload_431be602a66059169d1f4c4cd4646476.PNG differ diff --git a/src/server/public/files/upload_4543a61bc7c5f79c788b749a9ce7535a.PNG b/src/server/public/files/upload_4543a61bc7c5f79c788b749a9ce7535a.PNG new file mode 100644 index 000000000..9105f02e3 Binary files /dev/null and b/src/server/public/files/upload_4543a61bc7c5f79c788b749a9ce7535a.PNG differ diff --git a/src/server/public/files/upload_45e88f05b821eca6b85c1fc7b048af63.jpg b/src/server/public/files/upload_45e88f05b821eca6b85c1fc7b048af63.jpg new file mode 100644 index 000000000..756f4572f Binary files /dev/null and b/src/server/public/files/upload_45e88f05b821eca6b85c1fc7b048af63.jpg differ diff --git a/src/server/public/files/upload_493879305f109a4412223137f7031944.png b/src/server/public/files/upload_493879305f109a4412223137f7031944.png new file mode 100644 index 000000000..23e8efe47 Binary files /dev/null and b/src/server/public/files/upload_493879305f109a4412223137f7031944.png differ diff --git a/src/server/public/files/upload_49ac63665b883ea4702733fc8d70f6b1.PNG b/src/server/public/files/upload_49ac63665b883ea4702733fc8d70f6b1.PNG new file mode 100644 index 000000000..2b64654dd Binary files /dev/null and b/src/server/public/files/upload_49ac63665b883ea4702733fc8d70f6b1.PNG differ diff --git a/src/server/public/files/upload_4bc2bdf9a392b8e567b964f59cfd32a8.PNG b/src/server/public/files/upload_4bc2bdf9a392b8e567b964f59cfd32a8.PNG new file mode 100644 index 000000000..9105f02e3 Binary files /dev/null and b/src/server/public/files/upload_4bc2bdf9a392b8e567b964f59cfd32a8.PNG differ diff --git a/src/server/public/files/upload_4e4560c1f0081b87af4c010792d799fc.jpg b/src/server/public/files/upload_4e4560c1f0081b87af4c010792d799fc.jpg new file mode 100644 index 000000000..756f4572f Binary files /dev/null and b/src/server/public/files/upload_4e4560c1f0081b87af4c010792d799fc.jpg differ diff --git a/src/server/public/files/upload_4e56e150f5c92f8980c4df49603747cc.png b/src/server/public/files/upload_4e56e150f5c92f8980c4df49603747cc.png new file mode 100644 index 000000000..23e8efe47 Binary files /dev/null and b/src/server/public/files/upload_4e56e150f5c92f8980c4df49603747cc.png differ diff --git a/src/server/public/files/upload_4e897855f35d0aa419d27bfaedae4435.png b/src/server/public/files/upload_4e897855f35d0aa419d27bfaedae4435.png new file mode 100644 index 000000000..2ff127e97 Binary files /dev/null and b/src/server/public/files/upload_4e897855f35d0aa419d27bfaedae4435.png differ diff --git a/src/server/public/files/upload_5495509165b60d3c04b8e509a7d187ba.PNG b/src/server/public/files/upload_5495509165b60d3c04b8e509a7d187ba.PNG new file mode 100644 index 000000000..2b64654dd Binary files /dev/null and b/src/server/public/files/upload_5495509165b60d3c04b8e509a7d187ba.PNG differ diff --git a/src/server/public/files/upload_54d3dcb522f9fe3beb060103248a5ee9.png b/src/server/public/files/upload_54d3dcb522f9fe3beb060103248a5ee9.png new file mode 100644 index 000000000..2ff127e97 Binary files /dev/null and b/src/server/public/files/upload_54d3dcb522f9fe3beb060103248a5ee9.png differ diff --git a/src/server/public/files/upload_568996cd49829901200e1bec2b49a176.PNG b/src/server/public/files/upload_568996cd49829901200e1bec2b49a176.PNG new file mode 100644 index 000000000..9105f02e3 Binary files /dev/null and b/src/server/public/files/upload_568996cd49829901200e1bec2b49a176.PNG differ diff --git a/src/server/public/files/upload_5757898e2b8507438e1bdaf7b7fee4bb.png b/src/server/public/files/upload_5757898e2b8507438e1bdaf7b7fee4bb.png new file mode 100644 index 000000000..2ff127e97 Binary files /dev/null and b/src/server/public/files/upload_5757898e2b8507438e1bdaf7b7fee4bb.png differ diff --git a/src/server/public/files/upload_57c4353c9d3250bac49753be6b8973c6.png b/src/server/public/files/upload_57c4353c9d3250bac49753be6b8973c6.png new file mode 100644 index 000000000..c178a9106 Binary files /dev/null and b/src/server/public/files/upload_57c4353c9d3250bac49753be6b8973c6.png differ diff --git a/src/server/public/files/upload_57f2901b84275f3e40ca9d41cb7c057d.PNG b/src/server/public/files/upload_57f2901b84275f3e40ca9d41cb7c057d.PNG new file mode 100644 index 000000000..2b64654dd Binary files /dev/null and b/src/server/public/files/upload_57f2901b84275f3e40ca9d41cb7c057d.PNG differ diff --git a/src/server/public/files/upload_580d262f8a55c2fe3acbc6f0e690ad56.png b/src/server/public/files/upload_580d262f8a55c2fe3acbc6f0e690ad56.png new file mode 100644 index 000000000..23e8efe47 Binary files /dev/null and b/src/server/public/files/upload_580d262f8a55c2fe3acbc6f0e690ad56.png differ diff --git a/src/server/public/files/upload_58782b7ba1ac3963c4fdd5a987bf0aca.PNG b/src/server/public/files/upload_58782b7ba1ac3963c4fdd5a987bf0aca.PNG new file mode 100644 index 000000000..9105f02e3 Binary files /dev/null and b/src/server/public/files/upload_58782b7ba1ac3963c4fdd5a987bf0aca.PNG differ diff --git a/src/server/public/files/upload_588f580df306a338f7be0483dc30d576.jpg b/src/server/public/files/upload_588f580df306a338f7be0483dc30d576.jpg new file mode 100644 index 000000000..756f4572f Binary files /dev/null and b/src/server/public/files/upload_588f580df306a338f7be0483dc30d576.jpg differ diff --git a/src/server/public/files/upload_590c965f849c296ae3841689ce80b548.png b/src/server/public/files/upload_590c965f849c296ae3841689ce80b548.png new file mode 100644 index 000000000..c178a9106 Binary files /dev/null and b/src/server/public/files/upload_590c965f849c296ae3841689ce80b548.png differ diff --git a/src/server/public/files/upload_5915c6516d7a7db8164f7e395b81973e.PNG b/src/server/public/files/upload_5915c6516d7a7db8164f7e395b81973e.PNG new file mode 100644 index 000000000..9105f02e3 Binary files /dev/null and b/src/server/public/files/upload_5915c6516d7a7db8164f7e395b81973e.PNG differ diff --git a/src/server/public/files/upload_594db1ea036d584bc71de979ce57832b.PNG b/src/server/public/files/upload_594db1ea036d584bc71de979ce57832b.PNG new file mode 100644 index 000000000..2b64654dd Binary files /dev/null and b/src/server/public/files/upload_594db1ea036d584bc71de979ce57832b.PNG differ diff --git a/src/server/public/files/upload_5bf829a0b264b321b9b17267ab06a11b.png b/src/server/public/files/upload_5bf829a0b264b321b9b17267ab06a11b.png new file mode 100644 index 000000000..c178a9106 Binary files /dev/null and b/src/server/public/files/upload_5bf829a0b264b321b9b17267ab06a11b.png differ diff --git a/src/server/public/files/upload_5cba158af25fb2058c1b2e130cd3fefc.png b/src/server/public/files/upload_5cba158af25fb2058c1b2e130cd3fefc.png new file mode 100644 index 000000000..23e8efe47 Binary files /dev/null and b/src/server/public/files/upload_5cba158af25fb2058c1b2e130cd3fefc.png differ diff --git a/src/server/public/files/upload_5d5f91ac61a5e55192c1de4402483126.png b/src/server/public/files/upload_5d5f91ac61a5e55192c1de4402483126.png new file mode 100644 index 000000000..2ff127e97 Binary files /dev/null and b/src/server/public/files/upload_5d5f91ac61a5e55192c1de4402483126.png differ diff --git a/src/server/public/files/upload_5ea64a359728395c1608b8783f6fb192.PNG b/src/server/public/files/upload_5ea64a359728395c1608b8783f6fb192.PNG new file mode 100644 index 000000000..9105f02e3 Binary files /dev/null and b/src/server/public/files/upload_5ea64a359728395c1608b8783f6fb192.PNG differ diff --git a/src/server/public/files/upload_5f0bace6da44bc7084c6ad01fcfe1012.png b/src/server/public/files/upload_5f0bace6da44bc7084c6ad01fcfe1012.png new file mode 100644 index 000000000..0bacb6189 Binary files /dev/null and b/src/server/public/files/upload_5f0bace6da44bc7084c6ad01fcfe1012.png differ diff --git a/src/server/public/files/upload_5fe9f9fe6eb4a78dcde144c9d4e5d6bb.png b/src/server/public/files/upload_5fe9f9fe6eb4a78dcde144c9d4e5d6bb.png new file mode 100644 index 000000000..2ff127e97 Binary files /dev/null and b/src/server/public/files/upload_5fe9f9fe6eb4a78dcde144c9d4e5d6bb.png differ diff --git a/src/server/public/files/upload_604cd121c8ecb30eb4d13cded9ce8746.png b/src/server/public/files/upload_604cd121c8ecb30eb4d13cded9ce8746.png new file mode 100644 index 000000000..c178a9106 Binary files /dev/null and b/src/server/public/files/upload_604cd121c8ecb30eb4d13cded9ce8746.png differ diff --git a/src/server/public/files/upload_60f89c7647c6ed08d977e485fea9e033.jpg b/src/server/public/files/upload_60f89c7647c6ed08d977e485fea9e033.jpg new file mode 100644 index 000000000..bb78e4c23 Binary files /dev/null and b/src/server/public/files/upload_60f89c7647c6ed08d977e485fea9e033.jpg differ diff --git a/src/server/public/files/upload_62900e4354015fc2bc78f00afbc1bc21.png b/src/server/public/files/upload_62900e4354015fc2bc78f00afbc1bc21.png new file mode 100644 index 000000000..2ff127e97 Binary files /dev/null and b/src/server/public/files/upload_62900e4354015fc2bc78f00afbc1bc21.png differ diff --git a/src/server/public/files/upload_62f1a7fa74224de7248c62d6d4242fd0.jpg b/src/server/public/files/upload_62f1a7fa74224de7248c62d6d4242fd0.jpg new file mode 100644 index 000000000..bb78e4c23 Binary files /dev/null and b/src/server/public/files/upload_62f1a7fa74224de7248c62d6d4242fd0.jpg differ diff --git a/src/server/public/files/upload_63a7127553e83f381212c80f607c6db5.png b/src/server/public/files/upload_63a7127553e83f381212c80f607c6db5.png new file mode 100644 index 000000000..2ff127e97 Binary files /dev/null and b/src/server/public/files/upload_63a7127553e83f381212c80f607c6db5.png differ diff --git a/src/server/public/files/upload_63c37ab66ad16d68ef96670b1d04ee1c.png b/src/server/public/files/upload_63c37ab66ad16d68ef96670b1d04ee1c.png new file mode 100644 index 000000000..23e8efe47 Binary files /dev/null and b/src/server/public/files/upload_63c37ab66ad16d68ef96670b1d04ee1c.png differ diff --git a/src/server/public/files/upload_665fb37c1505fdf48a665990caf09d26.png b/src/server/public/files/upload_665fb37c1505fdf48a665990caf09d26.png new file mode 100644 index 000000000..0bacb6189 Binary files /dev/null and b/src/server/public/files/upload_665fb37c1505fdf48a665990caf09d26.png differ diff --git a/src/server/public/files/upload_67c7a2ac39caabaac7b90861a1314b8f.png b/src/server/public/files/upload_67c7a2ac39caabaac7b90861a1314b8f.png new file mode 100644 index 000000000..2ff127e97 Binary files /dev/null and b/src/server/public/files/upload_67c7a2ac39caabaac7b90861a1314b8f.png differ diff --git a/src/server/public/files/upload_680394edbfb281065997525cc114f996.PNG b/src/server/public/files/upload_680394edbfb281065997525cc114f996.PNG new file mode 100644 index 000000000..9105f02e3 Binary files /dev/null and b/src/server/public/files/upload_680394edbfb281065997525cc114f996.PNG differ diff --git a/src/server/public/files/upload_684090a0c50a035aaa0df23c18043df8.png b/src/server/public/files/upload_684090a0c50a035aaa0df23c18043df8.png new file mode 100644 index 000000000..2ff127e97 Binary files /dev/null and b/src/server/public/files/upload_684090a0c50a035aaa0df23c18043df8.png differ diff --git a/src/server/public/files/upload_6bd24b1193058458d6ea268b06963931.PNG b/src/server/public/files/upload_6bd24b1193058458d6ea268b06963931.PNG new file mode 100644 index 000000000..9105f02e3 Binary files /dev/null and b/src/server/public/files/upload_6bd24b1193058458d6ea268b06963931.PNG differ diff --git a/src/server/public/files/upload_6bde8211989cf1b540b3c6dcf16cd51a.PNG b/src/server/public/files/upload_6bde8211989cf1b540b3c6dcf16cd51a.PNG new file mode 100644 index 000000000..9105f02e3 Binary files /dev/null and b/src/server/public/files/upload_6bde8211989cf1b540b3c6dcf16cd51a.PNG differ diff --git a/src/server/public/files/upload_6d5051266bd739f260105072299b5c79.png b/src/server/public/files/upload_6d5051266bd739f260105072299b5c79.png new file mode 100644 index 000000000..0bacb6189 Binary files /dev/null and b/src/server/public/files/upload_6d5051266bd739f260105072299b5c79.png differ diff --git a/src/server/public/files/upload_6d9a3ec37d85659265f2b622a6d24dcb.jpg b/src/server/public/files/upload_6d9a3ec37d85659265f2b622a6d24dcb.jpg new file mode 100644 index 000000000..756f4572f Binary files /dev/null and b/src/server/public/files/upload_6d9a3ec37d85659265f2b622a6d24dcb.jpg differ diff --git a/src/server/public/files/upload_6f222fae83f0185e361bf6a757ba9800.png b/src/server/public/files/upload_6f222fae83f0185e361bf6a757ba9800.png new file mode 100644 index 000000000..2ff127e97 Binary files /dev/null and b/src/server/public/files/upload_6f222fae83f0185e361bf6a757ba9800.png differ diff --git a/src/server/public/files/upload_6f5b0c8a474e44d76cbbea5f629e8fba.png b/src/server/public/files/upload_6f5b0c8a474e44d76cbbea5f629e8fba.png new file mode 100644 index 000000000..5bac81362 Binary files /dev/null and b/src/server/public/files/upload_6f5b0c8a474e44d76cbbea5f629e8fba.png differ diff --git a/src/server/public/files/upload_7068f1e2ec782980b4eded2ff974da7f.jpg b/src/server/public/files/upload_7068f1e2ec782980b4eded2ff974da7f.jpg new file mode 100644 index 000000000..756f4572f Binary files /dev/null and b/src/server/public/files/upload_7068f1e2ec782980b4eded2ff974da7f.jpg differ diff --git a/src/server/public/files/upload_72c05840ea8bddc44575309923d4c63b.jpg b/src/server/public/files/upload_72c05840ea8bddc44575309923d4c63b.jpg new file mode 100644 index 000000000..bb78e4c23 Binary files /dev/null and b/src/server/public/files/upload_72c05840ea8bddc44575309923d4c63b.jpg differ diff --git a/src/server/public/files/upload_73b42f2f26e037078c1f1c63913fc9aa.jpg b/src/server/public/files/upload_73b42f2f26e037078c1f1c63913fc9aa.jpg new file mode 100644 index 000000000..756f4572f Binary files /dev/null and b/src/server/public/files/upload_73b42f2f26e037078c1f1c63913fc9aa.jpg differ diff --git a/src/server/public/files/upload_7412310b57204cb3c36d5aba670589fc.PNG b/src/server/public/files/upload_7412310b57204cb3c36d5aba670589fc.PNG new file mode 100644 index 000000000..2b64654dd Binary files /dev/null and b/src/server/public/files/upload_7412310b57204cb3c36d5aba670589fc.PNG differ diff --git a/src/server/public/files/upload_75d331ba20a80ca0f6fd18bc0b37b8b3.PNG b/src/server/public/files/upload_75d331ba20a80ca0f6fd18bc0b37b8b3.PNG new file mode 100644 index 000000000..2b64654dd Binary files /dev/null and b/src/server/public/files/upload_75d331ba20a80ca0f6fd18bc0b37b8b3.PNG differ diff --git a/src/server/public/files/upload_77eab9365e5c11d5e1ac08fca6c862ab.png b/src/server/public/files/upload_77eab9365e5c11d5e1ac08fca6c862ab.png new file mode 100644 index 000000000..0bacb6189 Binary files /dev/null and b/src/server/public/files/upload_77eab9365e5c11d5e1ac08fca6c862ab.png differ diff --git a/src/server/public/files/upload_786b4b94fda60ba60da3dfe2be091b6b.png b/src/server/public/files/upload_786b4b94fda60ba60da3dfe2be091b6b.png new file mode 100644 index 000000000..23e8efe47 Binary files /dev/null and b/src/server/public/files/upload_786b4b94fda60ba60da3dfe2be091b6b.png differ diff --git a/src/server/public/files/upload_793745d2b6c8a5c3dbeea343b9332846.PNG b/src/server/public/files/upload_793745d2b6c8a5c3dbeea343b9332846.PNG new file mode 100644 index 000000000..acd759e09 Binary files /dev/null and b/src/server/public/files/upload_793745d2b6c8a5c3dbeea343b9332846.PNG differ diff --git a/src/server/public/files/upload_7c369564861f079a17bd77081ace597b.PNG b/src/server/public/files/upload_7c369564861f079a17bd77081ace597b.PNG new file mode 100644 index 000000000..acd759e09 Binary files /dev/null and b/src/server/public/files/upload_7c369564861f079a17bd77081ace597b.PNG differ diff --git a/src/server/public/files/upload_7c7f3f317ea27a2ddad9e8a34f636b78.png b/src/server/public/files/upload_7c7f3f317ea27a2ddad9e8a34f636b78.png new file mode 100644 index 000000000..c178a9106 Binary files /dev/null and b/src/server/public/files/upload_7c7f3f317ea27a2ddad9e8a34f636b78.png differ diff --git a/src/server/public/files/upload_7f357bbbe7756dabad0b9cb49c9ceb0c.PNG b/src/server/public/files/upload_7f357bbbe7756dabad0b9cb49c9ceb0c.PNG new file mode 100644 index 000000000..2b64654dd Binary files /dev/null and b/src/server/public/files/upload_7f357bbbe7756dabad0b9cb49c9ceb0c.PNG differ diff --git a/src/server/public/files/upload_814802d9faf217a7b09c1c95c4ecfd05.png b/src/server/public/files/upload_814802d9faf217a7b09c1c95c4ecfd05.png new file mode 100644 index 000000000..4bd1e688a Binary files /dev/null and b/src/server/public/files/upload_814802d9faf217a7b09c1c95c4ecfd05.png differ diff --git a/src/server/public/files/upload_83180cda4fa509f6ff0654376c1da7f2.jpg b/src/server/public/files/upload_83180cda4fa509f6ff0654376c1da7f2.jpg new file mode 100644 index 000000000..bb78e4c23 Binary files /dev/null and b/src/server/public/files/upload_83180cda4fa509f6ff0654376c1da7f2.jpg differ diff --git a/src/server/public/files/upload_8321ece56de47e0bf5345fe30d23414e.PNG b/src/server/public/files/upload_8321ece56de47e0bf5345fe30d23414e.PNG new file mode 100644 index 000000000..9105f02e3 Binary files /dev/null and b/src/server/public/files/upload_8321ece56de47e0bf5345fe30d23414e.PNG differ diff --git a/src/server/public/files/upload_871f1af44ec7a2140f32433f3015d603.jpg b/src/server/public/files/upload_871f1af44ec7a2140f32433f3015d603.jpg new file mode 100644 index 000000000..bb78e4c23 Binary files /dev/null and b/src/server/public/files/upload_871f1af44ec7a2140f32433f3015d603.jpg differ diff --git a/src/server/public/files/upload_892d1d9d981f679fedaa2c5bf193fd20.jpg b/src/server/public/files/upload_892d1d9d981f679fedaa2c5bf193fd20.jpg new file mode 100644 index 000000000..756f4572f Binary files /dev/null and b/src/server/public/files/upload_892d1d9d981f679fedaa2c5bf193fd20.jpg differ diff --git a/src/server/public/files/upload_89721bf0d244b1fcc52f70a7d9e3593b.jpg b/src/server/public/files/upload_89721bf0d244b1fcc52f70a7d9e3593b.jpg new file mode 100644 index 000000000..756f4572f Binary files /dev/null and b/src/server/public/files/upload_89721bf0d244b1fcc52f70a7d9e3593b.jpg differ diff --git a/src/server/public/files/upload_89e66f8d531a44a63fa3355602813ae7.png b/src/server/public/files/upload_89e66f8d531a44a63fa3355602813ae7.png new file mode 100644 index 000000000..23e8efe47 Binary files /dev/null and b/src/server/public/files/upload_89e66f8d531a44a63fa3355602813ae7.png differ diff --git a/src/server/public/files/upload_8a6090d2b978221d0810b954f7b14065.PNG b/src/server/public/files/upload_8a6090d2b978221d0810b954f7b14065.PNG new file mode 100644 index 000000000..2b64654dd Binary files /dev/null and b/src/server/public/files/upload_8a6090d2b978221d0810b954f7b14065.PNG differ diff --git a/src/server/public/files/upload_8b92f6ffc9a8c8353fd141c6dc71895f.jpg b/src/server/public/files/upload_8b92f6ffc9a8c8353fd141c6dc71895f.jpg new file mode 100644 index 000000000..756f4572f Binary files /dev/null and b/src/server/public/files/upload_8b92f6ffc9a8c8353fd141c6dc71895f.jpg differ diff --git a/src/server/public/files/upload_8bfca62429aada8f6b5dae1dcde24cab.png b/src/server/public/files/upload_8bfca62429aada8f6b5dae1dcde24cab.png new file mode 100644 index 000000000..c178a9106 Binary files /dev/null and b/src/server/public/files/upload_8bfca62429aada8f6b5dae1dcde24cab.png differ diff --git a/src/server/public/files/upload_8e9e27d1918f3a0a5f242397079e66fa.png b/src/server/public/files/upload_8e9e27d1918f3a0a5f242397079e66fa.png new file mode 100644 index 000000000..c178a9106 Binary files /dev/null and b/src/server/public/files/upload_8e9e27d1918f3a0a5f242397079e66fa.png differ diff --git a/src/server/public/files/upload_8ef0953ff77d42848b6e7f37e9bd506d.PNG b/src/server/public/files/upload_8ef0953ff77d42848b6e7f37e9bd506d.PNG new file mode 100644 index 000000000..2b64654dd Binary files /dev/null and b/src/server/public/files/upload_8ef0953ff77d42848b6e7f37e9bd506d.PNG differ diff --git a/src/server/public/files/upload_902c6b9c79da47ec00238f4831795077.jpg b/src/server/public/files/upload_902c6b9c79da47ec00238f4831795077.jpg new file mode 100644 index 000000000..bb78e4c23 Binary files /dev/null and b/src/server/public/files/upload_902c6b9c79da47ec00238f4831795077.jpg differ diff --git a/src/server/public/files/upload_90d380b38492369c1470868b019f0d0c.jpg b/src/server/public/files/upload_90d380b38492369c1470868b019f0d0c.jpg new file mode 100644 index 000000000..bb78e4c23 Binary files /dev/null and b/src/server/public/files/upload_90d380b38492369c1470868b019f0d0c.jpg differ diff --git a/src/server/public/files/upload_95af42b1b5db521aa1539980fe85e71a.jpg b/src/server/public/files/upload_95af42b1b5db521aa1539980fe85e71a.jpg new file mode 100644 index 000000000..756f4572f Binary files /dev/null and b/src/server/public/files/upload_95af42b1b5db521aa1539980fe85e71a.jpg differ diff --git a/src/server/public/files/upload_97031060c857a0e8f15af3fcc038a2b8.jpg b/src/server/public/files/upload_97031060c857a0e8f15af3fcc038a2b8.jpg new file mode 100644 index 000000000..bb78e4c23 Binary files /dev/null and b/src/server/public/files/upload_97031060c857a0e8f15af3fcc038a2b8.jpg differ diff --git a/src/server/public/files/upload_97903efc6c08245acaea37eefacf289f.png b/src/server/public/files/upload_97903efc6c08245acaea37eefacf289f.png new file mode 100644 index 000000000..c178a9106 Binary files /dev/null and b/src/server/public/files/upload_97903efc6c08245acaea37eefacf289f.png differ diff --git a/src/server/public/files/upload_9974b3459e182fef33b8e467058b7525.png b/src/server/public/files/upload_9974b3459e182fef33b8e467058b7525.png new file mode 100644 index 000000000..0bacb6189 Binary files /dev/null and b/src/server/public/files/upload_9974b3459e182fef33b8e467058b7525.png differ diff --git a/src/server/public/files/upload_9a8429dac8feba05bbda2b53b5da4efa.jpg b/src/server/public/files/upload_9a8429dac8feba05bbda2b53b5da4efa.jpg new file mode 100644 index 000000000..bb78e4c23 Binary files /dev/null and b/src/server/public/files/upload_9a8429dac8feba05bbda2b53b5da4efa.jpg differ diff --git a/src/server/public/files/upload_9bbc86def05076b89080adcc37481324.jpg b/src/server/public/files/upload_9bbc86def05076b89080adcc37481324.jpg new file mode 100644 index 000000000..756f4572f Binary files /dev/null and b/src/server/public/files/upload_9bbc86def05076b89080adcc37481324.jpg differ diff --git a/src/server/public/files/upload_9cd52fc451f3d459021127a7d51d108b.png b/src/server/public/files/upload_9cd52fc451f3d459021127a7d51d108b.png new file mode 100644 index 000000000..c178a9106 Binary files /dev/null and b/src/server/public/files/upload_9cd52fc451f3d459021127a7d51d108b.png differ diff --git a/src/server/public/files/upload_9de9f004f258cee8c55bf872362d6453.jpg b/src/server/public/files/upload_9de9f004f258cee8c55bf872362d6453.jpg new file mode 100644 index 000000000..bb78e4c23 Binary files /dev/null and b/src/server/public/files/upload_9de9f004f258cee8c55bf872362d6453.jpg differ diff --git a/src/server/public/files/upload_a0286ae2a1eec8c31c8276ec067d91aa.png b/src/server/public/files/upload_a0286ae2a1eec8c31c8276ec067d91aa.png new file mode 100644 index 000000000..c178a9106 Binary files /dev/null and b/src/server/public/files/upload_a0286ae2a1eec8c31c8276ec067d91aa.png differ diff --git a/src/server/public/files/upload_a04473da584e5a602d0f8984a670a91c.jpg b/src/server/public/files/upload_a04473da584e5a602d0f8984a670a91c.jpg new file mode 100644 index 000000000..756f4572f Binary files /dev/null and b/src/server/public/files/upload_a04473da584e5a602d0f8984a670a91c.jpg differ diff --git a/src/server/public/files/upload_a2cf3f6ab4ab5b249ebf8100e461aa27.png b/src/server/public/files/upload_a2cf3f6ab4ab5b249ebf8100e461aa27.png new file mode 100644 index 000000000..0bacb6189 Binary files /dev/null and b/src/server/public/files/upload_a2cf3f6ab4ab5b249ebf8100e461aa27.png differ diff --git a/src/server/public/files/upload_a3095034ec19353c9ee55221088f01d8.PNG b/src/server/public/files/upload_a3095034ec19353c9ee55221088f01d8.PNG new file mode 100644 index 000000000..2b64654dd Binary files /dev/null and b/src/server/public/files/upload_a3095034ec19353c9ee55221088f01d8.PNG differ diff --git a/src/server/public/files/upload_a520a6856021104b8130f8d3b42d85c0.png b/src/server/public/files/upload_a520a6856021104b8130f8d3b42d85c0.png new file mode 100644 index 000000000..23e8efe47 Binary files /dev/null and b/src/server/public/files/upload_a520a6856021104b8130f8d3b42d85c0.png differ diff --git a/src/server/public/files/upload_a5c26f52ddcbd705ffbd3dfd7cd2ce40.jpg b/src/server/public/files/upload_a5c26f52ddcbd705ffbd3dfd7cd2ce40.jpg new file mode 100644 index 000000000..756f4572f Binary files /dev/null and b/src/server/public/files/upload_a5c26f52ddcbd705ffbd3dfd7cd2ce40.jpg differ diff --git a/src/server/public/files/upload_a60864ff7892974e941e42a2441e530d.png b/src/server/public/files/upload_a60864ff7892974e941e42a2441e530d.png new file mode 100644 index 000000000..23e8efe47 Binary files /dev/null and b/src/server/public/files/upload_a60864ff7892974e941e42a2441e530d.png differ diff --git a/src/server/public/files/upload_a77f86dbeaa0c3cecc2516f9d9cecf1d.png b/src/server/public/files/upload_a77f86dbeaa0c3cecc2516f9d9cecf1d.png new file mode 100644 index 000000000..0bacb6189 Binary files /dev/null and b/src/server/public/files/upload_a77f86dbeaa0c3cecc2516f9d9cecf1d.png differ diff --git a/src/server/public/files/upload_aa2bbeb0871a2d6b4b54524ac2758270.jpg b/src/server/public/files/upload_aa2bbeb0871a2d6b4b54524ac2758270.jpg new file mode 100644 index 000000000..bb78e4c23 Binary files /dev/null and b/src/server/public/files/upload_aa2bbeb0871a2d6b4b54524ac2758270.jpg differ diff --git a/src/server/public/files/upload_aa9fec4828bfdfef3ae20d43997fb274.png b/src/server/public/files/upload_aa9fec4828bfdfef3ae20d43997fb274.png new file mode 100644 index 000000000..2ff127e97 Binary files /dev/null and b/src/server/public/files/upload_aa9fec4828bfdfef3ae20d43997fb274.png differ diff --git a/src/server/public/files/upload_ab2bba2cee88991561f20d7cd69ec6e1.png b/src/server/public/files/upload_ab2bba2cee88991561f20d7cd69ec6e1.png new file mode 100644 index 000000000..2ff127e97 Binary files /dev/null and b/src/server/public/files/upload_ab2bba2cee88991561f20d7cd69ec6e1.png differ diff --git a/src/server/public/files/upload_ae1c01e481fc6b753c78605bfbe680b9.png b/src/server/public/files/upload_ae1c01e481fc6b753c78605bfbe680b9.png new file mode 100644 index 000000000..c178a9106 Binary files /dev/null and b/src/server/public/files/upload_ae1c01e481fc6b753c78605bfbe680b9.png differ diff --git a/src/server/public/files/upload_b0d25a0dccc640f78dcbc291f930b5d6.png b/src/server/public/files/upload_b0d25a0dccc640f78dcbc291f930b5d6.png new file mode 100644 index 000000000..23e8efe47 Binary files /dev/null and b/src/server/public/files/upload_b0d25a0dccc640f78dcbc291f930b5d6.png differ diff --git a/src/server/public/files/upload_b0e527b27b7cabf651b29c9d834d24f3.PNG b/src/server/public/files/upload_b0e527b27b7cabf651b29c9d834d24f3.PNG new file mode 100644 index 000000000..9105f02e3 Binary files /dev/null and b/src/server/public/files/upload_b0e527b27b7cabf651b29c9d834d24f3.PNG differ diff --git a/src/server/public/files/upload_b0ea7e49e84cf91075962a75c76d3233.png b/src/server/public/files/upload_b0ea7e49e84cf91075962a75c76d3233.png new file mode 100644 index 000000000..23e8efe47 Binary files /dev/null and b/src/server/public/files/upload_b0ea7e49e84cf91075962a75c76d3233.png differ diff --git a/src/server/public/files/upload_b1b334829e1d99d7cd32fae5044cc103.PNG b/src/server/public/files/upload_b1b334829e1d99d7cd32fae5044cc103.PNG new file mode 100644 index 000000000..9105f02e3 Binary files /dev/null and b/src/server/public/files/upload_b1b334829e1d99d7cd32fae5044cc103.PNG differ diff --git a/src/server/public/files/upload_b52adf6e1ecdbbe76aa3c038ddc3b02b.PNG b/src/server/public/files/upload_b52adf6e1ecdbbe76aa3c038ddc3b02b.PNG new file mode 100644 index 000000000..acd759e09 Binary files /dev/null and b/src/server/public/files/upload_b52adf6e1ecdbbe76aa3c038ddc3b02b.PNG differ diff --git a/src/server/public/files/upload_b6c992aa6c434520887521e11bb5f492.png b/src/server/public/files/upload_b6c992aa6c434520887521e11bb5f492.png new file mode 100644 index 000000000..0bacb6189 Binary files /dev/null and b/src/server/public/files/upload_b6c992aa6c434520887521e11bb5f492.png differ diff --git a/src/server/public/files/upload_ba04eb816ef3bec770aa7eebf3b21cb1.PNG b/src/server/public/files/upload_ba04eb816ef3bec770aa7eebf3b21cb1.PNG new file mode 100644 index 000000000..2b64654dd Binary files /dev/null and b/src/server/public/files/upload_ba04eb816ef3bec770aa7eebf3b21cb1.PNG differ diff --git a/src/server/public/files/upload_ba58066314a79d1c845241fb4400e44d.png b/src/server/public/files/upload_ba58066314a79d1c845241fb4400e44d.png new file mode 100644 index 000000000..c178a9106 Binary files /dev/null and b/src/server/public/files/upload_ba58066314a79d1c845241fb4400e44d.png differ diff --git a/src/server/public/files/upload_bb6b521b4df6bd783d6a5b83a66caa0a.jpg b/src/server/public/files/upload_bb6b521b4df6bd783d6a5b83a66caa0a.jpg new file mode 100644 index 000000000..756f4572f Binary files /dev/null and b/src/server/public/files/upload_bb6b521b4df6bd783d6a5b83a66caa0a.jpg differ diff --git a/src/server/public/files/upload_bcb173a15068ded66b39623ab18bfdb7.jpg b/src/server/public/files/upload_bcb173a15068ded66b39623ab18bfdb7.jpg new file mode 100644 index 000000000..bb78e4c23 Binary files /dev/null and b/src/server/public/files/upload_bcb173a15068ded66b39623ab18bfdb7.jpg differ diff --git a/src/server/public/files/upload_be4034faba6a5313dfb8a53e18ffc188.png b/src/server/public/files/upload_be4034faba6a5313dfb8a53e18ffc188.png new file mode 100644 index 000000000..2ff127e97 Binary files /dev/null and b/src/server/public/files/upload_be4034faba6a5313dfb8a53e18ffc188.png differ diff --git a/src/server/public/files/upload_be5f90995b34cd30d9a269b5a9f10fcc.PNG b/src/server/public/files/upload_be5f90995b34cd30d9a269b5a9f10fcc.PNG new file mode 100644 index 000000000..9105f02e3 Binary files /dev/null and b/src/server/public/files/upload_be5f90995b34cd30d9a269b5a9f10fcc.PNG differ diff --git a/src/server/public/files/upload_c1a964ca145f45e7e666cfaf7c8398e3.png b/src/server/public/files/upload_c1a964ca145f45e7e666cfaf7c8398e3.png new file mode 100644 index 000000000..0bacb6189 Binary files /dev/null and b/src/server/public/files/upload_c1a964ca145f45e7e666cfaf7c8398e3.png differ diff --git a/src/server/public/files/upload_c6764790a8182d796acddb76d3df595e.PNG b/src/server/public/files/upload_c6764790a8182d796acddb76d3df595e.PNG new file mode 100644 index 000000000..2b64654dd Binary files /dev/null and b/src/server/public/files/upload_c6764790a8182d796acddb76d3df595e.PNG differ diff --git a/src/server/public/files/upload_c81bff72d05e0bb7f13376a46506ec2a.jpg b/src/server/public/files/upload_c81bff72d05e0bb7f13376a46506ec2a.jpg new file mode 100644 index 000000000..9bb7f57d2 Binary files /dev/null and b/src/server/public/files/upload_c81bff72d05e0bb7f13376a46506ec2a.jpg differ diff --git a/src/server/public/files/upload_c98c0184a19b621b2bc0575b49996a69.png b/src/server/public/files/upload_c98c0184a19b621b2bc0575b49996a69.png new file mode 100644 index 000000000..c178a9106 Binary files /dev/null and b/src/server/public/files/upload_c98c0184a19b621b2bc0575b49996a69.png differ diff --git a/src/server/public/files/upload_cb4d875a9f73d1f735da5ae82dce6eb1.jpg b/src/server/public/files/upload_cb4d875a9f73d1f735da5ae82dce6eb1.jpg new file mode 100644 index 000000000..756f4572f Binary files /dev/null and b/src/server/public/files/upload_cb4d875a9f73d1f735da5ae82dce6eb1.jpg differ diff --git a/src/server/public/files/upload_cd08524995e5f124505fe3d7ab38a41f.png b/src/server/public/files/upload_cd08524995e5f124505fe3d7ab38a41f.png new file mode 100644 index 000000000..0bacb6189 Binary files /dev/null and b/src/server/public/files/upload_cd08524995e5f124505fe3d7ab38a41f.png differ diff --git a/src/server/public/files/upload_cd73b55488fcc7e5e5e5f2a4c43bc1fd.png b/src/server/public/files/upload_cd73b55488fcc7e5e5e5f2a4c43bc1fd.png new file mode 100644 index 000000000..c178a9106 Binary files /dev/null and b/src/server/public/files/upload_cd73b55488fcc7e5e5e5f2a4c43bc1fd.png differ diff --git a/src/server/public/files/upload_ce357d5a6d727ac44110c60dd379428f.png b/src/server/public/files/upload_ce357d5a6d727ac44110c60dd379428f.png new file mode 100644 index 000000000..2ff127e97 Binary files /dev/null and b/src/server/public/files/upload_ce357d5a6d727ac44110c60dd379428f.png differ diff --git a/src/server/public/files/upload_d00c34a1e1c319a9373b5f136c38a866.jpg b/src/server/public/files/upload_d00c34a1e1c319a9373b5f136c38a866.jpg new file mode 100644 index 000000000..756f4572f Binary files /dev/null and b/src/server/public/files/upload_d00c34a1e1c319a9373b5f136c38a866.jpg differ diff --git a/src/server/public/files/upload_d242527805ab4c52f2385ae57b85e6fb.png b/src/server/public/files/upload_d242527805ab4c52f2385ae57b85e6fb.png new file mode 100644 index 000000000..c178a9106 Binary files /dev/null and b/src/server/public/files/upload_d242527805ab4c52f2385ae57b85e6fb.png differ diff --git a/src/server/public/files/upload_d28007fa68c809cd3c0a78d4a8727275.png b/src/server/public/files/upload_d28007fa68c809cd3c0a78d4a8727275.png new file mode 100644 index 000000000..0bacb6189 Binary files /dev/null and b/src/server/public/files/upload_d28007fa68c809cd3c0a78d4a8727275.png differ diff --git a/src/server/public/files/upload_d35ea9c62bf8da0352a16193b880469e.jpg b/src/server/public/files/upload_d35ea9c62bf8da0352a16193b880469e.jpg new file mode 100644 index 000000000..bb78e4c23 Binary files /dev/null and b/src/server/public/files/upload_d35ea9c62bf8da0352a16193b880469e.jpg differ diff --git a/src/server/public/files/upload_d4e0e9d2aee31b5931129dc3bc83e813.png b/src/server/public/files/upload_d4e0e9d2aee31b5931129dc3bc83e813.png new file mode 100644 index 000000000..23e8efe47 Binary files /dev/null and b/src/server/public/files/upload_d4e0e9d2aee31b5931129dc3bc83e813.png differ diff --git a/src/server/public/files/upload_d5801c03d9562a612d1907085ba39373.jpg b/src/server/public/files/upload_d5801c03d9562a612d1907085ba39373.jpg new file mode 100644 index 000000000..bb78e4c23 Binary files /dev/null and b/src/server/public/files/upload_d5801c03d9562a612d1907085ba39373.jpg differ diff --git a/src/server/public/files/upload_d6d0e3a302e0edafa70785c39041e522.PNG b/src/server/public/files/upload_d6d0e3a302e0edafa70785c39041e522.PNG new file mode 100644 index 000000000..2b64654dd Binary files /dev/null and b/src/server/public/files/upload_d6d0e3a302e0edafa70785c39041e522.PNG differ diff --git a/src/server/public/files/upload_d6e725cc697751599b177e0cf330b9f2.jpg b/src/server/public/files/upload_d6e725cc697751599b177e0cf330b9f2.jpg new file mode 100644 index 000000000..bb78e4c23 Binary files /dev/null and b/src/server/public/files/upload_d6e725cc697751599b177e0cf330b9f2.jpg differ diff --git a/src/server/public/files/upload_d794d56fcab3b93b6c79aa201cba34f8.png b/src/server/public/files/upload_d794d56fcab3b93b6c79aa201cba34f8.png new file mode 100644 index 000000000..4bd1e688a Binary files /dev/null and b/src/server/public/files/upload_d794d56fcab3b93b6c79aa201cba34f8.png differ diff --git a/src/server/public/files/upload_d8abeaef04a42678432e5e1d3377a2d0.png b/src/server/public/files/upload_d8abeaef04a42678432e5e1d3377a2d0.png new file mode 100644 index 000000000..c178a9106 Binary files /dev/null and b/src/server/public/files/upload_d8abeaef04a42678432e5e1d3377a2d0.png differ diff --git a/src/server/public/files/upload_dac5245c657d29c1c4dfba98472fb50d.pdf b/src/server/public/files/upload_dac5245c657d29c1c4dfba98472fb50d.pdf new file mode 100644 index 000000000..7c9fa9a6f Binary files /dev/null and b/src/server/public/files/upload_dac5245c657d29c1c4dfba98472fb50d.pdf differ diff --git a/src/server/public/files/upload_db3c5a0b560c9da35607359d86cf2b97.png b/src/server/public/files/upload_db3c5a0b560c9da35607359d86cf2b97.png new file mode 100644 index 000000000..0bacb6189 Binary files /dev/null and b/src/server/public/files/upload_db3c5a0b560c9da35607359d86cf2b97.png differ diff --git a/src/server/public/files/upload_dc8821dc596b1938c855e0affbe614dd.png b/src/server/public/files/upload_dc8821dc596b1938c855e0affbe614dd.png new file mode 100644 index 000000000..c178a9106 Binary files /dev/null and b/src/server/public/files/upload_dc8821dc596b1938c855e0affbe614dd.png differ diff --git a/src/server/public/files/upload_df7697c4832990aad0e8d9f0daa1711b.png b/src/server/public/files/upload_df7697c4832990aad0e8d9f0daa1711b.png new file mode 100644 index 000000000..2ff127e97 Binary files /dev/null and b/src/server/public/files/upload_df7697c4832990aad0e8d9f0daa1711b.png differ diff --git a/src/server/public/files/upload_e009e45db30e47383fad5d71908dc69d.png b/src/server/public/files/upload_e009e45db30e47383fad5d71908dc69d.png new file mode 100644 index 000000000..c178a9106 Binary files /dev/null and b/src/server/public/files/upload_e009e45db30e47383fad5d71908dc69d.png differ diff --git a/src/server/public/files/upload_e15738d092ff38197dc1fb41a4747d16.jpg b/src/server/public/files/upload_e15738d092ff38197dc1fb41a4747d16.jpg new file mode 100644 index 000000000..bb78e4c23 Binary files /dev/null and b/src/server/public/files/upload_e15738d092ff38197dc1fb41a4747d16.jpg differ diff --git a/src/server/public/files/upload_e51079d9af97a412353d63c60e1ea96d.png b/src/server/public/files/upload_e51079d9af97a412353d63c60e1ea96d.png new file mode 100644 index 000000000..0bacb6189 Binary files /dev/null and b/src/server/public/files/upload_e51079d9af97a412353d63c60e1ea96d.png differ diff --git a/src/server/public/files/upload_e5422cdcfa80628842ff3aacf14ad25e.png b/src/server/public/files/upload_e5422cdcfa80628842ff3aacf14ad25e.png new file mode 100644 index 000000000..c178a9106 Binary files /dev/null and b/src/server/public/files/upload_e5422cdcfa80628842ff3aacf14ad25e.png differ diff --git a/src/server/public/files/upload_e6256196c38216ac539ef7e8ee28ab02.png b/src/server/public/files/upload_e6256196c38216ac539ef7e8ee28ab02.png new file mode 100644 index 000000000..23e8efe47 Binary files /dev/null and b/src/server/public/files/upload_e6256196c38216ac539ef7e8ee28ab02.png differ diff --git a/src/server/public/files/upload_e9668199bd12c905f27be76b11366d68.png b/src/server/public/files/upload_e9668199bd12c905f27be76b11366d68.png new file mode 100644 index 000000000..23e8efe47 Binary files /dev/null and b/src/server/public/files/upload_e9668199bd12c905f27be76b11366d68.png differ diff --git a/src/server/public/files/upload_e98ebeeebd5f0ddc98ea9b3a2d9f40d2.png b/src/server/public/files/upload_e98ebeeebd5f0ddc98ea9b3a2d9f40d2.png new file mode 100644 index 000000000..0bacb6189 Binary files /dev/null and b/src/server/public/files/upload_e98ebeeebd5f0ddc98ea9b3a2d9f40d2.png differ diff --git a/src/server/public/files/upload_eb2f002129e0cfb5c940f6b4ecc5a8f2.jpg b/src/server/public/files/upload_eb2f002129e0cfb5c940f6b4ecc5a8f2.jpg new file mode 100644 index 000000000..756f4572f Binary files /dev/null and b/src/server/public/files/upload_eb2f002129e0cfb5c940f6b4ecc5a8f2.jpg differ diff --git a/src/server/public/files/upload_ec02ff06b3154d269086e23ebf6ad942.png b/src/server/public/files/upload_ec02ff06b3154d269086e23ebf6ad942.png new file mode 100644 index 000000000..2ff127e97 Binary files /dev/null and b/src/server/public/files/upload_ec02ff06b3154d269086e23ebf6ad942.png differ diff --git a/src/server/public/files/upload_ef3873102a70850a4da2040eab002c55.jpg b/src/server/public/files/upload_ef3873102a70850a4da2040eab002c55.jpg new file mode 100644 index 000000000..756f4572f Binary files /dev/null and b/src/server/public/files/upload_ef3873102a70850a4da2040eab002c55.jpg differ diff --git a/src/server/public/files/upload_f259c9aa37b0919d6d20ad8d75e8329e.png b/src/server/public/files/upload_f259c9aa37b0919d6d20ad8d75e8329e.png new file mode 100644 index 000000000..2ff127e97 Binary files /dev/null and b/src/server/public/files/upload_f259c9aa37b0919d6d20ad8d75e8329e.png differ diff --git a/src/server/public/files/upload_f48143c75b8c2412785e3ed31ebbb150.PNG b/src/server/public/files/upload_f48143c75b8c2412785e3ed31ebbb150.PNG new file mode 100644 index 000000000..9105f02e3 Binary files /dev/null and b/src/server/public/files/upload_f48143c75b8c2412785e3ed31ebbb150.PNG differ diff --git a/src/server/public/files/upload_f5347da10a373480807fc3469533b9fe.png b/src/server/public/files/upload_f5347da10a373480807fc3469533b9fe.png new file mode 100644 index 000000000..0bacb6189 Binary files /dev/null and b/src/server/public/files/upload_f5347da10a373480807fc3469533b9fe.png differ diff --git a/src/server/public/files/upload_f6e36f6d3de7a2036eeff617f186b78f.png b/src/server/public/files/upload_f6e36f6d3de7a2036eeff617f186b78f.png new file mode 100644 index 000000000..0bacb6189 Binary files /dev/null and b/src/server/public/files/upload_f6e36f6d3de7a2036eeff617f186b78f.png differ diff --git a/src/server/public/files/upload_f6f1ed7a268523278457de08ee61bcfa.PNG b/src/server/public/files/upload_f6f1ed7a268523278457de08ee61bcfa.PNG new file mode 100644 index 000000000..9105f02e3 Binary files /dev/null and b/src/server/public/files/upload_f6f1ed7a268523278457de08ee61bcfa.PNG differ diff --git a/src/server/public/files/upload_f73607b7cf818631165aca9d32ef19c5.jpg b/src/server/public/files/upload_f73607b7cf818631165aca9d32ef19c5.jpg new file mode 100644 index 000000000..756f4572f Binary files /dev/null and b/src/server/public/files/upload_f73607b7cf818631165aca9d32ef19c5.jpg differ diff --git a/src/server/public/files/upload_f804a6c7ec796718d66108af0b1e6d0e.png b/src/server/public/files/upload_f804a6c7ec796718d66108af0b1e6d0e.png new file mode 100644 index 000000000..2ff127e97 Binary files /dev/null and b/src/server/public/files/upload_f804a6c7ec796718d66108af0b1e6d0e.png differ diff --git a/src/server/public/files/upload_f9ed03ab046d7f579d6f531df9c4050a.PNG b/src/server/public/files/upload_f9ed03ab046d7f579d6f531df9c4050a.PNG new file mode 100644 index 000000000..2b64654dd Binary files /dev/null and b/src/server/public/files/upload_f9ed03ab046d7f579d6f531df9c4050a.PNG differ diff --git a/src/server/public/files/upload_fac4f686367ad63f2fcc1d8b4f74f123.png b/src/server/public/files/upload_fac4f686367ad63f2fcc1d8b4f74f123.png new file mode 100644 index 000000000..0bacb6189 Binary files /dev/null and b/src/server/public/files/upload_fac4f686367ad63f2fcc1d8b4f74f123.png differ diff --git a/src/server/public/files/upload_faebd8bdc2b00efe50b232c9cf4e63b6.PNG b/src/server/public/files/upload_faebd8bdc2b00efe50b232c9cf4e63b6.PNG new file mode 100644 index 000000000..9105f02e3 Binary files /dev/null and b/src/server/public/files/upload_faebd8bdc2b00efe50b232c9cf4e63b6.PNG differ diff --git a/src/server/public/files/upload_fb3cc3a1d715a6ffa1c72bde91faf3af.png b/src/server/public/files/upload_fb3cc3a1d715a6ffa1c72bde91faf3af.png new file mode 100644 index 000000000..23e8efe47 Binary files /dev/null and b/src/server/public/files/upload_fb3cc3a1d715a6ffa1c72bde91faf3af.png differ diff --git a/src/server/public/files/upload_fe2dbe44900645eba61207748f63ade3.jpg b/src/server/public/files/upload_fe2dbe44900645eba61207748f63ade3.jpg new file mode 100644 index 000000000..756f4572f Binary files /dev/null and b/src/server/public/files/upload_fe2dbe44900645eba61207748f63ade3.jpg differ diff --git a/src/server/public/files/upload_ffd58755419ab98f03d56fedd16736e9.jpg b/src/server/public/files/upload_ffd58755419ab98f03d56fedd16736e9.jpg new file mode 100644 index 000000000..bb78e4c23 Binary files /dev/null and b/src/server/public/files/upload_ffd58755419ab98f03d56fedd16736e9.jpg differ -- cgit v1.2.3-70-g09d2 From 9e4dd13ae2f0061ebea6aa8809a5607b51b9d8c3 Mon Sep 17 00:00:00 2001 From: ab Date: Mon, 8 Apr 2019 18:11:22 -0400 Subject: fixed on drop undo redo bug and implemented undo for inking --- src/client/documents/Documents.ts | 17 ++++++++--------- src/client/views/InkingCanvas.tsx | 21 ++++++++++++++++----- src/server/public/files/.gitignore | 1 + 3 files changed, 25 insertions(+), 14 deletions(-) create mode 100644 src/server/public/files/.gitignore (limited to 'src') diff --git a/src/client/documents/Documents.ts b/src/client/documents/Documents.ts index 1f0744782..340983e11 100644 --- a/src/client/documents/Documents.ts +++ b/src/client/documents/Documents.ts @@ -70,7 +70,7 @@ export namespace Documents { textProto = fields[textProtoId] as Document; histoProto = fields[histoProtoId] as Document; collProto = fields[collProtoId] as Document; - imageProto = fields[imageProtoId] as Document; + imageProto = fields[imageProtoId] as Document || CreateImagePrototype(); webProto = fields[webProtoId] as Document; kvpProto = fields[kvpProtoId] as Document; }); @@ -111,15 +111,14 @@ export namespace Documents { return assignOptions(deleg, options); } - function GetImagePrototype(): Document { - if (!imageProto) { - imageProto = setupPrototypeOptions(imageProtoId, "IMAGE_PROTO", CollectionView.LayoutString("AnnotationsKey"), - { x: 0, y: 0, nativeWidth: 300, width: 300, layoutKeys: [KeyStore.Data, KeyStore.Annotations, KeyStore.Caption] }); - imageProto.SetText(KeyStore.BackgroundLayout, ImageBox.LayoutString()); - imageProto.SetNumber(KeyStore.CurPage, 0); - } + function CreateImagePrototype(): Document { + let imageProto = setupPrototypeOptions(imageProtoId, "IMAGE_PROTO", CollectionView.LayoutString("AnnotationsKey"), + { x: 0, y: 0, nativeWidth: 300, width: 300, layoutKeys: [KeyStore.Data, KeyStore.Annotations, KeyStore.Caption] }); + imageProto.SetText(KeyStore.BackgroundLayout, ImageBox.LayoutString()); + imageProto.SetNumber(KeyStore.CurPage, 0); return imageProto; } + function GetHistogramPrototype(): Document { if (!histoProto) { histoProto = setupPrototypeOptions(histoProtoId, "HISTO PROTO", CollectionView.LayoutString("AnnotationsKey"), @@ -175,7 +174,7 @@ export namespace Documents { export function ImageDocument(url: string, options: DocumentOptions = {}) { - return assignToDelegate(SetInstanceOptions(GetImagePrototype(), options, [new URL(url), ImageField]).MakeDelegate(), { ...options, layoutKeys: [KeyStore.Data, KeyStore.Annotations, KeyStore.Caption] }); + return assignToDelegate(SetInstanceOptions(imageProto, options, [new URL(url), ImageField]).MakeDelegate(), { ...options, layoutKeys: [KeyStore.Data, KeyStore.Annotations, KeyStore.Caption] }); // let doc = SetInstanceOptions(GetImagePrototype(), { ...options, layoutKeys: [KeyStore.Data, KeyStore.Annotations, KeyStore.Caption] }, // [new URL(url), ImageField]); // doc.SetText(KeyStore.Caption, "my caption..."); diff --git a/src/client/views/InkingCanvas.tsx b/src/client/views/InkingCanvas.tsx index fed349af3..86566d516 100644 --- a/src/client/views/InkingCanvas.tsx +++ b/src/client/views/InkingCanvas.tsx @@ -20,11 +20,10 @@ interface InkCanvasProps { @observer export class InkingCanvas extends React.Component { - private strokeBatch?: UndoManager.Batch; - maxCanvasDim = 8192 / 2; // 1/2 of the maximum canvas dimension for Chrome @observable inkMidX: number = 0; @observable inkMidY: number = 0; + private previousState?: StrokeMap; private _currentStrokeId: string = ""; public static IntersectStrokeRect(stroke: StrokeData, selRect: { left: number, top: number, width: number, height: number }): boolean { return stroke.pathData.reduce((inside: boolean, val) => inside || @@ -68,18 +67,20 @@ export class InkingCanvas extends React.Component { e.stopPropagation(); e.preventDefault(); + this.previousState = this.inkData; + if (InkingControl.Instance.selectedTool != InkTool.Eraser) { // start the new line, saves a uuid to represent the field of the stroke this._currentStrokeId = Utils.GenerateGuid(); - this.strokeBatch = UndoManager.StartBatch("drawing stroke"); - this.inkData.set(this._currentStrokeId, { + const data = this.inkData; + data.set(this._currentStrokeId, { pathData: [this.relativeCoordinatesForEvent(e.clientX, e.clientY)], color: InkingControl.Instance.selectedColor, width: InkingControl.Instance.selectedWidth, tool: InkingControl.Instance.selectedTool, page: this.props.Document.GetNumber(KeyStore.CurPage, -1) }); - this.strokeBatch.end(); + this.inkData = data; } }; @@ -94,6 +95,16 @@ export class InkingCanvas extends React.Component { } e.stopPropagation(); e.preventDefault(); + + const batch = UndoManager.StartBatch("One ink stroke"); + const oldState = this.previousState || new Map; + this.previousState = undefined; + const newState = this.inkData; + UndoManager.AddEvent({ + undo: () => this.inkData = oldState, + redo: () => this.inkData = newState, + }); + batch.end(); } @action diff --git a/src/server/public/files/.gitignore b/src/server/public/files/.gitignore new file mode 100644 index 000000000..f59ec20aa --- /dev/null +++ b/src/server/public/files/.gitignore @@ -0,0 +1 @@ +* \ No newline at end of file -- cgit v1.2.3-70-g09d2 From 11da26c2f8eacff36c5f9c2da817393cca50ecc5 Mon Sep 17 00:00:00 2001 From: Tyler Schicke Date: Mon, 8 Apr 2019 20:24:31 -0400 Subject: Removed files --- .../files/upload_011289d8c22f5422cf6f7e27a8c780ef.jpg | Bin 218352 -> 0 bytes .../files/upload_01b38428ccc02261e24689b9d887b206.PNG | Bin 14176 -> 0 bytes .../files/upload_01e81815633ee270c8b4ffca88a7773e.jpg | Bin 218352 -> 0 bytes .../files/upload_031371580a23b87aaafb587ece875819.png | Bin 4183 -> 0 bytes .../files/upload_03c44479fe728bbcc2f76dab407544d5.png | Bin 10718 -> 0 bytes .../files/upload_05bae884a3d1a5ca1c3f56f3f395a52d.jpg | Bin 218352 -> 0 bytes .../files/upload_05ceaf4112a0e3754a53ab59f4b1ff07.png | Bin 6199 -> 0 bytes .../files/upload_061bdf72416cbef898d4cd1a0152ce1f.jpg | Bin 218352 -> 0 bytes .../files/upload_06a0e01bb69c56608f4b6a25108c49ff.png | Bin 6199 -> 0 bytes .../files/upload_0714861f8d915bf46238917924224eaf.jpg | Bin 218352 -> 0 bytes .../files/upload_07488f31d6eacb28458c11eb982fa654.jpg | Bin 218352 -> 0 bytes .../files/upload_08afadab5ded674ec3f244b2bd124b8b.PNG | Bin 14176 -> 0 bytes .../files/upload_0901f0e44ee888884fdf7c4a62d5fdc0.png | Bin 20776 -> 0 bytes .../files/upload_09dd8ba7cf7889a00cc73263c2e0a093.jpg | Bin 136356 -> 0 bytes .../files/upload_09df67e3e4c3bcd2a571d8be5f0acf48.PNG | Bin 7337 -> 0 bytes .../files/upload_0b146c7e466256f40c49149cf1432c6f.png | Bin 6199 -> 0 bytes .../files/upload_0ef39c832d6fe3a95134adcfbd129fda.png | Bin 4183 -> 0 bytes .../files/upload_0fa3d6f238c071447df5717aa643a488.PNG | Bin 14176 -> 0 bytes .../files/upload_10b64e99df3aac032564573c3699bda4.png | Bin 10718 -> 0 bytes .../files/upload_110c0b0304ccfbbaedbf083aa692c852.jpg | Bin 218352 -> 0 bytes .../files/upload_11162dd1b00ed2a26923aa9d2fa9889e.png | Bin 4183 -> 0 bytes .../files/upload_115d44864ee866f2986188501a59342b.png | Bin 10718 -> 0 bytes .../files/upload_1465783317d01ed75e87e169b56928fd.PNG | Bin 14176 -> 0 bytes .../files/upload_156cb9406f94654dea0e227e377f0a75.PNG | Bin 7337 -> 0 bytes .../files/upload_16461e5c5a9747bb1ed9643d86bc579d.png | Bin 4183 -> 0 bytes .../files/upload_166eb5d1d46cf268a59e01b4b32528cd.PNG | Bin 7337 -> 0 bytes .../files/upload_16c6865f668f3ee24e224fcb02745018.jpg | Bin 136356 -> 0 bytes .../files/upload_17d2b2f3ec801e6fdcc6d29e523e946b.PNG | Bin 7337 -> 0 bytes .../files/upload_1863f67c2c193452cc5192f0ebac2a7b.png | Bin 6199 -> 0 bytes .../files/upload_18d64bf4a483e78a36153abcd26af503.png | Bin 20776 -> 0 bytes .../files/upload_1a7925dd1140a2b5a7cc5c62ad20a8e8.png | Bin 20776 -> 0 bytes .../files/upload_1c47eb68831fff82bc6982e5df4d02d5.PNG | Bin 14176 -> 0 bytes .../files/upload_1c7de0ca682ae695372acd3a9f3710ff.jpg | Bin 136356 -> 0 bytes .../files/upload_1c8f6233068ed1535384500768557e68.png | Bin 20776 -> 0 bytes .../files/upload_1ea7ee56753d0327192da9666de9e305.PNG | Bin 14160 -> 0 bytes .../files/upload_1fb47532989dc1eb79b5359a0832852b.png | Bin 20776 -> 0 bytes .../files/upload_2098441ee0ad89e51e825e2fb5f641d2.png | Bin 4183 -> 0 bytes .../files/upload_20d84ec8539744577c6b5df8ccb4ea73.png | Bin 6199 -> 0 bytes .../files/upload_239ce7dd57279a470d0f1864744ebf43.PNG | Bin 7337 -> 0 bytes .../files/upload_23a30791fc2afceb92310a665d364dbd.jpg | Bin 218352 -> 0 bytes .../files/upload_23c987d4e99cbd91be1a78aeb5e386c0.png | Bin 6199 -> 0 bytes .../files/upload_2436e82c2c54dd8f33f74e4440d11104.png | Bin 10718 -> 0 bytes .../files/upload_2443e73bbbd67712bcedc04f0ead5617.PNG | Bin 14160 -> 0 bytes .../files/upload_2515fc22ce67c256bf3039bc84e54432.jpg | Bin 136356 -> 0 bytes .../files/upload_25a08948186475ec571965c0169d9b4f.jpg | Bin 218352 -> 0 bytes .../files/upload_280bb85121601366f65632649edd9425.jpg | Bin 136356 -> 0 bytes .../files/upload_284a94d4ba485d6799ee772521846a59.jpg | Bin 218352 -> 0 bytes .../files/upload_28550bbb245dfbe9b24b2354ed349f0c.jpg | Bin 218352 -> 0 bytes .../files/upload_2abbef5268ab7ca77dad96775cb52345.png | Bin 6199 -> 0 bytes .../files/upload_2b5ec0fba66b5b3b5e47a2c53a1005be.jpg | Bin 218352 -> 0 bytes .../files/upload_2b6f66b8972b2f4991239720bb1df7d4.png | Bin 6199 -> 0 bytes .../files/upload_2b75a95a64abfe997aa8e12a69d2bc43.png | Bin 498481 -> 0 bytes .../files/upload_2c689fe57038ad6a324297e92badd705.png | Bin 20776 -> 0 bytes .../files/upload_2c6e59d76562a8cca888f185a85361c9.PNG | Bin 7337 -> 0 bytes .../files/upload_2d86441185e38ed16bbf4234d8857e13.PNG | Bin 14176 -> 0 bytes .../files/upload_2e68bb961e82faddbaa501c5c4e51795.png | Bin 6199 -> 0 bytes .../files/upload_303438040b77efc92ad5a6617edf7000.png | Bin 4183 -> 0 bytes .../files/upload_303b28fc64dd65c58382fe2b0a513190.jpg | Bin 136356 -> 0 bytes .../files/upload_319f73a65644974e6502a79dfb60b777.jpg | Bin 218352 -> 0 bytes .../files/upload_33290055bf62326211eb846bc32d7ab9.PNG | Bin 14176 -> 0 bytes .../files/upload_352949a7d58209759d0ab420726acce3.png | Bin 20776 -> 0 bytes .../files/upload_365e7ad24d7b896dc24525068e8f0fba.png | Bin 4183 -> 0 bytes .../files/upload_372838f14d51f2eb8d24ae68b95febf7.png | Bin 6199 -> 0 bytes .../files/upload_38001ea16c21a82601586e9d7c823e5f.png | Bin 20776 -> 0 bytes .../files/upload_3a201bb6a84388449e58e93932c349eb.png | Bin 6199 -> 0 bytes .../files/upload_3b8c3c92984a098feffd50393870d7b3.PNG | Bin 14176 -> 0 bytes .../files/upload_3bb64e7eb87805eb7c2c67352ab3e3f6.PNG | Bin 14176 -> 0 bytes .../files/upload_3cb5a8a9454a1b42a69a3d274c0a00e7.png | Bin 6199 -> 0 bytes .../files/upload_3db8e110c40cb0770e79a61171eba542.jpg | Bin 218352 -> 0 bytes .../files/upload_3f9cfc08544232b88da72911dea15523.png | Bin 10718 -> 0 bytes .../files/upload_41fc781a82b1f33b631e5aa68c6a1a76.PNG | Bin 14160 -> 0 bytes .../files/upload_42ecb2422b80f6da3afb62543391f58c.PNG | Bin 7337 -> 0 bytes .../files/upload_431be602a66059169d1f4c4cd4646476.PNG | Bin 14176 -> 0 bytes .../files/upload_45180c2f1fcfdd6df6c458d9e719b6e5.jpg | Bin 218352 -> 0 bytes .../files/upload_4543a61bc7c5f79c788b749a9ce7535a.PNG | Bin 7337 -> 0 bytes .../files/upload_45e88f05b821eca6b85c1fc7b048af63.jpg | Bin 136356 -> 0 bytes .../files/upload_493879305f109a4412223137f7031944.png | Bin 6199 -> 0 bytes .../files/upload_49ac63665b883ea4702733fc8d70f6b1.PNG | Bin 14176 -> 0 bytes .../files/upload_4a3f81801b685005524ae014e9646489.PNG | Bin 7337 -> 0 bytes .../files/upload_4a832ad72dd1a1268523aef043aeaf46.jpg | Bin 136356 -> 0 bytes .../files/upload_4bae9cba19a30d8f113a70e4437a0cfe.jpg | Bin 136356 -> 0 bytes .../files/upload_4bc2bdf9a392b8e567b964f59cfd32a8.PNG | Bin 7337 -> 0 bytes .../files/upload_4e4560c1f0081b87af4c010792d799fc.jpg | Bin 136356 -> 0 bytes .../files/upload_4e56e150f5c92f8980c4df49603747cc.png | Bin 6199 -> 0 bytes .../files/upload_4e897855f35d0aa419d27bfaedae4435.png | Bin 10718 -> 0 bytes .../files/upload_5495509165b60d3c04b8e509a7d187ba.PNG | Bin 14176 -> 0 bytes .../files/upload_54d3dcb522f9fe3beb060103248a5ee9.png | Bin 10718 -> 0 bytes .../files/upload_568996cd49829901200e1bec2b49a176.PNG | Bin 7337 -> 0 bytes .../files/upload_5757898e2b8507438e1bdaf7b7fee4bb.png | Bin 10718 -> 0 bytes .../files/upload_57c4353c9d3250bac49753be6b8973c6.png | Bin 20776 -> 0 bytes .../files/upload_57f2901b84275f3e40ca9d41cb7c057d.PNG | Bin 14176 -> 0 bytes .../files/upload_580d262f8a55c2fe3acbc6f0e690ad56.png | Bin 6199 -> 0 bytes .../files/upload_5812547b99439b07d534333fddc6b225.PNG | Bin 14176 -> 0 bytes .../files/upload_58782b7ba1ac3963c4fdd5a987bf0aca.PNG | Bin 7337 -> 0 bytes .../files/upload_588f580df306a338f7be0483dc30d576.jpg | Bin 136356 -> 0 bytes .../files/upload_58adf6abfe999b72c185d30a51c206b0.png | Bin 4183 -> 0 bytes .../files/upload_590c965f849c296ae3841689ce80b548.png | Bin 20776 -> 0 bytes .../files/upload_5915c6516d7a7db8164f7e395b81973e.PNG | Bin 7337 -> 0 bytes .../files/upload_594db1ea036d584bc71de979ce57832b.PNG | Bin 14176 -> 0 bytes .../files/upload_5bf829a0b264b321b9b17267ab06a11b.png | Bin 20776 -> 0 bytes .../files/upload_5cba158af25fb2058c1b2e130cd3fefc.png | Bin 6199 -> 0 bytes .../files/upload_5d5f91ac61a5e55192c1de4402483126.png | Bin 10718 -> 0 bytes .../files/upload_5ea64a359728395c1608b8783f6fb192.PNG | Bin 7337 -> 0 bytes .../files/upload_5f0bace6da44bc7084c6ad01fcfe1012.png | Bin 4183 -> 0 bytes .../files/upload_5fe9f9fe6eb4a78dcde144c9d4e5d6bb.png | Bin 10718 -> 0 bytes .../files/upload_604cd121c8ecb30eb4d13cded9ce8746.png | Bin 20776 -> 0 bytes .../files/upload_60f89c7647c6ed08d977e485fea9e033.jpg | Bin 218352 -> 0 bytes .../files/upload_62900e4354015fc2bc78f00afbc1bc21.png | Bin 10718 -> 0 bytes .../files/upload_62f1a7fa74224de7248c62d6d4242fd0.jpg | Bin 218352 -> 0 bytes .../files/upload_63a7127553e83f381212c80f607c6db5.png | Bin 10718 -> 0 bytes .../files/upload_63c37ab66ad16d68ef96670b1d04ee1c.png | Bin 6199 -> 0 bytes .../files/upload_64b736086e1c8215c2b9de43a19bb928.jpg | Bin 218352 -> 0 bytes .../files/upload_64fa0ccc7772023db7564d5659ff41d5.png | Bin 20776 -> 0 bytes .../files/upload_65026d029f9876b08bba109db1e4db5a.jpg | Bin 136356 -> 0 bytes .../files/upload_665fb37c1505fdf48a665990caf09d26.png | Bin 4183 -> 0 bytes .../files/upload_670ccc71dfb9e7abf92cde3c42857e9f.png | Bin 6199 -> 0 bytes .../files/upload_67c7a2ac39caabaac7b90861a1314b8f.png | Bin 10718 -> 0 bytes .../files/upload_680394edbfb281065997525cc114f996.PNG | Bin 7337 -> 0 bytes .../files/upload_684090a0c50a035aaa0df23c18043df8.png | Bin 10718 -> 0 bytes .../files/upload_6aac0ac0c3ea8ce495192f3b8411c972.jpg | Bin 218352 -> 0 bytes .../files/upload_6bd24b1193058458d6ea268b06963931.PNG | Bin 7337 -> 0 bytes .../files/upload_6bde8211989cf1b540b3c6dcf16cd51a.PNG | Bin 7337 -> 0 bytes .../files/upload_6d5051266bd739f260105072299b5c79.png | Bin 4183 -> 0 bytes .../files/upload_6d9a3ec37d85659265f2b622a6d24dcb.jpg | Bin 136356 -> 0 bytes .../files/upload_6f222fae83f0185e361bf6a757ba9800.png | Bin 10718 -> 0 bytes .../files/upload_6f4121994024587809ddc7384fe23ce2.png | Bin 4183 -> 0 bytes .../files/upload_6f5b0c8a474e44d76cbbea5f629e8fba.png | Bin 498481 -> 0 bytes .../files/upload_7068f1e2ec782980b4eded2ff974da7f.jpg | Bin 136356 -> 0 bytes .../files/upload_72c05840ea8bddc44575309923d4c63b.jpg | Bin 218352 -> 0 bytes .../files/upload_73b42f2f26e037078c1f1c63913fc9aa.jpg | Bin 136356 -> 0 bytes .../files/upload_73f408a5bcbce75ec15c792d71117a17.png | Bin 10718 -> 0 bytes .../files/upload_7412310b57204cb3c36d5aba670589fc.PNG | Bin 14176 -> 0 bytes .../files/upload_74a5d4bdab98f4139d1cdde3bcfc0028.png | Bin 10718 -> 0 bytes .../files/upload_75d331ba20a80ca0f6fd18bc0b37b8b3.PNG | Bin 14176 -> 0 bytes .../files/upload_77eab9365e5c11d5e1ac08fca6c862ab.png | Bin 4183 -> 0 bytes .../files/upload_784bbf8696065b99641d8bd01964e847.PNG | Bin 14176 -> 0 bytes .../files/upload_786b4b94fda60ba60da3dfe2be091b6b.png | Bin 6199 -> 0 bytes .../files/upload_793745d2b6c8a5c3dbeea343b9332846.PNG | Bin 14160 -> 0 bytes .../files/upload_7b1546e215c8349433473f42b95ddb49.png | Bin 6199 -> 0 bytes .../files/upload_7c369564861f079a17bd77081ace597b.PNG | Bin 14160 -> 0 bytes .../files/upload_7c7f3f317ea27a2ddad9e8a34f636b78.png | Bin 20776 -> 0 bytes .../files/upload_7f357bbbe7756dabad0b9cb49c9ceb0c.PNG | Bin 14176 -> 0 bytes .../files/upload_814802d9faf217a7b09c1c95c4ecfd05.png | Bin 48172 -> 0 bytes .../files/upload_81d848c9cb61c7b81f861f4c1cc9700f.PNG | Bin 14176 -> 0 bytes .../files/upload_83180cda4fa509f6ff0654376c1da7f2.jpg | Bin 218352 -> 0 bytes .../files/upload_8321ece56de47e0bf5345fe30d23414e.PNG | Bin 7337 -> 0 bytes .../files/upload_8383bbac88cfbffbfb240ef19ca5eb4c.jpg | Bin 136356 -> 0 bytes .../files/upload_871f1af44ec7a2140f32433f3015d603.jpg | Bin 218352 -> 0 bytes .../files/upload_892d1d9d981f679fedaa2c5bf193fd20.jpg | Bin 136356 -> 0 bytes .../files/upload_89721bf0d244b1fcc52f70a7d9e3593b.jpg | Bin 136356 -> 0 bytes .../files/upload_89e66f8d531a44a63fa3355602813ae7.png | Bin 6199 -> 0 bytes .../files/upload_8a6090d2b978221d0810b954f7b14065.PNG | Bin 14176 -> 0 bytes .../files/upload_8b35f3b65fd7d57b5523b331c5f6eb16.png | Bin 20776 -> 0 bytes .../files/upload_8b7f07f131490ebfa256650bb13ffa55.png | Bin 4183 -> 0 bytes .../files/upload_8b92f6ffc9a8c8353fd141c6dc71895f.jpg | Bin 136356 -> 0 bytes .../files/upload_8bfca62429aada8f6b5dae1dcde24cab.png | Bin 20776 -> 0 bytes .../files/upload_8e9e27d1918f3a0a5f242397079e66fa.png | Bin 20776 -> 0 bytes .../files/upload_8ef0953ff77d42848b6e7f37e9bd506d.PNG | Bin 14176 -> 0 bytes .../files/upload_902c6b9c79da47ec00238f4831795077.jpg | Bin 218352 -> 0 bytes .../files/upload_90d380b38492369c1470868b019f0d0c.jpg | Bin 218352 -> 0 bytes .../files/upload_95af42b1b5db521aa1539980fe85e71a.jpg | Bin 136356 -> 0 bytes .../files/upload_97031060c857a0e8f15af3fcc038a2b8.jpg | Bin 218352 -> 0 bytes .../files/upload_9752dc8c3d531e4e39977537a46175d6.png | Bin 4183 -> 0 bytes .../files/upload_97903efc6c08245acaea37eefacf289f.png | Bin 20776 -> 0 bytes .../files/upload_9974b3459e182fef33b8e467058b7525.png | Bin 4183 -> 0 bytes .../files/upload_9a8429dac8feba05bbda2b53b5da4efa.jpg | Bin 218352 -> 0 bytes .../files/upload_9bbc86def05076b89080adcc37481324.jpg | Bin 136356 -> 0 bytes .../files/upload_9cd52fc451f3d459021127a7d51d108b.png | Bin 20776 -> 0 bytes .../files/upload_9d0400abf02c3bcbb8bd9e98ecd39c3b.png | Bin 6199 -> 0 bytes .../files/upload_9de9f004f258cee8c55bf872362d6453.jpg | Bin 218352 -> 0 bytes .../files/upload_9e3f3882855fb38d035d7bd5aa7b40dd.png | Bin 6199 -> 0 bytes .../files/upload_9e4be07bc9ff02adcc0533c5754bb0aa.jpg | Bin 136356 -> 0 bytes .../files/upload_9ebd41e77015a8f992cbb1b93e657723.png | Bin 10718 -> 0 bytes .../files/upload_a0286ae2a1eec8c31c8276ec067d91aa.png | Bin 20776 -> 0 bytes .../files/upload_a04473da584e5a602d0f8984a670a91c.jpg | Bin 136356 -> 0 bytes .../files/upload_a2cf3f6ab4ab5b249ebf8100e461aa27.png | Bin 4183 -> 0 bytes .../files/upload_a3095034ec19353c9ee55221088f01d8.PNG | Bin 14176 -> 0 bytes .../files/upload_a520a6856021104b8130f8d3b42d85c0.png | Bin 6199 -> 0 bytes .../files/upload_a5c26f52ddcbd705ffbd3dfd7cd2ce40.jpg | Bin 136356 -> 0 bytes .../files/upload_a5d66b65cc97949c83cacec867435b5c.png | Bin 10718 -> 0 bytes .../files/upload_a60864ff7892974e941e42a2441e530d.png | Bin 6199 -> 0 bytes .../files/upload_a6a70d84ebb65febf7900e29f52cc86d.pdf | Bin 1043556 -> 0 bytes .../files/upload_a77f86dbeaa0c3cecc2516f9d9cecf1d.png | Bin 4183 -> 0 bytes .../files/upload_aa2bbeb0871a2d6b4b54524ac2758270.jpg | Bin 218352 -> 0 bytes .../files/upload_aa9fec4828bfdfef3ae20d43997fb274.png | Bin 10718 -> 0 bytes .../files/upload_ab2331f42200e3377a8f86e1e19771e2.PNG | Bin 7337 -> 0 bytes .../files/upload_ab2bba2cee88991561f20d7cd69ec6e1.png | Bin 10718 -> 0 bytes .../files/upload_ace7fe3faff9ec0fcdf204618e01c81d.png | Bin 10718 -> 0 bytes .../files/upload_ad1a225687c7dbc7b8bf65a95c6a6116.PNG | Bin 7337 -> 0 bytes .../files/upload_ade63c18d326beb6f0a621e6e0418aec.jpg | Bin 218352 -> 0 bytes .../files/upload_ae1c01e481fc6b753c78605bfbe680b9.png | Bin 20776 -> 0 bytes .../files/upload_ae9a8899588dc7c3a7edeb91bfdb6bdb.png | Bin 4183 -> 0 bytes .../files/upload_b0d25a0dccc640f78dcbc291f930b5d6.png | Bin 6199 -> 0 bytes .../files/upload_b0e527b27b7cabf651b29c9d834d24f3.PNG | Bin 7337 -> 0 bytes .../files/upload_b0ea7e49e84cf91075962a75c76d3233.png | Bin 6199 -> 0 bytes .../files/upload_b1b334829e1d99d7cd32fae5044cc103.PNG | Bin 7337 -> 0 bytes .../files/upload_b52adf6e1ecdbbe76aa3c038ddc3b02b.PNG | Bin 14160 -> 0 bytes .../files/upload_b6c992aa6c434520887521e11bb5f492.png | Bin 4183 -> 0 bytes .../files/upload_ba04eb816ef3bec770aa7eebf3b21cb1.PNG | Bin 14176 -> 0 bytes .../files/upload_ba58066314a79d1c845241fb4400e44d.png | Bin 20776 -> 0 bytes .../files/upload_ba9e9137b43cf498a267083592095c41.png | Bin 20776 -> 0 bytes .../files/upload_bb6b521b4df6bd783d6a5b83a66caa0a.jpg | Bin 136356 -> 0 bytes .../files/upload_bcb173a15068ded66b39623ab18bfdb7.jpg | Bin 218352 -> 0 bytes .../files/upload_bd9241247d162ebeb0cfead8dc675710.jpg | Bin 218352 -> 0 bytes .../files/upload_be4034faba6a5313dfb8a53e18ffc188.png | Bin 10718 -> 0 bytes .../files/upload_be5f90995b34cd30d9a269b5a9f10fcc.PNG | Bin 7337 -> 0 bytes .../files/upload_c192a71107e2178a2fac4aa449398bc0.PNG | Bin 14176 -> 0 bytes .../files/upload_c1a964ca145f45e7e666cfaf7c8398e3.png | Bin 4183 -> 0 bytes .../files/upload_c1e3a094ce9ec748a69f957c81a3cd8b.png | Bin 4183 -> 0 bytes .../files/upload_c3c6bd5cea465fe324d811914343273c.png | Bin 20776 -> 0 bytes .../files/upload_c6764790a8182d796acddb76d3df595e.PNG | Bin 14176 -> 0 bytes .../files/upload_c81bff72d05e0bb7f13376a46506ec2a.jpg | Bin 39678 -> 0 bytes .../files/upload_c98c0184a19b621b2bc0575b49996a69.png | Bin 20776 -> 0 bytes .../files/upload_cb4d875a9f73d1f735da5ae82dce6eb1.jpg | Bin 136356 -> 0 bytes .../files/upload_ccc4366571b738bcb0554c8ee09f6939.png | Bin 20776 -> 0 bytes .../files/upload_cd08524995e5f124505fe3d7ab38a41f.png | Bin 4183 -> 0 bytes .../files/upload_cd73b55488fcc7e5e5e5f2a4c43bc1fd.png | Bin 20776 -> 0 bytes .../files/upload_ce357d5a6d727ac44110c60dd379428f.png | Bin 10718 -> 0 bytes .../files/upload_d00c34a1e1c319a9373b5f136c38a866.jpg | Bin 136356 -> 0 bytes .../files/upload_d0fba915f725751729902c8fc7f52fa5.PNG | Bin 7337 -> 0 bytes .../files/upload_d242527805ab4c52f2385ae57b85e6fb.png | Bin 20776 -> 0 bytes .../files/upload_d28007fa68c809cd3c0a78d4a8727275.png | Bin 4183 -> 0 bytes .../files/upload_d31f8b1aea49fda272bbf338921dd091.PNG | Bin 14176 -> 0 bytes .../files/upload_d35ea9c62bf8da0352a16193b880469e.jpg | Bin 218352 -> 0 bytes .../files/upload_d4e0e9d2aee31b5931129dc3bc83e813.png | Bin 6199 -> 0 bytes .../files/upload_d4e9437dcbc0063bce5a3759b9dfb49a.PNG | Bin 14176 -> 0 bytes .../files/upload_d5801c03d9562a612d1907085ba39373.jpg | Bin 218352 -> 0 bytes .../files/upload_d5f7bf517ce48399335ddba84c8d4ab0.png | Bin 20776 -> 0 bytes .../files/upload_d6d0e3a302e0edafa70785c39041e522.PNG | Bin 14176 -> 0 bytes .../files/upload_d6e725cc697751599b177e0cf330b9f2.jpg | Bin 218352 -> 0 bytes .../files/upload_d794d56fcab3b93b6c79aa201cba34f8.png | Bin 48172 -> 0 bytes .../files/upload_d8abeaef04a42678432e5e1d3377a2d0.png | Bin 20776 -> 0 bytes .../files/upload_da6608dc0695c7f75a3524ea500c330e.png | Bin 20776 -> 0 bytes .../files/upload_dac5245c657d29c1c4dfba98472fb50d.pdf | Bin 331305 -> 0 bytes .../files/upload_db3c5a0b560c9da35607359d86cf2b97.png | Bin 4183 -> 0 bytes .../files/upload_dc8821dc596b1938c855e0affbe614dd.png | Bin 20776 -> 0 bytes .../files/upload_dcf410af62d7fc04cf3f6877b3ba2e51.PNG | Bin 7337 -> 0 bytes .../files/upload_debf3e3f21210ae1d9325de9f7a76b88.jpg | Bin 218352 -> 0 bytes .../files/upload_df7697c4832990aad0e8d9f0daa1711b.png | Bin 10718 -> 0 bytes .../files/upload_e009e45db30e47383fad5d71908dc69d.png | Bin 20776 -> 0 bytes .../files/upload_e15738d092ff38197dc1fb41a4747d16.jpg | Bin 218352 -> 0 bytes .../files/upload_e35c2e0064480e9dabba86383616edf6.PNG | Bin 14176 -> 0 bytes .../files/upload_e51079d9af97a412353d63c60e1ea96d.png | Bin 4183 -> 0 bytes .../files/upload_e5422cdcfa80628842ff3aacf14ad25e.png | Bin 20776 -> 0 bytes .../files/upload_e61906d7b33cee7669f8789e715b604f.png | Bin 20776 -> 0 bytes .../files/upload_e6256196c38216ac539ef7e8ee28ab02.png | Bin 6199 -> 0 bytes .../files/upload_e9668199bd12c905f27be76b11366d68.png | Bin 6199 -> 0 bytes .../files/upload_e98ebeeebd5f0ddc98ea9b3a2d9f40d2.png | Bin 4183 -> 0 bytes .../files/upload_eb2f002129e0cfb5c940f6b4ecc5a8f2.jpg | Bin 136356 -> 0 bytes .../files/upload_ec02ff06b3154d269086e23ebf6ad942.png | Bin 10718 -> 0 bytes .../files/upload_ec328e1918dfe0f51df8b2b8ca6d92fd.png | Bin 4183 -> 0 bytes .../files/upload_ef3873102a70850a4da2040eab002c55.jpg | Bin 136356 -> 0 bytes .../files/upload_f1b4bff241d496ef6baaa442a3c618f4.jpg | Bin 136356 -> 0 bytes .../files/upload_f259c9aa37b0919d6d20ad8d75e8329e.png | Bin 10718 -> 0 bytes .../files/upload_f3377c99ddc77928017638236694af4b.png | Bin 4183 -> 0 bytes .../files/upload_f3967f76077ddf77c71b4ed93b55b458.jpg | Bin 136356 -> 0 bytes .../files/upload_f43fa8444a93b800e783f1678e8eea21.png | Bin 10718 -> 0 bytes .../files/upload_f48143c75b8c2412785e3ed31ebbb150.PNG | Bin 7337 -> 0 bytes .../files/upload_f48b0e9019271046a629255cc8f51c1f.PNG | Bin 7337 -> 0 bytes .../files/upload_f5347da10a373480807fc3469533b9fe.png | Bin 4183 -> 0 bytes .../files/upload_f67448d7694d9082eb69ad629ade2a4a.PNG | Bin 7337 -> 0 bytes .../files/upload_f6e36f6d3de7a2036eeff617f186b78f.png | Bin 4183 -> 0 bytes .../files/upload_f6f1ed7a268523278457de08ee61bcfa.PNG | Bin 7337 -> 0 bytes .../files/upload_f73607b7cf818631165aca9d32ef19c5.jpg | Bin 136356 -> 0 bytes .../files/upload_f804a6c7ec796718d66108af0b1e6d0e.png | Bin 10718 -> 0 bytes .../files/upload_f8307a4816234347e87a3fd524af6fe6.PNG | Bin 7337 -> 0 bytes .../files/upload_f99b60f30db42cdb957815ac6e97c0b9.PNG | Bin 14176 -> 0 bytes .../files/upload_f9ed03ab046d7f579d6f531df9c4050a.PNG | Bin 14176 -> 0 bytes .../files/upload_faba09549e972883769292575a989114.png | Bin 10718 -> 0 bytes .../files/upload_fac4f686367ad63f2fcc1d8b4f74f123.png | Bin 4183 -> 0 bytes .../files/upload_faebd8bdc2b00efe50b232c9cf4e63b6.PNG | Bin 7337 -> 0 bytes .../files/upload_fb3cc3a1d715a6ffa1c72bde91faf3af.png | Bin 6199 -> 0 bytes .../files/upload_fd3cdbf70518664b7a8ae4427d51c495.png | Bin 10718 -> 0 bytes .../files/upload_fe2dbe44900645eba61207748f63ade3.jpg | Bin 136356 -> 0 bytes .../files/upload_ff4cf3406ba86b958689d63c94c8f102.jpg | Bin 218352 -> 0 bytes .../files/upload_ff587ba9691ad8c5971f35e1fe601e72.png | Bin 10718 -> 0 bytes .../files/upload_ffd58755419ab98f03d56fedd16736e9.jpg | Bin 218352 -> 0 bytes 277 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/server/public/files/upload_011289d8c22f5422cf6f7e27a8c780ef.jpg delete mode 100644 src/server/public/files/upload_01b38428ccc02261e24689b9d887b206.PNG delete mode 100644 src/server/public/files/upload_01e81815633ee270c8b4ffca88a7773e.jpg delete mode 100644 src/server/public/files/upload_031371580a23b87aaafb587ece875819.png delete mode 100644 src/server/public/files/upload_03c44479fe728bbcc2f76dab407544d5.png delete mode 100644 src/server/public/files/upload_05bae884a3d1a5ca1c3f56f3f395a52d.jpg delete mode 100644 src/server/public/files/upload_05ceaf4112a0e3754a53ab59f4b1ff07.png delete mode 100644 src/server/public/files/upload_061bdf72416cbef898d4cd1a0152ce1f.jpg delete mode 100644 src/server/public/files/upload_06a0e01bb69c56608f4b6a25108c49ff.png delete mode 100644 src/server/public/files/upload_0714861f8d915bf46238917924224eaf.jpg delete mode 100644 src/server/public/files/upload_07488f31d6eacb28458c11eb982fa654.jpg delete mode 100644 src/server/public/files/upload_08afadab5ded674ec3f244b2bd124b8b.PNG delete mode 100644 src/server/public/files/upload_0901f0e44ee888884fdf7c4a62d5fdc0.png delete mode 100644 src/server/public/files/upload_09dd8ba7cf7889a00cc73263c2e0a093.jpg delete mode 100644 src/server/public/files/upload_09df67e3e4c3bcd2a571d8be5f0acf48.PNG delete mode 100644 src/server/public/files/upload_0b146c7e466256f40c49149cf1432c6f.png delete mode 100644 src/server/public/files/upload_0ef39c832d6fe3a95134adcfbd129fda.png delete mode 100644 src/server/public/files/upload_0fa3d6f238c071447df5717aa643a488.PNG delete mode 100644 src/server/public/files/upload_10b64e99df3aac032564573c3699bda4.png delete mode 100644 src/server/public/files/upload_110c0b0304ccfbbaedbf083aa692c852.jpg delete mode 100644 src/server/public/files/upload_11162dd1b00ed2a26923aa9d2fa9889e.png delete mode 100644 src/server/public/files/upload_115d44864ee866f2986188501a59342b.png delete mode 100644 src/server/public/files/upload_1465783317d01ed75e87e169b56928fd.PNG delete mode 100644 src/server/public/files/upload_156cb9406f94654dea0e227e377f0a75.PNG delete mode 100644 src/server/public/files/upload_16461e5c5a9747bb1ed9643d86bc579d.png delete mode 100644 src/server/public/files/upload_166eb5d1d46cf268a59e01b4b32528cd.PNG delete mode 100644 src/server/public/files/upload_16c6865f668f3ee24e224fcb02745018.jpg delete mode 100644 src/server/public/files/upload_17d2b2f3ec801e6fdcc6d29e523e946b.PNG delete mode 100644 src/server/public/files/upload_1863f67c2c193452cc5192f0ebac2a7b.png delete mode 100644 src/server/public/files/upload_18d64bf4a483e78a36153abcd26af503.png delete mode 100644 src/server/public/files/upload_1a7925dd1140a2b5a7cc5c62ad20a8e8.png delete mode 100644 src/server/public/files/upload_1c47eb68831fff82bc6982e5df4d02d5.PNG delete mode 100644 src/server/public/files/upload_1c7de0ca682ae695372acd3a9f3710ff.jpg delete mode 100644 src/server/public/files/upload_1c8f6233068ed1535384500768557e68.png delete mode 100644 src/server/public/files/upload_1ea7ee56753d0327192da9666de9e305.PNG delete mode 100644 src/server/public/files/upload_1fb47532989dc1eb79b5359a0832852b.png delete mode 100644 src/server/public/files/upload_2098441ee0ad89e51e825e2fb5f641d2.png delete mode 100644 src/server/public/files/upload_20d84ec8539744577c6b5df8ccb4ea73.png delete mode 100644 src/server/public/files/upload_239ce7dd57279a470d0f1864744ebf43.PNG delete mode 100644 src/server/public/files/upload_23a30791fc2afceb92310a665d364dbd.jpg delete mode 100644 src/server/public/files/upload_23c987d4e99cbd91be1a78aeb5e386c0.png delete mode 100644 src/server/public/files/upload_2436e82c2c54dd8f33f74e4440d11104.png delete mode 100644 src/server/public/files/upload_2443e73bbbd67712bcedc04f0ead5617.PNG delete mode 100644 src/server/public/files/upload_2515fc22ce67c256bf3039bc84e54432.jpg delete mode 100644 src/server/public/files/upload_25a08948186475ec571965c0169d9b4f.jpg delete mode 100644 src/server/public/files/upload_280bb85121601366f65632649edd9425.jpg delete mode 100644 src/server/public/files/upload_284a94d4ba485d6799ee772521846a59.jpg delete mode 100644 src/server/public/files/upload_28550bbb245dfbe9b24b2354ed349f0c.jpg delete mode 100644 src/server/public/files/upload_2abbef5268ab7ca77dad96775cb52345.png delete mode 100644 src/server/public/files/upload_2b5ec0fba66b5b3b5e47a2c53a1005be.jpg delete mode 100644 src/server/public/files/upload_2b6f66b8972b2f4991239720bb1df7d4.png delete mode 100644 src/server/public/files/upload_2b75a95a64abfe997aa8e12a69d2bc43.png delete mode 100644 src/server/public/files/upload_2c689fe57038ad6a324297e92badd705.png delete mode 100644 src/server/public/files/upload_2c6e59d76562a8cca888f185a85361c9.PNG delete mode 100644 src/server/public/files/upload_2d86441185e38ed16bbf4234d8857e13.PNG delete mode 100644 src/server/public/files/upload_2e68bb961e82faddbaa501c5c4e51795.png delete mode 100644 src/server/public/files/upload_303438040b77efc92ad5a6617edf7000.png delete mode 100644 src/server/public/files/upload_303b28fc64dd65c58382fe2b0a513190.jpg delete mode 100644 src/server/public/files/upload_319f73a65644974e6502a79dfb60b777.jpg delete mode 100644 src/server/public/files/upload_33290055bf62326211eb846bc32d7ab9.PNG delete mode 100644 src/server/public/files/upload_352949a7d58209759d0ab420726acce3.png delete mode 100644 src/server/public/files/upload_365e7ad24d7b896dc24525068e8f0fba.png delete mode 100644 src/server/public/files/upload_372838f14d51f2eb8d24ae68b95febf7.png delete mode 100644 src/server/public/files/upload_38001ea16c21a82601586e9d7c823e5f.png delete mode 100644 src/server/public/files/upload_3a201bb6a84388449e58e93932c349eb.png delete mode 100644 src/server/public/files/upload_3b8c3c92984a098feffd50393870d7b3.PNG delete mode 100644 src/server/public/files/upload_3bb64e7eb87805eb7c2c67352ab3e3f6.PNG delete mode 100644 src/server/public/files/upload_3cb5a8a9454a1b42a69a3d274c0a00e7.png delete mode 100644 src/server/public/files/upload_3db8e110c40cb0770e79a61171eba542.jpg delete mode 100644 src/server/public/files/upload_3f9cfc08544232b88da72911dea15523.png delete mode 100644 src/server/public/files/upload_41fc781a82b1f33b631e5aa68c6a1a76.PNG delete mode 100644 src/server/public/files/upload_42ecb2422b80f6da3afb62543391f58c.PNG delete mode 100644 src/server/public/files/upload_431be602a66059169d1f4c4cd4646476.PNG delete mode 100644 src/server/public/files/upload_45180c2f1fcfdd6df6c458d9e719b6e5.jpg delete mode 100644 src/server/public/files/upload_4543a61bc7c5f79c788b749a9ce7535a.PNG delete mode 100644 src/server/public/files/upload_45e88f05b821eca6b85c1fc7b048af63.jpg delete mode 100644 src/server/public/files/upload_493879305f109a4412223137f7031944.png delete mode 100644 src/server/public/files/upload_49ac63665b883ea4702733fc8d70f6b1.PNG delete mode 100644 src/server/public/files/upload_4a3f81801b685005524ae014e9646489.PNG delete mode 100644 src/server/public/files/upload_4a832ad72dd1a1268523aef043aeaf46.jpg delete mode 100644 src/server/public/files/upload_4bae9cba19a30d8f113a70e4437a0cfe.jpg delete mode 100644 src/server/public/files/upload_4bc2bdf9a392b8e567b964f59cfd32a8.PNG delete mode 100644 src/server/public/files/upload_4e4560c1f0081b87af4c010792d799fc.jpg delete mode 100644 src/server/public/files/upload_4e56e150f5c92f8980c4df49603747cc.png delete mode 100644 src/server/public/files/upload_4e897855f35d0aa419d27bfaedae4435.png delete mode 100644 src/server/public/files/upload_5495509165b60d3c04b8e509a7d187ba.PNG delete mode 100644 src/server/public/files/upload_54d3dcb522f9fe3beb060103248a5ee9.png delete mode 100644 src/server/public/files/upload_568996cd49829901200e1bec2b49a176.PNG delete mode 100644 src/server/public/files/upload_5757898e2b8507438e1bdaf7b7fee4bb.png delete mode 100644 src/server/public/files/upload_57c4353c9d3250bac49753be6b8973c6.png delete mode 100644 src/server/public/files/upload_57f2901b84275f3e40ca9d41cb7c057d.PNG delete mode 100644 src/server/public/files/upload_580d262f8a55c2fe3acbc6f0e690ad56.png delete mode 100644 src/server/public/files/upload_5812547b99439b07d534333fddc6b225.PNG delete mode 100644 src/server/public/files/upload_58782b7ba1ac3963c4fdd5a987bf0aca.PNG delete mode 100644 src/server/public/files/upload_588f580df306a338f7be0483dc30d576.jpg delete mode 100644 src/server/public/files/upload_58adf6abfe999b72c185d30a51c206b0.png delete mode 100644 src/server/public/files/upload_590c965f849c296ae3841689ce80b548.png delete mode 100644 src/server/public/files/upload_5915c6516d7a7db8164f7e395b81973e.PNG delete mode 100644 src/server/public/files/upload_594db1ea036d584bc71de979ce57832b.PNG delete mode 100644 src/server/public/files/upload_5bf829a0b264b321b9b17267ab06a11b.png delete mode 100644 src/server/public/files/upload_5cba158af25fb2058c1b2e130cd3fefc.png delete mode 100644 src/server/public/files/upload_5d5f91ac61a5e55192c1de4402483126.png delete mode 100644 src/server/public/files/upload_5ea64a359728395c1608b8783f6fb192.PNG delete mode 100644 src/server/public/files/upload_5f0bace6da44bc7084c6ad01fcfe1012.png delete mode 100644 src/server/public/files/upload_5fe9f9fe6eb4a78dcde144c9d4e5d6bb.png delete mode 100644 src/server/public/files/upload_604cd121c8ecb30eb4d13cded9ce8746.png delete mode 100644 src/server/public/files/upload_60f89c7647c6ed08d977e485fea9e033.jpg delete mode 100644 src/server/public/files/upload_62900e4354015fc2bc78f00afbc1bc21.png delete mode 100644 src/server/public/files/upload_62f1a7fa74224de7248c62d6d4242fd0.jpg delete mode 100644 src/server/public/files/upload_63a7127553e83f381212c80f607c6db5.png delete mode 100644 src/server/public/files/upload_63c37ab66ad16d68ef96670b1d04ee1c.png delete mode 100644 src/server/public/files/upload_64b736086e1c8215c2b9de43a19bb928.jpg delete mode 100644 src/server/public/files/upload_64fa0ccc7772023db7564d5659ff41d5.png delete mode 100644 src/server/public/files/upload_65026d029f9876b08bba109db1e4db5a.jpg delete mode 100644 src/server/public/files/upload_665fb37c1505fdf48a665990caf09d26.png delete mode 100644 src/server/public/files/upload_670ccc71dfb9e7abf92cde3c42857e9f.png delete mode 100644 src/server/public/files/upload_67c7a2ac39caabaac7b90861a1314b8f.png delete mode 100644 src/server/public/files/upload_680394edbfb281065997525cc114f996.PNG delete mode 100644 src/server/public/files/upload_684090a0c50a035aaa0df23c18043df8.png delete mode 100644 src/server/public/files/upload_6aac0ac0c3ea8ce495192f3b8411c972.jpg delete mode 100644 src/server/public/files/upload_6bd24b1193058458d6ea268b06963931.PNG delete mode 100644 src/server/public/files/upload_6bde8211989cf1b540b3c6dcf16cd51a.PNG delete mode 100644 src/server/public/files/upload_6d5051266bd739f260105072299b5c79.png delete mode 100644 src/server/public/files/upload_6d9a3ec37d85659265f2b622a6d24dcb.jpg delete mode 100644 src/server/public/files/upload_6f222fae83f0185e361bf6a757ba9800.png delete mode 100644 src/server/public/files/upload_6f4121994024587809ddc7384fe23ce2.png delete mode 100644 src/server/public/files/upload_6f5b0c8a474e44d76cbbea5f629e8fba.png delete mode 100644 src/server/public/files/upload_7068f1e2ec782980b4eded2ff974da7f.jpg delete mode 100644 src/server/public/files/upload_72c05840ea8bddc44575309923d4c63b.jpg delete mode 100644 src/server/public/files/upload_73b42f2f26e037078c1f1c63913fc9aa.jpg delete mode 100644 src/server/public/files/upload_73f408a5bcbce75ec15c792d71117a17.png delete mode 100644 src/server/public/files/upload_7412310b57204cb3c36d5aba670589fc.PNG delete mode 100644 src/server/public/files/upload_74a5d4bdab98f4139d1cdde3bcfc0028.png delete mode 100644 src/server/public/files/upload_75d331ba20a80ca0f6fd18bc0b37b8b3.PNG delete mode 100644 src/server/public/files/upload_77eab9365e5c11d5e1ac08fca6c862ab.png delete mode 100644 src/server/public/files/upload_784bbf8696065b99641d8bd01964e847.PNG delete mode 100644 src/server/public/files/upload_786b4b94fda60ba60da3dfe2be091b6b.png delete mode 100644 src/server/public/files/upload_793745d2b6c8a5c3dbeea343b9332846.PNG delete mode 100644 src/server/public/files/upload_7b1546e215c8349433473f42b95ddb49.png delete mode 100644 src/server/public/files/upload_7c369564861f079a17bd77081ace597b.PNG delete mode 100644 src/server/public/files/upload_7c7f3f317ea27a2ddad9e8a34f636b78.png delete mode 100644 src/server/public/files/upload_7f357bbbe7756dabad0b9cb49c9ceb0c.PNG delete mode 100644 src/server/public/files/upload_814802d9faf217a7b09c1c95c4ecfd05.png delete mode 100644 src/server/public/files/upload_81d848c9cb61c7b81f861f4c1cc9700f.PNG delete mode 100644 src/server/public/files/upload_83180cda4fa509f6ff0654376c1da7f2.jpg delete mode 100644 src/server/public/files/upload_8321ece56de47e0bf5345fe30d23414e.PNG delete mode 100644 src/server/public/files/upload_8383bbac88cfbffbfb240ef19ca5eb4c.jpg delete mode 100644 src/server/public/files/upload_871f1af44ec7a2140f32433f3015d603.jpg delete mode 100644 src/server/public/files/upload_892d1d9d981f679fedaa2c5bf193fd20.jpg delete mode 100644 src/server/public/files/upload_89721bf0d244b1fcc52f70a7d9e3593b.jpg delete mode 100644 src/server/public/files/upload_89e66f8d531a44a63fa3355602813ae7.png delete mode 100644 src/server/public/files/upload_8a6090d2b978221d0810b954f7b14065.PNG delete mode 100644 src/server/public/files/upload_8b35f3b65fd7d57b5523b331c5f6eb16.png delete mode 100644 src/server/public/files/upload_8b7f07f131490ebfa256650bb13ffa55.png delete mode 100644 src/server/public/files/upload_8b92f6ffc9a8c8353fd141c6dc71895f.jpg delete mode 100644 src/server/public/files/upload_8bfca62429aada8f6b5dae1dcde24cab.png delete mode 100644 src/server/public/files/upload_8e9e27d1918f3a0a5f242397079e66fa.png delete mode 100644 src/server/public/files/upload_8ef0953ff77d42848b6e7f37e9bd506d.PNG delete mode 100644 src/server/public/files/upload_902c6b9c79da47ec00238f4831795077.jpg delete mode 100644 src/server/public/files/upload_90d380b38492369c1470868b019f0d0c.jpg delete mode 100644 src/server/public/files/upload_95af42b1b5db521aa1539980fe85e71a.jpg delete mode 100644 src/server/public/files/upload_97031060c857a0e8f15af3fcc038a2b8.jpg delete mode 100644 src/server/public/files/upload_9752dc8c3d531e4e39977537a46175d6.png delete mode 100644 src/server/public/files/upload_97903efc6c08245acaea37eefacf289f.png delete mode 100644 src/server/public/files/upload_9974b3459e182fef33b8e467058b7525.png delete mode 100644 src/server/public/files/upload_9a8429dac8feba05bbda2b53b5da4efa.jpg delete mode 100644 src/server/public/files/upload_9bbc86def05076b89080adcc37481324.jpg delete mode 100644 src/server/public/files/upload_9cd52fc451f3d459021127a7d51d108b.png delete mode 100644 src/server/public/files/upload_9d0400abf02c3bcbb8bd9e98ecd39c3b.png delete mode 100644 src/server/public/files/upload_9de9f004f258cee8c55bf872362d6453.jpg delete mode 100644 src/server/public/files/upload_9e3f3882855fb38d035d7bd5aa7b40dd.png delete mode 100644 src/server/public/files/upload_9e4be07bc9ff02adcc0533c5754bb0aa.jpg delete mode 100644 src/server/public/files/upload_9ebd41e77015a8f992cbb1b93e657723.png delete mode 100644 src/server/public/files/upload_a0286ae2a1eec8c31c8276ec067d91aa.png delete mode 100644 src/server/public/files/upload_a04473da584e5a602d0f8984a670a91c.jpg delete mode 100644 src/server/public/files/upload_a2cf3f6ab4ab5b249ebf8100e461aa27.png delete mode 100644 src/server/public/files/upload_a3095034ec19353c9ee55221088f01d8.PNG delete mode 100644 src/server/public/files/upload_a520a6856021104b8130f8d3b42d85c0.png delete mode 100644 src/server/public/files/upload_a5c26f52ddcbd705ffbd3dfd7cd2ce40.jpg delete mode 100644 src/server/public/files/upload_a5d66b65cc97949c83cacec867435b5c.png delete mode 100644 src/server/public/files/upload_a60864ff7892974e941e42a2441e530d.png delete mode 100644 src/server/public/files/upload_a6a70d84ebb65febf7900e29f52cc86d.pdf delete mode 100644 src/server/public/files/upload_a77f86dbeaa0c3cecc2516f9d9cecf1d.png delete mode 100644 src/server/public/files/upload_aa2bbeb0871a2d6b4b54524ac2758270.jpg delete mode 100644 src/server/public/files/upload_aa9fec4828bfdfef3ae20d43997fb274.png delete mode 100644 src/server/public/files/upload_ab2331f42200e3377a8f86e1e19771e2.PNG delete mode 100644 src/server/public/files/upload_ab2bba2cee88991561f20d7cd69ec6e1.png delete mode 100644 src/server/public/files/upload_ace7fe3faff9ec0fcdf204618e01c81d.png delete mode 100644 src/server/public/files/upload_ad1a225687c7dbc7b8bf65a95c6a6116.PNG delete mode 100644 src/server/public/files/upload_ade63c18d326beb6f0a621e6e0418aec.jpg delete mode 100644 src/server/public/files/upload_ae1c01e481fc6b753c78605bfbe680b9.png delete mode 100644 src/server/public/files/upload_ae9a8899588dc7c3a7edeb91bfdb6bdb.png delete mode 100644 src/server/public/files/upload_b0d25a0dccc640f78dcbc291f930b5d6.png delete mode 100644 src/server/public/files/upload_b0e527b27b7cabf651b29c9d834d24f3.PNG delete mode 100644 src/server/public/files/upload_b0ea7e49e84cf91075962a75c76d3233.png delete mode 100644 src/server/public/files/upload_b1b334829e1d99d7cd32fae5044cc103.PNG delete mode 100644 src/server/public/files/upload_b52adf6e1ecdbbe76aa3c038ddc3b02b.PNG delete mode 100644 src/server/public/files/upload_b6c992aa6c434520887521e11bb5f492.png delete mode 100644 src/server/public/files/upload_ba04eb816ef3bec770aa7eebf3b21cb1.PNG delete mode 100644 src/server/public/files/upload_ba58066314a79d1c845241fb4400e44d.png delete mode 100644 src/server/public/files/upload_ba9e9137b43cf498a267083592095c41.png delete mode 100644 src/server/public/files/upload_bb6b521b4df6bd783d6a5b83a66caa0a.jpg delete mode 100644 src/server/public/files/upload_bcb173a15068ded66b39623ab18bfdb7.jpg delete mode 100644 src/server/public/files/upload_bd9241247d162ebeb0cfead8dc675710.jpg delete mode 100644 src/server/public/files/upload_be4034faba6a5313dfb8a53e18ffc188.png delete mode 100644 src/server/public/files/upload_be5f90995b34cd30d9a269b5a9f10fcc.PNG delete mode 100644 src/server/public/files/upload_c192a71107e2178a2fac4aa449398bc0.PNG delete mode 100644 src/server/public/files/upload_c1a964ca145f45e7e666cfaf7c8398e3.png delete mode 100644 src/server/public/files/upload_c1e3a094ce9ec748a69f957c81a3cd8b.png delete mode 100644 src/server/public/files/upload_c3c6bd5cea465fe324d811914343273c.png delete mode 100644 src/server/public/files/upload_c6764790a8182d796acddb76d3df595e.PNG delete mode 100644 src/server/public/files/upload_c81bff72d05e0bb7f13376a46506ec2a.jpg delete mode 100644 src/server/public/files/upload_c98c0184a19b621b2bc0575b49996a69.png delete mode 100644 src/server/public/files/upload_cb4d875a9f73d1f735da5ae82dce6eb1.jpg delete mode 100644 src/server/public/files/upload_ccc4366571b738bcb0554c8ee09f6939.png delete mode 100644 src/server/public/files/upload_cd08524995e5f124505fe3d7ab38a41f.png delete mode 100644 src/server/public/files/upload_cd73b55488fcc7e5e5e5f2a4c43bc1fd.png delete mode 100644 src/server/public/files/upload_ce357d5a6d727ac44110c60dd379428f.png delete mode 100644 src/server/public/files/upload_d00c34a1e1c319a9373b5f136c38a866.jpg delete mode 100644 src/server/public/files/upload_d0fba915f725751729902c8fc7f52fa5.PNG delete mode 100644 src/server/public/files/upload_d242527805ab4c52f2385ae57b85e6fb.png delete mode 100644 src/server/public/files/upload_d28007fa68c809cd3c0a78d4a8727275.png delete mode 100644 src/server/public/files/upload_d31f8b1aea49fda272bbf338921dd091.PNG delete mode 100644 src/server/public/files/upload_d35ea9c62bf8da0352a16193b880469e.jpg delete mode 100644 src/server/public/files/upload_d4e0e9d2aee31b5931129dc3bc83e813.png delete mode 100644 src/server/public/files/upload_d4e9437dcbc0063bce5a3759b9dfb49a.PNG delete mode 100644 src/server/public/files/upload_d5801c03d9562a612d1907085ba39373.jpg delete mode 100644 src/server/public/files/upload_d5f7bf517ce48399335ddba84c8d4ab0.png delete mode 100644 src/server/public/files/upload_d6d0e3a302e0edafa70785c39041e522.PNG delete mode 100644 src/server/public/files/upload_d6e725cc697751599b177e0cf330b9f2.jpg delete mode 100644 src/server/public/files/upload_d794d56fcab3b93b6c79aa201cba34f8.png delete mode 100644 src/server/public/files/upload_d8abeaef04a42678432e5e1d3377a2d0.png delete mode 100644 src/server/public/files/upload_da6608dc0695c7f75a3524ea500c330e.png delete mode 100644 src/server/public/files/upload_dac5245c657d29c1c4dfba98472fb50d.pdf delete mode 100644 src/server/public/files/upload_db3c5a0b560c9da35607359d86cf2b97.png delete mode 100644 src/server/public/files/upload_dc8821dc596b1938c855e0affbe614dd.png delete mode 100644 src/server/public/files/upload_dcf410af62d7fc04cf3f6877b3ba2e51.PNG delete mode 100644 src/server/public/files/upload_debf3e3f21210ae1d9325de9f7a76b88.jpg delete mode 100644 src/server/public/files/upload_df7697c4832990aad0e8d9f0daa1711b.png delete mode 100644 src/server/public/files/upload_e009e45db30e47383fad5d71908dc69d.png delete mode 100644 src/server/public/files/upload_e15738d092ff38197dc1fb41a4747d16.jpg delete mode 100644 src/server/public/files/upload_e35c2e0064480e9dabba86383616edf6.PNG delete mode 100644 src/server/public/files/upload_e51079d9af97a412353d63c60e1ea96d.png delete mode 100644 src/server/public/files/upload_e5422cdcfa80628842ff3aacf14ad25e.png delete mode 100644 src/server/public/files/upload_e61906d7b33cee7669f8789e715b604f.png delete mode 100644 src/server/public/files/upload_e6256196c38216ac539ef7e8ee28ab02.png delete mode 100644 src/server/public/files/upload_e9668199bd12c905f27be76b11366d68.png delete mode 100644 src/server/public/files/upload_e98ebeeebd5f0ddc98ea9b3a2d9f40d2.png delete mode 100644 src/server/public/files/upload_eb2f002129e0cfb5c940f6b4ecc5a8f2.jpg delete mode 100644 src/server/public/files/upload_ec02ff06b3154d269086e23ebf6ad942.png delete mode 100644 src/server/public/files/upload_ec328e1918dfe0f51df8b2b8ca6d92fd.png delete mode 100644 src/server/public/files/upload_ef3873102a70850a4da2040eab002c55.jpg delete mode 100644 src/server/public/files/upload_f1b4bff241d496ef6baaa442a3c618f4.jpg delete mode 100644 src/server/public/files/upload_f259c9aa37b0919d6d20ad8d75e8329e.png delete mode 100644 src/server/public/files/upload_f3377c99ddc77928017638236694af4b.png delete mode 100644 src/server/public/files/upload_f3967f76077ddf77c71b4ed93b55b458.jpg delete mode 100644 src/server/public/files/upload_f43fa8444a93b800e783f1678e8eea21.png delete mode 100644 src/server/public/files/upload_f48143c75b8c2412785e3ed31ebbb150.PNG delete mode 100644 src/server/public/files/upload_f48b0e9019271046a629255cc8f51c1f.PNG delete mode 100644 src/server/public/files/upload_f5347da10a373480807fc3469533b9fe.png delete mode 100644 src/server/public/files/upload_f67448d7694d9082eb69ad629ade2a4a.PNG delete mode 100644 src/server/public/files/upload_f6e36f6d3de7a2036eeff617f186b78f.png delete mode 100644 src/server/public/files/upload_f6f1ed7a268523278457de08ee61bcfa.PNG delete mode 100644 src/server/public/files/upload_f73607b7cf818631165aca9d32ef19c5.jpg delete mode 100644 src/server/public/files/upload_f804a6c7ec796718d66108af0b1e6d0e.png delete mode 100644 src/server/public/files/upload_f8307a4816234347e87a3fd524af6fe6.PNG delete mode 100644 src/server/public/files/upload_f99b60f30db42cdb957815ac6e97c0b9.PNG delete mode 100644 src/server/public/files/upload_f9ed03ab046d7f579d6f531df9c4050a.PNG delete mode 100644 src/server/public/files/upload_faba09549e972883769292575a989114.png delete mode 100644 src/server/public/files/upload_fac4f686367ad63f2fcc1d8b4f74f123.png delete mode 100644 src/server/public/files/upload_faebd8bdc2b00efe50b232c9cf4e63b6.PNG delete mode 100644 src/server/public/files/upload_fb3cc3a1d715a6ffa1c72bde91faf3af.png delete mode 100644 src/server/public/files/upload_fd3cdbf70518664b7a8ae4427d51c495.png delete mode 100644 src/server/public/files/upload_fe2dbe44900645eba61207748f63ade3.jpg delete mode 100644 src/server/public/files/upload_ff4cf3406ba86b958689d63c94c8f102.jpg delete mode 100644 src/server/public/files/upload_ff587ba9691ad8c5971f35e1fe601e72.png delete mode 100644 src/server/public/files/upload_ffd58755419ab98f03d56fedd16736e9.jpg (limited to 'src') diff --git a/src/server/public/files/upload_011289d8c22f5422cf6f7e27a8c780ef.jpg b/src/server/public/files/upload_011289d8c22f5422cf6f7e27a8c780ef.jpg deleted file mode 100644 index bb78e4c23..000000000 Binary files a/src/server/public/files/upload_011289d8c22f5422cf6f7e27a8c780ef.jpg and /dev/null differ diff --git a/src/server/public/files/upload_01b38428ccc02261e24689b9d887b206.PNG b/src/server/public/files/upload_01b38428ccc02261e24689b9d887b206.PNG deleted file mode 100644 index 2b64654dd..000000000 Binary files a/src/server/public/files/upload_01b38428ccc02261e24689b9d887b206.PNG and /dev/null differ diff --git a/src/server/public/files/upload_01e81815633ee270c8b4ffca88a7773e.jpg b/src/server/public/files/upload_01e81815633ee270c8b4ffca88a7773e.jpg deleted file mode 100644 index bb78e4c23..000000000 Binary files a/src/server/public/files/upload_01e81815633ee270c8b4ffca88a7773e.jpg and /dev/null differ diff --git a/src/server/public/files/upload_031371580a23b87aaafb587ece875819.png b/src/server/public/files/upload_031371580a23b87aaafb587ece875819.png deleted file mode 100644 index 0bacb6189..000000000 Binary files a/src/server/public/files/upload_031371580a23b87aaafb587ece875819.png and /dev/null differ diff --git a/src/server/public/files/upload_03c44479fe728bbcc2f76dab407544d5.png b/src/server/public/files/upload_03c44479fe728bbcc2f76dab407544d5.png deleted file mode 100644 index 2ff127e97..000000000 Binary files a/src/server/public/files/upload_03c44479fe728bbcc2f76dab407544d5.png and /dev/null differ diff --git a/src/server/public/files/upload_05bae884a3d1a5ca1c3f56f3f395a52d.jpg b/src/server/public/files/upload_05bae884a3d1a5ca1c3f56f3f395a52d.jpg deleted file mode 100644 index bb78e4c23..000000000 Binary files a/src/server/public/files/upload_05bae884a3d1a5ca1c3f56f3f395a52d.jpg and /dev/null differ diff --git a/src/server/public/files/upload_05ceaf4112a0e3754a53ab59f4b1ff07.png b/src/server/public/files/upload_05ceaf4112a0e3754a53ab59f4b1ff07.png deleted file mode 100644 index 23e8efe47..000000000 Binary files a/src/server/public/files/upload_05ceaf4112a0e3754a53ab59f4b1ff07.png and /dev/null differ diff --git a/src/server/public/files/upload_061bdf72416cbef898d4cd1a0152ce1f.jpg b/src/server/public/files/upload_061bdf72416cbef898d4cd1a0152ce1f.jpg deleted file mode 100644 index bb78e4c23..000000000 Binary files a/src/server/public/files/upload_061bdf72416cbef898d4cd1a0152ce1f.jpg and /dev/null differ diff --git a/src/server/public/files/upload_06a0e01bb69c56608f4b6a25108c49ff.png b/src/server/public/files/upload_06a0e01bb69c56608f4b6a25108c49ff.png deleted file mode 100644 index 23e8efe47..000000000 Binary files a/src/server/public/files/upload_06a0e01bb69c56608f4b6a25108c49ff.png and /dev/null differ diff --git a/src/server/public/files/upload_0714861f8d915bf46238917924224eaf.jpg b/src/server/public/files/upload_0714861f8d915bf46238917924224eaf.jpg deleted file mode 100644 index bb78e4c23..000000000 Binary files a/src/server/public/files/upload_0714861f8d915bf46238917924224eaf.jpg and /dev/null differ diff --git a/src/server/public/files/upload_07488f31d6eacb28458c11eb982fa654.jpg b/src/server/public/files/upload_07488f31d6eacb28458c11eb982fa654.jpg deleted file mode 100644 index bb78e4c23..000000000 Binary files a/src/server/public/files/upload_07488f31d6eacb28458c11eb982fa654.jpg and /dev/null differ diff --git a/src/server/public/files/upload_08afadab5ded674ec3f244b2bd124b8b.PNG b/src/server/public/files/upload_08afadab5ded674ec3f244b2bd124b8b.PNG deleted file mode 100644 index 2b64654dd..000000000 Binary files a/src/server/public/files/upload_08afadab5ded674ec3f244b2bd124b8b.PNG and /dev/null differ diff --git a/src/server/public/files/upload_0901f0e44ee888884fdf7c4a62d5fdc0.png b/src/server/public/files/upload_0901f0e44ee888884fdf7c4a62d5fdc0.png deleted file mode 100644 index c178a9106..000000000 Binary files a/src/server/public/files/upload_0901f0e44ee888884fdf7c4a62d5fdc0.png and /dev/null differ diff --git a/src/server/public/files/upload_09dd8ba7cf7889a00cc73263c2e0a093.jpg b/src/server/public/files/upload_09dd8ba7cf7889a00cc73263c2e0a093.jpg deleted file mode 100644 index 756f4572f..000000000 Binary files a/src/server/public/files/upload_09dd8ba7cf7889a00cc73263c2e0a093.jpg and /dev/null differ diff --git a/src/server/public/files/upload_09df67e3e4c3bcd2a571d8be5f0acf48.PNG b/src/server/public/files/upload_09df67e3e4c3bcd2a571d8be5f0acf48.PNG deleted file mode 100644 index 9105f02e3..000000000 Binary files a/src/server/public/files/upload_09df67e3e4c3bcd2a571d8be5f0acf48.PNG and /dev/null differ diff --git a/src/server/public/files/upload_0b146c7e466256f40c49149cf1432c6f.png b/src/server/public/files/upload_0b146c7e466256f40c49149cf1432c6f.png deleted file mode 100644 index 23e8efe47..000000000 Binary files a/src/server/public/files/upload_0b146c7e466256f40c49149cf1432c6f.png and /dev/null differ diff --git a/src/server/public/files/upload_0ef39c832d6fe3a95134adcfbd129fda.png b/src/server/public/files/upload_0ef39c832d6fe3a95134adcfbd129fda.png deleted file mode 100644 index 0bacb6189..000000000 Binary files a/src/server/public/files/upload_0ef39c832d6fe3a95134adcfbd129fda.png and /dev/null differ diff --git a/src/server/public/files/upload_0fa3d6f238c071447df5717aa643a488.PNG b/src/server/public/files/upload_0fa3d6f238c071447df5717aa643a488.PNG deleted file mode 100644 index 2b64654dd..000000000 Binary files a/src/server/public/files/upload_0fa3d6f238c071447df5717aa643a488.PNG and /dev/null differ diff --git a/src/server/public/files/upload_10b64e99df3aac032564573c3699bda4.png b/src/server/public/files/upload_10b64e99df3aac032564573c3699bda4.png deleted file mode 100644 index 2ff127e97..000000000 Binary files a/src/server/public/files/upload_10b64e99df3aac032564573c3699bda4.png and /dev/null differ diff --git a/src/server/public/files/upload_110c0b0304ccfbbaedbf083aa692c852.jpg b/src/server/public/files/upload_110c0b0304ccfbbaedbf083aa692c852.jpg deleted file mode 100644 index bb78e4c23..000000000 Binary files a/src/server/public/files/upload_110c0b0304ccfbbaedbf083aa692c852.jpg and /dev/null differ diff --git a/src/server/public/files/upload_11162dd1b00ed2a26923aa9d2fa9889e.png b/src/server/public/files/upload_11162dd1b00ed2a26923aa9d2fa9889e.png deleted file mode 100644 index 0bacb6189..000000000 Binary files a/src/server/public/files/upload_11162dd1b00ed2a26923aa9d2fa9889e.png and /dev/null differ diff --git a/src/server/public/files/upload_115d44864ee866f2986188501a59342b.png b/src/server/public/files/upload_115d44864ee866f2986188501a59342b.png deleted file mode 100644 index 2ff127e97..000000000 Binary files a/src/server/public/files/upload_115d44864ee866f2986188501a59342b.png and /dev/null differ diff --git a/src/server/public/files/upload_1465783317d01ed75e87e169b56928fd.PNG b/src/server/public/files/upload_1465783317d01ed75e87e169b56928fd.PNG deleted file mode 100644 index 2b64654dd..000000000 Binary files a/src/server/public/files/upload_1465783317d01ed75e87e169b56928fd.PNG and /dev/null differ diff --git a/src/server/public/files/upload_156cb9406f94654dea0e227e377f0a75.PNG b/src/server/public/files/upload_156cb9406f94654dea0e227e377f0a75.PNG deleted file mode 100644 index 9105f02e3..000000000 Binary files a/src/server/public/files/upload_156cb9406f94654dea0e227e377f0a75.PNG and /dev/null differ diff --git a/src/server/public/files/upload_16461e5c5a9747bb1ed9643d86bc579d.png b/src/server/public/files/upload_16461e5c5a9747bb1ed9643d86bc579d.png deleted file mode 100644 index 0bacb6189..000000000 Binary files a/src/server/public/files/upload_16461e5c5a9747bb1ed9643d86bc579d.png and /dev/null differ diff --git a/src/server/public/files/upload_166eb5d1d46cf268a59e01b4b32528cd.PNG b/src/server/public/files/upload_166eb5d1d46cf268a59e01b4b32528cd.PNG deleted file mode 100644 index 9105f02e3..000000000 Binary files a/src/server/public/files/upload_166eb5d1d46cf268a59e01b4b32528cd.PNG and /dev/null differ diff --git a/src/server/public/files/upload_16c6865f668f3ee24e224fcb02745018.jpg b/src/server/public/files/upload_16c6865f668f3ee24e224fcb02745018.jpg deleted file mode 100644 index 756f4572f..000000000 Binary files a/src/server/public/files/upload_16c6865f668f3ee24e224fcb02745018.jpg and /dev/null differ diff --git a/src/server/public/files/upload_17d2b2f3ec801e6fdcc6d29e523e946b.PNG b/src/server/public/files/upload_17d2b2f3ec801e6fdcc6d29e523e946b.PNG deleted file mode 100644 index 9105f02e3..000000000 Binary files a/src/server/public/files/upload_17d2b2f3ec801e6fdcc6d29e523e946b.PNG and /dev/null differ diff --git a/src/server/public/files/upload_1863f67c2c193452cc5192f0ebac2a7b.png b/src/server/public/files/upload_1863f67c2c193452cc5192f0ebac2a7b.png deleted file mode 100644 index 23e8efe47..000000000 Binary files a/src/server/public/files/upload_1863f67c2c193452cc5192f0ebac2a7b.png and /dev/null differ diff --git a/src/server/public/files/upload_18d64bf4a483e78a36153abcd26af503.png b/src/server/public/files/upload_18d64bf4a483e78a36153abcd26af503.png deleted file mode 100644 index c178a9106..000000000 Binary files a/src/server/public/files/upload_18d64bf4a483e78a36153abcd26af503.png and /dev/null differ diff --git a/src/server/public/files/upload_1a7925dd1140a2b5a7cc5c62ad20a8e8.png b/src/server/public/files/upload_1a7925dd1140a2b5a7cc5c62ad20a8e8.png deleted file mode 100644 index c178a9106..000000000 Binary files a/src/server/public/files/upload_1a7925dd1140a2b5a7cc5c62ad20a8e8.png and /dev/null differ diff --git a/src/server/public/files/upload_1c47eb68831fff82bc6982e5df4d02d5.PNG b/src/server/public/files/upload_1c47eb68831fff82bc6982e5df4d02d5.PNG deleted file mode 100644 index 2b64654dd..000000000 Binary files a/src/server/public/files/upload_1c47eb68831fff82bc6982e5df4d02d5.PNG and /dev/null differ diff --git a/src/server/public/files/upload_1c7de0ca682ae695372acd3a9f3710ff.jpg b/src/server/public/files/upload_1c7de0ca682ae695372acd3a9f3710ff.jpg deleted file mode 100644 index 756f4572f..000000000 Binary files a/src/server/public/files/upload_1c7de0ca682ae695372acd3a9f3710ff.jpg and /dev/null differ diff --git a/src/server/public/files/upload_1c8f6233068ed1535384500768557e68.png b/src/server/public/files/upload_1c8f6233068ed1535384500768557e68.png deleted file mode 100644 index c178a9106..000000000 Binary files a/src/server/public/files/upload_1c8f6233068ed1535384500768557e68.png and /dev/null differ diff --git a/src/server/public/files/upload_1ea7ee56753d0327192da9666de9e305.PNG b/src/server/public/files/upload_1ea7ee56753d0327192da9666de9e305.PNG deleted file mode 100644 index acd759e09..000000000 Binary files a/src/server/public/files/upload_1ea7ee56753d0327192da9666de9e305.PNG and /dev/null differ diff --git a/src/server/public/files/upload_1fb47532989dc1eb79b5359a0832852b.png b/src/server/public/files/upload_1fb47532989dc1eb79b5359a0832852b.png deleted file mode 100644 index c178a9106..000000000 Binary files a/src/server/public/files/upload_1fb47532989dc1eb79b5359a0832852b.png and /dev/null differ diff --git a/src/server/public/files/upload_2098441ee0ad89e51e825e2fb5f641d2.png b/src/server/public/files/upload_2098441ee0ad89e51e825e2fb5f641d2.png deleted file mode 100644 index 0bacb6189..000000000 Binary files a/src/server/public/files/upload_2098441ee0ad89e51e825e2fb5f641d2.png and /dev/null differ diff --git a/src/server/public/files/upload_20d84ec8539744577c6b5df8ccb4ea73.png b/src/server/public/files/upload_20d84ec8539744577c6b5df8ccb4ea73.png deleted file mode 100644 index 23e8efe47..000000000 Binary files a/src/server/public/files/upload_20d84ec8539744577c6b5df8ccb4ea73.png and /dev/null differ diff --git a/src/server/public/files/upload_239ce7dd57279a470d0f1864744ebf43.PNG b/src/server/public/files/upload_239ce7dd57279a470d0f1864744ebf43.PNG deleted file mode 100644 index 9105f02e3..000000000 Binary files a/src/server/public/files/upload_239ce7dd57279a470d0f1864744ebf43.PNG and /dev/null differ diff --git a/src/server/public/files/upload_23a30791fc2afceb92310a665d364dbd.jpg b/src/server/public/files/upload_23a30791fc2afceb92310a665d364dbd.jpg deleted file mode 100644 index bb78e4c23..000000000 Binary files a/src/server/public/files/upload_23a30791fc2afceb92310a665d364dbd.jpg and /dev/null differ diff --git a/src/server/public/files/upload_23c987d4e99cbd91be1a78aeb5e386c0.png b/src/server/public/files/upload_23c987d4e99cbd91be1a78aeb5e386c0.png deleted file mode 100644 index 23e8efe47..000000000 Binary files a/src/server/public/files/upload_23c987d4e99cbd91be1a78aeb5e386c0.png and /dev/null differ diff --git a/src/server/public/files/upload_2436e82c2c54dd8f33f74e4440d11104.png b/src/server/public/files/upload_2436e82c2c54dd8f33f74e4440d11104.png deleted file mode 100644 index 2ff127e97..000000000 Binary files a/src/server/public/files/upload_2436e82c2c54dd8f33f74e4440d11104.png and /dev/null differ diff --git a/src/server/public/files/upload_2443e73bbbd67712bcedc04f0ead5617.PNG b/src/server/public/files/upload_2443e73bbbd67712bcedc04f0ead5617.PNG deleted file mode 100644 index acd759e09..000000000 Binary files a/src/server/public/files/upload_2443e73bbbd67712bcedc04f0ead5617.PNG and /dev/null differ diff --git a/src/server/public/files/upload_2515fc22ce67c256bf3039bc84e54432.jpg b/src/server/public/files/upload_2515fc22ce67c256bf3039bc84e54432.jpg deleted file mode 100644 index 756f4572f..000000000 Binary files a/src/server/public/files/upload_2515fc22ce67c256bf3039bc84e54432.jpg and /dev/null differ diff --git a/src/server/public/files/upload_25a08948186475ec571965c0169d9b4f.jpg b/src/server/public/files/upload_25a08948186475ec571965c0169d9b4f.jpg deleted file mode 100644 index bb78e4c23..000000000 Binary files a/src/server/public/files/upload_25a08948186475ec571965c0169d9b4f.jpg and /dev/null differ diff --git a/src/server/public/files/upload_280bb85121601366f65632649edd9425.jpg b/src/server/public/files/upload_280bb85121601366f65632649edd9425.jpg deleted file mode 100644 index 756f4572f..000000000 Binary files a/src/server/public/files/upload_280bb85121601366f65632649edd9425.jpg and /dev/null differ diff --git a/src/server/public/files/upload_284a94d4ba485d6799ee772521846a59.jpg b/src/server/public/files/upload_284a94d4ba485d6799ee772521846a59.jpg deleted file mode 100644 index bb78e4c23..000000000 Binary files a/src/server/public/files/upload_284a94d4ba485d6799ee772521846a59.jpg and /dev/null differ diff --git a/src/server/public/files/upload_28550bbb245dfbe9b24b2354ed349f0c.jpg b/src/server/public/files/upload_28550bbb245dfbe9b24b2354ed349f0c.jpg deleted file mode 100644 index bb78e4c23..000000000 Binary files a/src/server/public/files/upload_28550bbb245dfbe9b24b2354ed349f0c.jpg and /dev/null differ diff --git a/src/server/public/files/upload_2abbef5268ab7ca77dad96775cb52345.png b/src/server/public/files/upload_2abbef5268ab7ca77dad96775cb52345.png deleted file mode 100644 index 23e8efe47..000000000 Binary files a/src/server/public/files/upload_2abbef5268ab7ca77dad96775cb52345.png and /dev/null differ diff --git a/src/server/public/files/upload_2b5ec0fba66b5b3b5e47a2c53a1005be.jpg b/src/server/public/files/upload_2b5ec0fba66b5b3b5e47a2c53a1005be.jpg deleted file mode 100644 index bb78e4c23..000000000 Binary files a/src/server/public/files/upload_2b5ec0fba66b5b3b5e47a2c53a1005be.jpg and /dev/null differ diff --git a/src/server/public/files/upload_2b6f66b8972b2f4991239720bb1df7d4.png b/src/server/public/files/upload_2b6f66b8972b2f4991239720bb1df7d4.png deleted file mode 100644 index 23e8efe47..000000000 Binary files a/src/server/public/files/upload_2b6f66b8972b2f4991239720bb1df7d4.png and /dev/null differ diff --git a/src/server/public/files/upload_2b75a95a64abfe997aa8e12a69d2bc43.png b/src/server/public/files/upload_2b75a95a64abfe997aa8e12a69d2bc43.png deleted file mode 100644 index 5bac81362..000000000 Binary files a/src/server/public/files/upload_2b75a95a64abfe997aa8e12a69d2bc43.png and /dev/null differ diff --git a/src/server/public/files/upload_2c689fe57038ad6a324297e92badd705.png b/src/server/public/files/upload_2c689fe57038ad6a324297e92badd705.png deleted file mode 100644 index c178a9106..000000000 Binary files a/src/server/public/files/upload_2c689fe57038ad6a324297e92badd705.png and /dev/null differ diff --git a/src/server/public/files/upload_2c6e59d76562a8cca888f185a85361c9.PNG b/src/server/public/files/upload_2c6e59d76562a8cca888f185a85361c9.PNG deleted file mode 100644 index 9105f02e3..000000000 Binary files a/src/server/public/files/upload_2c6e59d76562a8cca888f185a85361c9.PNG and /dev/null differ diff --git a/src/server/public/files/upload_2d86441185e38ed16bbf4234d8857e13.PNG b/src/server/public/files/upload_2d86441185e38ed16bbf4234d8857e13.PNG deleted file mode 100644 index 2b64654dd..000000000 Binary files a/src/server/public/files/upload_2d86441185e38ed16bbf4234d8857e13.PNG and /dev/null differ diff --git a/src/server/public/files/upload_2e68bb961e82faddbaa501c5c4e51795.png b/src/server/public/files/upload_2e68bb961e82faddbaa501c5c4e51795.png deleted file mode 100644 index 23e8efe47..000000000 Binary files a/src/server/public/files/upload_2e68bb961e82faddbaa501c5c4e51795.png and /dev/null differ diff --git a/src/server/public/files/upload_303438040b77efc92ad5a6617edf7000.png b/src/server/public/files/upload_303438040b77efc92ad5a6617edf7000.png deleted file mode 100644 index 0bacb6189..000000000 Binary files a/src/server/public/files/upload_303438040b77efc92ad5a6617edf7000.png and /dev/null differ diff --git a/src/server/public/files/upload_303b28fc64dd65c58382fe2b0a513190.jpg b/src/server/public/files/upload_303b28fc64dd65c58382fe2b0a513190.jpg deleted file mode 100644 index 756f4572f..000000000 Binary files a/src/server/public/files/upload_303b28fc64dd65c58382fe2b0a513190.jpg and /dev/null differ diff --git a/src/server/public/files/upload_319f73a65644974e6502a79dfb60b777.jpg b/src/server/public/files/upload_319f73a65644974e6502a79dfb60b777.jpg deleted file mode 100644 index bb78e4c23..000000000 Binary files a/src/server/public/files/upload_319f73a65644974e6502a79dfb60b777.jpg and /dev/null differ diff --git a/src/server/public/files/upload_33290055bf62326211eb846bc32d7ab9.PNG b/src/server/public/files/upload_33290055bf62326211eb846bc32d7ab9.PNG deleted file mode 100644 index 2b64654dd..000000000 Binary files a/src/server/public/files/upload_33290055bf62326211eb846bc32d7ab9.PNG and /dev/null differ diff --git a/src/server/public/files/upload_352949a7d58209759d0ab420726acce3.png b/src/server/public/files/upload_352949a7d58209759d0ab420726acce3.png deleted file mode 100644 index c178a9106..000000000 Binary files a/src/server/public/files/upload_352949a7d58209759d0ab420726acce3.png and /dev/null differ diff --git a/src/server/public/files/upload_365e7ad24d7b896dc24525068e8f0fba.png b/src/server/public/files/upload_365e7ad24d7b896dc24525068e8f0fba.png deleted file mode 100644 index 0bacb6189..000000000 Binary files a/src/server/public/files/upload_365e7ad24d7b896dc24525068e8f0fba.png and /dev/null differ diff --git a/src/server/public/files/upload_372838f14d51f2eb8d24ae68b95febf7.png b/src/server/public/files/upload_372838f14d51f2eb8d24ae68b95febf7.png deleted file mode 100644 index 23e8efe47..000000000 Binary files a/src/server/public/files/upload_372838f14d51f2eb8d24ae68b95febf7.png and /dev/null differ diff --git a/src/server/public/files/upload_38001ea16c21a82601586e9d7c823e5f.png b/src/server/public/files/upload_38001ea16c21a82601586e9d7c823e5f.png deleted file mode 100644 index c178a9106..000000000 Binary files a/src/server/public/files/upload_38001ea16c21a82601586e9d7c823e5f.png and /dev/null differ diff --git a/src/server/public/files/upload_3a201bb6a84388449e58e93932c349eb.png b/src/server/public/files/upload_3a201bb6a84388449e58e93932c349eb.png deleted file mode 100644 index 23e8efe47..000000000 Binary files a/src/server/public/files/upload_3a201bb6a84388449e58e93932c349eb.png and /dev/null differ diff --git a/src/server/public/files/upload_3b8c3c92984a098feffd50393870d7b3.PNG b/src/server/public/files/upload_3b8c3c92984a098feffd50393870d7b3.PNG deleted file mode 100644 index 2b64654dd..000000000 Binary files a/src/server/public/files/upload_3b8c3c92984a098feffd50393870d7b3.PNG and /dev/null differ diff --git a/src/server/public/files/upload_3bb64e7eb87805eb7c2c67352ab3e3f6.PNG b/src/server/public/files/upload_3bb64e7eb87805eb7c2c67352ab3e3f6.PNG deleted file mode 100644 index 2b64654dd..000000000 Binary files a/src/server/public/files/upload_3bb64e7eb87805eb7c2c67352ab3e3f6.PNG and /dev/null differ diff --git a/src/server/public/files/upload_3cb5a8a9454a1b42a69a3d274c0a00e7.png b/src/server/public/files/upload_3cb5a8a9454a1b42a69a3d274c0a00e7.png deleted file mode 100644 index 23e8efe47..000000000 Binary files a/src/server/public/files/upload_3cb5a8a9454a1b42a69a3d274c0a00e7.png and /dev/null differ diff --git a/src/server/public/files/upload_3db8e110c40cb0770e79a61171eba542.jpg b/src/server/public/files/upload_3db8e110c40cb0770e79a61171eba542.jpg deleted file mode 100644 index bb78e4c23..000000000 Binary files a/src/server/public/files/upload_3db8e110c40cb0770e79a61171eba542.jpg and /dev/null differ diff --git a/src/server/public/files/upload_3f9cfc08544232b88da72911dea15523.png b/src/server/public/files/upload_3f9cfc08544232b88da72911dea15523.png deleted file mode 100644 index 2ff127e97..000000000 Binary files a/src/server/public/files/upload_3f9cfc08544232b88da72911dea15523.png and /dev/null differ diff --git a/src/server/public/files/upload_41fc781a82b1f33b631e5aa68c6a1a76.PNG b/src/server/public/files/upload_41fc781a82b1f33b631e5aa68c6a1a76.PNG deleted file mode 100644 index acd759e09..000000000 Binary files a/src/server/public/files/upload_41fc781a82b1f33b631e5aa68c6a1a76.PNG and /dev/null differ diff --git a/src/server/public/files/upload_42ecb2422b80f6da3afb62543391f58c.PNG b/src/server/public/files/upload_42ecb2422b80f6da3afb62543391f58c.PNG deleted file mode 100644 index 9105f02e3..000000000 Binary files a/src/server/public/files/upload_42ecb2422b80f6da3afb62543391f58c.PNG and /dev/null differ diff --git a/src/server/public/files/upload_431be602a66059169d1f4c4cd4646476.PNG b/src/server/public/files/upload_431be602a66059169d1f4c4cd4646476.PNG deleted file mode 100644 index 2b64654dd..000000000 Binary files a/src/server/public/files/upload_431be602a66059169d1f4c4cd4646476.PNG and /dev/null differ diff --git a/src/server/public/files/upload_45180c2f1fcfdd6df6c458d9e719b6e5.jpg b/src/server/public/files/upload_45180c2f1fcfdd6df6c458d9e719b6e5.jpg deleted file mode 100644 index bb78e4c23..000000000 Binary files a/src/server/public/files/upload_45180c2f1fcfdd6df6c458d9e719b6e5.jpg and /dev/null differ diff --git a/src/server/public/files/upload_4543a61bc7c5f79c788b749a9ce7535a.PNG b/src/server/public/files/upload_4543a61bc7c5f79c788b749a9ce7535a.PNG deleted file mode 100644 index 9105f02e3..000000000 Binary files a/src/server/public/files/upload_4543a61bc7c5f79c788b749a9ce7535a.PNG and /dev/null differ diff --git a/src/server/public/files/upload_45e88f05b821eca6b85c1fc7b048af63.jpg b/src/server/public/files/upload_45e88f05b821eca6b85c1fc7b048af63.jpg deleted file mode 100644 index 756f4572f..000000000 Binary files a/src/server/public/files/upload_45e88f05b821eca6b85c1fc7b048af63.jpg and /dev/null differ diff --git a/src/server/public/files/upload_493879305f109a4412223137f7031944.png b/src/server/public/files/upload_493879305f109a4412223137f7031944.png deleted file mode 100644 index 23e8efe47..000000000 Binary files a/src/server/public/files/upload_493879305f109a4412223137f7031944.png and /dev/null differ diff --git a/src/server/public/files/upload_49ac63665b883ea4702733fc8d70f6b1.PNG b/src/server/public/files/upload_49ac63665b883ea4702733fc8d70f6b1.PNG deleted file mode 100644 index 2b64654dd..000000000 Binary files a/src/server/public/files/upload_49ac63665b883ea4702733fc8d70f6b1.PNG and /dev/null differ diff --git a/src/server/public/files/upload_4a3f81801b685005524ae014e9646489.PNG b/src/server/public/files/upload_4a3f81801b685005524ae014e9646489.PNG deleted file mode 100644 index 9105f02e3..000000000 Binary files a/src/server/public/files/upload_4a3f81801b685005524ae014e9646489.PNG and /dev/null differ diff --git a/src/server/public/files/upload_4a832ad72dd1a1268523aef043aeaf46.jpg b/src/server/public/files/upload_4a832ad72dd1a1268523aef043aeaf46.jpg deleted file mode 100644 index 756f4572f..000000000 Binary files a/src/server/public/files/upload_4a832ad72dd1a1268523aef043aeaf46.jpg and /dev/null differ diff --git a/src/server/public/files/upload_4bae9cba19a30d8f113a70e4437a0cfe.jpg b/src/server/public/files/upload_4bae9cba19a30d8f113a70e4437a0cfe.jpg deleted file mode 100644 index 756f4572f..000000000 Binary files a/src/server/public/files/upload_4bae9cba19a30d8f113a70e4437a0cfe.jpg and /dev/null differ diff --git a/src/server/public/files/upload_4bc2bdf9a392b8e567b964f59cfd32a8.PNG b/src/server/public/files/upload_4bc2bdf9a392b8e567b964f59cfd32a8.PNG deleted file mode 100644 index 9105f02e3..000000000 Binary files a/src/server/public/files/upload_4bc2bdf9a392b8e567b964f59cfd32a8.PNG and /dev/null differ diff --git a/src/server/public/files/upload_4e4560c1f0081b87af4c010792d799fc.jpg b/src/server/public/files/upload_4e4560c1f0081b87af4c010792d799fc.jpg deleted file mode 100644 index 756f4572f..000000000 Binary files a/src/server/public/files/upload_4e4560c1f0081b87af4c010792d799fc.jpg and /dev/null differ diff --git a/src/server/public/files/upload_4e56e150f5c92f8980c4df49603747cc.png b/src/server/public/files/upload_4e56e150f5c92f8980c4df49603747cc.png deleted file mode 100644 index 23e8efe47..000000000 Binary files a/src/server/public/files/upload_4e56e150f5c92f8980c4df49603747cc.png and /dev/null differ diff --git a/src/server/public/files/upload_4e897855f35d0aa419d27bfaedae4435.png b/src/server/public/files/upload_4e897855f35d0aa419d27bfaedae4435.png deleted file mode 100644 index 2ff127e97..000000000 Binary files a/src/server/public/files/upload_4e897855f35d0aa419d27bfaedae4435.png and /dev/null differ diff --git a/src/server/public/files/upload_5495509165b60d3c04b8e509a7d187ba.PNG b/src/server/public/files/upload_5495509165b60d3c04b8e509a7d187ba.PNG deleted file mode 100644 index 2b64654dd..000000000 Binary files a/src/server/public/files/upload_5495509165b60d3c04b8e509a7d187ba.PNG and /dev/null differ diff --git a/src/server/public/files/upload_54d3dcb522f9fe3beb060103248a5ee9.png b/src/server/public/files/upload_54d3dcb522f9fe3beb060103248a5ee9.png deleted file mode 100644 index 2ff127e97..000000000 Binary files a/src/server/public/files/upload_54d3dcb522f9fe3beb060103248a5ee9.png and /dev/null differ diff --git a/src/server/public/files/upload_568996cd49829901200e1bec2b49a176.PNG b/src/server/public/files/upload_568996cd49829901200e1bec2b49a176.PNG deleted file mode 100644 index 9105f02e3..000000000 Binary files a/src/server/public/files/upload_568996cd49829901200e1bec2b49a176.PNG and /dev/null differ diff --git a/src/server/public/files/upload_5757898e2b8507438e1bdaf7b7fee4bb.png b/src/server/public/files/upload_5757898e2b8507438e1bdaf7b7fee4bb.png deleted file mode 100644 index 2ff127e97..000000000 Binary files a/src/server/public/files/upload_5757898e2b8507438e1bdaf7b7fee4bb.png and /dev/null differ diff --git a/src/server/public/files/upload_57c4353c9d3250bac49753be6b8973c6.png b/src/server/public/files/upload_57c4353c9d3250bac49753be6b8973c6.png deleted file mode 100644 index c178a9106..000000000 Binary files a/src/server/public/files/upload_57c4353c9d3250bac49753be6b8973c6.png and /dev/null differ diff --git a/src/server/public/files/upload_57f2901b84275f3e40ca9d41cb7c057d.PNG b/src/server/public/files/upload_57f2901b84275f3e40ca9d41cb7c057d.PNG deleted file mode 100644 index 2b64654dd..000000000 Binary files a/src/server/public/files/upload_57f2901b84275f3e40ca9d41cb7c057d.PNG and /dev/null differ diff --git a/src/server/public/files/upload_580d262f8a55c2fe3acbc6f0e690ad56.png b/src/server/public/files/upload_580d262f8a55c2fe3acbc6f0e690ad56.png deleted file mode 100644 index 23e8efe47..000000000 Binary files a/src/server/public/files/upload_580d262f8a55c2fe3acbc6f0e690ad56.png and /dev/null differ diff --git a/src/server/public/files/upload_5812547b99439b07d534333fddc6b225.PNG b/src/server/public/files/upload_5812547b99439b07d534333fddc6b225.PNG deleted file mode 100644 index 2b64654dd..000000000 Binary files a/src/server/public/files/upload_5812547b99439b07d534333fddc6b225.PNG and /dev/null differ diff --git a/src/server/public/files/upload_58782b7ba1ac3963c4fdd5a987bf0aca.PNG b/src/server/public/files/upload_58782b7ba1ac3963c4fdd5a987bf0aca.PNG deleted file mode 100644 index 9105f02e3..000000000 Binary files a/src/server/public/files/upload_58782b7ba1ac3963c4fdd5a987bf0aca.PNG and /dev/null differ diff --git a/src/server/public/files/upload_588f580df306a338f7be0483dc30d576.jpg b/src/server/public/files/upload_588f580df306a338f7be0483dc30d576.jpg deleted file mode 100644 index 756f4572f..000000000 Binary files a/src/server/public/files/upload_588f580df306a338f7be0483dc30d576.jpg and /dev/null differ diff --git a/src/server/public/files/upload_58adf6abfe999b72c185d30a51c206b0.png b/src/server/public/files/upload_58adf6abfe999b72c185d30a51c206b0.png deleted file mode 100644 index 0bacb6189..000000000 Binary files a/src/server/public/files/upload_58adf6abfe999b72c185d30a51c206b0.png and /dev/null differ diff --git a/src/server/public/files/upload_590c965f849c296ae3841689ce80b548.png b/src/server/public/files/upload_590c965f849c296ae3841689ce80b548.png deleted file mode 100644 index c178a9106..000000000 Binary files a/src/server/public/files/upload_590c965f849c296ae3841689ce80b548.png and /dev/null differ diff --git a/src/server/public/files/upload_5915c6516d7a7db8164f7e395b81973e.PNG b/src/server/public/files/upload_5915c6516d7a7db8164f7e395b81973e.PNG deleted file mode 100644 index 9105f02e3..000000000 Binary files a/src/server/public/files/upload_5915c6516d7a7db8164f7e395b81973e.PNG and /dev/null differ diff --git a/src/server/public/files/upload_594db1ea036d584bc71de979ce57832b.PNG b/src/server/public/files/upload_594db1ea036d584bc71de979ce57832b.PNG deleted file mode 100644 index 2b64654dd..000000000 Binary files a/src/server/public/files/upload_594db1ea036d584bc71de979ce57832b.PNG and /dev/null differ diff --git a/src/server/public/files/upload_5bf829a0b264b321b9b17267ab06a11b.png b/src/server/public/files/upload_5bf829a0b264b321b9b17267ab06a11b.png deleted file mode 100644 index c178a9106..000000000 Binary files a/src/server/public/files/upload_5bf829a0b264b321b9b17267ab06a11b.png and /dev/null differ diff --git a/src/server/public/files/upload_5cba158af25fb2058c1b2e130cd3fefc.png b/src/server/public/files/upload_5cba158af25fb2058c1b2e130cd3fefc.png deleted file mode 100644 index 23e8efe47..000000000 Binary files a/src/server/public/files/upload_5cba158af25fb2058c1b2e130cd3fefc.png and /dev/null differ diff --git a/src/server/public/files/upload_5d5f91ac61a5e55192c1de4402483126.png b/src/server/public/files/upload_5d5f91ac61a5e55192c1de4402483126.png deleted file mode 100644 index 2ff127e97..000000000 Binary files a/src/server/public/files/upload_5d5f91ac61a5e55192c1de4402483126.png and /dev/null differ diff --git a/src/server/public/files/upload_5ea64a359728395c1608b8783f6fb192.PNG b/src/server/public/files/upload_5ea64a359728395c1608b8783f6fb192.PNG deleted file mode 100644 index 9105f02e3..000000000 Binary files a/src/server/public/files/upload_5ea64a359728395c1608b8783f6fb192.PNG and /dev/null differ diff --git a/src/server/public/files/upload_5f0bace6da44bc7084c6ad01fcfe1012.png b/src/server/public/files/upload_5f0bace6da44bc7084c6ad01fcfe1012.png deleted file mode 100644 index 0bacb6189..000000000 Binary files a/src/server/public/files/upload_5f0bace6da44bc7084c6ad01fcfe1012.png and /dev/null differ diff --git a/src/server/public/files/upload_5fe9f9fe6eb4a78dcde144c9d4e5d6bb.png b/src/server/public/files/upload_5fe9f9fe6eb4a78dcde144c9d4e5d6bb.png deleted file mode 100644 index 2ff127e97..000000000 Binary files a/src/server/public/files/upload_5fe9f9fe6eb4a78dcde144c9d4e5d6bb.png and /dev/null differ diff --git a/src/server/public/files/upload_604cd121c8ecb30eb4d13cded9ce8746.png b/src/server/public/files/upload_604cd121c8ecb30eb4d13cded9ce8746.png deleted file mode 100644 index c178a9106..000000000 Binary files a/src/server/public/files/upload_604cd121c8ecb30eb4d13cded9ce8746.png and /dev/null differ diff --git a/src/server/public/files/upload_60f89c7647c6ed08d977e485fea9e033.jpg b/src/server/public/files/upload_60f89c7647c6ed08d977e485fea9e033.jpg deleted file mode 100644 index bb78e4c23..000000000 Binary files a/src/server/public/files/upload_60f89c7647c6ed08d977e485fea9e033.jpg and /dev/null differ diff --git a/src/server/public/files/upload_62900e4354015fc2bc78f00afbc1bc21.png b/src/server/public/files/upload_62900e4354015fc2bc78f00afbc1bc21.png deleted file mode 100644 index 2ff127e97..000000000 Binary files a/src/server/public/files/upload_62900e4354015fc2bc78f00afbc1bc21.png and /dev/null differ diff --git a/src/server/public/files/upload_62f1a7fa74224de7248c62d6d4242fd0.jpg b/src/server/public/files/upload_62f1a7fa74224de7248c62d6d4242fd0.jpg deleted file mode 100644 index bb78e4c23..000000000 Binary files a/src/server/public/files/upload_62f1a7fa74224de7248c62d6d4242fd0.jpg and /dev/null differ diff --git a/src/server/public/files/upload_63a7127553e83f381212c80f607c6db5.png b/src/server/public/files/upload_63a7127553e83f381212c80f607c6db5.png deleted file mode 100644 index 2ff127e97..000000000 Binary files a/src/server/public/files/upload_63a7127553e83f381212c80f607c6db5.png and /dev/null differ diff --git a/src/server/public/files/upload_63c37ab66ad16d68ef96670b1d04ee1c.png b/src/server/public/files/upload_63c37ab66ad16d68ef96670b1d04ee1c.png deleted file mode 100644 index 23e8efe47..000000000 Binary files a/src/server/public/files/upload_63c37ab66ad16d68ef96670b1d04ee1c.png and /dev/null differ diff --git a/src/server/public/files/upload_64b736086e1c8215c2b9de43a19bb928.jpg b/src/server/public/files/upload_64b736086e1c8215c2b9de43a19bb928.jpg deleted file mode 100644 index bb78e4c23..000000000 Binary files a/src/server/public/files/upload_64b736086e1c8215c2b9de43a19bb928.jpg and /dev/null differ diff --git a/src/server/public/files/upload_64fa0ccc7772023db7564d5659ff41d5.png b/src/server/public/files/upload_64fa0ccc7772023db7564d5659ff41d5.png deleted file mode 100644 index c178a9106..000000000 Binary files a/src/server/public/files/upload_64fa0ccc7772023db7564d5659ff41d5.png and /dev/null differ diff --git a/src/server/public/files/upload_65026d029f9876b08bba109db1e4db5a.jpg b/src/server/public/files/upload_65026d029f9876b08bba109db1e4db5a.jpg deleted file mode 100644 index 756f4572f..000000000 Binary files a/src/server/public/files/upload_65026d029f9876b08bba109db1e4db5a.jpg and /dev/null differ diff --git a/src/server/public/files/upload_665fb37c1505fdf48a665990caf09d26.png b/src/server/public/files/upload_665fb37c1505fdf48a665990caf09d26.png deleted file mode 100644 index 0bacb6189..000000000 Binary files a/src/server/public/files/upload_665fb37c1505fdf48a665990caf09d26.png and /dev/null differ diff --git a/src/server/public/files/upload_670ccc71dfb9e7abf92cde3c42857e9f.png b/src/server/public/files/upload_670ccc71dfb9e7abf92cde3c42857e9f.png deleted file mode 100644 index 23e8efe47..000000000 Binary files a/src/server/public/files/upload_670ccc71dfb9e7abf92cde3c42857e9f.png and /dev/null differ diff --git a/src/server/public/files/upload_67c7a2ac39caabaac7b90861a1314b8f.png b/src/server/public/files/upload_67c7a2ac39caabaac7b90861a1314b8f.png deleted file mode 100644 index 2ff127e97..000000000 Binary files a/src/server/public/files/upload_67c7a2ac39caabaac7b90861a1314b8f.png and /dev/null differ diff --git a/src/server/public/files/upload_680394edbfb281065997525cc114f996.PNG b/src/server/public/files/upload_680394edbfb281065997525cc114f996.PNG deleted file mode 100644 index 9105f02e3..000000000 Binary files a/src/server/public/files/upload_680394edbfb281065997525cc114f996.PNG and /dev/null differ diff --git a/src/server/public/files/upload_684090a0c50a035aaa0df23c18043df8.png b/src/server/public/files/upload_684090a0c50a035aaa0df23c18043df8.png deleted file mode 100644 index 2ff127e97..000000000 Binary files a/src/server/public/files/upload_684090a0c50a035aaa0df23c18043df8.png and /dev/null differ diff --git a/src/server/public/files/upload_6aac0ac0c3ea8ce495192f3b8411c972.jpg b/src/server/public/files/upload_6aac0ac0c3ea8ce495192f3b8411c972.jpg deleted file mode 100644 index bb78e4c23..000000000 Binary files a/src/server/public/files/upload_6aac0ac0c3ea8ce495192f3b8411c972.jpg and /dev/null differ diff --git a/src/server/public/files/upload_6bd24b1193058458d6ea268b06963931.PNG b/src/server/public/files/upload_6bd24b1193058458d6ea268b06963931.PNG deleted file mode 100644 index 9105f02e3..000000000 Binary files a/src/server/public/files/upload_6bd24b1193058458d6ea268b06963931.PNG and /dev/null differ diff --git a/src/server/public/files/upload_6bde8211989cf1b540b3c6dcf16cd51a.PNG b/src/server/public/files/upload_6bde8211989cf1b540b3c6dcf16cd51a.PNG deleted file mode 100644 index 9105f02e3..000000000 Binary files a/src/server/public/files/upload_6bde8211989cf1b540b3c6dcf16cd51a.PNG and /dev/null differ diff --git a/src/server/public/files/upload_6d5051266bd739f260105072299b5c79.png b/src/server/public/files/upload_6d5051266bd739f260105072299b5c79.png deleted file mode 100644 index 0bacb6189..000000000 Binary files a/src/server/public/files/upload_6d5051266bd739f260105072299b5c79.png and /dev/null differ diff --git a/src/server/public/files/upload_6d9a3ec37d85659265f2b622a6d24dcb.jpg b/src/server/public/files/upload_6d9a3ec37d85659265f2b622a6d24dcb.jpg deleted file mode 100644 index 756f4572f..000000000 Binary files a/src/server/public/files/upload_6d9a3ec37d85659265f2b622a6d24dcb.jpg and /dev/null differ diff --git a/src/server/public/files/upload_6f222fae83f0185e361bf6a757ba9800.png b/src/server/public/files/upload_6f222fae83f0185e361bf6a757ba9800.png deleted file mode 100644 index 2ff127e97..000000000 Binary files a/src/server/public/files/upload_6f222fae83f0185e361bf6a757ba9800.png and /dev/null differ diff --git a/src/server/public/files/upload_6f4121994024587809ddc7384fe23ce2.png b/src/server/public/files/upload_6f4121994024587809ddc7384fe23ce2.png deleted file mode 100644 index 0bacb6189..000000000 Binary files a/src/server/public/files/upload_6f4121994024587809ddc7384fe23ce2.png and /dev/null differ diff --git a/src/server/public/files/upload_6f5b0c8a474e44d76cbbea5f629e8fba.png b/src/server/public/files/upload_6f5b0c8a474e44d76cbbea5f629e8fba.png deleted file mode 100644 index 5bac81362..000000000 Binary files a/src/server/public/files/upload_6f5b0c8a474e44d76cbbea5f629e8fba.png and /dev/null differ diff --git a/src/server/public/files/upload_7068f1e2ec782980b4eded2ff974da7f.jpg b/src/server/public/files/upload_7068f1e2ec782980b4eded2ff974da7f.jpg deleted file mode 100644 index 756f4572f..000000000 Binary files a/src/server/public/files/upload_7068f1e2ec782980b4eded2ff974da7f.jpg and /dev/null differ diff --git a/src/server/public/files/upload_72c05840ea8bddc44575309923d4c63b.jpg b/src/server/public/files/upload_72c05840ea8bddc44575309923d4c63b.jpg deleted file mode 100644 index bb78e4c23..000000000 Binary files a/src/server/public/files/upload_72c05840ea8bddc44575309923d4c63b.jpg and /dev/null differ diff --git a/src/server/public/files/upload_73b42f2f26e037078c1f1c63913fc9aa.jpg b/src/server/public/files/upload_73b42f2f26e037078c1f1c63913fc9aa.jpg deleted file mode 100644 index 756f4572f..000000000 Binary files a/src/server/public/files/upload_73b42f2f26e037078c1f1c63913fc9aa.jpg and /dev/null differ diff --git a/src/server/public/files/upload_73f408a5bcbce75ec15c792d71117a17.png b/src/server/public/files/upload_73f408a5bcbce75ec15c792d71117a17.png deleted file mode 100644 index 2ff127e97..000000000 Binary files a/src/server/public/files/upload_73f408a5bcbce75ec15c792d71117a17.png and /dev/null differ diff --git a/src/server/public/files/upload_7412310b57204cb3c36d5aba670589fc.PNG b/src/server/public/files/upload_7412310b57204cb3c36d5aba670589fc.PNG deleted file mode 100644 index 2b64654dd..000000000 Binary files a/src/server/public/files/upload_7412310b57204cb3c36d5aba670589fc.PNG and /dev/null differ diff --git a/src/server/public/files/upload_74a5d4bdab98f4139d1cdde3bcfc0028.png b/src/server/public/files/upload_74a5d4bdab98f4139d1cdde3bcfc0028.png deleted file mode 100644 index 2ff127e97..000000000 Binary files a/src/server/public/files/upload_74a5d4bdab98f4139d1cdde3bcfc0028.png and /dev/null differ diff --git a/src/server/public/files/upload_75d331ba20a80ca0f6fd18bc0b37b8b3.PNG b/src/server/public/files/upload_75d331ba20a80ca0f6fd18bc0b37b8b3.PNG deleted file mode 100644 index 2b64654dd..000000000 Binary files a/src/server/public/files/upload_75d331ba20a80ca0f6fd18bc0b37b8b3.PNG and /dev/null differ diff --git a/src/server/public/files/upload_77eab9365e5c11d5e1ac08fca6c862ab.png b/src/server/public/files/upload_77eab9365e5c11d5e1ac08fca6c862ab.png deleted file mode 100644 index 0bacb6189..000000000 Binary files a/src/server/public/files/upload_77eab9365e5c11d5e1ac08fca6c862ab.png and /dev/null differ diff --git a/src/server/public/files/upload_784bbf8696065b99641d8bd01964e847.PNG b/src/server/public/files/upload_784bbf8696065b99641d8bd01964e847.PNG deleted file mode 100644 index 2b64654dd..000000000 Binary files a/src/server/public/files/upload_784bbf8696065b99641d8bd01964e847.PNG and /dev/null differ diff --git a/src/server/public/files/upload_786b4b94fda60ba60da3dfe2be091b6b.png b/src/server/public/files/upload_786b4b94fda60ba60da3dfe2be091b6b.png deleted file mode 100644 index 23e8efe47..000000000 Binary files a/src/server/public/files/upload_786b4b94fda60ba60da3dfe2be091b6b.png and /dev/null differ diff --git a/src/server/public/files/upload_793745d2b6c8a5c3dbeea343b9332846.PNG b/src/server/public/files/upload_793745d2b6c8a5c3dbeea343b9332846.PNG deleted file mode 100644 index acd759e09..000000000 Binary files a/src/server/public/files/upload_793745d2b6c8a5c3dbeea343b9332846.PNG and /dev/null differ diff --git a/src/server/public/files/upload_7b1546e215c8349433473f42b95ddb49.png b/src/server/public/files/upload_7b1546e215c8349433473f42b95ddb49.png deleted file mode 100644 index 23e8efe47..000000000 Binary files a/src/server/public/files/upload_7b1546e215c8349433473f42b95ddb49.png and /dev/null differ diff --git a/src/server/public/files/upload_7c369564861f079a17bd77081ace597b.PNG b/src/server/public/files/upload_7c369564861f079a17bd77081ace597b.PNG deleted file mode 100644 index acd759e09..000000000 Binary files a/src/server/public/files/upload_7c369564861f079a17bd77081ace597b.PNG and /dev/null differ diff --git a/src/server/public/files/upload_7c7f3f317ea27a2ddad9e8a34f636b78.png b/src/server/public/files/upload_7c7f3f317ea27a2ddad9e8a34f636b78.png deleted file mode 100644 index c178a9106..000000000 Binary files a/src/server/public/files/upload_7c7f3f317ea27a2ddad9e8a34f636b78.png and /dev/null differ diff --git a/src/server/public/files/upload_7f357bbbe7756dabad0b9cb49c9ceb0c.PNG b/src/server/public/files/upload_7f357bbbe7756dabad0b9cb49c9ceb0c.PNG deleted file mode 100644 index 2b64654dd..000000000 Binary files a/src/server/public/files/upload_7f357bbbe7756dabad0b9cb49c9ceb0c.PNG and /dev/null differ diff --git a/src/server/public/files/upload_814802d9faf217a7b09c1c95c4ecfd05.png b/src/server/public/files/upload_814802d9faf217a7b09c1c95c4ecfd05.png deleted file mode 100644 index 4bd1e688a..000000000 Binary files a/src/server/public/files/upload_814802d9faf217a7b09c1c95c4ecfd05.png and /dev/null differ diff --git a/src/server/public/files/upload_81d848c9cb61c7b81f861f4c1cc9700f.PNG b/src/server/public/files/upload_81d848c9cb61c7b81f861f4c1cc9700f.PNG deleted file mode 100644 index 2b64654dd..000000000 Binary files a/src/server/public/files/upload_81d848c9cb61c7b81f861f4c1cc9700f.PNG and /dev/null differ diff --git a/src/server/public/files/upload_83180cda4fa509f6ff0654376c1da7f2.jpg b/src/server/public/files/upload_83180cda4fa509f6ff0654376c1da7f2.jpg deleted file mode 100644 index bb78e4c23..000000000 Binary files a/src/server/public/files/upload_83180cda4fa509f6ff0654376c1da7f2.jpg and /dev/null differ diff --git a/src/server/public/files/upload_8321ece56de47e0bf5345fe30d23414e.PNG b/src/server/public/files/upload_8321ece56de47e0bf5345fe30d23414e.PNG deleted file mode 100644 index 9105f02e3..000000000 Binary files a/src/server/public/files/upload_8321ece56de47e0bf5345fe30d23414e.PNG and /dev/null differ diff --git a/src/server/public/files/upload_8383bbac88cfbffbfb240ef19ca5eb4c.jpg b/src/server/public/files/upload_8383bbac88cfbffbfb240ef19ca5eb4c.jpg deleted file mode 100644 index 756f4572f..000000000 Binary files a/src/server/public/files/upload_8383bbac88cfbffbfb240ef19ca5eb4c.jpg and /dev/null differ diff --git a/src/server/public/files/upload_871f1af44ec7a2140f32433f3015d603.jpg b/src/server/public/files/upload_871f1af44ec7a2140f32433f3015d603.jpg deleted file mode 100644 index bb78e4c23..000000000 Binary files a/src/server/public/files/upload_871f1af44ec7a2140f32433f3015d603.jpg and /dev/null differ diff --git a/src/server/public/files/upload_892d1d9d981f679fedaa2c5bf193fd20.jpg b/src/server/public/files/upload_892d1d9d981f679fedaa2c5bf193fd20.jpg deleted file mode 100644 index 756f4572f..000000000 Binary files a/src/server/public/files/upload_892d1d9d981f679fedaa2c5bf193fd20.jpg and /dev/null differ diff --git a/src/server/public/files/upload_89721bf0d244b1fcc52f70a7d9e3593b.jpg b/src/server/public/files/upload_89721bf0d244b1fcc52f70a7d9e3593b.jpg deleted file mode 100644 index 756f4572f..000000000 Binary files a/src/server/public/files/upload_89721bf0d244b1fcc52f70a7d9e3593b.jpg and /dev/null differ diff --git a/src/server/public/files/upload_89e66f8d531a44a63fa3355602813ae7.png b/src/server/public/files/upload_89e66f8d531a44a63fa3355602813ae7.png deleted file mode 100644 index 23e8efe47..000000000 Binary files a/src/server/public/files/upload_89e66f8d531a44a63fa3355602813ae7.png and /dev/null differ diff --git a/src/server/public/files/upload_8a6090d2b978221d0810b954f7b14065.PNG b/src/server/public/files/upload_8a6090d2b978221d0810b954f7b14065.PNG deleted file mode 100644 index 2b64654dd..000000000 Binary files a/src/server/public/files/upload_8a6090d2b978221d0810b954f7b14065.PNG and /dev/null differ diff --git a/src/server/public/files/upload_8b35f3b65fd7d57b5523b331c5f6eb16.png b/src/server/public/files/upload_8b35f3b65fd7d57b5523b331c5f6eb16.png deleted file mode 100644 index c178a9106..000000000 Binary files a/src/server/public/files/upload_8b35f3b65fd7d57b5523b331c5f6eb16.png and /dev/null differ diff --git a/src/server/public/files/upload_8b7f07f131490ebfa256650bb13ffa55.png b/src/server/public/files/upload_8b7f07f131490ebfa256650bb13ffa55.png deleted file mode 100644 index 0bacb6189..000000000 Binary files a/src/server/public/files/upload_8b7f07f131490ebfa256650bb13ffa55.png and /dev/null differ diff --git a/src/server/public/files/upload_8b92f6ffc9a8c8353fd141c6dc71895f.jpg b/src/server/public/files/upload_8b92f6ffc9a8c8353fd141c6dc71895f.jpg deleted file mode 100644 index 756f4572f..000000000 Binary files a/src/server/public/files/upload_8b92f6ffc9a8c8353fd141c6dc71895f.jpg and /dev/null differ diff --git a/src/server/public/files/upload_8bfca62429aada8f6b5dae1dcde24cab.png b/src/server/public/files/upload_8bfca62429aada8f6b5dae1dcde24cab.png deleted file mode 100644 index c178a9106..000000000 Binary files a/src/server/public/files/upload_8bfca62429aada8f6b5dae1dcde24cab.png and /dev/null differ diff --git a/src/server/public/files/upload_8e9e27d1918f3a0a5f242397079e66fa.png b/src/server/public/files/upload_8e9e27d1918f3a0a5f242397079e66fa.png deleted file mode 100644 index c178a9106..000000000 Binary files a/src/server/public/files/upload_8e9e27d1918f3a0a5f242397079e66fa.png and /dev/null differ diff --git a/src/server/public/files/upload_8ef0953ff77d42848b6e7f37e9bd506d.PNG b/src/server/public/files/upload_8ef0953ff77d42848b6e7f37e9bd506d.PNG deleted file mode 100644 index 2b64654dd..000000000 Binary files a/src/server/public/files/upload_8ef0953ff77d42848b6e7f37e9bd506d.PNG and /dev/null differ diff --git a/src/server/public/files/upload_902c6b9c79da47ec00238f4831795077.jpg b/src/server/public/files/upload_902c6b9c79da47ec00238f4831795077.jpg deleted file mode 100644 index bb78e4c23..000000000 Binary files a/src/server/public/files/upload_902c6b9c79da47ec00238f4831795077.jpg and /dev/null differ diff --git a/src/server/public/files/upload_90d380b38492369c1470868b019f0d0c.jpg b/src/server/public/files/upload_90d380b38492369c1470868b019f0d0c.jpg deleted file mode 100644 index bb78e4c23..000000000 Binary files a/src/server/public/files/upload_90d380b38492369c1470868b019f0d0c.jpg and /dev/null differ diff --git a/src/server/public/files/upload_95af42b1b5db521aa1539980fe85e71a.jpg b/src/server/public/files/upload_95af42b1b5db521aa1539980fe85e71a.jpg deleted file mode 100644 index 756f4572f..000000000 Binary files a/src/server/public/files/upload_95af42b1b5db521aa1539980fe85e71a.jpg and /dev/null differ diff --git a/src/server/public/files/upload_97031060c857a0e8f15af3fcc038a2b8.jpg b/src/server/public/files/upload_97031060c857a0e8f15af3fcc038a2b8.jpg deleted file mode 100644 index bb78e4c23..000000000 Binary files a/src/server/public/files/upload_97031060c857a0e8f15af3fcc038a2b8.jpg and /dev/null differ diff --git a/src/server/public/files/upload_9752dc8c3d531e4e39977537a46175d6.png b/src/server/public/files/upload_9752dc8c3d531e4e39977537a46175d6.png deleted file mode 100644 index 0bacb6189..000000000 Binary files a/src/server/public/files/upload_9752dc8c3d531e4e39977537a46175d6.png and /dev/null differ diff --git a/src/server/public/files/upload_97903efc6c08245acaea37eefacf289f.png b/src/server/public/files/upload_97903efc6c08245acaea37eefacf289f.png deleted file mode 100644 index c178a9106..000000000 Binary files a/src/server/public/files/upload_97903efc6c08245acaea37eefacf289f.png and /dev/null differ diff --git a/src/server/public/files/upload_9974b3459e182fef33b8e467058b7525.png b/src/server/public/files/upload_9974b3459e182fef33b8e467058b7525.png deleted file mode 100644 index 0bacb6189..000000000 Binary files a/src/server/public/files/upload_9974b3459e182fef33b8e467058b7525.png and /dev/null differ diff --git a/src/server/public/files/upload_9a8429dac8feba05bbda2b53b5da4efa.jpg b/src/server/public/files/upload_9a8429dac8feba05bbda2b53b5da4efa.jpg deleted file mode 100644 index bb78e4c23..000000000 Binary files a/src/server/public/files/upload_9a8429dac8feba05bbda2b53b5da4efa.jpg and /dev/null differ diff --git a/src/server/public/files/upload_9bbc86def05076b89080adcc37481324.jpg b/src/server/public/files/upload_9bbc86def05076b89080adcc37481324.jpg deleted file mode 100644 index 756f4572f..000000000 Binary files a/src/server/public/files/upload_9bbc86def05076b89080adcc37481324.jpg and /dev/null differ diff --git a/src/server/public/files/upload_9cd52fc451f3d459021127a7d51d108b.png b/src/server/public/files/upload_9cd52fc451f3d459021127a7d51d108b.png deleted file mode 100644 index c178a9106..000000000 Binary files a/src/server/public/files/upload_9cd52fc451f3d459021127a7d51d108b.png and /dev/null differ diff --git a/src/server/public/files/upload_9d0400abf02c3bcbb8bd9e98ecd39c3b.png b/src/server/public/files/upload_9d0400abf02c3bcbb8bd9e98ecd39c3b.png deleted file mode 100644 index 23e8efe47..000000000 Binary files a/src/server/public/files/upload_9d0400abf02c3bcbb8bd9e98ecd39c3b.png and /dev/null differ diff --git a/src/server/public/files/upload_9de9f004f258cee8c55bf872362d6453.jpg b/src/server/public/files/upload_9de9f004f258cee8c55bf872362d6453.jpg deleted file mode 100644 index bb78e4c23..000000000 Binary files a/src/server/public/files/upload_9de9f004f258cee8c55bf872362d6453.jpg and /dev/null differ diff --git a/src/server/public/files/upload_9e3f3882855fb38d035d7bd5aa7b40dd.png b/src/server/public/files/upload_9e3f3882855fb38d035d7bd5aa7b40dd.png deleted file mode 100644 index 23e8efe47..000000000 Binary files a/src/server/public/files/upload_9e3f3882855fb38d035d7bd5aa7b40dd.png and /dev/null differ diff --git a/src/server/public/files/upload_9e4be07bc9ff02adcc0533c5754bb0aa.jpg b/src/server/public/files/upload_9e4be07bc9ff02adcc0533c5754bb0aa.jpg deleted file mode 100644 index 756f4572f..000000000 Binary files a/src/server/public/files/upload_9e4be07bc9ff02adcc0533c5754bb0aa.jpg and /dev/null differ diff --git a/src/server/public/files/upload_9ebd41e77015a8f992cbb1b93e657723.png b/src/server/public/files/upload_9ebd41e77015a8f992cbb1b93e657723.png deleted file mode 100644 index 2ff127e97..000000000 Binary files a/src/server/public/files/upload_9ebd41e77015a8f992cbb1b93e657723.png and /dev/null differ diff --git a/src/server/public/files/upload_a0286ae2a1eec8c31c8276ec067d91aa.png b/src/server/public/files/upload_a0286ae2a1eec8c31c8276ec067d91aa.png deleted file mode 100644 index c178a9106..000000000 Binary files a/src/server/public/files/upload_a0286ae2a1eec8c31c8276ec067d91aa.png and /dev/null differ diff --git a/src/server/public/files/upload_a04473da584e5a602d0f8984a670a91c.jpg b/src/server/public/files/upload_a04473da584e5a602d0f8984a670a91c.jpg deleted file mode 100644 index 756f4572f..000000000 Binary files a/src/server/public/files/upload_a04473da584e5a602d0f8984a670a91c.jpg and /dev/null differ diff --git a/src/server/public/files/upload_a2cf3f6ab4ab5b249ebf8100e461aa27.png b/src/server/public/files/upload_a2cf3f6ab4ab5b249ebf8100e461aa27.png deleted file mode 100644 index 0bacb6189..000000000 Binary files a/src/server/public/files/upload_a2cf3f6ab4ab5b249ebf8100e461aa27.png and /dev/null differ diff --git a/src/server/public/files/upload_a3095034ec19353c9ee55221088f01d8.PNG b/src/server/public/files/upload_a3095034ec19353c9ee55221088f01d8.PNG deleted file mode 100644 index 2b64654dd..000000000 Binary files a/src/server/public/files/upload_a3095034ec19353c9ee55221088f01d8.PNG and /dev/null differ diff --git a/src/server/public/files/upload_a520a6856021104b8130f8d3b42d85c0.png b/src/server/public/files/upload_a520a6856021104b8130f8d3b42d85c0.png deleted file mode 100644 index 23e8efe47..000000000 Binary files a/src/server/public/files/upload_a520a6856021104b8130f8d3b42d85c0.png and /dev/null differ diff --git a/src/server/public/files/upload_a5c26f52ddcbd705ffbd3dfd7cd2ce40.jpg b/src/server/public/files/upload_a5c26f52ddcbd705ffbd3dfd7cd2ce40.jpg deleted file mode 100644 index 756f4572f..000000000 Binary files a/src/server/public/files/upload_a5c26f52ddcbd705ffbd3dfd7cd2ce40.jpg and /dev/null differ diff --git a/src/server/public/files/upload_a5d66b65cc97949c83cacec867435b5c.png b/src/server/public/files/upload_a5d66b65cc97949c83cacec867435b5c.png deleted file mode 100644 index 2ff127e97..000000000 Binary files a/src/server/public/files/upload_a5d66b65cc97949c83cacec867435b5c.png and /dev/null differ diff --git a/src/server/public/files/upload_a60864ff7892974e941e42a2441e530d.png b/src/server/public/files/upload_a60864ff7892974e941e42a2441e530d.png deleted file mode 100644 index 23e8efe47..000000000 Binary files a/src/server/public/files/upload_a60864ff7892974e941e42a2441e530d.png and /dev/null differ diff --git a/src/server/public/files/upload_a6a70d84ebb65febf7900e29f52cc86d.pdf b/src/server/public/files/upload_a6a70d84ebb65febf7900e29f52cc86d.pdf deleted file mode 100644 index dfd6ab339..000000000 Binary files a/src/server/public/files/upload_a6a70d84ebb65febf7900e29f52cc86d.pdf and /dev/null differ diff --git a/src/server/public/files/upload_a77f86dbeaa0c3cecc2516f9d9cecf1d.png b/src/server/public/files/upload_a77f86dbeaa0c3cecc2516f9d9cecf1d.png deleted file mode 100644 index 0bacb6189..000000000 Binary files a/src/server/public/files/upload_a77f86dbeaa0c3cecc2516f9d9cecf1d.png and /dev/null differ diff --git a/src/server/public/files/upload_aa2bbeb0871a2d6b4b54524ac2758270.jpg b/src/server/public/files/upload_aa2bbeb0871a2d6b4b54524ac2758270.jpg deleted file mode 100644 index bb78e4c23..000000000 Binary files a/src/server/public/files/upload_aa2bbeb0871a2d6b4b54524ac2758270.jpg and /dev/null differ diff --git a/src/server/public/files/upload_aa9fec4828bfdfef3ae20d43997fb274.png b/src/server/public/files/upload_aa9fec4828bfdfef3ae20d43997fb274.png deleted file mode 100644 index 2ff127e97..000000000 Binary files a/src/server/public/files/upload_aa9fec4828bfdfef3ae20d43997fb274.png and /dev/null differ diff --git a/src/server/public/files/upload_ab2331f42200e3377a8f86e1e19771e2.PNG b/src/server/public/files/upload_ab2331f42200e3377a8f86e1e19771e2.PNG deleted file mode 100644 index 9105f02e3..000000000 Binary files a/src/server/public/files/upload_ab2331f42200e3377a8f86e1e19771e2.PNG and /dev/null differ diff --git a/src/server/public/files/upload_ab2bba2cee88991561f20d7cd69ec6e1.png b/src/server/public/files/upload_ab2bba2cee88991561f20d7cd69ec6e1.png deleted file mode 100644 index 2ff127e97..000000000 Binary files a/src/server/public/files/upload_ab2bba2cee88991561f20d7cd69ec6e1.png and /dev/null differ diff --git a/src/server/public/files/upload_ace7fe3faff9ec0fcdf204618e01c81d.png b/src/server/public/files/upload_ace7fe3faff9ec0fcdf204618e01c81d.png deleted file mode 100644 index 2ff127e97..000000000 Binary files a/src/server/public/files/upload_ace7fe3faff9ec0fcdf204618e01c81d.png and /dev/null differ diff --git a/src/server/public/files/upload_ad1a225687c7dbc7b8bf65a95c6a6116.PNG b/src/server/public/files/upload_ad1a225687c7dbc7b8bf65a95c6a6116.PNG deleted file mode 100644 index 9105f02e3..000000000 Binary files a/src/server/public/files/upload_ad1a225687c7dbc7b8bf65a95c6a6116.PNG and /dev/null differ diff --git a/src/server/public/files/upload_ade63c18d326beb6f0a621e6e0418aec.jpg b/src/server/public/files/upload_ade63c18d326beb6f0a621e6e0418aec.jpg deleted file mode 100644 index bb78e4c23..000000000 Binary files a/src/server/public/files/upload_ade63c18d326beb6f0a621e6e0418aec.jpg and /dev/null differ diff --git a/src/server/public/files/upload_ae1c01e481fc6b753c78605bfbe680b9.png b/src/server/public/files/upload_ae1c01e481fc6b753c78605bfbe680b9.png deleted file mode 100644 index c178a9106..000000000 Binary files a/src/server/public/files/upload_ae1c01e481fc6b753c78605bfbe680b9.png and /dev/null differ diff --git a/src/server/public/files/upload_ae9a8899588dc7c3a7edeb91bfdb6bdb.png b/src/server/public/files/upload_ae9a8899588dc7c3a7edeb91bfdb6bdb.png deleted file mode 100644 index 0bacb6189..000000000 Binary files a/src/server/public/files/upload_ae9a8899588dc7c3a7edeb91bfdb6bdb.png and /dev/null differ diff --git a/src/server/public/files/upload_b0d25a0dccc640f78dcbc291f930b5d6.png b/src/server/public/files/upload_b0d25a0dccc640f78dcbc291f930b5d6.png deleted file mode 100644 index 23e8efe47..000000000 Binary files a/src/server/public/files/upload_b0d25a0dccc640f78dcbc291f930b5d6.png and /dev/null differ diff --git a/src/server/public/files/upload_b0e527b27b7cabf651b29c9d834d24f3.PNG b/src/server/public/files/upload_b0e527b27b7cabf651b29c9d834d24f3.PNG deleted file mode 100644 index 9105f02e3..000000000 Binary files a/src/server/public/files/upload_b0e527b27b7cabf651b29c9d834d24f3.PNG and /dev/null differ diff --git a/src/server/public/files/upload_b0ea7e49e84cf91075962a75c76d3233.png b/src/server/public/files/upload_b0ea7e49e84cf91075962a75c76d3233.png deleted file mode 100644 index 23e8efe47..000000000 Binary files a/src/server/public/files/upload_b0ea7e49e84cf91075962a75c76d3233.png and /dev/null differ diff --git a/src/server/public/files/upload_b1b334829e1d99d7cd32fae5044cc103.PNG b/src/server/public/files/upload_b1b334829e1d99d7cd32fae5044cc103.PNG deleted file mode 100644 index 9105f02e3..000000000 Binary files a/src/server/public/files/upload_b1b334829e1d99d7cd32fae5044cc103.PNG and /dev/null differ diff --git a/src/server/public/files/upload_b52adf6e1ecdbbe76aa3c038ddc3b02b.PNG b/src/server/public/files/upload_b52adf6e1ecdbbe76aa3c038ddc3b02b.PNG deleted file mode 100644 index acd759e09..000000000 Binary files a/src/server/public/files/upload_b52adf6e1ecdbbe76aa3c038ddc3b02b.PNG and /dev/null differ diff --git a/src/server/public/files/upload_b6c992aa6c434520887521e11bb5f492.png b/src/server/public/files/upload_b6c992aa6c434520887521e11bb5f492.png deleted file mode 100644 index 0bacb6189..000000000 Binary files a/src/server/public/files/upload_b6c992aa6c434520887521e11bb5f492.png and /dev/null differ diff --git a/src/server/public/files/upload_ba04eb816ef3bec770aa7eebf3b21cb1.PNG b/src/server/public/files/upload_ba04eb816ef3bec770aa7eebf3b21cb1.PNG deleted file mode 100644 index 2b64654dd..000000000 Binary files a/src/server/public/files/upload_ba04eb816ef3bec770aa7eebf3b21cb1.PNG and /dev/null differ diff --git a/src/server/public/files/upload_ba58066314a79d1c845241fb4400e44d.png b/src/server/public/files/upload_ba58066314a79d1c845241fb4400e44d.png deleted file mode 100644 index c178a9106..000000000 Binary files a/src/server/public/files/upload_ba58066314a79d1c845241fb4400e44d.png and /dev/null differ diff --git a/src/server/public/files/upload_ba9e9137b43cf498a267083592095c41.png b/src/server/public/files/upload_ba9e9137b43cf498a267083592095c41.png deleted file mode 100644 index c178a9106..000000000 Binary files a/src/server/public/files/upload_ba9e9137b43cf498a267083592095c41.png and /dev/null differ diff --git a/src/server/public/files/upload_bb6b521b4df6bd783d6a5b83a66caa0a.jpg b/src/server/public/files/upload_bb6b521b4df6bd783d6a5b83a66caa0a.jpg deleted file mode 100644 index 756f4572f..000000000 Binary files a/src/server/public/files/upload_bb6b521b4df6bd783d6a5b83a66caa0a.jpg and /dev/null differ diff --git a/src/server/public/files/upload_bcb173a15068ded66b39623ab18bfdb7.jpg b/src/server/public/files/upload_bcb173a15068ded66b39623ab18bfdb7.jpg deleted file mode 100644 index bb78e4c23..000000000 Binary files a/src/server/public/files/upload_bcb173a15068ded66b39623ab18bfdb7.jpg and /dev/null differ diff --git a/src/server/public/files/upload_bd9241247d162ebeb0cfead8dc675710.jpg b/src/server/public/files/upload_bd9241247d162ebeb0cfead8dc675710.jpg deleted file mode 100644 index bb78e4c23..000000000 Binary files a/src/server/public/files/upload_bd9241247d162ebeb0cfead8dc675710.jpg and /dev/null differ diff --git a/src/server/public/files/upload_be4034faba6a5313dfb8a53e18ffc188.png b/src/server/public/files/upload_be4034faba6a5313dfb8a53e18ffc188.png deleted file mode 100644 index 2ff127e97..000000000 Binary files a/src/server/public/files/upload_be4034faba6a5313dfb8a53e18ffc188.png and /dev/null differ diff --git a/src/server/public/files/upload_be5f90995b34cd30d9a269b5a9f10fcc.PNG b/src/server/public/files/upload_be5f90995b34cd30d9a269b5a9f10fcc.PNG deleted file mode 100644 index 9105f02e3..000000000 Binary files a/src/server/public/files/upload_be5f90995b34cd30d9a269b5a9f10fcc.PNG and /dev/null differ diff --git a/src/server/public/files/upload_c192a71107e2178a2fac4aa449398bc0.PNG b/src/server/public/files/upload_c192a71107e2178a2fac4aa449398bc0.PNG deleted file mode 100644 index 2b64654dd..000000000 Binary files a/src/server/public/files/upload_c192a71107e2178a2fac4aa449398bc0.PNG and /dev/null differ diff --git a/src/server/public/files/upload_c1a964ca145f45e7e666cfaf7c8398e3.png b/src/server/public/files/upload_c1a964ca145f45e7e666cfaf7c8398e3.png deleted file mode 100644 index 0bacb6189..000000000 Binary files a/src/server/public/files/upload_c1a964ca145f45e7e666cfaf7c8398e3.png and /dev/null differ diff --git a/src/server/public/files/upload_c1e3a094ce9ec748a69f957c81a3cd8b.png b/src/server/public/files/upload_c1e3a094ce9ec748a69f957c81a3cd8b.png deleted file mode 100644 index 0bacb6189..000000000 Binary files a/src/server/public/files/upload_c1e3a094ce9ec748a69f957c81a3cd8b.png and /dev/null differ diff --git a/src/server/public/files/upload_c3c6bd5cea465fe324d811914343273c.png b/src/server/public/files/upload_c3c6bd5cea465fe324d811914343273c.png deleted file mode 100644 index c178a9106..000000000 Binary files a/src/server/public/files/upload_c3c6bd5cea465fe324d811914343273c.png and /dev/null differ diff --git a/src/server/public/files/upload_c6764790a8182d796acddb76d3df595e.PNG b/src/server/public/files/upload_c6764790a8182d796acddb76d3df595e.PNG deleted file mode 100644 index 2b64654dd..000000000 Binary files a/src/server/public/files/upload_c6764790a8182d796acddb76d3df595e.PNG and /dev/null differ diff --git a/src/server/public/files/upload_c81bff72d05e0bb7f13376a46506ec2a.jpg b/src/server/public/files/upload_c81bff72d05e0bb7f13376a46506ec2a.jpg deleted file mode 100644 index 9bb7f57d2..000000000 Binary files a/src/server/public/files/upload_c81bff72d05e0bb7f13376a46506ec2a.jpg and /dev/null differ diff --git a/src/server/public/files/upload_c98c0184a19b621b2bc0575b49996a69.png b/src/server/public/files/upload_c98c0184a19b621b2bc0575b49996a69.png deleted file mode 100644 index c178a9106..000000000 Binary files a/src/server/public/files/upload_c98c0184a19b621b2bc0575b49996a69.png and /dev/null differ diff --git a/src/server/public/files/upload_cb4d875a9f73d1f735da5ae82dce6eb1.jpg b/src/server/public/files/upload_cb4d875a9f73d1f735da5ae82dce6eb1.jpg deleted file mode 100644 index 756f4572f..000000000 Binary files a/src/server/public/files/upload_cb4d875a9f73d1f735da5ae82dce6eb1.jpg and /dev/null differ diff --git a/src/server/public/files/upload_ccc4366571b738bcb0554c8ee09f6939.png b/src/server/public/files/upload_ccc4366571b738bcb0554c8ee09f6939.png deleted file mode 100644 index c178a9106..000000000 Binary files a/src/server/public/files/upload_ccc4366571b738bcb0554c8ee09f6939.png and /dev/null differ diff --git a/src/server/public/files/upload_cd08524995e5f124505fe3d7ab38a41f.png b/src/server/public/files/upload_cd08524995e5f124505fe3d7ab38a41f.png deleted file mode 100644 index 0bacb6189..000000000 Binary files a/src/server/public/files/upload_cd08524995e5f124505fe3d7ab38a41f.png and /dev/null differ diff --git a/src/server/public/files/upload_cd73b55488fcc7e5e5e5f2a4c43bc1fd.png b/src/server/public/files/upload_cd73b55488fcc7e5e5e5f2a4c43bc1fd.png deleted file mode 100644 index c178a9106..000000000 Binary files a/src/server/public/files/upload_cd73b55488fcc7e5e5e5f2a4c43bc1fd.png and /dev/null differ diff --git a/src/server/public/files/upload_ce357d5a6d727ac44110c60dd379428f.png b/src/server/public/files/upload_ce357d5a6d727ac44110c60dd379428f.png deleted file mode 100644 index 2ff127e97..000000000 Binary files a/src/server/public/files/upload_ce357d5a6d727ac44110c60dd379428f.png and /dev/null differ diff --git a/src/server/public/files/upload_d00c34a1e1c319a9373b5f136c38a866.jpg b/src/server/public/files/upload_d00c34a1e1c319a9373b5f136c38a866.jpg deleted file mode 100644 index 756f4572f..000000000 Binary files a/src/server/public/files/upload_d00c34a1e1c319a9373b5f136c38a866.jpg and /dev/null differ diff --git a/src/server/public/files/upload_d0fba915f725751729902c8fc7f52fa5.PNG b/src/server/public/files/upload_d0fba915f725751729902c8fc7f52fa5.PNG deleted file mode 100644 index 9105f02e3..000000000 Binary files a/src/server/public/files/upload_d0fba915f725751729902c8fc7f52fa5.PNG and /dev/null differ diff --git a/src/server/public/files/upload_d242527805ab4c52f2385ae57b85e6fb.png b/src/server/public/files/upload_d242527805ab4c52f2385ae57b85e6fb.png deleted file mode 100644 index c178a9106..000000000 Binary files a/src/server/public/files/upload_d242527805ab4c52f2385ae57b85e6fb.png and /dev/null differ diff --git a/src/server/public/files/upload_d28007fa68c809cd3c0a78d4a8727275.png b/src/server/public/files/upload_d28007fa68c809cd3c0a78d4a8727275.png deleted file mode 100644 index 0bacb6189..000000000 Binary files a/src/server/public/files/upload_d28007fa68c809cd3c0a78d4a8727275.png and /dev/null differ diff --git a/src/server/public/files/upload_d31f8b1aea49fda272bbf338921dd091.PNG b/src/server/public/files/upload_d31f8b1aea49fda272bbf338921dd091.PNG deleted file mode 100644 index 2b64654dd..000000000 Binary files a/src/server/public/files/upload_d31f8b1aea49fda272bbf338921dd091.PNG and /dev/null differ diff --git a/src/server/public/files/upload_d35ea9c62bf8da0352a16193b880469e.jpg b/src/server/public/files/upload_d35ea9c62bf8da0352a16193b880469e.jpg deleted file mode 100644 index bb78e4c23..000000000 Binary files a/src/server/public/files/upload_d35ea9c62bf8da0352a16193b880469e.jpg and /dev/null differ diff --git a/src/server/public/files/upload_d4e0e9d2aee31b5931129dc3bc83e813.png b/src/server/public/files/upload_d4e0e9d2aee31b5931129dc3bc83e813.png deleted file mode 100644 index 23e8efe47..000000000 Binary files a/src/server/public/files/upload_d4e0e9d2aee31b5931129dc3bc83e813.png and /dev/null differ diff --git a/src/server/public/files/upload_d4e9437dcbc0063bce5a3759b9dfb49a.PNG b/src/server/public/files/upload_d4e9437dcbc0063bce5a3759b9dfb49a.PNG deleted file mode 100644 index 2b64654dd..000000000 Binary files a/src/server/public/files/upload_d4e9437dcbc0063bce5a3759b9dfb49a.PNG and /dev/null differ diff --git a/src/server/public/files/upload_d5801c03d9562a612d1907085ba39373.jpg b/src/server/public/files/upload_d5801c03d9562a612d1907085ba39373.jpg deleted file mode 100644 index bb78e4c23..000000000 Binary files a/src/server/public/files/upload_d5801c03d9562a612d1907085ba39373.jpg and /dev/null differ diff --git a/src/server/public/files/upload_d5f7bf517ce48399335ddba84c8d4ab0.png b/src/server/public/files/upload_d5f7bf517ce48399335ddba84c8d4ab0.png deleted file mode 100644 index c178a9106..000000000 Binary files a/src/server/public/files/upload_d5f7bf517ce48399335ddba84c8d4ab0.png and /dev/null differ diff --git a/src/server/public/files/upload_d6d0e3a302e0edafa70785c39041e522.PNG b/src/server/public/files/upload_d6d0e3a302e0edafa70785c39041e522.PNG deleted file mode 100644 index 2b64654dd..000000000 Binary files a/src/server/public/files/upload_d6d0e3a302e0edafa70785c39041e522.PNG and /dev/null differ diff --git a/src/server/public/files/upload_d6e725cc697751599b177e0cf330b9f2.jpg b/src/server/public/files/upload_d6e725cc697751599b177e0cf330b9f2.jpg deleted file mode 100644 index bb78e4c23..000000000 Binary files a/src/server/public/files/upload_d6e725cc697751599b177e0cf330b9f2.jpg and /dev/null differ diff --git a/src/server/public/files/upload_d794d56fcab3b93b6c79aa201cba34f8.png b/src/server/public/files/upload_d794d56fcab3b93b6c79aa201cba34f8.png deleted file mode 100644 index 4bd1e688a..000000000 Binary files a/src/server/public/files/upload_d794d56fcab3b93b6c79aa201cba34f8.png and /dev/null differ diff --git a/src/server/public/files/upload_d8abeaef04a42678432e5e1d3377a2d0.png b/src/server/public/files/upload_d8abeaef04a42678432e5e1d3377a2d0.png deleted file mode 100644 index c178a9106..000000000 Binary files a/src/server/public/files/upload_d8abeaef04a42678432e5e1d3377a2d0.png and /dev/null differ diff --git a/src/server/public/files/upload_da6608dc0695c7f75a3524ea500c330e.png b/src/server/public/files/upload_da6608dc0695c7f75a3524ea500c330e.png deleted file mode 100644 index c178a9106..000000000 Binary files a/src/server/public/files/upload_da6608dc0695c7f75a3524ea500c330e.png and /dev/null differ diff --git a/src/server/public/files/upload_dac5245c657d29c1c4dfba98472fb50d.pdf b/src/server/public/files/upload_dac5245c657d29c1c4dfba98472fb50d.pdf deleted file mode 100644 index 7c9fa9a6f..000000000 Binary files a/src/server/public/files/upload_dac5245c657d29c1c4dfba98472fb50d.pdf and /dev/null differ diff --git a/src/server/public/files/upload_db3c5a0b560c9da35607359d86cf2b97.png b/src/server/public/files/upload_db3c5a0b560c9da35607359d86cf2b97.png deleted file mode 100644 index 0bacb6189..000000000 Binary files a/src/server/public/files/upload_db3c5a0b560c9da35607359d86cf2b97.png and /dev/null differ diff --git a/src/server/public/files/upload_dc8821dc596b1938c855e0affbe614dd.png b/src/server/public/files/upload_dc8821dc596b1938c855e0affbe614dd.png deleted file mode 100644 index c178a9106..000000000 Binary files a/src/server/public/files/upload_dc8821dc596b1938c855e0affbe614dd.png and /dev/null differ diff --git a/src/server/public/files/upload_dcf410af62d7fc04cf3f6877b3ba2e51.PNG b/src/server/public/files/upload_dcf410af62d7fc04cf3f6877b3ba2e51.PNG deleted file mode 100644 index 9105f02e3..000000000 Binary files a/src/server/public/files/upload_dcf410af62d7fc04cf3f6877b3ba2e51.PNG and /dev/null differ diff --git a/src/server/public/files/upload_debf3e3f21210ae1d9325de9f7a76b88.jpg b/src/server/public/files/upload_debf3e3f21210ae1d9325de9f7a76b88.jpg deleted file mode 100644 index bb78e4c23..000000000 Binary files a/src/server/public/files/upload_debf3e3f21210ae1d9325de9f7a76b88.jpg and /dev/null differ diff --git a/src/server/public/files/upload_df7697c4832990aad0e8d9f0daa1711b.png b/src/server/public/files/upload_df7697c4832990aad0e8d9f0daa1711b.png deleted file mode 100644 index 2ff127e97..000000000 Binary files a/src/server/public/files/upload_df7697c4832990aad0e8d9f0daa1711b.png and /dev/null differ diff --git a/src/server/public/files/upload_e009e45db30e47383fad5d71908dc69d.png b/src/server/public/files/upload_e009e45db30e47383fad5d71908dc69d.png deleted file mode 100644 index c178a9106..000000000 Binary files a/src/server/public/files/upload_e009e45db30e47383fad5d71908dc69d.png and /dev/null differ diff --git a/src/server/public/files/upload_e15738d092ff38197dc1fb41a4747d16.jpg b/src/server/public/files/upload_e15738d092ff38197dc1fb41a4747d16.jpg deleted file mode 100644 index bb78e4c23..000000000 Binary files a/src/server/public/files/upload_e15738d092ff38197dc1fb41a4747d16.jpg and /dev/null differ diff --git a/src/server/public/files/upload_e35c2e0064480e9dabba86383616edf6.PNG b/src/server/public/files/upload_e35c2e0064480e9dabba86383616edf6.PNG deleted file mode 100644 index 2b64654dd..000000000 Binary files a/src/server/public/files/upload_e35c2e0064480e9dabba86383616edf6.PNG and /dev/null differ diff --git a/src/server/public/files/upload_e51079d9af97a412353d63c60e1ea96d.png b/src/server/public/files/upload_e51079d9af97a412353d63c60e1ea96d.png deleted file mode 100644 index 0bacb6189..000000000 Binary files a/src/server/public/files/upload_e51079d9af97a412353d63c60e1ea96d.png and /dev/null differ diff --git a/src/server/public/files/upload_e5422cdcfa80628842ff3aacf14ad25e.png b/src/server/public/files/upload_e5422cdcfa80628842ff3aacf14ad25e.png deleted file mode 100644 index c178a9106..000000000 Binary files a/src/server/public/files/upload_e5422cdcfa80628842ff3aacf14ad25e.png and /dev/null differ diff --git a/src/server/public/files/upload_e61906d7b33cee7669f8789e715b604f.png b/src/server/public/files/upload_e61906d7b33cee7669f8789e715b604f.png deleted file mode 100644 index c178a9106..000000000 Binary files a/src/server/public/files/upload_e61906d7b33cee7669f8789e715b604f.png and /dev/null differ diff --git a/src/server/public/files/upload_e6256196c38216ac539ef7e8ee28ab02.png b/src/server/public/files/upload_e6256196c38216ac539ef7e8ee28ab02.png deleted file mode 100644 index 23e8efe47..000000000 Binary files a/src/server/public/files/upload_e6256196c38216ac539ef7e8ee28ab02.png and /dev/null differ diff --git a/src/server/public/files/upload_e9668199bd12c905f27be76b11366d68.png b/src/server/public/files/upload_e9668199bd12c905f27be76b11366d68.png deleted file mode 100644 index 23e8efe47..000000000 Binary files a/src/server/public/files/upload_e9668199bd12c905f27be76b11366d68.png and /dev/null differ diff --git a/src/server/public/files/upload_e98ebeeebd5f0ddc98ea9b3a2d9f40d2.png b/src/server/public/files/upload_e98ebeeebd5f0ddc98ea9b3a2d9f40d2.png deleted file mode 100644 index 0bacb6189..000000000 Binary files a/src/server/public/files/upload_e98ebeeebd5f0ddc98ea9b3a2d9f40d2.png and /dev/null differ diff --git a/src/server/public/files/upload_eb2f002129e0cfb5c940f6b4ecc5a8f2.jpg b/src/server/public/files/upload_eb2f002129e0cfb5c940f6b4ecc5a8f2.jpg deleted file mode 100644 index 756f4572f..000000000 Binary files a/src/server/public/files/upload_eb2f002129e0cfb5c940f6b4ecc5a8f2.jpg and /dev/null differ diff --git a/src/server/public/files/upload_ec02ff06b3154d269086e23ebf6ad942.png b/src/server/public/files/upload_ec02ff06b3154d269086e23ebf6ad942.png deleted file mode 100644 index 2ff127e97..000000000 Binary files a/src/server/public/files/upload_ec02ff06b3154d269086e23ebf6ad942.png and /dev/null differ diff --git a/src/server/public/files/upload_ec328e1918dfe0f51df8b2b8ca6d92fd.png b/src/server/public/files/upload_ec328e1918dfe0f51df8b2b8ca6d92fd.png deleted file mode 100644 index 0bacb6189..000000000 Binary files a/src/server/public/files/upload_ec328e1918dfe0f51df8b2b8ca6d92fd.png and /dev/null differ diff --git a/src/server/public/files/upload_ef3873102a70850a4da2040eab002c55.jpg b/src/server/public/files/upload_ef3873102a70850a4da2040eab002c55.jpg deleted file mode 100644 index 756f4572f..000000000 Binary files a/src/server/public/files/upload_ef3873102a70850a4da2040eab002c55.jpg and /dev/null differ diff --git a/src/server/public/files/upload_f1b4bff241d496ef6baaa442a3c618f4.jpg b/src/server/public/files/upload_f1b4bff241d496ef6baaa442a3c618f4.jpg deleted file mode 100644 index 756f4572f..000000000 Binary files a/src/server/public/files/upload_f1b4bff241d496ef6baaa442a3c618f4.jpg and /dev/null differ diff --git a/src/server/public/files/upload_f259c9aa37b0919d6d20ad8d75e8329e.png b/src/server/public/files/upload_f259c9aa37b0919d6d20ad8d75e8329e.png deleted file mode 100644 index 2ff127e97..000000000 Binary files a/src/server/public/files/upload_f259c9aa37b0919d6d20ad8d75e8329e.png and /dev/null differ diff --git a/src/server/public/files/upload_f3377c99ddc77928017638236694af4b.png b/src/server/public/files/upload_f3377c99ddc77928017638236694af4b.png deleted file mode 100644 index 0bacb6189..000000000 Binary files a/src/server/public/files/upload_f3377c99ddc77928017638236694af4b.png and /dev/null differ diff --git a/src/server/public/files/upload_f3967f76077ddf77c71b4ed93b55b458.jpg b/src/server/public/files/upload_f3967f76077ddf77c71b4ed93b55b458.jpg deleted file mode 100644 index 756f4572f..000000000 Binary files a/src/server/public/files/upload_f3967f76077ddf77c71b4ed93b55b458.jpg and /dev/null differ diff --git a/src/server/public/files/upload_f43fa8444a93b800e783f1678e8eea21.png b/src/server/public/files/upload_f43fa8444a93b800e783f1678e8eea21.png deleted file mode 100644 index 2ff127e97..000000000 Binary files a/src/server/public/files/upload_f43fa8444a93b800e783f1678e8eea21.png and /dev/null differ diff --git a/src/server/public/files/upload_f48143c75b8c2412785e3ed31ebbb150.PNG b/src/server/public/files/upload_f48143c75b8c2412785e3ed31ebbb150.PNG deleted file mode 100644 index 9105f02e3..000000000 Binary files a/src/server/public/files/upload_f48143c75b8c2412785e3ed31ebbb150.PNG and /dev/null differ diff --git a/src/server/public/files/upload_f48b0e9019271046a629255cc8f51c1f.PNG b/src/server/public/files/upload_f48b0e9019271046a629255cc8f51c1f.PNG deleted file mode 100644 index 9105f02e3..000000000 Binary files a/src/server/public/files/upload_f48b0e9019271046a629255cc8f51c1f.PNG and /dev/null differ diff --git a/src/server/public/files/upload_f5347da10a373480807fc3469533b9fe.png b/src/server/public/files/upload_f5347da10a373480807fc3469533b9fe.png deleted file mode 100644 index 0bacb6189..000000000 Binary files a/src/server/public/files/upload_f5347da10a373480807fc3469533b9fe.png and /dev/null differ diff --git a/src/server/public/files/upload_f67448d7694d9082eb69ad629ade2a4a.PNG b/src/server/public/files/upload_f67448d7694d9082eb69ad629ade2a4a.PNG deleted file mode 100644 index 9105f02e3..000000000 Binary files a/src/server/public/files/upload_f67448d7694d9082eb69ad629ade2a4a.PNG and /dev/null differ diff --git a/src/server/public/files/upload_f6e36f6d3de7a2036eeff617f186b78f.png b/src/server/public/files/upload_f6e36f6d3de7a2036eeff617f186b78f.png deleted file mode 100644 index 0bacb6189..000000000 Binary files a/src/server/public/files/upload_f6e36f6d3de7a2036eeff617f186b78f.png and /dev/null differ diff --git a/src/server/public/files/upload_f6f1ed7a268523278457de08ee61bcfa.PNG b/src/server/public/files/upload_f6f1ed7a268523278457de08ee61bcfa.PNG deleted file mode 100644 index 9105f02e3..000000000 Binary files a/src/server/public/files/upload_f6f1ed7a268523278457de08ee61bcfa.PNG and /dev/null differ diff --git a/src/server/public/files/upload_f73607b7cf818631165aca9d32ef19c5.jpg b/src/server/public/files/upload_f73607b7cf818631165aca9d32ef19c5.jpg deleted file mode 100644 index 756f4572f..000000000 Binary files a/src/server/public/files/upload_f73607b7cf818631165aca9d32ef19c5.jpg and /dev/null differ diff --git a/src/server/public/files/upload_f804a6c7ec796718d66108af0b1e6d0e.png b/src/server/public/files/upload_f804a6c7ec796718d66108af0b1e6d0e.png deleted file mode 100644 index 2ff127e97..000000000 Binary files a/src/server/public/files/upload_f804a6c7ec796718d66108af0b1e6d0e.png and /dev/null differ diff --git a/src/server/public/files/upload_f8307a4816234347e87a3fd524af6fe6.PNG b/src/server/public/files/upload_f8307a4816234347e87a3fd524af6fe6.PNG deleted file mode 100644 index 9105f02e3..000000000 Binary files a/src/server/public/files/upload_f8307a4816234347e87a3fd524af6fe6.PNG and /dev/null differ diff --git a/src/server/public/files/upload_f99b60f30db42cdb957815ac6e97c0b9.PNG b/src/server/public/files/upload_f99b60f30db42cdb957815ac6e97c0b9.PNG deleted file mode 100644 index 2b64654dd..000000000 Binary files a/src/server/public/files/upload_f99b60f30db42cdb957815ac6e97c0b9.PNG and /dev/null differ diff --git a/src/server/public/files/upload_f9ed03ab046d7f579d6f531df9c4050a.PNG b/src/server/public/files/upload_f9ed03ab046d7f579d6f531df9c4050a.PNG deleted file mode 100644 index 2b64654dd..000000000 Binary files a/src/server/public/files/upload_f9ed03ab046d7f579d6f531df9c4050a.PNG and /dev/null differ diff --git a/src/server/public/files/upload_faba09549e972883769292575a989114.png b/src/server/public/files/upload_faba09549e972883769292575a989114.png deleted file mode 100644 index 2ff127e97..000000000 Binary files a/src/server/public/files/upload_faba09549e972883769292575a989114.png and /dev/null differ diff --git a/src/server/public/files/upload_fac4f686367ad63f2fcc1d8b4f74f123.png b/src/server/public/files/upload_fac4f686367ad63f2fcc1d8b4f74f123.png deleted file mode 100644 index 0bacb6189..000000000 Binary files a/src/server/public/files/upload_fac4f686367ad63f2fcc1d8b4f74f123.png and /dev/null differ diff --git a/src/server/public/files/upload_faebd8bdc2b00efe50b232c9cf4e63b6.PNG b/src/server/public/files/upload_faebd8bdc2b00efe50b232c9cf4e63b6.PNG deleted file mode 100644 index 9105f02e3..000000000 Binary files a/src/server/public/files/upload_faebd8bdc2b00efe50b232c9cf4e63b6.PNG and /dev/null differ diff --git a/src/server/public/files/upload_fb3cc3a1d715a6ffa1c72bde91faf3af.png b/src/server/public/files/upload_fb3cc3a1d715a6ffa1c72bde91faf3af.png deleted file mode 100644 index 23e8efe47..000000000 Binary files a/src/server/public/files/upload_fb3cc3a1d715a6ffa1c72bde91faf3af.png and /dev/null differ diff --git a/src/server/public/files/upload_fd3cdbf70518664b7a8ae4427d51c495.png b/src/server/public/files/upload_fd3cdbf70518664b7a8ae4427d51c495.png deleted file mode 100644 index 2ff127e97..000000000 Binary files a/src/server/public/files/upload_fd3cdbf70518664b7a8ae4427d51c495.png and /dev/null differ diff --git a/src/server/public/files/upload_fe2dbe44900645eba61207748f63ade3.jpg b/src/server/public/files/upload_fe2dbe44900645eba61207748f63ade3.jpg deleted file mode 100644 index 756f4572f..000000000 Binary files a/src/server/public/files/upload_fe2dbe44900645eba61207748f63ade3.jpg and /dev/null differ diff --git a/src/server/public/files/upload_ff4cf3406ba86b958689d63c94c8f102.jpg b/src/server/public/files/upload_ff4cf3406ba86b958689d63c94c8f102.jpg deleted file mode 100644 index bb78e4c23..000000000 Binary files a/src/server/public/files/upload_ff4cf3406ba86b958689d63c94c8f102.jpg and /dev/null differ diff --git a/src/server/public/files/upload_ff587ba9691ad8c5971f35e1fe601e72.png b/src/server/public/files/upload_ff587ba9691ad8c5971f35e1fe601e72.png deleted file mode 100644 index 2ff127e97..000000000 Binary files a/src/server/public/files/upload_ff587ba9691ad8c5971f35e1fe601e72.png and /dev/null differ diff --git a/src/server/public/files/upload_ffd58755419ab98f03d56fedd16736e9.jpg b/src/server/public/files/upload_ffd58755419ab98f03d56fedd16736e9.jpg deleted file mode 100644 index bb78e4c23..000000000 Binary files a/src/server/public/files/upload_ffd58755419ab98f03d56fedd16736e9.jpg and /dev/null differ -- cgit v1.2.3-70-g09d2 From a63a3f912f8857963cd5cc14cf1e73f645eb3477 Mon Sep 17 00:00:00 2001 From: Bob Zeleznik Date: Mon, 8 Apr 2019 20:35:29 -0400 Subject: fixed part of scroll issue. fixed dragging text boxes. --- src/client/views/DocumentDecorations.tsx | 3 +++ src/client/views/nodes/FormattedTextBox.tsx | 2 -- 2 files changed, 3 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/client/views/DocumentDecorations.tsx b/src/client/views/DocumentDecorations.tsx index c7e4a269a..4a7502072 100644 --- a/src/client/views/DocumentDecorations.tsx +++ b/src/client/views/DocumentDecorations.tsx @@ -386,6 +386,9 @@ export class DocumentDecorations extends React.Component<{}, { value: string }> // } render() { var bounds = this.Bounds; + if (bounds.x === Number.MAX_VALUE) { + return (null); + } // console.log(this._documents.length) // let test = this._documents[0].props.Document.Title; if (this.Hidden) { diff --git a/src/client/views/nodes/FormattedTextBox.tsx b/src/client/views/nodes/FormattedTextBox.tsx index e59179874..6a38fbe0e 100644 --- a/src/client/views/nodes/FormattedTextBox.tsx +++ b/src/client/views/nodes/FormattedTextBox.tsx @@ -153,8 +153,6 @@ export class FormattedTextBox extends React.Component { if (e.buttons === 1 && this.props.isSelected() && !e.altKey) { e.stopPropagation(); } - if (e.buttons === 1 && this.props.fieldKey !== KeyStore.Archives) - e.preventDefault(); }; onPointerUp = (e: React.PointerEvent): void => { if (e.buttons === 1 && this.props.isSelected() && !e.altKey) { -- cgit v1.2.3-70-g09d2 From 4dd5460cfafc33df30bcccc0145af17f81fe5d3e Mon Sep 17 00:00:00 2001 From: Tyler Schicke Date: Mon, 8 Apr 2019 21:18:36 -0400 Subject: Changed Documents initialization and fixed key error in main --- src/client/documents/Documents.ts | 115 +++++++++++++++++++------------------- src/client/views/Main.tsx | 8 +-- 2 files changed, 60 insertions(+), 63 deletions(-) (limited to 'src') diff --git a/src/client/documents/Documents.ts b/src/client/documents/Documents.ts index 46c27e672..c98d6ffc4 100644 --- a/src/client/documents/Documents.ts +++ b/src/client/documents/Documents.ts @@ -67,13 +67,16 @@ export namespace Documents { const audioProtoId = "audioProto"; export function initProtos(): Promise { - return Server.GetFields([textProtoId, histoProtoId, collProtoId, imageProtoId, webProtoId, kvpProtoId]).then(fields => { - textProto = fields[textProtoId] as Document; - histoProto = fields[histoProtoId] as Document; - collProto = fields[collProtoId] as Document; + return Server.GetFields([textProtoId, histoProtoId, collProtoId, pdfProtoId, imageProtoId, videoProtoId, audioProtoId, webProtoId, kvpProtoId]).then(fields => { + textProto = fields[textProtoId] as Document || CreateTextPrototype(); + histoProto = fields[histoProtoId] as Document || CreateHistogramPrototype(); + collProto = fields[collProtoId] as Document || CreateCollectionPrototype(); imageProto = fields[imageProtoId] as Document || CreateImagePrototype(); - webProto = fields[webProtoId] as Document; - kvpProto = fields[kvpProtoId] as Document; + webProto = fields[webProtoId] as Document || CreateWebPrototype(); + kvpProto = fields[kvpProtoId] as Document || CreateKVPPrototype(); + videoProto = fields[videoProtoId] as Document || CreateVideoPrototype(); + audioProto = fields[audioProtoId] as Document || CreateAudioPrototype(); + pdfProto = fields[pdfProtoId] as Document || CreatePdfPrototype(); }); } function assignOptions(doc: Document, options: DocumentOptions): Document { @@ -121,57 +124,51 @@ export namespace Documents { return imageProto; } - function GetHistogramPrototype(): Document { - if (!histoProto) { - histoProto = setupPrototypeOptions(histoProtoId, "HISTO PROTO", CollectionView.LayoutString("AnnotationsKey"), - { x: 0, y: 0, width: 300, height: 300, backgroundColor: "black", layoutKeys: [KeyStore.Data, KeyStore.Annotations, KeyStore.Caption] }); - histoProto.SetText(KeyStore.BackgroundLayout, HistogramBox.LayoutString()); - } + function CreateHistogramPrototype(): Document { + let histoProto = setupPrototypeOptions(histoProtoId, "HISTO PROTO", CollectionView.LayoutString("AnnotationsKey"), + { x: 0, y: 0, width: 300, height: 300, backgroundColor: "black", layoutKeys: [KeyStore.Data, KeyStore.Annotations, KeyStore.Caption] }); + histoProto.SetText(KeyStore.BackgroundLayout, HistogramBox.LayoutString()); return histoProto; } - function GetTextPrototype(): Document { - return textProto ? textProto : - textProto = setupPrototypeOptions(textProtoId, "TEXT_PROTO", FormattedTextBox.LayoutString(), - { x: 0, y: 0, width: 300, height: 150, layoutKeys: [KeyStore.Data] }); + function CreateTextPrototype(): Document { + let textProto = setupPrototypeOptions(textProtoId, "TEXT_PROTO", FormattedTextBox.LayoutString(), + { x: 0, y: 0, width: 300, height: 150, layoutKeys: [KeyStore.Data] }); + return textProto } - function GetPdfPrototype(): Document { - if (!pdfProto) { - pdfProto = setupPrototypeOptions(pdfProtoId, "PDF_PROTO", CollectionPDFView.LayoutString("AnnotationsKey"), - { x: 0, y: 0, nativeWidth: 1200, width: 300, layoutKeys: [KeyStore.Data, KeyStore.Annotations] }); - pdfProto.SetNumber(KeyStore.CurPage, 1); - pdfProto.SetText(KeyStore.BackgroundLayout, PDFBox.LayoutString()); - } + function CreatePdfPrototype(): Document { + let pdfProto = setupPrototypeOptions(pdfProtoId, "PDF_PROTO", CollectionPDFView.LayoutString("AnnotationsKey"), + { x: 0, y: 0, nativeWidth: 1200, width: 300, layoutKeys: [KeyStore.Data, KeyStore.Annotations] }); + pdfProto.SetNumber(KeyStore.CurPage, 1); + pdfProto.SetText(KeyStore.BackgroundLayout, PDFBox.LayoutString()); return pdfProto; } - function GetWebPrototype(): Document { - return webProto ? webProto : - webProto = setupPrototypeOptions(webProtoId, "WEB_PROTO", WebBox.LayoutString(), - { x: 0, y: 0, width: 300, height: 300, layoutKeys: [KeyStore.Data] }); + function CreateWebPrototype(): Document { + let webProto = setupPrototypeOptions(webProtoId, "WEB_PROTO", WebBox.LayoutString(), + { x: 0, y: 0, width: 300, height: 300, layoutKeys: [KeyStore.Data] }); + return webProto; } - function GetCollectionPrototype(): Document { - return collProto ? collProto : - collProto = setupPrototypeOptions(collProtoId, "COLLECTION_PROTO", CollectionView.LayoutString("DataKey"), - { panx: 0, pany: 0, scale: 1, width: 500, height: 500, layoutKeys: [KeyStore.Data] }); + function CreateCollectionPrototype(): Document { + let collProto = setupPrototypeOptions(collProtoId, "COLLECTION_PROTO", CollectionView.LayoutString("DataKey"), + { panx: 0, pany: 0, scale: 1, width: 500, height: 500, layoutKeys: [KeyStore.Data] }); + return collProto; } - function GetKVPPrototype(): Document { - return kvpProto ? kvpProto : - kvpProto = setupPrototypeOptions(kvpProtoId, "KVP_PROTO", KeyValueBox.LayoutString(), - { x: 0, y: 0, width: 300, height: 150, layoutKeys: [KeyStore.Data] }) + function CreateKVPPrototype(): Document { + let kvpProto = setupPrototypeOptions(kvpProtoId, "KVP_PROTO", KeyValueBox.LayoutString(), + { x: 0, y: 0, width: 300, height: 150, layoutKeys: [KeyStore.Data] }); + return kvpProto; } - function GetVideoPrototype(): Document { - if (!videoProto) { - videoProto = setupPrototypeOptions(videoProtoId, "VIDEO_PROTO", CollectionVideoView.LayoutString("AnnotationsKey"), - { x: 0, y: 0, nativeWidth: 600, width: 300, layoutKeys: [KeyStore.Data, KeyStore.Annotations, KeyStore.Caption] }); - videoProto.SetNumber(KeyStore.CurPage, 0); - videoProto.SetText(KeyStore.BackgroundLayout, VideoBox.LayoutString()); - } + function CreateVideoPrototype(): Document { + let videoProto = setupPrototypeOptions(videoProtoId, "VIDEO_PROTO", CollectionVideoView.LayoutString("AnnotationsKey"), + { x: 0, y: 0, nativeWidth: 600, width: 300, layoutKeys: [KeyStore.Data, KeyStore.Annotations, KeyStore.Caption] }); + videoProto.SetNumber(KeyStore.CurPage, 0); + videoProto.SetText(KeyStore.BackgroundLayout, VideoBox.LayoutString()); return videoProto; } - function GetAudioPrototype(): Document { - return audioProto ? audioProto : - audioProto = setupPrototypeOptions(audioProtoId, "AUDIO_PROTO", AudioBox.LayoutString(), - { x: 0, y: 0, width: 300, height: 150, layoutKeys: [KeyStore.Data] }) + function CreateAudioPrototype(): Document { + let audioProto = setupPrototypeOptions(audioProtoId, "AUDIO_PROTO", AudioBox.LayoutString(), + { x: 0, y: 0, width: 300, height: 150, layoutKeys: [KeyStore.Data] }) + return audioProto; } @@ -185,44 +182,44 @@ export namespace Documents { // return doc; } export function VideoDocument(url: string, options: DocumentOptions = {}) { - return assignToDelegate(SetInstanceOptions(GetVideoPrototype(), options, [new URL(url), VideoField]), options); + return assignToDelegate(SetInstanceOptions(videoProto, options, [new URL(url), VideoField]), options); } export function AudioDocument(url: string, options: DocumentOptions = {}) { - return assignToDelegate(SetInstanceOptions(GetAudioPrototype(), options, [new URL(url), AudioField]), options); + return assignToDelegate(SetInstanceOptions(audioProto, options, [new URL(url), AudioField]), options); } export function HistogramDocument(histoOp: HistogramOperation, options: DocumentOptions = {}, id?: string, delegId?: string) { - return assignToDelegate(SetInstanceOptions(GetHistogramPrototype(), options, [histoOp, HistogramField], id).MakeDelegate(delegId), options); + return assignToDelegate(SetInstanceOptions(histoProto, options, [histoOp, HistogramField], id).MakeDelegate(delegId), options); } export function TextDocument(options: DocumentOptions = {}) { - return assignToDelegate(SetInstanceOptions(GetTextPrototype(), options, ["", TextField]).MakeDelegate(), options); + return assignToDelegate(SetInstanceOptions(textProto, options, ["", TextField]).MakeDelegate(), options); } export function PdfDocument(url: string, options: DocumentOptions = {}) { - return assignToDelegate(SetInstanceOptions(GetPdfPrototype(), options, [new URL(url), PDFField]).MakeDelegate(), options); + return assignToDelegate(SetInstanceOptions(pdfProto, options, [new URL(url), PDFField]).MakeDelegate(), options); } export function WebDocument(url: string, options: DocumentOptions = {}) { - return assignToDelegate(SetInstanceOptions(GetWebPrototype(), options, [new URL(url), WebField]).MakeDelegate(), options); + return assignToDelegate(SetInstanceOptions(webProto, options, [new URL(url), WebField]).MakeDelegate(), options); } export function HtmlDocument(html: string, options: DocumentOptions = {}) { - return assignToDelegate(SetInstanceOptions(GetWebPrototype(), options, [html, HtmlField]).MakeDelegate(), options); + return assignToDelegate(SetInstanceOptions(webProto, options, [html, HtmlField]).MakeDelegate(), options); } export function KVPDocument(document: Document, options: DocumentOptions = {}, id?: string) { - return assignToDelegate(SetInstanceOptions(GetKVPPrototype(), options, document, id), options) + return assignToDelegate(SetInstanceOptions(kvpProto, options, document, id), options) } export function FreeformDocument(documents: Array, options: DocumentOptions, id?: string, makePrototype: boolean = true) { if (!makePrototype) { - return SetInstanceOptions(GetCollectionPrototype(), { ...options, viewType: CollectionViewType.Freeform }, [documents, ListField], id) + return SetInstanceOptions(collProto, { ...options, viewType: CollectionViewType.Freeform }, [documents, ListField], id) } - return assignToDelegate(SetInstanceOptions(GetCollectionPrototype(), { ...options, viewType: CollectionViewType.Freeform }, [documents, ListField], id).MakeDelegate(), options) + return assignToDelegate(SetInstanceOptions(collProto, { ...options, viewType: CollectionViewType.Freeform }, [documents, ListField], id).MakeDelegate(), options) } export function SchemaDocument(documents: Array, options: DocumentOptions, id?: string) { - return assignToDelegate(SetInstanceOptions(GetCollectionPrototype(), { ...options, viewType: CollectionViewType.Schema }, [documents, ListField], id), options) + return assignToDelegate(SetInstanceOptions(collProto, { ...options, viewType: CollectionViewType.Schema }, [documents, ListField], id), options) } export function TreeDocument(documents: Array, options: DocumentOptions, id?: string) { - return assignToDelegate(SetInstanceOptions(GetCollectionPrototype(), { ...options, viewType: CollectionViewType.Tree }, [documents, ListField], id), options) + return assignToDelegate(SetInstanceOptions(collProto, { ...options, viewType: CollectionViewType.Tree }, [documents, ListField], id), options) } export function DockDocument(config: string, options: DocumentOptions, id?: string) { - return assignToDelegate(SetInstanceOptions(GetCollectionPrototype(), { ...options, viewType: CollectionViewType.Docking }, [config, TextField], id), options) + return assignToDelegate(SetInstanceOptions(collProto, { ...options, viewType: CollectionViewType.Docking }, [config, TextField], id), options) } export function CaptionDocument(doc: Document) { diff --git a/src/client/views/Main.tsx b/src/client/views/Main.tsx index c9467e130..fd08782ff 100644 --- a/src/client/views/Main.tsx +++ b/src/client/views/Main.tsx @@ -321,7 +321,7 @@ export class Main extends React.Component { isShown={this.areWorkspacesShown} toggle={this.toggleWorkspaces} /> } return ( - [ + <>
    runInAction(() => { @@ -339,9 +339,9 @@ export class Main extends React.Component { {this.miscButtons} {workspaceMenu} -
    , - this.activeTextBox - ] +
    + {this.activeTextBox} + ); } -- cgit v1.2.3-70-g09d2 From cecbafdd8e42b1fa021a54fe624c3cf68e8645bd Mon Sep 17 00:00:00 2001 From: Tyler Schicke Date: Mon, 8 Apr 2019 22:22:50 -0400 Subject: Renamed CollectionViewBase to CollectionSubView Fixed bug with adding documents to PDF and videos --- .../views/collections/CollectionDockingView.tsx | 2 +- src/client/views/collections/CollectionPDFView.tsx | 9 +- .../views/collections/CollectionSchemaView.tsx | 4 +- src/client/views/collections/CollectionSubView.tsx | 231 +++++++++++++++++++++ .../views/collections/CollectionTreeView.tsx | 4 +- .../views/collections/CollectionVideoView.tsx | 14 +- .../views/collections/CollectionViewBase.tsx | 231 --------------------- .../CollectionFreeFormLinksView.tsx | 2 +- .../CollectionFreeFormRemoteCursors.tsx | 2 +- .../collectionFreeForm/CollectionFreeFormView.tsx | 4 +- 10 files changed, 249 insertions(+), 254 deletions(-) create mode 100644 src/client/views/collections/CollectionSubView.tsx delete mode 100644 src/client/views/collections/CollectionViewBase.tsx (limited to 'src') diff --git a/src/client/views/collections/CollectionDockingView.tsx b/src/client/views/collections/CollectionDockingView.tsx index c5e1e7f4b..c3757a377 100644 --- a/src/client/views/collections/CollectionDockingView.tsx +++ b/src/client/views/collections/CollectionDockingView.tsx @@ -15,7 +15,7 @@ import { DocumentView } from "../nodes/DocumentView"; import "./CollectionDockingView.scss"; import { COLLECTION_BORDER_WIDTH } from "./CollectionBaseView"; import React = require("react"); -import { SubCollectionViewProps } from "./CollectionViewBase"; +import { SubCollectionViewProps } from "./CollectionSubView"; import { ServerUtils } from "../../../server/ServerUtil"; import { DragManager } from "../../util/DragManager"; import { TextField } from "../../../fields/TextField"; diff --git a/src/client/views/collections/CollectionPDFView.tsx b/src/client/views/collections/CollectionPDFView.tsx index 1f2e71f6e..32f50afc0 100644 --- a/src/client/views/collections/CollectionPDFView.tsx +++ b/src/client/views/collections/CollectionPDFView.tsx @@ -2,16 +2,15 @@ import { action, computed, observable } from "mobx"; import { observer } from "mobx-react"; import { KeyStore } from "../../../fields/KeyStore"; import { ContextMenu } from "../ContextMenu"; -import { CollectionViewProps } from "./CollectionViewBase"; import "./CollectionPDFView.scss" import React = require("react"); import { CollectionFreeFormView } from "./collectionFreeForm/CollectionFreeFormView"; -import { FieldView } from "../nodes/FieldView"; +import { FieldView, FieldViewProps } from "../nodes/FieldView"; import { CollectionRenderProps, CollectionBaseView, CollectionViewType } from "./CollectionBaseView"; @observer -export class CollectionPDFView extends React.Component { +export class CollectionPDFView extends React.Component { public static LayoutString(fieldKey: string = "DataKey") { return FieldView.LayoutString(CollectionPDFView, fieldKey); @@ -23,7 +22,7 @@ export class CollectionPDFView extends React.Component { @action onPageForward = () => this.curPage < this.numPages ? this.props.Document.SetNumber(KeyStore.CurPage, this.curPage + 1) : -1; private get uIButtons() { - let scaling = Math.min(1.8, this.props.ScreenToLocalTransform().transformDirection(1, 1)[0]); + let scaling = Math.min(1.8, this.props.ScreenToLocalTransform().Scale); return (
    @@ -39,7 +38,7 @@ export class CollectionPDFView extends React.Component { } private subView = (_type: CollectionViewType, renderProps: CollectionRenderProps) => { - let props = { ...renderProps, ...this.props }; + let props = { ...this.props, ...renderProps }; return ( <> diff --git a/src/client/views/collections/CollectionSchemaView.tsx b/src/client/views/collections/CollectionSchemaView.tsx index 4604945d1..9b780f29b 100644 --- a/src/client/views/collections/CollectionSchemaView.tsx +++ b/src/client/views/collections/CollectionSchemaView.tsx @@ -23,7 +23,7 @@ import { DocumentView } from "../nodes/DocumentView"; import { FieldView, FieldViewProps } from "../nodes/FieldView"; import "./CollectionSchemaView.scss"; import { CollectionView } from "./CollectionView"; -import { CollectionViewBase } from "./CollectionViewBase"; +import { CollectionSubView } from "./CollectionSubView"; import { TextField } from "../../../fields/TextField"; import { COLLECTION_BORDER_WIDTH } from "./CollectionBaseView"; import { emptyFunction, returnFalse } from "../../../Utils"; @@ -56,7 +56,7 @@ class KeyToggle extends React.Component<{ keyId: string, checked: boolean, toggl } @observer -export class CollectionSchemaView extends CollectionViewBase { +export class CollectionSchemaView extends CollectionSubView { private _mainCont = React.createRef(); private _startSplitPercent = 0; private DIVIDER_WIDTH = 4; diff --git a/src/client/views/collections/CollectionSubView.tsx b/src/client/views/collections/CollectionSubView.tsx new file mode 100644 index 000000000..59b89e119 --- /dev/null +++ b/src/client/views/collections/CollectionSubView.tsx @@ -0,0 +1,231 @@ +import { action, runInAction } from "mobx"; +import { Document } from "../../../fields/Document"; +import { ListField } from "../../../fields/ListField"; +import React = require("react"); +import { KeyStore } from "../../../fields/KeyStore"; +import { FieldWaiting, Opt } from "../../../fields/Field"; +import { undoBatch, UndoManager } from "../../util/UndoManager"; +import { DragManager } from "../../util/DragManager"; +import { Documents, DocumentOptions } from "../../documents/Documents"; +import { RouteStore } from "../../../server/RouteStore"; +import { TupleField } from "../../../fields/TupleField"; +import { CurrentUserUtils } from "../../../server/authentication/models/current_user_utils"; +import { NumberField } from "../../../fields/NumberField"; +import { ServerUtils } from "../../../server/ServerUtil"; +import { Server } from "../../Server"; +import { FieldViewProps } from "../nodes/FieldView"; +import * as rp from 'request-promise' + +export interface CollectionViewProps extends FieldViewProps { + addDocument: (document: Document, allowDuplicates?: boolean) => boolean; + removeDocument: (document: Document) => boolean; + moveDocument: (document: Document, targetCollection: Document, addDocument: (document: Document) => boolean) => boolean; +} + +export interface SubCollectionViewProps extends CollectionViewProps { +} + +export type CursorEntry = TupleField<[string, string], [number, number]>; + +export class CollectionSubView extends React.Component { + private dropDisposer?: DragManager.DragDropDisposer; + protected createDropTarget = (ele: HTMLDivElement) => { + if (this.dropDisposer) { + this.dropDisposer(); + } + if (ele) { + this.dropDisposer = DragManager.MakeDropTarget(ele, { handlers: { drop: this.drop.bind(this) } }); + } + } + + @action + protected setCursorPosition(position: [number, number]) { + let ind; + let doc = this.props.Document; + let id = CurrentUserUtils.id; + let email = CurrentUserUtils.email; + if (id && email) { + let textInfo: [string, string] = [id, email]; + doc.GetTAsync(KeyStore.Prototype, Document).then(proto => { + if (!proto) { + return; + } + proto.GetOrCreateAsync>(KeyStore.Cursors, ListField, action((field: ListField) => { + let cursors = field.Data; + if (cursors.length > 0 && (ind = cursors.findIndex(entry => entry.Data[0][0] === id)) > -1) { + cursors[ind].Data[1] = position; + } else { + let entry = new TupleField<[string, string], [number, number]>([textInfo, position]); + cursors.push(entry); + } + })) + }) + } + } + + @undoBatch + @action + protected drop(e: Event, de: DragManager.DropEvent): boolean { + if (de.data instanceof DragManager.DocumentDragData) { + if (de.data.aliasOnDrop || de.data.copyOnDrop) { + [KeyStore.Width, KeyStore.Height, KeyStore.CurPage].map(key => + de.data.draggedDocuments.map((draggedDocument: Document, i: number) => + draggedDocument.GetTAsync(key, NumberField, (f: Opt) => f ? de.data.droppedDocuments[i].SetNumber(key, f.Data) : null))); + } + let added = false; + if (de.data.aliasOnDrop) { + added = de.data.droppedDocuments.reduce((added: boolean, d) => added || this.props.addDocument(d), false); + } else if (de.data.moveDocument) { + const move = de.data.moveDocument; + added = de.data.droppedDocuments.reduce((added: boolean, d) => added || move(d, this.props.Document, this.props.addDocument), false) + } else { + added = de.data.droppedDocuments.reduce((added: boolean, d) => added || this.props.addDocument(d), false) + } + e.stopPropagation(); + return added; + } + if (de.data instanceof DragManager.LinkDragData) { + let sourceDoc: Document = de.data.linkSourceDocumentView.props.Document; + if (sourceDoc) runInAction(() => { + let srcTarg = sourceDoc.GetT(KeyStore.Prototype, Document) + if (srcTarg && srcTarg !== FieldWaiting) { + let linkDocs = srcTarg.GetList(KeyStore.LinkedToDocs, [] as Document[]); + linkDocs.map(linkDoc => { + let targDoc = linkDoc.GetT(KeyStore.LinkedToDocs, Document); + if (targDoc && targDoc !== FieldWaiting) { + let dropdoc = targDoc.MakeDelegate(); + de.data.droppedDocuments.push(dropdoc); + this.props.addDocument(dropdoc, false); + } + }) + } + }) + return true; + } + return false; + } + + protected getDocumentFromType(type: string, path: string, options: DocumentOptions): Opt { + let ctor: ((path: string, options: DocumentOptions) => Document) | undefined; + if (type.indexOf("image") !== -1) { + ctor = Documents.ImageDocument; + } + if (type.indexOf("video") !== -1) { + ctor = Documents.VideoDocument; + } + if (type.indexOf("audio") !== -1) { + ctor = Documents.AudioDocument; + } + if (type.indexOf("pdf") !== -1) { + ctor = Documents.PdfDocument; + options.nativeWidth = 1200; + } + if (type.indexOf("html") !== -1) { + if (path.includes('localhost')) { + let s = path.split('/'); + let id = s[s.length - 1]; + Server.GetField(id).then(field => { + if (field instanceof Document) { + let alias = field.CreateAlias(); + alias.SetNumber(KeyStore.X, options.x || 0); + alias.SetNumber(KeyStore.Y, options.y || 0); + alias.SetNumber(KeyStore.Width, options.width || 300); + alias.SetNumber(KeyStore.Height, options.height || options.width || 300); + this.props.addDocument(alias, false); + } + }) + return undefined; + } + ctor = Documents.WebDocument; + options = { height: options.width, ...options, title: path }; + } + return ctor ? ctor(path, options) : undefined; + } + + @undoBatch + @action + protected onDrop(e: React.DragEvent, options: DocumentOptions): void { + let html = e.dataTransfer.getData("text/html"); + let text = e.dataTransfer.getData("text/plain"); + + if (text && text.startsWith("[] = []; + // tslint:disable-next-line:prefer-for-of + for (let i = 0; i < e.dataTransfer.items.length; i++) { + const upload = window.location.origin + RouteStore.upload; + let item = e.dataTransfer.items[i]; + if (item.kind === "string" && item.type.indexOf("uri") !== -1) { + let str: string; + let prom = new Promise(res => + e.dataTransfer.items[i].getAsString(res)).then(action((s: string) => { + str = s; + return rp.head(ServerUtils.prepend(RouteStore.corsProxy + "/" + s)) + })).then(res => { + let type = res.headers["content-type"]; + if (type) { + let doc = this.getDocumentFromType(type, str, { ...options, width: 300, nativeWidth: 300 }) + if (doc) { + this.props.addDocument(doc, false); + } + } + }); + promises.push(prom); + // this.props.addDocument(Documents.WebDocument(s, { ...options, width: 300, height: 300 }), false) + } + let type = item.type + if (item.kind === "file") { + let file = item.getAsFile(); + let formData = new FormData() + + if (file) { + formData.append('file', file) + } + + let prom = fetch(upload, { + method: 'POST', + body: formData + }).then(async (res: Response) => { + const json = await res.json(); + json.map((file: any) => { + let path = window.location.origin + file + runInAction(() => { + let doc = this.getDocumentFromType(type, path, { ...options, nativeWidth: 300, width: 300 }) + + let docs = this.props.Document.GetT(KeyStore.Data, ListField); + if (docs !== FieldWaiting) { + if (!docs) { + docs = new ListField(); + this.props.Document.Set(KeyStore.Data, docs) + } + if (doc) { + docs.Data.push(doc); + } + } + }); + }); + }); + promises.push(prom); + } + } + + if (promises.length) { + Promise.all(promises).catch(() => { }).then(() => batch.end()); + } else { + batch.end(); + } + } +} diff --git a/src/client/views/collections/CollectionTreeView.tsx b/src/client/views/collections/CollectionTreeView.tsx index dce35868e..2bdf0baa6 100644 --- a/src/client/views/collections/CollectionTreeView.tsx +++ b/src/client/views/collections/CollectionTreeView.tsx @@ -11,7 +11,7 @@ import { setupDrag, DragManager } from "../../util/DragManager"; import { EditableView } from "../EditableView"; import "./CollectionTreeView.scss"; import { CollectionView } from "./CollectionView"; -import { CollectionViewBase } from "./CollectionViewBase"; +import { CollectionSubView } from "./CollectionSubView"; import React = require("react") import { COLLECTION_BORDER_WIDTH } from './CollectionBaseView'; import { props } from 'bluebird'; @@ -120,7 +120,7 @@ class TreeView extends React.Component { } @observer -export class CollectionTreeView extends CollectionViewBase { +export class CollectionTreeView extends CollectionSubView { @action remove = (document: Document) => { diff --git a/src/client/views/collections/CollectionVideoView.tsx b/src/client/views/collections/CollectionVideoView.tsx index afadfeefb..1acc76c85 100644 --- a/src/client/views/collections/CollectionVideoView.tsx +++ b/src/client/views/collections/CollectionVideoView.tsx @@ -1,20 +1,16 @@ -import { action, computed, observable, trace } from "mobx"; +import { action, observable, trace } from "mobx"; import { observer } from "mobx-react"; -import { Document } from "../../../fields/Document"; import { KeyStore } from "../../../fields/KeyStore"; import { ContextMenu } from "../ContextMenu"; -import { CollectionView } from "./CollectionView"; import { CollectionViewType, CollectionBaseView, CollectionRenderProps } from "./CollectionBaseView"; -import { CollectionViewProps } from "./CollectionViewBase"; import React = require("react"); -import { FieldId } from "../../../fields/Field"; import "./CollectionVideoView.scss" import { CollectionFreeFormView } from "./collectionFreeForm/CollectionFreeFormView"; -import { FieldView } from "../nodes/FieldView"; +import { FieldView, FieldViewProps } from "../nodes/FieldView"; @observer -export class CollectionVideoView extends React.Component { +export class CollectionVideoView extends React.Component { private _intervalTimer: any = undefined; private _player: HTMLVideoElement | undefined = undefined; @@ -25,7 +21,7 @@ export class CollectionVideoView extends React.Component { return FieldView.LayoutString(CollectionVideoView, fieldKey); } private get uIButtons() { - let scaling = Math.min(1.8, this.props.ScreenToLocalTransform().transformDirection(1, 1)[0]); + let scaling = Math.min(1.8, this.props.ScreenToLocalTransform().Scale); return ([
    {"" + Math.round(this._currentTimecode)} @@ -109,7 +105,7 @@ export class CollectionVideoView extends React.Component { } private subView = (_type: CollectionViewType, renderProps: CollectionRenderProps) => { - let props = { ...renderProps, ...this.props }; + let props = { ...this.props, ...renderProps }; return ( <> diff --git a/src/client/views/collections/CollectionViewBase.tsx b/src/client/views/collections/CollectionViewBase.tsx deleted file mode 100644 index ad1294f76..000000000 --- a/src/client/views/collections/CollectionViewBase.tsx +++ /dev/null @@ -1,231 +0,0 @@ -import { action, runInAction } from "mobx"; -import { Document } from "../../../fields/Document"; -import { ListField } from "../../../fields/ListField"; -import React = require("react"); -import { KeyStore } from "../../../fields/KeyStore"; -import { FieldWaiting, Opt } from "../../../fields/Field"; -import { undoBatch, UndoManager } from "../../util/UndoManager"; -import { DragManager } from "../../util/DragManager"; -import { Documents, DocumentOptions } from "../../documents/Documents"; -import { RouteStore } from "../../../server/RouteStore"; -import { TupleField } from "../../../fields/TupleField"; -import { CurrentUserUtils } from "../../../server/authentication/models/current_user_utils"; -import { NumberField } from "../../../fields/NumberField"; -import { ServerUtils } from "../../../server/ServerUtil"; -import { Server } from "../../Server"; -import { FieldViewProps } from "../nodes/FieldView"; -import * as rp from 'request-promise' - -export interface CollectionViewProps extends FieldViewProps { - addDocument: (document: Document, allowDuplicates?: boolean) => boolean; - removeDocument: (document: Document) => boolean; - moveDocument: (document: Document, targetCollection: Document, addDocument: (document: Document) => boolean) => boolean; -} - -export interface SubCollectionViewProps extends CollectionViewProps { -} - -export type CursorEntry = TupleField<[string, string], [number, number]>; - -export class CollectionViewBase extends React.Component { - private dropDisposer?: DragManager.DragDropDisposer; - protected createDropTarget = (ele: HTMLDivElement) => { - if (this.dropDisposer) { - this.dropDisposer(); - } - if (ele) { - this.dropDisposer = DragManager.MakeDropTarget(ele, { handlers: { drop: this.drop.bind(this) } }); - } - } - - @action - protected setCursorPosition(position: [number, number]) { - let ind; - let doc = this.props.Document; - let id = CurrentUserUtils.id; - let email = CurrentUserUtils.email; - if (id && email) { - let textInfo: [string, string] = [id, email]; - doc.GetTAsync(KeyStore.Prototype, Document).then(proto => { - if (!proto) { - return; - } - proto.GetOrCreateAsync>(KeyStore.Cursors, ListField, action((field: ListField) => { - let cursors = field.Data; - if (cursors.length > 0 && (ind = cursors.findIndex(entry => entry.Data[0][0] === id)) > -1) { - cursors[ind].Data[1] = position; - } else { - let entry = new TupleField<[string, string], [number, number]>([textInfo, position]); - cursors.push(entry); - } - })) - }) - } - } - - @undoBatch - @action - protected drop(e: Event, de: DragManager.DropEvent): boolean { - if (de.data instanceof DragManager.DocumentDragData) { - if (de.data.aliasOnDrop || de.data.copyOnDrop) { - [KeyStore.Width, KeyStore.Height, KeyStore.CurPage].map(key => - de.data.draggedDocuments.map((draggedDocument: Document, i: number) => - draggedDocument.GetTAsync(key, NumberField, (f: Opt) => f ? de.data.droppedDocuments[i].SetNumber(key, f.Data) : null))); - } - let added = false; - if (de.data.aliasOnDrop) { - added = de.data.droppedDocuments.reduce((added: boolean, d) => added || this.props.addDocument(d), false); - } else if (de.data.moveDocument) { - const move = de.data.moveDocument; - added = de.data.droppedDocuments.reduce((added: boolean, d) => added || move(d, this.props.Document, this.props.addDocument), false) - } else { - added = de.data.droppedDocuments.reduce((added: boolean, d) => added || this.props.addDocument(d), false) - } - e.stopPropagation(); - return added; - } - if (de.data instanceof DragManager.LinkDragData) { - let sourceDoc: Document = de.data.linkSourceDocumentView.props.Document; - if (sourceDoc) runInAction(() => { - let srcTarg = sourceDoc.GetT(KeyStore.Prototype, Document) - if (srcTarg && srcTarg !== FieldWaiting) { - let linkDocs = srcTarg.GetList(KeyStore.LinkedToDocs, [] as Document[]); - linkDocs.map(linkDoc => { - let targDoc = linkDoc.GetT(KeyStore.LinkedToDocs, Document); - if (targDoc && targDoc !== FieldWaiting) { - let dropdoc = targDoc.MakeDelegate(); - de.data.droppedDocuments.push(dropdoc); - this.props.addDocument(dropdoc, false); - } - }) - } - }) - return true; - } - return false; - } - - protected getDocumentFromType(type: string, path: string, options: DocumentOptions): Opt { - let ctor: ((path: string, options: DocumentOptions) => Document) | undefined; - if (type.indexOf("image") !== -1) { - ctor = Documents.ImageDocument; - } - if (type.indexOf("video") !== -1) { - ctor = Documents.VideoDocument; - } - if (type.indexOf("audio") !== -1) { - ctor = Documents.AudioDocument; - } - if (type.indexOf("pdf") !== -1) { - ctor = Documents.PdfDocument; - options.nativeWidth = 1200; - } - if (type.indexOf("html") !== -1) { - if (path.includes('localhost')) { - let s = path.split('/'); - let id = s[s.length - 1]; - Server.GetField(id).then(field => { - if (field instanceof Document) { - let alias = field.CreateAlias(); - alias.SetNumber(KeyStore.X, options.x || 0); - alias.SetNumber(KeyStore.Y, options.y || 0); - alias.SetNumber(KeyStore.Width, options.width || 300); - alias.SetNumber(KeyStore.Height, options.height || options.width || 300); - this.props.addDocument(alias, false); - } - }) - return undefined; - } - ctor = Documents.WebDocument; - options = { height: options.width, ...options, title: path }; - } - return ctor ? ctor(path, options) : undefined; - } - - @undoBatch - @action - protected onDrop(e: React.DragEvent, options: DocumentOptions): void { - let html = e.dataTransfer.getData("text/html"); - let text = e.dataTransfer.getData("text/plain"); - - if (text && text.startsWith("[] = []; - // tslint:disable-next-line:prefer-for-of - for (let i = 0; i < e.dataTransfer.items.length; i++) { - const upload = window.location.origin + RouteStore.upload; - let item = e.dataTransfer.items[i]; - if (item.kind === "string" && item.type.indexOf("uri") !== -1) { - let str: string; - let prom = new Promise(res => - e.dataTransfer.items[i].getAsString(res)).then(action((s: string) => { - str = s; - return rp.head(ServerUtils.prepend(RouteStore.corsProxy + "/" + s)) - })).then(res => { - let type = res.headers["content-type"]; - if (type) { - let doc = this.getDocumentFromType(type, str, { ...options, width: 300, nativeWidth: 300 }) - if (doc) { - this.props.addDocument(doc, false); - } - } - }); - promises.push(prom); - // this.props.addDocument(Documents.WebDocument(s, { ...options, width: 300, height: 300 }), false) - } - let type = item.type - if (item.kind === "file") { - let file = item.getAsFile(); - let formData = new FormData() - - if (file) { - formData.append('file', file) - } - - let prom = fetch(upload, { - method: 'POST', - body: formData - }).then(async (res: Response) => { - const json = await res.json(); - json.map((file: any) => { - let path = window.location.origin + file - runInAction(() => { - let doc = this.getDocumentFromType(type, path, { ...options, nativeWidth: 300, width: 300 }) - - let docs = this.props.Document.GetT(KeyStore.Data, ListField); - if (docs !== FieldWaiting) { - if (!docs) { - docs = new ListField(); - this.props.Document.Set(KeyStore.Data, docs) - } - if (doc) { - docs.Data.push(doc); - } - } - }); - }); - }); - promises.push(prom); - } - } - - if (promises.length) { - Promise.all(promises).catch(() => { }).then(() => batch.end()); - } else { - batch.end(); - } - } -} diff --git a/src/client/views/collections/collectionFreeForm/CollectionFreeFormLinksView.tsx b/src/client/views/collections/collectionFreeForm/CollectionFreeFormLinksView.tsx index abc6cecff..c288e7abf 100644 --- a/src/client/views/collections/collectionFreeForm/CollectionFreeFormLinksView.tsx +++ b/src/client/views/collections/collectionFreeForm/CollectionFreeFormLinksView.tsx @@ -7,7 +7,7 @@ import { ListField } from "../../../../fields/ListField"; import { Utils } from "../../../../Utils"; import { DocumentManager } from "../../../util/DocumentManager"; import { DocumentView } from "../../nodes/DocumentView"; -import { CollectionViewProps } from "../CollectionViewBase"; +import { CollectionViewProps } from "../CollectionSubView"; import "./CollectionFreeFormLinksView.scss"; import { CollectionFreeFormLinkView } from "./CollectionFreeFormLinkView"; import React = require("react"); diff --git a/src/client/views/collections/collectionFreeForm/CollectionFreeFormRemoteCursors.tsx b/src/client/views/collections/collectionFreeForm/CollectionFreeFormRemoteCursors.tsx index f664f4e65..17656e4ae 100644 --- a/src/client/views/collections/collectionFreeForm/CollectionFreeFormRemoteCursors.tsx +++ b/src/client/views/collections/collectionFreeForm/CollectionFreeFormRemoteCursors.tsx @@ -1,7 +1,7 @@ import { computed } from "mobx"; import { observer } from "mobx-react"; import { KeyStore } from "../../../../fields/KeyStore"; -import { CollectionViewProps, CursorEntry } from "../CollectionViewBase"; +import { CollectionViewProps, CursorEntry } from "../CollectionSubView"; import "./CollectionFreeFormView.scss"; import React = require("react"); import v5 = require("uuid/v5"); diff --git a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx index 731ba3332..1c3899b24 100644 --- a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx +++ b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx @@ -12,7 +12,7 @@ import { CollectionFreeFormDocumentView } from "../../nodes/CollectionFreeFormDo import { DocumentContentsView } from "../../nodes/DocumentContentsView"; import { DocumentViewProps } from "../../nodes/DocumentView"; import { COLLECTION_BORDER_WIDTH } from "../CollectionBaseView"; -import { CollectionViewBase } from "../CollectionViewBase"; +import { CollectionSubView } from "../CollectionSubView"; import { CollectionFreeFormLinksView } from "./CollectionFreeFormLinksView"; import "./CollectionFreeFormView.scss"; import { MarqueeView } from "./MarqueeView"; @@ -26,7 +26,7 @@ import { NumberField } from "../../../../fields/NumberField"; import { Main } from "../../Main"; @observer -export class CollectionFreeFormView extends CollectionViewBase { +export class CollectionFreeFormView extends CollectionSubView { public _canvasRef = React.createRef(); private _selectOnLoaded: string = ""; // id of document that should be selected once it's loaded (used for click-to-type) -- cgit v1.2.3-70-g09d2 From 5e086920bf97297a02bcd38faea56454c2220279 Mon Sep 17 00:00:00 2001 From: Tyler Schicke Date: Mon, 8 Apr 2019 22:45:22 -0400 Subject: Enabled semi-colon and braces linter rule --- src/Utils.ts | 12 +-- src/client/Server.ts | 35 ++++---- src/client/SocketStub.ts | 24 +++--- src/client/documents/Documents.ts | 38 +++++---- src/client/northstar/core/BaseObject.ts | 4 +- .../northstar/core/attribute/AttributeModel.ts | 6 +- .../core/attribute/AttributeTransformationModel.ts | 17 ++-- .../core/attribute/CalculatedAttributeModel.ts | 2 +- .../northstar/core/brusher/IBaseBrushable.ts | 4 +- src/client/northstar/core/brusher/IBaseBrusher.ts | 2 +- src/client/northstar/core/filter/FilterModel.ts | 2 +- .../northstar/core/filter/IBaseFilterConsumer.ts | 4 +- .../northstar/core/filter/IBaseFilterProvider.ts | 2 +- .../northstar/core/filter/ValueComparision.ts | 16 ++-- src/client/northstar/dash-fields/HistogramField.ts | 2 +- .../dash-nodes/HistogramBinPrimitiveCollection.ts | 12 +-- src/client/northstar/dash-nodes/HistogramBox.tsx | 24 +++--- .../dash-nodes/HistogramBoxPrimitives.tsx | 40 +++++---- .../dash-nodes/HistogramLabelPrimitives.tsx | 15 ++-- src/client/northstar/manager/Gateway.ts | 2 +- src/client/northstar/model/ModelExtensions.ts | 18 ++-- src/client/northstar/model/ModelHelpers.ts | 8 +- .../model/binRanges/AlphabeticVisualBinRange.ts | 4 +- .../model/binRanges/DateTimeVisualBinRange.ts | 4 +- .../model/binRanges/NominalVisualBinRange.ts | 4 +- .../model/binRanges/QuantitativeVisualBinRange.ts | 2 +- .../northstar/model/binRanges/VisualBinRange.ts | 2 +- .../model/binRanges/VisualBinRangeHelper.ts | 14 +-- src/client/northstar/operations/BaseOperation.ts | 9 +- .../northstar/operations/HistogramOperation.ts | 2 +- src/client/northstar/utils/ArrayUtil.ts | 2 +- src/client/northstar/utils/Extensions.ts | 6 +- src/client/northstar/utils/GeometryUtil.ts | 34 ++++---- src/client/northstar/utils/MathUtil.ts | 38 +++++---- src/client/northstar/utils/SizeConverter.ts | 16 ++-- src/client/northstar/utils/StyleContants.ts | 2 +- src/client/northstar/utils/Utils.ts | 8 +- src/client/util/DocumentManager.ts | 12 +-- src/client/util/DragManager.ts | 5 +- src/client/util/RichTextSchema.tsx | 42 ++++----- src/client/util/Scripting.ts | 10 +-- src/client/util/ScrollBox.tsx | 4 +- src/client/util/SelectionManager.ts | 4 +- src/client/util/TooltipTextMenu.tsx | 38 ++++----- src/client/util/Transform.ts | 20 ++--- src/client/util/TypedEvent.ts | 2 +- src/client/util/UndoManager.ts | 24 +++--- src/client/views/ContextMenu.tsx | 14 +-- src/client/views/ContextMenuItem.tsx | 4 +- src/client/views/DocumentDecorations.tsx | 99 +++++++++++----------- src/client/views/EditableView.tsx | 10 +-- src/client/views/InkingCanvas.tsx | 15 ++-- src/client/views/InkingControl.tsx | 12 +-- src/client/views/InkingStroke.tsx | 6 +- src/client/views/Main.tsx | 55 ++++++------ .../views/collections/CollectionBaseView.tsx | 34 +++++--- .../views/collections/CollectionDockingView.tsx | 37 ++++---- src/client/views/collections/CollectionPDFView.tsx | 6 +- .../views/collections/CollectionSchemaView.tsx | 39 ++++----- src/client/views/collections/CollectionSubView.tsx | 41 ++++----- .../views/collections/CollectionTreeView.tsx | 14 +-- .../views/collections/CollectionVideoView.tsx | 6 +- src/client/views/collections/CollectionView.tsx | 20 ++--- .../CollectionFreeFormLinkView.tsx | 2 +- .../CollectionFreeFormLinksView.tsx | 18 ++-- .../CollectionFreeFormRemoteCursors.tsx | 6 +- .../collectionFreeForm/CollectionFreeFormView.tsx | 33 ++++---- .../collections/collectionFreeForm/MarqueeView.tsx | 15 ++-- .../collectionFreeForm/PreviewCursor.tsx | 5 +- src/client/views/nodes/Annotation.tsx | 22 ++--- src/client/views/nodes/AudioBox.tsx | 12 +-- .../views/nodes/CollectionFreeFormDocumentView.tsx | 12 +-- src/client/views/nodes/DocumentContentsView.tsx | 6 +- src/client/views/nodes/DocumentView.tsx | 35 ++++---- src/client/views/nodes/FieldView.tsx | 29 ++++--- src/client/views/nodes/FormattedTextBox.tsx | 17 ++-- src/client/views/nodes/ImageBox.tsx | 12 +-- src/client/views/nodes/KeyValueBox.tsx | 18 ++-- src/client/views/nodes/KeyValuePair.tsx | 14 +-- src/client/views/nodes/LinkBox.tsx | 17 ++-- src/client/views/nodes/LinkEditor.tsx | 6 +- src/client/views/nodes/LinkMenu.tsx | 10 +-- src/client/views/nodes/PDFBox.tsx | 56 ++++++------ src/client/views/nodes/Sticky.tsx | 6 +- src/client/views/nodes/VideoBox.tsx | 10 +-- src/client/views/nodes/WebBox.tsx | 6 +- src/debug/Test.tsx | 8 +- src/debug/Viewer.tsx | 48 +++++------ src/fields/AudioField.ts | 2 +- src/fields/BasicField.ts | 6 +- src/fields/Document.ts | 25 +++--- src/fields/DocumentReference.ts | 2 +- src/fields/Field.ts | 2 +- src/fields/HtmlField.ts | 2 +- src/fields/ImageField.ts | 2 +- src/fields/InkField.ts | 2 +- src/fields/Key.ts | 6 +- src/fields/KeyStore.ts | 3 +- src/fields/ListField.ts | 31 ++++--- src/fields/NumberField.ts | 4 +- src/fields/PDFField.ts | 4 +- src/fields/RichTextField.ts | 2 +- src/fields/TextField.ts | 4 +- src/fields/TupleField.ts | 6 +- src/fields/VideoField.ts | 2 +- src/fields/WebField.ts | 2 +- src/mobile/ImageUpload.tsx | 14 +-- src/server/Client.ts | 4 +- src/server/authentication/config/passport.ts | 6 +- .../authentication/controllers/WorkspacesMenu.tsx | 2 +- .../authentication/controllers/user_controller.ts | 20 ++--- .../authentication/models/current_user_utils.ts | 8 +- src/server/authentication/models/user_model.ts | 2 +- src/server/database.ts | 34 ++++---- src/server/index.ts | 76 ++++++++--------- test/test.ts | 6 +- tslint.json | 16 ++-- 117 files changed, 901 insertions(+), 826 deletions(-) (limited to 'src') diff --git a/src/Utils.ts b/src/Utils.ts index 8bd7f2f5c..b0e66787e 100644 --- a/src/Utils.ts +++ b/src/Utils.ts @@ -6,16 +6,16 @@ import { Message, Types } from './server/Message'; export class Utils { public static GenerateGuid(): string { - return v4() + return v4(); } public static GenerateDeterministicGuid(seed: string): string { - return v5(seed, v5.URL) + return v5(seed, v5.URL); } public static GetScreenTransform(ele: HTMLElement): { scale: number, translateX: number, translateY: number } { if (!ele) { - return { scale: 1, translateX: 1, translateY: 1 } + return { scale: 1, translateX: 1, translateY: 1 }; } const rect = ele.getBoundingClientRect(); const scale = ele.offsetWidth === 0 && rect.width === 0 ? 1 : rect.width / ele.offsetWidth; @@ -55,8 +55,8 @@ export class Utils { return (args: any) => { this.log(prefix, messageName, args, true); func(args); - } - }; + }; + } public static Emit(socket: Socket | SocketIOClient.Socket, message: Message, args: T) { this.log("Emit", message.Name, args, false); @@ -81,7 +81,7 @@ export class Utils { public static AddServerHandlerCallback(socket: Socket, message: Message, handler: (args: [T, (res: any) => any]) => any) { socket.on(message.Message, (arg: T, fn: (res: any) => any) => { this.log('S receiving', message.Name, arg, true); - handler([arg, this.loggingCallback('S sending', fn, message.Name)]) + handler([arg, this.loggingCallback('S sending', fn, message.Name)]); }); } } diff --git a/src/client/Server.ts b/src/client/Server.ts index 45c7144ca..857101a33 100644 --- a/src/client/Server.ts +++ b/src/client/Server.ts @@ -1,7 +1,7 @@ -import { Key } from "../fields/Key" +import { Key } from "../fields/Key"; import { ObservableMap, action, reaction } from "mobx"; -import { Field, FieldWaiting, FIELD_WAITING, Opt, FieldId } from "../fields/Field" -import { Document } from "../fields/Document" +import { Field, FieldWaiting, FIELD_WAITING, Opt, FieldId } from "../fields/Field"; +import { Document } from "../fields/Document"; import { SocketStub, FieldMap } from "./SocketStub"; import * as OpenSocket from 'socket.io-client'; import { Utils } from "./../Utils"; @@ -10,7 +10,7 @@ import { MessageStore, Types } from "./../server/Message"; export class Server { public static ClientFieldsCached: ObservableMap = new ObservableMap(); static Socket: SocketIOClient.Socket = OpenSocket(`${window.location.protocol}//${window.location.hostname}:4321`); - static GUID: string = Utils.GenerateGuid() + static GUID: string = Utils.GenerateGuid(); // Retrieves the cached value of the field and sends a request to the server for the real value (if it's not cached). @@ -25,15 +25,16 @@ export class Server { this.ClientFieldsCached.set(fieldid, FieldWaiting); SocketStub.SEND_FIELD_REQUEST(fieldid, action((field: Field | undefined) => { let cached = this.ClientFieldsCached.get(fieldid); - if (cached !== FieldWaiting) + if (cached !== FieldWaiting) { cb(cached); + } else { if (field) { this.ClientFieldsCached.set(fieldid, field); } else { - this.ClientFieldsCached.delete(fieldid) + this.ClientFieldsCached.delete(fieldid); } - cb(field) + cb(field); } })); } else if (cached !== FieldWaiting) { @@ -42,12 +43,12 @@ export class Server { reaction(() => this.ClientFieldsCached.get(fieldid), (field, reaction) => { if (field !== FieldWaiting) { - reaction.dispose() - cb(field) + reaction.dispose(); + cb(field); } - }) + }); } - } + }; if (callback) { fn(callback); } else { @@ -79,15 +80,15 @@ export class Server { let field = fields[id]; if (field) { if (!(this.ClientFieldsCached.get(field.Id) instanceof Field)) { - this.ClientFieldsCached.set(field.Id, field) + this.ClientFieldsCached.set(field.Id, field); } else { - throw new Error("we shouldn't be trying to replace things that are already in the cache") + throw new Error("we shouldn't be trying to replace things that are already in the cache"); } } else { if (this.ClientFieldsCached.get(id) === FieldWaiting) { this.ClientFieldsCached.delete(id); } else { - throw new Error("we shouldn't be trying to replace things that are already in the cache") + throw new Error("we shouldn't be trying to replace things that are already in the cache"); } } } @@ -99,9 +100,9 @@ export class Server { let realField = field as Field; existingFields[realField.Id] = realField; } - cb({ ...fields, ...existingFields }) + cb({ ...fields, ...existingFields }); } - }, { fireImmediately: true }) + }, { fireImmediately: true }); })); }; if (callback) { @@ -139,7 +140,7 @@ export class Server { public static UpdateField(field: Field) { if (!this.ClientFieldsCached.has(field.Id)) { - this.ClientFieldsCached.set(field.Id, field) + this.ClientFieldsCached.set(field.Id, field); } SocketStub.SEND_SET_FIELD(field); } diff --git a/src/client/SocketStub.ts b/src/client/SocketStub.ts index c3cd8bee6..257973e3d 100644 --- a/src/client/SocketStub.ts +++ b/src/client/SocketStub.ts @@ -1,7 +1,7 @@ -import { Key } from "../fields/Key" -import { Field, FieldId, Opt } from "../fields/Field" +import { Key } from "../fields/Key"; +import { Field, FieldId, Opt } from "../fields/Field"; import { ObservableMap } from "mobx"; -import { Document } from "../fields/Document" +import { Document } from "../fields/Document"; import { MessageStore, DocumentTransfer } from "../server/Message"; import { Utils } from "../Utils"; import { Server } from "./Server"; @@ -37,7 +37,7 @@ export class SocketStub { // document.fields.forEach((f, key) => (this.FieldStore.get(document.Id) as Document)._proxies.set(key.Id, (f as Field).Id)); console.log("sending " + document.Title); - Utils.Emit(Server.Socket, MessageStore.AddDocument, new DocumentTransfer(document.ToJson())) + Utils.Emit(Server.Socket, MessageStore.AddDocument, new DocumentTransfer(document.ToJson())); } public static SEND_FIELD_REQUEST(fieldid: FieldId): Promise>; @@ -50,12 +50,12 @@ export class SocketStub { } else { cb(undefined); } - }) - } + }); + }; if (callback) { fn(callback); } else { - return new Promise(fn) + return new Promise(fn); } } @@ -65,7 +65,7 @@ export class SocketStub { for (let field of fields) { fieldMap[field._id] = ServerUtils.FromJson(field); } - callback(fieldMap) + callback(fieldMap); }); } @@ -78,8 +78,9 @@ export class SocketStub { // server updates its document to hold a proxy mapping from key => fieldId var document = this.FieldStore.get(doc.Id) as Document; - if (document) + if (document) { document._proxies.set(key.Id, value.Id); + } // server adds the field to its repository of fields this.FieldStore.set(value.Id, value); @@ -93,8 +94,9 @@ export class SocketStub { // Server removes the field id from the document's list of field proxies var document = this.FieldStore.get(doc.Id) as Document; - if (document) + if (document) { document._proxies.delete(key.Id); + } } public static SEND_SET_FIELD(field: Field) { @@ -103,6 +105,6 @@ export class SocketStub { // ...SOCKET(SET_FIELD, field id, serialized field value) // Server updates the value of the field in its fieldstore - Utils.Emit(Server.Socket, MessageStore.SetField, field.ToJson()) + Utils.Emit(Server.Socket, MessageStore.SetField, field.ToJson()); } } diff --git a/src/client/documents/Documents.ts b/src/client/documents/Documents.ts index 613b94abd..72e6e57ab 100644 --- a/src/client/documents/Documents.ts +++ b/src/client/documents/Documents.ts @@ -64,7 +64,7 @@ export namespace Documents { const webProtoId = "webProto"; const collProtoId = "collectionProto"; const kvpProtoId = "kvpProto"; - const videoProtoId = "videoProto" + const videoProtoId = "videoProto"; const audioProtoId = "audioProto"; export function initProtos(): Promise { @@ -102,7 +102,7 @@ export namespace Documents { if (options.height !== undefined) { doc.SetNumber(KeyStore.Height, options.height); } if (options.panx !== undefined) { doc.SetNumber(KeyStore.PanX, options.panx); } if (options.pany !== undefined) { doc.SetNumber(KeyStore.PanY, options.pany); } - return doc + return doc; } function setupPrototypeOptions(protoId: string, title: string, layout: string, options: DocumentOptions): Document { @@ -110,10 +110,12 @@ export namespace Documents { } function SetInstanceOptions(doc: Document, options: DocumentOptions, value: [T, { new(): U }] | Document, id?: string) { var deleg = doc.MakeDelegate(id); - if (value instanceof Document) - deleg.Set(KeyStore.Data, value) - else + if (value instanceof Document) { + deleg.Set(KeyStore.Data, value); + } + else { deleg.SetData(KeyStore.Data, value[0], value[1]); + } return assignOptions(deleg, options); } @@ -134,7 +136,7 @@ export namespace Documents { function CreateTextPrototype(): Document { let textProto = setupPrototypeOptions(textProtoId, "TEXT_PROTO", FormattedTextBox.LayoutString(), { x: 0, y: 0, width: 300, height: 150, layoutKeys: [KeyStore.Data] }); - return textProto + return textProto; } function CreatePdfPrototype(): Document { let pdfProto = setupPrototypeOptions(pdfProtoId, "PDF_PROTO", CollectionPDFView.LayoutString("AnnotationsKey"), @@ -168,7 +170,7 @@ export namespace Documents { } function CreateAudioPrototype(): Document { let audioProto = setupPrototypeOptions(audioProtoId, "AUDIO_PROTO", AudioBox.LayoutString(), - { x: 0, y: 0, width: 300, height: 150, layoutKeys: [KeyStore.Data] }) + { x: 0, y: 0, width: 300, height: 150, layoutKeys: [KeyStore.Data] }); return audioProto; } @@ -205,22 +207,22 @@ export namespace Documents { return assignToDelegate(SetInstanceOptions(webProto, options, [html, HtmlField]).MakeDelegate(), options); } export function KVPDocument(document: Document, options: DocumentOptions = {}, id?: string) { - return assignToDelegate(SetInstanceOptions(kvpProto, options, document, id), options) + return assignToDelegate(SetInstanceOptions(kvpProto, options, document, id), options); } export function FreeformDocument(documents: Array, options: DocumentOptions, id?: string, makePrototype: boolean = true) { if (!makePrototype) { - return SetInstanceOptions(collProto, { ...options, viewType: CollectionViewType.Freeform }, [documents, ListField], id) + return SetInstanceOptions(collProto, { ...options, viewType: CollectionViewType.Freeform }, [documents, ListField], id); } - return assignToDelegate(SetInstanceOptions(collProto, { ...options, viewType: CollectionViewType.Freeform }, [documents, ListField], id).MakeDelegate(), options) + return assignToDelegate(SetInstanceOptions(collProto, { ...options, viewType: CollectionViewType.Freeform }, [documents, ListField], id).MakeDelegate(), options); } export function SchemaDocument(documents: Array, options: DocumentOptions, id?: string) { - return assignToDelegate(SetInstanceOptions(collProto, { ...options, viewType: CollectionViewType.Schema }, [documents, ListField], id), options) + return assignToDelegate(SetInstanceOptions(collProto, { ...options, viewType: CollectionViewType.Schema }, [documents, ListField], id), options); } export function TreeDocument(documents: Array, options: DocumentOptions, id?: string) { - return assignToDelegate(SetInstanceOptions(collProto, { ...options, viewType: CollectionViewType.Tree }, [documents, ListField], id), options) + return assignToDelegate(SetInstanceOptions(collProto, { ...options, viewType: CollectionViewType.Tree }, [documents, ListField], id), options); } export function DockDocument(config: string, options: DocumentOptions, id?: string) { - return assignToDelegate(SetInstanceOptions(collProto, { ...options, viewType: CollectionViewType.Docking }, [config, TextField], id), options) + return assignToDelegate(SetInstanceOptions(collProto, { ...options, viewType: CollectionViewType.Docking }, [config, TextField], id), options); } export function CaptionDocument(doc: Document) { @@ -240,13 +242,13 @@ export namespace Documents {
    ` + FormattedTextBox.LayoutString("CaptionKey") + `
    -
    ` }; +
    `; } export function FixedCaption(fieldName: string = "Caption") { return `
    ` + FormattedTextBox.LayoutString(fieldName + "Key") + `
    -
    ` }; +
    `; } function OuterCaption() { return (` @@ -258,7 +260,7 @@ export namespace Documents {
    - `) + `); } function InnerCaption() { return (` @@ -270,7 +272,7 @@ export namespace Documents {
- `) + `); } /* @@ -293,6 +295,6 @@ export namespace Documents {
- `) + `); } } \ No newline at end of file diff --git a/src/client/northstar/core/BaseObject.ts b/src/client/northstar/core/BaseObject.ts index f1761e643..ed3818071 100644 --- a/src/client/northstar/core/BaseObject.ts +++ b/src/client/northstar/core/BaseObject.ts @@ -1,5 +1,5 @@ -import { IEquatable } from '../utils/IEquatable' -import { IDisposable } from '../utils/IDisposable' +import { IEquatable } from '../utils/IEquatable'; +import { IDisposable } from '../utils/IDisposable'; export class BaseObject implements IEquatable, IDisposable { diff --git a/src/client/northstar/core/attribute/AttributeModel.ts b/src/client/northstar/core/attribute/AttributeModel.ts index 230bfecc8..c89b1617c 100644 --- a/src/client/northstar/core/attribute/AttributeModel.ts +++ b/src/client/northstar/core/attribute/AttributeModel.ts @@ -1,5 +1,5 @@ -import { Attribute, DataType, VisualizationHint } from '../../model/idea/idea' -import { BaseObject } from '../BaseObject' +import { Attribute, DataType, VisualizationHint } from '../../model/idea/idea'; +import { BaseObject } from '../BaseObject'; import { observable } from "mobx"; export abstract class AttributeModel extends BaseObject { @@ -93,7 +93,7 @@ export class BackendAttributeModel extends AttributeModel { } public get DisplayName(): string { - return this._displayName.ReplaceAll("_", " ");; + return this._displayName.ReplaceAll("_", " "); } public get CodeName(): string { diff --git a/src/client/northstar/core/attribute/AttributeTransformationModel.ts b/src/client/northstar/core/attribute/AttributeTransformationModel.ts index f50b78d51..66485183b 100644 --- a/src/client/northstar/core/attribute/AttributeTransformationModel.ts +++ b/src/client/northstar/core/attribute/AttributeTransformationModel.ts @@ -1,4 +1,4 @@ -; + import { computed, observable } from "mobx"; import { AggregateFunction } from "../../model/idea/idea"; import { AttributeModel } from "./AttributeModel"; @@ -20,16 +20,21 @@ export class AttributeTransformationModel implements IEquatable { if (this.AggregateFunction === AggregateFunction.Count) { return "count"; } - if (this.AggregateFunction === AggregateFunction.Avg) + if (this.AggregateFunction === AggregateFunction.Avg) { displayName = "avg(" + displayName + ")"; - else if (this.AggregateFunction === AggregateFunction.Max) + } + else if (this.AggregateFunction === AggregateFunction.Max) { displayName = "max(" + displayName + ")"; - else if (this.AggregateFunction === AggregateFunction.Min) + } + else if (this.AggregateFunction === AggregateFunction.Min) { displayName = "min(" + displayName + ")"; - else if (this.AggregateFunction === AggregateFunction.Sum) + } + else if (this.AggregateFunction === AggregateFunction.Sum) { displayName = "sum(" + displayName + ")"; - else if (this.AggregateFunction === AggregateFunction.SumE) + } + else if (this.AggregateFunction === AggregateFunction.SumE) { displayName = "sumE(" + displayName + ")"; + } return displayName; } diff --git a/src/client/northstar/core/attribute/CalculatedAttributeModel.ts b/src/client/northstar/core/attribute/CalculatedAttributeModel.ts index 0b8e0d12c..a197c1305 100644 --- a/src/client/northstar/core/attribute/CalculatedAttributeModel.ts +++ b/src/client/northstar/core/attribute/CalculatedAttributeModel.ts @@ -1,5 +1,5 @@ import { BackendAttributeModel, AttributeModel, CodeAttributeModel } from "./AttributeModel"; -import { DataType, VisualizationHint } from '../../model/idea/idea' +import { DataType, VisualizationHint } from '../../model/idea/idea'; export class CalculatedAttributeManager { public static AllCalculatedAttributes: Array = new Array(); diff --git a/src/client/northstar/core/brusher/IBaseBrushable.ts b/src/client/northstar/core/brusher/IBaseBrushable.ts index 99a36636f..c46db4d22 100644 --- a/src/client/northstar/core/brusher/IBaseBrushable.ts +++ b/src/client/northstar/core/brusher/IBaseBrushable.ts @@ -1,6 +1,6 @@ -import { PIXIPoint } from '../../utils/MathUtil' +import { PIXIPoint } from '../../utils/MathUtil'; import { IEquatable } from '../../utils/IEquatable'; -import { Document } from '../../../../fields/Document' +import { Document } from '../../../../fields/Document'; export interface IBaseBrushable extends IEquatable { BrusherModels: Array; diff --git a/src/client/northstar/core/brusher/IBaseBrusher.ts b/src/client/northstar/core/brusher/IBaseBrusher.ts index d7ae65464..d2de6ed62 100644 --- a/src/client/northstar/core/brusher/IBaseBrusher.ts +++ b/src/client/northstar/core/brusher/IBaseBrusher.ts @@ -1,4 +1,4 @@ -import { PIXIPoint } from '../../utils/MathUtil' +import { PIXIPoint } from '../../utils/MathUtil'; import { IEquatable } from '../../utils/IEquatable'; diff --git a/src/client/northstar/core/filter/FilterModel.ts b/src/client/northstar/core/filter/FilterModel.ts index 20fca77f5..e2ba3f652 100644 --- a/src/client/northstar/core/filter/FilterModel.ts +++ b/src/client/northstar/core/filter/FilterModel.ts @@ -15,7 +15,7 @@ export class FilterModel { public Equals(other: FilterModel): boolean { if (!Utils.EqualityHelper(this, other)) return false; - if (!this.isSame(this.ValueComparisons, (other as FilterModel).ValueComparisons)) return false; + if (!this.isSame(this.ValueComparisons, (other).ValueComparisons)) return false; return true; } diff --git a/src/client/northstar/core/filter/IBaseFilterConsumer.ts b/src/client/northstar/core/filter/IBaseFilterConsumer.ts index 93f66a154..59d7adf4c 100644 --- a/src/client/northstar/core/filter/IBaseFilterConsumer.ts +++ b/src/client/northstar/core/filter/IBaseFilterConsumer.ts @@ -1,5 +1,5 @@ -import { FilterOperand } from '../filter/FilterOperand' -import { IEquatable } from '../../utils/IEquatable' +import { FilterOperand } from '../filter/FilterOperand'; +import { IEquatable } from '../../utils/IEquatable'; import { Document } from "../../../../fields/Document"; export interface IBaseFilterConsumer extends IEquatable { diff --git a/src/client/northstar/core/filter/IBaseFilterProvider.ts b/src/client/northstar/core/filter/IBaseFilterProvider.ts index d082bfe12..fc3301b11 100644 --- a/src/client/northstar/core/filter/IBaseFilterProvider.ts +++ b/src/client/northstar/core/filter/IBaseFilterProvider.ts @@ -1,4 +1,4 @@ -import { FilterModel } from '../filter/FilterModel' +import { FilterModel } from '../filter/FilterModel'; export interface IBaseFilterProvider { FilterModels: Array; diff --git a/src/client/northstar/core/filter/ValueComparision.ts b/src/client/northstar/core/filter/ValueComparision.ts index 1a3e461f5..80b1242a9 100644 --- a/src/client/northstar/core/filter/ValueComparision.ts +++ b/src/client/northstar/core/filter/ValueComparision.ts @@ -1,5 +1,5 @@ -import { Predicate } from '../../model/idea/idea' -import { Utils } from '../../utils/Utils' +import { Predicate } from '../../model/idea/idea'; +import { Utils } from '../../utils/Utils'; import { AttributeModel } from '../attribute/AttributeModel'; export class ValueComparison { @@ -15,15 +15,19 @@ export class ValueComparison { } public Equals(other: Object): boolean { - if (!Utils.EqualityHelper(this, other)) + if (!Utils.EqualityHelper(this, other)) { return false; - if (this.Predicate !== (other as ValueComparison).Predicate) + } + if (this.Predicate !== (other as ValueComparison).Predicate) { return false; + } let isComplex = (typeof this.Value === "object"); - if (!isComplex && this.Value !== (other as ValueComparison).Value) + if (!isComplex && this.Value !== (other as ValueComparison).Value) { return false; - if (isComplex && !this.Value.Equals((other as ValueComparison).Value)) + } + if (isComplex && !this.Value.Equals((other as ValueComparison).Value)) { return false; + } return true; } diff --git a/src/client/northstar/dash-fields/HistogramField.ts b/src/client/northstar/dash-fields/HistogramField.ts index fa2a9c008..6abde4677 100644 --- a/src/client/northstar/dash-fields/HistogramField.ts +++ b/src/client/northstar/dash-fields/HistogramField.ts @@ -41,7 +41,7 @@ export class HistogramField extends BasicField { data: this.toString(), _id: this.Id - } + }; } @action diff --git a/src/client/northstar/dash-nodes/HistogramBinPrimitiveCollection.ts b/src/client/northstar/dash-nodes/HistogramBinPrimitiveCollection.ts index cdae90c8b..6291ec1fc 100644 --- a/src/client/northstar/dash-nodes/HistogramBinPrimitiveCollection.ts +++ b/src/client/northstar/dash-nodes/HistogramBinPrimitiveCollection.ts @@ -1,4 +1,4 @@ -import React = require("react") +import React = require("react"); import { AttributeTransformationModel } from "../../northstar/core/attribute/AttributeTransformationModel"; import { ChartType } from '../../northstar/model/binRanges/VisualBinRange'; import { AggregateFunction, Bin, Brush, DoubleValueAggregateResult, HistogramResult, MarginAggregateParameters, MarginAggregateResult } from "../../northstar/model/idea/idea"; @@ -29,7 +29,7 @@ export class HistogramBinPrimitiveCollection { private _histoBox: HistogramBox; private get histoOp() { return this._histoBox.HistoOp; } private get histoResult() { return this.histoOp.Result as HistogramResult; } - private get sizeConverter() { return this._histoBox.SizeConverter!; } + private get sizeConverter() { return this._histoBox.SizeConverter; } public BinPrimitives: Array = new Array(); public HitGeom: PIXIRectangle = PIXIRectangle.EMPTY; @@ -99,13 +99,14 @@ export class HistogramBinPrimitiveCollection { private createHeatmapBinPrimitives(bin: Bin, brush: Brush, brushFactorSum: number): number { let unNormalizedValue = this.getBinValue(2, bin, brush.brushIndex!); - if (unNormalizedValue === undefined) + if (unNormalizedValue === undefined) { return brushFactorSum; + } var normalizedValue = (unNormalizedValue - this._histoBox.ValueRange[0]) / (Math.abs((this._histoBox.ValueRange[1] - this._histoBox.ValueRange[0])) < HistogramBinPrimitiveCollection.TOLERANCE ? unNormalizedValue : this._histoBox.ValueRange[1] - this._histoBox.ValueRange[0]); - let allUnNormalizedValue = this.getBinValue(2, bin, ModelHelpers.AllBrushIndex(this.histoResult)) + let allUnNormalizedValue = this.getBinValue(2, bin, ModelHelpers.AllBrushIndex(this.histoResult)); // bcz: are these calls needed? let [xFrom, xTo] = this.sizeConverter.DataToScreenXAxisRange(this._histoBox.VisualBinRanges, 0, bin); @@ -145,8 +146,9 @@ export class HistogramBinPrimitiveCollection { let [xFrom, xTo] = this.sizeConverter.DataToScreenPointRange(0, bin, ModelHelpers.CreateAggregateKey(this.histoOp.Schema!.distinctAttributeParameters, this.histoOp.X, this.histoResult, brush.brushIndex!)); let [yFrom, yTo] = this.sizeConverter.DataToScreenPointRange(1, bin, ModelHelpers.CreateAggregateKey(this.histoOp.Schema!.distinctAttributeParameters, this.histoOp.Y, this.histoResult, brush.brushIndex!)); - if (xFrom !== undefined && yFrom !== undefined && xTo !== undefined && yTo !== undefined) + if (xFrom !== undefined && yFrom !== undefined && xTo !== undefined && yTo !== undefined) { this.createBinPrimitive(-1, brush, PIXIRectangle.EMPTY, 0, xFrom, xTo, yFrom, yTo, this.baseColorFromBrush(brush), 1, unNormalizedValue); + } } return 0; } diff --git a/src/client/northstar/dash-nodes/HistogramBox.tsx b/src/client/northstar/dash-nodes/HistogramBox.tsx index ec9413649..7df59ef07 100644 --- a/src/client/northstar/dash-nodes/HistogramBox.tsx +++ b/src/client/northstar/dash-nodes/HistogramBox.tsx @@ -1,4 +1,4 @@ -import React = require("react") +import React = require("react"); import { action, computed, observable, reaction, runInAction, trace } from "mobx"; import { observer } from "mobx-react"; import Measure from "react-measure"; @@ -25,7 +25,7 @@ import { StyleConstants } from "../utils/StyleContants"; @observer export class HistogramBox extends React.Component { - public static LayoutString(fieldStr: string = "DataKey") { return FieldView.LayoutString(HistogramBox, fieldStr) } + public static LayoutString(fieldStr: string = "DataKey") { return FieldView.LayoutString(HistogramBox, fieldStr); } private _dropXRef = React.createRef(); private _dropYRef = React.createRef(); private _dropXDisposer?: DragManager.DragDropDisposer; @@ -92,15 +92,15 @@ export class HistogramBox extends React.Component { } reaction(() => CurrentUserUtils.NorthstarDBCatalog, (catalog?: Catalog) => this.activateHistogramOperation(catalog), { fireImmediately: true }); reaction(() => [this.VisualBinRanges && this.VisualBinRanges.slice()], () => this.SizeConverter.SetVisualBinRanges(this.VisualBinRanges)); - reaction(() => [this.PanelHeight, this.PanelWidth], () => this.SizeConverter.SetIsSmall(this.PanelWidth < 40 && this.PanelHeight < 40)) + reaction(() => [this.PanelHeight, this.PanelWidth], () => this.SizeConverter.SetIsSmall(this.PanelWidth < 40 && this.PanelHeight < 40)); reaction(() => this.HistogramResult ? this.HistogramResult.binRanges : undefined, (binRanges: BinRange[] | undefined) => { if (binRanges) { this.VisualBinRanges.splice(0, this.VisualBinRanges.length, ...binRanges.map((br, ind) => - VisualBinRangeHelper.GetVisualBinRange(this.HistoOp.Schema!.distinctAttributeParameters, br, this.HistogramResult!, ind ? this.HistoOp.Y : this.HistoOp.X, this.ChartType))); + VisualBinRangeHelper.GetVisualBinRange(this.HistoOp.Schema!.distinctAttributeParameters, br, this.HistogramResult, ind ? this.HistoOp.Y : this.HistoOp.X, this.ChartType))); - let valueAggregateKey = ModelHelpers.CreateAggregateKey(this.HistoOp.Schema!.distinctAttributeParameters, this.HistoOp.V, this.HistogramResult!, ModelHelpers.AllBrushIndex(this.HistogramResult!)); - this.ValueRange = Object.values(this.HistogramResult!.bins!).reduce((prev, cur) => { + let valueAggregateKey = ModelHelpers.CreateAggregateKey(this.HistoOp.Schema!.distinctAttributeParameters, this.HistoOp.V, this.HistogramResult, ModelHelpers.AllBrushIndex(this.HistogramResult)); + this.ValueRange = Object.values(this.HistogramResult.bins!).reduce((prev, cur) => { let value = ModelHelpers.GetAggregateResult(cur, valueAggregateKey) as DoubleValueAggregateResult; return value && value.hasResult ? [Math.min(prev[0], value.result!), Math.max(prev[1], value.result!)] : prev; }, [Number.MAX_VALUE, Number.MIN_VALUE]); @@ -109,10 +109,12 @@ export class HistogramBox extends React.Component { } componentWillUnmount() { - if (this._dropXDisposer) + if (this._dropXDisposer) { this._dropXDisposer(); - if (this._dropYDisposer) + } + if (this._dropYDisposer) { this._dropYDisposer(); + } } activateHistogramOperation(catalog?: Catalog) { @@ -128,7 +130,7 @@ export class HistogramBox extends React.Component { this.HistoOp.BrushLinks.splice(0, this.HistoOp.BrushLinks.length, ...brushingDocs.map((brush, i) => { brush.SetNumber(KeyStore.BackgroundColor, StyleConstants.BRUSH_COLORS[i % StyleConstants.BRUSH_COLORS.length]); let brushed = brush.GetList(KeyStore.BrushingDocs, [] as Document[]); - return { l: brush, b: brushed[0].Id === proto.Id ? brushed[1] : brushed[0] } + return { l: brush, b: brushed[0].Id === proto.Id ? brushed[1] : brushed[0] }; })); }, { fireImmediately: true }); reaction(() => this.createOperationParamsCache, () => this.HistoOp.Update(), { fireImmediately: true }); @@ -146,7 +148,7 @@ export class HistogramBox extends React.Component { let roff = this.SizeConverter.RightOffset; let boff = this.SizeConverter.BottomOffset; return ( - runInAction(() => { this.PanelWidth = r.entry.width; this.PanelHeight = r.entry.height })}> + runInAction(() => { this.PanelWidth = r.entry.width; this.PanelHeight = r.entry.height; })}> {({ measureRef }) =>
@@ -168,7 +170,7 @@ export class HistogramBox extends React.Component {
} - ) + ); } } diff --git a/src/client/northstar/dash-nodes/HistogramBoxPrimitives.tsx b/src/client/northstar/dash-nodes/HistogramBoxPrimitives.tsx index a78703247..4c5bdb14b 100644 --- a/src/client/northstar/dash-nodes/HistogramBoxPrimitives.tsx +++ b/src/client/northstar/dash-nodes/HistogramBoxPrimitives.tsx @@ -1,4 +1,4 @@ -import React = require("react") +import React = require("react"); import { computed, observable, reaction, runInAction, trace, action } from "mobx"; import { observer } from "mobx-react"; import { Utils as DashUtils } from '../../../Utils'; @@ -28,17 +28,18 @@ export class HistogramBoxPrimitives extends React.Component this.drawRect(bp.Rect, bp.BarAxis, undefined, "border")); } @computed get barPrimitives() { let histoResult = this.props.HistoBox.HistogramResult; - if (!histoResult || !histoResult.bins || !this.props.HistoBox.VisualBinRanges.length) + if (!histoResult || !histoResult.bins || !this.props.HistoBox.VisualBinRanges.length) { return (null); + } let allBrushIndex = ModelHelpers.AllBrushIndex(histoResult); return Object.keys(histoResult.bins).reduce((prims: JSX.Element[], key: string) => { - let drawPrims = new HistogramBinPrimitiveCollection(histoResult!.bins![key], this.props.HistoBox); + let drawPrims = new HistogramBinPrimitiveCollection(histoResult.bins![key], this.props.HistoBox); let toggle = this.getSelectionToggle(drawPrims.BinPrimitives, allBrushIndex, - ModelHelpers.GetBinFilterModel(histoResult!.bins![key], allBrushIndex, histoResult!, this.histoOp.X, this.histoOp.Y)); + ModelHelpers.GetBinFilterModel(histoResult.bins![key], allBrushIndex, histoResult, this.histoOp.X, this.histoOp.Y)); drawPrims.BinPrimitives.filter(bp => bp.DataValue && bp.BrushIndex !== allBrushIndex).map(bp => prims.push(...[{ r: bp.Rect, c: bp.Color }, { r: bp.MarginRect, c: StyleConstants.MARGIN_BARS_COLOR }].map(pair => this.drawRect(pair.r, bp.BarAxis, pair.c, "bar", toggle)))); return prims; - }, [] as JSX.Element[]) + }, [] as JSX.Element[]); } componentDidMount() { @@ -47,8 +48,9 @@ export class HistogramBoxPrimitives extends React.Component bp.BrushIndex === allBrushIndex); - if (!rawAllBrushPrim) - return () => { } + if (!rawAllBrushPrim) { + return () => { }; + } let allBrushPrim = rawAllBrushPrim; return () => runInAction(() => { if (ArrayUtil.Contains(this.histoOp.FilterModels, filterModel)) { @@ -59,23 +61,25 @@ export class HistogramBoxPrimitives extends React.Component {labels.reduce((prims, binLabel, i) => { let r = this.props.HistoBox.SizeConverter.DataToScreenRange(binLabel.minValue!, binLabel.maxValue!, axis); prims.push(this.drawLine(r.xFrom, r.yFrom, axis === 0 ? 0 : r.xTo - r.xFrom, axis === 0 ? r.yTo - r.yFrom : 0)); - if (i === labels.length - 1) + if (i === labels.length - 1) { prims.push(this.drawLine(axis === 0 ? r.xTo : r.xFrom, axis === 0 ? r.yFrom : r.yTo, axis === 0 ? 0 : r.xTo - r.xFrom, axis === 0 ? r.yTo - r.yFrom : 0)); + } return prims; }, [] as JSX.Element[])} - + ; } drawLine(xFrom: number, yFrom: number, width: number, height: number) { @@ -89,9 +93,9 @@ export class HistogramBoxPrimitives extends React.Component + let trans1Xpercent = `${xFrom / this.renderDimension * 100}%`; + let trans1Ypercent = `${yFrom / this.renderDimension * 100}%`; + return ; } drawRect(r: PIXIRectangle, barAxis: number, color: number | undefined, classExt: string, tapHandler: () => void = () => { }) { if (r.height < 0) { @@ -102,11 +106,11 @@ export class HistogramBoxPrimitives extends React.Component { if (e.button === 0) tapHandler() }} + return ( { if (e.button === 0) tapHandler(); }} x={transXpercent} width={`${widthXpercent}`} y={transYpercent} height={`${heightYpercent}`} fill={color ? `${LABColor.RGBtoHexString(color)}` : "transparent"} />); } render() { @@ -118,6 +122,6 @@ export class HistogramBoxPrimitives extends React.Component -
+
; } } \ No newline at end of file diff --git a/src/client/northstar/dash-nodes/HistogramLabelPrimitives.tsx b/src/client/northstar/dash-nodes/HistogramLabelPrimitives.tsx index dd62e9146..5785fe838 100644 --- a/src/client/northstar/dash-nodes/HistogramLabelPrimitives.tsx +++ b/src/client/northstar/dash-nodes/HistogramLabelPrimitives.tsx @@ -1,4 +1,4 @@ -import React = require("react") +import React = require("react"); import { action, computed, reaction } from "mobx"; import { observer } from "mobx-react"; import { Utils as DashUtils } from '../../../Utils'; @@ -13,7 +13,7 @@ import { HistogramPrimitivesProps } from "./HistogramBoxPrimitives"; export class HistogramLabelPrimitives extends React.Component { componentDidMount() { reaction(() => [this.props.HistoBox.PanelWidth, this.props.HistoBox.SizeConverter.LeftOffset, this.props.HistoBox.VisualBinRanges.length], - (fields) => HistogramLabelPrimitives.computeLabelAngle(fields[0] as number, fields[1] as number, this.props.HistoBox), { fireImmediately: true }); + (fields) => HistogramLabelPrimitives.computeLabelAngle(fields[0], fields[1], this.props.HistoBox), { fireImmediately: true }); } @action @@ -32,8 +32,9 @@ export class HistogramLabelPrimitives extends React.ComponentFontStyles.AxisLabel.fontSize + 5))); sc.MaxLabelSizes[axis].coords[axis] + 5); @@ -52,8 +53,8 @@ export class HistogramLabelPrimitives extends React.Component @@ -61,7 +62,7 @@ export class HistogramLabelPrimitives extends React.Component
- ) + ); } return prims; }, [] as JSX.Element[]); @@ -73,7 +74,7 @@ export class HistogramLabelPrimitives extends React.Component {xaxislines} {yaxislines} -
+
; } } \ No newline at end of file diff --git a/src/client/northstar/manager/Gateway.ts b/src/client/northstar/manager/Gateway.ts index ba6fe2ad5..1c8d3fd73 100644 --- a/src/client/northstar/manager/Gateway.ts +++ b/src/client/northstar/manager/Gateway.ts @@ -1,4 +1,4 @@ -import { Catalog, OperationReference, Result, CompileResults } from "../model/idea/idea" +import { Catalog, OperationReference, Result, CompileResults } from "../model/idea/idea"; import { computed, observable, action } from "mobx"; export class Gateway { diff --git a/src/client/northstar/model/ModelExtensions.ts b/src/client/northstar/model/ModelExtensions.ts index e4bf77ed8..29f80d2d1 100644 --- a/src/client/northstar/model/ModelExtensions.ts +++ b/src/client/northstar/model/ModelExtensions.ts @@ -1,7 +1,7 @@ -import { AttributeParameters, Brush, MarginAggregateParameters, SingleDimensionAggregateParameters, Solution } from '../model/idea/idea' -import { Utils } from '../utils/Utils' +import { AttributeParameters, Brush, MarginAggregateParameters, SingleDimensionAggregateParameters, Solution } from '../model/idea/idea'; +import { Utils } from '../utils/Utils'; -import { FilterModel } from '../core/filter/FilterModel' +import { FilterModel } from '../core/filter/FilterModel'; (SingleDimensionAggregateParameters as any).prototype.Equals = function (other: Object) { if (!Utils.EqualityHelper(this, other)) return false; @@ -9,13 +9,13 @@ import { FilterModel } from '../core/filter/FilterModel' (other as SingleDimensionAggregateParameters).attributeParameters!)) return false; if (!((this as SingleDimensionAggregateParameters).attributeParameters! as any).Equals((other as SingleDimensionAggregateParameters).attributeParameters)) return false; return true; -} +}; { (AttributeParameters as any).prototype.Equals = function (other: AttributeParameters) { - return (this).constructor.name === (other).constructor.name && + return (this).constructor.name === (other).constructor.name && this.rawName === other.rawName; - } + }; } { @@ -23,7 +23,7 @@ import { FilterModel } from '../core/filter/FilterModel' if (!Utils.EqualityHelper(this, other)) return false; if ((this as Solution).solutionId !== (other as Solution).solutionId) return false; return true; - } + }; } { @@ -35,7 +35,7 @@ import { FilterModel } from '../core/filter/FilterModel' if ((this as MarginAggregateParameters).aggregateFunction !== (other as MarginAggregateParameters).aggregateFunction) return false; return true; - } + }; } { @@ -44,5 +44,5 @@ import { FilterModel } from '../core/filter/FilterModel' if ((this as Brush).brushEnum !== (other as Brush).brushEnum) return false; if ((this as Brush).brushIndex !== (other as Brush).brushIndex) return false; return true; - } + }; } \ No newline at end of file diff --git a/src/client/northstar/model/ModelHelpers.ts b/src/client/northstar/model/ModelHelpers.ts index 1a58e6180..ac807b41f 100644 --- a/src/client/northstar/model/ModelHelpers.ts +++ b/src/client/northstar/model/ModelHelpers.ts @@ -64,7 +64,7 @@ export class ModelHelpers { if (aggParams) { aggregateParameters.push(aggParams); - var margin = new MarginAggregateParameters() + var margin = new MarginAggregateParameters(); margin.aggregateFunction = agg.AggregateFunction; margin.attributeParameters = ModelHelpers.GetAttributeParameters(agg.AttributeModel); margin.distinctAttributeParameters = distinctAttributeParameters; @@ -106,7 +106,7 @@ export class ModelHelpers { { rawName: am.CodeName, visualizationHints: am.VisualizationHints, - id: (am as BackendAttributeModel).Id + id: (am).Id }); } else if (am instanceof CodeAttributeModel) { @@ -114,11 +114,11 @@ export class ModelHelpers { { rawName: am.CodeName, visualizationHints: am.VisualizationHints, - code: (am as CodeAttributeModel).Code + code: (am).Code }); } else { - throw new Exception() + throw new Exception(); } } diff --git a/src/client/northstar/model/binRanges/AlphabeticVisualBinRange.ts b/src/client/northstar/model/binRanges/AlphabeticVisualBinRange.ts index 995bf4e0b..120b034f2 100644 --- a/src/client/northstar/model/binRanges/AlphabeticVisualBinRange.ts +++ b/src/client/northstar/model/binRanges/AlphabeticVisualBinRange.ts @@ -1,5 +1,5 @@ -import { AlphabeticBinRange, BinLabel } from '../../model/idea/idea' -import { VisualBinRange } from './VisualBinRange' +import { AlphabeticBinRange, BinLabel } from '../../model/idea/idea'; +import { VisualBinRange } from './VisualBinRange'; export class AlphabeticVisualBinRange extends VisualBinRange { public DataBinRange: AlphabeticBinRange; diff --git a/src/client/northstar/model/binRanges/DateTimeVisualBinRange.ts b/src/client/northstar/model/binRanges/DateTimeVisualBinRange.ts index f5872aa4c..776e643cd 100644 --- a/src/client/northstar/model/binRanges/DateTimeVisualBinRange.ts +++ b/src/client/northstar/model/binRanges/DateTimeVisualBinRange.ts @@ -1,5 +1,5 @@ -import { DateTimeBinRange, DateTimeStep, DateTimeStepGranularity } from '../idea/idea' -import { VisualBinRange } from './VisualBinRange' +import { DateTimeBinRange, DateTimeStep, DateTimeStepGranularity } from '../idea/idea'; +import { VisualBinRange } from './VisualBinRange'; export class DateTimeVisualBinRange extends VisualBinRange { public DataBinRange: DateTimeBinRange; diff --git a/src/client/northstar/model/binRanges/NominalVisualBinRange.ts b/src/client/northstar/model/binRanges/NominalVisualBinRange.ts index 407ff3ea6..42509d797 100644 --- a/src/client/northstar/model/binRanges/NominalVisualBinRange.ts +++ b/src/client/northstar/model/binRanges/NominalVisualBinRange.ts @@ -1,5 +1,5 @@ -import { NominalBinRange, BinLabel } from '../../model/idea/idea' -import { VisualBinRange } from './VisualBinRange' +import { NominalBinRange, BinLabel } from '../../model/idea/idea'; +import { VisualBinRange } from './VisualBinRange'; export class NominalVisualBinRange extends VisualBinRange { public DataBinRange: NominalBinRange; diff --git a/src/client/northstar/model/binRanges/QuantitativeVisualBinRange.ts b/src/client/northstar/model/binRanges/QuantitativeVisualBinRange.ts index 80886416b..c579c8e5f 100644 --- a/src/client/northstar/model/binRanges/QuantitativeVisualBinRange.ts +++ b/src/client/northstar/model/binRanges/QuantitativeVisualBinRange.ts @@ -1,4 +1,4 @@ -import { QuantitativeBinRange } from '../idea/idea' +import { QuantitativeBinRange } from '../idea/idea'; import { VisualBinRange } from './VisualBinRange'; import { format } from "d3-format"; diff --git a/src/client/northstar/model/binRanges/VisualBinRange.ts b/src/client/northstar/model/binRanges/VisualBinRange.ts index a0766e494..449a22e91 100644 --- a/src/client/northstar/model/binRanges/VisualBinRange.ts +++ b/src/client/northstar/model/binRanges/VisualBinRange.ts @@ -1,4 +1,4 @@ -import { BinLabel } from '../../model/idea/idea' +import { BinLabel } from '../../model/idea/idea'; export abstract class VisualBinRange { diff --git a/src/client/northstar/model/binRanges/VisualBinRangeHelper.ts b/src/client/northstar/model/binRanges/VisualBinRangeHelper.ts index 63ee61909..9671e55f8 100644 --- a/src/client/northstar/model/binRanges/VisualBinRangeHelper.ts +++ b/src/client/northstar/model/binRanges/VisualBinRangeHelper.ts @@ -16,18 +16,18 @@ export class VisualBinRangeHelper { public static GetNonAggregateVisualBinRange(dataBinRange: BinRange): VisualBinRange { if (dataBinRange instanceof NominalBinRange) { - return new NominalVisualBinRange(dataBinRange as NominalBinRange); + return new NominalVisualBinRange(dataBinRange); } else if (dataBinRange instanceof QuantitativeBinRange) { - return new QuantitativeVisualBinRange(dataBinRange as QuantitativeBinRange); + return new QuantitativeVisualBinRange(dataBinRange); } else if (dataBinRange instanceof AlphabeticBinRange) { - return new AlphabeticVisualBinRange(dataBinRange as AlphabeticBinRange); + return new AlphabeticVisualBinRange(dataBinRange); } else if (dataBinRange instanceof DateTimeBinRange) { - return new DateTimeVisualBinRange(dataBinRange as DateTimeBinRange); + return new DateTimeVisualBinRange(dataBinRange); } - throw new Exception() + throw new Exception(); } public static GetVisualBinRange(distinctAttributeParameters: AttributeParameters | undefined, dataBinRange: BinRange, histoResult: HistogramResult, attr: AttributeTransformationModel, chartType: ChartType): VisualBinRange { @@ -51,13 +51,13 @@ export class VisualBinRangeHelper { } } } - }; + } let visualBinRange = QuantitativeVisualBinRange.Initialize(minValue, maxValue, 10, false); if (chartType === ChartType.HorizontalBar || chartType === ChartType.VerticalBar) { visualBinRange = QuantitativeVisualBinRange.Initialize(Math.min(0, minValue), - Math.max(0, (visualBinRange as QuantitativeVisualBinRange).DataBinRange.maxValue!), + Math.max(0, (visualBinRange).DataBinRange.maxValue!), SETTINGS_X_BINS, false); } else if (chartType === ChartType.SinglePoint) { diff --git a/src/client/northstar/operations/BaseOperation.ts b/src/client/northstar/operations/BaseOperation.ts index a14337763..c6d5f0a15 100644 --- a/src/client/northstar/operations/BaseOperation.ts +++ b/src/client/northstar/operations/BaseOperation.ts @@ -1,4 +1,4 @@ -import { FilterModel } from '../core/filter/FilterModel' +import { FilterModel } from '../core/filter/FilterModel'; import { ErrorResult, Exception, OperationParameters, OperationReference, Result, ResultParameters } from '../model/idea/idea'; import { action, computed, observable } from "mobx"; import { Gateway } from '../manager/Gateway'; @@ -62,8 +62,9 @@ export abstract class BaseOperation { } let operationParameters = this.CreateOperationParameters(); - if (this.Result) - this.Result.progress = 0; // bcz: used to set Result to undefined, but that causes the display to blink + if (this.Result) { + this.Result.progress = 0; + } // bcz: used to set Result to undefined, but that causes the display to blink this.Error = ""; let salt = Math.random().toString(); this.RequestSalt = salt; @@ -97,7 +98,7 @@ export abstract class BaseOperation { pollPromise.Start(async () => { let result = await Gateway.Instance.GetResult(resultParameters.toJSON()); if (result instanceof ErrorResult) { - throw new Error((result as ErrorResult).message); + throw new Error((result).message); } if (this.RequestSalt === pollPromise.RequestSalt) { if (result && (!this.Result || this.Result.progress !== result.progress)) { diff --git a/src/client/northstar/operations/HistogramOperation.ts b/src/client/northstar/operations/HistogramOperation.ts index a3ddc1c98..760106023 100644 --- a/src/client/northstar/operations/HistogramOperation.ts +++ b/src/client/northstar/operations/HistogramOperation.ts @@ -62,7 +62,7 @@ export class HistogramOperation extends BaseOperation implements IBaseFilterCons @computed public get FilterString(): string { let filterModels: FilterModel[] = []; - return FilterModel.GetFilterModelsRecursive(this, new Set(), filterModels, true) + return FilterModel.GetFilterModelsRecursive(this, new Set(), filterModels, true); } @computed diff --git a/src/client/northstar/utils/ArrayUtil.ts b/src/client/northstar/utils/ArrayUtil.ts index a52ca6d96..12b8d8e77 100644 --- a/src/client/northstar/utils/ArrayUtil.ts +++ b/src/client/northstar/utils/ArrayUtil.ts @@ -50,7 +50,7 @@ export class ArrayUtil { if (filtered.length > 0) { return filtered[0]; } - throw new Exception() + throw new Exception(); } public static FirstOrDefault(arr: T[], predicate: (x: any) => boolean): T | undefined { diff --git a/src/client/northstar/utils/Extensions.ts b/src/client/northstar/utils/Extensions.ts index 7c2b7fc9d..df14d4da0 100644 --- a/src/client/northstar/utils/Extensions.ts +++ b/src/client/northstar/utils/Extensions.ts @@ -6,7 +6,7 @@ interface String { String.prototype.ReplaceAll = function (toReplace: string, replacement: string): string { var target = this; return target.split(toReplace).join(replacement); -} +}; String.prototype.Truncate = function (length: number, replacement: string): String { var target = this; @@ -14,7 +14,7 @@ String.prototype.Truncate = function (length: number, replacement: string): Stri target = target.slice(0, Math.max(0, length - replacement.length)) + replacement; } return target; -} +}; interface Math { log10(val: number): number; @@ -22,7 +22,7 @@ interface Math { Math.log10 = function (val: number): number { return Math.log(val) / Math.LN10; -} +}; declare interface ObjectConstructor { assign(...objects: Object[]): Object; diff --git a/src/client/northstar/utils/GeometryUtil.ts b/src/client/northstar/utils/GeometryUtil.ts index 6d8acea20..d5220c479 100644 --- a/src/client/northstar/utils/GeometryUtil.ts +++ b/src/client/northstar/utils/GeometryUtil.ts @@ -8,15 +8,19 @@ export class GeometryUtil { let minY: number = Number.MAX_VALUE; let maxX: number = Number.MIN_VALUE; let maxY: number = Number.MIN_VALUE; - for (var i = 0; i < points.length; i++) { - if (points[i].x < minX) - minX = points[i].x; - if (points[i].y < minY) - minY = points[i].y; - if (points[i].x > maxX) - maxX = points[i].x; - if (points[i].y > maxY) - maxY = points[i].y; + for (const point of points) { + if (point.x < minX) { + minX = point.x; + } + if (point.y < minY) { + minY = point.y; + } + if (point.x > maxX) { + maxX = point.x; + } + if (point.y > maxY) { + maxY = point.y; + } } return new PIXIRectangle(minX * scale - padding, minY * scale - padding, (maxX - minX) * scale + padding * 2, (maxY - minY) * scale + padding * 2); } @@ -35,7 +39,7 @@ export class GeometryUtil { nx = (cos * (x - cx)) + (sin * (y - cy)) + cx, ny = (cos * (y - cy)) - (sin * (x - cx)) + cy; return new PIXIPoint(nx, ny); - } + }; return points.map(p => rotate(center.x, center.y, p.x, p.y, angle)); } @@ -54,9 +58,9 @@ export class GeometryUtil { return []; } - for (let v = 0; v < points.length; v++) { - x = points[v].x; - y = points[v].y; + for (const point of points) { + x = point.x; + y = point.y; sum_x += x; sum_y += y; sum_xx += x * x; @@ -68,8 +72,8 @@ export class GeometryUtil { let b = (sum_y / count) - (m * sum_x) / count; let result: PIXIPoint[] = new Array(); - for (let v = 0; v < points.length; v++) { - x = points[v].x; + for (const point of points) { + x = point.x; y = x * m + b; result.push(new PIXIPoint(x, y)); } diff --git a/src/client/northstar/utils/MathUtil.ts b/src/client/northstar/utils/MathUtil.ts index 7aa255096..4b44f40c3 100644 --- a/src/client/northstar/utils/MathUtil.ts +++ b/src/client/northstar/utils/MathUtil.ts @@ -16,11 +16,11 @@ export class PIXIRectangle { public x: number; public y: number; public width: number; - public height: number - public get left() { return this.x } + public height: number; + public get left() { return this.x; } public get right() { return this.x + this.width; } - public get top() { return this.y } - public get bottom() { return this.top + this.height } + public get top() { return this.y; } + public get bottom() { return this.top + this.height; } public static get EMPTY() { return new PIXIRectangle(0, 0, -1, -1); } constructor(x: number, y: number, width: number, height: number) { this.x = x; @@ -127,14 +127,18 @@ export class MathUtil { } public static PointInPIXIRectangle(p: PIXIPoint, rect: PIXIRectangle): boolean { - if (p.x < rect.left - this.EPSILON) + if (p.x < rect.left - this.EPSILON) { return false; - if (p.x > rect.right + this.EPSILON) + } + if (p.x > rect.right + this.EPSILON) { return false; - if (p.y < rect.top - this.EPSILON) + } + if (p.y < rect.top - this.EPSILON) { return false; - if (p.y > rect.bottom + this.EPSILON) + } + if (p.y > rect.bottom + this.EPSILON) { return false; + } return true; } @@ -145,23 +149,27 @@ export class MathUtil { var r3 = new PIXIPoint(rect.right, rect.bottom); var r4 = new PIXIPoint(rect.left, rect.bottom); var ret = new Array(); - var dist = this.Dist(lineFrom, lineTo) + var dist = this.Dist(lineFrom, lineTo); var inter = this.LineSegmentIntersection(lineFrom, lineTo, r1, r2); if (inter && this.PointInPIXIRectangle(inter, rect) && - this.Dist(inter, lineFrom) < dist && this.Dist(inter, lineTo) < dist) + this.Dist(inter, lineFrom) < dist && this.Dist(inter, lineTo) < dist) { ret.push(inter); + } inter = this.LineSegmentIntersection(lineFrom, lineTo, r2, r3); if (inter && this.PointInPIXIRectangle(inter, rect) && - this.Dist(inter, lineFrom) < dist && this.Dist(inter, lineTo) < dist) + this.Dist(inter, lineFrom) < dist && this.Dist(inter, lineTo) < dist) { ret.push(inter); + } inter = this.LineSegmentIntersection(lineFrom, lineTo, r3, r4); if (inter && this.PointInPIXIRectangle(inter, rect) && - this.Dist(inter, lineFrom) < dist && this.Dist(inter, lineTo) < dist) + this.Dist(inter, lineFrom) < dist && this.Dist(inter, lineTo) < dist) { ret.push(inter); + } inter = this.LineSegmentIntersection(lineFrom, lineTo, r4, r1); if (inter && this.PointInPIXIRectangle(inter, rect) && - this.Dist(inter, lineFrom) < dist && this.Dist(inter, lineTo) < dist) + this.Dist(inter, lineFrom) < dist && this.Dist(inter, lineTo) < dist) { ret.push(inter); + } return ret; } @@ -178,7 +186,7 @@ export class MathUtil { } public static Dot(p1: PIXIPoint, p2: PIXIPoint): number { - return p1.x * p2.x + p1.y * p2.y + return p1.x * p2.x + p1.y * p2.y; } public static Normalize(p1: PIXIPoint) { @@ -193,7 +201,7 @@ export class MathUtil { public static DistSquared(p1: PIXIPoint, p2: PIXIPoint): number { const a = p1.x - p2.x; const b = p1.y - p2.y; - return (a * a + b * b) + return (a * a + b * b); } public static RectIntersectsRect(r1: PIXIRectangle, r2: PIXIRectangle): boolean { diff --git a/src/client/northstar/utils/SizeConverter.ts b/src/client/northstar/utils/SizeConverter.ts index b5c4a16ab..a52890ed9 100644 --- a/src/client/northstar/utils/SizeConverter.ts +++ b/src/client/northstar/utils/SizeConverter.ts @@ -32,8 +32,8 @@ export class SizeConverter { this.Initialized++; var xLabels = visualBinRanges[0].GetLabels(); var yLabels = visualBinRanges[1].GetLabels(); - var xLabelStrings = xLabels.map(l => l.label!).sort(function (a, b) { return b.length - a.length }); - var yLabelStrings = yLabels.map(l => l.label!).sort(function (a, b) { return b.length - a.length }); + var xLabelStrings = xLabels.map(l => l.label!).sort(function (a, b) { return b.length - a.length; }); + var yLabelStrings = yLabels.map(l => l.label!).sort(function (a, b) { return b.length - a.length; }); var metricsX = { width: 75 }; // RenderUtils.MeasureText(FontStyles.Default.fontFamily.toString(), 12, // FontStyles.AxisLabel.fontSize as number, //xLabelStrings[0]!.slice(0, 20)) // StyleConstants.MAX_CHAR_FOR_HISTOGRAM_LABELS)); @@ -62,19 +62,20 @@ export class SizeConverter { public DataToScreenPointRange(axis: number, bin: Bin, aggregateKey: AggregateKey) { var value = ModelHelpers.GetAggregateResult(bin, aggregateKey) as DoubleValueAggregateResult; - if (value && value.hasResult) + if (value && value.hasResult) { return [this.DataToScreenCoord(value.result!, axis) - 5, this.DataToScreenCoord(value.result!, axis) + 5]; + } return [undefined, undefined]; } public DataToScreenXAxisRange(visualBinRanges: VisualBinRange[], index: number, bin: Bin) { var value = visualBinRanges[0].GetValueFromIndex(bin.binIndex!.indices![index]); - return [this.DataToScreenX(value), this.DataToScreenX(visualBinRanges[index].AddStep(value))] + return [this.DataToScreenX(value), this.DataToScreenX(visualBinRanges[index].AddStep(value))]; } public DataToScreenYAxisRange(visualBinRanges: VisualBinRange[], index: number, bin: Bin) { var value = visualBinRanges[1].GetValueFromIndex(bin.binIndex!.indices![index]); - return [this.DataToScreenY(value), this.DataToScreenY(visualBinRanges[index].AddStep(value))] + return [this.DataToScreenY(value), this.DataToScreenY(visualBinRanges[index].AddStep(value))]; } public DataToScreenX(x: number): number { @@ -85,8 +86,9 @@ export class SizeConverter { return flip ? (this.RenderDimension) - retY : retY; } public DataToScreenCoord(v: number, axis: number) { - if (axis === 0) + if (axis === 0) { return this.DataToScreenX(v); + } return this.DataToScreenY(v); } public DataToScreenRange(minVal: number, maxVal: number, axis: number) { @@ -94,6 +96,6 @@ export class SizeConverter { let xTo = this.DataToScreenX(axis === 0 ? maxVal : this.DataMaxs[0]); let yFrom = this.DataToScreenY(axis === 1 ? minVal : this.DataMins[1]); let yTo = this.DataToScreenY(axis === 1 ? maxVal : this.DataMaxs[1]); - return { xFrom, yFrom, xTo, yTo } + return { xFrom, yFrom, xTo, yTo }; } } \ No newline at end of file diff --git a/src/client/northstar/utils/StyleContants.ts b/src/client/northstar/utils/StyleContants.ts index ac8617e3b..e9b6e0297 100644 --- a/src/client/northstar/utils/StyleContants.ts +++ b/src/client/northstar/utils/StyleContants.ts @@ -11,7 +11,7 @@ export class StyleConstants { static OPERATOR_MENU_LARGE: number = 35; static OPERATOR_MENU_SMALL: number = 25; - static BRUSH_PALETTE: number[] = [0x42b43c, 0xfa217f, 0x6a9c75, 0xfb5de7, 0x25b8ea, 0x9b5bc4, 0xda9f63, 0xe23209, 0xfb899b, 0x94a6fd] + static BRUSH_PALETTE: number[] = [0x42b43c, 0xfa217f, 0x6a9c75, 0xfb5de7, 0x25b8ea, 0x9b5bc4, 0xda9f63, 0xe23209, 0xfb899b, 0x94a6fd]; static GAP: number = 3; static BACKGROUND_COLOR: number = 0xF3F3F3; diff --git a/src/client/northstar/utils/Utils.ts b/src/client/northstar/utils/Utils.ts index c96b4cbd9..d071dec62 100644 --- a/src/client/northstar/utils/Utils.ts +++ b/src/client/northstar/utils/Utils.ts @@ -1,7 +1,7 @@ -import { IBaseBrushable } from '../core/brusher/IBaseBrushable' -import { IBaseFilterConsumer } from '../core/filter/IBaseFilterConsumer' -import { IBaseFilterProvider } from '../core/filter/IBaseFilterProvider' -import { AggregateFunction } from '../model/idea/idea' +import { IBaseBrushable } from '../core/brusher/IBaseBrushable'; +import { IBaseFilterConsumer } from '../core/filter/IBaseFilterConsumer'; +import { IBaseFilterProvider } from '../core/filter/IBaseFilterProvider'; +import { AggregateFunction } from '../model/idea/idea'; export class Utils { diff --git a/src/client/util/DocumentManager.ts b/src/client/util/DocumentManager.ts index fb489edb6..f38b8ca75 100644 --- a/src/client/util/DocumentManager.ts +++ b/src/client/util/DocumentManager.ts @@ -1,7 +1,7 @@ -import React = require('react') +import React = require('react'); import { observer } from 'mobx-react'; import { observable, action, computed } from 'mobx'; -import { Document } from "../../fields/Document" +import { Document } from "../../fields/Document"; import { DocumentView } from '../views/nodes/DocumentView'; import { KeyStore } from '../../fields/KeyStore'; import { FieldWaiting } from '../../fields/Field'; @@ -50,7 +50,7 @@ export class DocumentManager { if (docSrc && docSrc !== FieldWaiting && Object.is(docSrc, toFind)) { toReturn = view; } - }) + }); return (toReturn); } @@ -71,7 +71,7 @@ export class DocumentManager { toReturn.push(view); } } - }) + }); return (toReturn); } @@ -86,8 +86,8 @@ export class DocumentManager { let linkToDoc = link.GetT(KeyStore.LinkedToDocs, Document); if (linkToDoc && linkToDoc !== FieldWaiting) { DocumentManager.Instance.getDocumentViews(linkToDoc).map(docView1 => { - pairs.push({ a: dv, b: docView1, l: link }) - }) + pairs.push({ a: dv, b: docView1, l: link }); + }); } } return pairs; diff --git a/src/client/util/DragManager.ts b/src/client/util/DragManager.ts index f95b2c29d..4849ae9f7 100644 --- a/src/client/util/DragManager.ts +++ b/src/client/util/DragManager.ts @@ -103,7 +103,7 @@ export namespace DragManager { element.addEventListener("dashOnDrop", handler); return () => { element.removeEventListener("dashOnDrop", handler); - delete element.dataset.canDrop + delete element.dataset.canDrop; }; } @@ -216,8 +216,9 @@ export namespace DragManager { const moveHandler = (e: PointerEvent) => { e.stopPropagation(); e.preventDefault(); - if (dragData instanceof DocumentDragData) + if (dragData instanceof DocumentDragData) { dragData.aliasOnDrop = e.ctrlKey || e.altKey; + } if (e.shiftKey) { abortDrag(); CollectionDockingView.Instance.StartOtherDrag(docs, { diff --git a/src/client/util/RichTextSchema.tsx b/src/client/util/RichTextSchema.tsx index 2a3c1da6e..92944bec0 100644 --- a/src/client/util/RichTextSchema.tsx +++ b/src/client/util/RichTextSchema.tsx @@ -1,13 +1,13 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { Schema, NodeSpec, MarkSpec, DOMOutputSpecArray, NodeType } from "prosemirror-model" -import { joinUp, lift, setBlockType, toggleMark, wrapIn } from 'prosemirror-commands' -import { redo, undo } from 'prosemirror-history' -import { orderedList, bulletList, listItem, } from 'prosemirror-schema-list' +import { Schema, NodeSpec, MarkSpec, DOMOutputSpecArray, NodeType } from "prosemirror-model"; +import { joinUp, lift, setBlockType, toggleMark, wrapIn } from 'prosemirror-commands'; +import { redo, undo } from 'prosemirror-history'; +import { orderedList, bulletList, listItem, } from 'prosemirror-schema-list'; import { EditorState, Transaction, NodeSelection, } from "prosemirror-state"; import { EditorView, } from "prosemirror-view"; const pDOM: DOMOutputSpecArray = ["p", 0], blockquoteDOM: DOMOutputSpecArray = ["blockquote", 0], hrDOM: DOMOutputSpecArray = ["hr"], - preDOM: DOMOutputSpecArray = ["pre", ["code", 0]], brDOM: DOMOutputSpecArray = ["br"], ulDOM: DOMOutputSpecArray = ["ul", 0] + preDOM: DOMOutputSpecArray = ["pre", ["code", 0]], brDOM: DOMOutputSpecArray = ["br"], ulDOM: DOMOutputSpecArray = ["ul", 0]; // :: Object @@ -24,7 +24,7 @@ export const nodes: { [index: string]: NodeSpec } = { content: "inline*", group: "block", parseDOM: [{ tag: "p" }], - toDOM() { return pDOM } + toDOM() { return pDOM; } }, // :: NodeSpec A blockquote (`
`) wrapping one or more blocks. @@ -33,14 +33,14 @@ export const nodes: { [index: string]: NodeSpec } = { group: "block", defining: true, parseDOM: [{ tag: "blockquote" }], - toDOM() { return blockquoteDOM } + toDOM() { return blockquoteDOM; } }, // :: NodeSpec A horizontal rule (`
`). horizontal_rule: { group: "block", parseDOM: [{ tag: "hr" }], - toDOM() { return hrDOM } + toDOM() { return hrDOM; } }, // :: NodeSpec A heading textblock, with a `level` attribute that @@ -57,7 +57,7 @@ export const nodes: { [index: string]: NodeSpec } = { { tag: "h4", attrs: { level: 4 } }, { tag: "h5", attrs: { level: 5 } }, { tag: "h6", attrs: { level: 6 } }], - toDOM(node: any) { return ["h" + node.attrs.level, 0] } + toDOM(node: any) { return ["h" + node.attrs.level, 0]; } }, // :: NodeSpec A code listing. Disallows marks or non-text inline @@ -70,7 +70,7 @@ export const nodes: { [index: string]: NodeSpec } = { code: true, defining: true, parseDOM: [{ tag: "pre", preserveWhitespace: "full" }], - toDOM() { return preDOM } + toDOM() { return preDOM; } }, // :: NodeSpec The text node. @@ -96,10 +96,10 @@ export const nodes: { [index: string]: NodeSpec } = { src: dom.getAttribute("src"), title: dom.getAttribute("title"), alt: dom.getAttribute("alt") - } + }; } }], - toDOM(node: any) { return ["img", node.attrs] } + toDOM(node: any) { return ["img", node.attrs]; } }, // :: NodeSpec A hard line break, represented in the DOM as `
`. @@ -108,7 +108,7 @@ export const nodes: { [index: string]: NodeSpec } = { group: "inline", selectable: false, parseDOM: [{ tag: "br" }], - toDOM() { return brDOM } + toDOM() { return brDOM; } }, ordered_list: { @@ -136,7 +136,7 @@ export const nodes: { [index: string]: NodeSpec } = { ...listItem, content: 'paragraph block*' } -} +}; const emDOM: DOMOutputSpecArray = ["em", 0]; const strongDOM: DOMOutputSpecArray = ["strong", 0]; @@ -156,17 +156,17 @@ export const marks: { [index: string]: MarkSpec } = { inclusive: false, parseDOM: [{ tag: "a[href]", getAttrs(dom: any) { - return { href: dom.getAttribute("href"), title: dom.getAttribute("title") } + return { href: dom.getAttribute("href"), title: dom.getAttribute("title") }; } }], - toDOM(node: any) { return ["a", node.attrs, 0] } + toDOM(node: any) { return ["a", node.attrs, 0]; } }, // :: MarkSpec An emphasis mark. Rendered as an `` element. // Has parse rules that also match `` and `font-style: italic`. em: { parseDOM: [{ tag: "i" }, { tag: "em" }, { style: "font-style=italic" }], - toDOM() { return emDOM } + toDOM() { return emDOM; } }, // :: MarkSpec A strong mark. Rendered as ``, parse rules @@ -175,7 +175,7 @@ export const marks: { [index: string]: MarkSpec } = { parseDOM: [{ tag: "strong" }, { tag: "b" }, { style: "font-weight" }], - toDOM() { return strongDOM } + toDOM() { return strongDOM; } }, underline: { @@ -221,9 +221,9 @@ export const marks: { [index: string]: MarkSpec } = { // :: MarkSpec Code font mark. Represented as a `` element. code: { parseDOM: [{ tag: "code" }], - toDOM() { return codeDOM } + toDOM() { return codeDOM; } } -} +}; // :: Schema // This schema rougly corresponds to the document schema used by @@ -233,4 +233,4 @@ export const marks: { [index: string]: MarkSpec } = { // // To reuse elements from this schema, extend or read from its // `spec.nodes` and `spec.marks` [properties](#model.Schema.spec). -export const schema = new Schema({ nodes, marks }) \ No newline at end of file +export const schema = new Schema({ nodes, marks }); \ No newline at end of file diff --git a/src/client/util/Scripting.ts b/src/client/util/Scripting.ts index bf9b8266f..468484928 100644 --- a/src/client/util/Scripting.ts +++ b/src/client/util/Scripting.ts @@ -14,7 +14,7 @@ import { ListField } from "../../fields/ListField"; // import * as typescriptes5 from '!!raw-loader!../../../node_modules/typescript/lib/lib.es5.d.ts' // @ts-ignore -import * as typescriptlib from '!!raw-loader!./type_decls.d' +import * as typescriptlib from '!!raw-loader!./type_decls.d'; import { Documents } from "../documents/Documents"; import { Key } from "../../fields/Key"; @@ -50,7 +50,7 @@ function Run(script: string | undefined, customParams: string[], diagnostics: an let fieldTypes = [Document, NumberField, TextField, ImageField, RichTextField, ListField, Key]; let paramNames = ["KeyStore", "Documents", ...fieldTypes.map(fn => fn.name)]; - let params: any[] = [KeyStore, Documents, ...fieldTypes] + let params: any[] = [KeyStore, Documents, ...fieldTypes]; let compiledFunction = new Function(...paramNames, `return ${script}`); let run = (args: { [name: string]: any } = {}): ScriptResult => { let argsArray: any[] = []; @@ -67,7 +67,7 @@ function Run(script: string | undefined, customParams: string[], diagnostics: an } catch (error) { return { success: false, error }; } - } + }; return { compiled: true, run }; } @@ -90,14 +90,14 @@ class ScriptingCompilerHost { } // getDefaultLibFileName(options: ts.CompilerOptions): string { getDefaultLibFileName(options: any): string { - return 'node_modules/typescript/lib/lib.d.ts' // No idea what this means... + return 'node_modules/typescript/lib/lib.d.ts'; // No idea what this means... } writeFile(fileName: string, content: string) { const file = this.files.find(file => file.fileName === fileName); if (file) { file.content = content; } else { - this.files.push({ fileName, content }) + this.files.push({ fileName, content }); } } getCurrentDirectory(): string { diff --git a/src/client/util/ScrollBox.tsx b/src/client/util/ScrollBox.tsx index b6b088170..a209874a3 100644 --- a/src/client/util/ScrollBox.tsx +++ b/src/client/util/ScrollBox.tsx @@ -1,4 +1,4 @@ -import React = require("react") +import React = require("react"); export class ScrollBox extends React.Component { onWheel = (e: React.WheelEvent) => { @@ -16,6 +16,6 @@ export class ScrollBox extends React.Component { }} onWheel={this.onWheel}> {this.props.children}
- ) + ); } } \ No newline at end of file diff --git a/src/client/util/SelectionManager.ts b/src/client/util/SelectionManager.ts index 1bb15c86a..5ddaafc72 100644 --- a/src/client/util/SelectionManager.ts +++ b/src/client/util/SelectionManager.ts @@ -23,7 +23,7 @@ export namespace SelectionManager { @action DeselectAll(): void { - manager.SelectedDocuments.map(dv => dv.props.onActiveChanged(false)) + manager.SelectedDocuments.map(dv => dv.props.onActiveChanged(false)); manager.SelectedDocuments = []; } } @@ -46,7 +46,7 @@ export namespace SelectionManager { } } - manager.DeselectAll() + manager.DeselectAll(); if (found) manager.SelectDoc(found, false); Main.Instance.SetTextDoc(undefined, undefined); } diff --git a/src/client/util/TooltipTextMenu.tsx b/src/client/util/TooltipTextMenu.tsx index 913472aa0..bd5753093 100644 --- a/src/client/util/TooltipTextMenu.tsx +++ b/src/client/util/TooltipTextMenu.tsx @@ -5,12 +5,12 @@ import { keymap } from "prosemirror-keymap"; import { EditorState, Transaction, NodeSelection } from "prosemirror-state"; import { EditorView } from "prosemirror-view"; import { schema } from "./RichTextSchema"; -import { Schema, NodeType } from "prosemirror-model" -import React = require("react") +import { Schema, NodeType } from "prosemirror-model"; +import React = require("react"); import "./TooltipTextMenu.scss"; const { toggleMark, setBlockType, wrapIn } = require("prosemirror-commands"); -import { library } from '@fortawesome/fontawesome-svg-core' -import { wrapInList, bulletList } from 'prosemirror-schema-list' +import { library } from '@fortawesome/fontawesome-svg-core'; +import { wrapInList, bulletList } from 'prosemirror-schema-list'; import { faListUl } from '@fortawesome/free-solid-svg-icons'; @@ -39,7 +39,7 @@ export class TooltipTextMenu { { command: toggleMark(schema.marks.subscript), dom: this.icon("s", "subscript") }, //this doesn't work currently - look into notion of active block { command: wrapInList(schema.nodes.bullet_list), dom: this.icon(":", "bullets") }, - ] + ]; items.forEach(({ dom }) => this.tooltip.appendChild(dom)); //pointer down handler to activate button effects @@ -52,8 +52,8 @@ export class TooltipTextMenu { //uncomment this if we want the bullet button to disappear if current selection is bulleted // dom.style.display = active ? "" : "none" } - }) - }) + }); + }); this.update(view, undefined); } @@ -99,32 +99,32 @@ export class TooltipTextMenu { return { command: setBlockType(schema.nodes.heading, { level }), dom: this.icon("H" + level, "heading") - } + }; } //updates the tooltip menu when the selection changes update(view: EditorView, lastState: EditorState | undefined) { - let state = view.state + let state = view.state; // Don't do anything if the document/selection didn't change if (lastState && lastState.doc.eq(state.doc) && - lastState.selection.eq(state.selection)) return + lastState.selection.eq(state.selection)) return; // Hide the tooltip if the selection is empty if (state.selection.empty) { - this.tooltip.style.display = "none" - return + this.tooltip.style.display = "none"; + return; } // Otherwise, reposition it and update its content - this.tooltip.style.display = "" - let { from, to } = state.selection - let start = view.coordsAtPos(from), end = view.coordsAtPos(to) + this.tooltip.style.display = ""; + let { from, to } = state.selection; + let start = view.coordsAtPos(from), end = view.coordsAtPos(to); // The box in which the tooltip is positioned, to use as base - let box = this.tooltip.offsetParent!.getBoundingClientRect() + let box = this.tooltip.offsetParent!.getBoundingClientRect(); // Find a center-ish x position from the selection endpoints (when // crossing lines, end may be more to the left) - let left = Math.max((start.left + end.left) / 2, start.left + 3) - this.tooltip.style.left = (left - box.left) + "px" + let left = Math.max((start.left + end.left) / 2, start.left + 3); + this.tooltip.style.left = (left - box.left) + "px"; let width = Math.abs(start.left - end.left) / 2; let mid = Math.min(start.left, end.left) + width; @@ -133,5 +133,5 @@ export class TooltipTextMenu { this.tooltip.style.bottom = (box.bottom - start.top) + "px"; } - destroy() { this.tooltip.remove() } + destroy() { this.tooltip.remove(); } } \ No newline at end of file diff --git a/src/client/util/Transform.ts b/src/client/util/Transform.ts index ed4282874..e9170ec36 100644 --- a/src/client/util/Transform.ts +++ b/src/client/util/Transform.ts @@ -62,19 +62,19 @@ export class Transform { return this; } - translated = (x: number, y: number): Transform => this.copy().translate(x, y) + translated = (x: number, y: number): Transform => this.copy().translate(x, y); - preTranslated = (x: number, y: number): Transform => this.copy().preTranslate(x, y) + preTranslated = (x: number, y: number): Transform => this.copy().preTranslate(x, y); - scaled = (scale: number): Transform => this.copy().scale(scale) + scaled = (scale: number): Transform => this.copy().scale(scale); - scaledAbout = (scale: number, x: number, y: number): Transform => this.copy().scaleAbout(scale, x, y) + scaledAbout = (scale: number, x: number, y: number): Transform => this.copy().scaleAbout(scale, x, y); - preScaled = (scale: number): Transform => this.copy().preScale(scale) + preScaled = (scale: number): Transform => this.copy().preScale(scale); - transformed = (transform: Transform): Transform => this.copy().transform(transform) + transformed = (transform: Transform): Transform => this.copy().transform(transform); - preTransformed = (transform: Transform): Transform => this.copy().preTransform(transform) + preTransformed = (transform: Transform): Transform => this.copy().preTransform(transform); transformPoint = (x: number, y: number): [number, number] => { x *= this._scale; @@ -84,7 +84,7 @@ export class Transform { return [x, y]; } - transformDirection = (x: number, y: number): [number, number] => [x * this._scale, y * this._scale] + transformDirection = (x: number, y: number): [number, number] => [x * this._scale, y * this._scale]; transformBounds(x: number, y: number, width: number, height: number): { x: number, y: number, width: number, height: number } { [x, y] = this.transformPoint(x, y); @@ -92,8 +92,8 @@ export class Transform { return { x, y, width, height }; } - inverse = () => new Transform(-this._translateX / this._scale, -this._translateY / this._scale, 1 / this._scale) + inverse = () => new Transform(-this._translateX / this._scale, -this._translateY / this._scale, 1 / this._scale); - copy = () => new Transform(this._translateX, this._translateY, this._scale) + copy = () => new Transform(this._translateX, this._translateY, this._scale); } \ No newline at end of file diff --git a/src/client/util/TypedEvent.ts b/src/client/util/TypedEvent.ts index 1b251da25..532ba78eb 100644 --- a/src/client/util/TypedEvent.ts +++ b/src/client/util/TypedEvent.ts @@ -36,5 +36,5 @@ export class TypedEvent { this.listenersOncer = []; } - pipe = (te: TypedEvent): Disposable => this.on((e) => te.emit(e)) + pipe = (te: TypedEvent): Disposable => this.on((e) => te.emit(e)); } \ No newline at end of file diff --git a/src/client/util/UndoManager.ts b/src/client/util/UndoManager.ts index b4ea4acae..27aed4bac 100644 --- a/src/client/util/UndoManager.ts +++ b/src/client/util/UndoManager.ts @@ -1,5 +1,5 @@ import { observable, action } from "mobx"; -import 'source-map-support/register' +import 'source-map-support/register'; import { Without } from "../../Utils"; import { string } from "prop-types"; @@ -31,9 +31,9 @@ function propertyDecorator(target: any, key: string | symbol) { batch.end(); } } - }) + }); } - }) + }); } export function undoBatch(target: any, key: string | symbol, descriptor?: TypedPropertyDescriptor): any; @@ -43,11 +43,11 @@ export function undoBatch(target: any, key?: string | symbol, descriptor?: Typed return function () { let batch = UndoManager.StartBatch(""); try { - return target.apply(undefined, arguments) + return target.apply(undefined, arguments); } finally { batch.end(); } - } + }; } if (!descriptor) { propertyDecorator(target, key); @@ -58,11 +58,11 @@ export function undoBatch(target: any, key?: string | symbol, descriptor?: Typed descriptor.value = function (...args: any[]) { let batch = UndoManager.StartBatch(getBatchName(target, key)); try { - return oldFunction.apply(this, args) + return oldFunction.apply(this, args); } finally { batch.end(); } - } + }; return descriptor; } @@ -117,8 +117,8 @@ export namespace UndoManager { EndBatch(cancel); } - end = () => { this.dispose(false); } - cancel = () => { this.dispose(true); } + end = () => { this.dispose(false); }; + cancel = () => { this.dispose(true); }; } export function StartBatch(batchName: string): Batch { @@ -138,7 +138,7 @@ export namespace UndoManager { redoStack.length = 0; currentBatch = undefined; } - }) + }); export function RunInBatch(fn: () => void, batchName: string) { let batch = StartBatch(batchName); @@ -166,7 +166,7 @@ export namespace UndoManager { undoing = false; redoStack.push(commands); - }) + }); export const Redo = action(() => { if (redoStack.length === 0) { @@ -185,6 +185,6 @@ export namespace UndoManager { undoing = false; undoStack.push(commands); - }) + }); } \ No newline at end of file diff --git a/src/client/views/ContextMenu.tsx b/src/client/views/ContextMenu.tsx index cfa8ea7b7..615a928ad 100644 --- a/src/client/views/ContextMenu.tsx +++ b/src/client/views/ContextMenu.tsx @@ -2,11 +2,11 @@ import React = require("react"); import { ContextMenuItem, ContextMenuProps } from "./ContextMenuItem"; import { observable, action } from "mobx"; import { observer } from "mobx-react"; -import "./ContextMenu.scss" +import "./ContextMenu.scss"; @observer export class ContextMenu extends React.Component { - static Instance: ContextMenu + static Instance: ContextMenu; @observable private _items: Array = [{ description: "test", event: (e: React.MouseEvent) => e.preventDefault() }]; @observable private _pageX: number = 0; @@ -22,15 +22,15 @@ export class ContextMenu extends React.Component { constructor(props: Readonly<{}>) { super(props); - this.ref = React.createRef() + this.ref = React.createRef(); ContextMenu.Instance = this; } @action clearItems() { - this._items = [] - this._display = "none" + this._items = []; + this._display = "none"; } @action @@ -56,7 +56,7 @@ export class ContextMenu extends React.Component { this._searchString = ""; - this._display = "flex" + this._display = "flex"; } intersects = (x: number, y: number): boolean => { @@ -86,7 +86,7 @@ export class ContextMenu extends React.Component { {this._items.filter(prop => prop.description.toLowerCase().indexOf(this._searchString.toLowerCase()) !== -1). map(prop => )}
- ) + ); } @action diff --git a/src/client/views/ContextMenuItem.tsx b/src/client/views/ContextMenuItem.tsx index 4801c1555..70813f0dd 100644 --- a/src/client/views/ContextMenuItem.tsx +++ b/src/client/views/ContextMenuItem.tsx @@ -11,7 +11,7 @@ export interface SubmenuProps { } export interface ContextMenuItemProps { - type: ContextMenuProps | SubmenuProps + type: ContextMenuProps | SubmenuProps; } export class ContextMenuItem extends React.Component { @@ -20,6 +20,6 @@ export class ContextMenuItem extends React.Component {
{this.props.description}
- ) + ); } } \ No newline at end of file diff --git a/src/client/views/DocumentDecorations.tsx b/src/client/views/DocumentDecorations.tsx index 285d145a2..b29fb6a2b 100644 --- a/src/client/views/DocumentDecorations.tsx +++ b/src/client/views/DocumentDecorations.tsx @@ -21,8 +21,8 @@ export const Flyout = higflyout.default; @observer export class DocumentDecorations extends React.Component<{}, { value: string }> { - static Instance: DocumentDecorations - private _resizer = "" + static Instance: DocumentDecorations; + private _resizer = ""; private _isPointerDown = false; private keyinput: React.RefObject; private _documents: DocumentView[] = SelectionManager.SelectedDocuments(); @@ -40,8 +40,8 @@ export class DocumentDecorations extends React.Component<{}, { value: string }> constructor(props: Readonly<{}>) { - super(props) - DocumentDecorations.Instance = this + super(props); + DocumentDecorations.Instance = this; this.handleChange = this.handleChange.bind(this); this.keyinput = React.createRef(); } @@ -49,7 +49,7 @@ export class DocumentDecorations extends React.Component<{}, { value: string }> @action handleChange = (event: any) => { this._title = event.target.value; - }; + } @action enterPressed = (e: any) => { @@ -59,14 +59,14 @@ export class DocumentDecorations extends React.Component<{}, { value: string }> var text = e.target.value; if (text[0] === '#') { let command = text.slice(1, text.length); - this._fieldKey = new Key(command) + this._fieldKey = new Key(command); // if (command === "Title" || command === "title") { // this._fieldKey = KeyStore.Title; // } // else if (command === "Width" || command === "width") { // this._fieldKey = KeyStore.Width; // } - this._title = "changed" + this._title = "changed"; // TODO: Change field with switch statement } else { @@ -89,7 +89,7 @@ export class DocumentDecorations extends React.Component<{}, { value: string }> return { x: Math.min(sptX, bounds.x), y: Math.min(sptY, bounds.y), r: Math.max(bptX, bounds.r), b: Math.max(bptY, bounds.b) - } + }; }, { x: Number.MAX_VALUE, y: Number.MAX_VALUE, r: Number.MIN_VALUE, b: Number.MIN_VALUE }); } @@ -104,7 +104,7 @@ export class DocumentDecorations extends React.Component<{}, { value: string }> document.addEventListener("pointermove", this.onBackgroundMove); document.removeEventListener("pointerup", this.onBackgroundUp); document.addEventListener("pointerup", this.onBackgroundUp); - this._lastDrag = [e.clientX, e.clientY] + this._lastDrag = [e.clientX, e.clientY]; e.stopPropagation(); e.preventDefault(); } @@ -127,7 +127,7 @@ export class DocumentDecorations extends React.Component<{}, { value: string }> dragComplete: action(() => this._dragging = false), }, hideSource: true - }) + }); e.stopPropagation(); } @@ -199,53 +199,53 @@ export class DocumentDecorations extends React.Component<{}, { value: string }> onLinkerButtonDown = (e: React.PointerEvent): void => { e.stopPropagation(); - document.removeEventListener("pointermove", this.onLinkerButtonMoved) + document.removeEventListener("pointermove", this.onLinkerButtonMoved); document.addEventListener("pointermove", this.onLinkerButtonMoved); - document.removeEventListener("pointerup", this.onLinkerButtonUp) + document.removeEventListener("pointerup", this.onLinkerButtonUp); document.addEventListener("pointerup", this.onLinkerButtonUp); } onLinkerButtonUp = (e: PointerEvent): void => { - document.removeEventListener("pointermove", this.onLinkerButtonMoved) - document.removeEventListener("pointerup", this.onLinkerButtonUp) + document.removeEventListener("pointermove", this.onLinkerButtonMoved); + document.removeEventListener("pointerup", this.onLinkerButtonUp); e.stopPropagation(); } onLinkerButtonMoved = (e: PointerEvent): void => { if (this._linkerButton.current !== null) { - document.removeEventListener("pointermove", this.onLinkerButtonMoved) - document.removeEventListener("pointerup", this.onLinkerButtonUp) + document.removeEventListener("pointermove", this.onLinkerButtonMoved); + document.removeEventListener("pointerup", this.onLinkerButtonUp); let dragData = new DragManager.LinkDragData(SelectionManager.SelectedDocuments()[0]); DragManager.StartLinkDrag(this._linkerButton.current, dragData, e.pageX, e.pageY, { handlers: { dragComplete: action(() => { }), }, hideSource: false - }) + }); } e.stopPropagation(); } onLinkButtonDown = (e: React.PointerEvent): void => { e.stopPropagation(); - document.removeEventListener("pointermove", this.onLinkButtonMoved) + document.removeEventListener("pointermove", this.onLinkButtonMoved); document.addEventListener("pointermove", this.onLinkButtonMoved); - document.removeEventListener("pointerup", this.onLinkButtonUp) + document.removeEventListener("pointerup", this.onLinkButtonUp); document.addEventListener("pointerup", this.onLinkButtonUp); } onLinkButtonUp = (e: PointerEvent): void => { - document.removeEventListener("pointermove", this.onLinkButtonMoved) - document.removeEventListener("pointerup", this.onLinkButtonUp) + document.removeEventListener("pointermove", this.onLinkButtonMoved); + document.removeEventListener("pointerup", this.onLinkButtonUp); e.stopPropagation(); } onLinkButtonMoved = async (e: PointerEvent) => { if (this._linkButton.current !== null) { - document.removeEventListener("pointermove", this.onLinkButtonMoved) + document.removeEventListener("pointermove", this.onLinkButtonMoved); document.removeEventListener("pointerup", this.onLinkButtonUp); let sourceDoc = SelectionManager.SelectedDocuments()[0].props.Document; - let srcTarg = sourceDoc.GetT(KeyStore.Prototype, Document) + let srcTarg = sourceDoc.GetT(KeyStore.Prototype, Document); let draggedDocs = (srcTarg && srcTarg !== FieldWaiting) ? srcTarg.GetList(KeyStore.LinkedToDocs, [] as Document[]).map(linkDoc => (linkDoc.GetT(KeyStore.LinkedToDocs, Document)) as Document) : []; @@ -265,7 +265,7 @@ export class DocumentDecorations extends React.Component<{}, { value: string }> dragComplete: action(() => { }), }, hideSource: false - }) + }); } } e.stopPropagation(); @@ -285,38 +285,38 @@ export class DocumentDecorations extends React.Component<{}, { value: string }> case "": break; case "documentDecorations-topLeftResizer": - dX = -1 - dY = -1 - dW = -(e.movementX) - dH = -(e.movementY) + dX = -1; + dY = -1; + dW = -(e.movementX); + dH = -(e.movementY); break; case "documentDecorations-topRightResizer": - dW = e.movementX - dY = -1 - dH = -(e.movementY) + dW = e.movementX; + dY = -1; + dH = -(e.movementY); break; case "documentDecorations-topResizer": - dY = -1 - dH = -(e.movementY) + dY = -1; + dH = -(e.movementY); break; case "documentDecorations-bottomLeftResizer": - dX = -1 - dW = -(e.movementX) - dH = e.movementY + dX = -1; + dW = -(e.movementX); + dH = e.movementY; break; case "documentDecorations-bottomRightResizer": - dW = e.movementX - dH = e.movementY + dW = e.movementX; + dH = e.movementY; break; case "documentDecorations-bottomResizer": - dH = e.movementY + dH = e.movementY; break; case "documentDecorations-leftResizer": - dX = -1 - dW = -(e.movementX) + dX = -1; + dW = -(e.movementX); break; case "documentDecorations-rightResizer": - dW = e.movementX + dW = e.movementX; break; } @@ -338,14 +338,15 @@ export class DocumentDecorations extends React.Component<{}, { value: string }> var nativeWidth = doc.GetNumber(KeyStore.NativeWidth, 0); var nativeHeight = doc.GetNumber(KeyStore.NativeHeight, 0); if (nativeWidth > 0 && nativeHeight > 0) { - if (Math.abs(dW) > Math.abs(dH)) + if (Math.abs(dW) > Math.abs(dH)) { actualdH = nativeHeight / nativeWidth * actualdW; + } else actualdW = nativeWidth / nativeHeight * actualdH; } doc.SetNumber(KeyStore.Width, actualdW); doc.SetNumber(KeyStore.Height, actualdH); } - }) + }); } onPointerUp = (e: PointerEvent): void => { @@ -362,10 +363,10 @@ export class DocumentDecorations extends React.Component<{}, { value: string }> if (this._title === "changed" && this._documents.length > 0) { let field = this._documents[0].props.Document.Get(this._fieldKey); if (field instanceof TextField) { - return (field as TextField).GetValue(); + return (field).GetValue(); } else if (field instanceof NumberField) { - return (field as NumberField).GetValue().toString(); + return (field).GetValue().toString(); } } return this._title; @@ -388,7 +389,7 @@ export class DocumentDecorations extends React.Component<{}, { value: string }> return (null); } if (isNaN(bounds.r) || isNaN(bounds.b) || isNaN(bounds.x) || isNaN(bounds.y)) { - console.log("DocumentDecorations: Bounds Error") + console.log("DocumentDecorations: Bounds Error"); return (null); } @@ -414,7 +415,7 @@ export class DocumentDecorations extends React.Component<{}, { value: string }> top: bounds.y - this._resizeBorderWidth / 2, pointerEvents: this._dragging ? "none" : "all", zIndex: SelectionManager.SelectedDocuments().length > 1 ? 1000 : 0, - }} onPointerDown={this.onBackgroundDown} onContextMenu={(e: React.MouseEvent) => { e.preventDefault(); e.stopPropagation() }} > + }} onPointerDown={this.onBackgroundDown} onContextMenu={(e: React.MouseEvent) => { e.preventDefault(); e.stopPropagation(); }} >
∞
- ) + ); } } \ No newline at end of file diff --git a/src/client/views/EditableView.tsx b/src/client/views/EditableView.tsx index 982aacdea..2f17c6c51 100644 --- a/src/client/views/EditableView.tsx +++ b/src/client/views/EditableView.tsx @@ -1,7 +1,7 @@ -import React = require('react') +import React = require('react'); import { observer } from 'mobx-react'; import { observable, action, trace } from 'mobx'; -import "./EditableView.scss" +import "./EditableView.scss"; export interface EditableProps { /** @@ -22,7 +22,7 @@ export interface EditableProps { * The contents to render when not editing */ contents: any; - height: number + height: number; display?: string; } @@ -55,14 +55,14 @@ export class EditableView extends React.Component { render() { if (this.editing) { return this.editing = false)} - style={{ display: this.props.display }}> + style={{ display: this.props.display }}>; } else { return (
this.editing = true)} > {this.props.contents}
- ) + ); } } } \ No newline at end of file diff --git a/src/client/views/InkingCanvas.tsx b/src/client/views/InkingCanvas.tsx index 4ecc44119..47ee8eb85 100644 --- a/src/client/views/InkingCanvas.tsx +++ b/src/client/views/InkingCanvas.tsx @@ -82,7 +82,7 @@ export class InkingCanvas extends React.Component { }); this.inkData = data; } - }; + } @action onPointerUp = (e: PointerEvent): void => { @@ -109,7 +109,7 @@ export class InkingCanvas extends React.Component { @action onPointerMove = (e: PointerEvent): void => { - e.stopPropagation() + e.stopPropagation(); e.preventDefault(); if (InkingControl.Instance.selectedTool !== InkTool.Eraser) { let data = this.inkData; // add points to new line as it is being drawn @@ -120,7 +120,7 @@ export class InkingCanvas extends React.Component { } this.inkData = data; } - }; + } relativeCoordinatesForEvent = (ex: number, ey: number): { x: number, y: number } => { let [x, y] = this.props.getScreenTransform().transformPoint(ex, ey); @@ -137,14 +137,15 @@ export class InkingCanvas extends React.Component { @computed get drawnPaths() { - let curPage = this.props.Document.GetNumber(KeyStore.CurPage, -1) + let curPage = this.props.Document.GetNumber(KeyStore.CurPage, -1); let paths = Array.from(this.inkData).reduce((paths, [id, strokeData]) => { - if (strokeData.page === -1 || strokeData.page === curPage) + if (strokeData.page === -1 || strokeData.page === curPage) { paths.push() + tool={strokeData.tool} deleteCallback={this.removeLine} />); + } return paths; }, [] as JSX.Element[]); return [ { {this.props.children()} {this.drawnPaths}
- ) + ); } } \ No newline at end of file diff --git a/src/client/views/InkingControl.tsx b/src/client/views/InkingControl.tsx index 64ee66ec7..9a68f0671 100644 --- a/src/client/views/InkingControl.tsx +++ b/src/client/views/InkingControl.tsx @@ -1,10 +1,10 @@ import { observable, action, computed } from "mobx"; -import { CirclePicker, ColorResult } from 'react-color' +import { CirclePicker, ColorResult } from 'react-color'; import React = require("react"); import { InkTool } from "../../fields/InkField"; import { observer } from "mobx-react"; -import "./InkingControl.scss" +import "./InkingControl.scss"; import { library } from '@fortawesome/fontawesome-svg-core'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { faPen, faHighlighter, faEraser, faBan } from '@fortawesome/free-solid-svg-icons'; @@ -25,7 +25,7 @@ export class InkingControl extends React.Component { constructor(props: Readonly<{}>) { super(props); - InkingControl.Instance = this + InkingControl.Instance = this; } @action @@ -66,9 +66,9 @@ export class InkingControl extends React.Component { selected = (tool: InkTool) => { if (this._selectedTool === tool) { - return { color: "#61aaa3" } + return { color: "#61aaa3" }; } - return {} + return {}; } @action @@ -111,6 +111,6 @@ export class InkingControl extends React.Component { onChange={(e: React.ChangeEvent) => this.switchWidth(e.target.value)} /> - ) + ); } } \ No newline at end of file diff --git a/src/client/views/InkingStroke.tsx b/src/client/views/InkingStroke.tsx index 12b15a3f0..0f05da22c 100644 --- a/src/client/views/InkingStroke.tsx +++ b/src/client/views/InkingStroke.tsx @@ -30,7 +30,7 @@ export class InkingStroke extends React.Component { } parseData = (line: Array<{ x: number, y: number }>): string => { - return !line.length ? "" : "M " + line.map(p => (p.x + this.props.offsetX) + " " + (p.y + this.props.offsetY)).join(" L ") + return !line.length ? "" : "M " + line.map(p => (p.x + this.props.offsetX) + " " + (p.y + this.props.offsetY)).join(" L "); } createStyle() { @@ -41,7 +41,7 @@ export class InkingStroke extends React.Component { fill: "none", stroke: this._strokeColor, strokeWidth: this._strokeWidth + "px", - } + }; } } @@ -53,6 +53,6 @@ export class InkingStroke extends React.Component { return ( - ) + ); } } \ No newline at end of file diff --git a/src/client/views/Main.tsx b/src/client/views/Main.tsx index 6376fd694..fd2e23c91 100644 --- a/src/client/views/Main.tsx +++ b/src/client/views/Main.tsx @@ -16,7 +16,7 @@ import { WorkspacesMenu } from '../../server/authentication/controllers/Workspac import { CurrentUserUtils } from '../../server/authentication/models/current_user_utils'; import { MessageStore } from '../../server/Message'; import { Utils, returnTrue, emptyFunction } from '../../Utils'; -import * as rp from 'request-promise' +import * as rp from 'request-promise'; import { RouteStore } from '../../server/RouteStore'; import { ServerUtils } from '../../server/ServerUtil'; import { Documents } from '../documents/Documents'; @@ -74,7 +74,7 @@ export class Main extends React.Component { if (pathname.length > 1 && pathname[pathname.length - 2] === 'doc') { CurrentUserUtils.MainDocId = pathname[pathname.length - 1]; } - }; + } CurrentUserUtils.loadCurrentUser(); @@ -119,8 +119,8 @@ export class Main extends React.Component { initEventListeners = () => { // window.addEventListener("pointermove", (e) => this.reportLocation(e)) - window.addEventListener("drop", (e) => e.preventDefault(), false) // drop event handler - window.addEventListener("dragover", (e) => e.preventDefault(), false) // drag event handler + window.addEventListener("drop", (e) => e.preventDefault(), false); // drop event handler + window.addEventListener("dragover", (e) => e.preventDefault(), false); // drag event handler // click interactions for the context menu document.addEventListener("pointerdown", action(function (e: PointerEvent) { if (!ContextMenu.Instance.intersects(e.pageX, e.pageY)) { @@ -139,15 +139,15 @@ export class Main extends React.Component { } else { this.createNewWorkspace(); } - }) + }); } else { Server.GetField(CurrentUserUtils.MainDocId).then(field => { if (field instanceof Document) { - this.openWorkspace(field) + this.openWorkspace(field); } else { this.createNewWorkspace(CurrentUserUtils.MainDocId); } - }) + }); } } @@ -163,7 +163,7 @@ export class Main extends React.Component { // bcz: strangely, we need a timeout to prevent exceptions/issues initializing GoldenLayout (the rendering engine for Main Container) setTimeout(() => { this.openWorkspace(mainDoc); - let pendingDocument = Documents.SchemaDocument([], { title: "New Mobile Uploads" }) + let pendingDocument = Documents.SchemaDocument([], { title: "New Mobile Uploads" }); mainDoc.Set(KeyStore.OptionalRightCollection, pendingDocument); }, 0); } @@ -182,7 +182,7 @@ export class Main extends React.Component { if (f && f.Data.length > 0) { CollectionDockingView.Instance.AddRightSplit(col); } - }) + }); } }, 100); }); @@ -191,7 +191,7 @@ export class Main extends React.Component { @observable workspacesShown: boolean = false; - areWorkspacesShown = () => this.workspacesShown + areWorkspacesShown = () => this.workspacesShown; @action toggleWorkspaces = () => { this.workspacesShown = !this.workspacesShown; @@ -199,7 +199,7 @@ export class Main extends React.Component { pwidthFunc = () => this.pwidth; pheightFunc = () => this.pheight; - focusDocument = (doc: Document) => { } + focusDocument = (doc: Document) => { }; noScaling = () => 1; @observable _textDoc?: Document = undefined; @@ -208,8 +208,9 @@ export class Main extends React.Component { SetTextDoc(textDoc?: Document, div?: HTMLDivElement) { this._textDoc = undefined; this._textDoc = textDoc; - if (div) + if (div) { this._textRect = div.getBoundingClientRect(); + } } @computed @@ -221,7 +222,7 @@ export class Main extends React.Component { let h: number = this._textRect.height; return
{ }} /> - + ; } else return (null); } @@ -241,19 +242,19 @@ export class Main extends React.Component { focus={this.focusDocument} parentActive={returnTrue} onActiveChanged={emptyFunction} - ContainingCollectionView={undefined} /> + ContainingCollectionView={undefined} />; } /* for the expandable add nodes menu. Not included with the miscbuttons because once it expands it expands the whole div with it, making canvas interactions limited. */ @computed get nodesMenu() { let imgurl = "https://upload.wikimedia.org/wikipedia/commons/thumb/3/3a/Cat03.jpg/1200px-Cat03.jpg"; - let pdfurl = "http://www.adobe.com/support/products/enterprise/knowledgecenter/media/c4611_sample_explain.pdf" + let pdfurl = "http://www.adobe.com/support/products/enterprise/knowledgecenter/media/c4611_sample_explain.pdf"; let weburl = "https://cs.brown.edu/courses/cs166/"; let audiourl = "http://techslides.com/demos/samples/sample.mp3"; let videourl = "http://techslides.com/demos/sample-videos/small.mp4"; - let addTextNode = action(() => Documents.TextDocument({ width: 200, height: 200, title: "a text note" })) + let addTextNode = action(() => Documents.TextDocument({ width: 200, height: 200, title: "a text note" })); let addColNode = action(() => Documents.FreeformDocument([], { width: 200, height: 200, title: "a freeform collection" })); let addSchemaNode = action(() => Documents.SchemaDocument([], { width: 200, height: 200, title: "a schema collection" })); let addTreeNode = action(() => Documents.TreeDocument(this._northstarSchemas, { width: 250, height: 400, title: "northstar schemas", copyDraggedItems: true })); @@ -261,7 +262,7 @@ export class Main extends React.Component { let addPDFNode = action(() => Documents.PdfDocument(pdfurl, { width: 200, height: 200, title: "a schema collection" })); let addImageNode = action(() => Documents.ImageDocument(imgurl, { width: 200, height: 200, title: "an image of a cat" })); let addWebNode = action(() => Documents.WebDocument(weburl, { width: 200, height: 200, title: "a sample web page" })); - let addAudioNode = action(() => Documents.AudioDocument(audiourl, { width: 200, height: 200, title: "audio node" })) + let addAudioNode = action(() => Documents.AudioDocument(audiourl, { width: 200, height: 200, title: "audio node" })); let btns: [React.RefObject, IconName, string, () => Document][] = [ [React.createRef(), "font", "Add Textbox", addTextNode], @@ -273,7 +274,7 @@ export class Main extends React.Component { [React.createRef(), "object-group", "Add Collection", addColNode], [React.createRef(), "tree", "Add Tree", addTreeNode], [React.createRef(), "table", "Add Schema", addSchemaNode], - ] + ]; return < div id="add-nodes-menu" > @@ -289,7 +290,7 @@ export class Main extends React.Component {
)} - + ; } /* @TODO this should really be moved into a moveable toolbar component, but for now let's put it here to meet the deadline */ @@ -298,7 +299,7 @@ export class Main extends React.Component { let workspacesRef = React.createRef(); let logoutRef = React.createRef(); - let clearDatabase = action(() => Utils.Emit(Server.Socket, MessageStore.DeleteAll, {})) + let clearDatabase = action(() => Utils.Emit(Server.Socket, MessageStore.DeleteAll, {})); return [ ,
@@ -310,7 +311,7 @@ export class Main extends React.Component {
,
- ] + ]; } render() { @@ -318,7 +319,7 @@ export class Main extends React.Component { let workspaces = this.userDocument.GetT>(KeyStore.Workspaces, ListField); if (workspaces && workspaces !== FieldWaiting) { workspaceMenu = + isShown={this.areWorkspacesShown} toggle={this.toggleWorkspaces} />; } return ( <> @@ -359,7 +360,7 @@ export class Main extends React.Component { schemaDocuments.push(field); } else { var atmod = new ColumnAttributeModel(attr); - let histoOp = new HistogramOperation(schema!.displayName!, + let histoOp = new HistogramOperation(schema.displayName!, new AttributeTransformationModel(atmod, AggregateFunction.None), new AttributeTransformationModel(atmod, AggregateFunction.Count), new AttributeTransformationModel(atmod, AggregateFunction.Count)); @@ -368,7 +369,7 @@ export class Main extends React.Component { })); }); return schemaDoc; - }) + }); } } async initializeNorthstar(): Promise { @@ -386,7 +387,7 @@ export class Main extends React.Component { } (async () => { - await Documents.initProtos() - await CurrentUserUtils.loadCurrentUser() + await Documents.initProtos(); + await CurrentUserUtils.loadCurrentUser(); ReactDOM.render(
, document.getElementById('root')); -})() +})(); diff --git a/src/client/views/collections/CollectionBaseView.tsx b/src/client/views/collections/CollectionBaseView.tsx index 7a5ab6e3c..32462a4c1 100644 --- a/src/client/views/collections/CollectionBaseView.tsx +++ b/src/client/views/collections/CollectionBaseView.tsx @@ -66,17 +66,20 @@ export class CollectionBaseView extends React.Component { createsCycle(documentToAdd: Document, containerDocument: Document): boolean { let data = documentToAdd.GetList(KeyStore.Data, []); for (const doc of data) { - if (this.createsCycle(doc, containerDocument)) + if (this.createsCycle(doc, containerDocument)) { return true; + } } let annots = documentToAdd.GetList(KeyStore.Annotations, []); for (const annot of annots) { - if (this.createsCycle(annot, containerDocument)) + if (this.createsCycle(annot, containerDocument)) { return true; + } } for (let containerProto: FieldValue = containerDocument; containerProto && containerProto !== FieldWaiting; containerProto = containerProto.GetPrototype()) { - if (containerProto.Id === documentToAdd.Id) + if (containerProto.Id === documentToAdd.Id) { return true; + } } return false; } @@ -91,20 +94,23 @@ export class CollectionBaseView extends React.Component { } if (props.Document.Get(props.fieldKey) instanceof Field) { //TODO This won't create the field if it doesn't already exist - const value = props.Document.GetData(props.fieldKey, ListField, new Array()) + const value = props.Document.GetData(props.fieldKey, ListField, new Array()); if (!this.createsCycle(doc, props.Document)) { - if (!value.some(v => v.Id === doc.Id) || allowDuplicates) + if (!value.some(v => v.Id === doc.Id) || allowDuplicates) { value.push(doc); + } } - else + else { return false; + } } else { let proto = props.Document.GetPrototype(); if (!proto || proto === FieldWaiting || !this.createsCycle(proto, doc)) { props.Document.SetOnPrototype(props.fieldKey, new ListField([doc])); } - else + else { return false; + } } return true; } @@ -113,7 +119,7 @@ export class CollectionBaseView extends React.Component { removeDocument(doc: Document): boolean { const props = this.props; //TODO This won't create the field if it doesn't already exist - const value = props.Document.GetData(props.fieldKey, ListField, new Array()) + const value = props.Document.GetData(props.fieldKey, ListField, new Array()); let index = -1; for (let i = 0; i < value.length; i++) { if (value[i].Id === doc.Id) { @@ -125,16 +131,16 @@ export class CollectionBaseView extends React.Component { if (annotationOn === props.Document) { doc.Set(KeyStore.AnnotationOn, undefined, true); } - }) + }); if (index !== -1) { - value.splice(index, 1) + value.splice(index, 1); // SelectionManager.DeselectAll() - ContextMenu.Instance.clearItems() + ContextMenu.Instance.clearItems(); return true; } - return false + return false; } @action.bound @@ -155,12 +161,12 @@ export class CollectionBaseView extends React.Component { moveDocument: this.moveDocument, active: this.active, onActiveChanged: this.onActiveChanged, - } + }; return (
{this.props.children(this.collectionViewType, props)}
- ) + ); } } \ No newline at end of file diff --git a/src/client/views/collections/CollectionDockingView.tsx b/src/client/views/collections/CollectionDockingView.tsx index c3757a377..ea6d3a247 100644 --- a/src/client/views/collections/CollectionDockingView.tsx +++ b/src/client/views/collections/CollectionDockingView.tsx @@ -32,7 +32,7 @@ export class CollectionDockingView extends React.Component) => { - if (f instanceof Document) - DragManager.StartDocumentDrag([tab], new DragManager.DocumentDragData([f as Document]), e.pageX, e.pageY, + if (f instanceof Document) { + DragManager.StartDocumentDrag([tab], new DragManager.DocumentDragData([f]), e.pageX, e.pageY, { handlers: { dragComplete: action(() => { }), }, hideSource: false - }) + }); + } })); } if (className === "lm_drag_handle" || className === "lm_close" || className === "lm_maximise" || className === "lm_minimise" || className === "lm_close_tab") { @@ -220,7 +222,7 @@ export class CollectionDockingView extends React.Component { var json = JSON.stringify(this._goldenLayout.toConfig()); - this.props.Document.SetText(KeyStore.Data, json) + this.props.Document.SetText(KeyStore.Data, json); } itemDropped = () => { @@ -236,7 +238,7 @@ export class CollectionDockingView extends React.Component { Server.GetField(this.props.documentId, action((f: Opt) => this._document = f as Document)); } - private _nativeWidth = () => this._document!.GetNumber(KeyStore.NativeWidth, this._panelWidth) - private _nativeHeight = () => this._document!.GetNumber(KeyStore.NativeHeight, this._panelHeight) - private _contentScaling = () => this._panelWidth / (this._nativeWidth() ? this._nativeWidth() : this._panelWidth) + private _nativeWidth = () => this._document!.GetNumber(KeyStore.NativeWidth, this._panelWidth); + private _nativeHeight = () => this._document!.GetNumber(KeyStore.NativeHeight, this._panelHeight); + private _contentScaling = () => this._panelWidth / (this._nativeWidth() ? this._nativeWidth() : this._panelWidth); ScreenToLocalTransform = () => { let { scale, translateX, translateY } = Utils.GetScreenTransform(this._mainCont.current!); - return CollectionDockingView.Instance.props.ScreenToLocalTransform().translate(-translateX, -translateY).scale(scale / this._contentScaling()) + return CollectionDockingView.Instance.props.ScreenToLocalTransform().translate(-translateX, -translateY).scale(scale / this._contentScaling()); } render() { - if (!this._document) + if (!this._document) { return (null); + } var content =
{ onActiveChanged={emptyFunction} focus={(doc: Document) => { }} ContainingCollectionView={undefined} /> -
+ ; return { this._panelWidth = r.entry.width; this._panelHeight = r.entry.height; })}> {({ measureRef }) =>
{content}
} -
+ ; } } \ No newline at end of file diff --git a/src/client/views/collections/CollectionPDFView.tsx b/src/client/views/collections/CollectionPDFView.tsx index 32f50afc0..97bac745c 100644 --- a/src/client/views/collections/CollectionPDFView.tsx +++ b/src/client/views/collections/CollectionPDFView.tsx @@ -2,7 +2,7 @@ import { action, computed, observable } from "mobx"; import { observer } from "mobx-react"; import { KeyStore } from "../../../fields/KeyStore"; import { ContextMenu } from "../ContextMenu"; -import "./CollectionPDFView.scss" +import "./CollectionPDFView.scss"; import React = require("react"); import { CollectionFreeFormView } from "./collectionFreeForm/CollectionFreeFormView"; import { FieldView, FieldViewProps } from "../nodes/FieldView"; @@ -44,7 +44,7 @@ export class CollectionPDFView extends React.Component { {this.props.isSelected() ? this.uIButtons : (null)} - ) + ); } render() { @@ -52,6 +52,6 @@ export class CollectionPDFView extends React.Component { {this.subView} - ) + ); } } \ No newline at end of file diff --git a/src/client/views/collections/CollectionSchemaView.tsx b/src/client/views/collections/CollectionSchemaView.tsx index 9b780f29b..52933818f 100644 --- a/src/client/views/collections/CollectionSchemaView.tsx +++ b/src/client/views/collections/CollectionSchemaView.tsx @@ -1,4 +1,4 @@ -import React = require("react") +import React = require("react"); import { library } from '@fortawesome/fontawesome-svg-core'; import { faCog, faPlus } from '@fortawesome/free-solid-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; @@ -41,7 +41,7 @@ class KeyToggle extends React.Component<{ keyId: string, checked: boolean, toggl if (field instanceof Key) { this.key = field; } - })) + })); } render() { @@ -49,7 +49,7 @@ class KeyToggle extends React.Component<{ keyId: string, checked: boolean, toggl return (
this.key && this.props.toggle(this.key)} /> {this.key.Name} -
) + ); } return (null); } @@ -85,10 +85,10 @@ export class CollectionSchemaView extends CollectionSubView { focus: emptyFunction, active: returnFalse, onActiveChanged: emptyFunction, - } + }; let contents = ( - ) + ); let reference = React.createRef(); let onItemDown = setupDrag(reference, () => props.Document, this.props.moveDocument); let applyToDoc = (doc: Document, run: (args?: { [name: string]: any }) => any) => { @@ -106,7 +106,7 @@ export class CollectionSchemaView extends CollectionSubView { } } return false; - } + }; return (
applyToDoc(doc, run)); } - }) + }); }}>
- ) + ); } private getTrProps: ComponentPropsGetterR = (state, rowInfo) => { @@ -156,7 +156,7 @@ export class CollectionSchemaView extends CollectionSubView { that._selectedIndex = rowInfo.index; if (handleOriginal) { - handleOriginal() + handleOriginal(); } }), style: { @@ -182,7 +182,7 @@ export class CollectionSchemaView extends CollectionSubView { this.columns.splice(index, 1); } - }) + }); } //toggles preview side-panel of schema @@ -197,7 +197,7 @@ export class CollectionSchemaView extends CollectionSubView { @computed get findAllDocumentKeys(): { [id: string]: boolean } { const docs = this.props.Document.GetList(this.props.fieldKey, []); - let keys: { [id: string]: boolean } = {} + let keys: { [id: string]: boolean } = {}; if (this._optionsActivated > -1) { // bcz: ugh. this is untracked since otherwise a large collection of documents will blast the server for all their fields. // then as each document's fields come back, we update the documents _proxies. Each time we do this, the whole schema will be @@ -206,7 +206,7 @@ export class CollectionSchemaView extends CollectionSubView { // is displayed (unlikely) it won't show up until something else changes. untracked(() => docs.map(doc => doc.GetAllPrototypes().map(proto => proto._proxies.forEach((val: any, key: string) => keys[key] = false)))); } - this.columns.forEach(key => keys[key.Id] = true) + this.columns.forEach(key => keys[key.Id] = true); return keys; } @@ -248,10 +248,10 @@ export class CollectionSchemaView extends CollectionSubView { getContentScaling = (): number => this._contentScaling; getPanelWidth = (): number => this._panelWidth; getPanelHeight = (): number => this._panelHeight; - getTransform = (): Transform => this.props.ScreenToLocalTransform().translate(- COLLECTION_BORDER_WIDTH - this.DIVIDER_WIDTH - this._dividerX, - COLLECTION_BORDER_WIDTH).scale(1 / this._contentScaling) - getPreviewTransform = (): Transform => this.props.ScreenToLocalTransform().translate(- COLLECTION_BORDER_WIDTH - this.DIVIDER_WIDTH - this._dividerX - this._tableWidth, - COLLECTION_BORDER_WIDTH).scale(1 / this._contentScaling) + getTransform = (): Transform => this.props.ScreenToLocalTransform().translate(- COLLECTION_BORDER_WIDTH - this.DIVIDER_WIDTH - this._dividerX, - COLLECTION_BORDER_WIDTH).scale(1 / this._contentScaling); + getPreviewTransform = (): Transform => this.props.ScreenToLocalTransform().translate(- COLLECTION_BORDER_WIDTH - this.DIVIDER_WIDTH - this._dividerX - this._tableWidth, - COLLECTION_BORDER_WIDTH).scale(1 / this._contentScaling); - focusDocument = (doc: Document) => { } + focusDocument = (doc: Document) => { }; onPointerDown = (e: React.PointerEvent): void => { if (this.props.isSelected()) { @@ -273,8 +273,9 @@ export class CollectionSchemaView extends CollectionSubView { this.newKeyName = e.currentTarget.value; } onWheel = (e: React.WheelEvent): void => { - if (this.props.active()) + if (this.props.active()) { e.stopPropagation(); + } } @observable _optionsActivated: number = 0; @@ -322,9 +323,9 @@ export class CollectionSchemaView extends CollectionSubView { } - ) + ); let dividerDragger = this.splitPercentage === 0 ? (null) : -
+
; //options button and menu let optionsMenu = !this.props.active() ? (null) : (
- ) + ); } } \ No newline at end of file diff --git a/src/client/views/collections/CollectionSubView.tsx b/src/client/views/collections/CollectionSubView.tsx index 59b89e119..bd385c27e 100644 --- a/src/client/views/collections/CollectionSubView.tsx +++ b/src/client/views/collections/CollectionSubView.tsx @@ -14,7 +14,7 @@ import { NumberField } from "../../../fields/NumberField"; import { ServerUtils } from "../../../server/ServerUtil"; import { Server } from "../../Server"; import { FieldViewProps } from "../nodes/FieldView"; -import * as rp from 'request-promise' +import * as rp from 'request-promise'; export interface CollectionViewProps extends FieldViewProps { addDocument: (document: Document, allowDuplicates?: boolean) => boolean; @@ -58,8 +58,8 @@ export class CollectionSubView extends React.Component { let entry = new TupleField<[string, string], [number, number]>([textInfo, position]); cursors.push(entry); } - })) - }) + })); + }); } } @@ -77,17 +77,17 @@ export class CollectionSubView extends React.Component { added = de.data.droppedDocuments.reduce((added: boolean, d) => added || this.props.addDocument(d), false); } else if (de.data.moveDocument) { const move = de.data.moveDocument; - added = de.data.droppedDocuments.reduce((added: boolean, d) => added || move(d, this.props.Document, this.props.addDocument), false) + added = de.data.droppedDocuments.reduce((added: boolean, d) => added || move(d, this.props.Document, this.props.addDocument), false); } else { - added = de.data.droppedDocuments.reduce((added: boolean, d) => added || this.props.addDocument(d), false) + added = de.data.droppedDocuments.reduce((added: boolean, d) => added || this.props.addDocument(d), false); } e.stopPropagation(); return added; } if (de.data instanceof DragManager.LinkDragData) { let sourceDoc: Document = de.data.linkSourceDocumentView.props.Document; - if (sourceDoc) runInAction(() => { - let srcTarg = sourceDoc.GetT(KeyStore.Prototype, Document) + if (sourceDoc) { runInAction(() => { + let srcTarg = sourceDoc.GetT(KeyStore.Prototype, Document); if (srcTarg && srcTarg !== FieldWaiting) { let linkDocs = srcTarg.GetList(KeyStore.LinkedToDocs, [] as Document[]); linkDocs.map(linkDoc => { @@ -97,9 +97,10 @@ export class CollectionSubView extends React.Component { de.data.droppedDocuments.push(dropdoc); this.props.addDocument(dropdoc, false); } - }) + }); } - }) + }); + } return true; } return false; @@ -133,7 +134,7 @@ export class CollectionSubView extends React.Component { alias.SetNumber(KeyStore.Height, options.height || options.width || 300); this.props.addDocument(alias, false); } - }) + }); return undefined; } ctor = Documents.WebDocument; @@ -151,8 +152,8 @@ export class CollectionSubView extends React.Component { if (text && text.startsWith(" { let prom = new Promise(res => e.dataTransfer.items[i].getAsString(res)).then(action((s: string) => { str = s; - return rp.head(ServerUtils.prepend(RouteStore.corsProxy + "/" + s)) + return rp.head(ServerUtils.prepend(RouteStore.corsProxy + "/" + s)); })).then(res => { let type = res.headers["content-type"]; if (type) { - let doc = this.getDocumentFromType(type, str, { ...options, width: 300, nativeWidth: 300 }) + let doc = this.getDocumentFromType(type, str, { ...options, width: 300, nativeWidth: 300 }); if (doc) { this.props.addDocument(doc, false); } @@ -186,13 +187,13 @@ export class CollectionSubView extends React.Component { promises.push(prom); // this.props.addDocument(Documents.WebDocument(s, { ...options, width: 300, height: 300 }), false) } - let type = item.type + let type = item.type; if (item.kind === "file") { let file = item.getAsFile(); - let formData = new FormData() + let formData = new FormData(); if (file) { - formData.append('file', file) + formData.append('file', file); } let prom = fetch(upload, { @@ -201,15 +202,15 @@ export class CollectionSubView extends React.Component { }).then(async (res: Response) => { const json = await res.json(); json.map((file: any) => { - let path = window.location.origin + file + let path = window.location.origin + file; runInAction(() => { - let doc = this.getDocumentFromType(type, path, { ...options, nativeWidth: 300, width: 300 }) + let doc = this.getDocumentFromType(type, path, { ...options, nativeWidth: 300, width: 300 }); let docs = this.props.Document.GetT(KeyStore.Data, ListField); if (docs !== FieldWaiting) { if (!docs) { docs = new ListField(); - this.props.Document.Set(KeyStore.Data, docs) + this.props.Document.Set(KeyStore.Data, docs); } if (doc) { docs.Data.push(doc); diff --git a/src/client/views/collections/CollectionTreeView.tsx b/src/client/views/collections/CollectionTreeView.tsx index 2bdf0baa6..659cff9fe 100644 --- a/src/client/views/collections/CollectionTreeView.tsx +++ b/src/client/views/collections/CollectionTreeView.tsx @@ -12,7 +12,7 @@ import { EditableView } from "../EditableView"; import "./CollectionTreeView.scss"; import { CollectionView } from "./CollectionView"; import { CollectionSubView } from "./CollectionSubView"; -import React = require("react") +import React = require("react"); import { COLLECTION_BORDER_WIDTH } from './CollectionBaseView'; import { props } from 'bluebird'; @@ -58,7 +58,7 @@ class TreeView extends React.Component { return true; } //TODO This should check if it was removed - this.remove(document) + this.remove(document); return addDoc(document); } @@ -69,7 +69,7 @@ class TreeView extends React.Component { case BulletType.Collapsed: bullet = "caret-right"; break; case BulletType.Collapsible: bullet = "caret-down"; break; } - return
{bullet ? : ""}
+ return
{bullet ? : ""}
; } /** @@ -93,7 +93,7 @@ class TreeView extends React.Component {
{editableView(this.props.document.Title)}
-
) +
); } render() { @@ -105,7 +105,7 @@ class TreeView extends React.Component { bulletType = BulletType.Collapsible; childElements =
    {children.Data.map(value => )} -
+ ; } else bulletType = BulletType.Collapsed; } @@ -115,7 +115,7 @@ class TreeView extends React.Component { {this.renderTitle()} {childElements ? childElements : (null)} - + ; } } @@ -136,7 +136,7 @@ export class CollectionTreeView extends CollectionSubView { let childrenElement = !children || children === FieldWaiting ? (null) : (children.Data.map(value => ) - ) + ); return (
e.stopPropagation()} onDrop={(e: React.DragEvent) => this.onDrop(e, {})} ref={this.createDropTarget} style={{ borderWidth: `${COLLECTION_BORDER_WIDTH}px` }}> diff --git a/src/client/views/collections/CollectionVideoView.tsx b/src/client/views/collections/CollectionVideoView.tsx index 1acc76c85..b02983a2e 100644 --- a/src/client/views/collections/CollectionVideoView.tsx +++ b/src/client/views/collections/CollectionVideoView.tsx @@ -4,7 +4,7 @@ import { KeyStore } from "../../../fields/KeyStore"; import { ContextMenu } from "../ContextMenu"; import { CollectionViewType, CollectionBaseView, CollectionRenderProps } from "./CollectionBaseView"; import React = require("react"); -import "./CollectionVideoView.scss" +import "./CollectionVideoView.scss"; import { CollectionFreeFormView } from "./collectionFreeForm/CollectionFreeFormView"; import { FieldView, FieldViewProps } from "../nodes/FieldView"; @@ -111,7 +111,7 @@ export class CollectionVideoView extends React.Component { {this.props.isSelected() ? this.uIButtons : (null)} - ) + ); } render() { @@ -119,6 +119,6 @@ export class CollectionVideoView extends React.Component { return ( {this.subView} - ) + ); } } \ No newline at end of file diff --git a/src/client/views/collections/CollectionView.tsx b/src/client/views/collections/CollectionView.tsx index b31dcc888..8abd0a02d 100644 --- a/src/client/views/collections/CollectionView.tsx +++ b/src/client/views/collections/CollectionView.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import * as React from 'react'; import { FieldViewProps, FieldView } from '../nodes/FieldView'; import { CollectionBaseView, CollectionViewType, CollectionRenderProps } from './CollectionBaseView'; import { CollectionFreeFormView } from './collectionFreeForm/CollectionFreeFormView'; @@ -13,26 +13,26 @@ import { undoBatch } from '../../util/UndoManager'; @observer export class CollectionView extends React.Component { - public static LayoutString(fieldStr: string = "DataKey") { return FieldView.LayoutString(CollectionView, fieldStr) } + public static LayoutString(fieldStr: string = "DataKey") { return FieldView.LayoutString(CollectionView, fieldStr); } private SubView = (type: CollectionViewType, renderProps: CollectionRenderProps) => { let props = { ...this.props, ...renderProps }; switch (type) { - case CollectionViewType.Schema: return () - case CollectionViewType.Docking: return () - case CollectionViewType.Tree: return () + case CollectionViewType.Schema: return (); + case CollectionViewType.Docking: return (); + case CollectionViewType.Tree: return (); case CollectionViewType.Freeform: default: - return () + return (); } return (null); } onContextMenu = (e: React.MouseEvent): void => { if (!e.isPropagationStopped() && this.props.Document.Id !== CurrentUserUtils.MainDocId) { // need to test this because GoldenLayout causes a parallel hierarchy in the React DOM for its children and the main document view7 - ContextMenu.Instance.addItem({ description: "Freeform", event: undoBatch(() => this.props.Document.SetNumber(KeyStore.ViewType, CollectionViewType.Freeform)) }) - ContextMenu.Instance.addItem({ description: "Schema", event: undoBatch(() => this.props.Document.SetNumber(KeyStore.ViewType, CollectionViewType.Schema)) }) - ContextMenu.Instance.addItem({ description: "Treeview", event: undoBatch(() => this.props.Document.SetNumber(KeyStore.ViewType, CollectionViewType.Tree)) }) + ContextMenu.Instance.addItem({ description: "Freeform", event: undoBatch(() => this.props.Document.SetNumber(KeyStore.ViewType, CollectionViewType.Freeform)) }); + ContextMenu.Instance.addItem({ description: "Schema", event: undoBatch(() => this.props.Document.SetNumber(KeyStore.ViewType, CollectionViewType.Schema)) }); + ContextMenu.Instance.addItem({ description: "Treeview", event: undoBatch(() => this.props.Document.SetNumber(KeyStore.ViewType, CollectionViewType.Tree)) }); } } @@ -41,6 +41,6 @@ export class CollectionView extends React.Component { {this.SubView} - ) + ); } } \ No newline at end of file diff --git a/src/client/views/collections/collectionFreeForm/CollectionFreeFormLinkView.tsx b/src/client/views/collections/collectionFreeForm/CollectionFreeFormLinkView.tsx index 3dfd74ec8..081b3eb6c 100644 --- a/src/client/views/collections/collectionFreeForm/CollectionFreeFormLinkView.tsx +++ b/src/client/views/collections/collectionFreeForm/CollectionFreeFormLinkView.tsx @@ -32,6 +32,6 @@ export class CollectionFreeFormLinkView extends React.Component - ) + ); } } \ No newline at end of file diff --git a/src/client/views/collections/collectionFreeForm/CollectionFreeFormLinksView.tsx b/src/client/views/collections/collectionFreeForm/CollectionFreeFormLinksView.tsx index c288e7abf..cf058090d 100644 --- a/src/client/views/collections/collectionFreeForm/CollectionFreeFormLinksView.tsx +++ b/src/client/views/collections/collectionFreeForm/CollectionFreeFormLinksView.tsx @@ -17,7 +17,7 @@ export class CollectionFreeFormLinksView extends React.Component DocumentManager.Instance.getAllDocumentViews(this.HackToAvoidReactionFiringUnnecessarily!). map(dv => dv.props.Document.GetNumber(KeyStore.X, 0)), @@ -31,13 +31,14 @@ export class CollectionFreeFormLinksView extends React.Component) => field.Data.findIndex(brush => { let bdocs = brush ? brush.GetList(KeyStore.BrushingDocs, [] as Document[]) : []; - return (bdocs.length && ((bdocs[0] === dstTarg && bdocs[1] === srcTarg)) ? true : false) + return (bdocs.length && ((bdocs[0] === dstTarg && bdocs[1] === srcTarg)) ? true : false); }); let brushAction = (field: ListField) => { let found = findBrush(field); @@ -64,13 +65,13 @@ export class CollectionFreeFormLinksView extends React.Component sv.props.ContainingCollectionView && sv.props.ContainingCollectionView.props.Document === this.props.Document); } @@ -86,15 +87,16 @@ export class CollectionFreeFormLinksView extends React.Component { let match = (possiblePair.a === drawnPair.a && possiblePair.b === drawnPair.b); if (match) { - if (!drawnPair.l.reduce((found, link) => found || link.Id === connection.l.Id, false)) + if (!drawnPair.l.reduce((found, link) => found || link.Id === connection.l.Id, false)) { drawnPair.l.push(connection.l); + } } return match || found; }, false)) { drawnPairs.push({ a: possiblePair.a, b: possiblePair.b, l: [connection.l] }); } - }) - return drawnPairs + }); + return drawnPairs; }, [] as { a: Document, b: Document, l: Document[] }[]); return connections.map(c => ); } diff --git a/src/client/views/collections/collectionFreeForm/CollectionFreeFormRemoteCursors.tsx b/src/client/views/collections/collectionFreeForm/CollectionFreeFormRemoteCursors.tsx index 17656e4ae..fc832264d 100644 --- a/src/client/views/collections/collectionFreeForm/CollectionFreeFormRemoteCursors.tsx +++ b/src/client/views/collections/collectionFreeForm/CollectionFreeFormRemoteCursors.tsx @@ -57,7 +57,7 @@ export class CollectionFreeFormRemoteCursors extends React.Component { if (el) this.crosshairs = el }} + ref={(el) => { if (el) this.crosshairs = el; }} width={20} height={20} style={{ @@ -93,7 +93,7 @@ export class CollectionFreeFormRemoteCursors extends React.Component ); } - }) + }); } render() { diff --git a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx index 1c3899b24..e694bc7a7 100644 --- a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx +++ b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx @@ -49,7 +49,7 @@ export class CollectionFreeFormView extends CollectionSubView { if (dv) { SelectionManager.SelectDoc(dv, true); } - }) + }); } public getActiveDocuments = () => { @@ -70,8 +70,8 @@ export class CollectionFreeFormView extends CollectionSubView { private outerElement?: HTMLDivElement; - @computed get panX(): number { return this.props.Document.GetNumber(KeyStore.PanX, 0) } - @computed get panY(): number { return this.props.Document.GetNumber(KeyStore.PanY, 0) } + @computed get panX(): number { return this.props.Document.GetNumber(KeyStore.PanX, 0); } + @computed get panY(): number { return this.props.Document.GetNumber(KeyStore.PanY, 0); } @computed get scale(): number { return this.props.Document.GetNumber(KeyStore.Scale, 1); } @computed get isAnnotationOverlay() { return this.props.fieldKey && this.props.fieldKey.Id === KeyStore.Annotations.Id; } // bcz: ? Why do we need to compare Id's? @computed get nativeWidth() { return this.props.Document.GetNumber(KeyStore.NativeWidth, 0); } @@ -109,7 +109,7 @@ export class CollectionFreeFormView extends CollectionSubView { d.SetNumber(KeyStore.Height, 300); } this.bringToFront(d); - }) + }); } } return true; @@ -133,8 +133,9 @@ export class CollectionFreeFormView extends CollectionSubView { document.addEventListener("pointerup", this.onPointerUp); this._lastX = this.DownX = e.pageX; this._lastY = this.DownY = e.pageY; - if (this.props.isSelected()) + if (this.props.isSelected()) { e.stopPropagation(); + } } } @@ -182,12 +183,13 @@ export class CollectionFreeFormView extends CollectionSubView { let transform = this.getTransform(); let deltaScale = (1 - (e.deltaY / coefficient)); - if (deltaScale * this.zoomScaling < 1 && this.isAnnotationOverlay) + if (deltaScale * this.zoomScaling < 1 && this.isAnnotationOverlay) { deltaScale = 1 / this.zoomScaling; + } let [x, y] = transform.transformPoint(e.clientX, e.clientY); - let localTransform = this.getLocalTransform() - localTransform = localTransform.inverse().scaleAbout(deltaScale, x, y) + let localTransform = this.getLocalTransform(); + localTransform = localTransform.inverse().scaleAbout(deltaScale, x, y); // console.log(localTransform) this.props.Document.SetNumber(KeyStore.Scale, localTransform.Scale); @@ -209,7 +211,7 @@ export class CollectionFreeFormView extends CollectionSubView { onDrop = (e: React.DragEvent): void => { var pt = this.getTransform().transformPoint(e.pageX, e.pageY); super.onDrop(e, { x: pt[0], y: pt[1] }); - }; + } onDragOver = (): void => { } @@ -228,7 +230,7 @@ export class CollectionFreeFormView extends CollectionSubView { } return doc1.GetNumber(KeyStore.ZIndex, 0) - doc2.GetNumber(KeyStore.ZIndex, 0); }).map((doc, index) => { - doc.SetNumber(KeyStore.ZIndex, index + 1) + doc.SetNumber(KeyStore.ZIndex, index + 1); }); } @@ -268,7 +270,7 @@ export class CollectionFreeFormView extends CollectionSubView { focus: this.focusDocument, parentActive: this.props.active, onActiveChanged: this.props.active, - } + }; } @computed @@ -276,10 +278,11 @@ export class CollectionFreeFormView extends CollectionSubView { var curPage = this.props.Document.GetNumber(KeyStore.CurPage, -1); return this.props.Document.GetList(this.props.fieldKey, [] as Document[]).filter(doc => doc).reduce((prev, doc) => { var page = doc.GetNumber(KeyStore.Page, -1); - if (page === curPage || page === -1) + if (page === curPage || page === -1) { prev.push(); + } return prev; - }, [] as JSX.Element[]) + }, [] as JSX.Element[]); } @computed @@ -295,8 +298,8 @@ export class CollectionFreeFormView extends CollectionSubView { layoutKey={KeyStore.OverlayLayout} isTopMost={this.props.isTopMost} isSelected={() => false} select={() => { }} />); } - getTransform = (): Transform => this.props.ScreenToLocalTransform().translate(-COLLECTION_BORDER_WIDTH, -COLLECTION_BORDER_WIDTH).translate(-this.centeringShiftX, -this.centeringShiftY).transform(this.getLocalTransform()) - getContainerTransform = (): Transform => this.props.ScreenToLocalTransform().translate(-COLLECTION_BORDER_WIDTH, -COLLECTION_BORDER_WIDTH) + getTransform = (): Transform => this.props.ScreenToLocalTransform().translate(-COLLECTION_BORDER_WIDTH, -COLLECTION_BORDER_WIDTH).translate(-this.centeringShiftX, -this.centeringShiftY).transform(this.getLocalTransform()); + getContainerTransform = (): Transform => this.props.ScreenToLocalTransform().translate(-COLLECTION_BORDER_WIDTH, -COLLECTION_BORDER_WIDTH); getLocalTransform = (): Transform => Transform.Identity().scale(1 / this.scale).translate(this.panX, this.panY); noScaling = () => 1; childViews = () => this.views; diff --git a/src/client/views/collections/collectionFreeForm/MarqueeView.tsx b/src/client/views/collections/collectionFreeForm/MarqueeView.tsx index 704db1d4a..1e6faafb3 100644 --- a/src/client/views/collections/collectionFreeForm/MarqueeView.tsx +++ b/src/client/views/collections/collectionFreeForm/MarqueeView.tsx @@ -37,7 +37,7 @@ export class MarqueeView extends React.Component @action cleanupInteractions = (all: boolean = false) => { if (all) { - document.removeEventListener("pointermove", this.onPointerMove, true) + document.removeEventListener("pointermove", this.onPointerMove, true); document.removeEventListener("pointerup", this.onPointerUp, true); } else { this._used = true; @@ -52,7 +52,7 @@ export class MarqueeView extends React.Component this._downX = this._lastX = e.pageX; this._downY = this._lastY = e.pageY; this._used = false; - document.addEventListener("pointermove", this.onPointerMove, true) + document.addEventListener("pointermove", this.onPointerMove, true); document.addEventListener("pointerup", this.onPointerUp, true); document.addEventListener("keydown", this.marqueeCommand, true); } @@ -94,7 +94,7 @@ export class MarqueeView extends React.Component let top = this._downY < this._lastY ? this._downY : this._lastY; let topLeft = this.props.getTransform().transformPoint(left, top); let size = this.props.getTransform().transformDirection(this._lastX - this._downX, this._lastY - this._downY); - return { left: topLeft[0], top: topLeft[1], width: Math.abs(size[0]), height: Math.abs(size[1]) } + return { left: topLeft[0], top: topLeft[1], width: Math.abs(size[0]), height: Math.abs(size[1]) }; } @action @@ -180,9 +180,10 @@ export class MarqueeView extends React.Component var y = doc.GetNumber(KeyStore.Y, 0); var w = doc.GetNumber(KeyStore.Width, 0); var h = doc.GetNumber(KeyStore.Height, 0); - if (this.intersectRect({ left: x, top: y, width: w, height: h }, selRect)) - selection.push(doc) - }) + if (this.intersectRect({ left: x, top: y, width: w, height: h }, selRect)) { + selection.push(doc); + } + }); return selection; } @@ -190,7 +191,7 @@ export class MarqueeView extends React.Component get marqueeDiv() { let p = this.props.getContainerTransform().transformPoint(this._downX < this._lastX ? this._downX : this._lastX, this._downY < this._lastY ? this._downY : this._lastY); let v = this.props.getContainerTransform().transformDirection(this._lastX - this._downX, this._lastY - this._downY); - return
+ return
; } render() { diff --git a/src/client/views/collections/collectionFreeForm/PreviewCursor.tsx b/src/client/views/collections/collectionFreeForm/PreviewCursor.tsx index 599461f85..8eabb020a 100644 --- a/src/client/views/collections/collectionFreeForm/PreviewCursor.tsx +++ b/src/client/views/collections/collectionFreeForm/PreviewCursor.tsx @@ -90,7 +90,7 @@ export class PreviewCursor extends React.Component { {this.props.children}
- ) + ); } } @@ -109,8 +109,9 @@ export class PreviewCursorPrompt extends React.Component { render() { let p = this.props.getPoint(); - if (this.props.getVisible() && this._promptRef.current) + if (this.props.getVisible() && this._promptRef.current) { this._promptRef.current.focus(); + } return
I diff --git a/src/client/views/nodes/Annotation.tsx b/src/client/views/nodes/Annotation.tsx index e4f17940c..3e4ed6bf1 100644 --- a/src/client/views/nodes/Annotation.tsx +++ b/src/client/views/nodes/Annotation.tsx @@ -1,8 +1,8 @@ import "./ImageBox.scss"; -import React = require("react") -import { observer } from "mobx-react" +import React = require("react"); +import { observer } from "mobx-react"; import { observable, action } from 'mobx'; -import 'react-pdf/dist/Page/AnnotationLayer.css' +import 'react-pdf/dist/Page/AnnotationLayer.css'; interface IProps { Span: HTMLSpanElement; @@ -29,13 +29,13 @@ export class Annotation extends React.Component { */ onColorChange = (e: React.PointerEvent) => { if (e.currentTarget.innerHTML === "r") { - this.props.Span.style.backgroundColor = "rgba(255,0,0, 0.3)" + this.props.Span.style.backgroundColor = "rgba(255,0,0, 0.3)"; } else if (e.currentTarget.innerHTML === "b") { - this.props.Span.style.backgroundColor = "rgba(0,255, 255, 0.3)" + this.props.Span.style.backgroundColor = "rgba(0,255, 255, 0.3)"; } else if (e.currentTarget.innerHTML === "y") { - this.props.Span.style.backgroundColor = "rgba(255,255,0, 0.3)" + this.props.Span.style.backgroundColor = "rgba(255,255,0, 0.3)"; } else if (e.currentTarget.innerHTML === "g") { - this.props.Span.style.backgroundColor = "rgba(76, 175, 80, 0.3)" + this.props.Span.style.backgroundColor = "rgba(76, 175, 80, 0.3)"; } } @@ -54,11 +54,11 @@ export class Annotation extends React.Component { this.props.Highlights.splice(index, 1); } } - }) + }); //removing from CurrAnno and Annotation array this.props.Annotations.splice(index, 1); - this.props.CurrAnno.pop() + this.props.CurrAnno.pop(); //removing span from div if (this.props.Span.parentElement) { @@ -70,11 +70,11 @@ export class Annotation extends React.Component { if (item === e) { item.remove(); } - }) + }); e.remove(); } } - }) + }); } diff --git a/src/client/views/nodes/AudioBox.tsx b/src/client/views/nodes/AudioBox.tsx index 1bd934c25..1493ff25b 100644 --- a/src/client/views/nodes/AudioBox.tsx +++ b/src/client/views/nodes/AudioBox.tsx @@ -1,18 +1,18 @@ -import React = require("react") +import React = require("react"); import { FieldViewProps, FieldView } from './FieldView'; import { FieldWaiting } from '../../../fields/Field'; -import { observer } from "mobx-react" +import { observer } from "mobx-react"; import { ContextMenu } from "../../views/ContextMenu"; import { observable, action } from 'mobx'; import { KeyStore } from '../../../fields/KeyStore'; import { AudioField } from "../../../fields/AudioField"; -import "./AudioBox.scss" +import "./AudioBox.scss"; import { NumberField } from "../../../fields/NumberField"; @observer export class AudioBox extends React.Component { - public static LayoutString() { return FieldView.LayoutString(AudioBox) } + public static LayoutString() { return FieldView.LayoutString(AudioBox); } constructor(props: FieldViewProps) { super(props); @@ -28,7 +28,7 @@ export class AudioBox extends React.Component { render() { - let field = this.props.Document.Get(this.props.fieldKey) + let field = this.props.Document.Get(this.props.fieldKey); let path = field === FieldWaiting ? "http://techslides.com/demos/samples/sample.mp3" : field instanceof AudioField ? field.Data.href : "http://techslides.com/demos/samples/sample.mp3"; @@ -39,6 +39,6 @@ export class AudioBox extends React.Component { Not supported.
- ) + ); } } \ No newline at end of file diff --git a/src/client/views/nodes/CollectionFreeFormDocumentView.tsx b/src/client/views/nodes/CollectionFreeFormDocumentView.tsx index dcf82ccd4..77f41105f 100644 --- a/src/client/views/nodes/CollectionFreeFormDocumentView.tsx +++ b/src/client/views/nodes/CollectionFreeFormDocumentView.tsx @@ -35,24 +35,24 @@ export class CollectionFreeFormDocumentView extends React.Component this.nativeWidth > 0 ? this.width / this.nativeWidth : 1 + contentScaling = () => this.nativeWidth > 0 ? this.width / this.nativeWidth : 1; getTransform = (): Transform => this.props.ScreenToLocalTransform() @@ -66,7 +66,7 @@ export class CollectionFreeFormDocumentView extends React.Component + />; } panelWidth = () => this.props.Document.GetBoolean(KeyStore.Minimized, false) ? 10 : this.props.PanelWidth(); panelHeight = () => this.props.Document.GetBoolean(KeyStore.Minimized, false) ? 10 : this.props.PanelHeight(); diff --git a/src/client/views/nodes/DocumentContentsView.tsx b/src/client/views/nodes/DocumentContentsView.tsx index 34cc326aa..5836da396 100644 --- a/src/client/views/nodes/DocumentContentsView.tsx +++ b/src/client/views/nodes/DocumentContentsView.tsx @@ -26,7 +26,7 @@ import { FieldViewProps } from "./FieldView"; import { Without } from "../../../Utils"; const JsxParser = require('react-jsx-parser').default; //TODO Why does this need to be imported like this? -type BindingProps = Without +type BindingProps = Without; export interface JsxBindings { props: BindingProps; [keyName: string]: BindingProps | Field; @@ -92,7 +92,7 @@ export class DocumentContentsView extends React.Component { console.log(test) }} - /> + onError={(test: any) => { console.log(test); }} + />; } } \ No newline at end of file diff --git a/src/client/views/nodes/DocumentView.tsx b/src/client/views/nodes/DocumentView.tsx index ab9cd2d53..9670ca6b2 100644 --- a/src/client/views/nodes/DocumentView.tsx +++ b/src/client/views/nodes/DocumentView.tsx @@ -100,8 +100,9 @@ export class DocumentView extends React.Component { if (e.shiftKey && e.buttons === 2) { if (this.props.isTopMost) { this.startDragging(e.pageX, e.pageY, e.altKey || e.ctrlKey); - } else + } else { CollectionDockingView.Instance.StartOtherDrag([this.props.Document], e); + } e.stopPropagation(); } else { if (this.active && !e.isDefaultPrevented()) { @@ -112,7 +113,7 @@ export class DocumentView extends React.Component { document.addEventListener("pointerup", this.onPointerUp); } } - }; + } private dropDisposer?: DragManager.DragDropDisposer; @@ -179,7 +180,7 @@ export class DocumentView extends React.Component { } e.stopPropagation(); e.preventDefault(); - }; + } onPointerUp = (e: PointerEvent): void => { document.removeEventListener("pointermove", this.onPointerMove); document.removeEventListener("pointerup", this.onPointerUp); @@ -190,22 +191,22 @@ export class DocumentView extends React.Component { ) { SelectionManager.SelectDoc(this, e.ctrlKey); } - }; + } stopPropogation = (e: React.SyntheticEvent) => { e.stopPropagation(); - }; + } deleteClicked = (): void => { if (this.props.removeDocument) { this.props.removeDocument(this.props.Document); } - }; + } fieldsClicked = (e: React.MouseEvent): void => { if (this.props.addDocument) { this.props.addDocument(Documents.KVPDocument(this.props.Document, { width: 300, height: 300 }), false); } - }; + } fullScreenClicked = (e: React.MouseEvent): void => { CollectionDockingView.Instance.OpenFullScreen(this.props.Document); ContextMenu.Instance.clearItems(); @@ -214,7 +215,7 @@ export class DocumentView extends React.Component { event: this.closeFullScreenClicked }); ContextMenu.Instance.displayMenu(e.pageX - 15, e.pageY - 15); - }; + } closeFullScreenClicked = (e: React.MouseEvent): void => { CollectionDockingView.Instance.CloseFullScreen(); @@ -224,7 +225,7 @@ export class DocumentView extends React.Component { event: this.fullScreenClicked }); ContextMenu.Instance.displayMenu(e.pageX - 15, e.pageY - 15); - }; + } @action public minimize = (): void => { @@ -234,7 +235,7 @@ export class DocumentView extends React.Component { BooleanField ); SelectionManager.DeselectAll(); - }; + } @action drop = (e: Event, de: DragManager.DropEvent) => { @@ -276,7 +277,7 @@ export class DocumentView extends React.Component { ); e.stopPropagation(); } - }; + } onDrop = (e: React.DragEvent) => { if (e.isDefaultPrevented()) { @@ -290,7 +291,7 @@ export class DocumentView extends React.Component { e.stopPropagation(); e.preventDefault(); } - }; + } @action onContextMenu = (e: React.MouseEvent): void => { @@ -352,14 +353,14 @@ export class DocumentView extends React.Component { }); ContextMenu.Instance.displayMenu(e.pageX - 15, e.pageY - 15); SelectionManager.SelectDoc(this, e.ctrlKey); - }; + } isMinimized = () => { let field = this.props.Document.GetT(KeyStore.Minimized, BooleanField); if (field && field !== FieldWaiting) { return field.Data; } - }; + } @action expand = () => { @@ -368,13 +369,13 @@ export class DocumentView extends React.Component { false as boolean, BooleanField ); - }; + } - isSelected = () => SelectionManager.IsSelected(this) + isSelected = () => SelectionManager.IsSelected(this); select = (ctrlPressed: boolean) => { SelectionManager.SelectDoc(this, ctrlPressed); - }; + } render() { if (!this.props.Document) { diff --git a/src/client/views/nodes/FieldView.tsx b/src/client/views/nodes/FieldView.tsx index d9422ae9b..07c5b332c 100644 --- a/src/client/views/nodes/FieldView.tsx +++ b/src/client/views/nodes/FieldView.tsx @@ -1,4 +1,4 @@ -import React = require("react") +import React = require("react"); import { observer } from "mobx-react"; import { computed } from "mobx"; import { Field, FieldWaiting, FieldValue } from "../../../fields/Field"; @@ -7,7 +7,7 @@ import { TextField } from "../../../fields/TextField"; import { NumberField } from "../../../fields/NumberField"; import { RichTextField } from "../../../fields/RichTextField"; import { ImageField } from "../../../fields/ImageField"; -import { VideoField } from "../../../fields/VideoField" +import { VideoField } from "../../../fields/VideoField"; import { Key } from "../../../fields/Key"; import { FormattedTextBox } from "./FormattedTextBox"; import { ImageBox } from "./ImageBox"; @@ -57,22 +57,22 @@ export class FieldView extends React.Component { render() { const field = this.field; if (!field) { - return

{''}

+ return

{''}

; } if (field instanceof TextField) { - return

{field.Data}

+ return

{field.Data}

; } else if (field instanceof RichTextField) { - return + return ; } else if (field instanceof ImageField) { - return + return ; } else if (field instanceof VideoField) { - return + return ; } else if (field instanceof AudioField) { - return + return ; } else if (field instanceof Document) { return ( @@ -92,25 +92,26 @@ export class FieldView extends React.Component { ContainingCollectionView={undefined} parentActive={this.props.active} onActiveChanged={this.props.onActiveChanged} /> - ) + ); } else if (field instanceof ListField) { return (
{(field as ListField).Data.map(f => f instanceof Document ? f.Title : f.GetValue().toString()).join(", ")} -
) +
); } // bcz: this belongs here, but it doesn't render well so taking it out for now // else if (field instanceof HtmlField) { // return // } else if (field instanceof NumberField) { - return

{field.Data}

+ return

{field.Data}

; } else if (field !== FieldWaiting) { - return

{JSON.stringify(field.GetValue())}

+ return

{JSON.stringify(field.GetValue())}

; } - else - return

{"Waiting for server..."}

+ else { + return

{"Waiting for server..."}

; + } } } \ No newline at end of file diff --git a/src/client/views/nodes/FormattedTextBox.tsx b/src/client/views/nodes/FormattedTextBox.tsx index 7a94be12b..beca6cdc6 100644 --- a/src/client/views/nodes/FormattedTextBox.tsx +++ b/src/client/views/nodes/FormattedTextBox.tsx @@ -61,7 +61,7 @@ export class FormattedTextBox extends React.Component { ); // doc.SetData(fieldKey, JSON.stringify(state.toJSON()), RichTextField); } - }; + } get FieldDoc() { return this.props.fieldKey === KeyStore.Archives ? Main.Instance._textDoc! : this.props.Document; } get FieldKey() { return this.props.fieldKey === KeyStore.Archives ? KeyStore.Data : this.props.fieldKey; } @@ -81,12 +81,13 @@ export class FormattedTextBox extends React.Component { if (this.props.fieldKey === KeyStore.Archives) { this._inputReactionDisposer = reaction(() => Main.Instance._textDoc && Main.Instance._textDoc.Id, () => { - if (this._editorView) - this._editorView!.destroy(); + if (this._editorView) { + this._editorView.destroy(); + } this.setupEditor(config); } - ) + ); } this._reactionDisposer = reaction( @@ -153,7 +154,7 @@ export class FormattedTextBox extends React.Component { if (e.buttons === 1 && this.props.isSelected() && !e.altKey) { e.stopPropagation(); } - }; + } onPointerUp = (e: React.PointerEvent): void => { if (e.buttons === 1 && this.props.isSelected() && !e.altKey) { e.stopPropagation(); @@ -162,7 +163,7 @@ export class FormattedTextBox extends React.Component { e.preventDefault(); Main.Instance.SetTextDoc(this.props.Document, this._ref.current!); } - }; + } onFocused = (e: React.FocusEvent): void => { if (this.props.fieldKey !== KeyStore.Archives) { @@ -191,11 +192,11 @@ export class FormattedTextBox extends React.Component { // ] // }) // e.stopPropagation() - }; + } onPointerWheel = (e: React.WheelEvent): void => { e.stopPropagation(); - }; + } tooltipMenuPlugin() { return new Plugin({ diff --git a/src/client/views/nodes/ImageBox.tsx b/src/client/views/nodes/ImageBox.tsx index c5f29f7b0..6b0a3a799 100644 --- a/src/client/views/nodes/ImageBox.tsx +++ b/src/client/views/nodes/ImageBox.tsx @@ -9,13 +9,13 @@ import { KeyStore } from '../../../fields/KeyStore'; import { ContextMenu } from "../../views/ContextMenu"; import { FieldView, FieldViewProps } from './FieldView'; import "./ImageBox.scss"; -import React = require("react") +import React = require("react"); import { Utils } from '../../../Utils'; @observer export class ImageBox extends React.Component { - public static LayoutString() { return FieldView.LayoutString(ImageBox) } + public static LayoutString() { return FieldView.LayoutString(ImageBox); } private _ref: React.RefObject; private _imgRef: React.RefObject; private _downX: number = 0; @@ -39,7 +39,7 @@ export class ImageBox extends React.Component { onLoad = (target: any) => { var h = this._imgRef.current!.naturalHeight; var w = this._imgRef.current!.naturalWidth; - this.props.Document.SetNumber(KeyStore.NativeHeight, this.props.Document.GetNumber(KeyStore.NativeWidth, 0) * h / w) + this.props.Document.SetNumber(KeyStore.NativeHeight, this.props.Document.GetNumber(KeyStore.NativeWidth, 0) * h / w); } componentDidMount() { @@ -86,7 +86,7 @@ export class ImageBox extends React.Component { onMoveNextRequest={action(() => this._photoIndex = (this._photoIndex + 1) % images.length )} - />) + />); } } @@ -96,7 +96,7 @@ export class ImageBox extends React.Component { let url = field.Data.href; ContextMenu.Instance.addItem({ description: "Copy path", event: () => { - Utils.CopyText(url) + Utils.CopyText(url); } }); } @@ -111,6 +111,6 @@ export class ImageBox extends React.Component {
Image not found {this.lightbox(path)} -
) +
); } } \ No newline at end of file diff --git a/src/client/views/nodes/KeyValueBox.tsx b/src/client/views/nodes/KeyValueBox.tsx index 8a7f32e6d..bcac113f0 100644 --- a/src/client/views/nodes/KeyValueBox.tsx +++ b/src/client/views/nodes/KeyValueBox.tsx @@ -7,7 +7,7 @@ import { KeyStore } from '../../../fields/KeyStore'; import { FieldView, FieldViewProps } from './FieldView'; import "./KeyValueBox.scss"; import { KeyValuePair } from "./KeyValuePair"; -import React = require("react") +import React = require("react"); import { CompileScript, ToField } from "../../util/Scripting"; import { Key } from '../../../fields/Key'; import { observable, action } from "mobx"; @@ -15,7 +15,7 @@ import { observable, action } from "mobx"; @observer export class KeyValueBox extends React.Component { - public static LayoutString(fieldStr: string = "DataKey") { return FieldView.LayoutString(KeyValueBox, fieldStr) } + public static LayoutString(fieldStr: string = "DataKey") { return FieldView.LayoutString(KeyValueBox, fieldStr); } @observable private _keyInput: string = ""; @observable private _valueInput: string = ""; @@ -36,7 +36,7 @@ export class KeyValueBox extends React.Component { if (this._keyInput && this._valueInput) { let doc = this.props.Document.GetT(KeyStore.Data, Document); if (!doc || doc === FieldWaiting) { - return + return; } let realDoc = doc; @@ -55,8 +55,8 @@ export class KeyValueBox extends React.Component { realDoc.Set(new Key(this._keyInput), dataField); } } - this._keyInput = "" - this._valueInput = "" + this._keyInput = ""; + this._valueInput = ""; } } } @@ -73,7 +73,7 @@ export class KeyValueBox extends React.Component { createTable = () => { let doc = this.props.Document.GetT(KeyStore.Data, Document); if (!doc || doc === FieldWaiting) { - return Loading... + return Loading...; } let realDoc = doc; @@ -84,13 +84,13 @@ export class KeyValueBox extends React.Component { if (!(key in ids)) { ids[key] = key; } - }) + }); } let rows: JSX.Element[] = []; let i = 0; for (let key in ids) { - rows.push() + rows.push(); } return rows; } @@ -125,6 +125,6 @@ export class KeyValueBox extends React.Component { {this.newKeyValue()} - ) + ); } } \ No newline at end of file diff --git a/src/client/views/nodes/KeyValuePair.tsx b/src/client/views/nodes/KeyValuePair.tsx index c6a0a7296..a1050dc6e 100644 --- a/src/client/views/nodes/KeyValuePair.tsx +++ b/src/client/views/nodes/KeyValuePair.tsx @@ -1,14 +1,14 @@ import 'react-image-lightbox/style.css'; // This only needs to be imported once in your app import "./KeyValueBox.scss"; import "./KeyValuePair.scss"; -import React = require("react") +import React = require("react"); import { FieldViewProps, FieldView } from './FieldView'; import { Opt, Field } from '../../../fields/Field'; -import { observer } from "mobx-react" +import { observer } from "mobx-react"; import { observable, action } from 'mobx'; import { Document } from '../../../fields/Document'; import { Key } from '../../../fields/Key'; -import { Server } from "../../Server" +import { Server } from "../../Server"; import { EditableView } from "../EditableView"; import { CompileScript, ToField } from "../../util/Scripting"; import { Transform } from '../../util/Transform'; @@ -25,7 +25,7 @@ export interface KeyValuePairProps { export class KeyValuePair extends React.Component { @observable - private key: Opt + private key: Opt; constructor(props: KeyValuePairProps) { super(props); @@ -41,7 +41,7 @@ export class KeyValuePair extends React.Component { render() { if (!this.key) { - return error + return error; } let props: FieldViewProps = { @@ -55,7 +55,7 @@ export class KeyValuePair extends React.Component { onActiveChanged: emptyFunction, ScreenToLocalTransform: Transform.Identity, focus: emptyFunction, - } + }; let contents = ( ); @@ -101,6 +101,6 @@ export class KeyValuePair extends React.Component { return false; }}> - ) + ); } } \ No newline at end of file diff --git a/src/client/views/nodes/LinkBox.tsx b/src/client/views/nodes/LinkBox.tsx index 4791d6029..b016a3d48 100644 --- a/src/client/views/nodes/LinkBox.tsx +++ b/src/client/views/nodes/LinkBox.tsx @@ -2,8 +2,8 @@ import { observable, computed, action } from "mobx"; import React = require("react"); import { SelectionManager } from "../../util/SelectionManager"; import { observer } from "mobx-react"; -import './LinkBox.scss' -import { KeyStore } from '../../../fields/KeyStore' +import './LinkBox.scss'; +import { KeyStore } from '../../../fields/KeyStore'; import { props } from "bluebird"; import { DocumentView } from "./DocumentView"; import { Document } from "../../../fields/Document"; @@ -30,7 +30,7 @@ interface Props { linkName: String; pairedDoc: Document; type: String; - showEditor: () => void + showEditor: () => void; } @observer @@ -49,15 +49,16 @@ export class LinkBox extends React.Component { } else if (contextDoc instanceof Document) { this.props.pairedDoc.GetTAsync(KeyStore.Page, NumberField).then((pfield: any) => { contextDoc.GetTAsync(KeyStore.CurPage, NumberField).then((cfield: any) => { - if (pfield !== cfield) + if (pfield !== cfield) { contextDoc.SetNumber(KeyStore.CurPage, pfield.Data); + } let contextView = DocumentManager.Instance.getDocumentView(contextDoc); if (contextView) { contextView.props.focus(contextDoc); } else { CollectionDockingView.Instance.AddRightSplit(contextDoc); } - }) + }); }); } }); @@ -80,7 +81,7 @@ export class LinkBox extends React.Component { if (field) { field.Data.splice(field.Data.indexOf(this.props.linkDoc)); } - }) + }); } }); this.props.linkDoc.GetTAsync(KeyStore.LinkedToDocs, Document, field => { @@ -89,7 +90,7 @@ export class LinkBox extends React.Component { if (field) { field.Data.splice(field.Data.indexOf(this.props.linkDoc)); } - }) + }); } }); } @@ -117,6 +118,6 @@ export class LinkBox extends React.Component { - ) + ); } } \ No newline at end of file diff --git a/src/client/views/nodes/LinkEditor.tsx b/src/client/views/nodes/LinkEditor.tsx index 3f7b4bf2d..bde50fed8 100644 --- a/src/client/views/nodes/LinkEditor.tsx +++ b/src/client/views/nodes/LinkEditor.tsx @@ -2,8 +2,8 @@ import { observable, computed, action } from "mobx"; import React = require("react"); import { SelectionManager } from "../../util/SelectionManager"; import { observer } from "mobx-react"; -import './LinkEditor.scss' -import { KeyStore } from '../../../fields/KeyStore' +import './LinkEditor.scss'; +import { KeyStore } from '../../../fields/KeyStore'; import { props } from "bluebird"; import { DocumentView } from "./DocumentView"; import { Document } from "../../../fields/Document"; @@ -43,7 +43,7 @@ export class LinkEditor extends React.Component {
SAVE
- ) + ); } @action diff --git a/src/client/views/nodes/LinkMenu.tsx b/src/client/views/nodes/LinkMenu.tsx index 6c2d24630..ac09da305 100644 --- a/src/client/views/nodes/LinkMenu.tsx +++ b/src/client/views/nodes/LinkMenu.tsx @@ -13,7 +13,7 @@ import React = require("react"); interface Props { docView: DocumentView; - changeFlyout: () => void + changeFlyout: () => void; } @observer @@ -25,9 +25,9 @@ export class LinkMenu extends React.Component { return links.map(link => { let doc = link.GetT(key, Document); if (doc && doc !== FieldWaiting) { - return this._editingLink = link)} type={type} /> + return this._editingLink = link)} type={type} />; } - }) + }); } render() { @@ -43,11 +43,11 @@ export class LinkMenu extends React.Component { {this.renderLinkItems(linkFrom, KeyStore.LinkedFromDocs, "Source: ")} - ) + ); } else { return ( this._editingLink = undefined)}> - ) + ); } } diff --git a/src/client/views/nodes/PDFBox.tsx b/src/client/views/nodes/PDFBox.tsx index 774d9be3e..81ceb37f6 100644 --- a/src/client/views/nodes/PDFBox.tsx +++ b/src/client/views/nodes/PDFBox.tsx @@ -17,7 +17,7 @@ import { FieldView, FieldViewProps } from './FieldView'; import "./ImageBox.scss"; import "./PDFBox.scss"; import { Sticky } from './Sticky'; //you should look at sticky and annotation, because they are used here -import React = require("react") +import React = require("react"); import { SelectionManager } from "../../util/SelectionManager"; /** ALSO LOOK AT: Annotation.tsx, Sticky.tsx @@ -55,7 +55,7 @@ import { SelectionManager } from "../../util/SelectionManager"; export class PDFBox extends React.Component { public static LayoutString() { return FieldView.LayoutString(PDFBox); } - private _mainDiv = React.createRef() + private _mainDiv = React.createRef(); private _pdf = React.createRef(); @observable private _renderAsSvg = true; @@ -72,7 +72,7 @@ export class PDFBox extends React.Component { private _currTool: any; //keeps track of current tool button reference private _drawToolOn: boolean = false; //boolean that keeps track of the drawing tool - private _drawTool = React.createRef()//drawing tool button reference + private _drawTool = React.createRef();//drawing tool button reference private _colorTool = React.createRef(); //color button reference private _currColor: string = "black"; //current color that user selected (for ink/pen) @@ -85,7 +85,7 @@ export class PDFBox extends React.Component { @observable private _perPageInfo: Object[] = []; //stores pageInfo @observable private _pageInfo: any = { area: [], divs: [], anno: [] }; //divs is array of objects linked to anno - @observable private _currAnno: any = [] + @observable private _currAnno: any = []; @observable private _interactive: boolean = false; @observable private _loaded: boolean = false; @@ -168,24 +168,24 @@ export class PDFBox extends React.Component { let obj: Object = { parentDivs: [], spans: [] }; //@ts-ignore if (range.commonAncestorContainer.className === 'react-pdf__Page__textContent') { //multiline highlighting case - obj = this.highlightNodes(range.commonAncestorContainer.childNodes) + obj = this.highlightNodes(range.commonAncestorContainer.childNodes); } else { //single line highlighting case - let parentDiv = range.commonAncestorContainer.parentElement + let parentDiv = range.commonAncestorContainer.parentElement; if (parentDiv) { if (parentDiv.className === 'react-pdf__Page__textContent') { //when highlight is overwritten - obj = this.highlightNodes(parentDiv.childNodes) + obj = this.highlightNodes(parentDiv.childNodes); } else { parentDiv.childNodes.forEach((child) => { if (child.nodeName === 'SPAN') { //@ts-ignore - obj.parentDivs.push(parentDiv) + obj.parentDivs.push(parentDiv); //@ts-ignore - child.id = "highlighted" + child.id = "highlighted"; //@ts-ignore - obj.spans.push(child) + obj.spans.push(child); child.addEventListener("mouseover", this.onEnter); //adds mouseover annotation handler } - }) + }); } } } @@ -196,21 +196,21 @@ export class PDFBox extends React.Component { } highlightNodes = (nodes: NodeListOf) => { - let temp = { parentDivs: [], spans: [] } + let temp = { parentDivs: [], spans: [] }; nodes.forEach((div) => { div.childNodes.forEach((child) => { if (child.nodeName === 'SPAN') { //@ts-ignore - temp.parentDivs.push(div) + temp.parentDivs.push(div); //@ts-ignore - child.id = "highlighted" + child.id = "highlighted"; //@ts-ignore - temp.spans.push(child) + temp.spans.push(child); child.addEventListener("mouseover", this.onEnter); //adds mouseover annotation handler } - }) + }); - }) + }); return temp; } @@ -228,8 +228,8 @@ export class PDFBox extends React.Component { index = this._pageInfo.divs.indexOf(obj); } } - }) - }) + }); + }); if (this._pageInfo.anno.length >= index + 1) { if (this._currAnno.length === 0) { @@ -239,13 +239,13 @@ export class PDFBox extends React.Component { if (this._currAnno.length === 0) { //if there are no current annotation let div = span.offsetParent; //@ts-ignore - let divX = div.style.left + let divX = div.style.left; //@ts-ignore - let divY = div.style.top + let divY = div.style.top; //slicing "px" from the end divX = divX.slice(0, divX.length - 2); //gets X of the DIV element (parent of Span) divY = divY.slice(0, divY.length - 2); //gets Y of the DIV element (parent of Span) - let annotation = + let annotation = ; this._pageInfo.anno.push(annotation); this._currAnno.push(annotation); } @@ -263,7 +263,7 @@ export class PDFBox extends React.Component { this.makeEditableAndHighlight(color); } } catch (ex) { - this.makeEditableAndHighlight(color) + this.makeEditableAndHighlight(color); } } } @@ -305,7 +305,7 @@ export class PDFBox extends React.Component { } if (this._mainDiv.current) { - let sticky = + let sticky = ; this._pageInfo.area.push(sticky); } this._toolOn = false; @@ -404,19 +404,19 @@ export class PDFBox extends React.Component { if (e instanceof HTMLCanvasElement) { this._pdfCanvas = e; - this._pdfContext = e.getContext("2d") + this._pdfContext = e.getContext("2d"); } - }) + }); } - }) + }); } // bcz: the number of pages should really be set when the document is imported. this.props.Document.SetNumber(KeyStore.NumPages, page._transport.numPages); if (this._perPageInfo.length === 0) { //Makes sure it only runs once - this._perPageInfo = [...Array(page._transport.numPages)] + this._perPageInfo = [...Array(page._transport.numPages)]; } this._loaded = true; } diff --git a/src/client/views/nodes/Sticky.tsx b/src/client/views/nodes/Sticky.tsx index 4a4d69e90..11719831b 100644 --- a/src/client/views/nodes/Sticky.tsx +++ b/src/client/views/nodes/Sticky.tsx @@ -39,7 +39,7 @@ export class Sticky extends React.Component { document.addEventListener("pointermove", this.drawMove); document.addEventListener("pointerup", this.drawUp); } - }; + } //when user drags drawMove = (e: PointerEvent): void => { @@ -49,7 +49,7 @@ export class Sticky extends React.Component { //connects the point this.ctx.lineTo(x, y); this.ctx.stroke(); - }; + } /** * when user lifts the mouse, the drawing ends @@ -58,7 +58,7 @@ export class Sticky extends React.Component { this.ctx.closePath(); console.log(this.ctx); document.removeEventListener("pointermove", this.drawMove); - }; + } render() { return ( diff --git a/src/client/views/nodes/VideoBox.tsx b/src/client/views/nodes/VideoBox.tsx index a08b320e8..314af64c9 100644 --- a/src/client/views/nodes/VideoBox.tsx +++ b/src/client/views/nodes/VideoBox.tsx @@ -1,4 +1,4 @@ -import React = require("react") +import React = require("react"); import { observer } from "mobx-react"; import { FieldWaiting, Opt } from '../../../fields/Field'; import { VideoField } from '../../../fields/VideoField'; @@ -13,8 +13,8 @@ import { number } from "prop-types"; export class VideoBox extends React.Component { private _reactionDisposer: Opt; - private _videoRef = React.createRef() - public static LayoutString() { return FieldView.LayoutString(VideoBox) } + private _videoRef = React.createRef(); + public static LayoutString() { return FieldView.LayoutString(VideoBox); } constructor(props: FieldViewProps) { super(props); @@ -58,7 +58,7 @@ export class VideoBox extends React.Component { render() { let field = this.props.Document.GetT(this.props.fieldKey, VideoField); if (!field || field === FieldWaiting) { - return
Loading
+ return
Loading
; } let path = field.Data.href; trace(); @@ -73,6 +73,6 @@ export class VideoBox extends React.Component { } - ) + ); } } \ No newline at end of file diff --git a/src/client/views/nodes/WebBox.tsx b/src/client/views/nodes/WebBox.tsx index c1d389001..90ce72c41 100644 --- a/src/client/views/nodes/WebBox.tsx +++ b/src/client/views/nodes/WebBox.tsx @@ -1,9 +1,9 @@ import "./WebBox.scss"; -import React = require("react") +import React = require("react"); import { WebField } from '../../../fields/WebField'; import { FieldViewProps, FieldView } from './FieldView'; import { FieldWaiting } from '../../../fields/Field'; -import { observer } from "mobx-react" +import { observer } from "mobx-react"; import { computed } from 'mobx'; import { KeyStore } from '../../../fields/KeyStore'; @@ -33,6 +33,6 @@ export class WebBox extends React.Component { return (
{content} -
) + ); } } \ No newline at end of file diff --git a/src/debug/Test.tsx b/src/debug/Test.tsx index c8de33f41..11f2b0c4e 100644 --- a/src/debug/Test.tsx +++ b/src/debug/Test.tsx @@ -1,10 +1,10 @@ import * as React from 'react'; import * as ReactDOM from 'react-dom'; -import JsxParser from 'react-jsx-parser' +import JsxParser from 'react-jsx-parser'; class Hello extends React.Component<{ firstName: string, lastName: string }> { render() { - return
Hello {this.props.firstName} {this.props.lastName}
+ return
Hello {this.props.firstName} {this.props.lastName}
; } } @@ -16,8 +16,8 @@ class Test extends React.Component { firstName: "First", lastName: "Last" } - } - return + }; + return ; } } diff --git a/src/debug/Viewer.tsx b/src/debug/Viewer.tsx index f13cccd24..857da1ebb 100644 --- a/src/debug/Viewer.tsx +++ b/src/debug/Viewer.tsx @@ -40,22 +40,22 @@ class ListViewer extends React.Component<{ field: ListField }>{
{this.props.field.Data.map(field => )}
- ) + ); } else { - content = <>[...] ({this.props.field.Id}) + content = <>[...] ({this.props.field.Id}); } return (
{content}
- ) + ); } } @observer class DocumentViewer extends React.Component<{ field: Document }> { - private keyMap: ObservableMap = new ObservableMap + private keyMap: ObservableMap = new ObservableMap; private disposer?: Lambda; @@ -67,12 +67,12 @@ class DocumentViewer extends React.Component<{ field: Document }> { if (field && field instanceof Key) { this.keyMap.set(id, field); } - }) + }); } }); - } - this.disposer = this.props.field._proxies.observe(f) - f() + }; + this.disposer = this.props.field._proxies.observe(f); + f(); } componentWillUnmount() { @@ -89,8 +89,8 @@ class DocumentViewer extends React.Component<{ field: Document }> { ({key ? key.Name : kv[0]}): - ) - }) + ); + }); return (
Document ({this.props.field.Id}) @@ -98,7 +98,7 @@ class DocumentViewer extends React.Component<{ field: Document }> { {fields}
- ) + ); } } @@ -111,15 +111,15 @@ class DebugViewer extends React.Component<{ fieldId: string }> { private error?: string; constructor(props: { fieldId: string }) { - super(props) - this.update() + super(props); + this.update(); } update() { Server.GetField(this.props.fieldId, action((field: Opt) => { this.field = field; if (!field) { - this.error = `Field with id ${this.props.fieldId} not found` + this.error = `Field with id ${this.props.fieldId} not found`; } })); @@ -130,20 +130,20 @@ class DebugViewer extends React.Component<{ fieldId: string }> { if (this.field) { // content = this.field.ToJson(); if (this.field instanceof ListField) { - content = () + content = (); } else if (this.field instanceof Document) { - content = () + content = (); } else if (this.field instanceof BasicField) { - content = () + content = (); } else if (this.field instanceof Key) { - content = () + content = (); } else { - content = (Unrecognized field type) + content = (Unrecognized field type); } } else if (this.error) { - content = Field {this.props.fieldId} not found + content = Field {this.props.fieldId} not found ; } else { - content = Field loading: {this.props.fieldId} + content = Field loading: {this.props.fieldId}; } return content; } @@ -165,8 +165,8 @@ class Viewer extends React.Component { @action onKeyPress = (e: React.KeyboardEvent) => { if (e.key === "Enter") { - this.ids.push(this.idToAdd) - this.idToAdd = "" + this.ids.push(this.idToAdd); + this.idToAdd = ""; } } @@ -180,7 +180,7 @@ class Viewer extends React.Component { {this.ids.map(id => )} - ) + ); } } diff --git a/src/fields/AudioField.ts b/src/fields/AudioField.ts index 252a5b74e..996d2556d 100644 --- a/src/fields/AudioField.ts +++ b/src/fields/AudioField.ts @@ -25,7 +25,7 @@ export class AudioField extends BasicField { type: Types.Audio, data: this.Data.href, _id: this.Id - } + }; } } \ No newline at end of file diff --git a/src/fields/BasicField.ts b/src/fields/BasicField.ts index 3083a1937..17b1fc4e8 100644 --- a/src/fields/BasicField.ts +++ b/src/fields/BasicField.ts @@ -1,4 +1,4 @@ -import { Field, FieldId } from "./Field" +import { Field, FieldId } from "./Field"; import { observable, computed, action } from "mobx"; import { Server } from "../client/Server"; import { UndoManager } from "../client/util/UndoManager"; @@ -9,7 +9,7 @@ export abstract class BasicField extends Field { this.data = data; if (save) { - Server.UpdateField(this) + Server.UpdateField(this); } } @@ -36,7 +36,7 @@ export abstract class BasicField extends Field { UndoManager.AddEvent({ undo: () => this.Data = oldValue, redo: () => this.Data = value - }) + }); Server.UpdateField(this); } diff --git a/src/fields/Document.ts b/src/fields/Document.ts index 4fa478f32..4584660fb 100644 --- a/src/fields/Document.ts +++ b/src/fields/Document.ts @@ -37,21 +37,24 @@ export class Document extends Field { } } - public Width = () => this.GetNumber(KeyStore.Width, 0) + public Width = () => this.GetNumber(KeyStore.Width, 0); public Height = () => this.GetNumber(KeyStore.Height, this.GetNumber(KeyStore.NativeWidth, 0) ? (this.GetNumber(KeyStore.NativeHeight, 0) / this.GetNumber(KeyStore.NativeWidth, 0)) * this.GetNumber(KeyStore.Width, 0) : 0); - public Scale = () => this.GetNumber(KeyStore.Scale, 1) + public Scale = () => this.GetNumber(KeyStore.Scale, 1); @computed public get Title(): string { let title = this.Get(KeyStore.Title, true); - if (title) - if (title !== FieldWaiting && title instanceof TextField) + if (title) { + if (title !== FieldWaiting && title instanceof TextField) { return title.Data; + } else return "-waiting-"; + } let parTitle = this.GetT(KeyStore.Title, TextField); - if (parTitle) + if (parTitle) { if (parTitle !== FieldWaiting) return parTitle.Data + ".alias"; else return "-waiting-.alias"; + } return "-untitled-"; } @@ -398,11 +401,13 @@ export class Document extends Field { } } else - if (field instanceof Document) // ... TODO bcz: should we copy documents or reference them - copy.Set(key!, field) - else if (field) - copy.Set(key!, field.Copy()) - }) + if (field instanceof Document) { // ... TODO bcz: should we copy documents or reference them + copy.Set(key!, field); + } + else if (field) { + copy.Set(key!, field.Copy()); + } + }); } }); return copy; diff --git a/src/fields/DocumentReference.ts b/src/fields/DocumentReference.ts index 9d3c209b4..6c0c1ef82 100644 --- a/src/fields/DocumentReference.ts +++ b/src/fields/DocumentReference.ts @@ -52,6 +52,6 @@ export class DocumentReference extends Field { type: Types.DocumentReference, data: this.document.Id, _id: this.Id - } + }; } } \ No newline at end of file diff --git a/src/fields/Field.ts b/src/fields/Field.ts index 0d0e56f77..d9db23b9e 100644 --- a/src/fields/Field.ts +++ b/src/fields/Field.ts @@ -65,5 +65,5 @@ export abstract class Field { abstract Copy(): Field; - abstract ToJson(): { _id: string, type: Types, data: any } + abstract ToJson(): { _id: string, type: Types, data: any }; } \ No newline at end of file diff --git a/src/fields/HtmlField.ts b/src/fields/HtmlField.ts index 7cbdf7e58..65665cf7a 100644 --- a/src/fields/HtmlField.ts +++ b/src/fields/HtmlField.ts @@ -20,6 +20,6 @@ export class HtmlField extends BasicField { type: Types.Html, data: this.Data, _id: this.Id, - } + }; } } \ No newline at end of file diff --git a/src/fields/ImageField.ts b/src/fields/ImageField.ts index ef616b2ad..dd843026f 100644 --- a/src/fields/ImageField.ts +++ b/src/fields/ImageField.ts @@ -24,6 +24,6 @@ export class ImageField extends BasicField { type: Types.Image, data: this.Data.href, _id: this.Id - } + }; } } \ No newline at end of file diff --git a/src/fields/InkField.ts b/src/fields/InkField.ts index 2a4ed18e7..ab706ee30 100644 --- a/src/fields/InkField.ts +++ b/src/fields/InkField.ts @@ -36,7 +36,7 @@ export class InkField extends BasicField { type: Types.Ink, data: this.Data, _id: this.Id, - } + }; } UpdateFromServer(data: any) { diff --git a/src/fields/Key.ts b/src/fields/Key.ts index 00d78d516..c7f806b88 100644 --- a/src/fields/Key.ts +++ b/src/fields/Key.ts @@ -1,4 +1,4 @@ -import { Field, FieldId } from "./Field" +import { Field, FieldId } from "./Field"; import { Utils } from "../Utils"; import { observable } from "mobx"; import { Types } from "../server/Message"; @@ -16,7 +16,7 @@ export class Key extends Field { this.name = name; if (save) { - Server.UpdateField(this) + Server.UpdateField(this); } } @@ -45,6 +45,6 @@ export class Key extends Field { type: Types.Key, data: this.name, _id: this.Id - } + }; } } \ No newline at end of file diff --git a/src/fields/KeyStore.ts b/src/fields/KeyStore.ts index e24e9c8ec..425408273 100644 --- a/src/fields/KeyStore.ts +++ b/src/fields/KeyStore.ts @@ -56,8 +56,9 @@ export namespace KeyStore { ]; export function KeyLookup(keyid: string) { for (const key of KeyList) { - if (key.Id === keyid) + if (key.Id === keyid) { return key; + } } return undefined; } diff --git a/src/fields/ListField.ts b/src/fields/ListField.ts index 815a3df73..b6eab5f86 100644 --- a/src/fields/ListField.ts +++ b/src/fields/ListField.ts @@ -7,7 +7,7 @@ import { Field, FieldId } from "./Field"; import { FieldMap } from "../client/SocketStub"; export class ListField extends BasicField { - private _proxies: string[] = [] + private _proxies: string[] = []; constructor(data: T[] = [], id?: FieldId, save: boolean = true) { super(data, save, id); this.updateProxies(); @@ -22,23 +22,24 @@ export class ListField extends BasicField { private observeDisposer: Lambda | undefined; private observeList(): void { if (this.observeDisposer) { - this.observeDisposer() + this.observeDisposer(); } this.observeDisposer = observe(this.Data as IObservableArray, (change: IArrayChange | IArraySplice) => { - this.updateProxies() + this.updateProxies(); if (change.type === "splice") { UndoManager.AddEvent({ undo: () => this.Data.splice(change.index, change.addedCount, ...change.removed), redo: () => this.Data.splice(change.index, change.removedCount, ...change.added) - }) + }); } else { UndoManager.AddEvent({ undo: () => this.Data[change.index] = change.oldValue, redo: () => this.Data[change.index] = change.newValue - }) + }); } - if (!this._processingServerUpdate) + if (!this._processingServerUpdate) { Server.UpdateField(this); + } }); } @@ -78,19 +79,23 @@ export class ListField extends BasicField { var proxies = this._proxies.map(p => p); var added = this.data.length < this._proxies.length; var deleted = this.data.length > this._proxies.length; - for (let i = 0; i < dataids.length && added; i++) + for (let i = 0; i < dataids.length && added; i++) { added = proxies.indexOf(dataids[i]) !== -1; - for (let i = 0; i < this._proxies.length && deleted; i++) + } + for (let i = 0; i < this._proxies.length && deleted; i++) { deleted = dataids.indexOf(proxies[i]) !== -1; + } this._processingServerUpdate = true; for (let i = 0; i < proxies.length && added; i++) { - if (dataids.indexOf(proxies[i]) === -1) + if (dataids.indexOf(proxies[i]) === -1) { this.Data.splice(i, 0, fields[proxies[i]] as T); + } } for (let i = dataids.length - 1; i >= 0 && deleted; i--) { - if (proxies.indexOf(dataids[i]) === -1) + if (proxies.indexOf(dataids[i]) === -1) { this.Data.splice(i, 1); + } } if (!added && !deleted) {// otherwise, just rebuild the whole list this.setData(proxies.map(id => fields[id] as T)); @@ -98,7 +103,7 @@ export class ListField extends BasicField { this._processingServerUpdate = false; } callback(this); - })) + })); } ToScriptString(): string { @@ -114,12 +119,12 @@ export class ListField extends BasicField { type: Types.List, data: this._proxies || [], _id: this.Id - } + }; } static FromJson(id: string, ids: string[]): ListField { let list = new ListField([], id, false); list._proxies = ids; - return list + return list; } } \ No newline at end of file diff --git a/src/fields/NumberField.ts b/src/fields/NumberField.ts index e0c8648de..45b920e31 100644 --- a/src/fields/NumberField.ts +++ b/src/fields/NumberField.ts @@ -1,4 +1,4 @@ -import { BasicField } from "./BasicField" +import { BasicField } from "./BasicField"; import { Types } from "../server/Message"; import { FieldId } from "./Field"; @@ -20,6 +20,6 @@ export class NumberField extends BasicField { _id: this.Id, type: Types.Number, data: this.Data - } + }; } } \ No newline at end of file diff --git a/src/fields/PDFField.ts b/src/fields/PDFField.ts index 436c1cf2b..65e179894 100644 --- a/src/fields/PDFField.ts +++ b/src/fields/PDFField.ts @@ -1,6 +1,6 @@ import { BasicField } from "./BasicField"; import { Field, FieldId } from "./Field"; -import { observable } from "mobx" +import { observable } from "mobx"; import { Types } from "../server/Message"; @@ -27,7 +27,7 @@ export class PDFField extends BasicField { type: Types.PDF, data: this.Data.href, _id: this.Id - } + }; } @observable diff --git a/src/fields/RichTextField.ts b/src/fields/RichTextField.ts index 5efb43314..6f7b3074a 100644 --- a/src/fields/RichTextField.ts +++ b/src/fields/RichTextField.ts @@ -20,7 +20,7 @@ export class RichTextField extends BasicField { type: Types.RichText, data: this.Data, _id: this.Id - } + }; } } \ No newline at end of file diff --git a/src/fields/TextField.ts b/src/fields/TextField.ts index 71d8ea310..69d26f42f 100644 --- a/src/fields/TextField.ts +++ b/src/fields/TextField.ts @@ -1,4 +1,4 @@ -import { BasicField } from "./BasicField" +import { BasicField } from "./BasicField"; import { FieldId } from "./Field"; import { Types } from "../server/Message"; @@ -20,6 +20,6 @@ export class TextField extends BasicField { type: Types.Text, data: this.Data, _id: this.Id - } + }; } } \ No newline at end of file diff --git a/src/fields/TupleField.ts b/src/fields/TupleField.ts index e2162c751..ad0f6f350 100644 --- a/src/fields/TupleField.ts +++ b/src/fields/TupleField.ts @@ -21,7 +21,7 @@ export class TupleField extends BasicField<[T, U]> { UndoManager.AddEvent({ undo: () => this.Data[change.index] = change.oldValue, redo: () => this.Data[change.index] = change.newValue - }) + }); Server.UpdateField(this); } else { throw new Error("Why are you messing with the length of a tuple, huh?"); @@ -31,7 +31,7 @@ export class TupleField extends BasicField<[T, U]> { protected setData(value: [T, U]) { if (this.observeDisposer) { - this.observeDisposer() + this.observeDisposer(); } this.data = observable(value) as (T | U)[] as [T, U]; this.observeTuple(); @@ -54,6 +54,6 @@ export class TupleField extends BasicField<[T, U]> { type: Types.Tuple, data: this.Data, _id: this.Id - } + }; } } \ No newline at end of file diff --git a/src/fields/VideoField.ts b/src/fields/VideoField.ts index 992cc1641..d7cd7e968 100644 --- a/src/fields/VideoField.ts +++ b/src/fields/VideoField.ts @@ -24,7 +24,7 @@ export class VideoField extends BasicField { type: Types.Video, data: this.Data.href, _id: this.Id - } + }; } } \ No newline at end of file diff --git a/src/fields/WebField.ts b/src/fields/WebField.ts index 0cbcc6d33..6023e9e6b 100644 --- a/src/fields/WebField.ts +++ b/src/fields/WebField.ts @@ -24,7 +24,7 @@ export class WebField extends BasicField { type: Types.Web, data: this.Data.href, _id: this.Id - } + }; } } \ No newline at end of file diff --git a/src/mobile/ImageUpload.tsx b/src/mobile/ImageUpload.tsx index c3684a0eb..ec89a1194 100644 --- a/src/mobile/ImageUpload.tsx +++ b/src/mobile/ImageUpload.tsx @@ -22,7 +22,7 @@ import { Opt } from '../fields/Field'; // } const onFileLoad = async (file: any) => { - let imgPrev = document.getElementById("img_preview") + let imgPrev = document.getElementById("img_preview"); if (imgPrev) { let files: File[] = file.target.files; if (files.length !== 0) { @@ -30,15 +30,15 @@ const onFileLoad = async (file: any) => { let formData = new FormData(); formData.append("file", files[0]); - const upload = window.location.origin + "/upload" + const upload = window.location.origin + "/upload"; const res = await fetch(upload, { method: 'POST', body: formData }); const json = await res.json(); json.map(async (file: any) => { - let path = window.location.origin + file - var doc: Document = Documents.ImageDocument(path, { nativeWidth: 200, width: 200 }) + let path = window.location.origin + file; + var doc: Document = Documents.ImageDocument(path, { nativeWidth: 200, width: 200 }); const res = await rp.get(ServerUtils.prepend(RouteStore.getUserDocumentId)); if (!res) { @@ -47,12 +47,12 @@ const onFileLoad = async (file: any) => { const field = await Server.GetField(res); let pending: Opt; if (field instanceof Document) { - pending = await field.GetTAsync(KeyStore.OptionalRightCollection, Document) + pending = await field.GetTAsync(KeyStore.OptionalRightCollection, Document); } if (pending) { pending.GetOrCreateAsync(KeyStore.Data, ListField, list => { list.Data.push(doc); - }) + }); } }); @@ -61,7 +61,7 @@ const onFileLoad = async (file: any) => { //imgPrev.setAttribute("src", window.location.origin + files[0].name) } } -} +}; ReactDOM.render((
diff --git a/src/server/Client.ts b/src/server/Client.ts index 6b8841658..02402a5a0 100644 --- a/src/server/Client.ts +++ b/src/server/Client.ts @@ -2,14 +2,14 @@ import { computed } from "mobx"; export class Client { constructor(guid: string) { - this.guid = guid + this.guid = guid; } private guid: string; @computed public get GUID(): string { - return this.guid + return this.guid; } } \ No newline at end of file diff --git a/src/server/authentication/config/passport.ts b/src/server/authentication/config/passport.ts index b6fe15655..d42741410 100644 --- a/src/server/authentication/config/passport.ts +++ b/src/server/authentication/config/passport.ts @@ -1,4 +1,4 @@ -import * as passport from 'passport' +import * as passport from 'passport'; import * as passportLocal from 'passport-local'; import * as mongodb from 'mongodb'; import * as _ from "lodash"; @@ -22,7 +22,7 @@ passport.deserializeUser((id, done) => { passport.use(new LocalStrategy({ usernameField: 'email', passReqToCallback: true }, (req, email, password, done) => { User.findOne({ email: email.toLowerCase() }, (error: any, user: any) => { if (error) return done(error); - if (!user) return done(undefined, false, { message: "Invalid email or password" }) // invalid email + if (!user) return done(undefined, false, { message: "Invalid email or password" }); // invalid email user.comparePassword(password, (error: Error, isMatch: boolean) => { if (error) return done(error); if (!isMatch) return done(undefined, false, { message: "Invalid email or password" }); // invalid password @@ -37,7 +37,7 @@ export let isAuthenticated = (req: Request, res: Response, next: NextFunction) = return next(); } return res.redirect(RouteStore.login); -} +}; export let isAuthorized = (req: Request, res: Response, next: NextFunction) => { const provider = req.path.split("/").slice(-1)[0]; diff --git a/src/server/authentication/controllers/WorkspacesMenu.tsx b/src/server/authentication/controllers/WorkspacesMenu.tsx index 835432c8e..b08c1aebe 100644 --- a/src/server/authentication/controllers/WorkspacesMenu.tsx +++ b/src/server/authentication/controllers/WorkspacesMenu.tsx @@ -1,7 +1,7 @@ import * as React from 'react'; import { observable, action, configure, reaction, computed, ObservableMap, runInAction } from 'mobx'; import { observer } from "mobx-react"; -import './WorkspacesMenu.css' +import './WorkspacesMenu.css'; import { Document } from '../../../fields/Document'; import { EditableView } from '../../../client/views/EditableView'; import { KeyStore } from '../../../fields/KeyStore'; diff --git a/src/server/authentication/controllers/user_controller.ts b/src/server/authentication/controllers/user_controller.ts index 2bbb334b5..1dacdf3fa 100644 --- a/src/server/authentication/controllers/user_controller.ts +++ b/src/server/authentication/controllers/user_controller.ts @@ -109,12 +109,12 @@ export let postLogin = (req: Request, res: Response, next: NextFunction) => { } passport.authenticate("local", (err: Error, user: DashUserModel, info: IVerifyOptions) => { - if (err) { next(err); return } + if (err) { next(err); return; } if (!user) { return res.redirect(RouteStore.signup); } req.logIn(user, (err) => { - if (err) { next(err); return } + if (err) { next(err); return; } res.redirect(RouteStore.home); }); })(req, res, next); @@ -132,14 +132,14 @@ export let getLogout = (req: Request, res: Response) => { sess.destroy((err) => { if (err) { console.log(err); } }); } res.redirect(RouteStore.login); -} +}; export let getForgot = function (req: Request, res: Response) { res.render("forgot.pug", { title: "Recover Password", user: req.user, }); -} +}; export let postForgot = function (req: Request, res: Response, next: NextFunction) { const email = req.body.email; @@ -152,14 +152,14 @@ export let postForgot = function (req: Request, res: Response, next: NextFunctio return; } done(null, buffer.toString('hex')); - }) + }); }, function (token: string, done: any) { User.findOne({ email }, function (err, user: DashUserModel) { if (!user) { // NO ACCOUNT WITH SUBMITTED EMAIL res.redirect(RouteStore.forgot); - return + return; } user.passwordResetToken = token; user.passwordResetExpires = new Date(Date.now() + 3600000); // 1 HOUR @@ -193,8 +193,8 @@ export let postForgot = function (req: Request, res: Response, next: NextFunctio ], function (err) { if (err) return next(err); res.redirect(RouteStore.forgot); - }) -} + }); +}; export let getReset = function (req: Request, res: Response) { User.findOne({ passwordResetToken: req.params.token, passwordResetExpires: { $gt: Date.now() } }, function (err, user: DashUserModel) { @@ -206,7 +206,7 @@ export let getReset = function (req: Request, res: Response) { user: req.user, }); }); -} +}; export let postReset = function (req: Request, res: Response) { async.waterfall([ @@ -263,4 +263,4 @@ export let postReset = function (req: Request, res: Response) { ], function (err) { res.redirect(RouteStore.login); }); -} \ No newline at end of file +}; \ No newline at end of file diff --git a/src/server/authentication/models/current_user_utils.ts b/src/server/authentication/models/current_user_utils.ts index 0ac85b446..13eddafbf 100644 --- a/src/server/authentication/models/current_user_utils.ts +++ b/src/server/authentication/models/current_user_utils.ts @@ -70,7 +70,7 @@ export class CurrentUserUtils { let doc = new Document(id); doc.Set(KeyStore.Workspaces, new ListField()); - doc.Set(KeyStore.OptionalRightCollection, Documents.SchemaDocument([], { title: "Pending documents" })) + doc.Set(KeyStore.OptionalRightCollection, Documents.SchemaDocument([], { title: "Pending documents" })); return doc; } @@ -81,7 +81,7 @@ export class CurrentUserUtils { CurrentUserUtils.curr_id = obj.id as string; CurrentUserUtils.curr_email = obj.email as string; } else { - throw new Error("There should be a user! Why does Dash think there isn't one?") + throw new Error("There should be a user! Why does Dash think there isn't one?"); } }); let userDocPromise = rp.get(ServerUtils.prepend(RouteStore.getUserDocumentId)).then(id => { @@ -92,9 +92,9 @@ export class CurrentUserUtils { } else { this.user_document = this.createUserDocument(id); } - }) + }); } else { - throw new Error("There should be a user id! Why does Dash think there isn't one?") + throw new Error("There should be a user id! Why does Dash think there isn't one?"); } }); return Promise.all([userPromise, userDocPromise]); diff --git a/src/server/authentication/models/user_model.ts b/src/server/authentication/models/user_model.ts index 81580aad5..1c6926517 100644 --- a/src/server/authentication/models/user_model.ts +++ b/src/server/authentication/models/user_model.ts @@ -2,7 +2,7 @@ import * as bcrypt from "bcrypt-nodejs"; //@ts-ignore import * as mongoose from "mongoose"; -var url = 'mongodb://localhost:27017/Dash' +var url = 'mongodb://localhost:27017/Dash'; mongoose.connect(url, { useNewUrlParser: true }); diff --git a/src/server/database.ts b/src/server/database.ts index 415acc09a..0bc806253 100644 --- a/src/server/database.ts +++ b/src/server/database.ts @@ -1,15 +1,15 @@ import * as mongodb from 'mongodb'; export class Database { - public static Instance = new Database() + public static Instance = new Database(); private MongoClient = mongodb.MongoClient; private url = 'mongodb://localhost:27017/Dash'; private db?: mongodb.Db; constructor() { this.MongoClient.connect(this.url, (err, client) => { - this.db = client.db() - }) + this.db = client.db(); + }); } private currentWrites: { [_id: string]: Promise } = {}; @@ -30,19 +30,19 @@ export class Database { // console.log(JSON.stringify(res.result)); // } if (this.currentWrites[id] === promise) { - delete this.currentWrites[id] + delete this.currentWrites[id]; } if (resolve) { resolve(); } callback(); }); - } + }; if (prom) { const newProm: Promise = prom.then(() => run(newProm)); this.currentWrites[id] = newProm; } else { - const newProm: Promise = new Promise(res => run(newProm, res)) + const newProm: Promise = new Promise(res => run(newProm, res)); this.currentWrites[id] = newProm; } } @@ -61,7 +61,7 @@ export class Database { let collection = this.db.collection(collectionName); collection.deleteMany({}, res); } - }) + }); } public insert(kvpairs: any) { @@ -70,7 +70,7 @@ export class Database { collection.insertOne(kvpairs, (err: any, res: any) => { if (err) { // console.log(err) - return + return; } }); } @@ -81,30 +81,30 @@ export class Database { if (this.db) { let collection = this.db.collection('documents'); collection.findOne({ _id: id }, (err: any, res: any) => { - result = res + result = res; if (!result) { - fn(undefined) + fn(undefined); } - fn(result) - }) - }; + fn(result); + }); + } } public getDocuments(ids: string[], fn: (res: any) => void) { if (this.db) { let collection = this.db.collection('documents'); - let cursor = collection.find({ _id: { "$in": ids } }) + let cursor = collection.find({ _id: { "$in": ids } }); cursor.toArray((err, docs) => { if (err) { console.log(err.message); console.log(err.errmsg); } fn(docs); - }) - }; + }); + } } public print() { - console.log("db says hi!") + console.log("db says hi!"); } } diff --git a/src/server/index.ts b/src/server/index.ts index f60e6e293..b9c7448b4 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -1,10 +1,10 @@ -import * as express from 'express' -const app = express() -import * as webpack from 'webpack' +import * as express from 'express'; +const app = express(); +import * as webpack from 'webpack'; import * as wdm from 'webpack-dev-middleware'; import * as whm from 'webpack-hot-middleware'; -import * as path from 'path' -import * as formidable from 'formidable' +import * as path from 'path'; +import * as formidable from 'formidable'; import * as passport from 'passport'; import { MessageStore, Transferable } from "./Message"; import { Client } from './Client'; @@ -13,7 +13,7 @@ import { Utils } from '../Utils'; import { ObservableMap } from 'mobx'; import { FieldId, Field } from '../fields/Field'; import { Database } from './database'; -import * as io from 'socket.io' +import * as io from 'socket.io'; import { getLogin, postLogin, getSignup, postSignup, getLogout, postReset, getForgot, postForgot, getReset } from './authentication/controllers/user_controller'; const config = require('../../webpack.config'); const compiler = webpack(config); @@ -31,19 +31,19 @@ const MongoStore = require('connect-mongo')(session); const mongoose = require('mongoose'); import { DashUserModel } from './authentication/models/user_model'; import * as fs from 'fs'; -import * as request from 'request' +import * as request from 'request'; import { RouteStore } from './RouteStore'; -import { exec } from 'child_process' +import { exec } from 'child_process'; const download = (url: string, dest: fs.PathLike) => { request.get(url).pipe(fs.createWriteStream(dest)); -} +}; const mongoUrl = 'mongodb://localhost:27017/Dash'; -mongoose.connect(mongoUrl) +mongoose.connect(mongoUrl); mongoose.connection.on('connected', function () { console.log("connected"); -}) +}); // SESSION MANAGEMENT AND AUTHENTICATION MIDDLEWARE // ORDER OF IMPORTS MATTERS @@ -73,7 +73,7 @@ app.use((req, res, next) => { app.get("/hello", (req, res) => { res.send("

Hello

"); -}) +}); enum Method { GET, @@ -98,7 +98,7 @@ function addSecureRoute(method: Method, const dashUser: DashUserModel = req.user; if (!dashUser) return onRejection(res); handler(dashUser, res, req); - } + }; subscribers.forEach(route => { switch (method) { case Method.GET: @@ -116,7 +116,7 @@ function addSecureRoute(method: Method, let FieldStore: ObservableMap = new ObservableMap(); app.use(express.static(__dirname + RouteStore.public)); -app.use(RouteStore.images, express.static(__dirname + RouteStore.public)) +app.use(RouteStore.images, express.static(__dirname + RouteStore.public)); app.get("/pull", (req, res) => { exec('"C:\\Program Files\\Git\\git-bash.exe" -c "git pull"', (err, stdout, stderr) => { @@ -125,7 +125,7 @@ app.get("/pull", (req, res) => { return; } res.redirect("/"); - }) + }); }); // GETTERS @@ -178,13 +178,13 @@ addSecureRoute( addSecureRoute( Method.POST, (user, res, req) => { - let form = new formidable.IncomingForm() - form.uploadDir = __dirname + "/public/files/" - form.keepExtensions = true + let form = new formidable.IncomingForm(); + form.uploadDir = __dirname + "/public/files/"; + form.keepExtensions = true; // let path = req.body.path; - console.log("upload") + console.log("upload"); form.parse(req, (err, fields, files) => { - console.log("parsing") + console.log("parsing"); let names: any[] = []; for (const name in files) { let file = files[name]; @@ -211,8 +211,8 @@ app.post(RouteStore.login, postLogin); app.get(RouteStore.logout, getLogout); // FORGOT PASSWORD EMAIL HANDLING -app.get(RouteStore.forgot, getForgot) -app.post(RouteStore.forgot, postForgot) +app.get(RouteStore.forgot, getForgot); +app.post(RouteStore.forgot, postForgot); // RESET PASSWORD EMAIL HANDLING app.get(RouteStore.reset, getReset); @@ -232,32 +232,32 @@ app.get(RouteStore.deleteAll, (req, res) => { app.use(wdm(compiler, { publicPath: config.output.publicPath -})) +})); -app.use(whm(compiler)) +app.use(whm(compiler)); // start the Express server app.listen(port, () => { console.log(`server started at http://localhost:${port}`); -}) +}); const server = io(); interface Map { [key: string]: Client; } -let clients: Map = {} +let clients: Map = {}; server.on("connection", function (socket: Socket) { - console.log("a user has connected") + console.log("a user has connected"); - Utils.Emit(socket, MessageStore.Foo, "handshooken") + Utils.Emit(socket, MessageStore.Foo, "handshooken"); - Utils.AddServerHandler(socket, MessageStore.Bar, barReceived) - Utils.AddServerHandler(socket, MessageStore.SetField, (args) => setField(socket, args)) - Utils.AddServerHandlerCallback(socket, MessageStore.GetField, getField) - Utils.AddServerHandlerCallback(socket, MessageStore.GetFields, getFields) - Utils.AddServerHandler(socket, MessageStore.DeleteAll, deleteFields) -}) + Utils.AddServerHandler(socket, MessageStore.Bar, barReceived); + Utils.AddServerHandler(socket, MessageStore.SetField, (args) => setField(socket, args)); + Utils.AddServerHandlerCallback(socket, MessageStore.GetField, getField); + Utils.AddServerHandlerCallback(socket, MessageStore.GetFields, getFields); + Utils.AddServerHandler(socket, MessageStore.DeleteAll, deleteFields); +}); function deleteFields() { return Database.Instance.deleteAll(); @@ -276,12 +276,12 @@ function barReceived(guid: String) { function getField([id, callback]: [string, (result: any) => void]) { Database.Instance.getDocument(id, (result: any) => { if (result) { - callback(result) + callback(result); } else { - callback(undefined) + callback(undefined); } - }) + }); } function getFields([ids, callback]: [string[], (result: any) => void]) { @@ -291,7 +291,7 @@ function getFields([ids, callback]: [string[], (result: any) => void]) { function setField(socket: Socket, newValue: Transferable) { Database.Instance.update(newValue._id, newValue, () => { socket.broadcast.emit(MessageStore.SetField.Message, newValue); - }) + }); } server.listen(serverPort); diff --git a/test/test.ts b/test/test.ts index db24cae5f..16cace026 100644 --- a/test/test.ts +++ b/test/test.ts @@ -1,6 +1,6 @@ import { NumberField } from "../src/fields/NumberField"; import { expect } from 'chai'; -import 'mocha' +import 'mocha'; import { Key } from "../src/fields/Key"; import { Document } from "../src/fields/Document"; import { autorun, reaction } from "mobx"; @@ -17,7 +17,7 @@ describe('Number Controller', () => { it('Should update', () => { const numController = new NumberField(15); let ran = false; - reaction(() => numController.Data, (data) => { ran = true; }) + reaction(() => numController.Data, (data) => { ran = true; }); expect(ran).to.equal(false); numController.Data = 5; expect(ran).to.equal(true); @@ -42,7 +42,7 @@ describe("Document", () => { let key = new Key("Test"); let key2 = new Key("Test2"); let ran = false; - reaction(() => doc.Get(key), (field) => { ran = true }); + reaction(() => doc.Get(key), (field) => { ran = true; }); expect(ran).to.equal(false); doc.Set(key2, new NumberField(4)); diff --git a/tslint.json b/tslint.json index 54876916e..aa4dee4e5 100644 --- a/tslint.json +++ b/tslint.json @@ -27,14 +27,14 @@ "arrow-return-shorthand": true, // "object-literal-shorthand": true, // "object-literal-sort-keys": true, - // "semicolon": [ - // true, - // "always" - // ], - // "curly": [ - // true, - // "ignore-same-line" - // ], + "semicolon": [ + true, + "always" + ], + "curly": [ + true, + "ignore-same-line" + ], // "quotemark": [ // true, // "double", -- cgit v1.2.3-70-g09d2 From cf86d1b7917f0317af550293344f784a341bd7b9 Mon Sep 17 00:00:00 2001 From: Tyler Schicke Date: Tue, 9 Apr 2019 02:45:06 -0400 Subject: Added script field and added list of scripts to list field --- src/client/util/Scripting.ts | 21 +++-- .../views/collections/CollectionBaseView.tsx | 21 ++++- .../views/collections/CollectionSchemaView.tsx | 4 +- src/fields/Document.ts | 7 +- src/fields/ListField.ts | 96 ++++++++++++++++++---- src/fields/ScriptField.ts | 64 +++++++++++++++ src/server/Message.ts | 3 +- src/server/ServerUtil.ts | 3 + 8 files changed, 187 insertions(+), 32 deletions(-) create mode 100644 src/fields/ScriptField.ts (limited to 'src') diff --git a/src/client/util/Scripting.ts b/src/client/util/Scripting.ts index 468484928..9015f21cf 100644 --- a/src/client/util/Scripting.ts +++ b/src/client/util/Scripting.ts @@ -30,8 +30,10 @@ export interface ScriptError { export type ScriptResult = ScriptSucccess | ScriptError; -export interface CompileSuccess { - compiled: true; +export interface CompiledScript { + readonly compiled: true; + readonly originalScript: string; + readonly options: Readonly; run(args?: { [name: string]: any }): ScriptResult; } @@ -40,9 +42,9 @@ export interface CompileError { errors: any[]; } -export type CompiledScript = CompileSuccess | CompileError; +export type CompileResult = CompiledScript | CompileError; -function Run(script: string | undefined, customParams: string[], diagnostics: any[]): CompiledScript { +function Run(script: string | undefined, customParams: string[], diagnostics: any[], originalScript: string, options: ScriptOptions): CompileResult { const errors = diagnostics.some(diag => diag.category === ts.DiagnosticCategory.Error); if (errors || !script) { return { compiled: false, errors: diagnostics }; @@ -68,7 +70,7 @@ function Run(script: string | undefined, customParams: string[], diagnostics: an return { success: false, error }; } }; - return { compiled: true, run }; + return { compiled: true, run, originalScript, options }; } interface File { @@ -130,7 +132,7 @@ export interface ScriptOptions { params?: { [name: string]: string }; } -export function CompileScript(script: string, { requiredType = "", addReturn = false, params = {} }: ScriptOptions = {}): CompiledScript { +export function CompileScript(script: string, { requiredType = "", addReturn = false, params = {} }: ScriptOptions = {}): CompileResult { let host = new ScriptingCompilerHost; let paramArray: string[] = []; if ("this" in params) { @@ -140,7 +142,10 @@ export function CompileScript(script: string, { requiredType = "", addReturn = f if (key === "this") continue; paramArray.push(key); } - let paramString = paramArray.map(key => `${key}: ${params[key]}`).join(", "); + let paramString = paramArray.map(key => { + const val = params[key]; + return `${key}: ${val}`; + }).join(", "); let funcScript = `(function(${paramString})${requiredType ? `: ${requiredType}` : ''} { ${addReturn ? `return ${script};` : script} })`; @@ -152,7 +157,7 @@ export function CompileScript(script: string, { requiredType = "", addReturn = f let diagnostics = ts.getPreEmitDiagnostics(program).concat(testResult.diagnostics); - return Run(outputText, paramArray, diagnostics); + return Run(outputText, paramArray, diagnostics, script, { requiredType, addReturn, params }); } export function OrLiteralType(returnType: string): string { diff --git a/src/client/views/collections/CollectionBaseView.tsx b/src/client/views/collections/CollectionBaseView.tsx index 32462a4c1..4afa7cbf6 100644 --- a/src/client/views/collections/CollectionBaseView.tsx +++ b/src/client/views/collections/CollectionBaseView.tsx @@ -10,6 +10,8 @@ import { ListField } from '../../../fields/ListField'; import { action } from 'mobx'; import { Transform } from '../../util/Transform'; import { observer } from 'mobx-react'; +import { CompileScript } from '../../util/Scripting'; +import { ScriptField } from '../../../fields/ScriptField'; export enum CollectionViewType { Invalid, @@ -106,7 +108,24 @@ export class CollectionBaseView extends React.Component { } else { let proto = props.Document.GetPrototype(); if (!proto || proto === FieldWaiting || !this.createsCycle(proto, doc)) { - props.Document.SetOnPrototype(props.fieldKey, new ListField([doc])); + const field = new ListField([doc]); + // const script = CompileScript(` + // if(added) { + // console.log("added " + field.Title); + // } else { + // console.log("removed " + field.Title); + // } + // `, { + // addReturn: false, + // params: { + // field: Document.name, + // added: "boolean" + // } + // }); + // if (script.compiled) { + // field.addScript(new ScriptField(script)); + // } + props.Document.SetOnPrototype(props.fieldKey, field); } else { return false; diff --git a/src/client/views/collections/CollectionSchemaView.tsx b/src/client/views/collections/CollectionSchemaView.tsx index 52933818f..587f60b3d 100644 --- a/src/client/views/collections/CollectionSchemaView.tsx +++ b/src/client/views/collections/CollectionSchemaView.tsx @@ -121,14 +121,14 @@ export class CollectionSchemaView extends CollectionSubView { return field || ""; }} SetValue={(value: string) => { - let script = CompileScript(value, { addReturn: true, params: { this: "Document" } }); + let script = CompileScript(value, { addReturn: true, params: { this: Document.name } }); if (!script.compiled) { return false; } return applyToDoc(props.Document, script.run); }} OnFillDown={(value: string) => { - let script = CompileScript(value, { addReturn: true, params: { this: "Document" } }); + let script = CompileScript(value, { addReturn: true, params: { this: Document.name } }); if (!script.compiled) { return; } diff --git a/src/fields/Document.ts b/src/fields/Document.ts index 4584660fb..60eaf5b51 100644 --- a/src/fields/Document.ts +++ b/src/fields/Document.ts @@ -16,10 +16,7 @@ import { HistogramField } from "../client/northstar/dash-fields/HistogramField"; export class Document extends Field { //TODO tfs: We should probably store FieldWaiting in fields when we request it from the server so that we don't set up multiple server gets for the same document and field - public fields: ObservableMap< - string, - { key: Key; field: Field } - > = new ObservableMap(); + public fields: ObservableMap = new ObservableMap(); public _proxies: ObservableMap = new ObservableMap(); constructor(id?: string, save: boolean = true) { @@ -406,7 +403,7 @@ export class Document extends Field { } else if (field) { copy.Set(key!, field.Copy()); - } + } }); } }); diff --git a/src/fields/ListField.ts b/src/fields/ListField.ts index b6eab5f86..8311e737b 100644 --- a/src/fields/ListField.ts +++ b/src/fields/ListField.ts @@ -5,12 +5,18 @@ import { Types } from "../server/Message"; import { BasicField } from "./BasicField"; import { Field, FieldId } from "./Field"; import { FieldMap } from "../client/SocketStub"; +import { ScriptField } from "./ScriptField"; export class ListField extends BasicField { private _proxies: string[] = []; - constructor(data: T[] = [], id?: FieldId, save: boolean = true) { + private _scriptIds: string[] = []; + private scripts: ScriptField[] = []; + + constructor(data: T[] = [], scripts: ScriptField[] = [], id?: FieldId, save: boolean = true) { super(data, save, id); + this.scripts = scripts; this.updateProxies(); + this._scriptIds = this.scripts.map(script => script.Id); if (save) { Server.UpdateField(this); } @@ -25,17 +31,22 @@ export class ListField extends BasicField { this.observeDisposer(); } this.observeDisposer = observe(this.Data as IObservableArray, (change: IArrayChange | IArraySplice) => { + const target = change.object; this.updateProxies(); if (change.type === "splice") { + this.runScripts(change.removed, false); UndoManager.AddEvent({ - undo: () => this.Data.splice(change.index, change.addedCount, ...change.removed), - redo: () => this.Data.splice(change.index, change.removedCount, ...change.added) + undo: () => target.splice(change.index, change.addedCount, ...change.removed), + redo: () => target.splice(change.index, change.removedCount, ...change.added) }); + this.runScripts(change.added, true); } else { + this.runScripts([change.oldValue], false); UndoManager.AddEvent({ - undo: () => this.Data[change.index] = change.oldValue, - redo: () => this.Data[change.index] = change.newValue + undo: () => target[change.index] = change.oldValue, + redo: () => target[change.index] = change.newValue }); + this.runScripts([change.newValue], true); } if (!this._processingServerUpdate) { Server.UpdateField(this); @@ -43,19 +54,60 @@ export class ListField extends BasicField { }); } + private runScripts(fields: T[], added: boolean) { + for (const script of this.scripts) { + this.runScript(fields, script, added); + } + } + + private runScript(fields: T[], script: ScriptField, added: boolean) { + if (!this._processingServerUpdate) { + for (const field of fields) { + script.script.run({ field, added }); + } + } + } + + addScript(script: ScriptField) { + this.scripts.push(script); + this._scriptIds.push(script.Id); + + this.runScript(this.Data, script, true); + UndoManager.AddEvent({ + undo: () => this.removeScript(script), + redo: () => this.addScript(script), + }); + Server.UpdateField(this); + } + + removeScript(script: ScriptField) { + const index = this.scripts.indexOf(script); + if (index === -1) { + return; + } + this.scripts.splice(index, 1); + this._scriptIds.splice(index, 1); + UndoManager.AddEvent({ + undo: () => this.addScript(script), + redo: () => this.removeScript(script), + }); + this.runScript(this.Data, script, false); + Server.UpdateField(this); + } + protected setData(value: T[]) { + this.runScripts(this.data, false); + this.data = observable(value); this.updateProxies(); this.observeList(); + this.runScripts(this.data, true); } private updateProxies() { this._proxies = this.Data.map(field => field.Id); } - UpdateFromServer(fields: string[]) { - this._proxies = fields; - } private arraysEqual(a: any[], b: any[]) { if (a === b) return true; if (a === null || b === null) return false; @@ -73,7 +125,7 @@ export class ListField extends BasicField { } init(callback: (field: Field) => any) { - Server.GetFields(this._proxies, action((fields: FieldMap) => { + const fieldsPromise = Server.GetFields(this._proxies).then(action((fields: FieldMap) => { if (!this.arraysEqual(this._proxies, this.data.map(field => field.Id))) { var dataids = this.data.map(d => d.Id); var proxies = this._proxies.map(p => p); @@ -102,8 +154,13 @@ export class ListField extends BasicField { } this._processingServerUpdate = false; } - callback(this); })); + + const scriptsPromise = Server.GetFields(this._scriptIds).then((fields: FieldMap) => { + this.scripts = this._scriptIds.map(id => fields[id] as ScriptField); + }); + + Promise.all([fieldsPromise, scriptsPromise]).then(() => callback(this)); } ToScriptString(): string { @@ -114,17 +171,26 @@ export class ListField extends BasicField { return new ListField(this.Data); } - ToJson(): { type: Types, data: string[], _id: string } { + + UpdateFromServer(data: { fields: string[], scripts: string[] }) { + this._proxies = data.fields; + this._scriptIds = data.scripts; + } + ToJson(): { type: Types, data: { fields: string[], scripts: string[] }, _id: string } { return { type: Types.List, - data: this._proxies || [], + data: { + fields: this._proxies, + scripts: this._scriptIds, + }, _id: this.Id }; } - static FromJson(id: string, ids: string[]): ListField { - let list = new ListField([], id, false); - list._proxies = ids; + static FromJson(id: string, data: { fields: string[], scripts: string[] }): ListField { + let list = new ListField([], [], id, false); + list._proxies = data.fields; + list._scriptIds = data.scripts; return list; } } \ No newline at end of file diff --git a/src/fields/ScriptField.ts b/src/fields/ScriptField.ts new file mode 100644 index 000000000..24c1d9b3a --- /dev/null +++ b/src/fields/ScriptField.ts @@ -0,0 +1,64 @@ +import { Field, FieldId } from "./Field"; +import { Types } from "../server/Message"; +import { CompileScript, ScriptOptions, CompiledScript } from "../client/util/Scripting"; +import { Server } from "../client/Server"; + +export interface ScriptData { + script: string; + options: ScriptOptions; +} + +export class ScriptField extends Field { + readonly script: CompiledScript; + + constructor(script: CompiledScript, id?: FieldId, save: boolean = true) { + super(id); + + this.script = script; + + if (save) { + Server.UpdateField(this); + } + } + + static FromJson(id: string, data: ScriptData): ScriptField { + const script = CompileScript(data.script, data.options); + if (!script.compiled) { + throw new Error("Can't compile script"); + } + return new ScriptField(script, id, false); + } + + ToScriptString() { + return "new ScriptField(...)"; + } + + GetValue() { + return this.script; + } + + TrySetValue(): boolean { + throw new Error("Script fields currently can't be modified"); + } + + UpdateFromServer() { + throw new Error("Script fields currently can't be updated"); + } + + ToJson(): { _id: string, type: Types, data: ScriptData } { + const { options, originalScript } = this.script; + return { + _id: this.Id, + type: Types.Script, + data: { + script: originalScript, + options + }, + }; + } + + Copy(): Field { + //Script fields are currently immutable, so we can fake copy them + return this; + } +} \ No newline at end of file diff --git a/src/server/Message.ts b/src/server/Message.ts index 0274609bb..d22e5c17c 100644 --- a/src/server/Message.ts +++ b/src/server/Message.ts @@ -61,7 +61,8 @@ export enum Types { PDF, Tuple, HistogramOp, - Boolean + Boolean, + Script, } export class DocumentTransfer implements Transferable { diff --git a/src/server/ServerUtil.ts b/src/server/ServerUtil.ts index 2c2bfd0c9..0973f82b1 100644 --- a/src/server/ServerUtil.ts +++ b/src/server/ServerUtil.ts @@ -18,6 +18,7 @@ import { PDFField } from "../fields/PDFField"; import { TupleField } from "../fields/TupleField"; import { BooleanField } from "../fields/BooleanField"; import { HistogramField } from "../client/northstar/dash-fields/HistogramField"; +import { ScriptField } from "../fields/ScriptField"; export class ServerUtils { public static prepend(extension: string): string { @@ -60,6 +61,8 @@ export class ServerUtils { return new PDFField(new URL(data), id, false); case Types.List: return ListField.FromJson(id, data); + case Types.Script: + return ScriptField.FromJson(id, data); case Types.Audio: return new AudioField(new URL(data), id, false); case Types.Video: -- cgit v1.2.3-70-g09d2 From 78e098c4ecb95b90482e7d27fd82fb857de96bb4 Mon Sep 17 00:00:00 2001 From: Bob Zeleznik Date: Tue, 9 Apr 2019 08:46:15 -0400 Subject: fixed dragging linkbutton to show linked docs --- src/client/views/DocumentDecorations.tsx | 7 +++---- src/client/views/collections/CollectionViewBase.tsx | 18 ------------------ 2 files changed, 3 insertions(+), 22 deletions(-) (limited to 'src') diff --git a/src/client/views/DocumentDecorations.tsx b/src/client/views/DocumentDecorations.tsx index 4a7502072..40da98d34 100644 --- a/src/client/views/DocumentDecorations.tsx +++ b/src/client/views/DocumentDecorations.tsx @@ -266,7 +266,7 @@ export class DocumentDecorations extends React.Component<{}, { value: string }> if (doc) moddrag.push(doc); } - let dragData = new DragManager.DocumentDragData(moddrag); + let dragData = new DragManager.DocumentDragData(moddrag.length ? moddrag : draggedDocs); DragManager.StartDocumentDrag([this._linkButton.current], dragData, e.x, e.y, { handlers: { dragComplete: action(() => { }), @@ -407,9 +407,8 @@ export class DocumentDecorations extends React.Component<{}, { value: string }> let linkCount = linkToSize + linkFromSize; linkButton = ( - }> + content={}>
{linkCount}
); } diff --git a/src/client/views/collections/CollectionViewBase.tsx b/src/client/views/collections/CollectionViewBase.tsx index 7cf49e215..1f16e8313 100644 --- a/src/client/views/collections/CollectionViewBase.tsx +++ b/src/client/views/collections/CollectionViewBase.tsx @@ -94,24 +94,6 @@ export class CollectionViewBase extends React.Component e.stopPropagation(); return added; } - if (de.data instanceof DragManager.LinkDragData) { - let sourceDoc: Document = de.data.linkSourceDocumentView.props.Document; - if (sourceDoc) runInAction(() => { - let srcTarg = sourceDoc.GetT(KeyStore.Prototype, Document) - if (srcTarg && srcTarg != FieldWaiting) { - let linkDocs = srcTarg.GetList(KeyStore.LinkedToDocs, [] as Document[]); - linkDocs.map(linkDoc => { - let targDoc = linkDoc.GetT(KeyStore.LinkedToDocs, Document); - if (targDoc && targDoc != FieldWaiting) { - let dropdoc = targDoc.MakeDelegate(); - de.data.droppedDocuments.push(dropdoc); - this.props.addDocument(dropdoc, false); - } - }) - } - }) - return true; - } return false; } -- cgit v1.2.3-70-g09d2 From 64c8a689c142c82c4dd3ed074e5e6981ea8ea17c Mon Sep 17 00:00:00 2001 From: bob Date: Tue, 9 Apr 2019 13:40:40 -0400 Subject: added ability to load a new database for Northstar --- src/client/northstar/manager/Gateway.ts | 22 ++++++++++++++++++++-- src/client/views/Main.tsx | 15 ++++++++++----- .../views/collections/CollectionBaseView.tsx | 16 ++++++---------- src/client/views/collections/CollectionSubView.tsx | 2 +- 4 files changed, 37 insertions(+), 18 deletions(-) (limited to 'src') diff --git a/src/client/northstar/manager/Gateway.ts b/src/client/northstar/manager/Gateway.ts index 1c8d3fd73..8f3b6b11c 100644 --- a/src/client/northstar/manager/Gateway.ts +++ b/src/client/northstar/manager/Gateway.ts @@ -23,6 +23,17 @@ export class Gateway { } } + public async GetSchema(dbName: string): Promise { + try { + const json = await this.MakeGetRequest("schema", undefined, dbName); + const cat = Catalog.fromJS(json); + return cat; + } + catch (error) { + throw new Error("can not reach northstar's backend"); + } + } + public async ClearCatalog(): Promise { try { const json = await this.MakePostJsonRequest("Datamart/ClearAllAugmentations", {}); @@ -133,8 +144,15 @@ export class Gateway { }); } - public async MakeGetRequest(endpoint: string, signal?: AbortSignal): Promise { - const url = Gateway.ConstructUrl(endpoint); + public async MakeGetRequest(endpoint: string, signal?: AbortSignal, data?: any): Promise { + let url = !data ? Gateway.ConstructUrl(endpoint) : + (() => { + let newUrl = new URL(Gateway.ConstructUrl(endpoint)); + newUrl.searchParams.append("data", data); + return Gateway.ConstructUrl(endpoint) + newUrl.search; + return newUrl as any; + })(); + const response = await fetch(url, { redirect: "follow", diff --git a/src/client/views/Main.tsx b/src/client/views/Main.tsx index fd2e23c91..32798631d 100644 --- a/src/client/views/Main.tsx +++ b/src/client/views/Main.tsx @@ -348,10 +348,10 @@ export class Main extends React.Component { // --------------- Northstar hooks ------------- / - @action SetNorthstarCatalog(ctlog: Catalog) { - CurrentUserUtils.NorthstarDBCatalog = ctlog; + @action AddToNorthstarCatalog(ctlog: Catalog) { + CurrentUserUtils.NorthstarDBCatalog = CurrentUserUtils.NorthstarDBCatalog ? CurrentUserUtils.NorthstarDBCatalog : ctlog; if (ctlog && ctlog.schemas) { - this._northstarSchemas = ctlog.schemas.map(schema => { + this._northstarSchemas.push(...ctlog.schemas.map(schema => { let schemaDoc = Documents.TreeDocument([], { width: 50, height: 100, title: schema.displayName! }); let schemaDocuments = schemaDoc.GetList(KeyStore.Data, [] as Document[]); CurrentUserUtils.GetAllNorthstarColumnAttributes(schema).map(attr => { @@ -369,7 +369,7 @@ export class Main extends React.Component { })); }); return schemaDoc; - }); + })); } } async initializeNorthstar(): Promise { @@ -382,7 +382,12 @@ export class Main extends React.Component { const env = await response.json(); Settings.Instance.Update(env); let cat = Gateway.Instance.ClearCatalog(); - cat.then(async () => this.SetNorthstarCatalog(await Gateway.Instance.GetCatalog())); + cat.then(async () => { + this.AddToNorthstarCatalog(await Gateway.Instance.GetCatalog()); + if (!CurrentUserUtils.GetNorthstarSchema("Book1")) + this.AddToNorthstarCatalog(await Gateway.Instance.GetSchema("http://www.cs.brown.edu/~bcz/Book1.csv")); + }); + } } diff --git a/src/client/views/collections/CollectionBaseView.tsx b/src/client/views/collections/CollectionBaseView.tsx index 4afa7cbf6..4380c8194 100644 --- a/src/client/views/collections/CollectionBaseView.tsx +++ b/src/client/views/collections/CollectionBaseView.tsx @@ -1,17 +1,13 @@ +import { action } from 'mobx'; +import { observer } from 'mobx-react'; import * as React from 'react'; -import { FieldViewProps } from '../nodes/FieldView'; +import { Document } from '../../../fields/Document'; +import { Field, FieldValue, FieldWaiting } from '../../../fields/Field'; import { KeyStore } from '../../../fields/KeyStore'; +import { ListField } from '../../../fields/ListField'; import { NumberField } from '../../../fields/NumberField'; -import { FieldWaiting, Field, FieldValue } from '../../../fields/Field'; import { ContextMenu } from '../ContextMenu'; -import { SelectionManager } from '../../util/SelectionManager'; -import { Document } from '../../../fields/Document'; -import { ListField } from '../../../fields/ListField'; -import { action } from 'mobx'; -import { Transform } from '../../util/Transform'; -import { observer } from 'mobx-react'; -import { CompileScript } from '../../util/Scripting'; -import { ScriptField } from '../../../fields/ScriptField'; +import { FieldViewProps } from '../nodes/FieldView'; export enum CollectionViewType { Invalid, diff --git a/src/client/views/collections/CollectionSubView.tsx b/src/client/views/collections/CollectionSubView.tsx index f058aaccc..5cdea0568 100644 --- a/src/client/views/collections/CollectionSubView.tsx +++ b/src/client/views/collections/CollectionSubView.tsx @@ -73,7 +73,7 @@ export class CollectionSubView extends React.Component { draggedDocument.GetTAsync(key, NumberField, (f: Opt) => f ? de.data.droppedDocuments[i].SetNumber(key, f.Data) : null))); } let added = false; - if (de.data.aliasOnDrop) { + if (de.data.aliasOnDrop || de.data.copyOnDrop) { added = de.data.droppedDocuments.reduce((added: boolean, d) => added || this.props.addDocument(d), false); } else if (de.data.moveDocument) { const move = de.data.moveDocument; -- cgit v1.2.3-70-g09d2 From 89fd4327db1536990b4a4dc218819a1077f82445 Mon Sep 17 00:00:00 2001 From: bob Date: Tue, 9 Apr 2019 15:14:46 -0400 Subject: fixed layout of collection freeforms. --- .../collectionFreeForm/CollectionFreeFormView.scss | 8 ++- .../collectionFreeForm/CollectionFreeFormView.tsx | 60 ++++++++++++---------- 2 files changed, 40 insertions(+), 28 deletions(-) (limited to 'src') diff --git a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.scss b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.scss index 79d520069..81f2146e4 100644 --- a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.scss +++ b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.scss @@ -1,5 +1,11 @@ @import "../../global_variables"; - +.collectionfreeformview-measure { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + } .collectionfreeformview { position: absolute; top: 0; diff --git a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx index e694bc7a7..1feb30db1 100644 --- a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx +++ b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx @@ -1,4 +1,4 @@ -import { action, computed, observable, trace } from "mobx"; +import { action, computed, observable, trace, ObservableSet, runInAction } from "mobx"; import { observer } from "mobx-react"; import { Document } from "../../../../fields/Document"; import { FieldWaiting } from "../../../../fields/Field"; @@ -24,6 +24,7 @@ import { DocumentManager } from "../../../util/DocumentManager"; import { SelectionManager } from "../../../util/SelectionManager"; import { NumberField } from "../../../../fields/NumberField"; import { Main } from "../../Main"; +import Measure from "react-measure"; @observer export class CollectionFreeFormView extends CollectionSubView { @@ -67,8 +68,8 @@ export class CollectionFreeFormView extends CollectionSubView { @observable public DownY: number = 0; @observable private _lastX: number = 0; @observable private _lastY: number = 0; - - private outerElement?: HTMLDivElement; + @observable private _pwidth: number = 0; + @observable private _pheight: number = 0; @computed get panX(): number { return this.props.Document.GetNumber(KeyStore.PanX, 0); } @computed get panY(): number { return this.props.Document.GetNumber(KeyStore.PanY, 0); } @@ -77,8 +78,8 @@ export class CollectionFreeFormView extends CollectionSubView { @computed get nativeWidth() { return this.props.Document.GetNumber(KeyStore.NativeWidth, 0); } @computed get nativeHeight() { return this.props.Document.GetNumber(KeyStore.NativeHeight, 0); } @computed get zoomScaling() { return this.props.Document.GetNumber(KeyStore.Scale, 1); } - @computed get centeringShiftX() { return !this.props.Document.GetNumber(KeyStore.NativeWidth, 0) && this.outerElement ? this.outerElement.clientWidth / 2 : 0; } // shift so pan position is at center of window for non-overlay collections - @computed get centeringShiftY() { return !this.props.Document.GetNumber(KeyStore.NativeHeight, 0) && this.outerElement ? this.outerElement.clientHeight / 2 : 0; }// shift so pan position is at center of window for non-overlay collections + @computed get centeringShiftX() { return !this.props.Document.GetNumber(KeyStore.NativeWidth, 0) ? this._pwidth / 2 : 0; } // shift so pan position is at center of window for non-overlay collections + @computed get centeringShiftY() { return !this.props.Document.GetNumber(KeyStore.NativeHeight, 0) ? this._pheight / 2 : 0; }// shift so pan position is at center of window for non-overlay collections @undoBatch @action @@ -311,29 +312,34 @@ export class CollectionFreeFormView extends CollectionSubView { const pany: number = -this.props.Document.GetNumber(KeyStore.PanY, 0); return ( -
super.setCursorPosition(this.getTransform().transformPoint(e.clientX, e.clientY))} - onDrop={this.onDrop.bind(this)} onDragOver={this.onDragOver} onWheel={this.onPointerWheel} - style={{ borderWidth: `${COLLECTION_BORDER_WIDTH}px` }} ref={this.createDropTarget}> - - -
- {this.backgroundView} - - - {this.childViews} - - - + runInAction(() => { this._pwidth = r.entry.width; this._pheight = r.entry.height })}> + {({ measureRef }) => ( +
+
super.setCursorPosition(this.getTransform().transformPoint(e.clientX, e.clientY))} + onDrop={this.onDrop.bind(this)} onDragOver={this.onDragOver} onWheel={this.onPointerWheel} + style={{ borderWidth: `${COLLECTION_BORDER_WIDTH}px` }} ref={this.createDropTarget}> + + +
+ {this.backgroundView} + + + {this.childViews} + + + +
+ {this.overlayView} +
+
- {this.overlayView} - - -
+
)} + ); } } \ No newline at end of file -- cgit v1.2.3-70-g09d2 From 54a89c59905b74ab71aa7366b3f1b7d653000547 Mon Sep 17 00:00:00 2001 From: Tyler Schicke Date: Wed, 10 Apr 2019 01:53:56 -0400 Subject: Fixed a couple server bugs --- src/client/Server.ts | 20 ++++++++++---------- src/client/views/Main.tsx | 3 ++- .../collectionFreeForm/CollectionFreeFormView.tsx | 2 +- 3 files changed, 13 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/client/Server.ts b/src/client/Server.ts index 857101a33..b3cca0f4c 100644 --- a/src/client/Server.ts +++ b/src/client/Server.ts @@ -59,14 +59,14 @@ export class Server { public static GetFields(fieldIds: FieldId[]): Promise<{ [id: string]: Field }>; public static GetFields(fieldIds: FieldId[], callback: (fields: FieldMap) => any): void; public static GetFields(fieldIds: FieldId[], callback?: (fields: FieldMap) => any): Promise | void { - let fn = (cb: (fields: FieldMap) => void) => { + let fn = action((cb: (fields: FieldMap) => void) => { let neededFieldIds: FieldId[] = []; let waitingFieldIds: FieldId[] = []; - let existingFields: { [id: string]: Field } = {}; + let existingFields: FieldMap = {}; for (let id of fieldIds) { let field = this.ClientFieldsCached.get(id); - if (!field) { + if (field === undefined) { neededFieldIds.push(id); this.ClientFieldsCached.set(id, FieldWaiting); } else if (field === FieldWaiting) { @@ -79,7 +79,7 @@ export class Server { for (let id of neededFieldIds) { let field = fields[id]; if (field) { - if (!(this.ClientFieldsCached.get(field.Id) instanceof Field)) { + if (this.ClientFieldsCached.get(field.Id) === FieldWaiting) { this.ClientFieldsCached.set(field.Id, field); } else { throw new Error("we shouldn't be trying to replace things that are already in the cache"); @@ -94,17 +94,17 @@ export class Server { } reaction(() => waitingFieldIds.map(id => this.ClientFieldsCached.get(id)), (cachedFields, reaction) => { - if (!cachedFields.some(field => !field)) { + if (!cachedFields.some(field => field === FieldWaiting)) { + const realFields = cachedFields as Opt[]; reaction.dispose(); - for (let field of cachedFields) { - let realField = field as Field; - existingFields[realField.Id] = realField; - } + waitingFieldIds.forEach((id, index) => { + existingFields[id] = realFields[index]; + }); cb({ ...fields, ...existingFields }); } }, { fireImmediately: true }); })); - }; + }); if (callback) { fn(callback); } else { diff --git a/src/client/views/Main.tsx b/src/client/views/Main.tsx index 32798631d..6e7701d89 100644 --- a/src/client/views/Main.tsx +++ b/src/client/views/Main.tsx @@ -384,8 +384,9 @@ export class Main extends React.Component { let cat = Gateway.Instance.ClearCatalog(); cat.then(async () => { this.AddToNorthstarCatalog(await Gateway.Instance.GetCatalog()); - if (!CurrentUserUtils.GetNorthstarSchema("Book1")) + if (!CurrentUserUtils.GetNorthstarSchema("Book1")) { this.AddToNorthstarCatalog(await Gateway.Instance.GetSchema("http://www.cs.brown.edu/~bcz/Book1.csv")); + } }); } diff --git a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx index 1feb30db1..9914f3793 100644 --- a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx +++ b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx @@ -312,7 +312,7 @@ export class CollectionFreeFormView extends CollectionSubView { const pany: number = -this.props.Document.GetNumber(KeyStore.PanY, 0); return ( - runInAction(() => { this._pwidth = r.entry.width; this._pheight = r.entry.height })}> + runInAction(() => { this._pwidth = r.entry.width; this._pheight = r.entry.height; })}> {({ measureRef }) => (
Date: Wed, 10 Apr 2019 10:45:59 -0400 Subject: fixed uploading of csv files. --- src/client/documents/Documents.ts | 39 +++++++++++++++++++-- src/client/northstar/manager/Gateway.ts | 12 +++---- src/client/views/Main.tsx | 4 +-- src/client/views/collections/CollectionSubView.tsx | 40 +++++++++++++--------- src/fields/KeyStore.ts | 1 - 5 files changed, 68 insertions(+), 28 deletions(-) (limited to 'src') diff --git a/src/client/documents/Documents.ts b/src/client/documents/Documents.ts index 72e6e57ab..f8438e093 100644 --- a/src/client/documents/Documents.ts +++ b/src/client/documents/Documents.ts @@ -1,6 +1,6 @@ import { AudioField } from "../../fields/AudioField"; import { Document } from "../../fields/Document"; -import { Field } from "../../fields/Field"; +import { Field, Opt } from "../../fields/Field"; import { HtmlField } from "../../fields/HtmlField"; import { ImageField } from "../../fields/ImageField"; import { InkField, StrokeData } from "../../fields/InkField"; @@ -26,6 +26,12 @@ import { KeyValueBox } from "../views/nodes/KeyValueBox"; import { PDFBox } from "../views/nodes/PDFBox"; import { VideoBox } from "../views/nodes/VideoBox"; import { WebBox } from "../views/nodes/WebBox"; +import { Gateway } from "../northstar/manager/Gateway"; +import { CurrentUserUtils } from "../../server/authentication/models/current_user_utils"; +import { action } from "mobx"; +import { ColumnAttributeModel } from "../northstar/core/attribute/AttributeModel"; +import { AttributeTransformationModel } from "../northstar/core/attribute/AttributeTransformationModel"; +import { AggregateFunction } from "../northstar/model/idea/idea"; export interface DocumentOptions { x?: number; @@ -200,6 +206,31 @@ export namespace Documents { export function PdfDocument(url: string, options: DocumentOptions = {}) { return assignToDelegate(SetInstanceOptions(pdfProto, options, [new URL(url), PDFField]).MakeDelegate(), options); } + export async function DBDocument(url: string, options: DocumentOptions = {}) { + let schemaName = options.title ? options.title : "-no schema-"; + let ctlog = await Gateway.Instance.GetSchema(url, schemaName) + if (ctlog && ctlog.schemas) { + let schema = ctlog.schemas[0]; + let schemaDoc = Documents.TreeDocument([], { ...options, nativeWidth: undefined, nativeHeight: undefined, width: 150, height: 100, title: schema.displayName! }); + let schemaDocuments = schemaDoc.GetList(KeyStore.Data, [] as Document[]); + CurrentUserUtils.GetAllNorthstarColumnAttributes(schema).map(attr => { + Server.GetField(attr.displayName! + ".alias", action((field: Opt) => { + if (field instanceof Document) { + schemaDocuments.push(field); + } else { + var atmod = new ColumnAttributeModel(attr); + let histoOp = new HistogramOperation(schema.displayName!, + new AttributeTransformationModel(atmod, AggregateFunction.None), + new AttributeTransformationModel(atmod, AggregateFunction.Count), + new AttributeTransformationModel(atmod, AggregateFunction.Count)); + schemaDocuments.push(Documents.HistogramDocument(histoOp, { width: 200, height: 200, title: attr.displayName! }, undefined, attr.displayName! + ".alias")); + } + })); + }); + return schemaDoc; + }; + return Documents.TreeDocument([], { width: 50, height: 100, title: schemaName }); + } export function WebDocument(url: string, options: DocumentOptions = {}) { return assignToDelegate(SetInstanceOptions(webProto, options, [new URL(url), WebField]).MakeDelegate(), options); } @@ -242,13 +273,15 @@ export namespace Documents {
` + FormattedTextBox.LayoutString("CaptionKey") + `
-
`; } +
`; + } export function FixedCaption(fieldName: string = "Caption") { return `
` + FormattedTextBox.LayoutString(fieldName + "Key") + `
-
`; } +
`; + } function OuterCaption() { return (` diff --git a/src/client/northstar/manager/Gateway.ts b/src/client/northstar/manager/Gateway.ts index 8f3b6b11c..207a9ad19 100644 --- a/src/client/northstar/manager/Gateway.ts +++ b/src/client/northstar/manager/Gateway.ts @@ -23,9 +23,9 @@ export class Gateway { } } - public async GetSchema(dbName: string): Promise { + public async GetSchema(pathname: string, schemaname: string): Promise { try { - const json = await this.MakeGetRequest("schema", undefined, dbName); + const json = await this.MakeGetRequest("schema", undefined, { path: pathname, schema: schemaname }); const cat = Catalog.fromJS(json); return cat; } @@ -144,13 +144,13 @@ export class Gateway { }); } - public async MakeGetRequest(endpoint: string, signal?: AbortSignal, data?: any): Promise { - let url = !data ? Gateway.ConstructUrl(endpoint) : + public async MakeGetRequest(endpoint: string, signal?: AbortSignal, params?: any): Promise { + let url = !params ? Gateway.ConstructUrl(endpoint) : (() => { let newUrl = new URL(Gateway.ConstructUrl(endpoint)); - newUrl.searchParams.append("data", data); + Object.getOwnPropertyNames(params).map(prop => + newUrl.searchParams.append(prop, params[prop])); return Gateway.ConstructUrl(endpoint) + newUrl.search; - return newUrl as any; })(); const response = await fetch(url, diff --git a/src/client/views/Main.tsx b/src/client/views/Main.tsx index 32798631d..012633bed 100644 --- a/src/client/views/Main.tsx +++ b/src/client/views/Main.tsx @@ -384,8 +384,8 @@ export class Main extends React.Component { let cat = Gateway.Instance.ClearCatalog(); cat.then(async () => { this.AddToNorthstarCatalog(await Gateway.Instance.GetCatalog()); - if (!CurrentUserUtils.GetNorthstarSchema("Book1")) - this.AddToNorthstarCatalog(await Gateway.Instance.GetSchema("http://www.cs.brown.edu/~bcz/Book1.csv")); + // if (!CurrentUserUtils.GetNorthstarSchema("Book1")) + // this.AddToNorthstarCatalog(await Gateway.Instance.GetSchema("http://www.cs.brown.edu/~bcz/Book1.csv", "Book1")); }); } diff --git a/src/client/views/collections/CollectionSubView.tsx b/src/client/views/collections/CollectionSubView.tsx index 5cdea0568..588ff9483 100644 --- a/src/client/views/collections/CollectionSubView.tsx +++ b/src/client/views/collections/CollectionSubView.tsx @@ -87,8 +87,8 @@ export class CollectionSubView extends React.Component { return false; } - protected getDocumentFromType(type: string, path: string, options: DocumentOptions): Opt { - let ctor: ((path: string, options: DocumentOptions) => Document) | undefined; + protected async getDocumentFromType(type: string, path: string, options: DocumentOptions): Promise> { + let ctor: ((path: string, options: DocumentOptions) => (Document | Promise)) | undefined = undefined; if (type.indexOf("image") !== -1) { ctor = Documents.ImageDocument; } @@ -102,6 +102,10 @@ export class CollectionSubView extends React.Component { ctor = Documents.PdfDocument; options.nativeWidth = 1200; } + if (type.indexOf("excel") !== -1) { + ctor = Documents.DBDocument; + options.copyDraggedItems = true; + } if (type.indexOf("html") !== -1) { if (path.includes('localhost')) { let s = path.split('/'); @@ -159,10 +163,11 @@ export class CollectionSubView extends React.Component { })).then(res => { let type = res.headers["content-type"]; if (type) { - let doc = this.getDocumentFromType(type, str, { ...options, width: 300, nativeWidth: 300 }); - if (doc) { - this.props.addDocument(doc, false); - } + this.getDocumentFromType(type, str, { ...options, width: 300, nativeWidth: 300 }).then(doc => { + if (doc) { + this.props.addDocument(doc, false); + } + }); } }); promises.push(prom); @@ -176,6 +181,7 @@ export class CollectionSubView extends React.Component { if (file) { formData.append('file', file); } + let dropFileName = file ? file.name : "-empty-"; let prom = fetch(upload, { method: 'POST', @@ -185,18 +191,20 @@ export class CollectionSubView extends React.Component { json.map((file: any) => { let path = window.location.origin + file; runInAction(() => { - let doc = this.getDocumentFromType(type, path, { ...options, nativeWidth: 300, width: 300 }); + let docPromise = this.getDocumentFromType(type, path, { ...options, nativeWidth: 300, width: 300, title: dropFileName }); - let docs = this.props.Document.GetT(KeyStore.Data, ListField); - if (docs !== FieldWaiting) { - if (!docs) { - docs = new ListField(); - this.props.Document.Set(KeyStore.Data, docs); - } - if (doc) { - docs.Data.push(doc); + docPromise.then(doc => runInAction(() => { + let docs = this.props.Document.GetT(KeyStore.Data, ListField); + if (docs !== FieldWaiting) { + if (!docs) { + docs = new ListField(); + this.props.Document.Set(KeyStore.Data, docs); + } + if (doc) { + docs.Data.push(doc); + } } - } + })); }); }); }); diff --git a/src/fields/KeyStore.ts b/src/fields/KeyStore.ts index 425408273..da2d7268f 100644 --- a/src/fields/KeyStore.ts +++ b/src/fields/KeyStore.ts @@ -1,5 +1,4 @@ import { Key } from "./Key"; -import { KeyTransfer } from "../server/Message"; export namespace KeyStore { export const Prototype = new Key("Prototype"); -- cgit v1.2.3-70-g09d2 From e0b3c759880639bf56f9b8b39ea2e38c5cbad8a6 Mon Sep 17 00:00:00 2001 From: bob Date: Wed, 10 Apr 2019 14:28:25 -0400 Subject: fixed extra rendering for collections. --- src/client/Server.ts | 10 +++---- .../dash-nodes/HistogramBoxPrimitives.tsx | 6 ++-- src/client/util/DragManager.ts | 4 +-- src/client/util/SelectionManager.ts | 2 +- src/client/views/DocumentDecorations.tsx | 5 ++-- src/client/views/Main.scss | 24 +++++++-------- src/client/views/Main.tsx | 19 ++++++++---- .../views/collections/CollectionDockingView.tsx | 4 +-- src/client/views/collections/CollectionPDFView.tsx | 3 +- .../views/collections/CollectionSchemaView.tsx | 4 +-- src/client/views/collections/CollectionSubView.tsx | 3 +- .../views/collections/CollectionVideoView.tsx | 3 +- .../collectionFreeForm/CollectionFreeFormView.tsx | 7 +++-- src/client/views/nodes/DocumentView.tsx | 35 ++++++++++++++-------- src/client/views/nodes/FieldView.tsx | 10 +++---- src/client/views/nodes/FormattedTextBox.tsx | 4 +-- src/client/views/nodes/VideoBox.tsx | 2 +- 17 files changed, 84 insertions(+), 61 deletions(-) (limited to 'src') diff --git a/src/client/Server.ts b/src/client/Server.ts index 857101a33..228d94a7b 100644 --- a/src/client/Server.ts +++ b/src/client/Server.ts @@ -1,10 +1,10 @@ import { Key } from "../fields/Key"; -import { ObservableMap, action, reaction } from "mobx"; +import { ObservableMap, action, reaction, runInAction } from "mobx"; import { Field, FieldWaiting, FIELD_WAITING, Opt, FieldId } from "../fields/Field"; import { Document } from "../fields/Document"; import { SocketStub, FieldMap } from "./SocketStub"; import * as OpenSocket from 'socket.io-client'; -import { Utils } from "./../Utils"; +import { Utils, emptyFunction } from "./../Utils"; import { MessageStore, Types } from "./../server/Message"; export class Server { @@ -59,7 +59,7 @@ export class Server { public static GetFields(fieldIds: FieldId[]): Promise<{ [id: string]: Field }>; public static GetFields(fieldIds: FieldId[], callback: (fields: FieldMap) => any): void; public static GetFields(fieldIds: FieldId[], callback?: (fields: FieldMap) => any): Promise | void { - let fn = (cb: (fields: FieldMap) => void) => { + let fn = (cb: (fields: FieldMap) => void) => runInAction(() => { let neededFieldIds: FieldId[] = []; let waitingFieldIds: FieldId[] = []; @@ -104,7 +104,7 @@ export class Server { } }, { fireImmediately: true }); })); - }; + }); if (callback) { fn(callback); } else { @@ -167,7 +167,7 @@ export class Server { if (f) { // console.log("Applying : " + field._id); f.UpdateFromServer(field.data); - f.init(() => { }); + f.init(emptyFunction); } else { // console.log("Not applying wa : " + field._id); } diff --git a/src/client/northstar/dash-nodes/HistogramBoxPrimitives.tsx b/src/client/northstar/dash-nodes/HistogramBoxPrimitives.tsx index 4c5bdb14b..721bf6a89 100644 --- a/src/client/northstar/dash-nodes/HistogramBoxPrimitives.tsx +++ b/src/client/northstar/dash-nodes/HistogramBoxPrimitives.tsx @@ -1,7 +1,7 @@ import React = require("react"); import { computed, observable, reaction, runInAction, trace, action } from "mobx"; import { observer } from "mobx-react"; -import { Utils as DashUtils } from '../../../Utils'; +import { Utils as DashUtils, emptyFunction } from '../../../Utils'; import { FilterModel } from "../../northstar/core/filter/FilterModel"; import { ModelHelpers } from "../../northstar/model/ModelHelpers"; import { ArrayUtil } from "../../northstar/utils/ArrayUtil"; @@ -49,7 +49,7 @@ export class HistogramBoxPrimitives extends React.Component bp.BrushIndex === allBrushIndex); if (!rawAllBrushPrim) { - return () => { }; + return emptyFunction; } let allBrushPrim = rawAllBrushPrim; return () => runInAction(() => { @@ -97,7 +97,7 @@ export class HistogramBoxPrimitives extends React.Component; } - drawRect(r: PIXIRectangle, barAxis: number, color: number | undefined, classExt: string, tapHandler: () => void = () => { }) { + drawRect(r: PIXIRectangle, barAxis: number, color: number | undefined, classExt: string, tapHandler: () => void = emptyFunction) { if (r.height < 0) { r.y += r.height; r.height = -r.height; diff --git a/src/client/util/DragManager.ts b/src/client/util/DragManager.ts index 4849ae9f7..f7395578f 100644 --- a/src/client/util/DragManager.ts +++ b/src/client/util/DragManager.ts @@ -4,7 +4,7 @@ import { CollectionDockingView } from "../views/collections/CollectionDockingVie import { CollectionView } from "../views/collections/CollectionView"; import { DocumentDecorations } from "../views/DocumentDecorations"; import { DocumentView } from "../views/nodes/DocumentView"; -import { returnFalse } from "../../Utils"; +import { returnFalse, emptyFunction } from "../../Utils"; export function setupDrag(_reference: React.RefObject, docFunc: () => Document, moveFunc?: DragManager.MoveFunction, copyOnDrop: boolean = false) { let onRowMove = action((e: PointerEvent): void => { @@ -224,7 +224,7 @@ export namespace DragManager { CollectionDockingView.Instance.StartOtherDrag(docs, { pageX: e.pageX, pageY: e.pageY, - preventDefault: () => { }, + preventDefault: emptyFunction, button: 0 }); } diff --git a/src/client/util/SelectionManager.ts b/src/client/util/SelectionManager.ts index 5ddaafc72..c6b8c7b0d 100644 --- a/src/client/util/SelectionManager.ts +++ b/src/client/util/SelectionManager.ts @@ -48,7 +48,7 @@ export namespace SelectionManager { manager.DeselectAll(); if (found) manager.SelectDoc(found, false); - Main.Instance.SetTextDoc(undefined, undefined); + Main.Instance.SetTextDoc(undefined, undefined, undefined); } export function SelectedDocuments(): Array { diff --git a/src/client/views/DocumentDecorations.tsx b/src/client/views/DocumentDecorations.tsx index 28af46358..b7bf727f1 100644 --- a/src/client/views/DocumentDecorations.tsx +++ b/src/client/views/DocumentDecorations.tsx @@ -15,6 +15,7 @@ import { DocumentView } from "./nodes/DocumentView"; import { LinkMenu } from "./nodes/LinkMenu"; import React = require("react"); import { FieldWaiting } from "../../fields/Field"; +import { emptyFunction } from "../../Utils"; const higflyout = require("@hig/flyout"); export const { anchorPoints } = higflyout; export const Flyout = higflyout.default; @@ -217,7 +218,7 @@ export class DocumentDecorations extends React.Component<{}, { value: string }> let dragData = new DragManager.LinkDragData(SelectionManager.SelectedDocuments()[0]); DragManager.StartLinkDrag(this._linkerButton.current, dragData, e.pageX, e.pageY, { handlers: { - dragComplete: action(() => { }), + dragComplete: action(emptyFunction), }, hideSource: false }); @@ -262,7 +263,7 @@ export class DocumentDecorations extends React.Component<{}, { value: string }> let dragData = new DragManager.DocumentDragData(moddrag.length ? moddrag : draggedDocs); DragManager.StartDocumentDrag([this._linkButton.current], dragData, e.x, e.y, { handlers: { - dragComplete: action(() => { }), + dragComplete: action(emptyFunction), }, hideSource: false }); diff --git a/src/client/views/Main.scss b/src/client/views/Main.scss index fe7f007b0..8ef6b83f1 100644 --- a/src/client/views/Main.scss +++ b/src/client/views/Main.scss @@ -169,21 +169,21 @@ button:hover { overflow: scroll; } .mainDiv-textInput { - background:pink; - width: 200px; - height: 200px; + background-color: rgba(248, 6, 6, 0.1); + width: 200px; + height: 200px; + position:absolute; + overflow: visible; + top: 0; + left: 0; + .formattedTextBox-cont { + background-color: rgba(248, 6, 6, 0.1); + width: 100%; + height: 100%; position:absolute; - overflow: visible; top: 0; left: 0; - .formattedTextBox-cont { - background:pink; - width: 100%; - height: 100%; - position:absolute; - top: 0; - left: 0; - } +} } #mainContent-div { width:100%; diff --git a/src/client/views/Main.tsx b/src/client/views/Main.tsx index 012633bed..2751b1899 100644 --- a/src/client/views/Main.tsx +++ b/src/client/views/Main.tsx @@ -23,7 +23,7 @@ import { Documents } from '../documents/Documents'; import { ColumnAttributeModel } from '../northstar/core/attribute/AttributeModel'; import { AttributeTransformationModel } from '../northstar/core/attribute/AttributeTransformationModel'; import { Gateway, Settings } from '../northstar/manager/Gateway'; -import { AggregateFunction, Catalog } from '../northstar/model/idea/idea'; +import { AggregateFunction, Catalog, Point } from '../northstar/model/idea/idea'; import '../northstar/model/ModelExtensions'; import { HistogramOperation } from '../northstar/operations/HistogramOperation'; import '../northstar/utils/Extensions'; @@ -204,10 +204,12 @@ export class Main extends React.Component { @observable _textDoc?: Document = undefined; _textRect: any; + _textXf: Transform = Transform.Identity(); @action - SetTextDoc(textDoc?: Document, div?: HTMLDivElement) { + SetTextDoc(textDoc?: Document, div?: HTMLDivElement, tx?: Transform) { this._textDoc = undefined; this._textDoc = textDoc; + this._textXf = tx ? tx : Transform.Identity(); if (div) { this._textRect = div.getBoundingClientRect(); } @@ -220,8 +222,15 @@ export class Main extends React.Component { let y: number = this._textRect.y; let w: number = this._textRect.width; let h: number = this._textRect.height; - return
- { }} /> + let t = this._textXf.transformPoint(0, 0); + let s = this._textXf.transformPoint(1, 0); + s[0] = Math.sqrt((s[0] - t[0]) * (s[0] - t[0]) + (s[1] - t[1]) * (s[1] - t[1])); + return
+
+ + { }} /> + +
; } else return (null); @@ -310,7 +319,7 @@ export class Main extends React.Component {
,
-
+
]; } diff --git a/src/client/views/collections/CollectionDockingView.tsx b/src/client/views/collections/CollectionDockingView.tsx index ea6d3a247..212cf8a69 100644 --- a/src/client/views/collections/CollectionDockingView.tsx +++ b/src/client/views/collections/CollectionDockingView.tsx @@ -50,7 +50,7 @@ export class CollectionDockingView extends React.Component this.AddRightSplit(dragDoc, true).contentItems[0].tab._dragListener. - onMouseDown({ pageX: e.pageX, pageY: e.pageY, preventDefault: () => { }, button: 0 })); + onMouseDown({ pageX: e.pageX, pageY: e.pageY, preventDefault: emptyFunction, button: 0 })); } @action @@ -204,7 +204,7 @@ export class CollectionDockingView extends React.Component { }), + dragComplete: action(emptyFunction), }, hideSource: false }); diff --git a/src/client/views/collections/CollectionPDFView.tsx b/src/client/views/collections/CollectionPDFView.tsx index 97bac745c..6cbe59012 100644 --- a/src/client/views/collections/CollectionPDFView.tsx +++ b/src/client/views/collections/CollectionPDFView.tsx @@ -7,6 +7,7 @@ import React = require("react"); import { CollectionFreeFormView } from "./collectionFreeForm/CollectionFreeFormView"; import { FieldView, FieldViewProps } from "../nodes/FieldView"; import { CollectionRenderProps, CollectionBaseView, CollectionViewType } from "./CollectionBaseView"; +import { emptyFunction } from "../../../Utils"; @observer @@ -33,7 +34,7 @@ export class CollectionPDFView extends React.Component { onContextMenu = (e: React.MouseEvent): void => { if (!e.isPropagationStopped() && this.props.Document.Id !== "mainDoc") { // need to test this because GoldenLayout causes a parallel hierarchy in the React DOM for its children and the main document view7 - ContextMenu.Instance.addItem({ description: "PDFOptions", event: () => { } }); + ContextMenu.Instance.addItem({ description: "PDFOptions", event: emptyFunction }); } } diff --git a/src/client/views/collections/CollectionSchemaView.tsx b/src/client/views/collections/CollectionSchemaView.tsx index 587f60b3d..c67f8cd97 100644 --- a/src/client/views/collections/CollectionSchemaView.tsx +++ b/src/client/views/collections/CollectionSchemaView.tsx @@ -77,8 +77,8 @@ export class CollectionSchemaView extends CollectionSubView { let props: FieldViewProps = { Document: rowProps.value[0], fieldKey: rowProps.value[1], - isSelected: () => false, - select: () => { }, + isSelected: returnFalse, + select: emptyFunction, isTopMost: false, selectOnLoad: false, ScreenToLocalTransform: Transform.Identity, diff --git a/src/client/views/collections/CollectionSubView.tsx b/src/client/views/collections/CollectionSubView.tsx index 588ff9483..ef0684955 100644 --- a/src/client/views/collections/CollectionSubView.tsx +++ b/src/client/views/collections/CollectionSubView.tsx @@ -15,6 +15,7 @@ import { ServerUtils } from "../../../server/ServerUtil"; import { Server } from "../../Server"; import { FieldViewProps } from "../nodes/FieldView"; import * as rp from 'request-promise'; +import { emptyFunction } from "../../../Utils"; export interface CollectionViewProps extends FieldViewProps { addDocument: (document: Document, allowDuplicates?: boolean) => boolean; @@ -213,7 +214,7 @@ export class CollectionSubView extends React.Component { } if (promises.length) { - Promise.all(promises).catch(() => { }).then(() => batch.end()); + Promise.all(promises).catch(emptyFunction).then(() => batch.end()); } else { batch.end(); } diff --git a/src/client/views/collections/CollectionVideoView.tsx b/src/client/views/collections/CollectionVideoView.tsx index b02983a2e..6c9780adb 100644 --- a/src/client/views/collections/CollectionVideoView.tsx +++ b/src/client/views/collections/CollectionVideoView.tsx @@ -7,6 +7,7 @@ import React = require("react"); import "./CollectionVideoView.scss"; import { CollectionFreeFormView } from "./collectionFreeForm/CollectionFreeFormView"; import { FieldView, FieldViewProps } from "../nodes/FieldView"; +import { emptyFunction } from "../../../Utils"; @observer @@ -100,7 +101,7 @@ export class CollectionVideoView extends React.Component { onContextMenu = (e: React.MouseEvent): void => { if (!e.isPropagationStopped() && this.props.Document.Id !== "mainDoc") { // need to test this because GoldenLayout causes a parallel hierarchy in the React DOM for its children and the main document view7 - ContextMenu.Instance.addItem({ description: "VideoOptions", event: () => { } }); + ContextMenu.Instance.addItem({ description: "VideoOptions", event: emptyFunction }); } } diff --git a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx index 1feb30db1..102455d27 100644 --- a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx +++ b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx @@ -25,6 +25,7 @@ import { SelectionManager } from "../../../util/SelectionManager"; import { NumberField } from "../../../../fields/NumberField"; import { Main } from "../../Main"; import Measure from "react-measure"; +import { returnFalse, emptyFunction } from "../../../../Utils"; @observer export class CollectionFreeFormView extends CollectionSubView { @@ -200,7 +201,7 @@ export class CollectionFreeFormView extends CollectionSubView { @action private SetPan(panX: number, panY: number) { - Main.Instance.SetTextDoc(undefined, undefined); + Main.Instance.SetTextDoc(undefined, undefined, undefined); var x1 = this.getLocalTransform().inverse().Scale; const newPanX = Math.min((1 - 1 / x1) * this.nativeWidth, Math.max(0, panX)); const newPanY = Math.min((1 - 1 / x1) * this.nativeHeight, Math.max(0, panY)); @@ -290,13 +291,13 @@ export class CollectionFreeFormView extends CollectionSubView { get backgroundView() { return !this.backgroundLayout ? (null) : ( false} select={() => { }} />); + layoutKey={KeyStore.BackgroundLayout} isTopMost={this.props.isTopMost} isSelected={returnFalse} select={emptyFunction} />); } @computed get overlayView() { return !this.overlayLayout ? (null) : ( false} select={() => { }} />); + layoutKey={KeyStore.OverlayLayout} isTopMost={this.props.isTopMost} isSelected={returnFalse} select={emptyFunction} />); } getTransform = (): Transform => this.props.ScreenToLocalTransform().translate(-COLLECTION_BORDER_WIDTH, -COLLECTION_BORDER_WIDTH).translate(-this.centeringShiftX, -this.centeringShiftY).transform(this.getLocalTransform()); diff --git a/src/client/views/nodes/DocumentView.tsx b/src/client/views/nodes/DocumentView.tsx index 9670ca6b2..42967eb22 100644 --- a/src/client/views/nodes/DocumentView.tsx +++ b/src/client/views/nodes/DocumentView.tsx @@ -1,4 +1,4 @@ -import { action, computed, IReactionDisposer, reaction, runInAction } from "mobx"; +import { action, computed, IReactionDisposer, reaction, runInAction, trace } from "mobx"; import { observer } from "mobx-react"; import { Document } from "../../../fields/Document"; import { Field, FieldWaiting, Opt } from "../../../fields/Field"; @@ -8,7 +8,7 @@ import { ListField } from "../../../fields/ListField"; import { BooleanField } from "../../../fields/BooleanField"; import { TextField } from "../../../fields/TextField"; import { ServerUtils } from "../../../server/ServerUtil"; -import { Utils } from "../../../Utils"; +import { Utils, emptyFunction } from "../../../Utils"; import { Documents } from "../../documents/Documents"; import { DocumentManager } from "../../util/DocumentManager"; import { DragManager } from "../../util/DragManager"; @@ -62,12 +62,12 @@ export function FakeJsxArgs(keys: string[], fields: string[] = []): JsxArgs { let Keys: { [name: string]: any } = {}; let Fields: { [name: string]: any } = {}; for (const key of keys) { - let fn = () => { }; + let fn = emptyFunction; Object.defineProperty(fn, "name", { value: key + "Key" }); Keys[key] = fn; } for (const field of fields) { - let fn = () => { }; + let fn = emptyFunction; Object.defineProperty(fn, "name", { value: field }); Fields[field] = fn; } @@ -157,7 +157,7 @@ export class DocumentView extends React.Component { dragData.moveDocument = this.props.moveDocument; DragManager.StartDocumentDrag([this._mainCont.current], dragData, x, y, { handlers: { - dragComplete: action(() => { }) + dragComplete: action(emptyFunction) }, hideSource: !dropAliasOfDraggedDoc }); @@ -377,14 +377,28 @@ export class DocumentView extends React.Component { SelectionManager.SelectDoc(this, ctrlPressed); } + @computed get nativeWidth(): number { return this.props.Document.GetNumber(KeyStore.NativeWidth, 0); } + @computed get nativeHeight(): number { return this.props.Document.GetNumber(KeyStore.NativeHeight, 0); } + @computed + get contents() { + trace(); + return (); + } + render() { if (!this.props.Document) { return null; } + trace(); var scaling = this.props.ContentScaling(); - var nativeWidth = this.props.Document.GetNumber(KeyStore.NativeWidth, 0); - var nativeHeight = this.props.Document.GetNumber(KeyStore.NativeHeight, 0); + var nativeWidth = this.nativeWidth; + var nativeHeight = this.nativeHeight; if (this.isMinimized()) { return ( @@ -420,12 +434,7 @@ export class DocumentView extends React.Component { onContextMenu={this.onContextMenu} onPointerDown={this.onPointerDown} > - + {this.contents}
); } diff --git a/src/client/views/nodes/FieldView.tsx b/src/client/views/nodes/FieldView.tsx index 07c5b332c..40b44aae5 100644 --- a/src/client/views/nodes/FieldView.tsx +++ b/src/client/views/nodes/FieldView.tsx @@ -19,7 +19,7 @@ import { ListField } from "../../../fields/ListField"; import { DocumentContentsView } from "./DocumentContentsView"; import { Transform } from "../../util/Transform"; import { KeyStore } from "../../../fields/KeyStore"; -import { returnFalse } from "../../../Utils"; +import { returnFalse, emptyFunction } from "../../../Utils"; // @@ -85,9 +85,9 @@ export class FieldView extends React.Component { PanelHeight={() => 100} isTopMost={true} //TODO Why is this top most? selectOnLoad={false} - focus={() => { }} - isSelected={() => false} - select={() => false} + focus={emptyFunction} + isSelected={returnFalse} + select={returnFalse} layoutKey={KeyStore.Layout} ContainingCollectionView={undefined} parentActive={this.props.active} @@ -111,7 +111,7 @@ export class FieldView extends React.Component { } else { return

{"Waiting for server..."}

; - } + } } } \ No newline at end of file diff --git a/src/client/views/nodes/FormattedTextBox.tsx b/src/client/views/nodes/FormattedTextBox.tsx index beca6cdc6..bb1bc4fb0 100644 --- a/src/client/views/nodes/FormattedTextBox.tsx +++ b/src/client/views/nodes/FormattedTextBox.tsx @@ -161,13 +161,13 @@ export class FormattedTextBox extends React.Component { } if (this.props.fieldKey !== KeyStore.Archives) { e.preventDefault(); - Main.Instance.SetTextDoc(this.props.Document, this._ref.current!); + Main.Instance.SetTextDoc(this.props.Document, this._ref.current!, this.props.ScreenToLocalTransform()); } } onFocused = (e: React.FocusEvent): void => { if (this.props.fieldKey !== KeyStore.Archives) { - Main.Instance.SetTextDoc(this.props.Document, this._ref.current!); + Main.Instance.SetTextDoc(this.props.Document, this._ref.current!, this.props.ScreenToLocalTransform()); } } diff --git a/src/client/views/nodes/VideoBox.tsx b/src/client/views/nodes/VideoBox.tsx index 314af64c9..9d7c2bc56 100644 --- a/src/client/views/nodes/VideoBox.tsx +++ b/src/client/views/nodes/VideoBox.tsx @@ -66,7 +66,7 @@ export class VideoBox extends React.Component { {({ measureRef }) =>
-