From 124197658624b79426e666b72da7ef960367cf04 Mon Sep 17 00:00:00 2001 From: Andrew Kim Date: Tue, 26 Feb 2019 02:17:34 -0500 Subject: finished stickies/area-selection and made them saveable, single line highlighting and annotation, ink for drawing on stickies and on the PDF canvas itself --- src/views/nodes/Annotation.tsx | 93 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 src/views/nodes/Annotation.tsx (limited to 'src') diff --git a/src/views/nodes/Annotation.tsx b/src/views/nodes/Annotation.tsx new file mode 100644 index 000000000..6929aea76 --- /dev/null +++ b/src/views/nodes/Annotation.tsx @@ -0,0 +1,93 @@ +import "./ImageBox.scss"; +import React = require("react") +import { observer } from "mobx-react" +import { observable, action } from 'mobx'; +import 'react-pdf/dist/Page/AnnotationLayer.css' + +interface IProps{ + Span: HTMLSpanElement; + X: number; + Y: number; + +} + +/** + * Annotation class is used to take notes on a particular highlight. You can also change highlighted span's color + * Improvements to be made: Removing the annotation when onRemove is called. (Removing this, not just the highlighted span). + * Also need to support multiline highlighting + * + * Written by: Andrew Kim + */ +@observer +export class Annotation extends React.Component { + + /** + * changes color of the span (highlighted section) + */ + 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"){ + 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)" + } 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) => { + + 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){ + e.remove(); + + } + } + }) + } + } + + render() { + return ( +
+
+ +
+ + + + +
+ +
+
+ +
+
+ + ); + } +} \ No newline at end of file -- cgit v1.2.3-70-g09d2