aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/linking/LinkFollowBox.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/views/linking/LinkFollowBox.tsx')
-rw-r--r--src/client/views/linking/LinkFollowBox.tsx87
1 files changed, 55 insertions, 32 deletions
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>
);