From 1fb290bcc1c46214cfd553f31c1282d2694530ea Mon Sep 17 00:00:00 2001
From: monikahedman <monika_hedman@brown.edu>
Date: Thu, 22 Aug 2019 19:42:54 -0400
Subject: making the box come up

---
 src/client/views/linking/LinkFollowBox.tsx | 87 +++++++++++++++++++-----------
 1 file changed, 55 insertions(+), 32 deletions(-)

(limited to 'src/client/views/linking/LinkFollowBox.tsx')

diff --git a/src/client/views/linking/LinkFollowBox.tsx b/src/client/views/linking/LinkFollowBox.tsx
index 7fc4449d3..247b67776 100644
--- a/src/client/views/linking/LinkFollowBox.tsx
+++ b/src/client/views/linking/LinkFollowBox.tsx
@@ -9,13 +9,22 @@ import { CollectionViewType } from "../collections/CollectionBaseView";
 import { CollectionDockingView } from "../collections/CollectionDockingView";
 import { SelectionManager } from "../../util/SelectionManager";
 import { DocumentManager } from "../../util/DocumentManager";
+import { DocumentView } from "../nodes/DocumentView";
+import "./LinkFollowBox.scss";
+
+export type LinkParamOptions = {
+    container: Doc;
+    context: Doc;
+    sourceDoc: Doc;
+    shoudldZoom: boolean;
+    linkDoc: Doc;
+};
 
 @observer
 export class LinkFollowBox extends React.Component<FieldViewProps> {
 
     public static LayoutString() { return FieldView.LayoutString(LinkFollowBox); }
     public static Instance: LinkFollowBox;
-    //set this to be the default link behavior, can be any of the above
 
     unhighlight = () => {
         Doc.UnhighlightAll();
@@ -31,19 +40,32 @@ export class LinkFollowBox extends React.Component<FieldViewProps> {
         }, 10000);
     }
 
+    // DONE
+    @undoBatch
+    openFullScreen = (destinationDoc: Doc) => {
+        let view: DocumentView | null = DocumentManager.Instance.getDocumentView(destinationDoc)
+        view && CollectionDockingView.Instance && CollectionDockingView.Instance.OpenFullScreen(view);
+    }
+
+    // should container be a doc or documentview or what? This one needs work and is more long term
+    @undoBatch
+    openInContainer = (destinationDoc: Doc, options: { container: Doc }) => {
+
+    }
+
     // NOT TESTED
     // col = collection the doc is in
     // target = the document to center on
     @undoBatch
