Skip to content

Commit 500a9c8

Browse files
authored
Merge pull request #178 from jahn96/contextMenu
Right clicking on a snippet to open context menu
2 parents 4cdbe3f + 1220fec commit 500a9c8

File tree

3 files changed

+27
-7
lines changed

3 files changed

+27
-7
lines changed

src/CodeSnippetDisplay.tsx

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ import React from 'react';
4848
import { CodeSnippetService, ICodeSnippet } from './CodeSnippetService';
4949
import { FilterTools } from './FilterTools';
5050
import { showPreview } from './PreviewSnippet';
51-
import { showMoreOptions } from './MoreOptions';
51+
import { showMoreOptions } from './CodeSnippetMenu';
5252
// import {
5353
// ICodeSnippet,
5454
// CodeSnippetContentsService
@@ -627,10 +627,11 @@ export class CodeSnippetDisplay extends React.Component<
627627

628628
//Set the position of the option to be under to the three dots on snippet.
629629
private _setOptionsPosition(
630-
event: React.MouseEvent<HTMLButtonElement, MouseEvent>
630+
event: React.MouseEvent<HTMLElement, MouseEvent>
631631
): void {
632632
const target = event.target as HTMLElement;
633633
let top: number;
634+
console.log(target.tagName);
634635
if (target.tagName === 'path') {
635636
top = target.getBoundingClientRect().top + 10;
636637
} else {
@@ -640,8 +641,10 @@ export class CodeSnippetDisplay extends React.Component<
640641
top -= 120;
641642
}
642643
const leftAsString =
643-
target.getBoundingClientRect().left.toString(10) + 'px';
644+
(target.parentElement.style.left + event.pageX).toString() + 'px';
645+
644646
const topAsString = top.toString(10) + 'px';
647+
645648
document.documentElement.style.setProperty(
646649
'--more-options-top',
647650
topAsString
@@ -1151,9 +1154,7 @@ export class CodeSnippetDisplay extends React.Component<
11511154
{
11521155
title: 'Insert, copy, edit, and delete',
11531156
icon: moreOptionsIcon,
1154-
onClick: (
1155-
event: React.MouseEvent<HTMLButtonElement, MouseEvent>
1156-
): void => {
1157+
onClick: (event: React.MouseEvent<HTMLElement, MouseEvent>): void => {
11571158
showMoreOptions({ body: new OptionsHandler(this, codeSnippet) });
11581159
this._setOptionsPosition(event);
11591160
},
@@ -1164,12 +1165,20 @@ export class CodeSnippetDisplay extends React.Component<
11641165
key={codeSnippet.name}
11651166
className={CODE_SNIPPET_ITEM}
11661167
id={id.toString()}
1168+
title={'Right click for more options'}
11671169
onMouseOver={(): void => {
11681170
this.dragHoverStyle(id);
11691171
}}
11701172
onMouseOut={(): void => {
11711173
this.dragHoverStyleRemove(id);
11721174
}}
1175+
onContextMenu={(
1176+
event: React.MouseEvent<HTMLElement, MouseEvent>
1177+
): void => {
1178+
event.preventDefault();
1179+
showMoreOptions({ body: new OptionsHandler(this, codeSnippet) });
1180+
this._setOptionsPosition(event);
1181+
}}
11731182
>
11741183
<div
11751184
className={CODE_SNIPPET_DRAG_HOVER}

src/MoreOptions.ts renamed to src/CodeSnippetMenu.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,10 +85,19 @@ export class OptionsMessage<T> extends Widget {
8585
* not be called directly by user code.
8686
*/
8787
handleEvent(event: Event): void {
88+
// if (event.type == 'click') {
89+
// console.log('click');
90+
// } else {
91+
// console.log('default');
92+
// console.log(event.type);
93+
// }
8894
switch (event.type) {
8995
case 'click':
9096
this._evtClick(event as MouseEvent);
9197
break;
98+
case 'contextmenu':
99+
this._evtClick(event as MouseEvent);
100+
break;
92101
default:
93102
break;
94103
}
@@ -107,7 +116,6 @@ export class OptionsMessage<T> extends Widget {
107116
event.stopPropagation();
108117
event.preventDefault();
109118
this.reject();
110-
return;
111119
}
112120
}
113121

@@ -159,6 +167,7 @@ export class OptionsMessage<T> extends Widget {
159167
protected onAfterAttach(msg: Message): void {
160168
const node = this.node;
161169
node.addEventListener('click', this, true);
170+
node.addEventListener('contextmenu', this, true);
162171
}
163172

164173
/**
@@ -167,6 +176,7 @@ export class OptionsMessage<T> extends Widget {
167176
protected onAfterDetach(msg: Message): void {
168177
const node = this.node;
169178
node.removeEventListener('click', this, true);
179+
node.removeEventListener('contextmenu', this, true);
170180
}
171181

172182
private _promise: PromiseDelegate<void> | null;

style/base.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@
7676
margin: 0;
7777
padding: 0;
7878
height: fit-content;
79+
cursor: context-menu;
7980
}
8081

8182
.jp-codeSnippet-item:hover {

0 commit comments

Comments
 (0)