aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorbob <bcz@cs.brown.edu>2019-06-18 10:28:31 -0400
committerbob <bcz@cs.brown.edu>2019-06-18 10:28:31 -0400
commit08872def596af073c5f14336c8faf07f44561bbc (patch)
treebd67430a8060d04686eddf390f000eb3db6e74b4 /src
parent8d0026573ad9a196f864490bcf07c78f54082bad (diff)
parentc50ba1c4cc01d5cd085dee0dae6f633164efeb80 (diff)
Merge branch 'master' of https://github.com/browngraphicslab/Dash-Web
Diffstat (limited to 'src')
-rw-r--r--src/client/views/nodes/PDFBox.tsx2
-rw-r--r--src/client/views/pdf/PDFMenu.tsx24
-rw-r--r--src/client/views/pdf/PDFViewer.tsx21
3 files changed, 39 insertions, 8 deletions
diff --git a/src/client/views/nodes/PDFBox.tsx b/src/client/views/nodes/PDFBox.tsx
index 38e91ac12..80d274c6d 100644
--- a/src/client/views/nodes/PDFBox.tsx
+++ b/src/client/views/nodes/PDFBox.tsx
@@ -62,7 +62,7 @@ export class PDFBox extends DocComponent<FieldViewProps, PdfDocument>(PdfDocumen
createRef = (ele: HTMLDivElement | null) => {
if (this._reactionDisposer) this._reactionDisposer();
this._reactionDisposer = reaction(() => this.props.Document.scrollY, () => {
- ele && ele.scrollTo({ top: NumCast(this.Document.scrollY), behavior: "smooth" });
+ ele && ele.scrollTo({ top: NumCast(this.Document.scrollY), behavior: "auto" });
});
}
diff --git a/src/client/views/pdf/PDFMenu.tsx b/src/client/views/pdf/PDFMenu.tsx
index b44370e3d..7817e8c26 100644
--- a/src/client/views/pdf/PDFMenu.tsx
+++ b/src/client/views/pdf/PDFMenu.tsx
@@ -10,8 +10,8 @@ import { Doc } from "../../../new_fields/Doc";
export default class PDFMenu extends React.Component {
static Instance: PDFMenu;
- @observable private _top: number = 0;
- @observable private _left: number = 0;
+ @observable private _top: number = -300;
+ @observable private _left: number = -300;
@observable private _opacity: number = 1;
@observable private _transition: string = "opacity 0.5s";
@observable private _transitionDelay: string = "";
@@ -22,18 +22,25 @@ export default class PDFMenu extends React.Component {
@observable Highlighting: boolean = false;
private _timeout: NodeJS.Timeout | undefined;
+ private _offsetY: number = 0;
+ private _offsetX: number = 0;
+ private _mainCont: React.RefObject<HTMLDivElement>;
constructor(props: Readonly<{}>) {
super(props);
PDFMenu.Instance = this;
+
+ this._mainCont = React.createRef();
}
pointerDown = (e: React.PointerEvent) => {
document.removeEventListener("pointermove", this.StartDrag);
document.addEventListener("pointermove", this.StartDrag);
- document.removeEventListener("pointerup", this.pointerUp)
- document.addEventListener("pointerup", this.pointerUp)
+ document.removeEventListener("pointerup", this.pointerUp);
+ document.addEventListener("pointerup", this.pointerUp);
+
+ console.log(this.StartDrag);
e.stopPropagation();
e.preventDefault();
@@ -102,8 +109,8 @@ export default class PDFMenu extends React.Component {
@action
dragging = (e: PointerEvent) => {
- this._left += e.movementX;
- this._top += e.movementY;
+ this._left = e.pageX - this._offsetX;
+ this._top = e.pageY - this._offsetY;
e.stopPropagation();
e.preventDefault();
@@ -122,6 +129,9 @@ export default class PDFMenu extends React.Component {
document.removeEventListener("pointerup", this.dragEnd);
document.addEventListener("pointerup", this.dragEnd);
+ this._offsetX = this._mainCont.current!.getBoundingClientRect().width - e.nativeEvent.offsetX;
+ this._offsetY = e.nativeEvent.offsetY;
+
e.stopPropagation();
e.preventDefault();
}
@@ -139,7 +149,7 @@ export default class PDFMenu extends React.Component {
render() {
return (
- <div className="pdfMenu-cont" onPointerLeave={this.pointerLeave} onPointerEnter={this.pointerEntered}
+ <div className="pdfMenu-cont" onPointerLeave={this.pointerLeave} onPointerEnter={this.pointerEntered} ref={this._mainCont}
style={{ left: this._left, top: this._top, opacity: this._opacity, transition: this._transition, transitionDelay: this._transitionDelay }}>
<button className="pdfMenu-button" title="Highlight" onClick={this.highlightClicked}
style={this.Highlighting ? { backgroundColor: "#121212" } : {}}>
diff --git a/src/client/views/pdf/PDFViewer.tsx b/src/client/views/pdf/PDFViewer.tsx
index 89f4fd778..86a17c0a6 100644
--- a/src/client/views/pdf/PDFViewer.tsx
+++ b/src/client/views/pdf/PDFViewer.tsx
@@ -18,6 +18,7 @@ import { PDFBox } from "../nodes/PDFBox";
import Page from "./Page";
import "./PDFViewer.scss";
import React = require("react");
+import PDFMenu from "./PDFMenu";
export const scale = 2;
interface IPDFViewerProps {
@@ -333,6 +334,26 @@ class Viewer extends React.Component<IViewerProps> {
else {
this._savedAnnotations.setValue(page, [div]);
}
+ PDFMenu.Instance.StartDrag = this.startDrag;
+ }
+ }
+
+ startDrag = (e: PointerEvent) => {
+ e.preventDefault();
+ e.stopPropagation();
+ let thisDoc = this.props.parent.Document;
+ // document that this annotation is linked to
+ let targetDoc = Docs.TextDocument({ width: 200, height: 200, title: "New Annotation" });
+ targetDoc.targetPage = Math.min(...this._savedAnnotations.keys());
+ let annotationDoc = this.makeAnnotationDocument(targetDoc, 1, "red");
+ let dragData = new DragManager.AnnotationDragData(thisDoc, annotationDoc, targetDoc);
+ if (this._annotationLayer.current) {
+ DragManager.StartAnnotationDrag([this._annotationLayer.current], dragData, e.pageX, e.pageY, {
+ handlers: {
+ dragComplete: action(emptyFunction),
+ },
+ hideSource: false
+ });
}
}