menu-item-manager.class.php 50 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078
  1. <?php
  2. if ( ! defined( 'ABSPATH' ) ) {
  3. exit; // disable direct access
  4. }
  5. if ( ! class_exists('Mega_Menu_Menu_Item_Manager') ) :
  6. /**
  7. *
  8. * @since 1.4
  9. */
  10. class Mega_Menu_Menu_Item_Manager {
  11. var $menu_id = 0;
  12. var $menu_item_id = 0;
  13. var $menu_item_depth = 0;
  14. var $menu_item_meta = array();
  15. /**
  16. * Constructor
  17. *
  18. * @since 1.4
  19. */
  20. public function __construct() {
  21. add_action( 'wp_ajax_mm_get_lightbox_html', array( $this, 'ajax_get_lightbox_html' ) );
  22. add_action( 'wp_ajax_mm_get_empty_grid_column', array( $this, 'ajax_get_empty_grid_column' ) );
  23. add_action( 'wp_ajax_mm_get_empty_grid_row', array( $this, 'ajax_get_empty_grid_row' ) );
  24. add_action( 'wp_ajax_mm_save_menu_item_settings', array( $this, 'ajax_save_menu_item_settings') );
  25. add_filter( 'megamenu_tabs', array( $this, 'add_mega_menu_tab'), 10, 5 );
  26. add_filter( 'megamenu_tabs', array( $this, 'add_general_settings_tab'), 10, 5 );
  27. add_filter( 'megamenu_tabs', array( $this, 'add_icon_tab'), 10, 5 );
  28. }
  29. /**
  30. * Set up the class
  31. *
  32. * @since 1.4
  33. */
  34. private function init() {
  35. if ( isset( $_POST['menu_item_id'] ) ) {
  36. $this->menu_item_id = absint( $_POST['menu_item_id'] );
  37. $saved_settings = array_filter( (array) get_post_meta( $this->menu_item_id, '_megamenu', true ) );
  38. $this->menu_item_meta = array_merge( Mega_Menu_Nav_Menus::get_menu_item_defaults(), $saved_settings );
  39. }
  40. if ( isset( $_POST['menu_item_depth'] ) ) {
  41. $this->menu_item_depth = absint( $_POST['menu_item_depth'] );
  42. }
  43. if ( isset( $_POST['menu_id'] ) ) {
  44. $this->menu_id = absint( $_POST['menu_id'] );
  45. }
  46. }
  47. /**
  48. * Save custom menu item fields.
  49. *
  50. * @since 1.4
  51. */
  52. public static function ajax_save_menu_item_settings() {
  53. check_ajax_referer( 'megamenu_edit' );
  54. $submitted_settings = isset( $_POST['settings'] ) ? $_POST['settings'] : array();
  55. $menu_item_id = absint( $_POST['menu_item_id'] );
  56. if ( $menu_item_id > 0 && is_array( $submitted_settings ) ) {
  57. // only check the checkbox values if the general settings form was submitted
  58. if ( isset( $_POST['tab'] ) && $_POST['tab'] == 'general_settings' ) {
  59. // Hide Text checkbox is unchecked
  60. if ( ! isset( $submitted_settings['hide_text'] ) ) {
  61. $submitted_settings['hide_text'] = 'false';
  62. }
  63. // Disable Link checkbox is unchecked
  64. if ( ! isset( $submitted_settings['disable_link'] ) ) {
  65. $submitted_settings['disable_link'] = 'false';
  66. }
  67. // Disable arrow checkbox is unchecked
  68. if ( ! isset ( $submitted_settings['hide_arrow'] ) ) {
  69. $submitted_settings['hide_arrow'] = 'false';
  70. }
  71. // Hide on mobile checkbox is unchecked
  72. if ( ! isset ( $submitted_settings['hide_on_mobile'] ) ) {
  73. $submitted_settings['hide_on_mobile'] = 'false';
  74. }
  75. // Hide on mobile checkbox is unchecked
  76. if ( ! isset ( $submitted_settings['hide_sub_menu_on_mobile'] ) ) {
  77. $submitted_settings['hide_sub_menu_on_mobile'] = 'false';
  78. }
  79. // Hide on desktop checkbox is unchecked
  80. if ( ! isset ( $submitted_settings['hide_on_desktop'] ) ) {
  81. $submitted_settings['hide_on_desktop'] = 'false';
  82. }
  83. }
  84. $submitted_settings = apply_filters( "megamenu_menu_item_submitted_settings", $submitted_settings, $menu_item_id );
  85. $existing_settings = get_post_meta( $menu_item_id, '_megamenu', true);
  86. if ( is_array( $existing_settings ) ) {
  87. $submitted_settings = array_merge( $existing_settings, $submitted_settings );
  88. }
  89. update_post_meta( $menu_item_id, '_megamenu', $submitted_settings );
  90. do_action( "megamenu_save_menu_item_settings", $menu_item_id );
  91. }
  92. if ( isset( $_POST['clear_cache'] ) ) {
  93. do_action("megamenu_delete_cache");
  94. }
  95. if ( ob_get_contents() ) ob_clean(); // remove any warnings or output from other plugins which may corrupt the response
  96. wp_send_json_success();
  97. }
  98. /**
  99. * Return the HTML to display in the Lightbox
  100. *
  101. * @since 1.4
  102. * @return string
  103. */
  104. public function ajax_get_lightbox_html() {
  105. check_ajax_referer( 'megamenu_edit' );
  106. $this->init();
  107. $tabs = array();
  108. $tabs = apply_filters( "megamenu_tabs", $tabs, $this->menu_item_id, $this->menu_id, $this->menu_item_depth, $this->menu_item_meta );
  109. if ( ob_get_contents() ) ob_clean(); // remove any warnings or output from other plugins which may corrupt the response
  110. wp_send_json_success( json_encode( $tabs ) );
  111. }
  112. /**
  113. * Return the HTML to display in the 'Mega Menu' tab
  114. *
  115. * @since 1.7
  116. * @return array
  117. */
  118. public function add_mega_menu_tab( $tabs, $menu_item_id, $menu_id, $menu_item_depth, $menu_item_meta ) {
  119. if ( $menu_item_depth > 0 ) {
  120. $tabs['mega_menu'] = array(
  121. 'title' => __('Sub Menu', 'megamenu'),
  122. 'content' => '<em>' . __( "Mega Menus can only be created on top level menu items.", "megamenu" ) . '</em>'
  123. );
  124. return $tabs;
  125. }
  126. $submenu_options = apply_filters("megamenu_submenu_options", array(
  127. 'flyout' => __("Flyout Menu", "megamenu"),
  128. 'grid' => __("Mega Menu - Grid Layout", "megamenu"),
  129. 'megamenu' => __("Mega Menu - Standard Layout", "megamenu")
  130. ), $menu_item_meta);
  131. $return = "<label for='mm_enable_mega_menu'>" . __("Sub menu display mode", "megamenu") . "</label>";
  132. $return .= "<select id='mm_enable_mega_menu' name='settings[type]'>";
  133. foreach ( $submenu_options as $type => $label ) {
  134. $return .= "<option id='{$type}' value='{$type}' " . selected( $menu_item_meta['type'], $type, false ) . ">{$label}</option>";
  135. }
  136. $return .= "</select>";
  137. $widget_manager = new Mega_Menu_Widget_Manager();
  138. $all_widgets = $widget_manager->get_available_widgets();
  139. $return .= "<div class='mm_panel_options'>";
  140. $return .= " <select id='mm_number_of_columns' name='settings[panel_columns]'>";
  141. $return .= " <option value='1' " . selected( $menu_item_meta['panel_columns'], 1, false ) . ">1 " . __("column", "megamenu") . "</option>";
  142. $return .= " <option value='2' " . selected( $menu_item_meta['panel_columns'], 2, false ) . ">2 " . __("columns", "megamenu") . "</option>";
  143. $return .= " <option value='3' " . selected( $menu_item_meta['panel_columns'], 3, false ) . ">3 " . __("columns", "megamenu") . "</option>";
  144. $return .= " <option value='4' " . selected( $menu_item_meta['panel_columns'], 4, false ) . ">4 " . __("columns", "megamenu") . "</option>";
  145. $return .= " <option value='5' " . selected( $menu_item_meta['panel_columns'], 5, false ) . ">5 " . __("columns", "megamenu") . "</option>";
  146. $return .= " <option value='6' " . selected( $menu_item_meta['panel_columns'], 6, false ) . ">6 " . __("columns", "megamenu") . "</option>";
  147. $return .= " <option value='7' " . selected( $menu_item_meta['panel_columns'], 7, false ) . ">7 " . __("columns", "megamenu") . "</option>";
  148. $return .= " <option value='8' " . selected( $menu_item_meta['panel_columns'], 8, false ) . ">8 " . __("columns", "megamenu") . "</option>";
  149. $return .= " <option value='9' " . selected( $menu_item_meta['panel_columns'], 9, false ) . ">9 " . __("columns", "megamenu") . "</option>";
  150. $return .= " </select>";
  151. $return .= " <select id='mm_widget_selector'>";
  152. $return .= " <option value='disabled'>" . __("Select a Widget to add to the panel", "megamenu") . "</option>";
  153. foreach ( $all_widgets as $widget ) {
  154. $return .= " <option value='" . $widget['value'] . "'>" . $widget['text'] . "</option>";
  155. }
  156. $return .= " </select>";
  157. $return .= "</div>";
  158. $return .= $this->get_megamenu_html( $menu_item_id, $menu_id, $menu_item_depth, $menu_item_meta );
  159. $return .= $this->get_megamenu_grid_html( $menu_item_id, $menu_id, $menu_item_depth, $menu_item_meta );
  160. $tabs['mega_menu'] = array(
  161. 'title' => __('Mega Menu', 'megamenu'),
  162. 'content' => $return
  163. );
  164. return $tabs;
  165. }
  166. /**
  167. * Return the HTML for the grid layout
  168. *
  169. * @since 2.4
  170. * @return string
  171. */
  172. public function get_megamenu_grid_html( $menu_item_id, $menu_id, $menu_item_depth, $menu_item_meta ) {
  173. $css_version = get_transient("megamenu_css_version");
  174. $return = "<div id='megamenu-grid'>";
  175. if ( $css_version && version_compare( $css_version, '2.3.9', '<=' ) ) {
  176. $link = "<a href='" . esc_attr( admin_url( 'admin.php?page=maxmegamenu_tools' ) ) . "'>" . __("Mega Menu") . " > " . __("Tools") . "</a>";
  177. $return .= "<div class='notice notice-success'><p>";
  178. $return .= sprintf( __("Your menu CSS needs to be updated first. Please go to %s and Clear the CSS Cache (you will only need to do this once).", "megamenu") , $link);
  179. $return .= "</p></div>";
  180. $return .= "</div>";
  181. return $return;
  182. }
  183. $widget_manager = new Mega_Menu_Widget_Manager();
  184. $grid = $widget_manager->get_grid_widgets_and_menu_items_for_menu_id( $menu_item_id, $menu_id );
  185. if ( count ( $grid ) ) {
  186. foreach ( $grid as $row => $row_data ) {
  187. $column_html = "";
  188. if ( isset( $row_data['columns'] ) && count( $row_data['columns'] ) ) {
  189. foreach ( $row_data['columns'] as $col => $col_data ) {
  190. $column_html .= $this->get_grid_column( $row_data, $col_data );
  191. }
  192. }
  193. $return .= $this->get_grid_row( $row_data, $column_html );
  194. }
  195. }
  196. $return .= " <button class='button button-primary mega-add-row'><span class='dashicons dashicons-plus'></span>" . __("Row", "megamenu") . "</button>";
  197. $return .= "</div>";
  198. return $return;
  199. }
  200. /**
  201. * Return the HTML to display in the Lightbox
  202. *
  203. * @since 2.4
  204. * @return string
  205. */
  206. public function ajax_get_empty_grid_column() {
  207. check_ajax_referer( 'megamenu_edit' );
  208. $return = $this->get_grid_column();
  209. if ( ob_get_contents() ) ob_clean(); // remove any warnings or output from other plugins which may corrupt the response
  210. wp_send_json_success( $return );
  211. }
  212. /**
  213. * Return the HTML to display in the Lightbox
  214. *
  215. * @since 2.4
  216. * @return string
  217. */
  218. public function ajax_get_empty_grid_row() {
  219. check_ajax_referer( 'megamenu_edit' );
  220. $column_html = $this->get_grid_column();
  221. $return = $this->get_grid_row( false, $column_html );
  222. if ( ob_get_contents() ) ob_clean(); // remove any warnings or output from other plugins which may corrupt the response
  223. wp_send_json_success( $return );
  224. }
  225. /**
  226. * Return the HTML for a single row
  227. *
  228. * @param array $row_data
  229. * @param string $column_html
  230. * @since 2.4
  231. * @return string
  232. */
  233. public function get_grid_row( $row_data = false, $column_html = false ) {
  234. $hide_on_desktop_checked = "false";
  235. $hide_on_desktop = 'mega-enabled';
  236. if ( isset( $row_data['meta']['hide-on-desktop'] ) && $row_data['meta']['hide-on-desktop'] == 'true' ) {
  237. $hide_on_desktop = 'mega-disabled';
  238. $hide_on_desktop_checked = "true";
  239. }
  240. $hide_on_mobile_checked = "false";
  241. $hide_on_mobile = 'mega-enabled';
  242. if ( isset( $row_data['meta']['hide-on-mobile'] ) && $row_data['meta']['hide-on-mobile'] == 'true' ) {
  243. $hide_on_mobile = 'mega-disabled';
  244. $hide_on_mobile_checked = "true";
  245. }
  246. $row_columns = 12;
  247. if ( isset( $row_data['meta']['columns'] ) ) {
  248. $row_columns = intval( $row_data['meta']['columns'] );
  249. }
  250. $desktop_tooltip_visible = __("Row", "megamenu") . ": " . __("Visible on desktop", "megamenu");
  251. $desktop_tooltip_hidden = __("Row", "megamenu") . ": " . __("Hidden on desktop", "megamenu");
  252. $mobile_tooltip_visible = __("Row", "megamenu") . ": " . __("Visible on mobile", "megamenu");
  253. $mobile_tooltip_hidden = __("Row", "megamenu") . ": " . __("Hidden on mobile", "megamenu");
  254. $row_class = isset( $row_data['meta']['class'] ) ? $row_data['meta']['class'] : "";
  255. $return = "<div class='mega-row' data-available-cols='{$row_columns}'>";
  256. $return .= " <div class='mega-row-header'>";
  257. $return .= " <div class='mega-row-actions'>";
  258. $return .= " <span class='dashicons dashicons-sort'></span>";
  259. $return .= " <span class='dashicons dashicons-admin-generic'></span>";
  260. $return .= " <span class='mega-tooltip {$hide_on_desktop}' data-tooltip-enabled='{$desktop_tooltip_visible}' data-tooltip-disabled='{$desktop_tooltip_hidden}'><span class='dashicons dashicons-desktop'></span></span>";
  261. $return .= " <span class='mega-tooltip {$hide_on_mobile}' data-tooltip-enabled='{$mobile_tooltip_visible}' data-tooltip-disabled='{$mobile_tooltip_hidden}'><span class='dashicons dashicons-smartphone'></span></span>";
  262. $return .= " <span class='dashicons dashicons-trash'></span>";
  263. $return .= " </div>";
  264. $return .= " <div class='mega-row-settings'>";
  265. $return .= " <input name='mega-hide-on-mobile' type='hidden' value='{$hide_on_mobile_checked}' />";
  266. $return .= " <input name='mega-hide-on-desktop' type='hidden' value='{$hide_on_desktop_checked}'/>";
  267. $return .= " <div class='mega-settings-row'>";
  268. $return .= " <label>" . __('Row class', 'megamenu') . "</label>";
  269. $return .= " <input class='mega-row-class' type='text' value='{$row_class}' />";
  270. $return .= " </div>";
  271. $return .= " <div class='mega-settings-row'>";
  272. $return .= " <label>" . __('Row columns', 'megamenu') . "</label>";
  273. $return .= " <select class='mega-row-columns'>";
  274. $return .= " <option value='1' " . selected( $row_columns, 1, false ) . ">1 " . __("column", "megamenu") . "</option>";
  275. $return .= " <option value='2' " . selected( $row_columns, 2, false ) . ">2 " . __("columns", "megamenu") . "</option>";
  276. $return .= " <option value='3' " . selected( $row_columns, 3, false ) . ">3 " . __("columns", "megamenu") . "</option>";
  277. $return .= " <option value='4' " . selected( $row_columns, 4, false ) . ">4 " . __("columns", "megamenu") . "</option>";
  278. $return .= " <option value='5' " . selected( $row_columns, 5, false ) . ">5 " . __("columns", "megamenu") . "</option>";
  279. $return .= " <option value='6' " . selected( $row_columns, 6, false ) . ">6 " . __("columns", "megamenu") . "</option>";
  280. $return .= " <option value='7' " . selected( $row_columns, 7, false ) . ">7 " . __("columns", "megamenu") . "</option>";
  281. $return .= " <option value='8' " . selected( $row_columns, 8, false ) . ">8 " . __("columns", "megamenu") . "</option>";
  282. $return .= " <option value='9' " . selected( $row_columns, 9, false ) . ">9 " . __("columns", "megamenu") . "</option>";
  283. $return .= " <option value='10' " . selected( $row_columns, 10, false ) . ">10 " . __("columns", "megamenu") . "</option>";
  284. $return .= " <option value='11' " . selected( $row_columns, 11, false ) . ">11 " . __("columns", "megamenu") . "</option>";
  285. $return .= " <option value='12' " . selected( $row_columns, 12, false ) . ">12 " . __("columns", "megamenu") . "</option>";
  286. $return .= " </select>";
  287. $return .= " </div>";
  288. $return .= " <button class='button button-primary mega-save-row-settings' type='submit'>" . __('Save', 'megamenu') . "</button>";
  289. $return .= " </div>";
  290. $return .= " <button class='button button-primary mega-add-column'><span class='dashicons dashicons-plus'></span>" . __("Column", "megamenu") . "</button>";
  291. $return .= " </div>";
  292. $return .= " <div class='error notice is-dismissible mega-too-many-cols'>";
  293. $return .= " <p>" . __( 'You should rearrange the content of this row so that all columns fit onto a single line.', 'megamenu' ) . "</p>";
  294. $return .= " </div>";
  295. $return .= " <div class='error notice is-dismissible mega-row-is-full'>";
  296. $return .= " <p>" . __( 'There is not enough space on this row to add a new column.', 'megamenu' ) . "</p>";
  297. $return .= " </div>";
  298. $return .= $column_html;
  299. $return .= "</div>";
  300. return $return;
  301. }
  302. /**
  303. * Return the HTML for an individual grid column
  304. *
  305. * @param array $col_data
  306. * @since 2.4
  307. * @return string
  308. */
  309. public function get_grid_column( $row_data = false, $col_data = false ) {
  310. $col_span = 3;
  311. $row_columns = 12;
  312. if ( isset( $row_data['meta']['columns'] ) ) {
  313. $row_columns = intval( $row_data['meta']['columns'] );
  314. }
  315. if ( isset( $col_data['meta']['span'] ) ) {
  316. $col_span = $col_data['meta']['span'];
  317. }
  318. $hide_on_desktop_checked = "false";
  319. $hide_on_desktop = 'mega-enabled';
  320. if ( isset( $col_data['meta']['hide-on-desktop'] ) && $col_data['meta']['hide-on-desktop'] == 'true' ) {
  321. $hide_on_desktop = 'mega-disabled';
  322. $hide_on_desktop_checked = "true";
  323. }
  324. $hide_on_mobile_checked = "false";
  325. $hide_on_mobile = 'mega-enabled';
  326. if ( isset( $col_data['meta']['hide-on-mobile'] ) && $col_data['meta']['hide-on-mobile'] == 'true' ) {
  327. $hide_on_mobile = 'mega-disabled';
  328. $hide_on_mobile_checked = "true";
  329. }
  330. $desktop_tooltip_visible = __("Column", "megamenu") . ": " . __("Visible on desktop", "megamenu");
  331. $desktop_tooltip_hidden = __("Column", "megamenu") . ": " . __("Hidden on desktop", "megamenu");
  332. $mobile_tooltip_visible = __("Column", "megamenu") . ": " . __("Visible on mobile", "megamenu");
  333. $mobile_tooltip_hidden = __("Column", "megamenu") . ": " . __("Hidden on mobile", "megamenu");
  334. $col_class = isset( $col_data['meta']['class'] ) ? $col_data['meta']['class'] : "";
  335. $return = "<div class='mega-col' data-span='{$col_span}'>";
  336. $return .= " <div class='mega-col-wrap'>";
  337. $return .= " <div class='mega-col-header'>";
  338. $return .= " <div class='mega-col-description'>";
  339. $return .= " <span class='dashicons dashicons-move'></span>";
  340. $return .= " <span class='dashicons dashicons-admin-generic'></span>";
  341. $return .= " <span class='mega-tooltip {$hide_on_desktop}' data-tooltip-enabled='{$desktop_tooltip_visible}' data-tooltip-disabled='{$desktop_tooltip_hidden}'><span class='dashicons dashicons-desktop'></span></span>";
  342. $return .= " <span class='mega-tooltip {$hide_on_mobile}' data-tooltip-enabled='{$mobile_tooltip_visible}' data-tooltip-disabled='{$mobile_tooltip_hidden}'><span class='dashicons dashicons-smartphone'></span></span>";
  343. $return .= " <span class='dashicons dashicons-trash'></span>";
  344. $return .= " </div>";
  345. $return .= ' <div class="mega-col-actions">';
  346. $return .= ' <a class="mega-col-option mega-col-contract" title="' . esc_attr( __("Contract", "megamenu") ) . '"><span class="dashicons dashicons-arrow-left-alt2"></span></a>';
  347. $return .= " <span class='mega-col-cols'><span class='mega-num-cols'>{$col_span}</span><span class='mega-of'>/</span><span class='mega-num-total-cols'>" . $row_columns . "</span></span>";
  348. $return .= ' <a class="mega-col-options mega-col-expand" title="' . esc_attr( __("Expand", "megamenu") ) . '"><span class="dashicons dashicons-arrow-right-alt2"></span></a>';
  349. $return .= ' </div>';
  350. $return .= " </div>";
  351. $return .= " <div class='mega-col-settings'>";
  352. $return .= " <input name='mega-hide-on-mobile' type='hidden' value='{$hide_on_mobile_checked}' />";
  353. $return .= " <input name='mega-hide-on-desktop' type='hidden' value='{$hide_on_desktop_checked}'/>";
  354. $return .= " <label>" . __('Column class', 'megamenu') . "</label>";
  355. $return .= " <input class='mega-column-class' type='text' value='{$col_class}' />";
  356. $return .= " <button class='button button-primary mega-save-column-settings' type='submit'>" . __('Save', 'megamenu') . "</button>";
  357. $return .= " </div>";
  358. $return .= " <div class='mega-col-widgets'>";
  359. if ( isset( $col_data['items'] ) && count( $col_data['items'] ) ) {
  360. foreach ( $col_data['items'] as $item ) {
  361. $return .= '<div class="widget" title="' . esc_attr( $item['title'] ) . '" id="' . esc_attr( $item['id'] ) . '" data-type="' . esc_attr( $item['type'] ) . '" data-id="' . esc_attr( $item['id'] ) . '">';
  362. $return .= ' <div class="widget-top">';
  363. $return .= ' <div class="widget-title">';
  364. $return .= ' <h4>' . esc_html( $item['title'] ) . '</h4>';
  365. $return .= ' <span class="widget-desc">' . esc_html( $item['description'] ) . '</span>';
  366. $return .= ' </div>';
  367. $return .= ' <div class="widget-title-action">';
  368. $return .= ' <a class="widget-option widget-action" title="' . esc_attr( __("Edit", "megamenu") ) . '"></a>';
  369. $return .= ' </div>';
  370. $return .= ' </div>';
  371. $return .= ' <div class="widget-inner widget-inside"></div>';
  372. $return .= '</div>';
  373. }
  374. }
  375. $return .= " </div>";
  376. $return .= " </div>";
  377. $return .= "</div>";
  378. return $return;
  379. }
  380. /**
  381. * Return the HTML for the standard (non grid) mega menu builder
  382. *
  383. * @return string
  384. */
  385. public function get_megamenu_html( $menu_item_id, $menu_id, $menu_item_depth, $menu_item_meta ) {
  386. $widget_manager = new Mega_Menu_Widget_Manager();
  387. $return = "<div id='widgets' data-columns='{$menu_item_meta['panel_columns']}'>";
  388. $items = $widget_manager->get_widgets_and_menu_items_for_menu_id( $menu_item_id, $menu_id );
  389. if ( count ( $items ) ) {
  390. foreach ( $items as $item ) {
  391. $return .= '<div class="widget" title="' . esc_attr( $item['title'] ) . '" id="' . esc_attr( $item['id'] ) . '" data-columns="' . esc_attr( $item['columns'] ) . '" data-type="' . esc_attr( $item['type'] ) . '" data-id="' . esc_attr( $item['id'] ) . '">';
  392. $return .= ' <div class="widget-top">';
  393. $return .= ' <div class="widget-title-action">';
  394. $return .= ' <a class="widget-option widget-contract" title="' . esc_attr( __("Contract", "megamenu") ) . '"></a>';
  395. $return .= ' <span class="widget-cols"><span class="widget-num-cols">' . $item['columns'] . '</span><span class="widget-of">/</span><span class="widget-total-cols">' . $menu_item_meta['panel_columns'] . '</span></span>';
  396. $return .= ' <a class="widget-option widget-expand" title="' . esc_attr( __("Expand", "megamenu") ) . '"></a>';
  397. $return .= ' <a class="widget-option widget-action" title="' . esc_attr( __("Edit", "megamenu") ) . '"></a>';
  398. $return .= ' </div>';
  399. $return .= ' <div class="widget-title">';
  400. $return .= ' <h4>' . esc_html( $item['title'] ) . '</h4>';
  401. $return .= ' </div>';
  402. $return .= ' </div>';
  403. $return .= ' <div class="widget-inner widget-inside"></div>';
  404. $return .= '</div>';
  405. }
  406. } else {
  407. $return .= "<p class='no_widgets'>" . __("No widgets found. Add a widget to this area using the Widget Selector (top right)", "megamenu") . "</p>";
  408. }
  409. $return .= "</div>";
  410. return $return;
  411. }
  412. /**
  413. * Return the HTML to display in the 'General Settings' tab
  414. *
  415. * @since 1.7
  416. * @return array
  417. */
  418. public function add_general_settings_tab( $tabs, $menu_item_id, $menu_id, $menu_item_depth, $menu_item_meta ) {
  419. $return = '<form>';
  420. $return .= ' <input type="hidden" name="menu_item_id" value="' . esc_attr( $menu_item_id ) . '" />';
  421. $return .= ' <input type="hidden" name="action" value="mm_save_menu_item_settings" />';
  422. $return .= ' <input type="hidden" name="_wpnonce" value="' . wp_create_nonce('megamenu_edit') . '" />';
  423. $return .= ' <input type="hidden" name="tab" value="general_settings" />';
  424. $return .= ' <h4 class="first">' . __("Menu Item Settings", "megamenu") . '</h4>';
  425. $return .= ' <table>';
  426. $return .= ' <tr>';
  427. $return .= ' <td class="mega-name">';
  428. $return .= __("Hide Text", "megamenu");
  429. $return .= ' </td>';
  430. $return .= ' <td class="mega-value">';
  431. $return .= ' <input type="checkbox" name="settings[hide_text]" value="true" ' . checked( $menu_item_meta['hide_text'], 'true', false ) . ' />';
  432. $return .= ' </td>';
  433. $return .= ' </tr>';
  434. $return .= ' <tr>';
  435. $return .= ' <td class="mega-name">';
  436. $return .= __("Hide Arrow", "megamenu");
  437. $return .= ' </td>';
  438. $return .= ' <td class="mega-value">';
  439. $return .= ' <input type="checkbox" name="settings[hide_arrow]" value="true" ' . checked( $menu_item_meta['hide_arrow'], 'true', false ) . ' />';
  440. $return .= ' </td>';
  441. $return .= ' </tr>';
  442. $return .= ' <tr>';
  443. $return .= ' <td class="mega-name">';
  444. $return .= __("Disable Link", "megamenu");
  445. $return .= ' </td>';
  446. $return .= ' <td class="mega-value">';
  447. $return .= ' <input type="checkbox" name="settings[disable_link]" value="true" ' . checked( $menu_item_meta['disable_link'], 'true', false ) . ' />';
  448. $return .= ' </td>';
  449. $return .= ' </tr>';
  450. $return .= ' <tr>';
  451. $return .= ' <td class="mega-name">';
  452. $return .= __("Hide Item on Mobile", "megamenu");
  453. $return .= ' </td>';
  454. $return .= ' <td class="mega-value">';
  455. $return .= ' <input type="checkbox" name="settings[hide_on_mobile]" value="true" ' . checked( $menu_item_meta['hide_on_mobile'], 'true', false ) . ' />';
  456. $return .= ' </td>';
  457. $return .= ' </tr>';
  458. $return .= ' <tr>';
  459. $return .= ' <td class="mega-name">';
  460. $return .= __("Hide Item on Desktop", "megamenu");
  461. $return .= ' </td>';
  462. $return .= ' <td class="mega-value">';
  463. $return .= ' <input type="checkbox" name="settings[hide_on_desktop]" value="true" ' . checked( $menu_item_meta['hide_on_desktop'], 'true', false ) . ' />';
  464. $return .= ' </td>';
  465. $return .= ' </tr>';
  466. $return .= ' <tr class="mega-menu-item-align">';
  467. $return .= ' <td class="mega-name">';
  468. $return .= __("Menu Item Align", "megamenu");
  469. $return .= ' </td>';
  470. $return .= ' <td class="mega-value">';
  471. if ( $menu_item_depth == 0 ) {
  472. $item_align = $menu_item_meta['item_align'];
  473. $float_left_display = $item_align == 'float-left' ? 'block' : 'none';
  474. $left_display = $item_align == 'left' ? 'block' : 'none';
  475. $right_display = $item_align == 'right' ? 'block' : 'none';
  476. $return .= ' <select id="mega-item-align" name="settings[item_align]">';
  477. $return .= ' <option value="float-left" ' . selected( $menu_item_meta['item_align'], 'float-left', false ) . '>' . __("Left", "megamenu") . '</option>';
  478. $return .= ' <option value="left" ' . selected( $menu_item_meta['item_align'], 'left', false ) . '>' . __("Default", "megamenu") . '</option>';
  479. $return .= ' <option value="right" ' . selected( $menu_item_meta['item_align'], 'right', false ) . '>' . __("Right", "megamenu") . '</option>';
  480. $return .= ' </select>';
  481. $return .= ' <div class="mega-description">';
  482. $return .= " <div class='float-left' style='display:{$float_left_display}'></div>";
  483. $return .= " <div class='left' style='display:{$left_display}'>" . __("Item will be aligned based on the 'Menu Items Align' option set in the Theme Editor", "megamenu") . "</div>";
  484. $return .= " <div class='right' style='display:{$right_display}'>" . __("Right aligned items will appear in reverse order on the right hand side of the menu bar", "megamenu") . "</div>";
  485. $return .= ' </div>';
  486. } else {
  487. $return .= '<em>' . __("Option only available for top level menu items", "megamenu") . '</em>';
  488. }
  489. $return .= ' </td>';
  490. $return .= ' </tr>';
  491. $return .= ' <tr class="mega-menu-icon-position">';
  492. $return .= ' <td class="mega-name">';
  493. $return .= __("Icon Position", "megamenu");
  494. $return .= ' </td>';
  495. $return .= ' <td class="mega-value">';
  496. $return .= ' <select id="mega-item-align" name="settings[icon_position]">';
  497. $return .= ' <option value="left" ' . selected( $menu_item_meta['icon_position'], 'left', false ) . '>' . __("Left", "megamenu") . '</option>';
  498. $return .= ' <option value="top" ' . selected( $menu_item_meta['icon_position'], 'top', false ) . '>' . __("Top", "megamenu") . '</option>';
  499. $return .= ' <option value="right" ' . selected( $menu_item_meta['icon_position'], 'right', false ) . '>' . __("Right", "megamenu") . '</option>';
  500. $return .= ' </select>';
  501. $return .= ' </td>';
  502. $return .= ' </tr>';
  503. $return .= apply_filters("megamenu_after_menu_item_settings", "", $tabs, $menu_item_id, $menu_id, $menu_item_depth, $menu_item_meta );
  504. $return .= ' </table>';
  505. $return .= ' <h4>' . __("Sub Menu Settings", "megamenu") . '</h4>';
  506. $return .= ' <table>';
  507. $return .= ' <tr class="mega-sub-menu-align">';
  508. $return .= ' <td class="mega-name">';
  509. $return .= __("Sub Menu Align", "megamenu");
  510. $return .= ' </td>';
  511. $return .= ' <td class="mega-value">';
  512. if ( $menu_item_depth == 0 ) {
  513. $return .= ' <select name="settings[align]">';
  514. $return .= ' <option value="bottom-left" ' . selected( $menu_item_meta['align'], 'bottom-left', false ) . '>' . __("Left edge of Parent", "megamenu") . '</option>';
  515. $return .= ' <option value="bottom-right" ' . selected( $menu_item_meta['align'], 'bottom-right', false ) . '>' . __("Right edge of Parent", "megamenu") . '</option>';
  516. $return .= ' </select>';
  517. $return .= ' <div class="mega-description">';
  518. $return .= __("Right aligned flyout menus will expand to the left", "megamenu");
  519. $return .= ' </div>';
  520. } else {
  521. $return .= '<em>' . __("Option only available for top level menu items", "megamenu") . '</em>';
  522. }
  523. $return .= ' </td>';
  524. $return .= ' </tr>';
  525. $return .= ' <tr>';
  526. $return .= ' <td class="mega-name">';
  527. $return .= __("Hide Sub Menu on Mobile", "megamenu");
  528. $return .= ' </td>';
  529. $return .= ' <td class="mega-value">';
  530. $return .= ' <input type="checkbox" name="settings[hide_sub_menu_on_mobile]" value="true" ' . checked( $menu_item_meta['hide_sub_menu_on_mobile'], 'true', false ) . ' />';
  531. $return .= ' </td>';
  532. $return .= ' </tr>';
  533. $return .= apply_filters("megamenu_after_menu_item_submenu_settings", "", $tabs, $menu_item_id, $menu_id, $menu_item_depth, $menu_item_meta );
  534. $return .= ' </table>';
  535. $return .= get_submit_button();
  536. $return .= '</form>';
  537. $tabs['general_settings'] = array(
  538. 'title' => __('Settings', 'megamenu'),
  539. 'content' => $return
  540. );
  541. return $tabs;
  542. }
  543. /**
  544. * Return the HTML to display in the 'menu icon' tab
  545. *
  546. * @since 1.7
  547. * @return array
  548. */
  549. public function add_icon_tab( $tabs, $menu_item_id, $menu_id, $menu_item_depth, $menu_item_meta ) {
  550. $icon_tabs = array(
  551. 'dashicons' => array(
  552. 'title' => __("Dashicons", "megamenu"),
  553. 'active' => ! isset( $menu_item_meta['icon'] ) || ( isset( $menu_item_meta['icon'] ) && substr( $menu_item_meta['icon'], 0, strlen("dash") ) === "dash" || $menu_item_meta['icon'] == 'disabled' ),
  554. 'content' => $this->dashicon_selector()
  555. ),
  556. 'fontawesome' => array(
  557. 'title' => __("Font Awesome", "megamenu"),
  558. 'active' => false,
  559. 'content' => str_replace( "{link}", "<a target='_blank' href='https://www.megamenu.com/upgrade/?utm_source=free&amp;utm_medium=icon&amp;utm_campaign=pro'>" . __("Max Mega Menu Pro", "megamenu") . "</a>", __("Get access to over 400 Font Awesome Icons with {link}", "megamenu") )
  560. ),
  561. 'genericons' => array(
  562. 'title' => __("Genericons", "megamenu"),
  563. 'active' => false,
  564. 'content' => str_replace( "{link}", "<a target='_blank' href='https://www.megamenu.com/upgrade/?utm_source=free&amp;utm_medium=icon&amp;utm_campaign=pro'>" . __("Max Mega Menu Pro", "megamenu") . "</a>", __("Choose from over 100 genericons with {link}", "megamenu") )
  565. ),
  566. 'custom' => array(
  567. 'title' => __("Custom Icon", "megamenu"),
  568. 'active' => false,
  569. 'content' => str_replace( "{link}", "<a target='_blank' href='https://www.megamenu.com/upgrade/?utm_source=free&amp;utm_medium=icon&amp;utm_campaign=pro'>" . __("Max Mega Menu Pro", "megamenu") . "</a>", __("Select icons from your media library with {link}", "megamenu") )
  570. )
  571. );
  572. $icon_tabs = apply_filters( "megamenu_icon_tabs", $icon_tabs, $menu_item_id, $menu_id, $menu_item_depth, $menu_item_meta );
  573. $return = "<h4 class='first'>" . __("Menu Item Icon", "megamenu") . "</h4>";
  574. $return .= "<ul class='mm_tabs horizontal'>";
  575. foreach ( $icon_tabs as $id => $icon_tab ) {
  576. $active = $icon_tab['active'] || count( $icon_tabs ) === 1 ? "active" : "";
  577. $return .= "<li rel='mm_tab_{$id}' class='mm_tab_horizontal {$active}'>";
  578. $return .= esc_html( $icon_tab['title'] );
  579. $return .= "</li>";
  580. }
  581. $return .= "</ul>";
  582. $return .= "<input type='text' class='filter_icons' placeholder='" . __("Search", "megamenu") . "' /><div class='clear'></div>";
  583. foreach ($icon_tabs as $id => $icon_tab) {
  584. $display = $icon_tab['active'] ? "block" : "none";
  585. $return .= "<div class='mm_tab_{$id}' style='display: {$display}'>";
  586. $return .= " <form class='icon_selector icon_selector_{$id}'>";
  587. $return .= " <input type='hidden' name='_wpnonce' value='" . wp_create_nonce('megamenu_edit') . "' />";
  588. $return .= " <input type='hidden' name='menu_item_id' value='" . esc_attr( $menu_item_id ) . "' />";
  589. $return .= " <input type='hidden' name='action' value='mm_save_menu_item_settings' />";
  590. $return .= $icon_tab['content'];
  591. $return .= " </form>";
  592. $return .= "</div>";
  593. }
  594. $tabs['menu_icon'] = array(
  595. 'title' => __('Icon', 'megamenu'),
  596. 'content' => $return
  597. );
  598. return $tabs;
  599. }
  600. /**
  601. * Return the form to select a dashicon
  602. *
  603. * @since 1.5.2
  604. * @return string
  605. */
  606. private function dashicon_selector() {
  607. $return = "<div class='disabled'><input id='disabled' class='radio' type='radio' rel='disabled' name='settings[icon]' value='disabled' " . checked( $this->menu_item_meta['icon'], 'disabled', false ) . " />";
  608. $return .= "<label for='disabled'></label></div>";
  609. foreach ( $this->all_icons() as $code => $class ) {
  610. $bits = explode( "-", $code );
  611. $code = "&#x" . $bits[1] . "";
  612. $type = $bits[0];
  613. $return .= "<div class='{$type}'>";
  614. $return .= " <input class='radio' id='{$class}' type='radio' rel='{$code}' name='settings[icon]' value='{$class}' " . checked( $this->menu_item_meta['icon'], $class, false ) . " />";
  615. $return .= " <label rel='{$code}' for='{$class}'></label>";
  616. $return .= "</div>";
  617. }
  618. return $return;
  619. }
  620. /**
  621. * List of all available DashIcon classes.
  622. *
  623. * @since 1.0
  624. * @return array - Sorted list of icon classes
  625. */
  626. public function all_icons() {
  627. $icons = array(
  628. 'dash-f333' => 'dashicons-menu',
  629. 'dash-f319' => 'dashicons-admin-site',
  630. 'dash-f226' => 'dashicons-dashboard',
  631. 'dash-f109' => 'dashicons-admin-post',
  632. 'dash-f104' => 'dashicons-admin-media',
  633. 'dash-f103' => 'dashicons-admin-links',
  634. 'dash-f105' => 'dashicons-admin-page',
  635. 'dash-f101' => 'dashicons-admin-comments',
  636. 'dash-f100' => 'dashicons-admin-appearance',
  637. 'dash-f106' => 'dashicons-admin-plugins',
  638. 'dash-f110' => 'dashicons-admin-users',
  639. 'dash-f107' => 'dashicons-admin-tools',
  640. 'dash-f108' => 'dashicons-admin-settings',
  641. 'dash-f112' => 'dashicons-admin-network',
  642. 'dash-f102' => 'dashicons-admin-home',
  643. 'dash-f111' => 'dashicons-admin-generic',
  644. 'dash-f148' => 'dashicons-admin-collapse',
  645. 'dash-f536' => 'dashicons-filter',
  646. 'dash-f540' => 'dashicons-admin-customizer',
  647. 'dash-f541' => 'dashicons-admin-multisite',
  648. 'dash-f119' => 'dashicons-welcome-write-blog',
  649. 'dash-f133' => 'dashicons-welcome-add-page',
  650. 'dash-f115' => 'dashicons-welcome-view-site',
  651. 'dash-f116' => 'dashicons-welcome-widgets-menus',
  652. 'dash-f117' => 'dashicons-welcome-comments',
  653. 'dash-f118' => 'dashicons-welcome-learn-more',
  654. 'dash-f123' => 'dashicons-format-aside',
  655. 'dash-f128' => 'dashicons-format-image',
  656. 'dash-f161' => 'dashicons-format-gallery',
  657. 'dash-f126' => 'dashicons-format-video',
  658. 'dash-f130' => 'dashicons-format-status',
  659. 'dash-f122' => 'dashicons-format-quote',
  660. 'dash-f125' => 'dashicons-format-chat',
  661. 'dash-f127' => 'dashicons-format-audio',
  662. 'dash-f306' => 'dashicons-camera',
  663. 'dash-f232' => 'dashicons-images-alt',
  664. 'dash-f233' => 'dashicons-images-alt2',
  665. 'dash-f234' => 'dashicons-video-alt',
  666. 'dash-f235' => 'dashicons-video-alt2',
  667. 'dash-f236' => 'dashicons-video-alt3',
  668. 'dash-f501' => 'dashicons-media-archive',
  669. 'dash-f500' => 'dashicons-media-audio',
  670. 'dash-f499' => 'dashicons-media-code',
  671. 'dash-f498' => 'dashicons-media-default',
  672. 'dash-f497' => 'dashicons-media-document',
  673. 'dash-f496' => 'dashicons-media-interactive',
  674. 'dash-f495' => 'dashicons-media-spreadsheet',
  675. 'dash-f491' => 'dashicons-media-text',
  676. 'dash-f490' => 'dashicons-media-video',
  677. 'dash-f492' => 'dashicons-playlist-audio',
  678. 'dash-f493' => 'dashicons-playlist-video',
  679. 'dash-f522' => 'dashicons-controls-play',
  680. 'dash-f523' => 'dashicons-controls-pause',
  681. 'dash-f519' => 'dashicons-controls-forward',
  682. 'dash-f517' => 'dashicons-controls-skipforward',
  683. 'dash-f518' => 'dashicons-controls-back',
  684. 'dash-f516' => 'dashicons-controls-skipback',
  685. 'dash-f515' => 'dashicons-controls-repeat',
  686. 'dash-f521' => 'dashicons-controls-volumeon',
  687. 'dash-f520' => 'dashicons-controls-volumeoff',
  688. 'dash-f165' => 'dashicons-image-crop',
  689. 'dash-f531' => 'dashicons-image-rotate',
  690. 'dash-f166' => 'dashicons-image-rotate-left',
  691. 'dash-f167' => 'dashicons-image-rotate-right',
  692. 'dash-f168' => 'dashicons-image-flip-vertical',
  693. 'dash-f169' => 'dashicons-image-flip-horizontal',
  694. 'dash-f533' => 'dashicons-image-filter',
  695. 'dash-f171' => 'dashicons-undo',
  696. 'dash-f172' => 'dashicons-redo',
  697. 'dash-f200' => 'dashicons-editor-bold',
  698. 'dash-f201' => 'dashicons-editor-italic',
  699. 'dash-f203' => 'dashicons-editor-ul',
  700. 'dash-f204' => 'dashicons-editor-ol',
  701. 'dash-f205' => 'dashicons-editor-quote',
  702. 'dash-f206' => 'dashicons-editor-alignleft',
  703. 'dash-f207' => 'dashicons-editor-aligncenter',
  704. 'dash-f208' => 'dashicons-editor-alignright',
  705. 'dash-f209' => 'dashicons-editor-insertmore',
  706. 'dash-f210' => 'dashicons-editor-spellcheck',
  707. 'dash-f211' => 'dashicons-editor-expand',
  708. 'dash-f506' => 'dashicons-editor-contract',
  709. 'dash-f212' => 'dashicons-editor-kitchensink',
  710. 'dash-f213' => 'dashicons-editor-underline',
  711. 'dash-f214' => 'dashicons-editor-justify',
  712. 'dash-f215' => 'dashicons-editor-textcolor',
  713. 'dash-f216' => 'dashicons-editor-paste-word',
  714. 'dash-f217' => 'dashicons-editor-paste-text',
  715. 'dash-f218' => 'dashicons-editor-removeformatting',
  716. 'dash-f219' => 'dashicons-editor-video',
  717. 'dash-f220' => 'dashicons-editor-customchar',
  718. 'dash-f221' => 'dashicons-editor-outdent',
  719. 'dash-f222' => 'dashicons-editor-indent',
  720. 'dash-f223' => 'dashicons-editor-help',
  721. 'dash-f224' => 'dashicons-editor-strikethrough',
  722. 'dash-f225' => 'dashicons-editor-unlink',
  723. 'dash-f320' => 'dashicons-editor-rtl',
  724. 'dash-f474' => 'dashicons-editor-break',
  725. 'dash-f475' => 'dashicons-editor-code',
  726. 'dash-f476' => 'dashicons-editor-paragraph',
  727. 'dash-f535' => 'dashicons-editor-table',
  728. 'dash-f135' => 'dashicons-align-left',
  729. 'dash-f136' => 'dashicons-align-right',
  730. 'dash-f134' => 'dashicons-align-center',
  731. 'dash-f138' => 'dashicons-align-none',
  732. 'dash-f160' => 'dashicons-lock',
  733. 'dash-f528' => 'dashicons-unlock',
  734. 'dash-f145' => 'dashicons-calendar',
  735. 'dash-f508' => 'dashicons-calendar-alt',
  736. 'dash-f177' => 'dashicons-visibility',
  737. 'dash-f530' => 'dashicons-hidden',
  738. 'dash-f173' => 'dashicons-post-status',
  739. 'dash-f464' => 'dashicons-edit',
  740. 'dash-f182' => 'dashicons-trash',
  741. 'dash-f537' => 'dashicons-sticky',
  742. 'dash-f504' => 'dashicons-external',
  743. 'dash-f142' => 'dashicons-arrow-up',
  744. 'dash-f140' => 'dashicons-arrow-down',
  745. 'dash-f139' => 'dashicons-arrow-right',
  746. 'dash-f141' => 'dashicons-arrow-left',
  747. 'dash-f342' => 'dashicons-arrow-up-alt',
  748. 'dash-f346' => 'dashicons-arrow-down-alt',
  749. 'dash-f344' => 'dashicons-arrow-right-alt',
  750. 'dash-f340' => 'dashicons-arrow-left-alt',
  751. 'dash-f343' => 'dashicons-arrow-up-alt2',
  752. 'dash-f347' => 'dashicons-arrow-down-alt2',
  753. 'dash-f345' => 'dashicons-arrow-right-alt2',
  754. 'dash-f341' => 'dashicons-arrow-left-alt2',
  755. 'dash-f156' => 'dashicons-sort',
  756. 'dash-f229' => 'dashicons-leftright',
  757. 'dash-f503' => 'dashicons-randomize',
  758. 'dash-f163' => 'dashicons-list-view',
  759. 'dash-f164' => 'dashicons-exerpt-view',
  760. 'dash-f509' => 'dashicons-grid-view',
  761. 'dash-f237' => 'dashicons-share',
  762. 'dash-f240' => 'dashicons-share-alt',
  763. 'dash-f242' => 'dashicons-share-alt2',
  764. 'dash-f301' => 'dashicons-twitter',
  765. 'dash-f303' => 'dashicons-rss',
  766. 'dash-f465' => 'dashicons-email',
  767. 'dash-f466' => 'dashicons-email-alt',
  768. 'dash-f304' => 'dashicons-facebook',
  769. 'dash-f305' => 'dashicons-facebook-alt',
  770. 'dash-f462' => 'dashicons-googleplus',
  771. 'dash-f325' => 'dashicons-networking',
  772. 'dash-f308' => 'dashicons-hammer',
  773. 'dash-f309' => 'dashicons-art',
  774. 'dash-f310' => 'dashicons-migrate',
  775. 'dash-f311' => 'dashicons-performance',
  776. 'dash-f483' => 'dashicons-universal-access',
  777. 'dash-f507' => 'dashicons-universal-access-alt',
  778. 'dash-f486' => 'dashicons-tickets',
  779. 'dash-f484' => 'dashicons-nametag',
  780. 'dash-f481' => 'dashicons-clipboard',
  781. 'dash-f487' => 'dashicons-heart',
  782. 'dash-f488' => 'dashicons-megaphone',
  783. 'dash-f489' => 'dashicons-schedule',
  784. 'dash-f120' => 'dashicons-wordpress',
  785. 'dash-f324' => 'dashicons-wordpress-alt',
  786. 'dash-f157' => 'dashicons-pressthis',
  787. 'dash-f463' => 'dashicons-update',
  788. 'dash-f180' => 'dashicons-screenoptions',
  789. 'dash-f348' => 'dashicons-info',
  790. 'dash-f174' => 'dashicons-cart',
  791. 'dash-f175' => 'dashicons-feedback',
  792. 'dash-f176' => 'dashicons-cloud',
  793. 'dash-f326' => 'dashicons-translation',
  794. 'dash-f323' => 'dashicons-tag',
  795. 'dash-f318' => 'dashicons-category',
  796. 'dash-f480' => 'dashicons-archive',
  797. 'dash-f479' => 'dashicons-tagcloud',
  798. 'dash-f478' => 'dashicons-text',
  799. 'dash-f147' => 'dashicons-yes',
  800. 'dash-f158' => 'dashicons-no',
  801. 'dash-f335' => 'dashicons-no-alt',
  802. 'dash-f132' => 'dashicons-plus',
  803. 'dash-f502' => 'dashicons-plus-alt',
  804. 'dash-f460' => 'dashicons-minus',
  805. 'dash-f153' => 'dashicons-dismiss',
  806. 'dash-f159' => 'dashicons-marker',
  807. 'dash-f155' => 'dashicons-star-filled',
  808. 'dash-f459' => 'dashicons-star-half',
  809. 'dash-f154' => 'dashicons-star-empty',
  810. 'dash-f227' => 'dashicons-flag',
  811. 'dash-f534' => 'dashicons-warning',
  812. 'dash-f230' => 'dashicons-location',
  813. 'dash-f231' => 'dashicons-location-alt',
  814. 'dash-f178' => 'dashicons-vault',
  815. 'dash-f332' => 'dashicons-shield',
  816. 'dash-f334' => 'dashicons-shield-alt',
  817. 'dash-f468' => 'dashicons-sos',
  818. 'dash-f179' => 'dashicons-search',
  819. 'dash-f181' => 'dashicons-slides',
  820. 'dash-f183' => 'dashicons-analytics',
  821. 'dash-f184' => 'dashicons-chart-pie',
  822. 'dash-f185' => 'dashicons-chart-bar',
  823. 'dash-f238' => 'dashicons-chart-line',
  824. 'dash-f239' => 'dashicons-chart-area',
  825. 'dash-f307' => 'dashicons-groups',
  826. 'dash-f338' => 'dashicons-businessman',
  827. 'dash-f336' => 'dashicons-id',
  828. 'dash-f337' => 'dashicons-id-alt',
  829. 'dash-f312' => 'dashicons-products',
  830. 'dash-f313' => 'dashicons-awards',
  831. 'dash-f314' => 'dashicons-forms',
  832. 'dash-f473' => 'dashicons-testimonial',
  833. 'dash-f322' => 'dashicons-portfolio',
  834. 'dash-f330' => 'dashicons-book',
  835. 'dash-f331' => 'dashicons-book-alt',
  836. 'dash-f316' => 'dashicons-download',
  837. 'dash-f317' => 'dashicons-upload',
  838. 'dash-f321' => 'dashicons-backup',
  839. 'dash-f469' => 'dashicons-clock',
  840. 'dash-f339' => 'dashicons-lightbulb',
  841. 'dash-f482' => 'dashicons-microphone',
  842. 'dash-f472' => 'dashicons-desktop',
  843. 'dash-f471' => 'dashicons-tablet',
  844. 'dash-f470' => 'dashicons-smartphone',
  845. 'dash-f525' => 'dashicons-phone',
  846. 'dash-f510' => 'dashicons-index-card',
  847. 'dash-f511' => 'dashicons-carrot',
  848. 'dash-f512' => 'dashicons-building',
  849. 'dash-f513' => 'dashicons-store',
  850. 'dash-f514' => 'dashicons-album',
  851. 'dash-f527' => 'dashicons-palmtree',
  852. 'dash-f524' => 'dashicons-tickets-alt',
  853. 'dash-f526' => 'dashicons-money',
  854. 'dash-f328' => 'dashicons-smiley',
  855. 'dash-f529' => 'dashicons-thumbs-up',
  856. 'dash-f542' => 'dashicons-thumbs-down',
  857. 'dash-f538' => 'dashicons-layout'
  858. );
  859. $icons = apply_filters( "megamenu_dashicons", $icons );
  860. ksort( $icons );
  861. return $icons;
  862. }
  863. }
  864. endif;