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"
2
2
import { event } from "./utils.js"
3
3
import { Svg } from "../libs/svg_utils.js"
4
4
5
5
let utl = new Svg ( )
6
6
7
7
let svg = null ;
8
8
let menu_svg = null ;
9
+ let buttons = { } ;
10
+ let texts = { } ;
9
11
let vertex = null ;
10
12
11
13
let state = { active :false }
@@ -38,10 +40,12 @@ function onMouseLeave(e){
38
40
remove ( )
39
41
}
40
42
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" ) ) ) {
43
46
remove ( )
44
47
}
48
+ console . log ( e . target . tagName )
45
49
}
46
50
47
51
function onContext ( e ) {
@@ -66,12 +70,13 @@ class Menu{
66
70
menu_svg . getElementsByTagName ( "animate" ) [ 0 ] . beginElement ( )
67
71
state . active = true
68
72
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 ) ;
70
75
menu_svg . addEventListener ( 'contextmenu' , onContext , false ) ;
71
76
72
77
const len = Params . actions . length
73
- let buttons = { }
74
- let texts = { }
78
+ buttons = { }
79
+ texts = { }
75
80
Params . actions . forEach ( ( a , i ) => {
76
81
const start = i / len
77
82
const stop = ( i + 1 ) / len
@@ -80,6 +85,7 @@ class Menu{
80
85
buttons [ a ] = pie
81
86
pie . setAttribute ( "data-name" , a )
82
87
pie . setAttribute ( "visibility" , "hidden" )
88
+ pie . classList . add ( "svg_menu" )
83
89
pie . classList . add ( "pie_element" )
84
90
let [ tx , ty ] = angle_pos ( ( start + stop ) / 2 , ( pie_radius_start + pie_radius_end ) / 2 )
85
91
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{
111
117
add_sheet ( sheet )
112
118
return buttons
113
119
}
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
+ }
114
129
}
115
130
116
131
export { Menu } ;
0 commit comments