diff options
| author | Bob Zeleznik <zzzman@gmail.com> | 2020-02-08 13:48:11 -0500 | 
|---|---|---|
| committer | Bob Zeleznik <zzzman@gmail.com> | 2020-02-08 13:48:11 -0500 | 
| commit | 90d7fb57a64011763ad1d608126eacb052061e43 (patch) | |
| tree | fd96990ebd0ffe38f2285fbbceca942c1fb45587 /src/client/views/linking/LinkMenuItem.tsx | |
| parent | e310c0fdcef6ac71ee492470d4ac689cbb094167 (diff) | |
| parent | 1b046f76cf39f1f6cb1875aa84b45db74b6d994e (diff) | |
Merge branch 'master' into monika_animation
Diffstat (limited to 'src/client/views/linking/LinkMenuItem.tsx')
| -rw-r--r-- | src/client/views/linking/LinkMenuItem.tsx | 38 | 
1 files changed, 23 insertions, 15 deletions
| diff --git a/src/client/views/linking/LinkMenuItem.tsx b/src/client/views/linking/LinkMenuItem.tsx index 238660de3..b7d27ee30 100644 --- a/src/client/views/linking/LinkMenuItem.tsx +++ b/src/client/views/linking/LinkMenuItem.tsx @@ -5,11 +5,11 @@ import { action, observable } from 'mobx';  import { observer } from "mobx-react";  import { Doc } from '../../../new_fields/Doc';  import { Cast, StrCast } from '../../../new_fields/Types'; -import { DragLinkAsDocument } from '../../util/DragManager'; +import { DragManager } from '../../util/DragManager';  import { LinkManager } from '../../util/LinkManager';  import { ContextMenu } from '../ContextMenu';  import { LinkFollowBox } from './LinkFollowBox'; -import './LinkMenu.scss'; +import './LinkMenuItem.scss';  import React = require("react");  library.add(faEye, faEdit, faTimes, faArrowRight, faChevronDown, faChevronUp); @@ -26,6 +26,9 @@ interface LinkMenuItemProps {  @observer  export class LinkMenuItem extends React.Component<LinkMenuItemProps> {      private _drag = React.createRef<HTMLDivElement>(); +    private _downX = 0; +    private _downY = 0; +    private _eleClone: any;      @observable private _showMore: boolean = false;      @action toggleShowMore() { this._showMore = !this._showMore; } @@ -36,15 +39,15 @@ export class LinkMenuItem extends React.Component<LinkMenuItemProps> {      }      renderMetadata = (): JSX.Element => { -        let groups = LinkManager.Instance.getAnchorGroups(this.props.linkDoc, this.props.sourceDoc); -        let index = groups.findIndex(groupDoc => StrCast(groupDoc.type).toUpperCase() === this.props.groupType.toUpperCase()); -        let groupDoc = index > -1 ? groups[index] : undefined; +        const groups = LinkManager.Instance.getAnchorGroups(this.props.linkDoc, this.props.sourceDoc); +        const index = groups.findIndex(groupDoc => StrCast(groupDoc.type).toUpperCase() === this.props.groupType.toUpperCase()); +        const groupDoc = index > -1 ? groups[index] : undefined;          let mdRows: Array<JSX.Element> = [];          if (groupDoc) { -            let mdDoc = Cast(groupDoc.metadata, Doc, null); +            const mdDoc = Cast(groupDoc.metadata, Doc, null);              if (mdDoc) { -                let keys = LinkManager.Instance.getMetadataKeysInGroup(this.props.groupType);//groupMetadataKeys.get(this.props.groupType); +                const keys = LinkManager.Instance.getMetadataKeysInGroup(this.props.groupType);//groupMetadataKeys.get(this.props.groupType);                  mdRows = keys.map(key => {                      return (<div key={key} className="link-metadata-row"><b>{key}</b>: {StrCast(mdDoc[key])}</div>);                  }); @@ -55,6 +58,9 @@ export class LinkMenuItem extends React.Component<LinkMenuItemProps> {      }      onLinkButtonDown = (e: React.PointerEvent): void => { +        this._downX = e.clientX; +        this._downY = e.clientY; +        this._eleClone = this._drag.current!.cloneNode(true);          e.stopPropagation();          document.removeEventListener("pointermove", this.onLinkButtonMoved);          document.addEventListener("pointermove", this.onLinkButtonMoved); @@ -75,11 +81,12 @@ export class LinkMenuItem extends React.Component<LinkMenuItemProps> {      }      onLinkButtonMoved = async (e: PointerEvent) => { -        if (this._drag.current !== null && (e.movementX > 1 || e.movementY > 1)) { +        if (this._drag.current !== null && Math.abs((e.clientX - this._downX) * (e.clientX - this._downX) + (e.clientY - this._downY) * (e.clientY - this._downY)) > 5) {              document.removeEventListener("pointermove", this.onLinkButtonMoved);              document.removeEventListener("pointerup", this.onLinkButtonUp); -            DragLinkAsDocument(this._drag.current, e.x, e.y, this.props.linkDoc, this.props.sourceDoc); +            this._eleClone.style.transform = `translate(${e.x}px, ${e.y}px)`; +            DragManager.StartLinkTargetsDrag(this._eleClone, e.x, e.y, this.props.sourceDoc, [this.props.linkDoc]);          }          e.stopPropagation();      } @@ -109,20 +116,21 @@ export class LinkMenuItem extends React.Component<LinkMenuItemProps> {      }      render() { - -        let keys = LinkManager.Instance.getMetadataKeysInGroup(this.props.groupType);//groupMetadataKeys.get(this.props.groupType); -        let canExpand = keys ? keys.length > 0 : false; +        const keys = LinkManager.Instance.getMetadataKeysInGroup(this.props.groupType);//groupMetadataKeys.get(this.props.groupType); +        const canExpand = keys ? keys.length > 0 : false;          return (              <div className="linkMenu-item">                  <div className={canExpand ? "linkMenu-item-content expand-three" : "linkMenu-item-content expand-two"}> -                    <div className="link-name"> -                        <p ref={this._drag} onPointerDown={this.onLinkButtonDown}>{StrCast(this.props.destinationDoc.title)}</p> +                    <div ref={this._drag} className="linkMenu-name" title="drag to view target. click to customize." onPointerDown={this.onLinkButtonDown}> +                        <p >{StrCast(this.props.destinationDoc.title)}</p>                          <div className="linkMenu-item-buttons">                              {canExpand ? <div title="Show more" className="button" onPointerDown={() => this.toggleShowMore()}>                                  <FontAwesomeIcon className="fa-icon" icon={this._showMore ? "chevron-up" : "chevron-down"} size="sm" /></div> : <></>}                              <div title="Edit link" className="button" onPointerDown={this.onEdit}><FontAwesomeIcon className="fa-icon" icon="edit" size="sm" /></div> -                            <div title="Follow link" className="button" onClick={this.followDefault} onContextMenu={this.onContextMenu}><FontAwesomeIcon className="fa-icon" icon="arrow-right" size="sm" /></div> +                            <div title="Follow link" className="button" onClick={this.followDefault} onContextMenu={this.onContextMenu}> +                                <FontAwesomeIcon className="fa-icon" icon="arrow-right" size="sm" /> +                            </div>                          </div>                      </div>                      {this._showMore ? this.renderMetadata() : <></>} | 
