aleman 1.2.3 → 1.2.5
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/index.js +0 -2
- package/menu/README.md +1 -0
- package/menu/addons/context-menu.js +10 -14
- package/menu/addons/down.js +18 -2
- package/menu/addons/enter.js +8 -5
- 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/run/index.js +14 -0
- package/menu/addons/set-position.js +0 -1
- package/menu/addons/submenu/index.js +13 -0
- package/menu/addons/up.js +9 -2
- 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.04, v1.2.5
|
|
2
|
+
|
|
3
|
+
feature:
|
|
4
|
+
- 221ca50 aleman: menu: enter
|
|
5
|
+
|
|
6
|
+
2025.09.03, v1.2.4
|
|
7
|
+
|
|
8
|
+
feature:
|
|
9
|
+
- 85e38ec aleman: menu: navigate submenu
|
|
10
|
+
- 0139ee8 menu: rules: submenu: add
|
|
11
|
+
- 355896c aleman: menu: show submenu
|
|
12
|
+
|
|
1
13
|
2025.09.03, v1.2.3
|
|
2
14
|
|
|
3
15
|
feature:
|
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,3 +1,5 @@
|
|
|
1
|
+
import {getSubmenu} from './submenu/index.js';
|
|
2
|
+
|
|
1
3
|
export const keys = [
|
|
2
4
|
'ArrowDown',
|
|
3
5
|
'j',
|
|
@@ -5,14 +7,28 @@ export const keys = [
|
|
|
5
7
|
export const preventDefault = true;
|
|
6
8
|
|
|
7
9
|
export const listener = ({state, options}) => {
|
|
8
|
-
let {
|
|
10
|
+
let {
|
|
11
|
+
index,
|
|
12
|
+
insideSubmenu,
|
|
13
|
+
submenuIndex,
|
|
14
|
+
} = state;
|
|
15
|
+
|
|
9
16
|
const {menu} = options;
|
|
10
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;
|
|
11
23
|
|
|
12
|
-
if (index < n)
|
|
24
|
+
if (!insideSubmenu && index < n)
|
|
13
25
|
++index;
|
|
14
26
|
|
|
27
|
+
if (insideSubmenu && submenuIndex < submenuCount)
|
|
28
|
+
++submenuIndex;
|
|
29
|
+
|
|
15
30
|
return {
|
|
16
31
|
index,
|
|
32
|
+
submenuIndex,
|
|
17
33
|
};
|
|
18
34
|
};
|
package/menu/addons/enter.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import {run} from './run/index.js';
|
|
2
|
+
|
|
3
|
+
const isObject = (a) => a && typeof a === 'object';
|
|
1
4
|
const {values} = Object;
|
|
2
5
|
|
|
3
6
|
export const keys = ['Enter'];
|
|
@@ -7,11 +10,10 @@ export const filter = ({state}) => state.command === 'show';
|
|
|
7
10
|
export const stopPropagation = true;
|
|
8
11
|
|
|
9
12
|
export const listener = ({options, state}) => {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
setTimeout(fn);
|
|
13
|
+
run({
|
|
14
|
+
options,
|
|
15
|
+
state,
|
|
16
|
+
});
|
|
15
17
|
options.beforeHide?.(state);
|
|
16
18
|
|
|
17
19
|
return {
|
|
@@ -19,3 +21,4 @@ export const listener = ({options, state}) => {
|
|
|
19
21
|
index: -1,
|
|
20
22
|
};
|
|
21
23
|
};
|
|
24
|
+
|
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,14 @@
|
|
|
1
|
+
const isObject = (a) => a && typeof a === 'object';
|
|
2
|
+
const {values} = Object;
|
|
3
|
+
|
|
4
|
+
export const run = ({options, state}) => {
|
|
5
|
+
const {index, submenuIndex} = state;
|
|
6
|
+
const {menu} = options;
|
|
7
|
+
|
|
8
|
+
const fn = values(menu)[index];
|
|
9
|
+
|
|
10
|
+
if (isObject(fn))
|
|
11
|
+
return setTimeout(values(fn)[submenuIndex]);
|
|
12
|
+
|
|
13
|
+
setTimeout(fn);
|
|
14
|
+
};
|
|
@@ -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
|
@@ -6,12 +6,19 @@ export const keys = [
|
|
|
6
6
|
export const preventDefault = true;
|
|
7
7
|
|
|
8
8
|
export const listener = ({state}) => {
|
|
9
|
-
let {
|
|
9
|
+
let {
|
|
10
|
+
index,
|
|
11
|
+
insideSubmenu,
|
|
12
|
+
submenuIndex,
|
|
13
|
+
} = state;
|
|
10
14
|
|
|
11
|
-
if (
|
|
15
|
+
if (insideSubmenu)
|
|
16
|
+
--submenuIndex;
|
|
17
|
+
else
|
|
12
18
|
--index;
|
|
13
19
|
|
|
14
20
|
return {
|
|
15
21
|
index,
|
|
22
|
+
submenuIndex,
|
|
16
23
|
};
|
|
17
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