aleman 1.2.2 → 1.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ChangeLog +12 -0
- package/aleman/add-listeners.js +2 -2
- package/aleman/index.js +0 -2
- package/menu/README.md +1 -0
- package/menu/addons/context-menu.js +10 -14
- package/menu/addons/down.js +22 -5
- package/menu/addons/enter.js +1 -1
- package/menu/addons/escape.js +1 -1
- package/menu/addons/index.js +4 -0
- package/menu/addons/item-click.js +0 -1
- package/menu/addons/left.js +10 -0
- package/menu/addons/right.js +20 -0
- package/menu/addons/set-position.js +0 -1
- package/menu/addons/submenu/index.js +13 -0
- package/menu/addons/up.js +13 -3
- package/menu/hydrate-menu.js +1 -0
- package/menu/menu.css +4 -0
- package/menu/rules/build-menu/fixture/build-menu-fix.js +1 -1
- package/menu/rules/build-menu/fixture/icon-fix.js +1 -1
- package/menu/rules/build-menu/fixture/nested-fix.js +1 -1
- package/menu/rules/build-menu/index.js +0 -1
- package/menu/rules/index.js +2 -0
- package/menu/rules/submenu/fixture/submenu-fix.js +53 -0
- package/menu/rules/submenu/fixture/submenu.js +54 -0
- package/menu/rules/submenu/index.js +120 -0
- package/menu/state.js +2 -0
- package/package.json +1 -1
package/ChangeLog
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
2025.09.03, v1.2.4
|
|
2
|
+
|
|
3
|
+
feature:
|
|
4
|
+
- 85e38ec aleman: menu: navigate submenu
|
|
5
|
+
- 0139ee8 menu: rules: submenu: add
|
|
6
|
+
- 355896c aleman: menu: show submenu
|
|
7
|
+
|
|
8
|
+
2025.09.03, v1.2.3
|
|
9
|
+
|
|
10
|
+
feature:
|
|
11
|
+
- ae911f9 aleman: menu: key -> keys
|
|
12
|
+
|
|
1
13
|
2025.09.02, v1.2.2
|
|
2
14
|
|
|
3
15
|
fix:
|
package/aleman/add-listeners.js
CHANGED
|
@@ -63,7 +63,7 @@ export const addGlobalListeners = ({globalAddons, options, readState, writeState
|
|
|
63
63
|
|
|
64
64
|
const createListener = ({options, addon, readState, writeState}) => (event) => {
|
|
65
65
|
const {
|
|
66
|
-
|
|
66
|
+
keys,
|
|
67
67
|
listener,
|
|
68
68
|
preventDefault,
|
|
69
69
|
stopPropagation,
|
|
@@ -72,7 +72,7 @@ const createListener = ({options, addon, readState, writeState}) => (event) => {
|
|
|
72
72
|
afterIf,
|
|
73
73
|
} = addon;
|
|
74
74
|
|
|
75
|
-
if (
|
|
75
|
+
if (keys && !keys.includes(event.key))
|
|
76
76
|
return;
|
|
77
77
|
|
|
78
78
|
const state = readState();
|
package/aleman/index.js
CHANGED
package/menu/README.md
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
- ✅[`unselect-all`](https://putout.cloudcmd.io/#/gist/ca24f199f508cccb34b11baf726eba83/96f08fa91331ac6265d9f5ff48692c9d4ad1b98b);
|
|
8
8
|
- ✅[`build-menu`](https://putout.cloudcmd.io/#/gist/329dccd5fdc7f8b220be79af405dc9bb/b56df53f52bbe2a300ede38a96d1d2242e60679f);
|
|
9
9
|
- ✅[`set-position`](https://putout.cloudcmd.io/#/gist/215bb4654a27f15235f3e380a3035138/7f4af88aaa4863be4f1b8a90b9f0f4b1cf4744a0);
|
|
10
|
+
- ✅[`submenu`](https://putout.cloudcmd.io/#/gist/b0a3b64d14f3497869a345e7e438d66e/feb671c4a59a555ff408af92fab602bae3a94e2f);
|
|
10
11
|
|
|
11
12
|
## License
|
|
12
13
|
|
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
import {setPosition} from './set-position.js';
|
|
2
2
|
|
|
3
|
-
export const createContextMenu = (name) => {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
};
|
|
12
|
-
};
|
|
3
|
+
export const createContextMenu = (name) => ({
|
|
4
|
+
name,
|
|
5
|
+
events,
|
|
6
|
+
preventDefault,
|
|
7
|
+
after,
|
|
8
|
+
afterIf,
|
|
9
|
+
listener,
|
|
10
|
+
});
|
|
13
11
|
|
|
14
12
|
const events = [
|
|
15
13
|
'contextmenu',
|
|
@@ -17,7 +15,7 @@ const events = [
|
|
|
17
15
|
|
|
18
16
|
const preventDefault = true;
|
|
19
17
|
|
|
20
|
-
const listener = ({event, state, options
|
|
18
|
+
const listener = ({event, state, options}) => {
|
|
21
19
|
const {beforeShow} = options;
|
|
22
20
|
const {x, y} = {
|
|
23
21
|
x: event.clientX,
|
|
@@ -48,6 +46,4 @@ const after = ({event, options}) => {
|
|
|
48
46
|
return setPosition(name, event);
|
|
49
47
|
};
|
|
50
48
|
|
|
51
|
-
const afterIf = ({state}) =>
|
|
52
|
-
return state.command === 'show';
|
|
53
|
-
};
|
|
49
|
+
const afterIf = ({state}) => state.command === 'show';
|
package/menu/addons/down.js
CHANGED
|
@@ -1,17 +1,34 @@
|
|
|
1
|
-
|
|
1
|
+
import {getSubmenu} from './submenu/index.js';
|
|
2
2
|
|
|
3
|
-
export const
|
|
3
|
+
export const keys = [
|
|
4
|
+
'ArrowDown',
|
|
5
|
+
'j',
|
|
6
|
+
];
|
|
4
7
|
export const preventDefault = true;
|
|
5
8
|
|
|
6
9
|
export const listener = ({state, options}) => {
|
|
7
|
-
let {
|
|
10
|
+
let {
|
|
11
|
+
index,
|
|
12
|
+
insideSubmenu,
|
|
13
|
+
submenuIndex,
|
|
14
|
+
} = state;
|
|
15
|
+
|
|
8
16
|
const {menu} = options;
|
|
9
|
-
const n = keys(menu).length - 1;
|
|
17
|
+
const n = Object.keys(menu).length - 1;
|
|
18
|
+
const submenu = getSubmenu({
|
|
19
|
+
state,
|
|
20
|
+
options,
|
|
21
|
+
});
|
|
22
|
+
const submenuCount = Object.keys(submenu).length - 1;
|
|
10
23
|
|
|
11
|
-
if (index < n)
|
|
24
|
+
if (!insideSubmenu && index < n)
|
|
12
25
|
++index;
|
|
13
26
|
|
|
27
|
+
if (insideSubmenu && submenuIndex < submenuCount)
|
|
28
|
+
++submenuIndex;
|
|
29
|
+
|
|
14
30
|
return {
|
|
15
31
|
index,
|
|
32
|
+
submenuIndex,
|
|
16
33
|
};
|
|
17
34
|
};
|
package/menu/addons/enter.js
CHANGED
package/menu/addons/escape.js
CHANGED
package/menu/addons/index.js
CHANGED
|
@@ -3,6 +3,8 @@ import * as escape from './escape.js';
|
|
|
3
3
|
import * as down from './down.js';
|
|
4
4
|
import * as up from './up.js';
|
|
5
5
|
import * as enter from './enter.js';
|
|
6
|
+
import * as left from './left.js';
|
|
7
|
+
import * as right from './right.js';
|
|
6
8
|
|
|
7
9
|
export const addons = [
|
|
8
10
|
click,
|
|
@@ -10,4 +12,6 @@ export const addons = [
|
|
|
10
12
|
down,
|
|
11
13
|
up,
|
|
12
14
|
enter,
|
|
15
|
+
left,
|
|
16
|
+
right,
|
|
13
17
|
];
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import {getSubmenu} from './submenu/index.js';
|
|
2
|
+
|
|
3
|
+
export const keys = [
|
|
4
|
+
'ArrowRight',
|
|
5
|
+
'l',
|
|
6
|
+
];
|
|
7
|
+
export const preventDefault = true;
|
|
8
|
+
|
|
9
|
+
export const filter = ({state, options}) => {
|
|
10
|
+
const submenu = getSubmenu({
|
|
11
|
+
state,
|
|
12
|
+
options,
|
|
13
|
+
});
|
|
14
|
+
return Object.keys(submenu).length;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export const listener = () => ({
|
|
18
|
+
submenuIndex: 0,
|
|
19
|
+
insideSubmenu: true,
|
|
20
|
+
});
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const isObject = (a) => a && typeof a === 'object';
|
|
2
|
+
|
|
3
|
+
export function getSubmenu({state, options}) {
|
|
4
|
+
const {index} = state;
|
|
5
|
+
const {menu} = options;
|
|
6
|
+
const currentName = Object.keys(menu)[index];
|
|
7
|
+
const submenu = menu[currentName];
|
|
8
|
+
|
|
9
|
+
if (isObject(submenu))
|
|
10
|
+
return submenu;
|
|
11
|
+
|
|
12
|
+
return {};
|
|
13
|
+
}
|
package/menu/addons/up.js
CHANGED
|
@@ -1,14 +1,24 @@
|
|
|
1
|
-
export const
|
|
1
|
+
export const keys = [
|
|
2
|
+
'ArrowUp',
|
|
3
|
+
'k',
|
|
4
|
+
];
|
|
2
5
|
|
|
3
6
|
export const preventDefault = true;
|
|
4
7
|
|
|
5
8
|
export const listener = ({state}) => {
|
|
6
|
-
let {
|
|
9
|
+
let {
|
|
10
|
+
index,
|
|
11
|
+
insideSubmenu,
|
|
12
|
+
submenuIndex,
|
|
13
|
+
} = state;
|
|
7
14
|
|
|
8
|
-
if (
|
|
15
|
+
if (insideSubmenu)
|
|
16
|
+
--submenuIndex;
|
|
17
|
+
else
|
|
9
18
|
--index;
|
|
10
19
|
|
|
11
20
|
return {
|
|
12
21
|
index,
|
|
22
|
+
submenuIndex,
|
|
13
23
|
};
|
|
14
24
|
};
|
package/menu/hydrate-menu.js
CHANGED
|
@@ -18,6 +18,7 @@ export const hydrateMenu = (elementName, {hydrateElement, options, menu}) => {
|
|
|
18
18
|
const {name} = options;
|
|
19
19
|
const state = initState(options);
|
|
20
20
|
const contextMenu = createContextMenu(elementName);
|
|
21
|
+
|
|
21
22
|
const {run} = hydrate(hydrateElement, {
|
|
22
23
|
options,
|
|
23
24
|
state,
|
package/menu/menu.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<ul data-name="menu" class="menu menu-hidden"><li data-name='menu-item' className='menu-item'><label data-menu-path='hello'>hello</label></li><li data-name='menu-item' className='menu-item'><label data-menu-path='world'>world</label></li></ul>;
|
|
1
|
+
<ul data-name="menu" class="menu menu-hidden"><li data-name='menu-item' className='menu-item' data-menu-path='hello'><label data-menu-path='hello'>hello</label></li><li data-name='menu-item' className='menu-item' data-menu-path='world'><label data-menu-path='world'>world</label></li></ul>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<ul data-name="menu" class="menu menu-hidden"><li data-name='menu-item' className="menu-item icon icon-hello"><label data-menu-path='hello'>hello</label></li><li data-name='menu-item' className="menu-item icon icon-world"><label data-menu-path='world'>world</label></li></ul>;
|
|
1
|
+
<ul data-name="menu" class="menu menu-hidden"><li data-name='menu-item' className="menu-item icon icon-hello" data-menu-path='hello'><label data-menu-path='hello'>hello</label></li><li data-name='menu-item' className="menu-item icon icon-world" data-menu-path='world'><label data-menu-path='world'>world</label></li></ul>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<ul data-name="menu" class="menu menu-hidden"><li data-name='menu-item' className='menu-item icon icon-hello menu-submenu'><label data-menu-path='hello'>hello</label><ul data-name='menu' className='menu menu-hidden'><li data-name='menu-item' className="menu-item icon icon-world"><label data-menu-path='hello.world'>world</label></li></ul></li></ul>;
|
|
1
|
+
<ul data-name="menu" class="menu menu-hidden"><li data-name='menu-item' className='menu-item icon icon-hello menu-submenu' data-menu-path='hello'><label data-menu-path='hello'>hello</label><ul data-name='menu' className='menu menu-hidden'><li data-name='menu-item' className="menu-item icon icon-world" data-menu-path='hello.world'><label data-menu-path='hello.world'>world</label></li></ul></li></ul>;
|
package/menu/rules/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import * as submenu from './submenu/index.js';
|
|
1
2
|
import * as setPosition from './set-position/index.js';
|
|
2
3
|
import * as buildMenu from './build-menu/index.js';
|
|
3
4
|
import * as menu from './menu/index.js';
|
|
@@ -10,4 +11,5 @@ export const rules = {
|
|
|
10
11
|
'set-position': setPosition,
|
|
11
12
|
'select': select,
|
|
12
13
|
'select-all': unselectAll,
|
|
14
|
+
'submenu': submenu,
|
|
13
15
|
};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// second selected
|
|
2
|
+
<ul data-name="menu" class="menu menu-hidden">
|
|
3
|
+
<li data-menu-path="Upload" data-name="menu-item" className="menu-item icon icon-view">
|
|
4
|
+
<label data-menu-path="Upload">Upload</label>
|
|
5
|
+
</li>
|
|
6
|
+
<li data-menu-path="New" data-name="menu-item" className="menu-item icon icon-edit menu-item-selected">
|
|
7
|
+
<label data-menu-path="New">New</label>
|
|
8
|
+
<ul data-name="menu" class="menu menu-hidden">
|
|
9
|
+
<li data-menu-path="New.File" data-name="menu-item" className="menu-item icon icon-view">
|
|
10
|
+
<label data-menu-path="New.File">File</label>
|
|
11
|
+
</li>
|
|
12
|
+
<li data-menu-path="New.Directory" data-name="menu-item" className='menu-item icon icon-edit menu-item-selected'>
|
|
13
|
+
<label data-menu-path="New.Directory">Directory</label>
|
|
14
|
+
</li>
|
|
15
|
+
</ul>
|
|
16
|
+
</li>
|
|
17
|
+
</ul>;
|
|
18
|
+
|
|
19
|
+
// first selected
|
|
20
|
+
<ul data-name="menu" class="menu menu-hidden">
|
|
21
|
+
<li data-menu-path="Upload" data-name="menu-item" className="menu-item icon icon-view menu-item-selected">
|
|
22
|
+
<label data-menu-path="Upload">Upload</label>
|
|
23
|
+
</li>
|
|
24
|
+
<li data-menu-path="New" data-name="menu-item" className="menu-item icon icon-edit">
|
|
25
|
+
<label data-menu-path="New">New</label>
|
|
26
|
+
<ul data-name="menu" class="menu menu-hidden">
|
|
27
|
+
<li data-menu-path="New.File" data-name="menu-item" className="menu-item icon icon-view">
|
|
28
|
+
<label data-menu-path="New.File">File</label>
|
|
29
|
+
</li>
|
|
30
|
+
<li data-menu-path="New.Directory" data-name="menu-item" className="menu-item icon icon-edit">
|
|
31
|
+
<label data-menu-path="New.Directory">Directory</label>
|
|
32
|
+
</li>
|
|
33
|
+
</ul>
|
|
34
|
+
</li>
|
|
35
|
+
</ul>;
|
|
36
|
+
|
|
37
|
+
// second selected, submenu first selected
|
|
38
|
+
<ul data-name="menu" class="menu menu-hidden">
|
|
39
|
+
<li data-menu-path="Upload" data-name="menu-item" className="menu-item icon icon-view">
|
|
40
|
+
<label data-menu-path="Upload">Upload</label>
|
|
41
|
+
</li>
|
|
42
|
+
<li data-menu-path="New" data-name="menu-item" className="menu-item icon icon-edit menu-item-selected">
|
|
43
|
+
<label data-menu-path="New">New</label>
|
|
44
|
+
<ul data-name="menu" class="menu menu-hidden">
|
|
45
|
+
<li data-menu-path="New.File" data-name="menu-item" className='menu-item icon icon-view'>
|
|
46
|
+
<label data-menu-path="New.File">File</label>
|
|
47
|
+
</li>
|
|
48
|
+
<li data-menu-path="New.Directory" data-name="menu-item" className='menu-item icon icon-edit menu-item-selected'>
|
|
49
|
+
<label data-menu-path="New.Directory">Directory</label>
|
|
50
|
+
</li>
|
|
51
|
+
</ul>
|
|
52
|
+
</li>
|
|
53
|
+
</ul>;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
// second selected
|
|
2
|
+
<ul data-name="menu" class="menu menu-hidden">
|
|
3
|
+
<li data-menu-path="Upload" data-name="menu-item" className="menu-item icon icon-view">
|
|
4
|
+
<label data-menu-path="Upload">Upload</label>
|
|
5
|
+
</li>
|
|
6
|
+
<li data-menu-path="New" data-name="menu-item" className="menu-item icon icon-edit menu-item-selected">
|
|
7
|
+
<label data-menu-path="New">New</label>
|
|
8
|
+
<ul data-name="menu" class="menu menu-hidden">
|
|
9
|
+
<li data-menu-path="New.File" data-name="menu-item" className="menu-item icon icon-view">
|
|
10
|
+
<label data-menu-path="New.File">File</label>
|
|
11
|
+
</li>
|
|
12
|
+
<li data-menu-path="New.Directory" data-name="menu-item" className="menu-item icon icon-edit">
|
|
13
|
+
<label data-menu-path="New.Directory">Directory</label>
|
|
14
|
+
</li>
|
|
15
|
+
</ul>
|
|
16
|
+
</li>
|
|
17
|
+
</ul>;
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
// first selected
|
|
21
|
+
<ul data-name="menu" class="menu menu-hidden">
|
|
22
|
+
<li data-menu-path="Upload" data-name="menu-item" className="menu-item icon icon-view menu-item-selected">
|
|
23
|
+
<label data-menu-path="Upload">Upload</label>
|
|
24
|
+
</li>
|
|
25
|
+
<li data-menu-path="New" data-name="menu-item" className="menu-item icon icon-edit">
|
|
26
|
+
<label data-menu-path="New">New</label>
|
|
27
|
+
<ul data-name="menu" class="menu menu-hidden">
|
|
28
|
+
<li data-menu-path="New.File" data-name="menu-item" className="menu-item icon icon-view">
|
|
29
|
+
<label data-menu-path="New.File">File</label>
|
|
30
|
+
</li>
|
|
31
|
+
<li data-menu-path="New.Directory" data-name="menu-item" className="menu-item icon icon-edit">
|
|
32
|
+
<label data-menu-path="New.Directory">Directory</label>
|
|
33
|
+
</li>
|
|
34
|
+
</ul>
|
|
35
|
+
</li>
|
|
36
|
+
</ul>;
|
|
37
|
+
|
|
38
|
+
// second selected, submenu first selected
|
|
39
|
+
<ul data-name="menu" class="menu menu-hidden">
|
|
40
|
+
<li data-menu-path="Upload" data-name="menu-item" className="menu-item icon icon-view">
|
|
41
|
+
<label data-menu-path="Upload">Upload</label>
|
|
42
|
+
</li>
|
|
43
|
+
<li data-menu-path="New" data-name="menu-item" className="menu-item icon icon-edit menu-item-selected">
|
|
44
|
+
<label data-menu-path="New">New</label>
|
|
45
|
+
<ul data-name="menu" class="menu menu-hidden">
|
|
46
|
+
<li data-menu-path="New.File" data-name="menu-item" className="menu-item icon icon-view menu-item-selected">
|
|
47
|
+
<label data-menu-path="New.File">File</label>
|
|
48
|
+
</li>
|
|
49
|
+
<li data-menu-path="New.Directory" data-name="menu-item" className="menu-item icon icon-edit">
|
|
50
|
+
<label data-menu-path="New.Directory">Directory</label>
|
|
51
|
+
</li>
|
|
52
|
+
</ul>
|
|
53
|
+
</li>
|
|
54
|
+
</ul>;
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import {operator, types} from 'putout';
|
|
2
|
+
|
|
3
|
+
const {isJSXElement} = types;
|
|
4
|
+
const {setLiteralValue} = operator;
|
|
5
|
+
|
|
6
|
+
export const report = () => `Select right`;
|
|
7
|
+
|
|
8
|
+
export const fix = ({path, prev, next, insideSubmenu}) => {
|
|
9
|
+
const {value} = path.node;
|
|
10
|
+
unselect(prev);
|
|
11
|
+
unselect(next);
|
|
12
|
+
|
|
13
|
+
if (!insideSubmenu) {
|
|
14
|
+
const newValue = value.value.replace(/\s?menu-item-selected/, '');
|
|
15
|
+
setLiteralValue(value, newValue);
|
|
16
|
+
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const newValue = `${value.value} menu-item-selected`;
|
|
21
|
+
setLiteralValue(value, newValue);
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export const traverse = ({options, push}) => ({
|
|
25
|
+
JSXOpeningElement(path) {
|
|
26
|
+
if (path.node.name.name !== 'li')
|
|
27
|
+
return;
|
|
28
|
+
|
|
29
|
+
const {insideSubmenu = true, submenuIndex = 1} = options;
|
|
30
|
+
const parentMenu = path.parentPath.parentPath.parentPath;
|
|
31
|
+
|
|
32
|
+
if (!isJSXElement(parentMenu))
|
|
33
|
+
return;
|
|
34
|
+
|
|
35
|
+
if (!isParentSelected(parentMenu))
|
|
36
|
+
return;
|
|
37
|
+
|
|
38
|
+
if (!isJSXElement(path.parentPath.parentPath))
|
|
39
|
+
return;
|
|
40
|
+
|
|
41
|
+
if (!checkDataName(path.parentPath.parentPath))
|
|
42
|
+
return;
|
|
43
|
+
|
|
44
|
+
const children = path.parentPath
|
|
45
|
+
.parentPath
|
|
46
|
+
.get('children')
|
|
47
|
+
.filter(isJSXElement);
|
|
48
|
+
|
|
49
|
+
const prev = children[submenuIndex - 1];
|
|
50
|
+
const current = children[submenuIndex];
|
|
51
|
+
const next = children[submenuIndex + 1];
|
|
52
|
+
|
|
53
|
+
if (!current)
|
|
54
|
+
return;
|
|
55
|
+
|
|
56
|
+
for (const attr of current.get('openingElement.attributes')) {
|
|
57
|
+
const {name, value} = attr.node;
|
|
58
|
+
|
|
59
|
+
if (name.name !== 'className')
|
|
60
|
+
continue;
|
|
61
|
+
|
|
62
|
+
if (insideSubmenu && !value.value.includes('menu-item-selected'))
|
|
63
|
+
push({
|
|
64
|
+
path: attr,
|
|
65
|
+
insideSubmenu,
|
|
66
|
+
prev,
|
|
67
|
+
next,
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
if (!insideSubmenu && value.value.includes('menu-item-selected'))
|
|
71
|
+
push({
|
|
72
|
+
path: attr,
|
|
73
|
+
insideSubmenu,
|
|
74
|
+
prev,
|
|
75
|
+
next,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
function checkDataName(path) {
|
|
82
|
+
const attributes = path.get('openingElement.attributes');
|
|
83
|
+
|
|
84
|
+
for (const attr of attributes) {
|
|
85
|
+
const {name, value} = attr.node;
|
|
86
|
+
|
|
87
|
+
if (name.name === 'data-name')
|
|
88
|
+
return value.value === 'menu';
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function isParentSelected(path) {
|
|
95
|
+
const attributes = path.get('openingElement.attributes');
|
|
96
|
+
|
|
97
|
+
for (const attr of attributes) {
|
|
98
|
+
const {name, value} = attr.node;
|
|
99
|
+
|
|
100
|
+
if (name.name === 'className')
|
|
101
|
+
return value.value.includes('menu-item-selected');
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
function unselect(path) {
|
|
108
|
+
if (!path)
|
|
109
|
+
return;
|
|
110
|
+
|
|
111
|
+
for (const attr of path.get('openingElement.attributes')) {
|
|
112
|
+
const {name, value} = attr.node;
|
|
113
|
+
|
|
114
|
+
if (name.name !== 'className')
|
|
115
|
+
continue;
|
|
116
|
+
|
|
117
|
+
if (value.value.includes('menu-item-selected'))
|
|
118
|
+
setLiteralValue(value, value.value.replace(' menu-item-selected', ''));
|
|
119
|
+
}
|
|
120
|
+
}
|
package/menu/state.js
CHANGED