-    openLinkColRight = (destinationDoc: Doc, col: Doc) => {
-        col = Doc.IsPrototype(col) ? Doc.MakeDelegate(col) : col;
-        if (NumCast(col.viewType, CollectionViewType.Invalid) === CollectionViewType.Freeform) {
+    openLinkColRight = (destinationDoc: Doc, options: { context: Doc }) => {
+        options.context = Doc.IsPrototype(options.context) ? Doc.MakeDelegate(options.context) : options.context;
+        if (NumCast(options.context.viewType, CollectionViewType.Invalid) === CollectionViewType.Freeform) {
             const newPanX = NumCast(destinationDoc.x) + NumCast(destinationDoc.width) / NumCast(destinationDoc.zoomBasis, 1) / 2;
             const newPanY = NumCast(destinationDoc.y) + NumCast(destinationDoc.height) / NumCast(destinationDoc.zoomBasis, 1) / 2;
-            col.panX = newPanX;
-            col.panY = newPanY;
+            options.context.panX = newPanX;
+            options.context.panY = newPanY;
         }
-        CollectionDockingView.Instance.AddRightSplit(col, undefined);
+        CollectionDockingView.Instance.AddRightSplit(options.context, undefined);
     }
 
     // DONE
@@ -60,39 +82,39 @@ export class LinkFollowBox extends React.Component<FieldViewProps> {
     // this is the standard "follow link" (jump to document)
     // taken from follow link
     @undoBatch
-    jumpToLink = async (destinationDoc: Doc, shouldZoom: boolean, linkDoc: Doc) => {
+    jumpToLink = async (destinationDoc: Doc, options: { shouldZoom: boolean, linkDoc: Doc }) => {
         //there is an issue right now so this will be false automatically
-        shouldZoom = false;
+        options.shouldZoom = false;
         this.highlightDoc(destinationDoc);
         let jumpToDoc = destinationDoc;
         let pdfDoc = FieldValue(Cast(destinationDoc, Doc));
         if (pdfDoc) {
             jumpToDoc = pdfDoc;
         }
-        let proto = Doc.GetProto(linkDoc);
+        let proto = Doc.GetProto(options.linkDoc);
         let targetContext = await Cast(proto.targetContext, Doc);
         let sourceContext = await Cast(proto.sourceContext, Doc);
 
         let dockingFunc = (document: Doc) => { this.props.addDocTab(document, undefined, "inTab"); SelectionManager.DeselectAll(); };
 
-        if (destinationDoc === linkDoc.anchor2 && targetContext) {
-            DocumentManager.Instance.jumpToDocument(jumpToDoc, shouldZoom, false, async document => dockingFunc(document), undefined, targetContext);
+        if (destinationDoc === options.linkDoc.anchor2 && targetContext) {
+            DocumentManager.Instance.jumpToDocument(jumpToDoc, options.shouldZoom, false, async document => dockingFunc(document), undefined, targetContext);
         }
-        else if (destinationDoc === linkDoc.anchor1 && sourceContext) {
-            DocumentManager.Instance.jumpToDocument(jumpToDoc, shouldZoom, false, document => dockingFunc(sourceContext!));
+        else if (destinationDoc === options.linkDoc.anchor1 && sourceContext) {
+            DocumentManager.Instance.jumpToDocument(jumpToDoc, options.shouldZoom, false, document => dockingFunc(sourceContext!));
         }
         else if (DocumentManager.Instance.getDocumentView(jumpToDoc)) {
-            DocumentManager.Instance.jumpToDocument(jumpToDoc, shouldZoom, undefined, undefined, NumCast((destinationDoc === linkDoc.anchor2 ? linkDoc.anchor2Page : linkDoc.anchor1Page)));
+            DocumentManager.Instance.jumpToDocument(jumpToDoc, options.shouldZoom, undefined, undefined, NumCast((destinationDoc === options.linkDoc.anchor2 ? options.linkDoc.anchor2Page : options.linkDoc.anchor1Page)));
 
         }
         else {
-            DocumentManager.Instance.jumpToDocument(jumpToDoc, shouldZoom, false, dockingFunc);
+            DocumentManager.Instance.jumpToDocument(jumpToDoc, options.shouldZoom, false, dockingFunc);
         }
     }
 
     // DONE
     // opens link in new tab (not in a collection)
-    // this opens it full screen, do we need a separate full screen option?
+    // this opens it full screen in new tab
     @undoBatch
     openLinkTab = (destinationDoc: Doc) => {
         this.highlightDoc(destinationDoc);
@@ -106,32 +128,32 @@ export class LinkFollowBox extends React.Component<FieldViewProps> {
     // col = collection the doc is in
     // target = the document to center on
     @undoBatch
-    openLinkColTab = (destinationDoc: Doc, col: Doc) => {
+    openLinkColTab = (destinationDoc: Doc, options: { context: Doc }) => {
         this.highlightDoc(destinationDoc);
-        col = Doc.IsPrototype(col) ? Doc.MakeDelegate(col) : col;
-        if (NumCast(col.viewType, CollectionViewType.Invalid) === CollectionViewType.Freeform) {
+        options.context = Doc.IsPrototype(options.context) ? Doc.MakeDelegate(options.context) : options.context;
+        if (NumCast(options.context.viewType, CollectionViewType.Invalid) === CollectionViewType.Freeform) {
             const newPanX = NumCast(destinationDoc.x) + NumCast(destinationDoc.width) / NumCast(destinationDoc.zoomBasis, 1) / 2;
             const newPanY = NumCast(destinationDoc.y) + NumCast(destinationDoc.height) / NumCast(destinationDoc.zoomBasis, 1) / 2;
-            col.panX = newPanX;
-            col.panY = newPanY;
+            options.context.panX = newPanX;
+            options.context.panY = newPanY;
         }
         // CollectionDockingView.Instance.AddRightSplit(col, undefined);
-        this.props.addDocTab(col, undefined, "inTab");
+        this.props.addDocTab(options.context, undefined, "inTab");
         SelectionManager.DeselectAll();
     }
 
     // DONE
     // this will open a link next to the source doc
     @undoBatch
-    openLinkInPlace = (destinationDoc: Doc, sourceDoc: Doc) => {
+    openLinkInPlace = (destinationDoc: Doc, options: { sourceDoc: Doc }) => {
         this.highlightDoc(destinationDoc);
 
         let alias = Doc.MakeAlias(destinationDoc);
-        let y = NumCast(sourceDoc.y);
-        let x = NumCast(sourceDoc.x);
+        let y = NumCast(options.sourceDoc.y);
+        let x = NumCast(options.sourceDoc.x);
 
-        let width = NumCast(sourceDoc.width);
-        let height = NumCast(sourceDoc.height);
+        let width = NumCast(options.sourceDoc.width);
+        let height = NumCast(options.sourceDoc.height);
 
         alias.x = x + width + 30;
         alias.y = y;
@@ -139,18 +161,19 @@ export class LinkFollowBox extends React.Component<FieldViewProps> {
         alias.height = height;
 
         SelectionManager.SelectedDocuments().map(dv => {
-            if (dv.props.Document === sourceDoc) {
+            if (dv.props.Document === options.sourceDoc) {
                 dv.props.addDocument && dv.props.addDocument(alias, false);
             }
         });
     }
 
-    private defaultLinkBehavior: any = this.openLinkInPlace;
-    private currentLinkBehavior: any = this.defaultLinkBehavior;
+    //set this to be the default link behavior, can be any of the above
+    private defaultLinkBehavior: (destinationDoc: Doc, options?: any) => void = this.openLinkInPlace;
+    private currentLinkBehavior: (destinationDoc: Doc, options?: any) => void = this.defaultLinkBehavior;
 
     render() {
         return (
-            <div className="linkFollowBox-main">
+            <div className="linkFollowBox-main" style={{ height: NumCast(this.props.Document.height), width: NumCast(this.props.Document.width) }}>
 
             </div>
         );
-- 
cgit v1.2.3-70-g09d2

