2012-02-24 23:12:43 -05:00
< ? php
/**
2014-03-04 15:21:14 -05:00
* Theme Customize Screen .
2012-02-24 23:12:43 -05:00
*
* @ package WordPress
* @ subpackage Customize
* @ since 3.4 . 0
*/
2012-06-26 14:48:18 -04:00
define ( 'IFRAME_REQUEST' , true );
2014-03-04 15:21:14 -05:00
/** Load WordPress Administration Bootstrap */
2013-09-24 20:18:11 -04:00
require_once ( dirname ( __FILE__ ) . '/admin.php' );
2014-03-04 15:21:14 -05:00
2014-07-14 15:01:16 -04:00
if ( ! current_user_can ( 'customize' ) ) {
2015-09-02 13:05:22 -04:00
wp_die (
'<h1>' . __ ( 'Cheatin’ uh?' ) . '</h1>' .
2016-06-29 11:16:29 -04:00
'<p>' . __ ( 'Sorry, you are not allowed to customize this site.' ) . '</p>' ,
2015-09-02 13:05:22 -04:00
403
);
2014-07-08 13:15:14 -04:00
}
2012-02-24 23:12:43 -05:00
Customize: Implement customized state persistence with changesets.
Includes infrastructure developed in the Customize Snapshots feature plugin.
See https://make.wordpress.org/core/2016/10/12/customize-changesets-technical-design-decisions/
Props westonruter, valendesigns, utkarshpatel, stubgo, lgedeon, ocean90, ryankienstra, mihai2u, dlh, aaroncampbell, jonathanbardo, jorbin.
See #28721.
See #31089.
Fixes #30937.
Fixes #31517.
Fixes #30028.
Fixes #23225.
Fixes #34142.
Fixes #36485.
Built from https://develop.svn.wordpress.org/trunk@38810
git-svn-id: http://core.svn.wordpress.org/trunk@38753 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-10-18 16:05:31 -04:00
/**
* @ global WP_Scripts $wp_scripts
* @ global WP_Customize_Manager $wp_customize
*/
global $wp_scripts , $wp_customize ;
if ( $wp_customize -> changeset_post_id () ) {
if ( ! current_user_can ( get_post_type_object ( 'customize_changeset' ) -> cap -> edit_post , $wp_customize -> changeset_post_id () ) ) {
wp_die (
'<h1>' . __ ( 'Cheatin’ uh?' ) . '</h1>' .
'<p>' . __ ( 'Sorry, you are not allowed to edit this changeset.' ) . '</p>' ,
403
);
}
if ( in_array ( get_post_status ( $wp_customize -> changeset_post_id () ), array ( 'publish' , 'trash' ), true ) ) {
wp_die (
'<h1>' . __ ( 'Cheatin’ uh?' ) . '</h1>' .
'<p>' . __ ( 'This changeset has already been published and cannot be further modified.' ) . '</p>' .
'<p><a href="' . esc_url ( remove_query_arg ( 'changeset_uuid' ) ) . '">' . __ ( 'Customize New Changes' ) . '</a></p>' ,
403
);
}
}
2015-09-17 15:42:26 -04:00
wp_reset_vars ( array ( 'url' , 'return' , 'autofocus' ) );
if ( ! empty ( $url ) ) {
$wp_customize -> set_preview_url ( wp_unslash ( $url ) );
2014-07-08 13:15:14 -04:00
}
2015-09-17 15:42:26 -04:00
if ( ! empty ( $return ) ) {
$wp_customize -> set_return_url ( wp_unslash ( $return ) );
}
if ( ! empty ( $autofocus ) && is_array ( $autofocus ) ) {
$wp_customize -> set_autofocus ( wp_unslash ( $autofocus ) );
2014-07-08 13:15:14 -04:00
}
2012-06-08 14:45:12 -04:00
2012-02-24 23:12:43 -05:00
$registered = $wp_scripts -> registered ;
$wp_scripts = new WP_Scripts ;
$wp_scripts -> registered = $registered ;
add_action ( 'customize_controls_print_scripts' , 'print_head_scripts' , 20 );
add_action ( 'customize_controls_print_footer_scripts' , '_wp_footer_scripts' );
add_action ( 'customize_controls_print_styles' , 'print_admin_styles' , 20 );
2013-10-24 18:53:23 -04:00
/**
* Fires when Customizer controls are initialized , before scripts are enqueued .
*
* @ since 3.4 . 0
*/
2012-02-24 23:12:43 -05:00
do_action ( 'customize_controls_init' );
wp_enqueue_script ( 'customize-controls' );
wp_enqueue_style ( 'customize-controls' );
2013-10-24 18:53:23 -04:00
/**
2013-10-24 18:57:50 -04:00
* Enqueue Customizer control scripts .
2013-10-24 18:53:23 -04:00
*
* @ since 3.4 . 0
*/
2012-02-24 23:12:43 -05:00
do_action ( 'customize_controls_enqueue_scripts' );
// Let's roll.
@ header ( 'Content-Type: ' . get_option ( 'html_type' ) . '; charset=' . get_option ( 'blog_charset' ));
wp_user_settings ();
_wp_admin_html_begin ();
2013-11-11 12:39:09 -05:00
$body_class = 'wp-core-ui wp-customizer js' ;
2012-06-06 17:45:17 -04:00
if ( wp_is_mobile () ) :
$body_class .= ' mobile' ;
2015-03-29 08:23:27 -04:00
?> <meta name="viewport" id="viewport-meta" content="width=device-width, initial-scale=1.0, minimum-scale=0.5, maximum-scale=1.2" /><?php
2012-06-06 17:45:17 -04:00
endif ;
2015-09-17 15:42:26 -04:00
if ( $wp_customize -> is_ios () ) {
2012-06-06 17:45:17 -04:00
$body_class .= ' ios' ;
2014-11-11 17:29:23 -05:00
}
2012-06-06 17:45:17 -04:00
2014-11-11 17:29:23 -05:00
if ( is_rtl () ) {
$body_class .= ' rtl' ;
}
2017-04-04 22:16:02 -04:00
$body_class .= ' locale-' . sanitize_html_class ( strtolower ( str_replace ( '_' , '-' , get_user_locale () ) ) );
2012-11-08 17:01:06 -05:00
2015-09-17 15:42:26 -04:00
$admin_title = sprintf ( $wp_customize -> get_document_title_template (), __ ( 'Loading…' ) );
2014-11-11 17:29:23 -05:00
2013-11-11 10:47:09 -05:00
?> <title><?php echo $admin_title; ?></title>
2012-02-24 23:12:43 -05:00
2013-11-11 10:47:09 -05:00
< script type = " text/javascript " >
2016-11-04 13:18:26 -04:00
var ajaxurl = < ? php echo wp_json_encode ( admin_url ( 'admin-ajax.php' , 'relative' ) ); ?> ;
2013-11-11 10:47:09 -05:00
</ script >
< ? php
2013-10-24 18:53:23 -04:00
/**
2014-03-25 04:05:15 -04:00
* Fires when Customizer control styles are printed .
2013-10-24 18:53:23 -04:00
*
* @ since 3.4 . 0
*/
2012-02-24 23:12:43 -05:00
do_action ( 'customize_controls_print_styles' );
2013-10-24 18:53:23 -04:00
/**
2014-03-25 04:05:15 -04:00
* Fires when Customizer control scripts are printed .
2013-10-24 18:53:23 -04:00
*
* @ since 3.4 . 0
*/
2012-02-24 23:12:43 -05:00
do_action ( 'customize_controls_print_scripts' );
?>
</ head >
2012-06-06 17:45:17 -04:00
< body class = " <?php echo esc_attr( $body_class ); ?> " >
< div class = " wp-full-overlay expanded " >
2012-04-30 11:46:17 -04:00
< form id = " customize-controls " class = " wrap wp-full-overlay-sidebar " >
2012-05-14 21:03:31 -04:00
< div id = " customize-header-actions " class = " wp-full-overlay-header " >
2015-08-09 15:00:24 -04:00
< ? php
$save_text = $wp_customize -> is_theme_active () ? __ ( 'Save & Publish' ) : __ ( 'Save & Activate' );
Customize: Implement customized state persistence with changesets.
Includes infrastructure developed in the Customize Snapshots feature plugin.
See https://make.wordpress.org/core/2016/10/12/customize-changesets-technical-design-decisions/
Props westonruter, valendesigns, utkarshpatel, stubgo, lgedeon, ocean90, ryankienstra, mihai2u, dlh, aaroncampbell, jonathanbardo, jorbin.
See #28721.
See #31089.
Fixes #30937.
Fixes #31517.
Fixes #30028.
Fixes #23225.
Fixes #34142.
Fixes #36485.
Built from https://develop.svn.wordpress.org/trunk@38810
git-svn-id: http://core.svn.wordpress.org/trunk@38753 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-10-18 16:05:31 -04:00
$save_attrs = array ();
if ( ! current_user_can ( get_post_type_object ( 'customize_changeset' ) -> cap -> publish_posts ) ) {
$save_attrs [ 'style' ] = 'display: none' ;
}
submit_button ( $save_text , 'primary save' , 'save' , false , $save_attrs );
2015-08-09 15:00:24 -04:00
?>
< span class = " spinner " ></ span >
2016-04-17 11:41:27 -04:00
< button type = " button " class = " customize-controls-preview-toggle " >
2015-08-09 15:00:24 -04:00
< span class = " controls " >< ? php _e ( 'Customize' ); ?> </span>
< span class = " preview " >< ? php _e ( 'Preview' ); ?> </span>
2016-04-17 11:41:27 -04:00
</ button >
2015-09-17 15:42:26 -04:00
< a class = " customize-controls-close " href = " <?php echo esc_url( $wp_customize->get_return_url () ); ?> " >
2016-04-17 11:41:27 -04:00
< span class = " screen-reader-text " >< ? php _e ( 'Close the Customizer and go back to the previous page' ); ?> </span>
2015-08-09 15:00:24 -04:00
</ a >
2012-04-16 10:02:28 -04:00
</ div >
2012-11-17 10:11:29 -05:00
2016-01-30 08:46:27 -05:00
< div id = " widgets-right " class = " wp-clearfix " ><!-- For Widget Customizer , many widgets try to look for instances under div #widgets-right, so we have to add that ID to a container div in the Customizer for compat -->
Customize: Add global notifications area.
* Displays an error notification in the global area when a save attempt is rejected due to invalid settings. An error notification is also displayed when saving fails due to a network error or server error.
* Introduces `wp.customize.Notifications` subclass of `wp.customize.Values` to contain instances of `wp.customize.Notification` and manage their rendering into a container.
* Exposes the global notification area as `wp.customize.notifications` collection instance.
* Updates the `notifications` object on `Control` to use `Notifications` rather than `Values` and to re-use the rendering logic from the former. The old `Control#renderNotifications` method is deprecated.
* Allows notifications to be dismissed by instantiating them with a `dismissible` property.
* Allows `wp.customize.Notification` to be extended with custom templates and `render` functions.
* Triggers a `removed` event on `wp.customize.Values` instances _after_ a value has been removed from the collection.
Props delawski, westonruter, karmatosed, celloexpressions, Fab1en, melchoyce, Kelderic, afercia, adamsilverstein.
See #34893, #39896.
Fixes #35210, #31582, #37727, #37269.
Built from https://develop.svn.wordpress.org/trunk@41374
git-svn-id: http://core.svn.wordpress.org/trunk@41207 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-12 03:03:46 -04:00
< div id = " customize-notifications-area " class = " customize-control-notifications-container " >
< ul ></ ul >
2012-03-03 21:06:11 -05:00
</ div >
Customize: Add global notifications area.
* Displays an error notification in the global area when a save attempt is rejected due to invalid settings. An error notification is also displayed when saving fails due to a network error or server error.
* Introduces `wp.customize.Notifications` subclass of `wp.customize.Values` to contain instances of `wp.customize.Notification` and manage their rendering into a container.
* Exposes the global notification area as `wp.customize.notifications` collection instance.
* Updates the `notifications` object on `Control` to use `Notifications` rather than `Values` and to re-use the rendering logic from the former. The old `Control#renderNotifications` method is deprecated.
* Allows notifications to be dismissed by instantiating them with a `dismissible` property.
* Allows `wp.customize.Notification` to be extended with custom templates and `render` functions.
* Triggers a `removed` event on `wp.customize.Values` instances _after_ a value has been removed from the collection.
Props delawski, westonruter, karmatosed, celloexpressions, Fab1en, melchoyce, Kelderic, afercia, adamsilverstein.
See #34893, #39896.
Fixes #35210, #31582, #37727, #37269.
Built from https://develop.svn.wordpress.org/trunk@41374
git-svn-id: http://core.svn.wordpress.org/trunk@41207 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-12 03:03:46 -04:00
< div class = " wp-full-overlay-sidebar-content " tabindex = " -1 " >
< div id = " customize-info " class = " accordion-section customize-info " >
< div class = " accordion-section-title " >
< span class = " preview-notice " >< ? php
echo sprintf ( __ ( 'You are customizing %s' ), '<strong class="panel-title site-title">' . get_bloginfo ( 'name' , 'display' ) . '</strong>' );
?> </span>
< button type = " button " class = " customize-help-toggle dashicons dashicons-editor-help " aria - expanded = " false " >< span class = " screen-reader-text " >< ? php _e ( 'Help' ); ?> </span></button>
</ div >
< div class = " customize-panel-description " >< ? php
_e ( 'The Customizer allows you to preview changes to your site before publishing them. You can navigate to different pages on your site within the preview. Edit shortcuts are shown for some editable elements.' );
?> </div>
</ div >
2012-02-24 23:12:43 -05:00
Customize: Add global notifications area.
* Displays an error notification in the global area when a save attempt is rejected due to invalid settings. An error notification is also displayed when saving fails due to a network error or server error.
* Introduces `wp.customize.Notifications` subclass of `wp.customize.Values` to contain instances of `wp.customize.Notification` and manage their rendering into a container.
* Exposes the global notification area as `wp.customize.notifications` collection instance.
* Updates the `notifications` object on `Control` to use `Notifications` rather than `Values` and to re-use the rendering logic from the former. The old `Control#renderNotifications` method is deprecated.
* Allows notifications to be dismissed by instantiating them with a `dismissible` property.
* Allows `wp.customize.Notification` to be extended with custom templates and `render` functions.
* Triggers a `removed` event on `wp.customize.Values` instances _after_ a value has been removed from the collection.
Props delawski, westonruter, karmatosed, celloexpressions, Fab1en, melchoyce, Kelderic, afercia, adamsilverstein.
See #34893, #39896.
Fixes #35210, #31582, #37727, #37269.
Built from https://develop.svn.wordpress.org/trunk@41374
git-svn-id: http://core.svn.wordpress.org/trunk@41207 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-12 03:03:46 -04:00
< div id = " customize-theme-controls " >
< ul class = " customize-pane-parent " >< ? php // Panels and sections are managed here via JavaScript ?></ul>
</ div >
Improve/introduce Customizer JavaScript models for Controls, Sections, and Panels.
* Introduce models for panels and sections.
* Introduce API to expand and focus a control, section or panel.
* Allow deep-linking to panels, sections, and controls inside of the Customizer.
* Clean up `accordion.js`, removing all Customizer-specific logic.
* Add initial unit tests for `wp.customize.Class` in `customize-base.js`.
https://make.wordpress.org/core/2014/10/27/toward-a-complete-javascript-api-for-the-customizer/ provides an overview of how to use the JavaScript API.
props westonruter, celloexpressions, ryankienstra.
see #28032, #28579, #28580, #28650, #28709, #29758.
fixes #29529.
Built from https://develop.svn.wordpress.org/trunk@30102
git-svn-id: http://core.svn.wordpress.org/trunk@30102 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-10-29 18:51:22 -04:00
</ div >
2012-05-14 21:03:31 -04:00
</ div >
2012-02-24 23:12:43 -05:00
2012-05-14 21:03:31 -04:00
< div id = " customize-footer-actions " class = " wp-full-overlay-footer " >
2016-11-13 14:00:35 -05:00
< button type = " button " class = " collapse-sidebar button " aria - expanded = " true " aria - label = " <?php echo esc_attr( _x( 'Hide Controls', 'label for hide controls button without length constraints' ) ); ?> " >
2012-04-16 10:02:28 -04:00
< span class = " collapse-sidebar-arrow " ></ span >
2016-11-13 14:00:35 -05:00
< span class = " collapse-sidebar-label " >< ? php _ex ( 'Hide Controls' , 'short (~12 characters) label for hide controls button' ); ?> </span>
2015-07-10 17:22:26 -04:00
</ button >
2017-04-21 01:16:45 -04:00
< ? php $previewable_devices = $wp_customize -> get_previewable_devices (); ?>
< ? php if ( ! empty ( $previewable_devices ) ) : ?>
< div class = " devices-wrapper " >
< div class = " devices " >
< ? php foreach ( ( array ) $previewable_devices as $device => $settings ) : ?>
< ? php
if ( empty ( $settings [ 'label' ] ) ) {
continue ;
}
$active = ! empty ( $settings [ 'default' ] );
$class = 'preview-' . $device ;
if ( $active ) {
$class .= ' active' ;
}
?>
< button type = " button " class = " <?php echo esc_attr( $class ); ?> " aria - pressed = " <?php echo esc_attr( $active ) ?> " data - device = " <?php echo esc_attr( $device ); ?> " >
< span class = " screen-reader-text " >< ? php echo esc_html ( $settings [ 'label' ] ); ?> </span>
</ button >
< ? php endforeach ; ?>
</ div >
</ div >
< ? php endif ; ?>
2012-02-24 23:12:43 -05:00
</ div >
</ form >
2012-04-30 11:46:17 -04:00
< div id = " customize-preview " class = " wp-full-overlay-main " ></ div >
2012-02-24 23:12:43 -05:00
< ? php
2013-10-24 18:53:23 -04:00
/**
2016-05-25 12:05:27 -04:00
* Prints templates , control scripts , and settings in the footer .
2013-10-24 18:53:23 -04:00
*
* @ since 3.4 . 0
*/
2012-02-24 23:12:43 -05:00
do_action ( 'customize_controls_print_footer_scripts' );
?>
2012-06-06 17:45:17 -04:00
</ div >
2012-02-24 23:12:43 -05:00
</ body >
</ html >