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; Highlights: any[]; Annotations: any[]; CurrAnno: any[]; } /** * 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) => { let index:number = -1; //finding the highlight in the highlight array this.props.Highlights.forEach((e) => { for (let i = 0; i < e.spans.length; i++){ if (e.spans[i] == this.props.Span){ index = this.props.Highlights.indexOf(e); this.props.Highlights.splice(index, 1); } } }) //removing from CurrAnno and Annotation array this.props.Annotations.splice(index, 1); this.props.CurrAnno.pop() //removing span from div 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){ this.props.Highlights.forEach((item) => { if (item == e){ item.remove(); } }) e.remove(); } } }) } } render() { return (
); } }