Skip to content

Commit 1259d90

Browse files
committed
context menu update and resolving menu removal
1 parent 26d9500 commit 1259d90

File tree

3 files changed

+26
-8
lines changed

3 files changed

+26
-8
lines changed

src/menu.js

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1-
import {html,html_tag,add_sheet,remove_sheet} from "../libs/web-js-utils.js"
1+
import {html,html_tag,add_sheet,remove_sheet,defined} from "../libs/web-js-utils.js"
22
import {event} from "./utils.js"
33
import {Svg} from "../libs/svg_utils.js"
44

55
let utl = new Svg()
66

77
let svg = null;
88
let menu_svg = null;
9+
let buttons = {};
10+
let texts = {};
911
let vertex = null;
1012

1113
let state = {active:false}
@@ -38,10 +40,12 @@ function onMouseLeave(e){
3840
remove()
3941
}
4042

41-
function onMouseDown(e){
42-
if(e.buttons == 2){
43+
function onPointerDown(e){
44+
let pointer_2 = defined(e.buttons)?(e.buttons == 2):(e.touches.length == 2)
45+
if(pointer_2 || (!e.target.classList.contains("svg_menu"))){
4346
remove()
4447
}
48+
console.log(e.target.tagName)
4549
}
4650

4751
function onContext(e){
@@ -66,12 +70,13 @@ class Menu{
6670
menu_svg.getElementsByTagName("animate")[0].beginElement()
6771
state.active = true
6872
menu_svg.addEventListener( 'mouseleave', onMouseLeave, false );
69-
menu_svg.addEventListener( 'mousedown', onMouseDown, false );
73+
svg.addEventListener( 'mousedown', onPointerDown, false );
74+
svg.addEventListener( 'touchstart', onPointerDown, false );
7075
menu_svg.addEventListener( 'contextmenu', onContext, false );
7176

7277
const len = Params.actions.length
73-
let buttons = {}
74-
let texts = {}
78+
buttons = {}
79+
texts = {}
7580
Params.actions.forEach((a,i)=>{
7681
const start = i / len
7782
const stop = (i+1) / len
@@ -80,6 +85,7 @@ class Menu{
8085
buttons[a] = pie
8186
pie.setAttribute("data-name",a)
8287
pie.setAttribute("visibility","hidden")
88+
pie.classList.add("svg_menu")
8389
pie.classList.add("pie_element")
8490
let [tx,ty] = angle_pos((start+stop)/2,(pie_radius_start+pie_radius_end)/2)
8591
texts[a] = html(menu_svg,/*html*/`<text x="${x+tx}" y="${y+ty}" class="m_text" dominant-baseline="middle" text-anchor="middle" style="pointer-events:none" visibility="hidden">${a}</text>`)
@@ -111,6 +117,15 @@ class Menu{
111117
add_sheet(sheet)
112118
return buttons
113119
}
120+
update_action(old_action_name,new_action_name){
121+
let pie = buttons[old_action_name]
122+
pie.setAttribute("data-name",new_action_name)
123+
let text = texts[old_action_name]
124+
text.innerHTML = new_action_name
125+
buttons[new_action_name] = pie
126+
texts[new_action_name] = text
127+
return buttons
128+
}
114129
}
115130

116131
export{Menu};

src/mouse.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,9 @@ function onMousePan(e){
7272
if(!["touchstart","touchend","touchmove"].includes(e.type)){
7373
e.preventDefault();
7474
}
75-
e.stopPropagation();
75+
if(!["touchstart","mousedown"].includes(e.type)){
76+
e.stopPropagation();
77+
}
7678
}
7779

7880
function onVertexMenu(e){

src/render.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,15 @@ let config = null;
1111
let menu_v = null;
1212
let attraction = false;
1313

14-
1514
function onMenuAction(e){
1615
if(e.detail.action == "pin"){
1716
e.detail.v.pinned = true
1817
e.detail.v.svg.shape.classList.add("pinned")
18+
menu.update_action("pin","unpin")
1919
}else if(e.detail.action == "unpin"){
2020
e.detail.v.pinned = false
2121
e.detail.v.svg.shape.classList.remove("pinned")
22+
menu.update_action("unpin","pin")
2223
}
2324
}
2425

0 commit comments

Comments
 (0)