Version Description
- Fixed a conflict with the "PRO Theme" plugin where "PRO Theme" would expand the wrong top level admin menu if the current submenu item had been moved from one parent menu to another.
- Fixed PHP notice "Undefined offset: 0 in /wp-includes/capabilities.php on line 70" (various line numbers).
- Fixed a conflict with "Stripe For WooCommerce" 3.2.12 where the "Stripe Gateway" menu had a wrong URL because a hidden menu item was not removed.
- Fixed a browser warning about the "ws_nmh_pending_seen_urls" cookie not using the SameSite attribute.
- Fixed a conflict with WooFunnels where changing the WooFunnels menu icon would result in both of the icons - the original one and the new one - showing up at the same time. The new icon was also misaligned.
- Minor visual changes.
- Tested with WordPress 5.7 and 5.8-alpha.
Download this release
Release Info
Developer | whiteshadow |
Plugin | Admin Menu Editor |
Version | 1.9.9 |
Comparing to | |
See all releases |
Code changes from version 1.9.8 to 1.9.9
- css/admin.css +1 -1
- css/force-dashicons.css +2 -1
- css/force-dashicons.css.map +1 -1
- css/force-dashicons.scss +2 -1
- css/menu-editor.css +49 -5
- css/menu-editor.scss +72 -2
- css/style-modern-one.css +3 -3
- css/style-modern-one.scss +1 -1
- includes/ame-utils.php +37 -0
- includes/editor-page.php +4 -1
- includes/menu-editor-core.php +114 -23
- includes/menu.php +10 -0
- js/common.d.ts +21 -2
- js/menu-editor.js +37 -7
- menu-editor.php +1 -1
- modules/actor-selector/actor-selector.js +12 -8
- modules/actor-selector/actor-selector.ts +17 -9
- modules/highlight-new-menus/wsNewMenuHighlighter.php +5 -1
- readme.txt +11 -2
css/admin.css
CHANGED
@@ -126,7 +126,7 @@ hr.ws-submenu-separator {
|
|
126 |
}
|
127 |
|
128 |
#adminmenu .wp-submenu li.opensub > ul.ame-deep-submenu {
|
129 |
-
top: -
|
130 |
}
|
131 |
|
132 |
.folded #adminmenu li.opensub > ul.ame-deep-submenu,
|
126 |
}
|
127 |
|
128 |
#adminmenu .wp-submenu li.opensub > ul.ame-deep-submenu {
|
129 |
+
top: -1px;
|
130 |
}
|
131 |
|
132 |
.folded #adminmenu li.opensub > ul.ame-deep-submenu,
|
css/force-dashicons.css
CHANGED
@@ -17,7 +17,8 @@
|
|
17 |
font-family: "dashicons", sans-serif !important;
|
18 |
font-size: 20px !important; }
|
19 |
#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon > .wp-menu-image {
|
20 |
-
background-image: none;
|
|
|
21 |
#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-menu:before {
|
22 |
content: "\f333" !important; }
|
23 |
#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-site:before {
|
17 |
font-family: "dashicons", sans-serif !important;
|
18 |
font-size: 20px !important; }
|
19 |
#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon > .wp-menu-image {
|
20 |
+
background-image: none !important;
|
21 |
+
position: static; }
|
22 |
#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-menu:before {
|
23 |
content: "\f333" !important; }
|
24 |
#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-site:before {
|
css/force-dashicons.css.map
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
{
|
2 |
"version": 3,
|
3 |
-
"mappings": "AAAA;;;;;;;;;EASE;AAGF,wDAAyD;ECZzD;;;IAGE;EDUD,iFAA2B;IAC1B,WAAW,EAAE,kCAAkC;IAC/C,SAAS,EAAE,eAAe;EAI3B,yEAAmB;IAClB,gBAAgB,EAAE,
|
4 |
"sources": ["force-dashicons.scss","_dashicons.scss"],
|
5 |
"names": [],
|
6 |
"file": "force-dashicons.css"
|
1 |
{
|
2 |
"version": 3,
|
3 |
+
"mappings": "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",
|
4 |
"sources": ["force-dashicons.scss","_dashicons.scss"],
|
5 |
"names": [],
|
6 |
"file": "force-dashicons.css"
|
css/force-dashicons.scss
CHANGED
@@ -18,7 +18,8 @@
|
|
18 |
|
19 |
//Some plugins set the icon as a background image instead of a pseudo-element.
|
20 |
& > .wp-menu-image {
|
21 |
-
background-image: none;
|
|
|
22 |
}
|
23 |
|
24 |
@import '_dashicons';
|
18 |
|
19 |
//Some plugins set the icon as a background image instead of a pseudo-element.
|
20 |
& > .wp-menu-image {
|
21 |
+
background-image: none !important;
|
22 |
+
position: static;
|
23 |
}
|
24 |
|
25 |
@import '_dashicons';
|
css/menu-editor.css
CHANGED
@@ -7,7 +7,7 @@
|
|
7 |
|
8 |
.ws_main_container {
|
9 |
margin: 2px;
|
10 |
-
width:
|
11 |
float: left;
|
12 |
display: block;
|
13 |
border: 1px solid #ccd0d4;
|
@@ -141,7 +141,7 @@
|
|
141 |
*/
|
142 |
.ws_container {
|
143 |
display: block;
|
144 |
-
width:
|
145 |
padding: 3px;
|
146 |
margin: 2px 0 2px 6px; }
|
147 |
body.rtl .ws_container {
|
@@ -314,7 +314,8 @@
|
|
314 |
visibility: hidden; }
|
315 |
|
316 |
/* The input box in each field editor */
|
317 |
-
#ws_menu_editor .ws_editbox input[type="text"],
|
|
|
318 |
display: block;
|
319 |
float: left;
|
320 |
width: 254px;
|
@@ -323,8 +324,8 @@
|
|
323 |
line-height: 17px;
|
324 |
padding-top: 3px;
|
325 |
padding-bottom: 3px; }
|
326 |
-
.ame-is-wp53-plus #ws_menu_editor .ws_editbox input[type="text"],
|
327 |
-
|
328 |
height: 28px; }
|
329 |
|
330 |
#ws_menu_editor .ws_edit_field label {
|
@@ -544,6 +545,9 @@ a.ws_button.ws_button_disabled:hover {
|
|
544 |
float: left;
|
545 |
width: 5px; }
|
546 |
|
|
|
|
|
|
|
547 |
/************************************
|
548 |
Capability selector
|
549 |
*************************************/
|
@@ -917,6 +921,10 @@ a#ws-ame-delete-color-preset:hover {
|
|
917 |
.settings_page_menu_editor .ui-dialog .ui-dialog-content {
|
918 |
padding: 8px 8px 8px 8px;
|
919 |
font-size: 1.1em; }
|
|
|
|
|
|
|
|
|
920 |
.settings_page_menu_editor .ui-dialog-titlebar {
|
921 |
display: block;
|
922 |
height: 22px;
|
@@ -955,6 +963,28 @@ a#ws-ame-delete-color-preset:hover {
|
|
955 |
#import_dialog .ws_dialog_panel {
|
956 |
height: 64px; }
|
957 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
958 |
.ws_dialog_buttons {
|
959 |
/*height: 30px;*/
|
960 |
text-align: right;
|
@@ -1501,6 +1531,20 @@ a#ws-ame-delete-color-preset:hover {
|
|
1501 |
.ame-is-wp53-plus .ws_edit_field input[type="button"] {
|
1502 |
margin-top: 1px; }
|
1503 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1504 |
/*********************************************
|
1505 |
Miscellaneous
|
1506 |
**********************************************/
|
7 |
|
8 |
.ws_main_container {
|
9 |
margin: 2px;
|
10 |
+
width: 316px;
|
11 |
float: left;
|
12 |
display: block;
|
13 |
border: 1px solid #ccd0d4;
|
141 |
*/
|
142 |
.ws_container {
|
143 |
display: block;
|
144 |
+
width: 296px;
|
145 |
padding: 3px;
|
146 |
margin: 2px 0 2px 6px; }
|
147 |
body.rtl .ws_container {
|
314 |
visibility: hidden; }
|
315 |
|
316 |
/* The input box in each field editor */
|
317 |
+
#ws_menu_editor .ws_editbox input[type="text"],
|
318 |
+
#ws_menu_editor .ws_editbox select {
|
319 |
display: block;
|
320 |
float: left;
|
321 |
width: 254px;
|
324 |
line-height: 17px;
|
325 |
padding-top: 3px;
|
326 |
padding-bottom: 3px; }
|
327 |
+
.ame-is-wp53-plus #ws_menu_editor .ws_editbox input[type="text"], .ame-is-wp53-plus
|
328 |
+
#ws_menu_editor .ws_editbox select {
|
329 |
height: 28px; }
|
330 |
|
331 |
#ws_menu_editor .ws_edit_field label {
|
545 |
float: left;
|
546 |
width: 5px; }
|
547 |
|
548 |
+
#ws_toggle_toolbar {
|
549 |
+
margin-right: 0; }
|
550 |
+
|
551 |
/************************************
|
552 |
Capability selector
|
553 |
*************************************/
|
921 |
.settings_page_menu_editor .ui-dialog .ui-dialog-content {
|
922 |
padding: 8px 8px 8px 8px;
|
923 |
font-size: 1.1em; }
|
924 |
+
.settings_page_menu_editor .ui-dialog .ame-scrollable-dialog-content {
|
925 |
+
max-height: 500px;
|
926 |
+
overflow-y: auto;
|
927 |
+
padding-top: 0.5em; }
|
928 |
.settings_page_menu_editor .ui-dialog-titlebar {
|
929 |
display: block;
|
930 |
height: 22px;
|
963 |
#import_dialog .ws_dialog_panel {
|
964 |
height: 64px; }
|
965 |
|
966 |
+
.ws_dialog_panel .ame-fixed-label-text {
|
967 |
+
display: inline-block;
|
968 |
+
min-width: 6em; }
|
969 |
+
.ws_dialog_panel .ame-inline-select-with-input {
|
970 |
+
vertical-align: baseline; }
|
971 |
+
.ws_dialog_panel .ame-box-side-sizes {
|
972 |
+
display: flex;
|
973 |
+
flex-wrap: wrap;
|
974 |
+
max-width: 800px; }
|
975 |
+
.ws_dialog_panel .ame-box-side-sizes .ame-fixed-label-text {
|
976 |
+
min-width: 4em; }
|
977 |
+
.ws_dialog_panel .ame-box-side-sizes label {
|
978 |
+
margin-right: 2.5em; }
|
979 |
+
.ws_dialog_panel .ame-box-side-sizes input {
|
980 |
+
margin-bottom: 0.4em; }
|
981 |
+
.ws_dialog_panel .ame-box-side-sizes input[type=number] {
|
982 |
+
width: 6em; }
|
983 |
+
|
984 |
+
.ame-flexbox-break {
|
985 |
+
flex-basis: 100%;
|
986 |
+
height: 0; }
|
987 |
+
|
988 |
.ws_dialog_buttons {
|
989 |
/*height: 30px;*/
|
990 |
text-align: right;
|
1531 |
.ame-is-wp53-plus .ws_edit_field input[type="button"] {
|
1532 |
margin-top: 1px; }
|
1533 |
|
1534 |
+
/*********************************************
|
1535 |
+
CSS border style selector
|
1536 |
+
**********************************************/
|
1537 |
+
.ame-css-border-styles .ame-fixed-label-text {
|
1538 |
+
min-width: 5em; }
|
1539 |
+
.ame-css-border-styles .ame-border-sample-container {
|
1540 |
+
display: inline-block;
|
1541 |
+
vertical-align: top;
|
1542 |
+
min-height: 28px; }
|
1543 |
+
.ame-css-border-styles .ame-border-sample {
|
1544 |
+
display: inline-block;
|
1545 |
+
width: 14em;
|
1546 |
+
border-top: 0.3em solid #444; }
|
1547 |
+
|
1548 |
/*********************************************
|
1549 |
Miscellaneous
|
1550 |
**********************************************/
|
css/menu-editor.scss
CHANGED
@@ -10,7 +10,7 @@
|
|
10 |
margin-top: 9px;
|
11 |
}
|
12 |
|
13 |
-
$mainContainerWidth:
|
14 |
$mainContainerBorderWidth: 1px;
|
15 |
$mainContainerBorderRadius: 0px;
|
16 |
$mainContainerBorderColor: $amePostboxBorderColor; //Was #cdd5d5 before WP 5.3.
|
@@ -189,7 +189,7 @@ $mainContainerBorderColor: $amePostboxBorderColor; //Was #cdd5d5 before WP 5.3.
|
|
189 |
*/
|
190 |
|
191 |
.ws_container {
|
192 |
-
$itemWidth:
|
193 |
$itemPadding: 3px;
|
194 |
$itemBorderWidth: 1px;
|
195 |
$itemHorizontalMargin: ($mainContainerWidth - $itemWidth - $itemPadding * 2 - $itemBorderWidth * 2) / 2;
|
@@ -740,6 +740,10 @@ a.ws_button.ws_button_disabled:hover {
|
|
740 |
width: 5px;
|
741 |
}
|
742 |
|
|
|
|
|
|
|
|
|
743 |
/************************************
|
744 |
Capability selector
|
745 |
*************************************/
|
@@ -1240,6 +1244,12 @@ $colorFieldRightMargin: 5px;
|
|
1240 |
padding: 8px 8px 8px 8px;
|
1241 |
font-size: 1.1em;
|
1242 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
1243 |
}
|
1244 |
|
1245 |
.ui-dialog-titlebar {
|
@@ -1300,6 +1310,44 @@ $colorFieldRightMargin: 5px;
|
|
1300 |
height: 64px;
|
1301 |
}
|
1302 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1303 |
.ws_dialog_buttons {
|
1304 |
/*height: 30px;*/
|
1305 |
text-align: right;
|
@@ -2127,6 +2175,28 @@ $userSelectionPanelPadding: 10px;
|
|
2127 |
margin-top: 1px;
|
2128 |
}
|
2129 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2130 |
/*********************************************
|
2131 |
Miscellaneous
|
2132 |
**********************************************/
|
10 |
margin-top: 9px;
|
11 |
}
|
12 |
|
13 |
+
$mainContainerWidth: 316px;
|
14 |
$mainContainerBorderWidth: 1px;
|
15 |
$mainContainerBorderRadius: 0px;
|
16 |
$mainContainerBorderColor: $amePostboxBorderColor; //Was #cdd5d5 before WP 5.3.
|
189 |
*/
|
190 |
|
191 |
.ws_container {
|
192 |
+
$itemWidth: $mainContainerWidth - 20px;
|
193 |
$itemPadding: 3px;
|
194 |
$itemBorderWidth: 1px;
|
195 |
$itemHorizontalMargin: ($mainContainerWidth - $itemWidth - $itemPadding * 2 - $itemBorderWidth * 2) / 2;
|
740 |
width: 5px;
|
741 |
}
|
742 |
|
743 |
+
#ws_toggle_toolbar {
|
744 |
+
margin-right: 0;
|
745 |
+
}
|
746 |
+
|
747 |
/************************************
|
748 |
Capability selector
|
749 |
*************************************/
|
1244 |
padding: 8px 8px 8px 8px;
|
1245 |
font-size: 1.1em;
|
1246 |
}
|
1247 |
+
|
1248 |
+
.ame-scrollable-dialog-content {
|
1249 |
+
max-height: 500px;
|
1250 |
+
overflow-y: auto;
|
1251 |
+
padding-top: 0.5em;
|
1252 |
+
}
|
1253 |
}
|
1254 |
|
1255 |
.ui-dialog-titlebar {
|
1310 |
height: 64px;
|
1311 |
}
|
1312 |
|
1313 |
+
.ws_dialog_panel {
|
1314 |
+
.ame-fixed-label-text {
|
1315 |
+
display: inline-block;
|
1316 |
+
min-width: 6em;
|
1317 |
+
}
|
1318 |
+
|
1319 |
+
.ame-inline-select-with-input {
|
1320 |
+
vertical-align: baseline;
|
1321 |
+
}
|
1322 |
+
|
1323 |
+
.ame-box-side-sizes {
|
1324 |
+
display: flex;
|
1325 |
+
flex-wrap: wrap;
|
1326 |
+
max-width: 800px;
|
1327 |
+
|
1328 |
+
.ame-fixed-label-text {
|
1329 |
+
min-width: 4em;
|
1330 |
+
}
|
1331 |
+
|
1332 |
+
label {
|
1333 |
+
margin-right: 2.5em;
|
1334 |
+
}
|
1335 |
+
|
1336 |
+
input {
|
1337 |
+
margin-bottom: 0.4em;
|
1338 |
+
}
|
1339 |
+
|
1340 |
+
input[type=number] {
|
1341 |
+
width: 6em;
|
1342 |
+
}
|
1343 |
+
}
|
1344 |
+
}
|
1345 |
+
|
1346 |
+
.ame-flexbox-break {
|
1347 |
+
flex-basis: 100%;
|
1348 |
+
height: 0;
|
1349 |
+
}
|
1350 |
+
|
1351 |
.ws_dialog_buttons {
|
1352 |
/*height: 30px;*/
|
1353 |
text-align: right;
|
2175 |
margin-top: 1px;
|
2176 |
}
|
2177 |
|
2178 |
+
/*********************************************
|
2179 |
+
CSS border style selector
|
2180 |
+
**********************************************/
|
2181 |
+
|
2182 |
+
.ame-css-border-styles {
|
2183 |
+
.ame-fixed-label-text {
|
2184 |
+
min-width: 5em;
|
2185 |
+
}
|
2186 |
+
|
2187 |
+
.ame-border-sample-container {
|
2188 |
+
display: inline-block;
|
2189 |
+
vertical-align: top;
|
2190 |
+
min-height: 28px;
|
2191 |
+
}
|
2192 |
+
|
2193 |
+
.ame-border-sample {
|
2194 |
+
display: inline-block;
|
2195 |
+
width: 14em;
|
2196 |
+
border-top: 0.3em solid #444;
|
2197 |
+
}
|
2198 |
+
}
|
2199 |
+
|
2200 |
/*********************************************
|
2201 |
Miscellaneous
|
2202 |
**********************************************/
|
css/style-modern-one.css
CHANGED
@@ -9,7 +9,7 @@ $hiddenItemBorder: #f1acb1;
|
|
9 |
-webkit-box-sizing: border-box;
|
10 |
-moz-box-sizing: border-box;
|
11 |
box-sizing: border-box;
|
12 |
-
width:
|
13 |
padding: 0;
|
14 |
margin-top: 0;
|
15 |
margin-bottom: 9px;
|
@@ -67,7 +67,7 @@ a.ws_edit_link {
|
|
67 |
-moz-box-sizing: border-box;
|
68 |
box-sizing: border-box;
|
69 |
vertical-align: middle;
|
70 |
-
width:
|
71 |
height: 0;
|
72 |
border: 2px inset rgba(0, 0, 0, 0.2); }
|
73 |
.ws_menu_separator .ws_item_title {
|
@@ -124,7 +124,7 @@ a.ws_edit_link {
|
|
124 |
box-shadow: 1px 3px 6px 0 rgba(1, 1, 1, 0.4); }
|
125 |
|
126 |
.ws_main_container {
|
127 |
-
width:
|
128 |
.ws_main_container .ws_toolbar {
|
129 |
padding: 10px 10px 0; }
|
130 |
.ws_main_container .ws_dropzone {
|
9 |
-webkit-box-sizing: border-box;
|
10 |
-moz-box-sizing: border-box;
|
11 |
box-sizing: border-box;
|
12 |
+
width: 304px;
|
13 |
padding: 0;
|
14 |
margin-top: 0;
|
15 |
margin-bottom: 9px;
|
67 |
-moz-box-sizing: border-box;
|
68 |
box-sizing: border-box;
|
69 |
vertical-align: middle;
|
70 |
+
width: 249.28px;
|
71 |
height: 0;
|
72 |
border: 2px inset rgba(0, 0, 0, 0.2); }
|
73 |
.ws_menu_separator .ws_item_title {
|
124 |
box-shadow: 1px 3px 6px 0 rgba(1, 1, 1, 0.4); }
|
125 |
|
126 |
.ws_main_container {
|
127 |
+
width: 324px; }
|
128 |
.ws_main_container .ws_toolbar {
|
129 |
padding: 10px 10px 0; }
|
130 |
.ws_main_container .ws_dropzone {
|
css/style-modern-one.scss
CHANGED
@@ -10,7 +10,7 @@ $itemText: #23282D; //WordPress default.
|
|
10 |
|
11 |
$horizontalPadding: 7px;
|
12 |
$headVerticalPadding: 7px;
|
13 |
-
$itemWidth:
|
14 |
$itemMarginBottom: 9px;
|
15 |
|
16 |
$selectedItemBackground: #c7c7c7;
|
10 |
|
11 |
$horizontalPadding: 7px;
|
12 |
$headVerticalPadding: 7px;
|
13 |
+
$itemWidth: 304px;
|
14 |
$itemMarginBottom: 9px;
|
15 |
|
16 |
$selectedItemBackground: #c7c7c7;
|
includes/ame-utils.php
CHANGED
@@ -64,6 +64,43 @@ class ameUtils {
|
|
64 |
}
|
65 |
return null;
|
66 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
67 |
}
|
68 |
|
69 |
class ameFileLock {
|
64 |
}
|
65 |
return null;
|
66 |
}
|
67 |
+
|
68 |
+
/**
|
69 |
+
* Capitalize the first character of every word. Supports UTF-8.
|
70 |
+
*
|
71 |
+
* @param string $input
|
72 |
+
* @return string
|
73 |
+
*/
|
74 |
+
public static function ucWords($input) {
|
75 |
+
static $hasUnicodeSupport = null, $charset = 'UTF-8';
|
76 |
+
if ( $hasUnicodeSupport === null ) {
|
77 |
+
//We need the mbstring extension and PCRE UTF-8 support.
|
78 |
+
$hasUnicodeSupport = function_exists('mb_list_encodings')
|
79 |
+
&& (@preg_match('/\pL/u', 'a') === 1)
|
80 |
+
&& function_exists('get_bloginfo');
|
81 |
+
|
82 |
+
if ( $hasUnicodeSupport ) {
|
83 |
+
//Technically, the encoding can change if something switches WP to a different site
|
84 |
+
//in the middle of a request, but we'll ignore that possibility.
|
85 |
+
$charset = get_bloginfo('charset');
|
86 |
+
$hasUnicodeSupport = in_array($charset, mb_list_encodings()) && ($charset === 'UTF-8');
|
87 |
+
}
|
88 |
+
}
|
89 |
+
|
90 |
+
if ( $hasUnicodeSupport ) {
|
91 |
+
$totalLength = mb_strlen($input);
|
92 |
+
$words = preg_split('/([\s\-_]++)/u', $input, null, PREG_SPLIT_DELIM_CAPTURE);
|
93 |
+
$output = array();
|
94 |
+
foreach ($words as $word) {
|
95 |
+
$firstCharacter = mb_substr($word, 0, 1, $charset);
|
96 |
+
//In old PHP versions, you must specify a non-null length to get the rest of the string.
|
97 |
+
$remainder = mb_substr($word, 1, $totalLength, $charset);
|
98 |
+
$output[] = mb_strtoupper($firstCharacter, $charset) . $remainder;
|
99 |
+
}
|
100 |
+
return implode('', $output);
|
101 |
+
}
|
102 |
+
return ucwords($input);
|
103 |
+
}
|
104 |
}
|
105 |
|
106 |
class ameFileLock {
|
includes/editor-page.php
CHANGED
@@ -40,7 +40,7 @@ if ( !apply_filters('admin_menu_editor_is_pro', false) ){
|
|
40 |
var screenLinks = $('#screen-meta-links');
|
41 |
screenLinks.append(
|
42 |
'<div id="ws-pro-version-notice" class="custom-screen-meta-link-wrap">' +
|
43 |
-
'<a href="
|
44 |
'</div>'
|
45 |
);
|
46 |
})(jQuery);
|
@@ -102,6 +102,9 @@ function ame_output_sort_buttons($icons) {
|
|
102 |
|
103 |
<a id='ws_new_menu' class='ws_button' href='javascript:void(0)' title='New menu'><img src='<?php echo $icons['new']; ?>' alt="New menu" /></a>
|
104 |
<a id='ws_new_separator' class='ws_button' href='javascript:void(0)' title='New separator'><img src='<?php echo $icons['new-separator']; ?>' alt="New separator" /></a>
|
|
|
|
|
|
|
105 |
|
106 |
<?php if ( $is_pro_version ): ?>
|
107 |
<div class="ws_separator"> </div>
|
40 |
var screenLinks = $('#screen-meta-links');
|
41 |
screenLinks.append(
|
42 |
'<div id="ws-pro-version-notice" class="custom-screen-meta-link-wrap">' +
|
43 |
+
'<a href="https://adminmenueditor.com/upgrade-to-pro/?utm_source=Admin%2BMenu%2BEditor%2Bfree&utm_medium=text_link&utm_content=top_upgrade_link&utm_campaign=Plugins" id="ws-pro-version-notice-link" class="show-settings custom-screen-meta-link" target="_blank" title="View Pro version details">Upgrade to Pro</a>' +
|
44 |
'</div>'
|
45 |
);
|
46 |
})(jQuery);
|
102 |
|
103 |
<a id='ws_new_menu' class='ws_button' href='javascript:void(0)' title='New menu'><img src='<?php echo $icons['new']; ?>' alt="New menu" /></a>
|
104 |
<a id='ws_new_separator' class='ws_button' href='javascript:void(0)' title='New separator'><img src='<?php echo $icons['new-separator']; ?>' alt="New separator" /></a>
|
105 |
+
<?php if ( $is_pro_version ): ?>
|
106 |
+
<a id='ws_new_heading' class='ws_button' href='javascript:void(0)' title='New heading'><img src='<?php echo $icons['new-heading']; ?>' alt="New heading" /></a>
|
107 |
+
<?php endif; ?>
|
108 |
|
109 |
<?php if ( $is_pro_version ): ?>
|
110 |
<div class="ws_separator"> </div>
|
includes/menu-editor-core.php
CHANGED
@@ -88,7 +88,7 @@ class WPMenuEditor extends MenuEd_ShadowPluginFramework {
|
|
88 |
public $virtual_cap_mode = 3; //self::ALL_VIRTUAL_CAPS
|
89 |
|
90 |
/**
|
91 |
-
* @var array An index of URLs relative to /wp-admin/. Any menus that match the index will be ignored.
|
92 |
*/
|
93 |
private $menu_url_blacklist = array();
|
94 |
|
@@ -125,6 +125,20 @@ class WPMenuEditor extends MenuEd_ShadowPluginFramework {
|
|
125 |
*/
|
126 |
private $last_menu_exception = null;
|
127 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
128 |
function init(){
|
129 |
$this->sitewide_options = true;
|
130 |
|
@@ -309,6 +323,8 @@ class WPMenuEditor extends MenuEd_ShadowPluginFramework {
|
|
309 |
'index.php?page=simple-calendar_about' => true,
|
310 |
'index.php?page=simple-calendar_credits' => true,
|
311 |
'index.php?page=simple-calendar_translators' => true,
|
|
|
|
|
312 |
);
|
313 |
|
314 |
//AJAXify screen options
|
@@ -331,7 +347,7 @@ class WPMenuEditor extends MenuEd_ShadowPluginFramework {
|
|
331 |
//to the request vars even if this PHP misfeature is disabled.
|
332 |
$this->capture_request_vars();
|
333 |
|
334 |
-
add_action('admin_enqueue_scripts', array($this, 'enqueue_menu_fix_script'));
|
335 |
|
336 |
//Enqueue miscellaneous helper scripts and styles.
|
337 |
add_action('admin_enqueue_scripts', array($this, 'enqueue_helper_scripts'));
|
@@ -609,6 +625,8 @@ class WPMenuEditor extends MenuEd_ShadowPluginFramework {
|
|
609 |
//Save the merged menu for later - the editor page will need it
|
610 |
$this->merged_custom_menu = $custom_menu;
|
611 |
|
|
|
|
|
612 |
//Convert our custom menu to the $menu + $submenu structure used by WP.
|
613 |
//Note: This method sets up multiple internal fields and may cause side-effects.
|
614 |
$this->user_cap_cache_enabled = true;
|
@@ -897,18 +915,25 @@ class WPMenuEditor extends MenuEd_ShadowPluginFramework {
|
|
897 |
|
898 |
/**
|
899 |
* @access private
|
|
|
900 |
*/
|
901 |
-
public function register_jquery_plugins() {
|
902 |
-
|
903 |
-
|
904 |
-
|
905 |
-
|
906 |
-
|
907 |
-
|
908 |
-
|
909 |
-
|
910 |
-
|
911 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
912 |
}
|
913 |
|
914 |
/**
|
@@ -1300,6 +1325,7 @@ class WPMenuEditor extends MenuEd_ShadowPluginFramework {
|
|
1300 |
*
|
1301 |
* @param array|null $custom_menu
|
1302 |
* @param string|null $config_id Supported values: 'network-admin', 'global' or 'site'
|
|
|
1303 |
*/
|
1304 |
function set_custom_menu($custom_menu, $config_id = null) {
|
1305 |
if ( $config_id === null ) {
|
@@ -1327,14 +1353,13 @@ class WPMenuEditor extends MenuEd_ShadowPluginFramework {
|
|
1327 |
$site_specific_options = array();
|
1328 |
}
|
1329 |
$site_specific_options['custom_menu'] = $custom_menu;
|
1330 |
-
update_option($this->option_name, $site_specific_options);
|
1331 |
} else if ($config_id === 'global') {
|
1332 |
$this->options['custom_menu'] = $custom_menu;
|
1333 |
-
$this->save_options();
|
1334 |
-
|
1335 |
} else if ($config_id === 'network-admin' ) {
|
1336 |
$this->options['custom_network_menu'] = $custom_menu;
|
1337 |
-
$this->save_options();
|
1338 |
} else {
|
1339 |
throw new LogicException(sprintf('Invalid menu configuration ID: "%s"', $config_id));
|
1340 |
}
|
@@ -1343,6 +1368,8 @@ class WPMenuEditor extends MenuEd_ShadowPluginFramework {
|
|
1343 |
$this->cached_custom_menu = null;
|
1344 |
$this->cached_virtual_caps = null;
|
1345 |
$this->cached_user_caps = array();
|
|
|
|
|
1346 |
}
|
1347 |
|
1348 |
/**
|
@@ -2511,6 +2538,11 @@ class WPMenuEditor extends MenuEd_ShadowPluginFramework {
|
|
2511 |
//Remember if the user has changed any menu icons to different Dashicons.
|
2512 |
$menu['has_modified_dashicons'] = ameModifiedIconDetector::detect($menu);
|
2513 |
|
|
|
|
|
|
|
|
|
|
|
2514 |
//Which menu configuration are we changing?
|
2515 |
$config_id = isset($post['config_id']) ? $post['config_id'] : null;
|
2516 |
if ( !in_array($config_id, array('site', 'global', 'network-admin')) ) {
|
@@ -2518,7 +2550,39 @@ class WPMenuEditor extends MenuEd_ShadowPluginFramework {
|
|
2518 |
}
|
2519 |
|
2520 |
//Save the custom menu
|
2521 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2522 |
|
2523 |
//Redirect back to the editor and display the success message.
|
2524 |
$query = array('message' => 1);
|
@@ -3179,11 +3243,20 @@ class WPMenuEditor extends MenuEd_ShadowPluginFramework {
|
|
3179 |
* would not be highlighted properly when the user visits them.
|
3180 |
*/
|
3181 |
public function enqueue_menu_fix_script() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3182 |
wp_enqueue_auto_versioned_script(
|
3183 |
'ame-menu-fix',
|
3184 |
plugins_url('js/menu-highlight-fix.js', $this->plugin_file),
|
3185 |
array('jquery'),
|
3186 |
-
|
3187 |
);
|
3188 |
}
|
3189 |
|
@@ -3242,7 +3315,20 @@ class WPMenuEditor extends MenuEd_ShadowPluginFramework {
|
|
3242 |
return $this->cached_user_caps[$capability];
|
3243 |
}
|
3244 |
|
3245 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3246 |
$this->cached_user_caps[$capability] = $user_can;
|
3247 |
return $user_can;
|
3248 |
}
|
@@ -3647,7 +3733,7 @@ class WPMenuEditor extends MenuEd_ShadowPluginFramework {
|
|
3647 |
'ame-helper-style',
|
3648 |
plugins_url('css/admin.css', $this->plugin_file),
|
3649 |
array(),
|
3650 |
-
'
|
3651 |
);
|
3652 |
|
3653 |
if ( $this->options['force_custom_dashicons'] ) {
|
@@ -3658,7 +3744,7 @@ class WPMenuEditor extends MenuEd_ShadowPluginFramework {
|
|
3658 |
'ame-force-dashicons',
|
3659 |
plugins_url('css/force-dashicons.css', $this->plugin_file),
|
3660 |
array(),
|
3661 |
-
'
|
3662 |
);
|
3663 |
}
|
3664 |
}
|
@@ -4625,7 +4711,12 @@ class ameMenuTemplateBuilder {
|
|
4625 |
//Skip blacklisted menus.
|
4626 |
//BUG: We shouldn't skip top level menus that have non-blacklisted submenu items.
|
4627 |
if ( isset($item['url'], $this->blacklist[$item['url']]) ) {
|
4628 |
-
|
|
|
|
|
|
|
|
|
|
|
4629 |
}
|
4630 |
|
4631 |
$name = $this->sanitizeMenuTitle($item['menu_title']);
|
88 |
public $virtual_cap_mode = 3; //self::ALL_VIRTUAL_CAPS
|
89 |
|
90 |
/**
|
91 |
+
* @var array<string,true|string> An index of URLs relative to /wp-admin/. Any menus that match the index will be ignored.
|
92 |
*/
|
93 |
private $menu_url_blacklist = array();
|
94 |
|
125 |
*/
|
126 |
private $last_menu_exception = null;
|
127 |
|
128 |
+
private static $jquery_plugins = array(
|
129 |
+
//jQuery JSON plugin
|
130 |
+
'jquery-json' => 'js/jquery.json.js',
|
131 |
+
//jQuery sort plugin
|
132 |
+
'jquery-sort' => 'js/jquery.sort.js',
|
133 |
+
//qTip2 - jQuery tooltip plugin
|
134 |
+
'jquery-qtip' => 'js/jquery.qtip.min.js',
|
135 |
+
//jQuery Form plugin. This is a more recent version than the one included with WP.
|
136 |
+
'ame-jquery-form' => 'js/jquery.form.js',
|
137 |
+
//jQuery cookie plugin
|
138 |
+
'ame-jquery-cookie' => 'js/jquery.biscuit.js',
|
139 |
+
);
|
140 |
+
private $registered_jquery_plugins = array();
|
141 |
+
|
142 |
function init(){
|
143 |
$this->sitewide_options = true;
|
144 |
|
323 |
'index.php?page=simple-calendar_about' => true,
|
324 |
'index.php?page=simple-calendar_credits' => true,
|
325 |
'index.php?page=simple-calendar_translators' => true,
|
326 |
+
//Stripe For WooCommerce 3.2.12
|
327 |
+
'wc_stripe' => 'submenu',
|
328 |
);
|
329 |
|
330 |
//AJAXify screen options
|
347 |
//to the request vars even if this PHP misfeature is disabled.
|
348 |
$this->capture_request_vars();
|
349 |
|
350 |
+
add_action('admin_enqueue_scripts', array($this, 'enqueue_menu_fix_script'), 8);
|
351 |
|
352 |
//Enqueue miscellaneous helper scripts and styles.
|
353 |
add_action('admin_enqueue_scripts', array($this, 'enqueue_helper_scripts'));
|
625 |
//Save the merged menu for later - the editor page will need it
|
626 |
$this->merged_custom_menu = $custom_menu;
|
627 |
|
628 |
+
do_action('admin_menu_editor-menu_merged', $custom_menu, $this->merged_custom_menu);
|
629 |
+
|
630 |
//Convert our custom menu to the $menu + $submenu structure used by WP.
|
631 |
//Note: This method sets up multiple internal fields and may cause side-effects.
|
632 |
$this->user_cap_cache_enabled = true;
|
915 |
|
916 |
/**
|
917 |
* @access private
|
918 |
+
* @param string[]|null $handles
|
919 |
*/
|
920 |
+
public function register_jquery_plugins($handles = null) {
|
921 |
+
if ( $handles === null ) {
|
922 |
+
$handles = array_keys(self::$jquery_plugins);
|
923 |
+
}
|
924 |
+
|
925 |
+
foreach ($handles as $handle) {
|
926 |
+
if ( !isset(self::$jquery_plugins[$handle]) || !empty($this->registered_jquery_plugins[$handle]) ) {
|
927 |
+
continue;
|
928 |
+
}
|
929 |
+
|
930 |
+
wp_register_auto_versioned_script(
|
931 |
+
$handle,
|
932 |
+
plugins_url(self::$jquery_plugins[$handle], $this->plugin_file),
|
933 |
+
array('jquery')
|
934 |
+
);
|
935 |
+
$this->registered_jquery_plugins[$handle] = true;
|
936 |
+
}
|
937 |
}
|
938 |
|
939 |
/**
|
1325 |
*
|
1326 |
* @param array|null $custom_menu
|
1327 |
* @param string|null $config_id Supported values: 'network-admin', 'global' or 'site'
|
1328 |
+
* @return bool True if the database entry was updated, false if not.
|
1329 |
*/
|
1330 |
function set_custom_menu($custom_menu, $config_id = null) {
|
1331 |
if ( $config_id === null ) {
|
1353 |
$site_specific_options = array();
|
1354 |
}
|
1355 |
$site_specific_options['custom_menu'] = $custom_menu;
|
1356 |
+
$updated = update_option($this->option_name, $site_specific_options);
|
1357 |
} else if ($config_id === 'global') {
|
1358 |
$this->options['custom_menu'] = $custom_menu;
|
1359 |
+
$updated = $this->save_options();
|
|
|
1360 |
} else if ($config_id === 'network-admin' ) {
|
1361 |
$this->options['custom_network_menu'] = $custom_menu;
|
1362 |
+
$updated = $this->save_options();
|
1363 |
} else {
|
1364 |
throw new LogicException(sprintf('Invalid menu configuration ID: "%s"', $config_id));
|
1365 |
}
|
1368 |
$this->cached_custom_menu = null;
|
1369 |
$this->cached_virtual_caps = null;
|
1370 |
$this->cached_user_caps = array();
|
1371 |
+
|
1372 |
+
return $updated;
|
1373 |
}
|
1374 |
|
1375 |
/**
|
2538 |
//Remember if the user has changed any menu icons to different Dashicons.
|
2539 |
$menu['has_modified_dashicons'] = ameModifiedIconDetector::detect($menu);
|
2540 |
|
2541 |
+
//Add a modification timestamp to help ensure that the new menu data will be different.
|
2542 |
+
//This way update_option() and similar functions should only return false when there is
|
2543 |
+
//an actual error, not just because the data hasn't changed.
|
2544 |
+
$menu['last_modified_on'] = date('c');
|
2545 |
+
|
2546 |
//Which menu configuration are we changing?
|
2547 |
$config_id = isset($post['config_id']) ? $post['config_id'] : null;
|
2548 |
if ( !in_array($config_id, array('site', 'global', 'network-admin')) ) {
|
2550 |
}
|
2551 |
|
2552 |
//Save the custom menu
|
2553 |
+
if ( !$this->set_custom_menu($menu, $config_id) ) {
|
2554 |
+
$messages = array('Error: Could not save menu settings.');
|
2555 |
+
|
2556 |
+
global $wpdb;
|
2557 |
+
if ( !empty($wpdb->last_error) ) {
|
2558 |
+
$messages[] = 'Last database error: "' . esc_html($wpdb->last_error) . '"';
|
2559 |
+
}
|
2560 |
+
|
2561 |
+
//Check the character set of the wp_options and wp_sitemeta tables.
|
2562 |
+
$bad_charsets = array('utf8', 'utf8mb3');
|
2563 |
+
$tables_to_check = array(array($wpdb->options, 'option_value'));
|
2564 |
+
if ( is_multisite() ) {
|
2565 |
+
$tables_to_check[] = array($wpdb->sitemeta, 'meta_value');
|
2566 |
+
}
|
2567 |
+
foreach ($tables_to_check as $item) {
|
2568 |
+
list($table, $column) = $item;
|
2569 |
+
if ( empty($table) ) {
|
2570 |
+
continue;
|
2571 |
+
}
|
2572 |
+
$current_charset = $wpdb->get_col_charset($table, $column);
|
2573 |
+
if ( in_array($current_charset, $bad_charsets) ) {
|
2574 |
+
$messages[] = sprintf(
|
2575 |
+
'<p>Warning: The <code>%s</code> database table uses the outdated <code>%s</code> ' .
|
2576 |
+
'character set. This can prevent you from saving settings that contain emojis, ' .
|
2577 |
+
'certain Chinese characters, and so on. It is recommended to convert the table ' .
|
2578 |
+
'to the <code>utf8mb4</code> character set.</p>',
|
2579 |
+
esc_html($wpdb->options),
|
2580 |
+
esc_html($current_charset)
|
2581 |
+
);
|
2582 |
+
}
|
2583 |
+
}
|
2584 |
+
wp_die(implode("<br>\n", $messages));
|
2585 |
+
}
|
2586 |
|
2587 |
//Redirect back to the editor and display the success message.
|
2588 |
$query = array('message' => 1);
|
3243 |
* would not be highlighted properly when the user visits them.
|
3244 |
*/
|
3245 |
public function enqueue_menu_fix_script() {
|
3246 |
+
//Compatibility fix for PRO Theme 1.1.5.
|
3247 |
+
//This custom admin theme expands the current admin menu via JavaScript by using a "ready" handler.
|
3248 |
+
//We need to ensure that we highlight the correct current menu before that happens. This means we
|
3249 |
+
//have to enqueue the script in the header and with a higher priority than the PRO Theme script.
|
3250 |
+
$inFooter = true;
|
3251 |
+
if ( class_exists('PROTheme', false) ) {
|
3252 |
+
$inFooter = false;
|
3253 |
+
}
|
3254 |
+
|
3255 |
wp_enqueue_auto_versioned_script(
|
3256 |
'ame-menu-fix',
|
3257 |
plugins_url('js/menu-highlight-fix.js', $this->plugin_file),
|
3258 |
array('jquery'),
|
3259 |
+
$inFooter
|
3260 |
);
|
3261 |
}
|
3262 |
|
3315 |
return $this->cached_user_caps[$capability];
|
3316 |
}
|
3317 |
|
3318 |
+
/*
|
3319 |
+
* Some meta caps require an object ID to be passed as the second argument. WordPress core will
|
3320 |
+
* unintentionally trigger a notice if we don't provide that argument. We use a non-existent ID
|
3321 |
+
* to prevent that notice.
|
3322 |
+
*
|
3323 |
+
* NULL, FALSE and 0 are not good alternatives because some WordPress APIs (e.g. get_post) take
|
3324 |
+
* those values as a sign to return the current post/page/taxonomy.
|
3325 |
+
*/
|
3326 |
+
|
3327 |
+
$user_can = apply_filters(
|
3328 |
+
'admin_menu_editor-current_user_can',
|
3329 |
+
current_user_can($capability, -1),
|
3330 |
+
$capability
|
3331 |
+
);
|
3332 |
$this->cached_user_caps[$capability] = $user_can;
|
3333 |
return $user_can;
|
3334 |
}
|
3733 |
'ame-helper-style',
|
3734 |
plugins_url('css/admin.css', $this->plugin_file),
|
3735 |
array(),
|
3736 |
+
'20210218'
|
3737 |
);
|
3738 |
|
3739 |
if ( $this->options['force_custom_dashicons'] ) {
|
3744 |
'ame-force-dashicons',
|
3745 |
plugins_url('css/force-dashicons.css', $this->plugin_file),
|
3746 |
array(),
|
3747 |
+
'20210226'
|
3748 |
);
|
3749 |
}
|
3750 |
}
|
4711 |
//Skip blacklisted menus.
|
4712 |
//BUG: We shouldn't skip top level menus that have non-blacklisted submenu items.
|
4713 |
if ( isset($item['url'], $this->blacklist[$item['url']]) ) {
|
4714 |
+
$filter = $this->blacklist[$item['url']];
|
4715 |
+
if ( $filter === true ) {
|
4716 |
+
return;
|
4717 |
+
} else if ( ($filter === 'submenu') && ($parent !== null) ) {
|
4718 |
+
return;
|
4719 |
+
}
|
4720 |
}
|
4721 |
|
4722 |
$name = $this->sanitizeMenuTitle($item['menu_title']);
|
includes/menu.php
CHANGED
@@ -155,6 +155,11 @@ abstract class ameMenu {
|
|
155 |
$menu['component_visibility'] = $visibility;
|
156 |
}
|
157 |
|
|
|
|
|
|
|
|
|
|
|
158 |
//Copy the "modified icons" flag.
|
159 |
if ( isset($arr['has_modified_dashicons']) ) {
|
160 |
$menu['has_modified_dashicons'] = (bool)$arr['has_modified_dashicons'];
|
@@ -165,6 +170,11 @@ abstract class ameMenu {
|
|
165 |
$menu['prebuilt_virtual_caps'] = $arr['prebuilt_virtual_caps'];
|
166 |
}
|
167 |
|
|
|
|
|
|
|
|
|
|
|
168 |
foreach(self::$custom_loaders as $callback) {
|
169 |
$menu = call_user_func($callback, $menu, $arr);
|
170 |
}
|
155 |
$menu['component_visibility'] = $visibility;
|
156 |
}
|
157 |
|
158 |
+
//Copy heading settings.
|
159 |
+
if ( isset($arr['menu_headings']) ) {
|
160 |
+
$menu['menu_headings'] = $arr['menu_headings'];
|
161 |
+
}
|
162 |
+
|
163 |
//Copy the "modified icons" flag.
|
164 |
if ( isset($arr['has_modified_dashicons']) ) {
|
165 |
$menu['has_modified_dashicons'] = (bool)$arr['has_modified_dashicons'];
|
170 |
$menu['prebuilt_virtual_caps'] = $arr['prebuilt_virtual_caps'];
|
171 |
}
|
172 |
|
173 |
+
//Copy the modification timestamp.
|
174 |
+
if ( isset($arr['last_modified_on']) ) {
|
175 |
+
$menu['last_modified_on'] = substr(strval($arr['last_modified_on']), 0, 100);
|
176 |
+
}
|
177 |
+
|
178 |
foreach(self::$custom_loaders as $callback) {
|
179 |
$menu = call_user_func($callback, $menu, $arr);
|
180 |
}
|
js/common.d.ts
CHANGED
@@ -1,6 +1,25 @@
|
|
|
|
|
|
1 |
interface AmeDictionary<T> {
|
2 |
-
[mapKey: string]
|
3 |
}
|
4 |
|
5 |
// noinspection JSUnusedGlobalSymbols
|
6 |
-
type KeysMatchingType<T, V> = { [K in keyof T]: T[K] extends V ? K : never }[keyof T];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
///<reference path="knockout.d.ts"/>
|
2 |
+
|
3 |
interface AmeDictionary<T> {
|
4 |
+
[mapKey: string]: T;
|
5 |
}
|
6 |
|
7 |
// noinspection JSUnusedGlobalSymbols
|
8 |
+
type KeysMatchingType<T, V> = { [K in keyof T]: T[K] extends V ? K : never }[keyof T];
|
9 |
+
|
10 |
+
type AmeCssBorderStyle = 'none' | 'solid' | 'dashed' | 'dotted' | 'double' | 'groove' | 'ridge' | 'outset';
|
11 |
+
|
12 |
+
interface AmeCssBorderSettings {
|
13 |
+
style: AmeCssBorderStyle;
|
14 |
+
color: string;
|
15 |
+
width: number;
|
16 |
+
}
|
17 |
+
|
18 |
+
type AmeObservablePropertiesOf<T> = {
|
19 |
+
[P in keyof T]: KnockoutObservable<T[P]>;
|
20 |
+
}
|
21 |
+
|
22 |
+
type AmeRecursiveObservablePropertiesOf<T> = {
|
23 |
+
[P in keyof T]: T[P] extends object ? AmeRecursiveObservablePropertiesOf<T[P]> : KnockoutObservable<T[P]>;
|
24 |
+
}
|
25 |
+
|
js/menu-editor.js
CHANGED
@@ -238,6 +238,7 @@ function randomMenuId(prefix, size){
|
|
238 |
|
239 |
return prefix + suffix;
|
240 |
}
|
|
|
241 |
|
242 |
function outputWpMenu(menu){
|
243 |
var menuCopy = $.extend(true, {}, menu);
|
@@ -719,6 +720,7 @@ var knownMenuFields = {
|
|
719 |
}
|
720 |
}),
|
721 |
|
|
|
722 |
'required_capability_read_only' : $.extend({}, baseField, {
|
723 |
caption: 'Required capability',
|
724 |
defaultValue: 'none',
|
@@ -986,6 +988,8 @@ var knownMenuFields = {
|
|
986 |
})
|
987 |
};
|
988 |
|
|
|
|
|
989 |
AmeEditorApi.getItemDisplayUrl = function(menuItem) {
|
990 |
var url = getFieldValue(menuItem, 'file', '');
|
991 |
if (menuItem.template_id !== '') {
|
@@ -1330,6 +1334,7 @@ function updateParentAccessUi(containerNode) {
|
|
1330 |
*/
|
1331 |
function updateItemEditor(containerNode) {
|
1332 |
var menuItem = containerNode.data('menu_item');
|
|
|
1333 |
|
1334 |
//Apply flags based on the item's state.
|
1335 |
var flags = ['hidden', 'unused', 'custom'];
|
@@ -1337,6 +1342,11 @@ function updateItemEditor(containerNode) {
|
|
1337 |
setMenuFlag(containerNode, flags[i], getFieldValue(menuItem, flags[i], false));
|
1338 |
}
|
1339 |
|
|
|
|
|
|
|
|
|
|
|
1340 |
//Update the permissions checkbox & other actor-specific UI
|
1341 |
updateActorAccessUi(containerNode);
|
1342 |
|
@@ -1374,13 +1384,16 @@ function updateItemEditor(containerNode) {
|
|
1374 |
$.data(input.get(0), 'ame_last_display_value', displayValue);
|
1375 |
}
|
1376 |
|
|
|
1377 |
if (typeof (knownMenuFields[fieldName].visible) === 'function') {
|
1378 |
-
|
1379 |
-
|
1380 |
-
|
1381 |
-
|
1382 |
-
|
1383 |
-
|
|
|
|
|
1384 |
}
|
1385 |
});
|
1386 |
}
|
@@ -2056,8 +2069,9 @@ function ameOnDomReady() {
|
|
2056 |
$('.ws_hide_if_pro').hide();
|
2057 |
}
|
2058 |
|
2059 |
-
//Let other plugins filter knownMenuFields.
|
2060 |
$(document).trigger('filterMenuFields.adminMenuEditor', [knownMenuFields, baseField]);
|
|
|
2061 |
|
2062 |
//Make the top menu box sortable (we only need to do this once)
|
2063 |
var mainMenuBox = $('#ws_menu_box');
|
@@ -2327,6 +2341,21 @@ function ameOnDomReady() {
|
|
2327 |
updateParentAccessUi(containerNode);
|
2328 |
}
|
2329 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2330 |
/**
|
2331 |
* Confirm with the user that they want to hide "Dashboard -> Home".
|
2332 |
*
|
@@ -3487,6 +3516,7 @@ function ameOnDomReady() {
|
|
3487 |
function getSelectedMenu() {
|
3488 |
return $('#ws_menu_box').find('.ws_active');
|
3489 |
}
|
|
|
3490 |
|
3491 |
//Show/Hide menu
|
3492 |
$('#ws_hide_menu').on('click', function (event) {
|
238 |
|
239 |
return prefix + suffix;
|
240 |
}
|
241 |
+
AmeEditorApi.randomMenuId = randomMenuId;
|
242 |
|
243 |
function outputWpMenu(menu){
|
244 |
var menuCopy = $.extend(true, {}, menu);
|
720 |
}
|
721 |
}),
|
722 |
|
723 |
+
//TODO: Never save this field. It just wastes database space.
|
724 |
'required_capability_read_only' : $.extend({}, baseField, {
|
725 |
caption: 'Required capability',
|
726 |
defaultValue: 'none',
|
988 |
})
|
989 |
};
|
990 |
|
991 |
+
var visibleMenuFieldsByType = {};
|
992 |
+
|
993 |
AmeEditorApi.getItemDisplayUrl = function(menuItem) {
|
994 |
var url = getFieldValue(menuItem, 'file', '');
|
995 |
if (menuItem.template_id !== '') {
|
1334 |
*/
|
1335 |
function updateItemEditor(containerNode) {
|
1336 |
var menuItem = containerNode.data('menu_item');
|
1337 |
+
var itemSubType = (menuItem.hasOwnProperty('sub_type') ? menuItem['sub_type'] : '');
|
1338 |
|
1339 |
//Apply flags based on the item's state.
|
1340 |
var flags = ['hidden', 'unused', 'custom'];
|
1342 |
setMenuFlag(containerNode, flags[i], getFieldValue(menuItem, flags[i], false));
|
1343 |
}
|
1344 |
|
1345 |
+
if (itemSubType) {
|
1346 |
+
var typeTitle = itemSubType.charAt(0).toUpperCase() + itemSubType.slice(1);
|
1347 |
+
setMenuFlag(containerNode, 'subtype_' + itemSubType, true, typeTitle);
|
1348 |
+
}
|
1349 |
+
|
1350 |
//Update the permissions checkbox & other actor-specific UI
|
1351 |
updateActorAccessUi(containerNode);
|
1352 |
|
1384 |
$.data(input.get(0), 'ame_last_display_value', displayValue);
|
1385 |
}
|
1386 |
|
1387 |
+
var isFieldVisible = _.get(visibleMenuFieldsByType, [itemSubType, fieldName], true);
|
1388 |
if (typeof (knownMenuFields[fieldName].visible) === 'function') {
|
1389 |
+
isFieldVisible = isFieldVisible && knownMenuFields[fieldName].visible(menuItem, fieldName);
|
1390 |
+
} else {
|
1391 |
+
isFieldVisible = isFieldVisible && knownMenuFields[fieldName].visible;
|
1392 |
+
}
|
1393 |
+
if (isFieldVisible) {
|
1394 |
+
field.css('display', '');
|
1395 |
+
} else {
|
1396 |
+
field.css('display', 'none');
|
1397 |
}
|
1398 |
});
|
1399 |
}
|
2069 |
$('.ws_hide_if_pro').hide();
|
2070 |
}
|
2071 |
|
2072 |
+
//Let other plugins filter knownMenuFields and menu fields by type.
|
2073 |
$(document).trigger('filterMenuFields.adminMenuEditor', [knownMenuFields, baseField]);
|
2074 |
+
$(document).trigger('filterVisibleMenuFields.adminMenuEditor', [visibleMenuFieldsByType]);
|
2075 |
|
2076 |
//Make the top menu box sortable (we only need to do this once)
|
2077 |
var mainMenuBox = $('#ws_menu_box');
|
2341 |
updateParentAccessUi(containerNode);
|
2342 |
}
|
2343 |
|
2344 |
+
/**
|
2345 |
+
* Insert a new top level menu after the selected menu or at the end of the list.
|
2346 |
+
*
|
2347 |
+
* @param {Object} menu
|
2348 |
+
*/
|
2349 |
+
function insertMenu(menu) {
|
2350 |
+
const selection = (typeof getSelectedMenu !== 'undefined') ? getSelectedMenu() : null;
|
2351 |
+
if (selection && (selection.length > 0) ) {
|
2352 |
+
outputTopMenu(menu, selection);
|
2353 |
+
} else {
|
2354 |
+
outputTopMenu(menu);
|
2355 |
+
}
|
2356 |
+
}
|
2357 |
+
AmeEditorApi.insertMenu = insertMenu;
|
2358 |
+
|
2359 |
/**
|
2360 |
* Confirm with the user that they want to hide "Dashboard -> Home".
|
2361 |
*
|
3516 |
function getSelectedMenu() {
|
3517 |
return $('#ws_menu_box').find('.ws_active');
|
3518 |
}
|
3519 |
+
AmeEditorApi.getSelectedMenu = getSelectedMenu;
|
3520 |
|
3521 |
//Show/Hide menu
|
3522 |
$('#ws_hide_menu').on('click', function (event) {
|
menu-editor.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
Plugin Name: Admin Menu Editor
|
4 |
Plugin URI: http://w-shadow.com/blog/2008/12/20/admin-menu-editor-for-wordpress/
|
5 |
Description: Lets you directly edit the WordPress admin menu. You can re-order, hide or rename existing menus, add custom menus and more.
|
6 |
-
Version: 1.9.
|
7 |
Author: Janis Elsts
|
8 |
Author URI: http://w-shadow.com/blog/
|
9 |
*/
|
3 |
Plugin Name: Admin Menu Editor
|
4 |
Plugin URI: http://w-shadow.com/blog/2008/12/20/admin-menu-editor-for-wordpress/
|
5 |
Description: Lets you directly edit the WordPress admin menu. You can re-order, hide or rename existing menus, add custom menus and more.
|
6 |
+
Version: 1.9.9
|
7 |
Author: Janis Elsts
|
8 |
Author URI: http://w-shadow.com/blog/
|
9 |
*/
|
modules/actor-selector/actor-selector.js
CHANGED
@@ -12,6 +12,7 @@ var AmeActorSelector = /** @class */ (function () {
|
|
12 |
this.isProVersion = false;
|
13 |
this.allOptionEnabled = true;
|
14 |
this.cachedVisibleActors = null;
|
|
|
15 |
this.actorManager = actorManager;
|
16 |
if (typeof isProVersion !== 'undefined') {
|
17 |
this.isProVersion = isProVersion;
|
@@ -23,17 +24,16 @@ var AmeActorSelector = /** @class */ (function () {
|
|
23 |
//Discard any users that don't exist / were not loaded by the actor manager.
|
24 |
var _ = AmeActorSelector._;
|
25 |
this.visibleUsers = _.intersection(this.visibleUsers, _.keys(actorManager.getUsers()));
|
26 |
-
|
27 |
-
|
28 |
-
}
|
29 |
-
else {
|
30 |
-
jQuery(function () {
|
31 |
-
_this.initDOM();
|
32 |
-
});
|
33 |
-
}
|
34 |
}
|
35 |
AmeActorSelector.prototype.initDOM = function () {
|
36 |
var _this = this;
|
|
|
|
|
|
|
|
|
37 |
this.selectorNode = jQuery('#ws_actor_selector');
|
38 |
this.populateActorSelector();
|
39 |
//Don't show the selector in the free version.
|
@@ -95,6 +95,10 @@ var AmeActorSelector = /** @class */ (function () {
|
|
95 |
this.subscribers.push(callback);
|
96 |
};
|
97 |
AmeActorSelector.prototype.highlightSelectedActor = function () {
|
|
|
|
|
|
|
|
|
98 |
//Deselect the previous item.
|
99 |
this.selectorNode.find('.current').removeClass('current');
|
100 |
//Select the new one or "All".
|
12 |
this.isProVersion = false;
|
13 |
this.allOptionEnabled = true;
|
14 |
this.cachedVisibleActors = null;
|
15 |
+
this.isDomInitStarted = false;
|
16 |
this.actorManager = actorManager;
|
17 |
if (typeof isProVersion !== 'undefined') {
|
18 |
this.isProVersion = isProVersion;
|
24 |
//Discard any users that don't exist / were not loaded by the actor manager.
|
25 |
var _ = AmeActorSelector._;
|
26 |
this.visibleUsers = _.intersection(this.visibleUsers, _.keys(actorManager.getUsers()));
|
27 |
+
jQuery(function () {
|
28 |
+
_this.initDOM();
|
29 |
+
});
|
|
|
|
|
|
|
|
|
|
|
30 |
}
|
31 |
AmeActorSelector.prototype.initDOM = function () {
|
32 |
var _this = this;
|
33 |
+
if (this.isDomInitStarted) {
|
34 |
+
return;
|
35 |
+
}
|
36 |
+
this.isDomInitStarted = true;
|
37 |
this.selectorNode = jQuery('#ws_actor_selector');
|
38 |
this.populateActorSelector();
|
39 |
//Don't show the selector in the free version.
|
95 |
this.subscribers.push(callback);
|
96 |
};
|
97 |
AmeActorSelector.prototype.highlightSelectedActor = function () {
|
98 |
+
//Set up and populate the selector element if we haven't done that yet.
|
99 |
+
if (!this.isDomInitStarted) {
|
100 |
+
this.initDOM();
|
101 |
+
}
|
102 |
//Deselect the previous item.
|
103 |
this.selectorNode.find('.current').removeClass('current');
|
104 |
//Select the new one or "All".
|
modules/actor-selector/actor-selector.ts
CHANGED
@@ -17,6 +17,7 @@ declare var wsAmeActorSelectorData: {
|
|
17 |
interface SelectedActorChangedCallback {
|
18 |
(newSelectedActor: string, oldSelectedActor: string): void
|
19 |
}
|
|
|
20 |
interface SaveVisibleActorAjaxParams {
|
21 |
ajaxUpdateAction: string,
|
22 |
ajaxUpdateNonce: string,
|
@@ -40,6 +41,7 @@ class AmeActorSelector {
|
|
40 |
private cachedVisibleActors: IAmeActor[] = null;
|
41 |
|
42 |
private selectorNode;
|
|
|
43 |
|
44 |
constructor(
|
45 |
actorManager: AmeActorManagerInterface,
|
@@ -61,16 +63,17 @@ class AmeActorSelector {
|
|
61 |
const _ = AmeActorSelector._;
|
62 |
this.visibleUsers = _.intersection(this.visibleUsers, _.keys(actorManager.getUsers()));
|
63 |
|
64 |
-
|
65 |
this.initDOM();
|
66 |
-
}
|
67 |
-
jQuery(() => {
|
68 |
-
this.initDOM();
|
69 |
-
});
|
70 |
-
}
|
71 |
}
|
72 |
|
73 |
private initDOM() {
|
|
|
|
|
|
|
|
|
|
|
74 |
this.selectorNode = jQuery('#ws_actor_selector');
|
75 |
this.populateActorSelector();
|
76 |
|
@@ -143,6 +146,11 @@ class AmeActorSelector {
|
|
143 |
}
|
144 |
|
145 |
private highlightSelectedActor() {
|
|
|
|
|
|
|
|
|
|
|
146 |
//Deselect the previous item.
|
147 |
this.selectorNode.find('.current').removeClass('current');
|
148 |
|
@@ -257,9 +265,9 @@ class AmeActorSelector {
|
|
257 |
jQuery.post(
|
258 |
this.ajaxParams.adminAjaxUrl,
|
259 |
{
|
260 |
-
'action'
|
261 |
-
'_ajax_nonce'
|
262 |
-
'visible_users'
|
263 |
}
|
264 |
);
|
265 |
}
|
17 |
interface SelectedActorChangedCallback {
|
18 |
(newSelectedActor: string, oldSelectedActor: string): void
|
19 |
}
|
20 |
+
|
21 |
interface SaveVisibleActorAjaxParams {
|
22 |
ajaxUpdateAction: string,
|
23 |
ajaxUpdateNonce: string,
|
41 |
private cachedVisibleActors: IAmeActor[] = null;
|
42 |
|
43 |
private selectorNode;
|
44 |
+
private isDomInitStarted: boolean = false;
|
45 |
|
46 |
constructor(
|
47 |
actorManager: AmeActorManagerInterface,
|
63 |
const _ = AmeActorSelector._;
|
64 |
this.visibleUsers = _.intersection(this.visibleUsers, _.keys(actorManager.getUsers()));
|
65 |
|
66 |
+
jQuery(() => {
|
67 |
this.initDOM();
|
68 |
+
});
|
|
|
|
|
|
|
|
|
69 |
}
|
70 |
|
71 |
private initDOM() {
|
72 |
+
if (this.isDomInitStarted) {
|
73 |
+
return;
|
74 |
+
}
|
75 |
+
this.isDomInitStarted = true;
|
76 |
+
|
77 |
this.selectorNode = jQuery('#ws_actor_selector');
|
78 |
this.populateActorSelector();
|
79 |
|
146 |
}
|
147 |
|
148 |
private highlightSelectedActor() {
|
149 |
+
//Set up and populate the selector element if we haven't done that yet.
|
150 |
+
if (!this.isDomInitStarted) {
|
151 |
+
this.initDOM();
|
152 |
+
}
|
153 |
+
|
154 |
//Deselect the previous item.
|
155 |
this.selectorNode.find('.current').removeClass('current');
|
156 |
|
265 |
jQuery.post(
|
266 |
this.ajaxParams.adminAjaxUrl,
|
267 |
{
|
268 |
+
'action': this.ajaxParams.ajaxUpdateAction,
|
269 |
+
'_ajax_nonce': this.ajaxParams.ajaxUpdateNonce,
|
270 |
+
'visible_users': jQuery.toJSON(this.visibleUsers)
|
271 |
}
|
272 |
);
|
273 |
}
|
modules/highlight-new-menus/wsNewMenuHighlighter.php
CHANGED
@@ -253,7 +253,11 @@ class wsNewMenuHighlighter {
|
|
253 |
$this->flagAsSeen(array_keys($urls));
|
254 |
}
|
255 |
|
256 |
-
|
|
|
|
|
|
|
|
|
257 |
}
|
258 |
|
259 |
private function flagAsSeen($menuUrls) {
|
253 |
$this->flagAsSeen(array_keys($urls));
|
254 |
}
|
255 |
|
256 |
+
if ( version_compare(phpversion(), '7.3', '>=') ) {
|
257 |
+
setcookie(self::COOKIE_NAME, '', array('expires' => time() - (24 * 3600), 'samesite' => 'Lax'));
|
258 |
+
} else {
|
259 |
+
setcookie(self::COOKIE_NAME, '', time() - (24 * 3600), '', '', is_ssl());
|
260 |
+
}
|
261 |
}
|
262 |
|
263 |
private function flagAsSeen($menuUrls) {
|
readme.txt
CHANGED
@@ -3,8 +3,8 @@ Contributors: whiteshadow
|
|
3 |
Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=A6P9S6CE3SRSW
|
4 |
Tags: admin, dashboard, menu, security, wpmu
|
5 |
Requires at least: 4.1
|
6 |
-
Tested up to: 5.
|
7 |
-
Stable tag: 1.9.
|
8 |
|
9 |
Lets you edit the WordPress admin menu. You can re-order, hide or rename menus, add custom menus and more.
|
10 |
|
@@ -63,6 +63,15 @@ Plugins installed in the `mu-plugins` directory are treated as "always on", so y
|
|
63 |
|
64 |
== Changelog ==
|
65 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
66 |
= 1.9.8 =
|
67 |
* Added a "bbPress override" option that prevents bbPress from resetting all changes that are made to dynamic bbPress roles. Enabling this option allows you to edit bbPress roles with any role editing plugin.
|
68 |
* Fixed a conflict that caused some hidden Simple Calendars menu items to show up when Admin Menu Editor was activated.
|
3 |
Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=A6P9S6CE3SRSW
|
4 |
Tags: admin, dashboard, menu, security, wpmu
|
5 |
Requires at least: 4.1
|
6 |
+
Tested up to: 5.7
|
7 |
+
Stable tag: 1.9.9
|
8 |
|
9 |
Lets you edit the WordPress admin menu. You can re-order, hide or rename menus, add custom menus and more.
|
10 |
|
63 |
|
64 |
== Changelog ==
|
65 |
|
66 |
+
= 1.9.9 =
|
67 |
+
* Fixed a conflict with the "PRO Theme" plugin where "PRO Theme" would expand the wrong top level admin menu if the current submenu item had been moved from one parent menu to another.
|
68 |
+
* Fixed PHP notice "Undefined offset: 0 in /wp-includes/capabilities.php on line 70" (various line numbers).
|
69 |
+
* Fixed a conflict with "Stripe For WooCommerce" 3.2.12 where the "Stripe Gateway" menu had a wrong URL because a hidden menu item was not removed.
|
70 |
+
* Fixed a browser warning about the "ws_nmh_pending_seen_urls" cookie not using the SameSite attribute.
|
71 |
+
* Fixed a conflict with WooFunnels where changing the WooFunnels menu icon would result in both of the icons - the original one and the new one - showing up at the same time. The new icon was also misaligned.
|
72 |
+
* Minor visual changes.
|
73 |
+
* Tested with WordPress 5.7 and 5.8-alpha.
|
74 |
+
|
75 |
= 1.9.8 =
|
76 |
* Added a "bbPress override" option that prevents bbPress from resetting all changes that are made to dynamic bbPress roles. Enabling this option allows you to edit bbPress roles with any role editing plugin.
|
77 |
* Fixed a conflict that caused some hidden Simple Calendars menu items to show up when Admin Menu Editor was activated.
|