ReduxFramework_extension_customizer

Main ReduxFramework customizer extension class.

Defined (1)

The class is defined in the following location(s).

/inc/ReduxFramework/ReduxCore/extensions/customizer/extension_customizer.php  
  1. class ReduxFramework_extension_customizer { 
  2.  
  3. // Protected vars 
  4. protected $redux; 
  5. private $_extension_url; 
  6. private $_extension_dir; 
  7. private $parent; 
  8. private $orig_options = array(); 
  9. private static $post_values = array(); 
  10. public static $version = "2.0"; 
  11.  
  12. /** 
  13. * Class Constructor. Defines the args for the extions class 
  14. * @since 1.0.0 
  15. * @access public 
  16. * @param array $sections Panel sections. 
  17. * @param array $args Class constructor arguments. 
  18. * @param array $extra_tabs Extra panel tabs. 
  19. * @return void 
  20. */ 
  21. public function __construct( $parent ) { 
  22. //add_action('wp_head', array( $this, '_enqueue_new' )); 
  23.  
  24. global $pagenow, $wp_customize; 
  25. if ( ! isset( $wp_customize ) && $pagenow !== "customize.php" && $pagenow !== "admin-ajax.php" ) { 
  26. return; 
  27. if ( ( $pagenow !== "customize.php" && $pagenow !== "admin-ajax.php" && ! isset( $GLOBALS['wp_customize'] ) ) ) { 
  28. //return; 
  29.  
  30. $this->parent = $parent; 
  31.  
  32. if ( empty( $this->_extension_dir ) ) { 
  33. $this->_extension_dir = trailingslashit( str_replace( '\\', '/', dirname( __FILE__ ) ) ); 
  34. $this->_extension_url = site_url( str_replace( trailingslashit( str_replace( '\\', '/', ABSPATH ) ), '', $this->_extension_dir ) ); 
  35.  
  36. self::get_post_values(); 
  37.  
  38.  
  39. // Create defaults array 
  40. $defaults = array(); 
  41. /** 
  42. customize_controls_init 
  43. customize_controls_enqueue_scripts 
  44. customize_controls_print_styles 
  45. customize_controls_print_scripts 
  46. customize_controls_print_footer_scripts 
  47. */ 
  48.  
  49.  
  50. if ( ! ( isset( $_POST['action'] ) || ( isset( $_POST['action'] ) && $_POST['action'] != "customize_save" ) ) ) { 
  51.  
  52. add_action( "redux/options/{$this->parent->args['opt_name']}/options", array( 
  53. $this,  
  54. '_override_values' 
  55. ), 100 ); 
  56.  
  57. //if ( ! isset( $_POST['customized'] ) || $pagenow == "admin-ajax.php" ) { 
  58. if ( current_user_can( $this->parent->args['page_permissions'] ) ) { 
  59. add_action( 'customize_register', array( 
  60. $this,  
  61. '_register_customizer_controls' 
  62. ) ); // Create controls 
  63. //} 
  64.  
  65. add_action( 'wp_head', array( $this, 'customize_preview_init' ) ); 
  66.  
  67.  
  68. //add_action( 'customize_save', array( $this, 'customizer_save_before' ) ); // Before save 
  69. add_action( 'customize_save_after', array( &$this, 'customizer_save_after' ) ); // After save 
  70.  
  71.  
  72. //add_action( 'wp_enqueue_scripts', array( &$this, '_enqueue_previewer_css' ) ); // Enqueue previewer css 
  73. //add_action( 'wp_enqueue_scripts', array( &$this, '_enqueue_previewer_js' ) ); // Enqueue previewer javascript 
  74. //add_action( "wp_footer", array( $this, '_enqueue_new' ), 100 ); 
  75. //$this->_enqueue_new(); 
  76.  
  77. function customize_preview_init() { 
  78. do_action( 'redux/customizer/live_preview' ); 
  79.  
  80. protected static function get_post_values() { 
  81. if ( empty( self::$post_values ) && isset( $_POST['customized'] ) && ! empty( $_POST['customized'] ) ) { 
  82. self::$post_values = json_decode( stripslashes_deep( $_POST['customized'] ), true ); 
  83.  
  84. public function _override_values( $data ) { 
  85. if ( empty( $this->parent->options ) ) { 
  86. $this->parent->get_options(); 
  87. self::get_post_values(); 
  88.  
  89. if ( isset( $_POST['customized'] ) && ! empty( self::$post_values ) ) { 
  90.  
  91. if ( is_array( self::$post_values ) ) { 
  92. foreach ( self::$post_values as $key => $value ) { 
  93. if ( strpos( $key, $this->parent->args['opt_name'] ) !== false ) { 
  94. $key = str_replace( $this->parent->args['opt_name'] . '[', '', rtrim( $key, "]" ) ); 
  95. $data[ $key ] = $value; 
  96. $GLOBALS[ $this->parent->args['global_variable'] ][ $key ] = $value; 
  97. $this->parent->options[ $key ] = $value; 
  98.  
  99.  
  100. return $data; 
  101.  
  102. public function _enqueue_new() { 
  103. //echo "<script type='text/javascript' src='".$this->_extension_url . 'new/codemirror.min.js'."'></script>"; 
  104. //echo "<script type='text/javascript' src='".$this->_extension_url . 'new/colors-control.js'."'></script>"; 
  105. //echo "<script type='text/javascript' src='".$this->_extension_url . 'new/customizer-control.js'."'></script>"; 
  106. //echo "<script type='text/javascript' src='".$this->_extension_url . 'new/fonts-customizer-admin.js'."'></script>"; 
  107. //echo "<script type='text/javascript' src='".$this->_extension_url . 'new/header-control.js'."'></script>"; 
  108. //echo "<script type='text/javascript' src='".$this->_extension_url . 'new/header-models.js'."'></script>"; 
  109. //echo "<script type='text/javascript' src='".$this->_extension_url . 'new/jquery.slimscroll.js'."'></script>"; 
  110. //echo "<script type='text/javascript' src='".$this->_extension_url . 'new/jquery.ui.droppable.min.js'."'></script>"; 
  111. //echo "<script type='text/javascript' src='".$this->_extension_url . 'new/media-editor.min.js'."'></script>"; 
  112. //echo "<script type='text/javascript' src='".$this->_extension_url . 'new/new-customizer.js'."'></script>"; 
  113. //echo "<script type='text/javascript' src='".$this->_extension_url . 'new/previewing.js'."'></script>"; 
  114. //echo "<script type='text/javascript' src='".$this->_extension_url . 'new/theme-customizer.js'."'></script>"; 
  115.  
  116. /** 
  117. wp_enqueue_script('redux-extension-customizer-codemirror-js', $this->_extension_url . 'new/codemirror.min.js'); 
  118. wp_enqueue_script('redux-extension-customizer-color-js', $this->_extension_url . 'new/colors-control.js'); 
  119. wp_enqueue_script('redux-extension-customizer-controls-js', $this->_extension_url . 'new/customizer-control.js'); 
  120. wp_enqueue_script('redux-extension-customizer-fonts-js', $this->_extension_url . 'new/fonts-customizer-admin.js'); 
  121. wp_enqueue_script('redux-extension-customizer-header-js', $this->_extension_url . 'new/header-control.js'); 
  122. wp_enqueue_script('redux-extension-customizer-models-js', $this->_extension_url . 'new/header-models.js'); 
  123. wp_enqueue_script('redux-extension-customizer-slimscroll-js', $this->_extension_url . 'new/jquery.slimscroll.js'); 
  124. wp_enqueue_script('redux-extension-customizer-droppable-js', $this->_extension_url . 'new/jquery.ui.droppable.min.js'); 
  125. wp_enqueue_script('redux-extension-customizer-editor-js', $this->_extension_url . 'new/media-editor.min.js'); 
  126. wp_enqueue_script('redux-extension-customizer-new-js', $this->_extension_url . 'new/new-customizer.js'); 
  127. wp_enqueue_script('redux-extension-customizer-previewing-js', $this->_extension_url . 'new/previewing.js'); 
  128. wp_enqueue_script('redux-extension-customizer-theme-js', $this->_extension_url . 'new/theme-customizer.js'); 
  129. */ 
  130.  
  131. // All sections, settings, and controls will be added here 
  132. public function _register_customizer_controls( $wp_customize ) { 
  133. $order = array( 
  134. 'heading' => - 500,  
  135. 'option' => - 500,  
  136. ); 
  137. $defaults = array( 
  138. 'default-color' => '',  
  139. 'default-image' => '',  
  140. 'wp-head-callback' => '',  
  141. 'admin-head-callback' => '',  
  142. 'admin-preview-callback' => '' 
  143. ); 
  144. $panel = ""; 
  145.  
  146. foreach ( $this->parent->sections as $key => $section ) { 
  147.  
  148. // Not a type that should go on the customizer 
  149. if ( empty( $section['fields'] ) || ( isset( $section['type'] ) && $section['type'] == "divide" ) ) { 
  150. continue; 
  151.  
  152. // If section customizer is set to false 
  153. if ( isset( $section['customizer'] ) && $section['customizer'] === false ) { 
  154. continue; 
  155.  
  156. // Evaluate section permissions 
  157. if ( isset( $section['permissions'] ) ) { 
  158. if ( ! current_user_can( $section['permissions'] ) ) { 
  159. continue; 
  160.  
  161. // No errors please 
  162. if ( ! isset( $section['desc'] ) ) { 
  163. $section['desc'] = ""; 
  164.  
  165. // Fill the description if there is a subtitle 
  166. if ( empty( $section['desc'] ) && ! empty( $section['subtitle'] ) ) { 
  167. $section['desc'] = $section['subtitle']; 
  168.  
  169. // Let's make a section ID from the title 
  170. if ( empty( $section['id'] ) ) { 
  171. $section['id'] = strtolower( str_replace( " ", "", $section['title'] ) ); 
  172.  
  173. // No title is present, let's show what section is missing a title 
  174. if ( ! isset( $section['title'] ) ) { 
  175. print_r( $section ); 
  176.  
  177. // Let's set a default priority 
  178. if ( empty( $section['priority'] ) ) { 
  179. $section['priority'] = $order['heading']; 
  180. $order['heading'] ++; 
  181.  
  182. if ( method_exists( $wp_customize, 'add_panel' ) && ( ! isset( $section['subsection'] ) || ( isset( $section['subsection'] ) && $section['subsection'] != true ) ) && isset( $this->parent->sections[ ( $key + 1 ) ]['subsection'] ) && $this->parent->sections[ ( $key + 1 ) ]['subsection'] ) { 
  183.  
  184. $wp_customize->add_panel( $section['id'], array( 
  185. 'priority' => $section['priority'],  
  186. 'capability' => 'customize',  
  187. 'theme_supports' => '',  
  188. 'title' => $section['title'],  
  189. 'description' => $section['desc'],  
  190. ) ); 
  191. $panel = $section['id']; 
  192.  
  193. } else { 
  194. if ( ! isset( $section['subsection'] ) || ( isset( $section['subsection'] ) && $section['subsection'] != true ) ) { 
  195. $panel = ""; 
  196. $wp_customize->add_section( $section['id'], array( 
  197. 'title' => $section['title'],  
  198. 'priority' => $section['priority'],  
  199. 'description' => $section['desc'],  
  200. 'panel' => $panel 
  201. ) ); 
  202.  
  203.  
  204. foreach ( $section['fields'] as $skey => $option ) { 
  205.  
  206. // Evaluate section permissions 
  207. if ( isset( $option['permissions'] ) ) { 
  208. if ( ! current_user_can( $option['permissions'] ) ) { 
  209. continue; 
  210.  
  211. if ( isset( $option['customizer'] ) && $option['customizer'] === false ) { 
  212. continue; 
  213. if ( $this->parent->args['customizer'] === false && ( ! isset( $option['customizer'] ) || $option['customizer'] !== true ) ) { 
  214. continue; 
  215.  
  216. //Change the item priority if not set 
  217. if ( $option['type'] != 'heading' && ! isset( $option['priority'] ) ) { 
  218. $option['priority'] = $order['option']; 
  219. $order['option'] ++; 
  220.  
  221. if ( ! empty( $this->options_defaults[ $option['id'] ] ) ) { 
  222. $option['default'] = $this->options_defaults['option']['id']; 
  223.  
  224. //$option['id'] = $this->parent->args['opt_name'].'['.$option['id'].']'; 
  225. //echo $option['id']; 
  226.  
  227. if ( ! isset( $option['default'] ) ) { 
  228. $option['default'] = ""; 
  229. if ( ! isset( $option['title'] ) ) { 
  230. $option['title'] = ""; 
  231.  
  232. // Wordpress doesn't support multi-select 
  233. if ( $option['type'] == "select" && isset( $option['multi'] ) && $option['multi'] == true ) { 
  234. continue; 
  235.  
  236. $option['id'] = $this->parent->args['opt_name'] . '[' . $option['id'] . ']'; 
  237.  
  238. if ( $option['type'] != "heading" || ! empty( $option['type'] ) ) { 
  239. $wp_customize->add_setting( $option['id'],  
  240. array( 
  241. 'default' => $option['default'],  
  242. 'type' => 'option',  
  243. 'capabilities' => 'edit_theme_options',  
  244. //'capabilities' => $this->parent->args['page_permissions'],  
  245. 'transport' => 'refresh',  
  246. 'theme_supports' => '',  
  247. //'sanitize_callback' => '__return_false',  
  248. 'sanitize_callback' => array( $this, '_field_validation' ),  
  249. //'sanitize_js_callback' =>array( &$parent, '_field_input' ),  
  250. ); 
  251.  
  252. if ( ! empty( $option['data'] ) && empty( $option['options'] ) ) { 
  253. if ( empty( $option['args'] ) ) { 
  254. $option['args'] = array(); 
  255.  
  256. if ( $option['data'] == "elusive-icons" || $option['data'] == "elusive-icon" || $option['data'] == "elusive" ) { 
  257. $icons_file = ReduxFramework::$_dir . 'inc/fields/select/elusive-icons.php'; 
  258. $icons_file = apply_filters( 'redux-font-icons-file', $icons_file ); 
  259.  
  260. if ( file_exists( $icons_file ) ) { 
  261. require_once $icons_file; 
  262. $option['options'] = $this->parent->get_wordpress_data( $option['data'], $option['args'] ); 
  263.  
  264. switch ( $option['type'] ) { 
  265. case 'heading': 
  266. // We don't want to put up the section unless it's used by something visible in the customizer 
  267. $section = $option; 
  268. $section['id'] = strtolower( str_replace( " ", "", $option['title'] ) ); 
  269. $order['heading'] = - 500; 
  270.  
  271. if ( ! empty( $option['priority'] ) ) { 
  272. $section['priority'] = $option['priority']; 
  273. } else { 
  274. $section['priority'] = $order['heading']; 
  275. $order['heading'] ++; 
  276. break; 
  277.  
  278. case 'text': 
  279. if ( isset( $option['data'] ) && $option['data'] ) { 
  280. continue; 
  281. //if ($option['title'] == "Twitter Publisher Username") { 
  282. // print_r($option); 
  283. // $trueID = str_replace(array(']', 'redux_demo['), '', $option['id']); 
  284. // $data = get_option($this->parent->args['opt_name']); 
  285. // print_r($data[$trueID]); 
  286. // print_r($this->parent->options[$trueID]); 
  287. // exit(); 
  288. //} 
  289. $wp_customize->add_control( $option['id'], array( 
  290. 'label' => $option['title'],  
  291. 'section' => $section['id'],  
  292. 'settings' => $option['id'],  
  293. 'priority' => $option['priority'],  
  294. 'type' => 'text',  
  295. ) ); 
  296. break; 
  297.  
  298. case 'select': 
  299. case 'button_set': 
  300. if ( ! isset( $option['options'] ) ) { 
  301. continue; 
  302.  
  303. if ( ( isset( $option['sortable'] ) && $option['sortable'] ) ) { 
  304. continue; 
  305.  
  306. $wp_customize->add_control( $option['id'], array( 
  307. 'label' => $option['title'],  
  308. 'section' => $section['id'],  
  309. 'settings' => $option['id'],  
  310. 'priority' => $option['priority'],  
  311. 'type' => 'select',  
  312. 'choices' => $option['options'] 
  313. ) ); 
  314. break; 
  315.  
  316. case 'radio': 
  317. //continue; 
  318. $wp_customize->add_control( $option['id'], array( 
  319. 'label' => $option['title'],  
  320. 'section' => $section['id'],  
  321. 'settings' => $option['id'],  
  322. 'priority' => $option['priority'],  
  323. 'type' => 'radio',  
  324. 'choices' => $option['options'] 
  325. ) ); 
  326. break; 
  327.  
  328. case 'checkbox': 
  329. if ( ( isset( $option['data'] ) && $option['data'] ) || ( ( isset( $option['multi'] ) && $option['multi'] ) ) || ( ( isset( $option['options'] ) && ! empty( $option['options'] ) ) ) ) { 
  330. continue; 
  331. $wp_customize->add_control( $option['id'], array( 
  332. 'label' => $option['title'],  
  333. 'section' => $section['id'],  
  334. 'settings' => $option['id'],  
  335. 'priority' => $option['priority'],  
  336. 'type' => 'checkbox',  
  337. ) ); 
  338. break; 
  339.  
  340. case 'media': 
  341. continue; 
  342. $wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, $option['id'], array( 
  343. 'label' => $option['title'],  
  344. 'section' => $section['id'],  
  345. 'settings' => $option['id'],  
  346. 'priority' => $option['priority'] 
  347. ) ) ); 
  348. break; 
  349.  
  350. case 'color': 
  351. $wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, $option['id'], array( 
  352. 'label' => $option['title'],  
  353. 'section' => $section['id'],  
  354. 'settings' => $option['id'],  
  355. 'priority' => $option['priority'] 
  356. ) ) ); 
  357. break; 
  358.  
  359. case 'switch': 
  360. continue; 
  361. $wp_customize->add_control( new Redux_customizer_switch( $wp_customize, $option['id'], array( 
  362. 'label' => $option['title'],  
  363. 'section' => $section['id'],  
  364. 'settings' => $option['id'],  
  365. 'field' => $option,  
  366. 'ReduxFramework' => $this->parent,  
  367. 'priority' => $option['priority'],  
  368. ) ) ); 
  369.  
  370. break; 
  371.  
  372. default: 
  373. break; 
  374.  
  375. /** 
  376. title_tagline - Site Title & Tagline 
  377. colors - Colors 
  378. header_image - Header Image 
  379. background_image - Background Image 
  380. nav - Navigation 
  381. static_front_page - Static Front Page 
  382. */ 
  383.  
  384. public function customizer_save_before( $plugin_options ) { 
  385. $this->before_save = $this->parent->options; 
  386. //$parent->_field_input( $plugin_options ); 
  387.  
  388. public function customizer_save_after( $wp_customize ) { 
  389.  
  390. if ( empty( $this->parent->options ) ) { 
  391. $this->parent->get_options(); 
  392. if ( empty( $this->orig_options ) && ! empty( $this->parent->options ) ) { 
  393. $this->orig_options = $this->parent->options; 
  394.  
  395. $options = json_decode( stripslashes_deep( $_POST['customized'] ), true ); 
  396. $compiler = false; 
  397. $changed = false; 
  398.  
  399. foreach ( $options as $key => $value ) { 
  400. if ( strpos( $key, $this->parent->args['opt_name'] ) !== false ) { 
  401. $key = str_replace( $this->parent->args['opt_name'] . '[', '', rtrim( $key, "]" ) ); 
  402.  
  403. if ( ! isset( $this->orig_options[ $key ] ) || $this->orig_options[ $key ] != $value || ( isset( $this->orig_options[ $key ] ) && ! empty( $this->orig_options[ $key ] ) && empty( $value ) ) ) { 
  404. $this->parent->options[ $key ] = $value; 
  405. $changed = true; 
  406. if ( isset( $this->parent->compiler_fields[ $key ] ) ) { 
  407. $compiler = true; 
  408.  
  409. if ( $changed ) { 
  410. $this->parent->set_options( $this->parent->options ); 
  411. if ( $compiler ) { 
  412. // Have to set this to stop the output of the CSS and typography stuff. 
  413. $this->parent->no_output = true; 
  414. $this->parent->_enqueue_output(); 
  415. do_action( "redux/options/{$this->parent->args['opt_name']}/compiler", $this->parent->options, $this->parent->compilerCSS ); 
  416. do_action( "redux/options/{$this->args['opt_name']}/compiler/advanced", $this->parent ); 
  417.  
  418.  
  419. /** 
  420. * Enqueue CSS/JS for preview pane 
  421. * @since 1.0.0 
  422. * @access public 
  423. * @global $wp_styles 
  424. * @return void 
  425. */ 
  426. public function _enqueue_previewer() { 
  427. wp_enqueue_script( 
  428. 'redux-extension-previewer-js',  
  429. $this->_extension_url . 'assets/js/preview.js' 
  430. ); 
  431.  
  432. $localize = array( 
  433. 'save_pending' => __( 'You have changes that are not saved. Would you like to save them now?', 'redux-framework' ),  
  434. 'reset_confirm' => __( 'Are you sure? Resetting will lose all custom values.', 'redux-framework' ),  
  435. 'preset_confirm' => __( 'Your current options will be replaced with the values of this preset. Would you like to proceed?', 'redux-framework' ),  
  436. 'opt_name' => $this->args['opt_name'],  
  437. //'folds' => $this->folds,  
  438. 'options' => $this->parent->options,  
  439. 'defaults' => $this->parent->options_defaults,  
  440. ); 
  441.  
  442. wp_localize_script( 
  443. 'redux-extension-previewer-js',  
  444. 'reduxPost',  
  445. $localize 
  446. ); 
  447.  
  448. /** 
  449. * Enqueue CSS/JS for the customizer controls 
  450. * @since 1.0.0 
  451. * @access public 
  452. * @global $wp_styles 
  453. * @return void 
  454. */ 
  455. public function _enqueue() { 
  456. global $wp_styles; 
  457.  
  458. //wp_enqueue_style( 'wp-pointer' ); 
  459. //wp_enqueue_script( 'wp-pointer' ); 
  460. // Remove when code is in place! 
  461. //wp_enqueue_script('redux-extension-customizer-js', $this->_extension_url . 'assets/js/customizer.js'); 
  462. // Get styles 
  463. //wp_enqueue_style('redux-extension-customizer-css', $this->_extension_url . 'assets/css/customizer.css'); 
  464.  
  465. $localize = array( 
  466. 'save_pending' => __( 'You have changes that are not saved. Would you like to save them now?', 'redux-framework' ),  
  467. 'reset_confirm' => __( 'Are you sure? Resetting will lose all custom values.', 'redux-framework' ),  
  468. 'preset_confirm' => __( 'Your current options will be replaced with the values of this preset. Would you like to proceed?', 'redux-framework' ),  
  469. 'opt_name' => $this->args['opt_name'],  
  470. //'folds' => $this->folds,  
  471. 'field' => $this->parent->options,  
  472. 'defaults' => $this->parent->options_defaults,  
  473. ); 
  474.  
  475. // Values used by the javascript 
  476. wp_localize_script( 
  477. 'redux-js',  
  478. 'redux_opts',  
  479. $localize 
  480. ); 
  481.  
  482. do_action( 'redux-enqueue-' . $this->args['opt_name'] ); 
  483.  
  484. foreach ( $this->sections as $section ) { 
  485. if ( isset( $section['fields'] ) ) { 
  486. foreach ( $section['fields'] as $field ) { 
  487. if ( isset( $field['type'] ) ) { 
  488. $field_class = 'ReduxFramework_' . $field['type']; 
  489.  
  490. if ( ! class_exists( $field_class ) ) { 
  491. $class_file = apply_filters( 'redux-typeclass-load', $this->path . 'inc/fields/' . $field['type'] . '/field_' . $field['type'] . '.php', $field_class ); 
  492. if ( $class_file ) { 
  493. /** @noinspection PhpIncludeInspection */ 
  494. require_once( $class_file ); 
  495.  
  496. if ( class_exists( $field_class ) && method_exists( $field_class, 'enqueue' ) ) { 
  497. $enqueue = new $field_class( '', '', $this ); 
  498. $enqueue->enqueue(); 
  499.  
  500. /** 
  501. * Register Option for use 
  502. * @since 1.0.0 
  503. * @access public 
  504. * @return void 
  505. */ 
  506. public function _register_setting() { 
  507.  
  508.  
  509. /** 
  510. * Validate the options before insertion 
  511. * @since 3.0.0 
  512. * @access public 
  513. * @param array $plugin_options The options array 
  514. * @return 
  515. */ 
  516. public function _field_validation( $value ) { 
  517. print_r( $value ); 
  518. print_r( $_POST ); 
  519.  
  520. return $value; 
  521.  
  522. //return $this->parent->_validate_options( $plugin_options ); 
  523.  
  524. /** 
  525. * HTML OUTPUT. 
  526. * @since 1.0.0 
  527. * @access public 
  528. * @return void 
  529. */ 
  530. public function _customizer_html_output() { 
  531.  
  532. } // class