import React = require("react"); import "./PDFMenu.scss"; import { observable, action, computed, } from "mobx"; import { observer } from "mobx-react"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { unimplementedFunction, returnFalse, Utils } from "../../../Utils"; import AntimodeMenu, { AntimodeMenuProps } from "../AntimodeMenu"; import { Doc, Opt } from "../../../fields/Doc"; import { ColorState } from "react-color"; import { ButtonDropdown } from "../nodes/formattedText/RichTextMenu"; @observer export default class PDFMenu extends AntimodeMenu { static Instance: PDFMenu; private _commentCont = React.createRef(); private _palette = [ "rgba(208, 2, 27, 0.8)", "rgba(238, 0, 0, 0.8)", "rgba(245, 166, 35, 0.8)", "rgba(248, 231, 28, 0.8)", "rgba(245, 230, 95, 0.616)", "rgba(139, 87, 42, 0.8)", "rgba(126, 211, 33, 0.8)", "rgba(65, 117, 5, 0.8)", "rgba(144, 19, 254, 0.8)", "rgba(238, 169, 184, 0.8)", "rgba(224, 187, 228, 0.8)", "rgba(225, 223, 211, 0.8)", "rgba(255, 255, 255, 0.8)", "rgba(155, 155, 155, 0.8)", "rgba(0, 0, 0, 0.8)"]; @observable private _keyValue: string = ""; @observable private _valueValue: string = ""; @observable private _added: boolean = false; @observable private highlightColor: string = "rgba(245, 230, 95, 0.616)"; @observable public _colorBtn = false; @observable public Highlighting: boolean = false; @observable public Status: "pdf" | "annotation" | "" = ""; public StartDrag: (e: PointerEvent, ele: HTMLElement) => void = unimplementedFunction; public Highlight: (color: string) => Opt = (color: string) => undefined; public Delete: () => void = unimplementedFunction; public AddTag: (key: string, value: string) => boolean = returnFalse; public PinToPres: () => void = unimplementedFunction; public Marquee: { left: number; top: number; width: number; height: number; } | undefined; public get Active() { return this._left > 0; } constructor(props: Readonly<{}>) { super(props); PDFMenu.Instance = this; PDFMenu.Instance._canFade = false; } pointerDown = (e: React.PointerEvent) => { document.removeEventListener("pointermove", this.pointerMove); document.addEventListener("pointermove", this.pointerMove); document.removeEventListener("pointerup", this.pointerUp); document.addEventListener("pointerup", this.pointerUp); e.stopPropagation(); e.preventDefault(); } pointerMove = (e: PointerEvent) => { e.stopPropagation(); e.preventDefault(); if (!this._dragging) { this.StartDrag(e, this._commentCont.current!); this._dragging = true; } } pointerUp = (e: PointerEvent) => { this._dragging = false; document.removeEventListener("pointermove", this.pointerMove); document.removeEventListener("pointerup", this.pointerUp); e.stopPropagation(); e.preventDefault(); } @action highlightClicked = (e: React.MouseEvent) => { if (!this.Highlight(this.highlightColor) && this.Pinned) { this.Highlighting = !this.Highlighting; } } @computed get highlighter() { const button = ; const dropdownContent =

Change highlighter color:

{this._palette.map(color => { if (color) { return this.highlightColor === color ? : ; } })}
; return ( ); } @action changeHighlightColor = (color: string, e: React.PointerEvent) => { const col: ColorState = { hex: color, hsl: { a: 0, h: 0, s: 0, l: 0, source: "" }, hsv: { a: 0, h: 0, s: 0, v: 0, source: "" }, rgb: { a: 0, r: 0, b: 0, g: 0, source: "" }, oldHue: 0, source: "", }; e.preventDefault(); e.stopPropagation(); this.highlightColor = Utils.colorString(col); } deleteClicked = (e: React.PointerEvent) => { this.Delete(); } @action keyChanged = (e: React.ChangeEvent) => { this._keyValue = e.currentTarget.value; } @action valueChanged = (e: React.ChangeEvent) => { this._valueValue = e.currentTarget.value; } @action addTag = (e: React.PointerEvent) => { if (this._keyValue.length > 0 && this._valueValue.length > 0) { this._added = this.AddTag(this._keyValue, this._valueValue); setTimeout(action(() => this._added = false), 1000); } } render() { const buttons = this.Status === "pdf" ? [ this.highlighter, , ] : [ , ,
, , ]; return this.getElement(buttons); } }