aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/linking
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/views/linking')
-rw-r--r--src/client/views/linking/LinkEditor.scss3
-rw-r--r--src/client/views/linking/LinkEditor.tsx29
-rw-r--r--src/client/views/linking/LinkMenu.scss1
-rw-r--r--src/client/views/linking/LinkMenu.tsx26
-rw-r--r--src/client/views/linking/LinkMenuItem.tsx5
5 files changed, 33 insertions, 31 deletions
diff --git a/src/client/views/linking/LinkEditor.scss b/src/client/views/linking/LinkEditor.scss
index d26b7920a..7e6999cdc 100644
--- a/src/client/views/linking/LinkEditor.scss
+++ b/src/client/views/linking/LinkEditor.scss
@@ -89,7 +89,7 @@
/* float: right; */
border-radius: 7px;
font-size: 9px;
- background-color: black;
+ background: black;
/* padding: 3px; */
padding-top: 4px;
padding-left: 7px;
@@ -100,6 +100,7 @@
&:hover {
cursor: pointer;
+ background: grey;
}
}
}
diff --git a/src/client/views/linking/LinkEditor.tsx b/src/client/views/linking/LinkEditor.tsx
index 04329182e..75fc8bf85 100644
--- a/src/client/views/linking/LinkEditor.tsx
+++ b/src/client/views/linking/LinkEditor.tsx
@@ -1,20 +1,16 @@
import { library } from "@fortawesome/fontawesome-svg-core";
import { faArrowLeft, faCog, faEllipsisV, faExchangeAlt, faPlus, faTable, faTimes, faTrash } from '@fortawesome/free-solid-svg-icons';
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
-import { action, observable, computed, toJS } from "mobx";
+import { Tooltip } from "@material-ui/core";
+import { action, computed, observable } from "mobx";
import { observer } from "mobx-react";
-import { Doc, Opt } from "../../../fields/Doc";
-import { StrCast, DateCast } from "../../../fields/Types";
+import { Doc } from "../../../fields/Doc";
+import { DateCast, StrCast } from "../../../fields/Types";
import { Utils } from "../../../Utils";
import { LinkManager } from "../../util/LinkManager";
+import { undoBatch } from "../../util/UndoManager";
import './LinkEditor.scss';
import React = require("react");
-import { DocumentView } from "../nodes/DocumentView";
-import { DocumentLinksButton } from "../nodes/DocumentLinksButton";
-import { EditableView } from "../EditableView";
-import { RefObject } from "react";
-import { Tooltip } from "@material-ui/core";
-import { undoBatch } from "../../util/UndoManager";
library.add(faArrowLeft, faEllipsisV, faTable, faTrash, faCog, faExchangeAlt, faTimes, faPlus);
@@ -291,26 +287,23 @@ export class LinkEditor extends React.Component<LinkEditorProps> {
@observable openDropdown: boolean = false;
@observable showInfo: boolean = false;
@computed get infoIcon() { if (this.showInfo) { return "chevron-up"; } return "chevron-down"; }
- @observable private buttonColor: string = "black";
+ @observable private buttonColor: string = "";
//@observable description = this.props.linkDoc.description ? StrCast(this.props.linkDoc.description) : "DESCRIPTION";
- @undoBatch
- @action
+ @undoBatch @action
deleteLink = (): void => {
LinkManager.Instance.deleteLink(this.props.linkDoc);
this.props.showLinks();
}
- @action
+ @undoBatch @action
setDescripValue = (value: string) => {
if (LinkManager.currentLink) {
LinkManager.currentLink.description = value;
this.buttonColor = "rgb(62, 133, 55)";
- setTimeout(action(() => {
- this.buttonColor = "black";
- }), 750);
+ setTimeout(action(() => this.buttonColor = ""), 750);
return true;
}
}
@@ -352,7 +345,7 @@ export class LinkEditor extends React.Component<LinkEditorProps> {
></input>
</div>
<div className="linkEditor-description-add-button"
- style={{ backgroundColor: this.buttonColor }}
+ style={{ background: this.buttonColor }}
onPointerDown={this.onDown}>Set</div>
</div></div>;
}
@@ -362,7 +355,7 @@ export class LinkEditor extends React.Component<LinkEditorProps> {
this.openDropdown = !this.openDropdown;
}
- @action
+ @undoBatch @action
changeFollowBehavior = (follow: string) => {
this.openDropdown = false;
Doc.GetProto(this.props.linkDoc).followLinkLocation = follow;
diff --git a/src/client/views/linking/LinkMenu.scss b/src/client/views/linking/LinkMenu.scss
index 98e4171f0..4dc25031d 100644
--- a/src/client/views/linking/LinkMenu.scss
+++ b/src/client/views/linking/LinkMenu.scss
@@ -6,6 +6,7 @@
position: absolute;
top: 0;
left: 0;
+ z-index: 999;
.linkMenu-list {
diff --git a/src/client/views/linking/LinkMenu.tsx b/src/client/views/linking/LinkMenu.tsx
index 7b5fb0127..8ecde959f 100644
--- a/src/client/views/linking/LinkMenu.tsx
+++ b/src/client/views/linking/LinkMenu.tsx
@@ -4,14 +4,13 @@ import { DocumentView } from "../nodes/DocumentView";
import { LinkEditor } from "./LinkEditor";
import './LinkMenu.scss';
import React = require("react");
-import { Doc, Opt } from "../../../fields/Doc";
+import { Doc } from "../../../fields/Doc";
import { LinkManager } from "../../util/LinkManager";
import { LinkMenuGroup } from "./LinkMenuGroup";
import { faTrash } from '@fortawesome/free-solid-svg-icons';
import { library } from "@fortawesome/fontawesome-svg-core";
import { DocumentLinksButton } from "../nodes/DocumentLinksButton";
import { LinkDocPreview } from "../nodes/LinkDocPreview";
-import { isUndefined } from "util";
library.add(faTrash);
@@ -19,7 +18,6 @@ interface Props {
docView: DocumentView;
changeFlyout: () => void;
addDocTab: (document: Doc, where: string) => boolean;
- location: number[];
}
@observer
@@ -85,17 +83,25 @@ export class LinkMenu extends React.Component<Props> {
return linkItems;
}
+ @computed
+ get position() {
+ const docView = this.props.docView;
+ const transform = (docView.props.ScreenToLocalTransform().scale(docView.props.ContentScaling())).inverse();
+ const [sptX, sptY] = transform.transformPoint(0, 0);
+ const [bptX, bptY] = transform.transformPoint(docView.props.PanelWidth(), docView.props.PanelHeight());
+ return { x: sptX, y: sptY, r: bptX, b: bptY };
+ }
+
render() {
+ console.log("computed", this.position.x, this.position.b);
const sourceDoc = this.props.docView.props.Document;
const groups: Map<string, Doc[]> = LinkManager.Instance.getRelatedGroupedLinks(sourceDoc);
return <div className="linkMenu" ref={this._linkMenuRef} >
- {!this._editingLink ? <div className="linkMenu-list" style={{
- left: this.props.location[0], top: this.props.location[1]
- }}>
- {this.renderAllGroups(groups)}
- </div> : <div className="linkMenu-listEditor" style={{
- left: this.props.location[0], top: this.props.location[1]
- }}>
+ {!this._editingLink ?
+ <div className="linkMenu-list" style={{ left: this.position.x, top: this.position.b + 15 }}>
+ {this.renderAllGroups(groups)}
+ </div> :
+ <div className="linkMenu-listEditor" style={{ left: this.position.x, top: this.position.b + 15 }}>
<LinkEditor sourceDoc={this.props.docView.props.Document} linkDoc={this._editingLink}
showLinks={action(() => this._editingLink = undefined)} />
</div>
diff --git a/src/client/views/linking/LinkMenuItem.tsx b/src/client/views/linking/LinkMenuItem.tsx
index d1c839c3b..f4aed94e7 100644
--- a/src/client/views/linking/LinkMenuItem.tsx
+++ b/src/client/views/linking/LinkMenuItem.tsx
@@ -167,6 +167,7 @@ export class LinkMenuItem extends React.Component<LinkMenuItemProps> {
DocumentLinksButton.EditLink = undefined;
}
+ @undoBatch
@action
showLink = () => {
this.props.linkDoc.hidden = !this.props.linkDoc.hidden;
@@ -182,7 +183,7 @@ export class LinkMenuItem extends React.Component<LinkMenuItemProps> {
switch (this.props.destinationDoc.type) {
case DocumentType.IMG: destinationIcon = "image"; break;
case DocumentType.COMPARISON: destinationIcon = "columns"; break;
- case DocumentType.RTF: destinationIcon = "font"; break;
+ case DocumentType.RTF: destinationIcon = "sticky-note"; break;
case DocumentType.COL: destinationIcon = "folder"; break;
case DocumentType.WEB: destinationIcon = "globe-asia"; break;
case DocumentType.SCREENSHOT: destinationIcon = "photo-video"; break;
@@ -190,12 +191,12 @@ export class LinkMenuItem extends React.Component<LinkMenuItemProps> {
case DocumentType.AUDIO: destinationIcon = "microphone"; break;
case DocumentType.BUTTON: destinationIcon = "bolt"; break;
case DocumentType.PRES: destinationIcon = "tv"; break;
- case DocumentType.QUERY: destinationIcon = "search"; break;
case DocumentType.SCRIPTING: destinationIcon = "terminal"; break;
case DocumentType.IMPORT: destinationIcon = "cloud-upload-alt"; break;
case DocumentType.DOCHOLDER: destinationIcon = "expand"; break;
case DocumentType.VID: destinationIcon = "video"; break;
case DocumentType.INK: destinationIcon = "pen-nib"; break;
+ case DocumentType.PDF: destinationIcon = "file"; break;
default: destinationIcon = "question"; break;
}