Customize: Extend changesets to support autosave revisions with restoration notifications, and introduce a new default linear history mode for saved changesets (with a filter for opt-in to changeset branching).
* Autosaved changes made on top of `auto-draft` changesets get written on top of the `auto-draft` itself, similar to how autosaves for posts will overwrite post drafts.
* Autosaved changes made to saved changesets (e.g. `draft`, `future`) will be placed into an autosave revision for that changeset and that user.
* Opening the Customizer will now prompt the user to restore their most recent auto-draft changeset; if notification is dismissed or ignored then the auto-draft will be marked as dismissed and will not be prompted to user in a notification again.
* Customizer will no longer automatically supply the `changeset_uuid` param in the `customize.php` URL when branching changesets are not active.
* If user closes Customizer explicitly via clicking on X link, then autosave auto-draft/autosave will be dismissed so as to not be prompted again.
* If there is a changeset already saved as a `draft` or `future` (UI is forthcoming) then this changeset will now be autoloaded for the user to keep making additional changes. This is the linear model for changesets.
* To restore the previous behavior of the Customizer where each session started a new changeset, regardless of whether or not there was an existing changeset saved, there is now a `customize_changeset_branching` hook which can be filtered to return `true`.
* `wp.customize.requestChangesetUpdate()` now supports a second with options including `autosave`, `title`, and `date`.
* The window `blur` event for `customize.php` has been replaced with a `visibilitychange` event to reduce autosave requests when clicking into preview window.
* Adds `autosaved` and `branching` args to `WP_Customize_Manager`.
* The `changeset_uuid` param for `WP_Customize_Manager` is extended to recognize a `false` value which causes the Customizer to defer identifying the UUID until `after_setup_theme` in the new `WP_Customize_Manager::establish_loaded_changeset()` method.
* A new `customize_autosaved` query parameter can now be supplied which is passed into the `autosaved` arg in `WP_Customize_Manager`; this option is an opt-in to source data from the autosave revision, allowing a user to restore autosaved changes.
Props westonruter, dlh, sayedwp, JoshuaWold, melchoyce.
See #39896.
Built from https://develop.svn.wordpress.org/trunk@41597
git-svn-id: http://core.svn.wordpress.org/trunk@41430 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-26 03:38:45 -04:00
/* global _wpCustomizeHeader, _wpCustomizeBackground, _wpMediaViewsL10n, MediaElementPlayer, console, confirm */
2012-08-22 20:04:18 -04:00
( function ( exports , $ ) {
2016-09-23 18:23:30 -04:00
var Container , focus , normalizedTransitionendEventName , api = wp . customize ;
2012-08-22 20:04:18 -04:00
2017-10-01 23:37:46 -04:00
/ * *
* A notification that is displayed in a full - screen overlay .
*
* @ since 4.9 . 0
* @ class
* @ augments wp . customize . Notification
* /
api . OverlayNotification = api . Notification . extend ( {
/ * *
* Whether the notification should show a loading spinner .
*
* @ since 4.9 . 0
* @ var { boolean }
* /
loading : false ,
/ * *
* Initialize .
*
* @ since 4.9 . 0
*
* @ param { string } code - Code .
* @ param { object } params - Params .
* /
initialize : function ( code , params ) {
var notification = this ;
api . Notification . prototype . initialize . call ( notification , code , params ) ;
2017-10-04 02:48:46 -04:00
notification . containerClasses += ' notification-overlay' ;
2017-10-01 23:37:46 -04:00
if ( notification . loading ) {
2017-10-04 02:48:46 -04:00
notification . containerClasses += ' notification-loading' ;
2017-10-01 23:37:46 -04:00
}
2017-10-12 00:01:46 -04:00
} ,
/ * *
* Render notification .
*
* @ since 4.9 . 0
*
* @ return { jQuery } Notification container .
* /
render : function ( ) {
var li = api . Notification . prototype . render . call ( this ) ;
li . on ( 'keydown' , _ . bind ( this . handleEscape , this ) ) ;
return li ;
} ,
/ * *
* Stop propagation on escape key presses , but also dismiss notification if it is dismissible .
*
* @ since 4.9 . 0
*
* @ param { jQuery . Event } event - Event .
* @ returns { void }
* /
handleEscape : function ( event ) {
var notification = this ;
if ( 27 === event . which ) {
event . stopPropagation ( ) ;
if ( notification . dismissible && notification . parent ) {
notification . parent . remove ( notification . code ) ;
}
}
2017-10-01 23:37:46 -04: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
/ * *
* A collection of observable notifications .
*
* @ since 4.9 . 0
* @ class
* @ augments wp . customize . Values
* /
api . Notifications = api . Values . extend ( {
/ * *
* Whether the alternative style should be used .
*
* @ since 4.9 . 0
* @ type { boolean }
* /
alt : false ,
/ * *
* The default constructor for items of the collection .
*
* @ since 4.9 . 0
* @ type { object }
* /
defaultConstructor : api . Notification ,
/ * *
* Initialize notifications area .
*
* @ since 4.9 . 0
* @ constructor
* @ param { object } options - Options .
* @ param { jQuery } [ options . container ] - Container element for notifications . This can be injected later .
* @ param { boolean } [ options . alt ] - Whether alternative style should be used when rendering notifications .
* @ returns { void }
* @ this { wp . customize . Notifications }
* /
initialize : function ( options ) {
var collection = this ;
api . Values . prototype . initialize . call ( collection , options ) ;
2017-10-09 23:34:53 -04:00
_ . bindAll ( collection , 'constrainFocus' ) ;
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
// Keep track of the order in which the notifications were added for sorting purposes.
collection . _addedIncrement = 0 ;
collection . _addedOrder = { } ;
// Trigger change event when notification is added or removed.
collection . bind ( 'add' , function ( notification ) {
collection . trigger ( 'change' , notification ) ;
} ) ;
collection . bind ( 'removed' , function ( notification ) {
collection . trigger ( 'change' , notification ) ;
} ) ;
} ,
/ * *
* Get the number of notifications added .
*
* @ since 4.9 . 0
* @ return { number } Count of notifications .
* /
count : function ( ) {
return _ . size ( this . _value ) ;
} ,
/ * *
* Add notification to the collection .
*
* @ since 4.9 . 0
2017-10-04 02:48:46 -04:00
*
2017-10-09 12:04:48 -04:00
* @ param { string | wp . customize . Notification } notification - Notification object to add . Alternatively code may be supplied , and in that case the second notificationObject argument must be supplied .
2017-10-04 02:48:46 -04:00
* @ param { wp . customize . Notification } [ notificationObject ] - Notification to add when first argument is the code string .
* @ returns { wp . customize . Notification } Added notification ( or existing instance if it was already added ) .
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
* /
2017-10-04 02:48:46 -04:00
add : function ( notification , notificationObject ) {
var collection = this , code , instance ;
if ( 'string' === typeof notification ) {
code = notification ;
instance = notificationObject ;
} else {
code = notification . code ;
instance = notification ;
}
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
if ( ! collection . has ( code ) ) {
collection . _addedIncrement += 1 ;
collection . _addedOrder [ code ] = collection . _addedIncrement ;
}
2017-10-04 02:48:46 -04:00
return api . Values . prototype . add . call ( collection , code , instance ) ;
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
} ,
/ * *
* Add notification to the collection .
*
* @ since 4.9 . 0
* @ param { string } code - Notification code to remove .
* @ return { api . Notification } Added instance ( or existing instance if it was already added ) .
* /
remove : function ( code ) {
var collection = this ;
delete collection . _addedOrder [ code ] ;
return api . Values . prototype . remove . call ( this , code ) ;
} ,
/ * *
* Get list of notifications .
*
* Notifications may be sorted by type followed by added time .
*
* @ since 4.9 . 0
* @ param { object } args - Args .
* @ param { boolean } [ args . sort = false ] - Whether to return the notifications sorted .
* @ return { Array . < wp . customize . Notification > } Notifications .
* @ this { wp . customize . Notifications }
* /
get : function ( args ) {
var collection = this , notifications , errorTypePriorities , params ;
notifications = _ . values ( collection . _value ) ;
params = _ . extend (
{ sort : false } ,
args
) ;
if ( params . sort ) {
errorTypePriorities = { error : 4 , warning : 3 , success : 2 , info : 1 } ;
notifications . sort ( function ( a , b ) {
var aPriority = 0 , bPriority = 0 ;
if ( ! _ . isUndefined ( errorTypePriorities [ a . type ] ) ) {
aPriority = errorTypePriorities [ a . type ] ;
}
if ( ! _ . isUndefined ( errorTypePriorities [ b . type ] ) ) {
bPriority = errorTypePriorities [ b . type ] ;
}
if ( aPriority !== bPriority ) {
return bPriority - aPriority ; // Show errors first.
}
return collection . _addedOrder [ b . code ] - collection . _addedOrder [ a . code ] ; // Show newer notifications higher.
} ) ;
}
return notifications ;
} ,
/ * *
* Render notifications area .
*
* @ since 4.9 . 0
* @ returns { void }
* @ this { wp . customize . Notifications }
* /
render : function ( ) {
var collection = this ,
2017-10-09 23:34:53 -04:00
notifications , hadOverlayNotification = false , hasOverlayNotification , overlayNotifications = [ ] ,
2017-09-18 20:46:45 -04:00
previousNotificationsByCode = { } ,
2017-10-09 23:34:53 -04:00
listElement , focusableElements ;
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
// Short-circuit if there are no container to render into.
if ( ! collection . container || ! collection . container . length ) {
return ;
}
notifications = collection . get ( { sort : true } ) ;
collection . container . toggle ( 0 !== notifications . length ) ;
2017-09-18 20:46:45 -04:00
// Short-circuit if there are no changes to the notifications.
2017-09-19 01:40:44 -04:00
if ( collection . container . is ( collection . previousContainer ) && _ . isEqual ( notifications , collection . previousNotifications ) ) {
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
return ;
}
2017-09-18 20:46:45 -04:00
// Make sure list is part of the container.
listElement = collection . container . children ( 'ul' ) . first ( ) ;
if ( ! listElement . length ) {
listElement = $ ( '<ul></ul>' ) ;
collection . container . append ( listElement ) ;
}
// Remove all notifications prior to re-rendering.
listElement . find ( '> [data-code]' ) . remove ( ) ;
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
2017-09-18 20:46:45 -04:00
_ . each ( collection . previousNotifications , function ( notification ) {
previousNotificationsByCode [ notification . code ] = notification ;
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
} ) ;
// Add all notifications in the sorted order.
_ . each ( notifications , function ( notification ) {
2017-10-01 23:37:46 -04:00
var notificationContainer ;
2017-09-18 20:46:45 -04:00
if ( wp . a11y && ( ! previousNotificationsByCode [ notification . code ] || ! _ . isEqual ( notification . message , previousNotificationsByCode [ notification . code ] . message ) ) ) {
wp . a11y . speak ( notification . message , 'assertive' ) ;
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
}
2017-10-01 23:37:46 -04:00
notificationContainer = $ ( notification . render ( ) ) ;
2017-10-09 23:34:53 -04:00
notification . container = notificationContainer ;
2017-10-01 23:37:46 -04:00
listElement . append ( notificationContainer ) ; // @todo Consider slideDown() as enhancement.
2017-10-09 23:34:53 -04:00
if ( notification . extended ( api . OverlayNotification ) ) {
overlayNotifications . push ( notification ) ;
}
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
} ) ;
2017-10-09 23:34:53 -04:00
hasOverlayNotification = Boolean ( overlayNotifications . length ) ;
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
2017-10-01 23:37:46 -04:00
if ( collection . previousNotifications ) {
hadOverlayNotification = Boolean ( _ . find ( collection . previousNotifications , function ( notification ) {
return notification . extended ( api . OverlayNotification ) ;
} ) ) ;
}
if ( hasOverlayNotification !== hadOverlayNotification ) {
$ ( document . body ) . toggleClass ( 'customize-loading' , hasOverlayNotification ) ;
collection . container . toggleClass ( 'has-overlay-notifications' , hasOverlayNotification ) ;
2017-10-09 23:34:53 -04:00
if ( hasOverlayNotification ) {
collection . previousActiveElement = document . activeElement ;
$ ( document ) . on ( 'keydown' , collection . constrainFocus ) ;
} else {
$ ( document ) . off ( 'keydown' , collection . constrainFocus ) ;
}
}
if ( hasOverlayNotification ) {
collection . focusContainer = overlayNotifications [ overlayNotifications . length - 1 ] . container ;
collection . focusContainer . prop ( 'tabIndex' , - 1 ) ;
focusableElements = collection . focusContainer . find ( ':focusable' ) ;
if ( focusableElements . length ) {
focusableElements . first ( ) . focus ( ) ;
} else {
collection . focusContainer . focus ( ) ;
}
} else if ( collection . previousActiveElement ) {
$ ( collection . previousActiveElement ) . focus ( ) ;
collection . previousActiveElement = null ;
2017-10-01 23:37:46 -04:00
}
2017-09-18 20:46:45 -04:00
collection . previousNotifications = notifications ;
2017-09-19 01:40:44 -04:00
collection . previousContainer = collection . container ;
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
collection . trigger ( 'rendered' ) ;
2017-10-09 23:34:53 -04:00
} ,
/ * *
* Constrain focus on focus container .
*
* @ since 4.9 . 0
*
* @ param { jQuery . Event } event - Event .
* @ returns { void }
* /
constrainFocus : function constrainFocus ( event ) {
2017-10-12 00:01:46 -04:00
var collection = this , focusableElements ;
// Prevent keys from escaping.
event . stopPropagation ( ) ;
if ( 9 !== event . which ) { // Tab key.
2017-10-09 23:34:53 -04:00
return ;
}
2017-10-12 00:01:46 -04:00
focusableElements = collection . focusContainer . find ( ':focusable' ) ;
if ( 0 === focusableElements . length ) {
focusableElements = collection . focusContainer ;
}
if ( ! $ . contains ( collection . focusContainer [ 0 ] , event . target ) || ! $ . contains ( collection . focusContainer [ 0 ] , document . activeElement ) ) {
event . preventDefault ( ) ;
focusableElements . first ( ) . focus ( ) ;
} else if ( focusableElements . last ( ) . is ( event . target ) && ! event . shiftKey ) {
event . preventDefault ( ) ;
focusableElements . first ( ) . focus ( ) ;
} else if ( focusableElements . first ( ) . is ( event . target ) && event . shiftKey ) {
event . preventDefault ( ) ;
focusableElements . last ( ) . focus ( ) ;
}
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
}
} ) ;
2013-11-11 08:32:10 -05:00
/ * *
2015-09-05 15:53:24 -04:00
* A Customizer Setting .
*
* A setting is WordPress data ( theme mod , option , menu , etc . ) that the user can
* draft changes to in the Customizer .
*
* @ see PHP class WP _Customize _Setting .
*
2017-10-28 23:08:53 -04:00
* @ since 3.4 . 0
2014-11-11 18:52:22 -05:00
* @ class
2014-08-08 19:31:15 -04:00
* @ augments wp . customize . Value
* @ augments wp . customize . Class
2012-08-22 20:04:18 -04:00
* /
api . Setting = api . Value . extend ( {
2017-10-28 23:08:53 -04:00
/ * *
* Default params .
*
* @ since 4.9 . 0
* @ var { object }
* /
defaults : {
transport : 'refresh' ,
dirty : false
} ,
/ * *
* Initialize .
*
* @ since 3.4 . 0
*
* @ param { string } id - The setting ID .
* @ param { * } value - The initial value of the setting .
* @ param { object } [ options = { } ] - Options .
* @ param { string } [ options . transport = refresh ] - The transport to use for previewing . Supports 'refresh' and 'postMessage' .
* @ param { boolean } [ options . dirty = false ] - Whether the setting should be considered initially dirty .
* @ param { object } [ options . previewer ] - The Previewer instance to sync with . Defaults to wp . customize . previewer .
* /
2012-08-22 20:04:18 -04:00
initialize : function ( id , value , options ) {
2017-10-28 23:08:53 -04:00
var setting = this , params ;
params = _ . extend (
{ previewer : api . previewer } ,
setting . defaults ,
options || { }
) ;
api . Value . prototype . initialize . call ( setting , value , params ) ;
2012-08-22 20:04:18 -04: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
setting . id = id ;
2017-10-28 23:08:53 -04:00
setting . _dirty = params . dirty ; // The _dirty property is what the Customizer reads from.
2017-10-04 02:48:46 -04:00
setting . notifications = new api . Notifications ( ) ;
2012-08-22 20:04:18 -04:00
2015-09-05 15:53:24 -04:00
// Whenever the setting's value changes, refresh the preview.
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
setting . bind ( setting . preview ) ;
2012-08-22 20:04:18 -04:00
} ,
2015-09-05 15:53:24 -04:00
/ * *
* Refresh the preview , respective of the setting ' s refresh policy .
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
*
* If the preview hasn ' t sent a keep - alive message and is likely
* disconnected by having navigated to a non - allowed URL , then the
* refresh transport will be forced when postMessage is the transport .
* Note that postMessage does not throw an error when the recipient window
* fails to match the origin window , so using try / c a t c h a r o u n d t h e
* previewer . send ( ) call to then fallback to refresh will not work .
*
* @ since 3.4 . 0
2016-11-23 01:05:32 -05:00
* @ access public
*
* @ returns { void }
2015-09-05 15:53:24 -04:00
* /
2012-08-22 20:04:18 -04:00
preview : function ( ) {
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
var setting = this , transport ;
transport = setting . transport ;
if ( 'postMessage' === transport && ! api . state ( 'previewerAlive' ) . get ( ) ) {
transport = 'refresh' ;
}
if ( 'postMessage' === transport ) {
2016-11-23 01:05:32 -05:00
setting . previewer . send ( 'setting' , [ setting . id , setting ( ) ] ) ;
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
} else if ( 'refresh' === transport ) {
2016-11-23 01:05:32 -05:00
setting . previewer . refresh ( ) ;
2012-08-22 20:04:18 -04:00
}
2016-06-14 15:17:28 -04:00
} ,
/ * *
* Find controls associated with this setting .
*
* @ since 4.6 . 0
* @ returns { wp . customize . Control [ ] } Controls associated with setting .
* /
findControls : function ( ) {
var setting = this , controls = [ ] ;
api . control . each ( function ( control ) {
_ . each ( control . settings , function ( controlSetting ) {
if ( controlSetting . id === setting . id ) {
controls . push ( control ) ;
}
} ) ;
} ) ;
return controls ;
2012-08-22 20:04:18 -04:00
}
} ) ;
2014-12-02 17:56:45 -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
* Current change count .
*
* @ since 4.7 . 0
* @ type { number }
* @ protected
* /
api . _latestRevision = 0 ;
/ * *
* Last revision that was saved .
*
* @ since 4.7 . 0
* @ type { number }
* @ protected
* /
api . _lastSavedRevision = 0 ;
/ * *
* Latest revisions associated with the updated setting .
*
* @ since 4.7 . 0
* @ type { object }
* @ protected
* /
api . _latestSettingRevisions = { } ;
/ *
* Keep track of the revision associated with each updated setting so that
* requestChangesetUpdate knows which dirty settings to include . Also , once
* ready is triggered and all initial settings have been added , increment
* revision for each newly - created initially - dirty setting so that it will
* also be included in changeset update requests .
* /
api . bind ( 'change' , function incrementChangedSettingRevision ( setting ) {
api . _latestRevision += 1 ;
api . _latestSettingRevisions [ setting . id ] = api . _latestRevision ;
} ) ;
api . bind ( 'ready' , function ( ) {
api . bind ( 'add' , function incrementCreatedSettingRevision ( setting ) {
if ( setting . _dirty ) {
api . _latestRevision += 1 ;
api . _latestSettingRevisions [ setting . id ] = api . _latestRevision ;
}
} ) ;
} ) ;
/ * *
* Get the dirty setting values .
*
2016-11-23 01:05:32 -05:00
* @ since 4.7 . 0
* @ access public
*
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
* @ param { object } [ options ] Options .
* @ param { boolean } [ options . unsaved = false ] Whether only values not saved yet into a changeset will be returned ( differential changes ) .
* @ returns { object } Dirty setting values .
* /
api . dirtyValues = function dirtyValues ( options ) {
var values = { } ;
api . each ( function ( setting ) {
var settingRevision ;
if ( ! setting . _dirty ) {
return ;
}
settingRevision = api . _latestSettingRevisions [ setting . id ] ;
// Skip including settings that have already been included in the changeset, if only requesting unsaved.
Customize: Introduce starter content and site freshness state.
A theme can opt-in for tailored starter content to apply to the customizer when previewing the theme on a fresh install, when `fresh_site` is at its initial `1` value. Starter content is staged in the customizer and does not go live unless the changes are published. Initial starter content is added to Twenty Seventeen.
* The `fresh_site` flag is cleared when a published post or page is saved, when widgets are modified, or when the customizer state is saved.
* Starter content is registered via `starter-content` theme support, where the argument is an array containing `widgets`, `posts`, `nav_menus`, `options`, and `theme_mods`. Posts/pages in starter content are created with the `auto-draft` status, re-using the page/post stubs feature added to nav menus and the static front page controls.
* A `get_theme_starter_content` filter allows for plugins to extend a theme's starter content.
* Starter content in themes can/should re-use existing starter content items in core by using named placeholders.
* Import theme starter content into customized state when fresh site.
* Prevent original_title differences from causing refreshes if title is present.
* Ensure nav menu item url is set according to object when previewing.
* Make sure initial saved state is false if there are dirty settings without an existing changeset.
* Ensure dirty settings are cleaned upon changeset publishing.
Props helen, westonruter, ocean90.
Fixes #38114, #38533.
Built from https://develop.svn.wordpress.org/trunk@38991
git-svn-id: http://core.svn.wordpress.org/trunk@38934 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-10-27 22:57:35 -04:00
if ( api . state ( 'changesetStatus' ) . get ( ) && ( options && options . unsaved ) && ( _ . isUndefined ( settingRevision ) || settingRevision <= api . _lastSavedRevision ) ) {
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
return ;
}
values [ setting . id ] = setting . get ( ) ;
} ) ;
return values ;
} ;
/ * *
* Request updates to the changeset .
*
2016-11-23 01:05:32 -05:00
* @ since 4.7 . 0
* @ access public
*
Customize: Extend changesets to support autosave revisions with restoration notifications, and introduce a new default linear history mode for saved changesets (with a filter for opt-in to changeset branching).
* Autosaved changes made on top of `auto-draft` changesets get written on top of the `auto-draft` itself, similar to how autosaves for posts will overwrite post drafts.
* Autosaved changes made to saved changesets (e.g. `draft`, `future`) will be placed into an autosave revision for that changeset and that user.
* Opening the Customizer will now prompt the user to restore their most recent auto-draft changeset; if notification is dismissed or ignored then the auto-draft will be marked as dismissed and will not be prompted to user in a notification again.
* Customizer will no longer automatically supply the `changeset_uuid` param in the `customize.php` URL when branching changesets are not active.
* If user closes Customizer explicitly via clicking on X link, then autosave auto-draft/autosave will be dismissed so as to not be prompted again.
* If there is a changeset already saved as a `draft` or `future` (UI is forthcoming) then this changeset will now be autoloaded for the user to keep making additional changes. This is the linear model for changesets.
* To restore the previous behavior of the Customizer where each session started a new changeset, regardless of whether or not there was an existing changeset saved, there is now a `customize_changeset_branching` hook which can be filtered to return `true`.
* `wp.customize.requestChangesetUpdate()` now supports a second with options including `autosave`, `title`, and `date`.
* The window `blur` event for `customize.php` has been replaced with a `visibilitychange` event to reduce autosave requests when clicking into preview window.
* Adds `autosaved` and `branching` args to `WP_Customize_Manager`.
* The `changeset_uuid` param for `WP_Customize_Manager` is extended to recognize a `false` value which causes the Customizer to defer identifying the UUID until `after_setup_theme` in the new `WP_Customize_Manager::establish_loaded_changeset()` method.
* A new `customize_autosaved` query parameter can now be supplied which is passed into the `autosaved` arg in `WP_Customize_Manager`; this option is an opt-in to source data from the autosave revision, allowing a user to restore autosaved changes.
Props westonruter, dlh, sayedwp, JoshuaWold, melchoyce.
See #39896.
Built from https://develop.svn.wordpress.org/trunk@41597
git-svn-id: http://core.svn.wordpress.org/trunk@41430 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-26 03:38:45 -04:00
* @ param { object } [ changes ] - Mapping of setting IDs to setting params each normally including a value property , or mapping to null .
* If not provided , then the changes will still be obtained from unsaved dirty settings .
* @ param { object } [ args ] - Additional options for the save request .
* @ param { boolean } [ args . autosave = false ] - Whether changes will be stored in autosave revision if the changeset has been promoted from an auto - draft .
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
* @ param { boolean } [ args . force = false ] - Send request to update even when there are no changes to submit . This can be used to request the latest status of the changeset on the server .
Customize: Extend changesets to support autosave revisions with restoration notifications, and introduce a new default linear history mode for saved changesets (with a filter for opt-in to changeset branching).
* Autosaved changes made on top of `auto-draft` changesets get written on top of the `auto-draft` itself, similar to how autosaves for posts will overwrite post drafts.
* Autosaved changes made to saved changesets (e.g. `draft`, `future`) will be placed into an autosave revision for that changeset and that user.
* Opening the Customizer will now prompt the user to restore their most recent auto-draft changeset; if notification is dismissed or ignored then the auto-draft will be marked as dismissed and will not be prompted to user in a notification again.
* Customizer will no longer automatically supply the `changeset_uuid` param in the `customize.php` URL when branching changesets are not active.
* If user closes Customizer explicitly via clicking on X link, then autosave auto-draft/autosave will be dismissed so as to not be prompted again.
* If there is a changeset already saved as a `draft` or `future` (UI is forthcoming) then this changeset will now be autoloaded for the user to keep making additional changes. This is the linear model for changesets.
* To restore the previous behavior of the Customizer where each session started a new changeset, regardless of whether or not there was an existing changeset saved, there is now a `customize_changeset_branching` hook which can be filtered to return `true`.
* `wp.customize.requestChangesetUpdate()` now supports a second with options including `autosave`, `title`, and `date`.
* The window `blur` event for `customize.php` has been replaced with a `visibilitychange` event to reduce autosave requests when clicking into preview window.
* Adds `autosaved` and `branching` args to `WP_Customize_Manager`.
* The `changeset_uuid` param for `WP_Customize_Manager` is extended to recognize a `false` value which causes the Customizer to defer identifying the UUID until `after_setup_theme` in the new `WP_Customize_Manager::establish_loaded_changeset()` method.
* A new `customize_autosaved` query parameter can now be supplied which is passed into the `autosaved` arg in `WP_Customize_Manager`; this option is an opt-in to source data from the autosave revision, allowing a user to restore autosaved changes.
Props westonruter, dlh, sayedwp, JoshuaWold, melchoyce.
See #39896.
Built from https://develop.svn.wordpress.org/trunk@41597
git-svn-id: http://core.svn.wordpress.org/trunk@41430 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-26 03:38:45 -04:00
* @ param { string } [ args . title ] - Title to update in the changeset . Optional .
* @ param { string } [ args . date ] - Date to update in the changeset . Optional .
2016-11-23 01:05:32 -05:00
* @ returns { jQuery . Promise } Promise resolving with the response data .
2014-12-02 17:56:45 -05:00
* /
Customize: Extend changesets to support autosave revisions with restoration notifications, and introduce a new default linear history mode for saved changesets (with a filter for opt-in to changeset branching).
* Autosaved changes made on top of `auto-draft` changesets get written on top of the `auto-draft` itself, similar to how autosaves for posts will overwrite post drafts.
* Autosaved changes made to saved changesets (e.g. `draft`, `future`) will be placed into an autosave revision for that changeset and that user.
* Opening the Customizer will now prompt the user to restore their most recent auto-draft changeset; if notification is dismissed or ignored then the auto-draft will be marked as dismissed and will not be prompted to user in a notification again.
* Customizer will no longer automatically supply the `changeset_uuid` param in the `customize.php` URL when branching changesets are not active.
* If user closes Customizer explicitly via clicking on X link, then autosave auto-draft/autosave will be dismissed so as to not be prompted again.
* If there is a changeset already saved as a `draft` or `future` (UI is forthcoming) then this changeset will now be autoloaded for the user to keep making additional changes. This is the linear model for changesets.
* To restore the previous behavior of the Customizer where each session started a new changeset, regardless of whether or not there was an existing changeset saved, there is now a `customize_changeset_branching` hook which can be filtered to return `true`.
* `wp.customize.requestChangesetUpdate()` now supports a second with options including `autosave`, `title`, and `date`.
* The window `blur` event for `customize.php` has been replaced with a `visibilitychange` event to reduce autosave requests when clicking into preview window.
* Adds `autosaved` and `branching` args to `WP_Customize_Manager`.
* The `changeset_uuid` param for `WP_Customize_Manager` is extended to recognize a `false` value which causes the Customizer to defer identifying the UUID until `after_setup_theme` in the new `WP_Customize_Manager::establish_loaded_changeset()` method.
* A new `customize_autosaved` query parameter can now be supplied which is passed into the `autosaved` arg in `WP_Customize_Manager`; this option is an opt-in to source data from the autosave revision, allowing a user to restore autosaved changes.
Props westonruter, dlh, sayedwp, JoshuaWold, melchoyce.
See #39896.
Built from https://develop.svn.wordpress.org/trunk@41597
git-svn-id: http://core.svn.wordpress.org/trunk@41430 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-26 03:38:45 -04:00
api . requestChangesetUpdate = function requestChangesetUpdate ( changes , args ) {
var deferred , request , submittedChanges = { } , data , submittedArgs ;
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
deferred = new $ . Deferred ( ) ;
2017-10-01 23:37:46 -04:00
// Prevent attempting changeset update while request is being made.
if ( 0 !== api . state ( 'processing' ) . get ( ) ) {
deferred . reject ( 'already_processing' ) ;
return deferred . promise ( ) ;
}
Customize: Extend changesets to support autosave revisions with restoration notifications, and introduce a new default linear history mode for saved changesets (with a filter for opt-in to changeset branching).
* Autosaved changes made on top of `auto-draft` changesets get written on top of the `auto-draft` itself, similar to how autosaves for posts will overwrite post drafts.
* Autosaved changes made to saved changesets (e.g. `draft`, `future`) will be placed into an autosave revision for that changeset and that user.
* Opening the Customizer will now prompt the user to restore their most recent auto-draft changeset; if notification is dismissed or ignored then the auto-draft will be marked as dismissed and will not be prompted to user in a notification again.
* Customizer will no longer automatically supply the `changeset_uuid` param in the `customize.php` URL when branching changesets are not active.
* If user closes Customizer explicitly via clicking on X link, then autosave auto-draft/autosave will be dismissed so as to not be prompted again.
* If there is a changeset already saved as a `draft` or `future` (UI is forthcoming) then this changeset will now be autoloaded for the user to keep making additional changes. This is the linear model for changesets.
* To restore the previous behavior of the Customizer where each session started a new changeset, regardless of whether or not there was an existing changeset saved, there is now a `customize_changeset_branching` hook which can be filtered to return `true`.
* `wp.customize.requestChangesetUpdate()` now supports a second with options including `autosave`, `title`, and `date`.
* The window `blur` event for `customize.php` has been replaced with a `visibilitychange` event to reduce autosave requests when clicking into preview window.
* Adds `autosaved` and `branching` args to `WP_Customize_Manager`.
* The `changeset_uuid` param for `WP_Customize_Manager` is extended to recognize a `false` value which causes the Customizer to defer identifying the UUID until `after_setup_theme` in the new `WP_Customize_Manager::establish_loaded_changeset()` method.
* A new `customize_autosaved` query parameter can now be supplied which is passed into the `autosaved` arg in `WP_Customize_Manager`; this option is an opt-in to source data from the autosave revision, allowing a user to restore autosaved changes.
Props westonruter, dlh, sayedwp, JoshuaWold, melchoyce.
See #39896.
Built from https://develop.svn.wordpress.org/trunk@41597
git-svn-id: http://core.svn.wordpress.org/trunk@41430 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-26 03:38:45 -04:00
submittedArgs = _ . extend ( {
title : null ,
date : null ,
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
autosave : false ,
force : false
Customize: Extend changesets to support autosave revisions with restoration notifications, and introduce a new default linear history mode for saved changesets (with a filter for opt-in to changeset branching).
* Autosaved changes made on top of `auto-draft` changesets get written on top of the `auto-draft` itself, similar to how autosaves for posts will overwrite post drafts.
* Autosaved changes made to saved changesets (e.g. `draft`, `future`) will be placed into an autosave revision for that changeset and that user.
* Opening the Customizer will now prompt the user to restore their most recent auto-draft changeset; if notification is dismissed or ignored then the auto-draft will be marked as dismissed and will not be prompted to user in a notification again.
* Customizer will no longer automatically supply the `changeset_uuid` param in the `customize.php` URL when branching changesets are not active.
* If user closes Customizer explicitly via clicking on X link, then autosave auto-draft/autosave will be dismissed so as to not be prompted again.
* If there is a changeset already saved as a `draft` or `future` (UI is forthcoming) then this changeset will now be autoloaded for the user to keep making additional changes. This is the linear model for changesets.
* To restore the previous behavior of the Customizer where each session started a new changeset, regardless of whether or not there was an existing changeset saved, there is now a `customize_changeset_branching` hook which can be filtered to return `true`.
* `wp.customize.requestChangesetUpdate()` now supports a second with options including `autosave`, `title`, and `date`.
* The window `blur` event for `customize.php` has been replaced with a `visibilitychange` event to reduce autosave requests when clicking into preview window.
* Adds `autosaved` and `branching` args to `WP_Customize_Manager`.
* The `changeset_uuid` param for `WP_Customize_Manager` is extended to recognize a `false` value which causes the Customizer to defer identifying the UUID until `after_setup_theme` in the new `WP_Customize_Manager::establish_loaded_changeset()` method.
* A new `customize_autosaved` query parameter can now be supplied which is passed into the `autosaved` arg in `WP_Customize_Manager`; this option is an opt-in to source data from the autosave revision, allowing a user to restore autosaved changes.
Props westonruter, dlh, sayedwp, JoshuaWold, melchoyce.
See #39896.
Built from https://develop.svn.wordpress.org/trunk@41597
git-svn-id: http://core.svn.wordpress.org/trunk@41430 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-26 03:38:45 -04:00
} , args ) ;
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
if ( changes ) {
_ . extend ( submittedChanges , changes ) ;
}
// Ensure all revised settings (changes pending save) are also included, but not if marked for deletion in changes.
_ . each ( api . dirtyValues ( { unsaved : true } ) , function ( dirtyValue , settingId ) {
if ( ! changes || null !== changes [ settingId ] ) {
submittedChanges [ settingId ] = _ . extend (
{ } ,
submittedChanges [ settingId ] || { } ,
{ value : dirtyValue }
) ;
}
} ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
// Allow plugins to attach additional params to the settings.
api . trigger ( 'changeset-save' , submittedChanges , submittedArgs ) ;
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
// Short-circuit when there are no pending changes.
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
if ( ! submittedArgs . force && _ . isEmpty ( submittedChanges ) && null === submittedArgs . title && null === submittedArgs . date ) {
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
deferred . resolve ( { } ) ;
return deferred . promise ( ) ;
}
Customize: Extend changesets to support autosave revisions with restoration notifications, and introduce a new default linear history mode for saved changesets (with a filter for opt-in to changeset branching).
* Autosaved changes made on top of `auto-draft` changesets get written on top of the `auto-draft` itself, similar to how autosaves for posts will overwrite post drafts.
* Autosaved changes made to saved changesets (e.g. `draft`, `future`) will be placed into an autosave revision for that changeset and that user.
* Opening the Customizer will now prompt the user to restore their most recent auto-draft changeset; if notification is dismissed or ignored then the auto-draft will be marked as dismissed and will not be prompted to user in a notification again.
* Customizer will no longer automatically supply the `changeset_uuid` param in the `customize.php` URL when branching changesets are not active.
* If user closes Customizer explicitly via clicking on X link, then autosave auto-draft/autosave will be dismissed so as to not be prompted again.
* If there is a changeset already saved as a `draft` or `future` (UI is forthcoming) then this changeset will now be autoloaded for the user to keep making additional changes. This is the linear model for changesets.
* To restore the previous behavior of the Customizer where each session started a new changeset, regardless of whether or not there was an existing changeset saved, there is now a `customize_changeset_branching` hook which can be filtered to return `true`.
* `wp.customize.requestChangesetUpdate()` now supports a second with options including `autosave`, `title`, and `date`.
* The window `blur` event for `customize.php` has been replaced with a `visibilitychange` event to reduce autosave requests when clicking into preview window.
* Adds `autosaved` and `branching` args to `WP_Customize_Manager`.
* The `changeset_uuid` param for `WP_Customize_Manager` is extended to recognize a `false` value which causes the Customizer to defer identifying the UUID until `after_setup_theme` in the new `WP_Customize_Manager::establish_loaded_changeset()` method.
* A new `customize_autosaved` query parameter can now be supplied which is passed into the `autosaved` arg in `WP_Customize_Manager`; this option is an opt-in to source data from the autosave revision, allowing a user to restore autosaved changes.
Props westonruter, dlh, sayedwp, JoshuaWold, melchoyce.
See #39896.
Built from https://develop.svn.wordpress.org/trunk@41597
git-svn-id: http://core.svn.wordpress.org/trunk@41430 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-26 03:38:45 -04:00
// A status would cause a revision to be made, and for this wp.customize.previewer.save() should be used. Status is also disallowed for revisions regardless.
if ( submittedArgs . status ) {
return deferred . reject ( { code : 'illegal_status_in_changeset_update' } ) . promise ( ) ;
}
// Dates not beung allowed for revisions are is a technical limitation of post revisions.
if ( submittedArgs . date && submittedArgs . autosave ) {
return deferred . reject ( { code : 'illegal_autosave_with_date_gmt' } ) . promise ( ) ;
}
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
// Make sure that publishing a changeset waits for all changeset update requests to complete.
api . state ( 'processing' ) . set ( api . state ( 'processing' ) . get ( ) + 1 ) ;
deferred . always ( function ( ) {
api . state ( 'processing' ) . set ( api . state ( 'processing' ) . get ( ) - 1 ) ;
} ) ;
// Ensure that if any plugins add data to save requests by extending query() that they get included here.
data = api . previewer . query ( { excludeCustomizedSaved : true } ) ;
delete data . customized ; // Being sent in customize_changeset_data instead.
_ . extend ( data , {
nonce : api . settings . nonce . save ,
customize _theme : api . settings . theme . stylesheet ,
customize _changeset _data : JSON . stringify ( submittedChanges )
} ) ;
Customize: Extend changesets to support autosave revisions with restoration notifications, and introduce a new default linear history mode for saved changesets (with a filter for opt-in to changeset branching).
* Autosaved changes made on top of `auto-draft` changesets get written on top of the `auto-draft` itself, similar to how autosaves for posts will overwrite post drafts.
* Autosaved changes made to saved changesets (e.g. `draft`, `future`) will be placed into an autosave revision for that changeset and that user.
* Opening the Customizer will now prompt the user to restore their most recent auto-draft changeset; if notification is dismissed or ignored then the auto-draft will be marked as dismissed and will not be prompted to user in a notification again.
* Customizer will no longer automatically supply the `changeset_uuid` param in the `customize.php` URL when branching changesets are not active.
* If user closes Customizer explicitly via clicking on X link, then autosave auto-draft/autosave will be dismissed so as to not be prompted again.
* If there is a changeset already saved as a `draft` or `future` (UI is forthcoming) then this changeset will now be autoloaded for the user to keep making additional changes. This is the linear model for changesets.
* To restore the previous behavior of the Customizer where each session started a new changeset, regardless of whether or not there was an existing changeset saved, there is now a `customize_changeset_branching` hook which can be filtered to return `true`.
* `wp.customize.requestChangesetUpdate()` now supports a second with options including `autosave`, `title`, and `date`.
* The window `blur` event for `customize.php` has been replaced with a `visibilitychange` event to reduce autosave requests when clicking into preview window.
* Adds `autosaved` and `branching` args to `WP_Customize_Manager`.
* The `changeset_uuid` param for `WP_Customize_Manager` is extended to recognize a `false` value which causes the Customizer to defer identifying the UUID until `after_setup_theme` in the new `WP_Customize_Manager::establish_loaded_changeset()` method.
* A new `customize_autosaved` query parameter can now be supplied which is passed into the `autosaved` arg in `WP_Customize_Manager`; this option is an opt-in to source data from the autosave revision, allowing a user to restore autosaved changes.
Props westonruter, dlh, sayedwp, JoshuaWold, melchoyce.
See #39896.
Built from https://develop.svn.wordpress.org/trunk@41597
git-svn-id: http://core.svn.wordpress.org/trunk@41430 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-26 03:38:45 -04:00
if ( null !== submittedArgs . title ) {
data . customize _changeset _title = submittedArgs . title ;
}
if ( null !== submittedArgs . date ) {
data . customize _changeset _date = submittedArgs . date ;
}
if ( false !== submittedArgs . autosave ) {
data . customize _changeset _autosave = 'true' ;
}
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
2017-10-15 18:42:48 -04:00
// Allow plugins to modify the params included with the save request.
api . trigger ( 'save-request-params' , data ) ;
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
request = wp . ajax . post ( 'customize_save' , data ) ;
request . done ( function requestChangesetUpdateDone ( data ) {
var savedChangesetValues = { } ;
// Ensure that all settings updated subsequently will be included in the next changeset update request.
api . _lastSavedRevision = Math . max ( api . _latestRevision , api . _lastSavedRevision ) ;
api . state ( 'changesetStatus' ) . set ( data . changeset _status ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
if ( data . changeset _date ) {
api . state ( 'changesetDate' ) . set ( data . changeset _date ) ;
}
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
deferred . resolve ( data ) ;
api . trigger ( 'changeset-saved' , data ) ;
if ( data . setting _validities ) {
_ . each ( data . setting _validities , function ( validity , settingId ) {
if ( true === validity && _ . isObject ( submittedChanges [ settingId ] ) && ! _ . isUndefined ( submittedChanges [ settingId ] . value ) ) {
savedChangesetValues [ settingId ] = submittedChanges [ settingId ] . value ;
}
} ) ;
}
api . previewer . send ( 'changeset-saved' , _ . extend ( { } , data , { saved _changeset _values : savedChangesetValues } ) ) ;
} ) ;
request . fail ( function requestChangesetUpdateFail ( data ) {
deferred . reject ( data ) ;
api . trigger ( 'changeset-error' , data ) ;
} ) ;
request . always ( function ( data ) {
if ( data . setting _validities ) {
api . _handleSettingValidities ( {
settingValidities : data . setting _validities
} ) ;
}
} ) ;
return deferred . promise ( ) ;
} ;
2014-12-02 17:56:45 -05:00
2014-08-08 19:31:15 -04:00
/ * *
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
* Watch all changes to Value properties , and bubble changes to parent Values instance
*
2014-12-03 21:04:22 -05:00
* @ since 4.1 . 0
*
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
* @ param { wp . customize . Class } instance
2014-12-03 21:04:22 -05:00
* @ param { Array } properties The names of the Value instances to watch .
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
* /
2014-12-02 17:56:45 -05:00
api . utils . bubbleChildValueChanges = function ( instance , properties ) {
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
$ . each ( properties , function ( i , key ) {
instance [ key ] . bind ( function ( to , from ) {
if ( instance . parent && to !== from ) {
instance . parent . trigger ( 'change' , instance ) ;
}
} ) ;
} ) ;
} ;
/ * *
* Expand a panel , section , or control and focus on the first focusable element .
*
2014-12-03 21:04:22 -05:00
* @ since 4.1 . 0
*
* @ param { Object } [ params ]
2016-01-22 16:21:26 -05:00
* @ param { Function } [ params . completeCallback ]
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
* /
focus = function ( params ) {
2016-03-30 17:41:26 -04:00
var construct , completeCallback , focus , focusElement ;
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
construct = this ;
params = params || { } ;
focus = function ( ) {
2015-03-29 07:17:28 -04:00
var focusContainer ;
2016-09-23 18:23:30 -04:00
if ( ( construct . extended ( api . Panel ) || construct . extended ( api . Section ) ) && construct . expanded && construct . expanded ( ) ) {
focusContainer = construct . contentContainer ;
2015-03-29 07:17:28 -04:00
} else {
focusContainer = construct . container ;
}
2015-08-08 05:37:26 -04:00
2016-03-30 17:41:26 -04:00
focusElement = focusContainer . find ( '.control-focus:first' ) ;
if ( 0 === focusElement . length ) {
// Note that we can't use :focusable due to a jQuery UI issue. See: https://github.com/jquery/jquery-ui/pull/1583
focusElement = focusContainer . find ( 'input, select, textarea, button, object, a[href], [tabindex]' ) . filter ( ':visible' ) . first ( ) ;
}
focusElement . focus ( ) ;
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
} ;
if ( params . completeCallback ) {
completeCallback = params . completeCallback ;
params . completeCallback = function ( ) {
focus ( ) ;
completeCallback ( ) ;
} ;
} else {
params . completeCallback = focus ;
}
2016-09-01 01:55:27 -04:00
api . state ( 'paneVisible' ) . set ( true ) ;
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
if ( construct . expand ) {
construct . expand ( params ) ;
} else {
params . completeCallback ( ) ;
}
} ;
2014-11-03 16:35:23 -05:00
/ * *
* Stable sort for Panels , Sections , and Controls .
*
* If a . priority ( ) === b . priority ( ) , then sort by their respective params . instanceNumber .
*
2014-12-03 21:04:22 -05:00
* @ since 4.1 . 0
*
2014-11-03 16:35:23 -05:00
* @ param { ( wp . customize . Panel | wp . customize . Section | wp . customize . Control ) } a
* @ param { ( wp . customize . Panel | wp . customize . Section | wp . customize . Control ) } b
* @ returns { Number }
* /
2014-12-02 17:56:45 -05:00
api . utils . prioritySort = function ( a , b ) {
2014-11-03 16:35:23 -05:00
if ( a . priority ( ) === b . priority ( ) && typeof a . params . instanceNumber === 'number' && typeof b . params . instanceNumber === 'number' ) {
return a . params . instanceNumber - b . params . instanceNumber ;
} else {
return a . priority ( ) - b . priority ( ) ;
}
} ;
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
/ * *
* Return whether the supplied Event object is for a keydown event but not the Enter key .
*
2014-12-03 21:04:22 -05:00
* @ since 4.1 . 0
*
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
* @ param { jQuery . Event } event
* @ returns { boolean }
* /
2014-12-02 17:56:45 -05:00
api . utils . isKeydownButNotEnterEvent = function ( event ) {
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
return ( 'keydown' === event . type && 13 !== event . which ) ;
} ;
/ * *
* Return whether the two lists of elements are the same and are in the same order .
*
2014-12-03 21:04:22 -05:00
* @ since 4.1 . 0
*
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
* @ param { Array | jQuery } listA
* @ param { Array | jQuery } listB
* @ returns { boolean }
* /
2014-12-02 17:56:45 -05:00
api . utils . areElementListsEqual = function ( listA , listB ) {
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
var equal = (
listA . length === listB . length && // if lists are different lengths, then naturally they are not equal
2014-12-23 12:05:26 -05:00
- 1 === _ . indexOf ( _ . map ( // are there any false values in the list returned by map?
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
_ . zip ( listA , listB ) , // pair up each element between the two lists
function ( pair ) {
return $ ( pair [ 0 ] ) . is ( pair [ 1 ] ) ; // compare to see if each pair are equal
}
2014-12-23 12:05:26 -05:00
) , false ) // check for presence of false in map's return value
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
) ;
return equal ;
} ;
2017-10-18 18:00:50 -04:00
/ * *
* Highlight the existence of a button .
*
* This function reminds the user of a button represented by the specified
* UI element , after an optional delay . If the user focuses the element
* before the delay passes , the reminder is canceled .
*
* @ since 4.9 . 0
*
* @ param { jQuery } button - The element to highlight .
* @ param { object } [ options ] - Options .
* @ param { number } [ options . delay = 0 ] - Delay in milliseconds .
* @ param { jQuery } [ options . focusTarget ] - A target for user focus that defaults to the highlighted element .
* If the user focuses the target before the delay passes , the reminder
* is canceled . This option exists to accommodate compound buttons
* containing auxiliary UI , such as the Publish button augmented with a
* Settings button .
* @ returns { Function } An idempotent function that cancels the reminder .
* /
api . utils . highlightButton = function highlightButton ( button , options ) {
var animationClass = 'button-see-me' ,
canceled = false ,
params ;
params = _ . extend (
{
delay : 0 ,
focusTarget : button
} ,
options
) ;
function cancelReminder ( ) {
canceled = true ;
}
params . focusTarget . on ( 'focusin' , cancelReminder ) ;
setTimeout ( function ( ) {
params . focusTarget . off ( 'focusin' , cancelReminder ) ;
if ( ! canceled ) {
button . addClass ( animationClass ) ;
2017-10-19 14:38:47 -04:00
button . one ( 'animationend' , function ( ) {
/ *
* Remove animation class to avoid situations in Customizer where
* DOM nodes are moved ( re - inserted ) and the animation repeats .
* /
button . removeClass ( animationClass ) ;
} ) ;
2017-10-18 18:00:50 -04:00
}
} , params . delay ) ;
return cancelReminder ;
} ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
/ * *
* Get current timestamp adjusted for server clock time .
*
* Same functionality as the ` current_time( 'mysql', false ) ` function in PHP .
*
* @ since 4.9 . 0
*
* @ returns { int } Current timestamp .
* /
api . utils . getCurrentTimestamp = function getCurrentTimestamp ( ) {
var currentDate , currentClientTimestamp , timestampDifferential ;
currentClientTimestamp = _ . now ( ) ;
currentDate = new Date ( api . settings . initialServerDate . replace ( /-/g , '/' ) ) ;
timestampDifferential = currentClientTimestamp - api . settings . initialClientTimestamp ;
timestampDifferential += api . settings . initialClientTimestamp - api . settings . initialServerTimestamp ;
currentDate . setTime ( currentDate . getTime ( ) + timestampDifferential ) ;
return currentDate . getTime ( ) ;
} ;
/ * *
* Get remaining time of when the date is set .
*
* @ since 4.9 . 0
*
* @ param { string | int | Date } datetime - Date time or timestamp of the future date .
* @ return { int } remainingTime - Remaining time in milliseconds .
* /
api . utils . getRemainingTime = function getRemainingTime ( datetime ) {
var millisecondsDivider = 1000 , remainingTime , timestamp ;
if ( datetime instanceof Date ) {
timestamp = datetime . getTime ( ) ;
} else if ( 'string' === typeof datetime ) {
timestamp = ( new Date ( datetime . replace ( /-/g , '/' ) ) ) . getTime ( ) ;
} else {
timestamp = datetime ;
}
remainingTime = timestamp - api . utils . getCurrentTimestamp ( ) ;
remainingTime = Math . ceil ( remainingTime / millisecondsDivider ) ;
return remainingTime ;
} ;
2016-09-23 18:23:30 -04:00
/ * *
* Return browser supported ` transitionend ` event name .
*
* @ since 4.7 . 0
*
* @ returns { string | null } Normalized ` transitionend ` event name or null if CSS transitions are not supported .
* /
normalizedTransitionendEventName = ( function ( ) {
var el , transitions , prop ;
el = document . createElement ( 'div' ) ;
transitions = {
'transition' : 'transitionend' ,
'OTransition' : 'oTransitionEnd' ,
'MozTransition' : 'transitionend' ,
'WebkitTransition' : 'webkitTransitionEnd'
} ;
prop = _ . find ( _ . keys ( transitions ) , function ( prop ) {
return ! _ . isUndefined ( el . style [ prop ] ) ;
} ) ;
if ( prop ) {
return transitions [ prop ] ;
} else {
return null ;
}
} ) ( ) ;
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
/ * *
2014-12-03 21:04:22 -05:00
* Base class for Panel and Section .
*
* @ since 4.1 . 0
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
*
2014-11-11 18:52:22 -05:00
* @ class
2014-08-08 19:31:15 -04:00
* @ augments wp . customize . Class
* /
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
Container = api . Class . extend ( {
2014-11-11 17:37:22 -05:00
defaultActiveArguments : { duration : 'fast' , completeCallback : $ . noop } ,
defaultExpandedArguments : { duration : 'fast' , completeCallback : $ . noop } ,
2015-05-29 20:03:30 -04:00
containerType : 'container' ,
2015-06-01 18:47:25 -04:00
defaults : {
title : '' ,
description : '' ,
priority : 100 ,
type : 'default' ,
content : null ,
active : true ,
instanceNumber : null
} ,
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
2014-12-03 21:04:22 -05:00
/ * *
* @ since 4.1 . 0
*
2015-06-01 18:47:25 -04:00
* @ param { string } id - The ID for the container .
* @ param { object } options - Object containing one property : params .
2017-10-04 02:48:46 -04:00
* @ param { string } options . title - Title shown when panel is collapsed and expanded .
* @ param { string = } [ options . description ] - Description shown at the top of the panel .
* @ param { number = 100 } [ options . priority ] - The sort priority for the panel .
* @ param { string } [ options . templateId ] - Template selector for container .
* @ param { string = default } [ options . type ] - The type of the panel . See wp . customize . panelConstructor .
* @ param { string = } [ options . content ] - The markup to be used for the panel container . If empty , a JS template is used .
* @ param { boolean = true } [ options . active ] - Whether the panel is active or not .
* @ param { object } [ options . params ] - Deprecated wrapper for the above properties .
2014-12-03 21:04:22 -05:00
* /
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
initialize : function ( id , options ) {
var container = this ;
container . id = id ;
2015-06-01 18:47:25 -04:00
2017-10-04 02:48:46 -04:00
if ( ! Container . instanceCounter ) {
Container . instanceCounter = 0 ;
}
Container . instanceCounter ++ ;
2015-06-01 18:47:25 -04:00
2017-10-04 02:48:46 -04:00
$ . extend ( container , {
params : _ . defaults (
options . params || options , // Passing the params is deprecated.
container . defaults
)
} ) ;
if ( ! container . params . instanceNumber ) {
container . params . instanceNumber = Container . instanceCounter ;
}
2017-09-19 01:40:44 -04:00
container . notifications = new api . Notifications ( ) ;
2017-10-04 02:48:46 -04:00
container . templateSelector = container . params . templateId || 'customize-' + container . containerType + '-' + container . params . type ;
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
container . container = $ ( container . params . content ) ;
2015-05-29 20:03:30 -04:00
if ( 0 === container . container . length ) {
container . container = $ ( container . getContainer ( ) ) ;
}
2016-09-23 18:23:30 -04:00
container . headContainer = container . container ;
container . contentContainer = container . getContent ( ) ;
container . container = container . container . add ( container . contentContainer ) ;
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
container . deferred = {
2014-12-02 17:56:45 -05:00
embedded : new $ . Deferred ( )
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
} ;
container . priority = new api . Value ( ) ;
container . active = new api . Value ( ) ;
container . activeArgumentsQueue = [ ] ;
container . expanded = new api . Value ( ) ;
container . expandedArgumentsQueue = [ ] ;
container . active . bind ( function ( active ) {
var args = container . activeArgumentsQueue . shift ( ) ;
args = $ . extend ( { } , container . defaultActiveArguments , args ) ;
active = ( active && container . isContextuallyActive ( ) ) ;
container . onChangeActive ( active , args ) ;
} ) ;
container . expanded . bind ( function ( expanded ) {
var args = container . expandedArgumentsQueue . shift ( ) ;
args = $ . extend ( { } , container . defaultExpandedArguments , args ) ;
container . onChangeExpanded ( expanded , args ) ;
} ) ;
2012-08-22 20:04:18 -04:00
2015-05-29 20:03:30 -04:00
container . deferred . embedded . done ( function ( ) {
2017-09-19 01:40:44 -04:00
container . setupNotifications ( ) ;
2015-05-29 20:03:30 -04:00
container . attachEvents ( ) ;
} ) ;
2012-08-22 20:04:18 -04:00
2014-12-02 17:56:45 -05:00
api . utils . bubbleChildValueChanges ( container , [ 'priority' , 'active' ] ) ;
2012-08-22 20:04:18 -04:00
2015-06-01 18:47:25 -04:00
container . priority . set ( container . params . priority ) ;
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
container . active . set ( container . params . active ) ;
2014-12-02 17:56:45 -05:00
container . expanded . set ( false ) ;
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
} ,
2017-09-19 01:40:44 -04:00
/ * *
* Get the element that will contain the notifications .
*
* @ since 4.9 . 0
* @ returns { jQuery } Notification container element .
* @ this { wp . customize . Control }
* /
getNotificationsContainerElement : function ( ) {
var container = this ;
return container . contentContainer . find ( '.customize-control-notifications-container:first' ) ;
} ,
/ * *
* Set up notifications .
*
* @ since 4.9 . 0
* @ returns { void }
* /
setupNotifications : function ( ) {
var container = this , renderNotifications ;
container . notifications . container = container . getNotificationsContainerElement ( ) ;
// Render notifications when they change and when the construct is expanded.
renderNotifications = function ( ) {
if ( container . expanded . get ( ) ) {
container . notifications . render ( ) ;
}
} ;
container . expanded . bind ( renderNotifications ) ;
renderNotifications ( ) ;
container . notifications . bind ( 'change' , _ . debounce ( renderNotifications ) ) ;
} ,
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
/ * *
2014-12-03 21:04:22 -05:00
* @ since 4.1 . 0
*
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
* @ abstract
* /
ready : function ( ) { } ,
/ * *
* Get the child models associated with this parent , sorting them by their priority Value .
*
2014-12-03 21:04:22 -05:00
* @ since 4.1 . 0
*
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
* @ param { String } parentType
* @ param { String } childType
* @ returns { Array }
* /
_children : function ( parentType , childType ) {
var parent = this ,
children = [ ] ;
api [ childType ] . each ( function ( child ) {
if ( child [ parentType ] . get ( ) === parent . id ) {
children . push ( child ) ;
}
} ) ;
2014-12-02 17:56:45 -05:00
children . sort ( api . utils . prioritySort ) ;
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
return children ;
} ,
/ * *
* To override by subclass , to return whether the container has active children .
2014-12-03 21:04:22 -05:00
*
* @ since 4.1 . 0
*
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
* @ abstract
* /
isContextuallyActive : function ( ) {
2014-12-02 17:56:45 -05:00
throw new Error ( 'Container.isContextuallyActive() must be overridden in a subclass.' ) ;
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
} ,
/ * *
2015-09-05 15:53:24 -04:00
* Active state change handler .
2014-12-03 21:04:22 -05:00
*
2015-09-05 15:53:24 -04:00
* Shows the container if it is active , hides it if not .
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
*
* To override by subclass , update the container ' s UI to reflect the provided active state .
*
2014-12-03 21:04:22 -05:00
* @ since 4.1 . 0
*
2017-03-18 20:04:43 -04:00
* @ param { boolean } active - The active state to transiution to .
* @ param { Object } [ args ] - Args .
* @ param { Object } [ args . duration ] - The duration for the slideUp / slideDown animation .
* @ param { boolean } [ args . unchanged ] - Whether the state is already known to not be changed , and so short - circuit with calling completeCallback early .
* @ param { Function } [ args . completeCallback ] - Function to call when the slideUp / slideDown has completed .
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
* /
2015-08-26 03:26:21 -04:00
onChangeActive : function ( active , args ) {
2016-09-23 18:23:30 -04:00
var construct = this ,
headContainer = construct . headContainer ,
duration , expandedOtherPanel ;
2015-08-26 03:26:21 -04:00
if ( args . unchanged ) {
if ( args . completeCallback ) {
args . completeCallback ( ) ;
}
return ;
}
2015-06-12 18:28:25 -04:00
duration = ( 'resolved' === api . previewer . deferred . active . state ( ) ? args . duration : 0 ) ;
2015-10-16 19:48:25 -04:00
if ( construct . extended ( api . Panel ) ) {
// If this is a panel is not currently expanded but another panel is expanded, do not animate.
api . panel . each ( function ( panel ) {
if ( panel !== construct && panel . expanded ( ) ) {
expandedOtherPanel = panel ;
duration = 0 ;
}
} ) ;
// Collapse any expanded sections inside of this panel first before deactivating.
if ( ! active ) {
_ . each ( construct . sections ( ) , function ( section ) {
section . collapse ( { duration : 0 } ) ;
} ) ;
}
}
2017-03-18 20:04:43 -04:00
if ( ! $ . contains ( document , headContainer . get ( 0 ) ) ) {
// If the element is not in the DOM, then jQuery.fn.slideUp() does nothing. In this case, a hard toggle is required instead.
2016-09-23 18:23:30 -04:00
headContainer . toggle ( active ) ;
2014-12-15 14:54:21 -05:00
if ( args . completeCallback ) {
args . completeCallback ( ) ;
}
2014-11-11 17:37:22 -05:00
} else if ( active ) {
2017-03-18 20:04:43 -04:00
headContainer . slideDown ( duration , args . completeCallback ) ;
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
} else {
2015-06-12 18:28:25 -04:00
if ( construct . expanded ( ) ) {
construct . collapse ( {
duration : duration ,
completeCallback : function ( ) {
2017-03-18 20:04:43 -04:00
headContainer . slideUp ( duration , args . completeCallback ) ;
2015-06-12 18:28:25 -04:00
}
} ) ;
} else {
2017-03-18 20:04:43 -04:00
headContainer . slideUp ( duration , args . completeCallback ) ;
2015-06-12 18:28:25 -04:00
}
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
}
} ,
/ * *
2014-12-03 21:04:22 -05:00
* @ since 4.1 . 0
*
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
* @ params { Boolean } active
2014-12-03 21:04:22 -05:00
* @ param { Object } [ params ]
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
* @ returns { Boolean } false if state already applied
* /
_toggleActive : function ( active , params ) {
var self = this ;
params = params || { } ;
if ( ( active && this . active . get ( ) ) || ( ! active && ! this . active . get ( ) ) ) {
params . unchanged = true ;
self . onChangeActive ( self . active . get ( ) , params ) ;
return false ;
} else {
params . unchanged = false ;
this . activeArgumentsQueue . push ( params ) ;
this . active . set ( active ) ;
return true ;
}
} ,
/ * *
* @ param { Object } [ params ]
* @ returns { Boolean } false if already active
* /
activate : function ( params ) {
return this . _toggleActive ( true , params ) ;
} ,
/ * *
* @ param { Object } [ params ]
* @ returns { Boolean } false if already inactive
* /
deactivate : function ( params ) {
return this . _toggleActive ( false , params ) ;
} ,
/ * *
* To override by subclass , update the container ' s UI to reflect the provided active state .
* @ abstract
* /
onChangeExpanded : function ( ) {
throw new Error ( 'Must override with subclass.' ) ;
} ,
/ * *
2015-10-16 19:48:25 -04:00
* Handle the toggle logic for expand / collapse .
*
* @ param { Boolean } expanded - The new state to apply .
* @ param { Object } [ params ] - Object containing options for expand / collapse .
* @ param { Function } [ params . completeCallback ] - Function to call when expansion / collapse is complete .
* @ returns { Boolean } false if state already applied or active state is false
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
* /
2015-10-16 19:48:25 -04:00
_toggleExpanded : function ( expanded , params ) {
var instance = this , previousCompleteCallback ;
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
params = params || { } ;
2015-10-16 19:48:25 -04:00
previousCompleteCallback = params . completeCallback ;
// Short-circuit expand() if the instance is not active.
if ( expanded && ! instance . active ( ) ) {
return false ;
}
2016-09-01 01:55:27 -04:00
api . state ( 'paneVisible' ) . set ( true ) ;
2015-10-16 19:48:25 -04:00
params . completeCallback = function ( ) {
2015-03-07 06:06:29 -05:00
if ( previousCompleteCallback ) {
2015-10-16 19:48:25 -04:00
previousCompleteCallback . apply ( instance , arguments ) ;
2015-03-07 06:06:29 -05:00
}
if ( expanded ) {
2015-10-16 19:48:25 -04:00
instance . container . trigger ( 'expanded' ) ;
2015-03-07 06:06:29 -05:00
} else {
2015-10-16 19:48:25 -04:00
instance . container . trigger ( 'collapsed' ) ;
2015-03-07 06:06:29 -05:00
}
} ;
2015-10-16 19:48:25 -04:00
if ( ( expanded && instance . expanded . get ( ) ) || ( ! expanded && ! instance . expanded . get ( ) ) ) {
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
params . unchanged = true ;
2015-10-16 19:48:25 -04:00
instance . onChangeExpanded ( instance . expanded . get ( ) , params ) ;
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
return false ;
} else {
params . unchanged = false ;
2015-10-16 19:48:25 -04:00
instance . expandedArgumentsQueue . push ( params ) ;
instance . expanded . set ( expanded ) ;
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
return true ;
}
} ,
/ * *
* @ param { Object } [ params ]
2015-10-16 19:48:25 -04:00
* @ returns { Boolean } false if already expanded or if inactive .
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
* /
expand : function ( params ) {
return this . _toggleExpanded ( true , params ) ;
} ,
/ * *
* @ param { Object } [ params ]
2015-10-16 19:48:25 -04:00
* @ returns { Boolean } false if already collapsed .
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
* /
collapse : function ( params ) {
return this . _toggleExpanded ( false , params ) ;
} ,
2016-09-23 18:23:30 -04:00
/ * *
* Animate container state change if transitions are supported by the browser .
*
* @ since 4.7 . 0
2016-11-23 01:05:32 -05:00
* @ private
2016-09-23 18:23:30 -04:00
*
* @ param { function } completeCallback Function to be called after transition is completed .
* @ returns { void }
* /
_animateChangeExpanded : function ( completeCallback ) {
// Return if CSS transitions are not supported.
if ( ! normalizedTransitionendEventName ) {
if ( completeCallback ) {
completeCallback ( ) ;
}
return ;
}
var construct = this ,
content = construct . contentContainer ,
overlay = content . closest ( '.wp-full-overlay' ) ,
2017-04-07 15:27:40 -04:00
elements , transitionEndCallback , transitionParentPane ;
2016-09-23 18:23:30 -04:00
// Determine set of elements that are affected by the animation.
elements = overlay . add ( content ) ;
2017-04-07 15:27:40 -04:00
if ( ! construct . panel || '' === construct . panel ( ) ) {
transitionParentPane = true ;
} else if ( api . panel ( construct . panel ( ) ) . contentContainer . hasClass ( 'skip-transition' ) ) {
transitionParentPane = true ;
} else {
transitionParentPane = false ;
}
if ( transitionParentPane ) {
2016-09-23 18:23:30 -04:00
elements = elements . add ( '#customize-info, .customize-pane-parent' ) ;
}
// Handle `transitionEnd` event.
transitionEndCallback = function ( e ) {
if ( 2 !== e . eventPhase || ! $ ( e . target ) . is ( content ) ) {
return ;
}
content . off ( normalizedTransitionendEventName , transitionEndCallback ) ;
elements . removeClass ( 'busy' ) ;
if ( completeCallback ) {
completeCallback ( ) ;
}
} ;
content . on ( normalizedTransitionendEventName , transitionEndCallback ) ;
elements . addClass ( 'busy' ) ;
// Prevent screen flicker when pane has been scrolled before expanding.
_ . defer ( function ( ) {
var container = content . closest ( '.wp-full-overlay-sidebar-content' ) ,
currentScrollTop = container . scrollTop ( ) ,
previousScrollTop = content . data ( 'previous-scrollTop' ) || 0 ,
expanded = construct . expanded ( ) ;
if ( expanded && 0 < currentScrollTop ) {
content . css ( 'top' , currentScrollTop + 'px' ) ;
content . data ( 'previous-scrollTop' , currentScrollTop ) ;
} else if ( ! expanded && 0 < currentScrollTop + previousScrollTop ) {
content . css ( 'top' , previousScrollTop - currentScrollTop + 'px' ) ;
container . scrollTop ( previousScrollTop ) ;
}
} ) ;
} ,
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
/ * *
* Bring the container into view and then expand this and bring it into view
* @ param { Object } [ params ]
* /
2015-05-29 20:03:30 -04:00
focus : focus ,
/ * *
* Return the container html , generated from its JS template , if it exists .
*
* @ since 4.3 . 0
* /
getContainer : function ( ) {
var template ,
container = this ;
if ( 0 !== $ ( '#tmpl-' + container . templateSelector ) . length ) {
template = wp . template ( container . templateSelector ) ;
2015-06-01 18:47:25 -04:00
} else {
template = wp . template ( 'customize-' + container . containerType + '-default' ) ;
}
if ( template && container . container ) {
2017-10-28 02:37:47 -04:00
return $ . trim ( template ( _ . extend (
{ id : container . id } ,
container . params
) ) ) ;
2015-05-29 20:03:30 -04:00
}
return '<li></li>' ;
2016-09-23 18:23:30 -04:00
} ,
/ * *
* Find content element which is displayed when the section is expanded .
*
* After a construct is initialized , the return value will be available via the ` contentContainer ` property .
* By default the element will be related it to the parent container with ` aria-owns ` and detached .
* Custom panels and sections ( such as the ` NewMenuSection ` ) that do not have a sliding pane should
* just return the content element without needing to add the ` aria-owns ` element or detach it from
* the container . Such non - sliding pane custom sections also need to override the ` onChangeExpanded `
* method to handle animating the panel / section into and out of view .
*
* @ since 4.7 . 0
2016-11-23 01:05:32 -05:00
* @ access public
2016-09-23 18:23:30 -04:00
*
* @ returns { jQuery } Detached content element .
* /
getContent : function ( ) {
var construct = this ,
container = construct . container ,
content = container . find ( '.accordion-section-content, .control-panel-content' ) . first ( ) ,
contentId = 'sub-' + container . attr ( 'id' ) ,
ownedElements = contentId ,
alreadyOwnedElements = container . attr ( 'aria-owns' ) ;
if ( alreadyOwnedElements ) {
ownedElements = ownedElements + ' ' + alreadyOwnedElements ;
}
container . attr ( 'aria-owns' , ownedElements ) ;
return content . detach ( ) . attr ( {
'id' : contentId ,
'class' : 'customize-pane-child ' + content . attr ( 'class' ) + ' ' + container . attr ( 'class' )
} ) ;
2015-05-29 20:03:30 -04:00
}
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
} ) ;
/ * *
2014-12-03 21:04:22 -05:00
* @ since 4.1 . 0
*
2014-11-11 18:52:22 -05:00
* @ class
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
* @ augments wp . customize . Class
* /
api . Section = Container . extend ( {
2015-05-29 20:03:30 -04:00
containerType : 'section' ,
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
containerParent : '#customize-theme-controls' ,
containerPaneParent : '.customize-pane-parent' ,
2015-06-01 18:47:25 -04:00
defaults : {
title : '' ,
description : '' ,
priority : 100 ,
type : 'default' ,
content : null ,
active : true ,
instanceNumber : null ,
panel : null ,
customizeAction : ''
} ,
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
/ * *
2014-12-03 21:04:22 -05:00
* @ since 4.1 . 0
*
2015-06-01 18:47:25 -04:00
* @ param { string } id - The ID for the section .
2017-10-04 02:48:46 -04:00
* @ param { object } options - Options .
* @ param { string } options . title - Title shown when section is collapsed and expanded .
* @ param { string = } [ options . description ] - Description shown at the top of the section .
* @ param { number = 100 } [ options . priority ] - The sort priority for the section .
* @ param { string = default } [ options . type ] - The type of the section . See wp . customize . sectionConstructor .
* @ param { string = } [ options . content ] - The markup to be used for the section container . If empty , a JS template is used .
* @ param { boolean = true } [ options . active ] - Whether the section is active or not .
* @ param { string } options . panel - The ID for the panel this section is associated with .
* @ param { string = } [ options . customizeAction ] - Additional context information shown before the section title when expanded .
* @ param { object } [ options . params ] - Deprecated wrapper for the above properties .
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
* /
initialize : function ( id , options ) {
Customize: Improve the menu creation flow.
Often, folks run into two issues when they create new menus: they click "Add a Menu" thinking it will add a new page to their menu, or they forget to assign their new menu to a location, and then wonder why it doesn't show up on their site.
This commit rearranges the order of items in the menu panel, and updates the flow for creating a menu by breaking it up into steps. Additionally, more help text has been added to guide people through the process of creating a menu.
Also adds default `type` lookups for Panel and Section instances. See #30741.
Props bpayton, obenland, westonruter, celloexpessions, afercia, melchoyce, zoonini, michelleweber.
Fixes #40104.
Built from https://develop.svn.wordpress.org/trunk@41768
git-svn-id: http://core.svn.wordpress.org/trunk@41602 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-10-04 22:22:49 -04:00
var section = this , params ;
params = options . params || options ;
// Look up the type if one was not supplied.
if ( ! params . type ) {
_ . find ( api . sectionConstructor , function ( Constructor , type ) {
if ( Constructor === section . constructor ) {
params . type = type ;
return true ;
}
return false ;
} ) ;
}
Container . prototype . initialize . call ( section , id , params ) ;
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
section . id = id ;
section . panel = new api . Value ( ) ;
section . panel . bind ( function ( id ) {
2016-09-23 18:23:30 -04:00
$ ( section . headContainer ) . toggleClass ( 'control-subsection' , ! ! id ) ;
2012-08-22 20:04:18 -04:00
} ) ;
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
section . panel . set ( section . params . panel || '' ) ;
2014-12-02 17:56:45 -05:00
api . utils . bubbleChildValueChanges ( section , [ 'panel' ] ) ;
2012-08-22 20:04:18 -04:00
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
section . embed ( ) ;
2014-12-02 17:56:45 -05:00
section . deferred . embedded . done ( function ( ) {
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
section . ready ( ) ;
} ) ;
} ,
2012-08-22 20:04:18 -04:00
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
/ * *
* Embed the container in the DOM when any parent panel is ready .
2014-12-03 21:04:22 -05:00
*
* @ since 4.1 . 0
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
* /
embed : function ( ) {
2016-09-23 18:23:30 -04:00
var inject ,
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
section = this ;
section . containerParent = api . ensure ( section . containerParent ) ;
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
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
// Watch for changes to the panel state.
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
inject = function ( panelId ) {
var parentContainer ;
if ( panelId ) {
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
// The panel has been supplied, so wait until the panel object is registered.
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
api . panel ( panelId , function ( panel ) {
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
// The panel has been registered, wait for it to become ready/initialized.
2014-12-02 17:56:45 -05:00
panel . deferred . embedded . done ( function ( ) {
2016-09-23 18:23:30 -04:00
parentContainer = panel . contentContainer ;
if ( ! section . headContainer . parent ( ) . is ( parentContainer ) ) {
parentContainer . append ( section . headContainer ) ;
}
if ( ! section . contentContainer . parent ( ) . is ( section . headContainer ) ) {
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
section . containerParent . append ( section . contentContainer ) ;
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
}
2014-12-02 17:56:45 -05:00
section . deferred . embedded . resolve ( ) ;
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
} ) ;
} ) ;
} else {
// There is no panel, so embed the section in the root of the customizer
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
parentContainer = api . ensure ( section . containerPaneParent ) ;
2016-09-23 18:23:30 -04:00
if ( ! section . headContainer . parent ( ) . is ( parentContainer ) ) {
parentContainer . append ( section . headContainer ) ;
}
if ( ! section . contentContainer . parent ( ) . is ( section . headContainer ) ) {
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
section . containerParent . append ( section . contentContainer ) ;
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
}
2014-12-02 17:56:45 -05:00
section . deferred . embedded . resolve ( ) ;
2012-08-22 20:04:18 -04:00
}
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
} ;
section . panel . bind ( inject ) ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
inject ( section . panel . get ( ) ) ; // Since a section may never get a panel, assume that it won't ever get one.
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
} ,
2012-08-22 20:04:18 -04:00
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
/ * *
2014-12-03 21:04:22 -05:00
* Add behaviors for the accordion section .
*
* @ since 4.1 . 0
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
* /
attachEvents : function ( ) {
2016-10-19 14:15:31 -04:00
var meta , content , section = this ;
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
2016-10-25 00:36:39 -04:00
if ( section . container . hasClass ( 'cannot-expand' ) ) {
return ;
}
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
// Expand/Collapse accordion sections on click.
2015-05-29 09:57:26 -04:00
section . container . find ( '.accordion-section-title, .customize-section-back' ) . on ( 'click keydown' , function ( event ) {
2014-12-02 17:56:45 -05:00
if ( api . utils . isKeydownButNotEnterEvent ( event ) ) {
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
return ;
}
event . preventDefault ( ) ; // Keep this AFTER the key filter above
if ( section . expanded ( ) ) {
section . collapse ( ) ;
} else {
section . expand ( ) ;
}
} ) ;
2016-10-19 14:15:31 -04:00
// This is very similar to what is found for api.Panel.attachEvents().
section . container . find ( '.customize-section-title .customize-help-toggle' ) . on ( 'click' , function ( ) {
meta = section . container . find ( '.section-meta' ) ;
if ( meta . hasClass ( 'cannot-expand' ) ) {
return ;
}
content = meta . find ( '.customize-section-description:first' ) ;
content . toggleClass ( 'open' ) ;
2017-10-02 14:55:47 -04:00
content . slideToggle ( section . defaultExpandedArguments . duration , function ( ) {
content . trigger ( 'toggled' ) ;
} ) ;
2017-09-24 12:00:46 -04:00
$ ( this ) . attr ( 'aria-expanded' , function ( i , attr ) {
2016-11-23 01:05:32 -05:00
return 'true' === attr ? 'false' : 'true' ;
2016-10-19 14:15:31 -04:00
} ) ;
} ) ;
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
} ,
/ * *
* Return whether this section has any active controls .
*
2014-12-03 21:04:22 -05:00
* @ since 4.1 . 0
*
* @ returns { Boolean }
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
* /
isContextuallyActive : function ( ) {
var section = this ,
controls = section . controls ( ) ,
activeCount = 0 ;
_ ( controls ) . each ( function ( control ) {
if ( control . active ( ) ) {
activeCount += 1 ;
}
} ) ;
return ( activeCount !== 0 ) ;
} ,
/ * *
* Get the controls that are associated with this section , sorted by their priority Value .
*
2014-12-03 21:04:22 -05:00
* @ since 4.1 . 0
*
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
* @ returns { Array }
* /
controls : function ( ) {
return this . _children ( 'section' , 'control' ) ;
} ,
/ * *
2014-12-03 21:04:22 -05:00
* Update UI to reflect expanded state .
*
* @ since 4.1 . 0
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
*
* @ param { Boolean } expanded
2014-12-03 21:04:22 -05:00
* @ param { Object } args
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
* /
onChangeExpanded : function ( expanded , args ) {
2015-08-11 19:56:25 -04:00
var section = this ,
2016-09-23 18:23:30 -04:00
container = section . headContainer . closest ( '.wp-full-overlay-sidebar-content' ) ,
content = section . contentContainer ,
overlay = section . headContainer . closest ( '.wp-full-overlay' ) ,
backBtn = content . find ( '.customize-section-back' ) ,
sectionTitle = section . headContainer . find ( '.accordion-section-title' ) . first ( ) ,
2017-04-07 15:27:40 -04:00
expand , panel ;
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
2016-09-23 18:23:30 -04:00
if ( expanded && ! content . hasClass ( 'open' ) ) {
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
if ( args . unchanged ) {
expand = args . completeCallback ;
} else {
2016-09-23 18:23:30 -04:00
expand = $ . proxy ( function ( ) {
section . _animateChangeExpanded ( function ( ) {
sectionTitle . attr ( 'tabindex' , '-1' ) ;
backBtn . attr ( 'tabindex' , '0' ) ;
backBtn . focus ( ) ;
content . css ( 'top' , '' ) ;
container . scrollTop ( 0 ) ;
2015-08-11 19:56:25 -04:00
2016-09-23 18:23:30 -04:00
if ( args . completeCallback ) {
args . completeCallback ( ) ;
}
} ) ;
2015-08-11 19:56:25 -04:00
2016-09-23 18:23:30 -04:00
content . addClass ( 'open' ) ;
overlay . addClass ( 'section-open' ) ;
2016-10-21 02:37:30 -04:00
api . state ( 'expandedSection' ) . set ( section ) ;
2016-09-23 18:23:30 -04:00
} , this ) ;
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
}
if ( ! args . allowMultiple ) {
api . section . each ( function ( otherSection ) {
if ( otherSection !== section ) {
otherSection . collapse ( { duration : args . duration } ) ;
}
} ) ;
}
if ( section . panel ( ) ) {
api . panel ( section . panel ( ) ) . expand ( {
duration : args . duration ,
completeCallback : expand
} ) ;
} else {
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
if ( ! args . allowMultiple ) {
api . panel . each ( function ( panel ) {
panel . collapse ( ) ;
} ) ;
}
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
expand ( ) ;
}
2016-09-23 18:23:30 -04:00
} else if ( ! expanded && content . hasClass ( 'open' ) ) {
2017-04-07 15:27:40 -04:00
if ( section . panel ( ) ) {
panel = api . panel ( section . panel ( ) ) ;
if ( panel . contentContainer . hasClass ( 'skip-transition' ) ) {
panel . collapse ( ) ;
}
}
2016-09-23 18:23:30 -04:00
section . _animateChangeExpanded ( function ( ) {
backBtn . attr ( 'tabindex' , '-1' ) ;
sectionTitle . attr ( 'tabindex' , '0' ) ;
sectionTitle . focus ( ) ;
content . css ( 'top' , '' ) ;
if ( args . completeCallback ) {
args . completeCallback ( ) ;
}
} ) ;
content . removeClass ( 'open' ) ;
2015-05-29 09:57:26 -04:00
overlay . removeClass ( 'section-open' ) ;
2016-10-21 02:37:30 -04:00
if ( section === api . state ( 'expandedSection' ) . get ( ) ) {
api . state ( 'expandedSection' ) . set ( false ) ;
}
2016-09-23 18:23:30 -04:00
2015-06-12 18:28:25 -04:00
} else {
if ( args . completeCallback ) {
args . completeCallback ( ) ;
}
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
}
}
} ) ;
2015-02-24 15:31:24 -05:00
/ * *
* wp . customize . ThemesSection
*
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
* Custom section for themes that loads themes by category , and also
* handles the theme - details view rendering and navigation .
2015-02-24 15:31:24 -05:00
*
* @ constructor
* @ augments wp . customize . Section
* @ augments wp . customize . Container
* /
api . ThemesSection = api . Section . extend ( {
currentTheme : '' ,
overlay : '' ,
template : '' ,
2015-04-08 16:52:29 -04:00
screenshotQueue : null ,
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
$window : null ,
$body : null ,
loaded : 0 ,
loading : false ,
fullyLoaded : false ,
term : '' ,
tags : '' ,
nextTerm : '' ,
nextTags : '' ,
filtersHeight : 0 ,
headerContainer : null ,
2017-10-29 23:57:52 -04:00
updateCountDebounced : null ,
2015-04-13 18:10:29 -04:00
/ * *
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
* Initialize .
*
* @ since 4.9 . 0
*
* @ param { string } id - ID .
* @ param { object } options - Options .
* @ returns { void }
* /
initialize : function ( id , options ) {
var section = this ;
section . headerContainer = $ ( ) ;
section . $window = $ ( window ) ;
section . $body = $ ( document . body ) ;
api . Section . prototype . initialize . call ( section , id , options ) ;
2017-10-29 23:57:52 -04:00
section . updateCountDebounced = _ . debounce ( section . updateCount , 500 ) ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
} ,
/ * *
* Embed the section in the DOM when the themes panel is ready .
*
* Insert the section before the themes container . Assume that a themes section is within a panel , but not necessarily the themes panel .
*
* @ since 4.9 . 0
2015-04-13 18:10:29 -04:00
* /
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
embed : function ( ) {
var inject ,
section = this ;
// Watch for changes to the panel state
inject = function ( panelId ) {
var parentContainer ;
api . panel ( panelId , function ( panel ) {
// The panel has been registered, wait for it to become ready/initialized
panel . deferred . embedded . done ( function ( ) {
parentContainer = panel . contentContainer ;
if ( ! section . headContainer . parent ( ) . is ( parentContainer ) ) {
parentContainer . find ( '.customize-themes-full-container-container' ) . before ( section . headContainer ) ;
}
if ( ! section . contentContainer . parent ( ) . is ( section . headContainer ) ) {
section . containerParent . append ( section . contentContainer ) ;
}
section . deferred . embedded . resolve ( ) ;
} ) ;
} ) ;
} ;
section . panel . bind ( inject ) ;
inject ( section . panel . get ( ) ) ; // Since a section may never get a panel, assume that it won't ever get one
2015-04-13 18:10:29 -04:00
} ,
2015-02-24 15:31:24 -05:00
/ * *
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
* Set up .
*
2015-02-24 15:31:24 -05:00
* @ since 4.2 . 0
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
*
* @ returns { void }
2015-02-24 15:31:24 -05:00
* /
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
ready : function ( ) {
2015-02-24 15:31:24 -05:00
var section = this ;
section . overlay = section . container . find ( '.theme-overlay' ) ;
section . template = wp . template ( 'customize-themes-details-view' ) ;
// Bind global keyboard events.
2016-11-04 13:08:33 -04:00
section . container . on ( 'keydown' , function ( event ) {
2015-02-24 15:31:24 -05:00
if ( ! section . overlay . find ( '.theme-wrap' ) . is ( ':visible' ) ) {
return ;
}
// Pressing the right arrow key fires a theme:next event
if ( 39 === event . keyCode ) {
section . nextTheme ( ) ;
}
// Pressing the left arrow key fires a theme:previous event
if ( 37 === event . keyCode ) {
section . previousTheme ( ) ;
}
// Pressing the escape key fires a theme:collapse event
if ( 27 === event . keyCode ) {
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
if ( section . $body . hasClass ( 'modal-open' ) ) {
// Escape from the details modal.
section . closeDetails ( ) ;
} else {
// Escape from the inifinite scroll list.
section . headerContainer . find ( '.customize-themes-section-title' ) . focus ( ) ;
}
2016-11-04 13:08:33 -04:00
event . stopPropagation ( ) ; // Prevent section from being collapsed.
2015-02-24 15:31:24 -05:00
}
} ) ;
2015-04-08 16:52:29 -04:00
2017-09-29 17:52:45 -04:00
section . renderScreenshots = _ . throttle ( section . renderScreenshots , 100 ) ;
_ . bindAll ( section , 'renderScreenshots' , 'loadMore' , 'checkTerm' , 'filtersChecked' ) ;
2015-02-24 15:31:24 -05:00
} ,
2015-04-08 13:53:28 -04:00
/ * *
* Override Section . isContextuallyActive method .
*
* Ignore the active states ' of the contained theme controls , and just
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
* use the section ' s own active state instead . This prevents empty search
* results for theme sections from causing the section to become inactive .
2015-04-08 13:53:28 -04:00
*
* @ since 4.2 . 0
*
* @ returns { Boolean }
* /
isContextuallyActive : function ( ) {
return this . active ( ) ;
} ,
2015-02-24 15:31:24 -05:00
/ * *
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
* Attach events .
*
2015-02-24 15:31:24 -05:00
* @ since 4.2 . 0
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
*
* @ returns { void }
2015-02-24 15:31:24 -05:00
* /
attachEvents : function ( ) {
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
var section = this , debounced ;
2015-02-24 15:31:24 -05:00
2017-09-11 01:23:48 -04:00
// Expand/Collapse accordion sections on click.
section . container . find ( '.customize-section-back' ) . on ( 'click keydown' , function ( event ) {
if ( api . utils . isKeydownButNotEnterEvent ( event ) ) {
return ;
}
event . preventDefault ( ) ; // Keep this AFTER the key filter above
section . collapse ( ) ;
} ) ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
section . headerContainer = $ ( '#accordion-section-' + section . id ) ;
// Expand section/panel. Only collapse when opening another section.
section . headerContainer . on ( 'click' , '.customize-themes-section-title' , function ( ) {
// Toggle accordion filters under section headers.
if ( section . headerContainer . find ( '.filter-details' ) . length ) {
section . headerContainer . find ( '.customize-themes-section-title' )
. toggleClass ( 'details-open' )
. attr ( 'aria-expanded' , function ( i , attr ) {
return 'true' === attr ? 'false' : 'true' ;
} ) ;
section . headerContainer . find ( '.filter-details' ) . slideToggle ( 180 ) ;
2015-02-24 15:31:24 -05:00
}
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
// Open the section.
if ( ! section . expanded ( ) ) {
2016-11-04 13:18:26 -04:00
section . expand ( ) ;
2015-02-24 15:31:24 -05:00
}
2016-10-18 23:20:29 -04:00
} ) ;
2015-02-24 15:31:24 -05:00
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
// Preview installed themes.
section . container . on ( 'click' , '.theme-actions .preview-theme' , function ( ) {
2017-10-01 23:37:46 -04:00
api . panel ( 'themes' ) . loadThemePreview ( $ ( this ) . data ( 'slug' ) ) ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
} ) ;
2015-02-24 15:31:24 -05:00
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
// Theme navigation in details view.
section . container . on ( 'click' , '.left' , function ( ) {
2016-10-18 23:20:29 -04:00
section . previousTheme ( ) ;
} ) ;
2015-02-24 15:31:24 -05:00
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
section . container . on ( 'click' , '.right' , function ( ) {
2015-02-24 15:31:24 -05:00
section . nextTheme ( ) ;
} ) ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
section . container . on ( 'click' , '.theme-backdrop, .close' , function ( ) {
2015-02-24 15:31:24 -05:00
section . closeDetails ( ) ;
} ) ;
2017-10-10 03:09:52 -04:00
if ( 'local' === section . params . filter _type ) {
// Filter-search all theme objects loaded in the section.
section . container . on ( 'input' , '.wp-filter-search-themes' , function ( event ) {
section . filterSearch ( event . currentTarget . value ) ;
} ) ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
2017-10-10 03:09:52 -04:00
} else if ( 'remote' === section . params . filter _type ) {
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
2017-10-10 03:09:52 -04:00
// Event listeners for remote queries with user-entered terms.
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
// Search terms.
debounced = _ . debounce ( section . checkTerm , 500 ) ; // Wait until there is no input for 500 milliseconds to initiate a search.
2017-10-03 11:44:46 -04:00
section . contentContainer . on ( 'input' , '.wp-filter-search' , function ( ) {
2017-11-15 13:12:53 -05:00
if ( ! api . panel ( 'themes' ) . expanded ( ) ) {
return ;
}
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
debounced ( section ) ;
if ( ! section . expanded ( ) ) {
section . expand ( ) ;
}
} ) ;
2015-02-24 23:17:27 -05:00
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
// Feature filters.
section . contentContainer . on ( 'click' , '.filter-group input' , function ( ) {
section . filtersChecked ( ) ;
section . checkTerm ( section ) ;
2015-02-24 15:31:24 -05:00
} ) ;
2017-10-10 03:09:52 -04:00
}
2015-04-04 10:14:26 -04:00
2017-10-10 03:09:52 -04:00
// Toggle feature filters.
section . contentContainer . on ( 'click' , '.feature-filter-toggle' , function ( e ) {
2017-10-18 11:11:46 -04:00
var $themeContainer = $ ( '.customize-themes-full-container' ) ,
$filterToggle = $ ( e . currentTarget ) ;
section . filtersHeight = $filterToggle . parent ( ) . next ( '.filter-drawer' ) . height ( ) ;
if ( 0 < $themeContainer . scrollTop ( ) ) {
$themeContainer . animate ( { scrollTop : 0 } , 400 ) ;
if ( $filterToggle . hasClass ( 'open' ) ) {
return ;
}
}
$filterToggle
2017-10-10 03:09:52 -04:00
. toggleClass ( 'open' )
. attr ( 'aria-expanded' , function ( i , attr ) {
return 'true' === attr ? 'false' : 'true' ;
} )
2017-10-18 11:11:46 -04:00
. parent ( ) . next ( '.filter-drawer' ) . slideToggle ( 180 , 'linear' ) ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
2017-10-18 11:11:46 -04:00
if ( $filterToggle . hasClass ( 'open' ) ) {
var marginOffset = 1018 < window . innerWidth ? 50 : 76 ;
section . contentContainer . find ( '.themes' ) . css ( 'margin-top' , section . filtersHeight + marginOffset ) ;
2017-10-10 03:09:52 -04:00
} else {
section . contentContainer . find ( '.themes' ) . css ( 'margin-top' , 0 ) ;
}
} ) ;
2015-04-08 16:52:29 -04:00
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
// Setup section cross-linking.
section . contentContainer . on ( 'click' , '.no-themes-local .search-dotorg-themes' , function ( ) {
api . section ( 'wporg_themes' ) . focus ( ) ;
2015-02-24 15:31:24 -05:00
} ) ;
2015-04-08 16:52:29 -04:00
2017-10-28 01:22:46 -04:00
function updateSelectedState ( ) {
var el = section . headerContainer . find ( '.customize-themes-section-title' ) ;
el . toggleClass ( 'selected' , section . expanded ( ) ) ;
el . attr ( 'aria-expanded' , section . expanded ( ) ? 'true' : 'false' ) ;
if ( ! section . expanded ( ) ) {
el . removeClass ( 'details-open' ) ;
}
}
section . expanded . bind ( updateSelectedState ) ;
updateSelectedState ( ) ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
// Move section controls to the themes area.
2016-11-04 13:18:26 -04:00
api . bind ( 'ready' , function ( ) {
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
section . contentContainer = section . container . find ( '.customize-themes-section' ) ;
section . contentContainer . appendTo ( $ ( '.customize-themes-full-container' ) ) ;
section . container . add ( section . headerContainer ) ;
2015-04-08 16:52:29 -04:00
} ) ;
2015-02-24 15:31:24 -05:00
} ,
/ * *
* Update UI to reflect expanded state
*
* @ since 4.2 . 0
*
* @ param { Boolean } expanded
* @ param { Object } args
* @ param { Boolean } args . unchanged
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
* @ param { Function } args . completeCallback
* @ returns { void }
2015-02-24 15:31:24 -05:00
* /
onChangeExpanded : function ( expanded , args ) {
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
// Note: there is a second argument 'args' passed
var section = this ,
container = section . contentContainer . closest ( '.customize-themes-full-container' ) ;
2015-02-24 15:31:24 -05:00
// Immediately call the complete callback if there were no changes
if ( args . unchanged ) {
if ( args . completeCallback ) {
args . completeCallback ( ) ;
}
return ;
}
2017-10-28 01:22:46 -04:00
function expand ( ) {
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
// Try to load controls if none are loaded yet.
if ( 0 === section . loaded ) {
2017-10-10 03:09:52 -04:00
section . loadThemes ( ) ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
}
2015-02-24 15:31:24 -05:00
// Collapse any sibling sections/panels
api . section . each ( function ( otherSection ) {
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
var searchTerm ;
if ( otherSection !== section ) {
// Try to sync the current search term to the new section.
if ( 'themes' === otherSection . params . type ) {
searchTerm = otherSection . contentContainer . find ( '.wp-filter-search' ) . val ( ) ;
section . contentContainer . find ( '.wp-filter-search' ) . val ( searchTerm ) ;
// Directly initialize an empty remote search to avoid a race condition.
2017-10-10 03:09:52 -04:00
if ( '' === searchTerm && '' !== section . term && 'local' !== section . params . filter _type ) {
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
section . term = '' ;
section . initializeNewQuery ( section . term , section . tags ) ;
} else {
2017-10-10 03:09:52 -04:00
if ( 'remote' === section . params . filter _type ) {
section . checkTerm ( section ) ;
} else if ( 'local' === section . params . filter _type ) {
section . filterSearch ( searchTerm ) ;
}
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
}
2017-10-28 01:22:46 -04:00
otherSection . collapse ( { duration : args . duration } ) ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
}
2015-02-24 15:31:24 -05:00
}
} ) ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
section . contentContainer . addClass ( 'current-section' ) ;
container . scrollTop ( ) ;
2016-10-18 23:20:29 -04:00
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
container . on ( 'scroll' , _ . throttle ( section . renderScreenshots , 300 ) ) ;
container . on ( 'scroll' , _ . throttle ( section . loadMore , 300 ) ) ;
2016-10-18 23:20:29 -04:00
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
if ( args . completeCallback ) {
args . completeCallback ( ) ;
}
section . updateCount ( ) ; // Show this section's count.
2017-10-28 01:22:46 -04:00
}
if ( expanded ) {
if ( section . panel ( ) && api . panel . has ( section . panel ( ) ) ) {
api . panel ( section . panel ( ) ) . expand ( {
duration : args . duration ,
completeCallback : expand
} ) ;
} else {
expand ( ) ;
}
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
} else {
section . contentContainer . removeClass ( 'current-section' ) ;
// Always hide, even if they don't exist or are already hidden.
section . headerContainer . find ( '.filter-details' ) . slideUp ( 180 ) ;
container . off ( 'scroll' ) ;
if ( args . completeCallback ) {
args . completeCallback ( ) ;
}
}
} ,
/ * *
* Return the section ' s content element without detaching from the parent .
*
* @ since 4.9 . 0
*
* @ returns { jQuery }
* /
getContent : function ( ) {
return this . container . find ( '.control-section-content' ) ;
} ,
/ * *
* Load theme data via Ajax and add themes to the section as controls .
*
* @ since 4.9 . 0
*
* @ returns { void }
* /
2017-10-10 03:09:52 -04:00
loadThemes : function ( ) {
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
var section = this , params , page , request ;
if ( section . loading ) {
return ; // We're already loading a batch of themes.
}
// Parameters for every API query. Additional params are set in PHP.
page = Math . ceil ( section . loaded / 100 ) + 1 ;
params = {
2017-10-01 23:37:46 -04:00
'nonce' : api . settings . nonce . switch _themes ,
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
'wp_customize' : 'on' ,
'theme_action' : section . params . action ,
'customized_theme' : api . settings . theme . stylesheet ,
'page' : page
} ;
2017-10-10 03:09:52 -04:00
// Add fields for remote filtering.
if ( 'remote' === section . params . filter _type ) {
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
params . search = section . term ;
params . tags = section . tags ;
}
// Load themes.
section . headContainer . closest ( '.wp-full-overlay' ) . addClass ( 'loading' ) ;
section . loading = true ;
section . container . find ( '.no-themes' ) . hide ( ) ;
2017-10-01 23:37:46 -04:00
request = wp . ajax . post ( 'customize_load_themes' , params ) ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
request . done ( function ( data ) {
2017-10-10 03:09:52 -04:00
var themes = data . themes ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
// Stop and try again if the term changed while loading.
if ( '' !== section . nextTerm || '' !== section . nextTags ) {
if ( section . nextTerm ) {
section . term = section . nextTerm ;
2016-10-18 23:20:29 -04:00
}
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
if ( section . nextTags ) {
section . tags = section . nextTags ;
}
section . nextTerm = '' ;
section . nextTags = '' ;
section . loading = false ;
2017-10-10 03:09:52 -04:00
section . loadThemes ( ) ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
return ;
}
2016-10-18 23:20:29 -04:00
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
if ( 0 !== themes . length ) {
2016-10-18 23:20:29 -04:00
2017-10-10 03:09:52 -04:00
section . loadControls ( themes , page ) ;
2015-02-24 15:31:24 -05:00
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
if ( 1 === page ) {
2016-10-18 23:20:29 -04:00
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
// Pre-load the first 3 theme screenshots.
_ . each ( section . controls ( ) . slice ( 0 , 3 ) , function ( control ) {
var img , src = control . params . theme . screenshot [ 0 ] ;
if ( src ) {
img = new Image ( ) ;
img . src = src ;
}
} ) ;
2017-10-10 03:09:52 -04:00
if ( 'local' !== section . params . filter _type ) {
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
wp . a11y . speak ( api . settings . l10n . themeSearchResults . replace ( '%d' , data . info . results ) ) ;
}
2016-11-04 13:18:26 -04:00
}
2017-10-10 03:09:52 -04:00
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
_ . delay ( section . renderScreenshots , 100 ) ; // Wait for the controls to become visible.
2017-10-10 03:09:52 -04:00
if ( 'local' === section . params . filter _type || 100 > themes . length ) { // If we have less than the requested 100 themes, it's the end of the list.
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
section . fullyLoaded = true ;
}
} else {
if ( 0 === section . loaded ) {
section . container . find ( '.no-themes' ) . show ( ) ;
wp . a11y . speak ( section . container . find ( '.no-themes' ) . text ( ) ) ;
} else {
section . fullyLoaded = true ;
}
}
2017-10-10 03:09:52 -04:00
if ( 'local' === section . params . filter _type ) {
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
section . updateCount ( ) ; // Count of visible theme controls.
} else {
section . updateCount ( data . info . results ) ; // Total number of results including pages not yet loaded.
}
section . container . find ( '.unexpected-error' ) . hide ( ) ; // Hide error notice in case it was previously shown.
// This cannot run on request.always, as section.loading may turn false before the new controls load in the success case.
section . headContainer . closest ( '.wp-full-overlay' ) . removeClass ( 'loading' ) ;
section . loading = false ;
} ) ;
request . fail ( function ( data ) {
if ( 'undefined' === typeof data ) {
section . container . find ( '.unexpected-error' ) . show ( ) ;
wp . a11y . speak ( section . container . find ( '.unexpected-error' ) . text ( ) ) ;
} else if ( 'undefined' !== typeof console && console . error ) {
console . error ( data ) ;
}
// This cannot run on request.always, as section.loading may turn false before the new controls load in the success case.
section . headContainer . closest ( '.wp-full-overlay' ) . removeClass ( 'loading' ) ;
section . loading = false ;
} ) ;
} ,
2017-10-10 03:09:52 -04:00
/ * *
* Loads controls into the section from data received from loadThemes ( ) .
*
* @ since 4.9 . 0
* @ param { Array } themes - Array of theme data to create controls with .
* @ param { integer } page - Page of results being loaded .
* @ returns { void }
* /
loadControls : function ( themes , page ) {
var newThemeControls = [ ] ,
section = this ;
// Add controls for each theme.
_ . each ( themes , function ( theme ) {
var themeControl = new api . controlConstructor . theme ( section . params . action + '_theme_' + theme . id , {
type : 'theme' ,
section : section . params . id ,
theme : theme ,
priority : section . loaded + 1
} ) ;
api . control . add ( themeControl ) ;
newThemeControls . push ( themeControl ) ;
section . loaded = section . loaded + 1 ;
} ) ;
if ( 1 !== page ) {
Array . prototype . push . apply ( section . screenshotQueue , newThemeControls ) ; // Add new themes to the screenshot queue.
}
} ,
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
/ * *
* Determines whether more themes should be loaded , and loads them .
*
* @ since 4.9 . 0
* @ returns { void }
* /
loadMore : function ( ) {
var section = this , container , bottom , threshold ;
if ( ! section . fullyLoaded && ! section . loading ) {
container = section . container . closest ( '.customize-themes-full-container' ) ;
bottom = container . scrollTop ( ) + container . height ( ) ;
threshold = container . prop ( 'scrollHeight' ) - 3000 ; // Use a fixed distance to the bottom of loaded results to avoid unnecessarily loading results sooner when using a percentage of scroll distance.
if ( bottom > threshold ) {
2017-10-10 03:09:52 -04:00
section . loadThemes ( ) ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
}
}
} ,
/ * *
* Event handler for search input that filters visible controls .
*
* @ since 4.9 . 0
*
2017-10-10 03:09:52 -04:00
* @ param { string } term - The raw search input value .
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
* @ returns { void }
* /
2017-10-10 03:09:52 -04:00
filterSearch : function ( term ) {
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
var count = 0 ,
visible = false ,
section = this ,
2017-10-10 03:09:52 -04:00
noFilter = ( api . section . has ( 'wporg_themes' ) && 'remote' !== section . params . filter _type ) ? '.no-themes-local' : '.no-themes' ,
controls = section . controls ( ) ,
terms ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
if ( section . loading ) {
return ;
}
2017-10-10 03:09:52 -04:00
// Standardize search term format and split into an array of individual words.
terms = term . toLowerCase ( ) . trim ( ) . replace ( /-/g , ' ' ) . split ( ' ' ) ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
_ . each ( controls , function ( control ) {
2017-10-10 03:09:52 -04:00
visible = control . filter ( terms ) ; // Shows/hides and sorts control based on the applicability of the search term.
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
if ( visible ) {
count = count + 1 ;
}
} ) ;
if ( 0 === count ) {
section . container . find ( noFilter ) . show ( ) ;
wp . a11y . speak ( section . container . find ( noFilter ) . text ( ) ) ;
} else {
section . container . find ( noFilter ) . hide ( ) ;
}
2017-09-29 17:52:45 -04:00
section . renderScreenshots ( ) ;
2017-10-10 03:09:52 -04:00
api . reflowPaneContents ( ) ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
// Update theme count.
2017-10-29 23:57:52 -04:00
section . updateCountDebounced ( count ) ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
} ,
2016-10-18 23:20:29 -04:00
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
/ * *
* Event handler for search input that determines if the terms have changed and loads new controls as needed .
*
* @ since 4.9 . 0
*
* @ param { wp . customize . ThemesSection } section - The current theme section , passed through the debouncer .
* @ returns { void }
* /
checkTerm : function ( section ) {
var newTerm ;
2017-10-10 03:09:52 -04:00
if ( 'remote' === section . params . filter _type ) {
2017-10-03 11:44:46 -04:00
newTerm = section . contentContainer . find ( '.wp-filter-search' ) . val ( ) ;
2017-10-29 23:57:52 -04:00
if ( section . term !== newTerm . trim ( ) ) {
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
section . initializeNewQuery ( newTerm , section . tags ) ;
}
}
} ,
/ * *
* Check for filters checked in the feature filter list and initialize a new query .
*
* @ since 4.9 . 0
*
* @ returns { void }
* /
filtersChecked : function ( ) {
var section = this ,
items = section . container . find ( '.filter-group' ) . find ( ':checkbox' ) ,
tags = [ ] ;
_ . each ( items . filter ( ':checked' ) , function ( item ) {
tags . push ( $ ( item ) . prop ( 'value' ) ) ;
} ) ;
// When no filters are checked, restore initial state. Update filter count.
if ( 0 === tags . length ) {
tags = '' ;
section . contentContainer . find ( '.feature-filter-toggle .filter-count-0' ) . show ( ) ;
section . contentContainer . find ( '.feature-filter-toggle .filter-count-filters' ) . hide ( ) ;
} else {
section . contentContainer . find ( '.feature-filter-toggle .theme-filter-count' ) . text ( tags . length ) ;
section . contentContainer . find ( '.feature-filter-toggle .filter-count-0' ) . hide ( ) ;
section . contentContainer . find ( '.feature-filter-toggle .filter-count-filters' ) . show ( ) ;
}
// Check whether tags have changed, and either load or queue them.
if ( ! _ . isEqual ( section . tags , tags ) ) {
if ( section . loading ) {
section . nextTags = tags ;
} else {
2017-10-10 03:09:52 -04:00
if ( 'remote' === section . params . filter _type ) {
section . initializeNewQuery ( section . term , tags ) ;
} else if ( 'local' === section . params . filter _type ) {
section . filterSearch ( tags . join ( ' ' ) ) ;
}
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
}
}
} ,
/ * *
* Reset the current query and load new results .
*
* @ since 4.9 . 0
*
* @ param { string } newTerm - New term .
* @ param { Array } newTags - New tags .
* @ returns { void }
* /
initializeNewQuery : function ( newTerm , newTags ) {
var section = this ;
// Clear the controls in the section.
_ . each ( section . controls ( ) , function ( control ) {
control . container . remove ( ) ;
api . control . remove ( control . id ) ;
} ) ;
section . loaded = 0 ;
section . fullyLoaded = false ;
section . screenshotQueue = null ;
2017-10-10 03:09:52 -04:00
// Run a new query, with loadThemes handling paging, etc.
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
if ( ! section . loading ) {
section . term = newTerm ;
section . tags = newTags ;
2017-10-10 03:09:52 -04:00
section . loadThemes ( ) ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
} else {
2017-10-10 03:09:52 -04:00
section . nextTerm = newTerm ; // This will reload from loadThemes() with the newest term once the current batch is loaded.
section . nextTags = newTags ; // This will reload from loadThemes() with the newest tags once the current batch is loaded.
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
}
if ( ! section . expanded ( ) ) {
section . expand ( ) ; // Expand the section if it isn't expanded.
2016-09-23 18:23:30 -04:00
}
2015-10-17 18:41:25 -04:00
} ,
2015-04-08 16:52:29 -04:00
/ * *
* Render control ' s screenshot if the control comes into view .
*
* @ since 4.2 . 0
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
*
* @ returns { void }
2015-04-08 16:52:29 -04:00
* /
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
renderScreenshots : function ( ) {
2015-04-08 16:52:29 -04:00
var section = this ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
// Fill queue initially, or check for more if empty.
if ( null === section . screenshotQueue || 0 === section . screenshotQueue . length ) {
// Add controls that haven't had their screenshots rendered.
section . screenshotQueue = _ . filter ( section . controls ( ) , function ( control ) {
return ! control . screenshotRendered ;
} ) ;
2015-04-08 16:52:29 -04:00
}
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
// Are all screenshots rendered (for now)?
2015-04-08 16:52:29 -04:00
if ( ! section . screenshotQueue . length ) {
return ;
}
section . screenshotQueue = _ . filter ( section . screenshotQueue , function ( control ) {
var $imageWrapper = control . container . find ( '.theme-screenshot' ) ,
$image = $imageWrapper . find ( 'img' ) ;
if ( ! $image . length ) {
return false ;
}
if ( $image . is ( ':hidden' ) ) {
return true ;
}
// Based on unveil.js.
var wt = section . $window . scrollTop ( ) ,
wb = wt + section . $window . height ( ) ,
et = $image . offset ( ) . top ,
ih = $imageWrapper . height ( ) ,
eb = et + ih ,
threshold = ih * 3 ,
inView = eb >= wt - threshold && et <= wb + threshold ;
if ( inView ) {
control . container . trigger ( 'render-screenshot' ) ;
}
// If the image is in view return false so it's cleared from the queue.
return ! inView ;
} ) ;
} ,
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
/ * *
* Get visible count .
*
* @ since 4.9 . 0
*
* @ returns { int } Visible count .
* /
getVisibleCount : function ( ) {
return this . contentContainer . find ( 'li.customize-control:visible' ) . length ;
} ,
/ * *
* Update the number of themes in the section .
*
* @ since 4.9 . 0
*
* @ returns { void }
* /
updateCount : function ( count ) {
var section = this , countEl , displayed ;
if ( ! count && 0 !== count ) {
count = section . getVisibleCount ( ) ;
}
displayed = section . contentContainer . find ( '.themes-displayed' ) ;
countEl = section . contentContainer . find ( '.theme-count' ) ;
if ( 0 === count ) {
countEl . text ( '0' ) ;
} else {
// Animate the count change for emphasis.
displayed . fadeOut ( 180 , function ( ) {
countEl . text ( count ) ;
displayed . fadeIn ( 180 ) ;
} ) ;
wp . a11y . speak ( api . settings . l10n . announceThemeCount . replace ( '%d' , count ) ) ;
}
} ,
2015-02-24 15:31:24 -05:00
/ * *
* Advance the modal to the next theme .
*
* @ since 4.2 . 0
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
*
* @ returns { void }
2015-02-24 15:31:24 -05:00
* /
nextTheme : function ( ) {
var section = this ;
if ( section . getNextTheme ( ) ) {
section . showDetails ( section . getNextTheme ( ) , function ( ) {
section . overlay . find ( '.right' ) . focus ( ) ;
} ) ;
}
} ,
/ * *
* Get the next theme model .
*
* @ since 4.2 . 0
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
*
2017-10-04 12:49:46 -04:00
* @ returns { wp . customize . ThemeControl | boolean } Next theme .
2015-02-24 15:31:24 -05:00
* /
getNextTheme : function ( ) {
2017-10-04 12:49:46 -04:00
var section = this , control , nextControl , sectionControls , i ;
control = api . control ( section . params . action + '_theme_' + section . currentTheme ) ;
sectionControls = section . controls ( ) ;
i = _ . indexOf ( sectionControls , control ) ;
if ( - 1 === i ) {
2015-02-24 15:31:24 -05:00
return false ;
}
2017-10-04 12:49:46 -04:00
nextControl = sectionControls [ i + 1 ] ;
if ( ! nextControl ) {
return false ;
}
return nextControl . params . theme ;
2015-02-24 15:31:24 -05:00
} ,
/ * *
* Advance the modal to the previous theme .
*
* @ since 4.2 . 0
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
* @ returns { void }
2015-02-24 15:31:24 -05:00
* /
previousTheme : function ( ) {
var section = this ;
if ( section . getPreviousTheme ( ) ) {
section . showDetails ( section . getPreviousTheme ( ) , function ( ) {
section . overlay . find ( '.left' ) . focus ( ) ;
} ) ;
}
} ,
/ * *
* Get the previous theme model .
*
* @ since 4.2 . 0
2017-10-04 12:49:46 -04:00
* @ returns { wp . customize . ThemeControl | boolean } Previous theme .
2015-02-24 15:31:24 -05:00
* /
getPreviousTheme : function ( ) {
2017-10-04 12:49:46 -04:00
var section = this , control , nextControl , sectionControls , i ;
control = api . control ( section . params . action + '_theme_' + section . currentTheme ) ;
sectionControls = section . controls ( ) ;
i = _ . indexOf ( sectionControls , control ) ;
if ( - 1 === i ) {
2015-02-24 15:31:24 -05:00
return false ;
}
2017-10-04 12:49:46 -04:00
nextControl = sectionControls [ i - 1 ] ;
if ( ! nextControl ) {
return false ;
}
return nextControl . params . theme ;
2015-02-24 15:31:24 -05:00
} ,
/ * *
* Disable buttons when we ' re viewing the first or last theme .
*
* @ since 4.2 . 0
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
*
* @ returns { void }
2015-02-24 15:31:24 -05:00
* /
updateLimits : function ( ) {
if ( ! this . getNextTheme ( ) ) {
this . overlay . find ( '.right' ) . addClass ( 'disabled' ) ;
}
if ( ! this . getPreviousTheme ( ) ) {
this . overlay . find ( '.left' ) . addClass ( 'disabled' ) ;
}
} ,
2016-11-04 13:18:26 -04:00
/ * *
* Load theme preview .
*
* @ since 4.7 . 0
2016-11-23 01:05:32 -05:00
* @ access public
2016-11-04 13:18:26 -04:00
*
2017-10-01 23:37:46 -04:00
* @ deprecated
2016-11-04 13:18:26 -04:00
* @ param { string } themeId Theme ID .
* @ returns { jQuery . promise } Promise .
* /
loadThemePreview : function ( themeId ) {
2017-10-01 23:37:46 -04:00
return api . ThemesPanel . prototype . loadThemePreview . call ( this , themeId ) ;
2016-11-04 13:18:26 -04:00
} ,
2015-02-24 15:31:24 -05:00
/ * *
* Render & show the theme details for a given theme model .
*
* @ since 4.2 . 0
*
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
* @ param { object } theme - Theme .
* @ param { Function } [ callback ] - Callback once the details have been shown .
* @ returns { void }
2015-02-24 15:31:24 -05:00
* /
showDetails : function ( theme , callback ) {
2017-11-02 20:59:47 -04:00
var section = this , panel = api . panel ( 'themes' ) ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
section . currentTheme = theme . id ;
section . overlay . html ( section . template ( theme ) )
. fadeIn ( 'fast' )
. focus ( ) ;
2017-11-02 20:59:47 -04:00
function disableSwitchButtons ( ) {
return ! panel . canSwitchTheme ( theme . id ) ;
}
// Temporary special function since supplying SFTP credentials does not work yet. See #42184.
function disableInstallButtons ( ) {
return disableSwitchButtons ( ) || true === api . settings . theme . _filesystemCredentialsNeeded ;
}
section . overlay . find ( 'button.preview, button.preview-theme' ) . toggleClass ( 'disabled' , disableSwitchButtons ( ) ) ;
section . overlay . find ( 'button.theme-install' ) . toggleClass ( 'disabled' , disableInstallButtons ( ) ) ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
section . $body . addClass ( 'modal-open' ) ;
section . containFocus ( section . overlay ) ;
section . updateLimits ( ) ;
wp . a11y . speak ( api . settings . l10n . announceThemeDetails . replace ( '%s' , theme . name ) ) ;
if ( callback ) {
callback ( ) ;
}
2015-02-24 15:31:24 -05:00
} ,
/ * *
* Close the theme details modal .
*
* @ since 4.2 . 0
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
*
* @ returns { void }
2015-02-24 15:31:24 -05:00
* /
2015-02-24 23:17:27 -05:00
closeDetails : function ( ) {
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
var section = this ;
section . $body . removeClass ( 'modal-open' ) ;
section . overlay . fadeOut ( 'fast' ) ;
api . control ( section . params . action + '_theme_' + section . currentTheme ) . container . find ( '.theme' ) . focus ( ) ;
2015-02-24 15:31:24 -05:00
} ,
/ * *
* Keep tab focus within the theme details modal .
*
* @ since 4.2 . 0
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
*
* @ param { jQuery } el - Element to contain focus .
* @ returns { void }
2015-02-24 15:31:24 -05:00
* /
containFocus : function ( el ) {
var tabbables ;
el . on ( 'keydown' , function ( event ) {
// Return if it's not the tab key
// When navigating with prev/next focus is already handled
if ( 9 !== event . keyCode ) {
return ;
}
// uses jQuery UI to get the tabbable elements
tabbables = $ ( ':tabbable' , el ) ;
// Keep focus within the overlay
if ( tabbables . last ( ) [ 0 ] === event . target && ! event . shiftKey ) {
tabbables . first ( ) . focus ( ) ;
return false ;
} else if ( tabbables . first ( ) [ 0 ] === event . target && event . shiftKey ) {
tabbables . last ( ) . focus ( ) ;
return false ;
}
} ) ;
}
} ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
/ * *
* Class wp . customize . OuterSection .
*
* Creates section outside of the sidebar , there is no ui to trigger collapse / expand so
* it would require custom handling .
*
* @ since 4.9
*
* @ constructor
* @ augments wp . customize . Section
* @ augments wp . customize . Container
* /
api . OuterSection = api . Section . extend ( {
/ * *
* Initialize .
*
* @ since 4.9 . 0
*
* @ returns { void }
* /
initialize : function ( ) {
var section = this ;
section . containerParent = '#customize-outer-theme-controls' ;
section . containerPaneParent = '.customize-outer-pane-parent' ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
api . Section . prototype . initialize . apply ( section , arguments ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
} ,
/ * *
* Overrides api . Section . prototype . onChangeExpanded to prevent collapse / expand effect
* on other sections and panels .
*
* @ since 4.9 . 0
*
* @ param { Boolean } expanded - The expanded state to transition to .
* @ param { Object } [ args ] - Args .
* @ param { boolean } [ args . unchanged ] - Whether the state is already known to not be changed , and so short - circuit with calling completeCallback early .
* @ param { Function } [ args . completeCallback ] - Function to call when the slideUp / slideDown has completed .
* @ param { Object } [ args . duration ] - The duration for the animation .
* /
onChangeExpanded : function ( expanded , args ) {
var section = this ,
container = section . headContainer . closest ( '.wp-full-overlay-sidebar-content' ) ,
content = section . contentContainer ,
backBtn = content . find ( '.customize-section-back' ) ,
sectionTitle = section . headContainer . find ( '.accordion-section-title' ) . first ( ) ,
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
body = $ ( document . body ) ,
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
expand , panel ;
body . toggleClass ( 'outer-section-open' , expanded ) ;
section . container . toggleClass ( 'open' , expanded ) ;
section . container . removeClass ( 'busy' ) ;
api . section . each ( function ( _section ) {
if ( 'outer' === _section . params . type && _section . id !== section . id ) {
_section . container . removeClass ( 'open' ) ;
}
} ) ;
if ( expanded && ! content . hasClass ( 'open' ) ) {
if ( args . unchanged ) {
expand = args . completeCallback ;
} else {
expand = $ . proxy ( function ( ) {
section . _animateChangeExpanded ( function ( ) {
sectionTitle . attr ( 'tabindex' , '-1' ) ;
backBtn . attr ( 'tabindex' , '0' ) ;
backBtn . focus ( ) ;
content . css ( 'top' , '' ) ;
container . scrollTop ( 0 ) ;
if ( args . completeCallback ) {
args . completeCallback ( ) ;
}
} ) ;
content . addClass ( 'open' ) ;
} , this ) ;
}
if ( section . panel ( ) ) {
api . panel ( section . panel ( ) ) . expand ( {
duration : args . duration ,
completeCallback : expand
} ) ;
} else {
expand ( ) ;
}
} else if ( ! expanded && content . hasClass ( 'open' ) ) {
if ( section . panel ( ) ) {
panel = api . panel ( section . panel ( ) ) ;
if ( panel . contentContainer . hasClass ( 'skip-transition' ) ) {
panel . collapse ( ) ;
}
}
section . _animateChangeExpanded ( function ( ) {
backBtn . attr ( 'tabindex' , '-1' ) ;
sectionTitle . attr ( 'tabindex' , '0' ) ;
sectionTitle . focus ( ) ;
content . css ( 'top' , '' ) ;
if ( args . completeCallback ) {
args . completeCallback ( ) ;
}
} ) ;
content . removeClass ( 'open' ) ;
} else {
if ( args . completeCallback ) {
args . completeCallback ( ) ;
}
}
}
} ) ;
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
/ * *
2014-12-03 21:04:22 -05:00
* @ since 4.1 . 0
*
2014-11-11 18:52:22 -05:00
* @ class
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
* @ augments wp . customize . Class
* /
api . Panel = Container . extend ( {
2015-05-29 20:03:30 -04:00
containerType : 'panel' ,
2014-12-03 21:04:22 -05:00
/ * *
* @ since 4.1 . 0
*
2015-06-01 18:47:25 -04:00
* @ param { string } id - The ID for the panel .
* @ param { object } options - Object containing one property : params .
2017-10-04 02:48:46 -04:00
* @ param { string } options . title - Title shown when panel is collapsed and expanded .
* @ param { string = } [ options . description ] - Description shown at the top of the panel .
* @ param { number = 100 } [ options . priority ] - The sort priority for the panel .
* @ param { string = default } [ options . type ] - The type of the panel . See wp . customize . panelConstructor .
* @ param { string = } [ options . content ] - The markup to be used for the panel container . If empty , a JS template is used .
* @ param { boolean = true } [ options . active ] - Whether the panel is active or not .
* @ param { object } [ options . params ] - Deprecated wrapper for the above properties .
2014-12-03 21:04:22 -05:00
* /
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
initialize : function ( id , options ) {
Customize: Improve the menu creation flow.
Often, folks run into two issues when they create new menus: they click "Add a Menu" thinking it will add a new page to their menu, or they forget to assign their new menu to a location, and then wonder why it doesn't show up on their site.
This commit rearranges the order of items in the menu panel, and updates the flow for creating a menu by breaking it up into steps. Additionally, more help text has been added to guide people through the process of creating a menu.
Also adds default `type` lookups for Panel and Section instances. See #30741.
Props bpayton, obenland, westonruter, celloexpessions, afercia, melchoyce, zoonini, michelleweber.
Fixes #40104.
Built from https://develop.svn.wordpress.org/trunk@41768
git-svn-id: http://core.svn.wordpress.org/trunk@41602 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-10-04 22:22:49 -04:00
var panel = this , params ;
params = options . params || options ;
// Look up the type if one was not supplied.
if ( ! params . type ) {
_ . find ( api . panelConstructor , function ( Constructor , type ) {
if ( Constructor === panel . constructor ) {
params . type = type ;
return true ;
}
return false ;
} ) ;
}
Container . prototype . initialize . call ( panel , id , params ) ;
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
panel . embed ( ) ;
2014-12-02 17:56:45 -05:00
panel . deferred . embedded . done ( function ( ) {
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
panel . ready ( ) ;
} ) ;
} ,
/ * *
* Embed the container in the DOM when any parent panel is ready .
2014-12-03 21:04:22 -05:00
*
* @ since 4.1 . 0
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
* /
embed : function ( ) {
var panel = this ,
2016-09-23 18:23:30 -04:00
container = $ ( '#customize-theme-controls' ) ,
parentContainer = $ ( '.customize-pane-parent' ) ; // @todo This should be defined elsewhere, and to be configurable
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
2016-09-23 18:23:30 -04:00
if ( ! panel . headContainer . parent ( ) . is ( parentContainer ) ) {
parentContainer . append ( panel . headContainer ) ;
}
if ( ! panel . contentContainer . parent ( ) . is ( panel . headContainer ) ) {
container . append ( panel . contentContainer ) ;
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
}
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
panel . renderContent ( ) ;
2015-10-16 19:48:25 -04:00
2014-12-02 17:56:45 -05:00
panel . deferred . embedded . resolve ( ) ;
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
} ,
/ * *
2014-12-03 21:04:22 -05:00
* @ since 4.1 . 0
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
* /
attachEvents : function ( ) {
var meta , panel = this ;
// Expand/Collapse accordion sections on click.
2016-09-23 18:23:30 -04:00
panel . headContainer . find ( '.accordion-section-title' ) . on ( 'click keydown' , function ( event ) {
2014-12-02 17:56:45 -05:00
if ( api . utils . isKeydownButNotEnterEvent ( event ) ) {
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
return ;
}
event . preventDefault ( ) ; // Keep this AFTER the key filter above
if ( ! panel . expanded ( ) ) {
panel . expand ( ) ;
}
} ) ;
2015-05-29 09:57:26 -04:00
// Close panel.
panel . container . find ( '.customize-panel-back' ) . on ( 'click keydown' , function ( event ) {
if ( api . utils . isKeydownButNotEnterEvent ( event ) ) {
return ;
}
event . preventDefault ( ) ; // Keep this AFTER the key filter above
if ( panel . expanded ( ) ) {
panel . collapse ( ) ;
}
} ) ;
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
meta = panel . container . find ( '.panel-meta:first' ) ;
2017-09-24 12:00:46 -04:00
meta . find ( '> .accordion-section-title .customize-help-toggle' ) . on ( 'click' , function ( ) {
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
if ( meta . hasClass ( 'cannot-expand' ) ) {
return ;
}
2015-05-29 09:57:26 -04:00
var content = meta . find ( '.customize-panel-description:first' ) ;
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
if ( meta . hasClass ( 'open' ) ) {
meta . toggleClass ( 'open' ) ;
2017-10-02 14:55:47 -04:00
content . slideUp ( panel . defaultExpandedArguments . duration , function ( ) {
content . trigger ( 'toggled' ) ;
} ) ;
2015-05-29 09:57:26 -04:00
$ ( this ) . attr ( 'aria-expanded' , false ) ;
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
} else {
2017-10-02 14:55:47 -04:00
content . slideDown ( panel . defaultExpandedArguments . duration , function ( ) {
content . trigger ( 'toggled' ) ;
} ) ;
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
meta . toggleClass ( 'open' ) ;
2015-05-29 09:57:26 -04:00
$ ( this ) . attr ( 'aria-expanded' , true ) ;
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
}
} ) ;
} ,
/ * *
* Get the sections that are associated with this panel , sorted by their priority Value .
*
2014-12-03 21:04:22 -05:00
* @ since 4.1 . 0
*
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
* @ returns { Array }
* /
sections : function ( ) {
return this . _children ( 'panel' , 'section' ) ;
} ,
/ * *
* Return whether this panel has any active sections .
*
2014-12-03 21:04:22 -05:00
* @ since 4.1 . 0
*
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
* @ returns { boolean } Whether contextually active .
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
* /
isContextuallyActive : function ( ) {
var panel = this ,
sections = panel . sections ( ) ,
activeCount = 0 ;
_ ( sections ) . each ( function ( section ) {
if ( section . active ( ) && section . isContextuallyActive ( ) ) {
activeCount += 1 ;
}
} ) ;
return ( activeCount !== 0 ) ;
} ,
/ * *
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
* Update UI to reflect expanded state .
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
*
2014-12-03 21:04:22 -05:00
* @ since 4.1 . 0
*
* @ param { Boolean } expanded
* @ param { Object } args
* @ param { Boolean } args . unchanged
2015-10-16 19:48:25 -04:00
* @ param { Function } args . completeCallback
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
* @ returns { void }
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
* /
onChangeExpanded : function ( expanded , args ) {
// Immediately call the complete callback if there were no changes
if ( args . unchanged ) {
if ( args . completeCallback ) {
args . completeCallback ( ) ;
}
return ;
}
// Note: there is a second argument 'args' passed
2016-09-23 18:23:30 -04:00
var panel = this ,
accordionSection = panel . contentContainer ,
2015-10-16 19:48:25 -04:00
overlay = accordionSection . closest ( '.wp-full-overlay' ) ,
container = accordionSection . closest ( '.wp-full-overlay-sidebar-content' ) ,
2016-09-23 18:23:30 -04:00
topPanel = panel . headContainer . find ( '.accordion-section-title' ) ,
2017-04-07 15:27:40 -04:00
backBtn = accordionSection . find ( '.customize-panel-back' ) ,
childSections = panel . sections ( ) ,
skipTransition ;
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
2016-09-23 18:23:30 -04:00
if ( expanded && ! accordionSection . hasClass ( 'current-panel' ) ) {
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
// Collapse any sibling sections/panels
api . section . each ( function ( section ) {
2015-08-31 19:08:42 -04:00
if ( panel . id !== section . panel ( ) ) {
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
section . collapse ( { duration : 0 } ) ;
}
} ) ;
api . panel . each ( function ( otherPanel ) {
if ( panel !== otherPanel ) {
otherPanel . collapse ( { duration : 0 } ) ;
}
} ) ;
2017-04-07 15:27:40 -04:00
if ( panel . params . autoExpandSoleSection && 1 === childSections . length && childSections [ 0 ] . active . get ( ) ) {
accordionSection . addClass ( 'current-panel skip-transition' ) ;
overlay . addClass ( 'in-sub-panel' ) ;
2016-09-23 18:23:30 -04:00
2017-04-07 15:27:40 -04:00
childSections [ 0 ] . expand ( {
completeCallback : args . completeCallback
} ) ;
} else {
panel . _animateChangeExpanded ( function ( ) {
topPanel . attr ( 'tabindex' , '-1' ) ;
backBtn . attr ( 'tabindex' , '0' ) ;
2016-09-23 18:23:30 -04:00
2017-04-07 15:27:40 -04:00
backBtn . focus ( ) ;
accordionSection . css ( 'top' , '' ) ;
container . scrollTop ( 0 ) ;
if ( args . completeCallback ) {
args . completeCallback ( ) ;
}
} ) ;
accordionSection . addClass ( 'current-panel' ) ;
overlay . addClass ( 'in-sub-panel' ) ;
}
2016-09-23 18:23:30 -04:00
2016-10-21 02:37:30 -04:00
api . state ( 'expandedPanel' ) . set ( panel ) ;
2016-09-23 18:23:30 -04:00
} else if ( ! expanded && accordionSection . hasClass ( 'current-panel' ) ) {
2017-04-07 15:27:40 -04:00
skipTransition = accordionSection . hasClass ( 'skip-transition' ) ;
if ( ! skipTransition ) {
panel . _animateChangeExpanded ( function ( ) {
topPanel . attr ( 'tabindex' , '0' ) ;
backBtn . attr ( 'tabindex' , '-1' ) ;
2016-09-23 18:23:30 -04:00
2017-04-07 15:27:40 -04:00
topPanel . focus ( ) ;
accordionSection . css ( 'top' , '' ) ;
2016-09-23 18:23:30 -04:00
2017-04-07 15:27:40 -04:00
if ( args . completeCallback ) {
args . completeCallback ( ) ;
}
} ) ;
} else {
accordionSection . removeClass ( 'skip-transition' ) ;
}
2015-05-29 20:03:30 -04:00
2016-09-23 18:23:30 -04:00
overlay . removeClass ( 'in-sub-panel' ) ;
accordionSection . removeClass ( 'current-panel' ) ;
2016-10-21 02:37:30 -04:00
if ( panel === api . state ( 'expandedPanel' ) . get ( ) ) {
api . state ( 'expandedPanel' ) . set ( false ) ;
}
2016-09-23 18:23:30 -04:00
}
2015-10-16 19:48:25 -04:00
} ,
2015-05-29 20:03:30 -04:00
/ * *
* Render the panel from its JS template , if it exists .
*
* The panel ' s container must already exist in the DOM .
*
* @ since 4.3 . 0
* /
renderContent : function ( ) {
var template ,
panel = this ;
// Add the content to the container.
if ( 0 !== $ ( '#tmpl-' + panel . templateSelector + '-content' ) . length ) {
template = wp . template ( panel . templateSelector + '-content' ) ;
2015-06-01 18:47:25 -04:00
} else {
template = wp . template ( 'customize-panel-default-content' ) ;
}
2016-09-23 18:23:30 -04:00
if ( template && panel . headContainer ) {
2017-10-28 02:37:47 -04:00
panel . contentContainer . html ( template ( _ . extend (
{ id : panel . id } ,
panel . params
) ) ) ;
2015-05-29 20:03:30 -04:00
}
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
}
} ) ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
/ * *
* Class wp . customize . ThemesPanel .
*
* Custom section for themes that displays without the customize preview .
*
* @ constructor
* @ augments wp . customize . Panel
* @ augments wp . customize . Container
* /
api . ThemesPanel = api . Panel . extend ( {
/ * *
* Initialize .
*
* @ since 4.9 . 0
*
* @ param { string } id - The ID for the panel .
* @ param { object } options - Options .
* @ returns { void }
* /
initialize : function ( id , options ) {
var panel = this ;
panel . installingThemes = [ ] ;
api . Panel . prototype . initialize . call ( panel , id , options ) ;
} ,
2017-11-02 20:59:47 -04:00
/ * *
* Determine whether a given theme can be switched to , or in general .
*
* @ since 4.9 . 0
*
* @ param { string } [ slug ] - Theme slug .
* @ returns { boolean } Whether the theme can be switched to .
* /
canSwitchTheme : function canSwitchTheme ( slug ) {
if ( slug && slug === api . settings . theme . stylesheet ) {
return true ;
}
return 'publish' === api . state ( 'selectedChangesetStatus' ) . get ( ) && ( '' === api . state ( 'changesetStatus' ) . get ( ) || 'auto-draft' === api . state ( 'changesetStatus' ) . get ( ) ) ;
} ,
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
/ * *
* Attach events .
*
* @ since 4.9 . 0
* @ returns { void }
* /
attachEvents : function ( ) {
2017-10-24 15:06:47 -04:00
var panel = this ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
// Attach regular panel events.
api . Panel . prototype . attachEvents . apply ( panel ) ;
2017-10-24 15:06:47 -04:00
// Temporary since supplying SFTP credentials does not work yet. See #42184
if ( api . settings . theme . _filesystemCredentialsNeeded ) {
panel . notifications . add ( new api . Notification ( 'theme_install_unavailable' , {
message : api . l10n . themeInstallUnavailable ,
type : 'info' ,
dismissible : true
} ) ) ;
}
function toggleDisabledNotifications ( ) {
2017-11-02 20:59:47 -04:00
if ( panel . canSwitchTheme ( ) ) {
2017-10-07 02:00:54 -04:00
panel . notifications . remove ( 'theme_switch_unavailable' ) ;
} else {
panel . notifications . add ( new api . Notification ( 'theme_switch_unavailable' , {
message : api . l10n . themePreviewUnavailable ,
type : 'warning'
} ) ) ;
}
2017-10-24 15:06:47 -04:00
}
toggleDisabledNotifications ( ) ;
api . state ( 'selectedChangesetStatus' ) . bind ( toggleDisabledNotifications ) ;
2017-11-02 20:59:47 -04:00
api . state ( 'changesetStatus' ) . bind ( toggleDisabledNotifications ) ;
2017-10-07 02:00:54 -04:00
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
// Collapse panel to customize the current theme.
panel . contentContainer . on ( 'click' , '.customize-theme' , function ( ) {
panel . collapse ( ) ;
} ) ;
// Toggle between filtering and browsing themes on mobile.
panel . contentContainer . on ( 'click' , '.customize-themes-section-title, .customize-themes-mobile-back' , function ( ) {
$ ( '.wp-full-overlay' ) . toggleClass ( 'showing-themes' ) ;
} ) ;
// Install (and maybe preview) a theme.
panel . contentContainer . on ( 'click' , '.theme-install' , function ( event ) {
panel . installTheme ( event ) ;
} ) ;
// Update a theme. Theme cards have the class, the details modal has the id.
panel . contentContainer . on ( 'click' , '.update-theme, #update-theme' , function ( event ) {
// #update-theme is a link.
event . preventDefault ( ) ;
event . stopPropagation ( ) ;
panel . updateTheme ( event ) ;
} ) ;
// Delete a theme.
panel . contentContainer . on ( 'click' , '.delete-theme' , function ( event ) {
panel . deleteTheme ( event ) ;
} ) ;
_ . bindAll ( panel , 'installTheme' , 'updateTheme' ) ;
} ,
/ * *
* Update UI to reflect expanded state
*
* @ since 4.9 . 0
*
* @ param { Boolean } expanded - Expanded state .
* @ param { Object } args - Args .
* @ param { Boolean } args . unchanged - Whether or not the state changed .
* @ param { Function } args . completeCallback - Callback to execute when the animation completes .
* @ returns { void }
* /
onChangeExpanded : function ( expanded , args ) {
2017-10-28 01:22:46 -04:00
var panel = this , overlay , sections , hasExpandedSection = false ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
// Expand/collapse the panel normally.
api . Panel . prototype . onChangeExpanded . apply ( this , [ expanded , args ] ) ;
// Immediately call the complete callback if there were no changes
if ( args . unchanged ) {
if ( args . completeCallback ) {
args . completeCallback ( ) ;
}
return ;
}
overlay = panel . headContainer . closest ( '.wp-full-overlay' ) ;
if ( expanded ) {
overlay
. addClass ( 'in-themes-panel' )
. delay ( 200 ) . find ( '.customize-themes-full-container' ) . addClass ( 'animate' ) ;
2017-10-19 13:57:47 -04:00
_ . delay ( function ( ) {
overlay . addClass ( 'themes-panel-expanded' ) ;
} , 200 ) ;
2017-10-28 01:22:46 -04:00
// Automatically open the first section (except on small screens), if one isn't already expanded.
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
if ( 600 < window . innerWidth ) {
2017-10-28 01:22:46 -04:00
sections = panel . sections ( ) ;
_ . each ( sections , function ( section ) {
if ( section . expanded ( ) ) {
hasExpandedSection = true ;
}
} ) ;
if ( ! hasExpandedSection && sections . length > 0 ) {
sections [ 0 ] . expand ( ) ;
}
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
}
} else {
overlay
2017-10-19 13:57:47 -04:00
. removeClass ( 'in-themes-panel themes-panel-expanded' )
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
. find ( '.customize-themes-full-container' ) . removeClass ( 'animate' ) ;
}
} ,
/ * *
* Install a theme via wp . updates .
*
* @ since 4.9 . 0
*
2017-10-07 02:00:54 -04:00
* @ param { jQuery . Event } event - Event .
* @ returns { jQuery . promise } Promise .
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
* /
installTheme : function ( event ) {
2017-10-07 02:00:54 -04:00
var panel = this , preview , onInstallSuccess , slug = $ ( event . target ) . data ( 'slug' ) , deferred = $ . Deferred ( ) , request ;
preview = $ ( event . target ) . hasClass ( 'preview' ) ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
2017-10-24 15:06:47 -04:00
// Temporary since supplying SFTP credentials does not work yet. See #42184.
if ( api . settings . theme . _filesystemCredentialsNeeded ) {
deferred . reject ( {
errorCode : 'theme_install_unavailable'
} ) ;
return deferred . promise ( ) ;
}
2017-10-07 02:00:54 -04:00
// Prevent loading a non-active theme preview when there is a drafted/scheduled changeset.
2017-11-06 23:17:47 -05:00
if ( ! panel . canSwitchTheme ( slug ) ) {
2017-10-07 02:00:54 -04:00
deferred . reject ( {
errorCode : 'theme_switch_unavailable'
} ) ;
return deferred . promise ( ) ;
}
// Theme is already being installed.
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
if ( _ . contains ( panel . installingThemes , slug ) ) {
2017-10-07 02:00:54 -04:00
deferred . reject ( {
errorCode : 'theme_already_installing'
} ) ;
return deferred . promise ( ) ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
}
wp . updates . maybeRequestFilesystemCredentials ( event ) ;
2017-10-07 02:00:54 -04:00
onInstallSuccess = function ( response ) {
2017-10-04 02:48:46 -04:00
var theme = false , themeControl ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
if ( preview ) {
2017-10-01 23:37:46 -04:00
api . notifications . remove ( 'theme_installing' ) ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
2017-10-01 23:37:46 -04:00
panel . loadThemePreview ( slug ) ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
} else {
api . control . each ( function ( control ) {
if ( 'theme' === control . params . type && control . params . theme . id === response . slug ) {
theme = control . params . theme ; // Used below to add theme control.
control . rerenderAsInstalled ( true ) ;
}
} ) ;
// Don't add the same theme more than once.
if ( ! theme || api . control . has ( 'installed_theme_' + theme . id ) ) {
2017-10-07 02:00:54 -04:00
deferred . resolve ( response ) ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
return ;
}
// Add theme control to installed section.
theme . type = 'installed' ;
2017-10-04 02:48:46 -04:00
themeControl = new api . controlConstructor . theme ( 'installed_theme_' + theme . id , {
type : 'theme' ,
section : 'installed_themes' ,
theme : theme ,
priority : 0 // Add all newly-installed themes to the top.
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
} ) ;
2017-10-04 02:48:46 -04:00
api . control . add ( themeControl ) ;
api . control ( themeControl . id ) . container . trigger ( 'render-screenshot' ) ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
// Close the details modal if it's open to the installed theme.
api . section . each ( function ( section ) {
if ( 'themes' === section . params . type ) {
if ( theme . id === section . currentTheme ) { // Don't close the modal if the user has navigated elsewhere.
section . closeDetails ( ) ;
}
}
} ) ;
}
2017-10-07 02:00:54 -04:00
deferred . resolve ( response ) ;
} ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
2017-10-07 02:00:54 -04:00
panel . installingThemes . push ( slug ) ; // Note: we don't remove elements from installingThemes, since they shouldn't be installed again.
request = wp . updates . installTheme ( {
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
slug : slug
} ) ;
// Also preview the theme as the event is triggered on Install & Preview.
2017-10-07 02:00:54 -04:00
if ( preview ) {
2017-10-04 02:48:46 -04:00
api . notifications . add ( new api . OverlayNotification ( 'theme_installing' , {
2017-10-01 23:37:46 -04:00
message : api . l10n . themeDownloading ,
type : 'info' ,
loading : true
} ) ) ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
}
2017-10-07 02:00:54 -04:00
request . done ( onInstallSuccess ) ;
request . fail ( function ( ) {
api . notifications . remove ( 'theme_installing' ) ;
} ) ;
return deferred . promise ( ) ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
} ,
/ * *
* Load theme preview .
*
* @ since 4.9 . 0
*
* @ param { string } themeId Theme ID .
* @ returns { jQuery . promise } Promise .
* /
loadThemePreview : function ( themeId ) {
2017-11-02 20:59:47 -04:00
var panel = this , deferred = $ . Deferred ( ) , onceProcessingComplete , urlParser , queryParams ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
2017-10-07 02:00:54 -04:00
// Prevent loading a non-active theme preview when there is a drafted/scheduled changeset.
2017-11-02 20:59:47 -04:00
if ( ! panel . canSwitchTheme ( themeId ) ) {
2017-11-06 23:17:47 -05:00
deferred . reject ( {
errorCode : 'theme_switch_unavailable'
} ) ;
return deferred . promise ( ) ;
2017-10-07 02:00:54 -04:00
}
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
urlParser = document . createElement ( 'a' ) ;
urlParser . href = location . href ;
2017-10-01 23:37:46 -04:00
queryParams = _ . extend (
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
api . utils . parseQueryString ( urlParser . search . substr ( 1 ) ) ,
{
theme : themeId ,
2017-10-09 12:04:48 -04:00
changeset _uuid : api . settings . changeset . uuid ,
'return' : api . settings . url [ 'return' ]
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
}
2017-10-01 23:37:46 -04:00
) ;
// Include autosaved param to load autosave revision without prompting user to restore it.
if ( ! api . state ( 'saved' ) . get ( ) ) {
queryParams . customize _autosaved = 'on' ;
}
urlParser . search = $ . param ( queryParams ) ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
// Update loading message. Everything else is handled by reloading the page.
2017-10-04 02:48:46 -04:00
api . notifications . add ( new api . OverlayNotification ( 'theme_previewing' , {
2017-10-01 23:37:46 -04:00
message : api . l10n . themePreviewWait ,
type : 'info' ,
loading : true
} ) ) ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
onceProcessingComplete = function ( ) {
var request ;
if ( api . state ( 'processing' ) . get ( ) > 0 ) {
return ;
}
api . state ( 'processing' ) . unbind ( onceProcessingComplete ) ;
2017-10-01 23:37:46 -04:00
request = api . requestChangesetUpdate ( { } , { autosave : true } ) ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
request . done ( function ( ) {
deferred . resolve ( ) ;
$ ( window ) . off ( 'beforeunload.customize-confirm' ) ;
2017-10-09 12:04:48 -04:00
location . replace ( urlParser . href ) ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
} ) ;
request . fail ( function ( ) {
2017-10-01 23:37:46 -04:00
// @todo Show notification regarding failure.
api . notifications . remove ( 'theme_previewing' ) ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
deferred . reject ( ) ;
} ) ;
} ;
if ( 0 === api . state ( 'processing' ) . get ( ) ) {
onceProcessingComplete ( ) ;
} else {
api . state ( 'processing' ) . bind ( onceProcessingComplete ) ;
}
return deferred . promise ( ) ;
} ,
/ * *
* Update a theme via wp . updates .
*
* @ since 4.9 . 0
*
* @ param { jQuery . Event } event - Event .
* @ returns { void }
* /
updateTheme : function ( event ) {
wp . updates . maybeRequestFilesystemCredentials ( event ) ;
$ ( document ) . one ( 'wp-theme-update-success' , function ( e , response ) {
// Rerender the control to reflect the update.
api . control . each ( function ( control ) {
if ( 'theme' === control . params . type && control . params . theme . id === response . slug ) {
control . params . theme . hasUpdate = false ;
2017-10-30 21:33:47 -04:00
control . params . theme . version = response . newVersion ;
setTimeout ( function ( ) {
control . rerenderAsInstalled ( true ) ;
} , 2000 ) ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
}
} ) ;
} ) ;
wp . updates . updateTheme ( {
slug : $ ( event . target ) . closest ( '.notice' ) . data ( 'slug' )
} ) ;
} ,
/ * *
* Delete a theme via wp . updates .
*
* @ since 4.9 . 0
*
* @ param { jQuery . Event } event - Event .
* @ returns { void }
* /
deleteTheme : function ( event ) {
var theme , section ;
theme = $ ( event . target ) . data ( 'slug' ) ;
section = api . section ( 'installed_themes' ) ;
event . preventDefault ( ) ;
2017-10-24 15:06:47 -04:00
// Temporary since supplying SFTP credentials does not work yet. See #42184.
if ( api . settings . theme . _filesystemCredentialsNeeded ) {
return ;
}
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
// Confirmation dialog for deleting a theme.
if ( ! window . confirm ( api . settings . l10n . confirmDeleteTheme ) ) {
return ;
}
wp . updates . maybeRequestFilesystemCredentials ( event ) ;
$ ( document ) . one ( 'wp-theme-delete-success' , function ( ) {
var control = api . control ( 'installed_theme_' + theme ) ;
// Remove theme control.
control . container . remove ( ) ;
api . control . remove ( control . id ) ;
// Update installed count.
section . loaded = section . loaded - 1 ;
section . updateCount ( ) ;
// Rerender any other theme controls as uninstalled.
api . control . each ( function ( control ) {
if ( 'theme' === control . params . type && control . params . theme . id === theme ) {
control . rerenderAsInstalled ( false ) ;
}
} ) ;
} ) ;
wp . updates . deleteTheme ( {
slug : theme
} ) ;
// Close modal and focus the section.
section . closeDetails ( ) ;
section . focus ( ) ;
}
} ) ;
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
/ * *
2014-11-11 18:52:22 -05:00
* A Customizer Control .
*
* A control provides a UI element that allows a user to modify a Customizer Setting .
*
* @ see PHP class WP _Customize _Control .
*
* @ class
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
* @ augments wp . customize . Class
* /
api . Control = api . Class . extend ( {
2014-11-11 17:37:22 -05:00
defaultActiveArguments : { duration : 'fast' , completeCallback : $ . noop } ,
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
2017-10-28 20:15:53 -04:00
/ * *
* Default params .
*
* @ since 4.9 . 0
* @ var { object }
* /
2017-10-04 02:48:46 -04:00
defaults : {
Customize: Improve the menu creation flow.
Often, folks run into two issues when they create new menus: they click "Add a Menu" thinking it will add a new page to their menu, or they forget to assign their new menu to a location, and then wonder why it doesn't show up on their site.
This commit rearranges the order of items in the menu panel, and updates the flow for creating a menu by breaking it up into steps. Additionally, more help text has been added to guide people through the process of creating a menu.
Also adds default `type` lookups for Panel and Section instances. See #30741.
Props bpayton, obenland, westonruter, celloexpessions, afercia, melchoyce, zoonini, michelleweber.
Fixes #40104.
Built from https://develop.svn.wordpress.org/trunk@41768
git-svn-id: http://core.svn.wordpress.org/trunk@41602 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-10-04 22:22:49 -04:00
label : '' ,
description : '' ,
2017-10-04 02:48:46 -04:00
active : true ,
priority : 10
} ,
2017-10-20 17:48:46 -04:00
/ * *
* Initialize .
*
* @ param { string } id - Unique identifier for the control instance .
* @ param { object } options - Options hash for the control instance .
* @ param { object } options . type - Type of control ( e . g . text , radio , dropdown - pages , etc . )
* @ param { string } [ options . content ] - The HTML content for the control or at least its container . This should normally be left blank and instead supplying a templateId .
* @ param { string } [ options . templateId ] - Template ID for control ' s content .
* @ param { string } [ options . priority = 10 ] - Order of priority to show the control within the section .
* @ param { string } [ options . active = true ] - Whether the control is active .
* @ param { string } options . section - The ID of the section the control belongs to .
* @ param { mixed } [ options . setting ] - The ID of the main setting or an instance of this setting .
* @ param { mixed } options . settings - An object with keys ( e . g . default ) that maps to setting IDs or Setting / Value objects , or an array of setting IDs or Setting / Value objects .
* @ param { mixed } options . settings . default - The ID of the setting the control relates to .
* @ param { string } options . settings . data - @ todo Is this used ?
* @ param { string } options . label - Label .
* @ param { string } options . description - Description .
* @ param { number } [ options . instanceNumber ] - Order in which this instance was created in relation to other instances .
* @ param { object } [ options . params ] - Deprecated wrapper for the above properties .
* @ returns { void }
* /
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
initialize : function ( id , options ) {
2017-10-18 23:04:49 -04:00
var control = this , deferredSettingIds = [ ] , settings , gatherSettings ;
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
2017-10-30 22:59:47 -04:00
control . params = _ . extend (
{ } ,
control . defaults ,
control . params || { } , // In case sub-class already defines.
options . params || options || { } // The options.params property is deprecated, but it is checked first for back-compat.
) ;
2017-10-04 02:48:46 -04:00
if ( ! api . Control . instanceCounter ) {
api . Control . instanceCounter = 0 ;
}
api . Control . instanceCounter ++ ;
if ( ! control . params . instanceNumber ) {
control . params . instanceNumber = api . Control . instanceCounter ;
}
Customize: Allow controls to be created with pre-instantiated `Setting` object(s), or even with plain `Value` object(s).
* Allow passing settings in keyed object (e.g. `settings: { default: 'id' } ), or as an array (e.g. `settings: [ 'id' ]`) with first being default; again, `Setting`/`Value` objects may be supplied instead of IDs.
* Allow a single setting to be supplied with just a single `setting` param, either a string or a `Setting`/`Value` object.
* Update `changeset_status` and `scheduled_changeset_date` to be added dynamically with JS and simply passing of `api.state()` instances as `setting`.
* Introduce a `data-customize-setting-key-link` attribute which, unlike `data-customize-setting-link`, allows passing the setting key (e.g. `default`) as opposed to the setting ID.
* Allow `WP_Customize_Control::get_link()` to return `data-customize-setting-key-link` when setting is not registered.
* Eliminate `default_value` from `WP_Customize_Date_Time_Control` since now comes from supplied `Value`.
* Export status choices as `wp.customize.settings.changeset.statusChoices`.
* Export date and time formats as `wp.customize.settings.dateFormat` and `wp.customize.settings.timeFormat` respectively.
Props westonruter, sayedwp.
See #39896, #30738, #30741, #42083.
Fixes #37964, #36167.
Built from https://develop.svn.wordpress.org/trunk@41750
git-svn-id: http://core.svn.wordpress.org/trunk@41584 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-10-04 16:02:49 -04:00
// Look up the type if one was not supplied.
if ( ! control . params . type ) {
_ . find ( api . controlConstructor , function ( Constructor , type ) {
if ( Constructor === control . constructor ) {
control . params . type = type ;
return true ;
}
return false ;
} ) ;
}
2017-10-04 02:48:46 -04:00
if ( ! control . params . content ) {
control . params . content = $ ( '<li></li>' , {
id : 'customize-control-' + id . replace ( /]/g , '' ) . replace ( /\[/g , '-' ) ,
'class' : 'customize-control customize-control-' + control . params . type
} ) ;
}
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
control . id = id ;
2017-10-04 02:48:46 -04:00
control . selector = '#customize-control-' + id . replace ( /\]/g , '' ) . replace ( /\[/g , '-' ) ; // Deprecated, likely dead code from time before #28709.
if ( control . params . content ) {
control . container = $ ( control . params . content ) ;
} else {
control . container = $ ( control . selector ) ; // Likely dead, per above. See #28709.
}
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
2017-10-04 22:56:47 -04:00
if ( control . params . templateId ) {
control . templateSelector = control . params . templateId ;
} else {
control . templateSelector = 'customize-control-' + control . params . type + '-content' ;
}
2017-10-21 04:44:52 -04:00
control . deferred = _ . extend ( control . deferred || { } , {
2014-12-02 17:56:45 -05:00
embedded : new $ . Deferred ( )
2017-10-21 04:44:52 -04:00
} ) ;
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
control . section = new api . Value ( ) ;
control . priority = new api . Value ( ) ;
control . active = new api . Value ( ) ;
control . activeArgumentsQueue = [ ] ;
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
control . notifications = new api . Notifications ( {
alt : control . altNotice
} ) ;
2012-08-22 20:04:18 -04:00
control . elements = [ ] ;
2014-07-09 19:58:16 -04:00
control . active . bind ( function ( active ) {
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
var args = control . activeArgumentsQueue . shift ( ) ;
args = $ . extend ( { } , control . defaultActiveArguments , args ) ;
control . onChangeActive ( active , args ) ;
2014-07-09 19:58:16 -04:00
} ) ;
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
control . section . set ( control . params . section ) ;
control . priority . set ( isNaN ( control . params . priority ) ? 10 : control . params . priority ) ;
control . active . set ( control . params . active ) ;
2014-12-02 17:56:45 -05:00
api . utils . bubbleChildValueChanges ( control , [ 'section' , 'priority' , 'active' ] ) ;
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
Customize: Allow controls to be created with pre-instantiated `Setting` object(s), or even with plain `Value` object(s).
* Allow passing settings in keyed object (e.g. `settings: { default: 'id' } ), or as an array (e.g. `settings: [ 'id' ]`) with first being default; again, `Setting`/`Value` objects may be supplied instead of IDs.
* Allow a single setting to be supplied with just a single `setting` param, either a string or a `Setting`/`Value` object.
* Update `changeset_status` and `scheduled_changeset_date` to be added dynamically with JS and simply passing of `api.state()` instances as `setting`.
* Introduce a `data-customize-setting-key-link` attribute which, unlike `data-customize-setting-link`, allows passing the setting key (e.g. `default`) as opposed to the setting ID.
* Allow `WP_Customize_Control::get_link()` to return `data-customize-setting-key-link` when setting is not registered.
* Eliminate `default_value` from `WP_Customize_Date_Time_Control` since now comes from supplied `Value`.
* Export status choices as `wp.customize.settings.changeset.statusChoices`.
* Export date and time formats as `wp.customize.settings.dateFormat` and `wp.customize.settings.timeFormat` respectively.
Props westonruter, sayedwp.
See #39896, #30738, #30741, #42083.
Fixes #37964, #36167.
Built from https://develop.svn.wordpress.org/trunk@41750
git-svn-id: http://core.svn.wordpress.org/trunk@41584 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-10-04 16:02:49 -04:00
control . settings = { } ;
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
Customize: Allow controls to be created with pre-instantiated `Setting` object(s), or even with plain `Value` object(s).
* Allow passing settings in keyed object (e.g. `settings: { default: 'id' } ), or as an array (e.g. `settings: [ 'id' ]`) with first being default; again, `Setting`/`Value` objects may be supplied instead of IDs.
* Allow a single setting to be supplied with just a single `setting` param, either a string or a `Setting`/`Value` object.
* Update `changeset_status` and `scheduled_changeset_date` to be added dynamically with JS and simply passing of `api.state()` instances as `setting`.
* Introduce a `data-customize-setting-key-link` attribute which, unlike `data-customize-setting-link`, allows passing the setting key (e.g. `default`) as opposed to the setting ID.
* Allow `WP_Customize_Control::get_link()` to return `data-customize-setting-key-link` when setting is not registered.
* Eliminate `default_value` from `WP_Customize_Date_Time_Control` since now comes from supplied `Value`.
* Export status choices as `wp.customize.settings.changeset.statusChoices`.
* Export date and time formats as `wp.customize.settings.dateFormat` and `wp.customize.settings.timeFormat` respectively.
Props westonruter, sayedwp.
See #39896, #30738, #30741, #42083.
Fixes #37964, #36167.
Built from https://develop.svn.wordpress.org/trunk@41750
git-svn-id: http://core.svn.wordpress.org/trunk@41584 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-10-04 16:02:49 -04:00
settings = { } ;
if ( control . params . setting ) {
settings [ 'default' ] = control . params . setting ;
}
_ . extend ( settings , control . params . settings ) ;
2017-10-25 12:49:49 -04:00
// Note: Settings can be an array or an object, with values being either setting IDs or Setting (or Value) objects.
_ . each ( settings , function ( value , key ) {
var setting ;
if ( _ . isObject ( value ) && _ . isFunction ( value . extended ) && value . extended ( api . Value ) ) {
control . settings [ key ] = value ;
} else if ( _ . isString ( value ) ) {
setting = api ( value ) ;
if ( setting ) {
control . settings [ key ] = setting ;
} else {
deferredSettingIds . push ( value ) ;
}
Customize: Allow controls to be created with pre-instantiated `Setting` object(s), or even with plain `Value` object(s).
* Allow passing settings in keyed object (e.g. `settings: { default: 'id' } ), or as an array (e.g. `settings: [ 'id' ]`) with first being default; again, `Setting`/`Value` objects may be supplied instead of IDs.
* Allow a single setting to be supplied with just a single `setting` param, either a string or a `Setting`/`Value` object.
* Update `changeset_status` and `scheduled_changeset_date` to be added dynamically with JS and simply passing of `api.state()` instances as `setting`.
* Introduce a `data-customize-setting-key-link` attribute which, unlike `data-customize-setting-link`, allows passing the setting key (e.g. `default`) as opposed to the setting ID.
* Allow `WP_Customize_Control::get_link()` to return `data-customize-setting-key-link` when setting is not registered.
* Eliminate `default_value` from `WP_Customize_Date_Time_Control` since now comes from supplied `Value`.
* Export status choices as `wp.customize.settings.changeset.statusChoices`.
* Export date and time formats as `wp.customize.settings.dateFormat` and `wp.customize.settings.timeFormat` respectively.
Props westonruter, sayedwp.
See #39896, #30738, #30741, #42083.
Fixes #37964, #36167.
Built from https://develop.svn.wordpress.org/trunk@41750
git-svn-id: http://core.svn.wordpress.org/trunk@41584 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-10-04 16:02:49 -04:00
}
} ) ;
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
Customize: Allow controls to be created with pre-instantiated `Setting` object(s), or even with plain `Value` object(s).
* Allow passing settings in keyed object (e.g. `settings: { default: 'id' } ), or as an array (e.g. `settings: [ 'id' ]`) with first being default; again, `Setting`/`Value` objects may be supplied instead of IDs.
* Allow a single setting to be supplied with just a single `setting` param, either a string or a `Setting`/`Value` object.
* Update `changeset_status` and `scheduled_changeset_date` to be added dynamically with JS and simply passing of `api.state()` instances as `setting`.
* Introduce a `data-customize-setting-key-link` attribute which, unlike `data-customize-setting-link`, allows passing the setting key (e.g. `default`) as opposed to the setting ID.
* Allow `WP_Customize_Control::get_link()` to return `data-customize-setting-key-link` when setting is not registered.
* Eliminate `default_value` from `WP_Customize_Date_Time_Control` since now comes from supplied `Value`.
* Export status choices as `wp.customize.settings.changeset.statusChoices`.
* Export date and time formats as `wp.customize.settings.dateFormat` and `wp.customize.settings.timeFormat` respectively.
Props westonruter, sayedwp.
See #39896, #30738, #30741, #42083.
Fixes #37964, #36167.
Built from https://develop.svn.wordpress.org/trunk@41750
git-svn-id: http://core.svn.wordpress.org/trunk@41584 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-10-04 16:02:49 -04:00
gatherSettings = function ( ) {
// Fill-in all resolved settings.
_ . each ( settings , function ( settingId , key ) {
if ( ! control . settings [ key ] && _ . isString ( settingId ) ) {
control . settings [ key ] = api ( settingId ) ;
2016-02-24 13:28:28 -05:00
}
Customize: Allow controls to be created with pre-instantiated `Setting` object(s), or even with plain `Value` object(s).
* Allow passing settings in keyed object (e.g. `settings: { default: 'id' } ), or as an array (e.g. `settings: [ 'id' ]`) with first being default; again, `Setting`/`Value` objects may be supplied instead of IDs.
* Allow a single setting to be supplied with just a single `setting` param, either a string or a `Setting`/`Value` object.
* Update `changeset_status` and `scheduled_changeset_date` to be added dynamically with JS and simply passing of `api.state()` instances as `setting`.
* Introduce a `data-customize-setting-key-link` attribute which, unlike `data-customize-setting-link`, allows passing the setting key (e.g. `default`) as opposed to the setting ID.
* Allow `WP_Customize_Control::get_link()` to return `data-customize-setting-key-link` when setting is not registered.
* Eliminate `default_value` from `WP_Customize_Date_Time_Control` since now comes from supplied `Value`.
* Export status choices as `wp.customize.settings.changeset.statusChoices`.
* Export date and time formats as `wp.customize.settings.dateFormat` and `wp.customize.settings.timeFormat` respectively.
Props westonruter, sayedwp.
See #39896, #30738, #30741, #42083.
Fixes #37964, #36167.
Built from https://develop.svn.wordpress.org/trunk@41750
git-svn-id: http://core.svn.wordpress.org/trunk@41584 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-10-04 16:02:49 -04:00
} ) ;
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
Customize: Allow controls to be created with pre-instantiated `Setting` object(s), or even with plain `Value` object(s).
* Allow passing settings in keyed object (e.g. `settings: { default: 'id' } ), or as an array (e.g. `settings: [ 'id' ]`) with first being default; again, `Setting`/`Value` objects may be supplied instead of IDs.
* Allow a single setting to be supplied with just a single `setting` param, either a string or a `Setting`/`Value` object.
* Update `changeset_status` and `scheduled_changeset_date` to be added dynamically with JS and simply passing of `api.state()` instances as `setting`.
* Introduce a `data-customize-setting-key-link` attribute which, unlike `data-customize-setting-link`, allows passing the setting key (e.g. `default`) as opposed to the setting ID.
* Allow `WP_Customize_Control::get_link()` to return `data-customize-setting-key-link` when setting is not registered.
* Eliminate `default_value` from `WP_Customize_Date_Time_Control` since now comes from supplied `Value`.
* Export status choices as `wp.customize.settings.changeset.statusChoices`.
* Export date and time formats as `wp.customize.settings.dateFormat` and `wp.customize.settings.timeFormat` respectively.
Props westonruter, sayedwp.
See #39896, #30738, #30741, #42083.
Fixes #37964, #36167.
Built from https://develop.svn.wordpress.org/trunk@41750
git-svn-id: http://core.svn.wordpress.org/trunk@41584 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-10-04 16:02:49 -04:00
// Make sure settings passed as array gets associated with default.
if ( control . settings [ 0 ] && ! control . settings [ 'default' ] ) {
control . settings [ 'default' ] = control . settings [ 0 ] ;
}
2016-02-24 13:28:28 -05:00
Customize: Allow controls to be created with pre-instantiated `Setting` object(s), or even with plain `Value` object(s).
* Allow passing settings in keyed object (e.g. `settings: { default: 'id' } ), or as an array (e.g. `settings: [ 'id' ]`) with first being default; again, `Setting`/`Value` objects may be supplied instead of IDs.
* Allow a single setting to be supplied with just a single `setting` param, either a string or a `Setting`/`Value` object.
* Update `changeset_status` and `scheduled_changeset_date` to be added dynamically with JS and simply passing of `api.state()` instances as `setting`.
* Introduce a `data-customize-setting-key-link` attribute which, unlike `data-customize-setting-link`, allows passing the setting key (e.g. `default`) as opposed to the setting ID.
* Allow `WP_Customize_Control::get_link()` to return `data-customize-setting-key-link` when setting is not registered.
* Eliminate `default_value` from `WP_Customize_Date_Time_Control` since now comes from supplied `Value`.
* Export status choices as `wp.customize.settings.changeset.statusChoices`.
* Export date and time formats as `wp.customize.settings.dateFormat` and `wp.customize.settings.timeFormat` respectively.
Props westonruter, sayedwp.
See #39896, #30738, #30741, #42083.
Fixes #37964, #36167.
Built from https://develop.svn.wordpress.org/trunk@41750
git-svn-id: http://core.svn.wordpress.org/trunk@41584 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-10-04 16:02:49 -04:00
// Identify the main setting.
control . setting = control . settings [ 'default' ] || null ;
2017-10-25 12:49:49 -04:00
control . linkElements ( ) ; // Link initial elements present in server-rendered content.
Customize: Allow controls to be created with pre-instantiated `Setting` object(s), or even with plain `Value` object(s).
* Allow passing settings in keyed object (e.g. `settings: { default: 'id' } ), or as an array (e.g. `settings: [ 'id' ]`) with first being default; again, `Setting`/`Value` objects may be supplied instead of IDs.
* Allow a single setting to be supplied with just a single `setting` param, either a string or a `Setting`/`Value` object.
* Update `changeset_status` and `scheduled_changeset_date` to be added dynamically with JS and simply passing of `api.state()` instances as `setting`.
* Introduce a `data-customize-setting-key-link` attribute which, unlike `data-customize-setting-link`, allows passing the setting key (e.g. `default`) as opposed to the setting ID.
* Allow `WP_Customize_Control::get_link()` to return `data-customize-setting-key-link` when setting is not registered.
* Eliminate `default_value` from `WP_Customize_Date_Time_Control` since now comes from supplied `Value`.
* Export status choices as `wp.customize.settings.changeset.statusChoices`.
* Export date and time formats as `wp.customize.settings.dateFormat` and `wp.customize.settings.timeFormat` respectively.
Props westonruter, sayedwp.
See #39896, #30738, #30741, #42083.
Fixes #37964, #36167.
Built from https://develop.svn.wordpress.org/trunk@41750
git-svn-id: http://core.svn.wordpress.org/trunk@41584 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-10-04 16:02:49 -04:00
control . embed ( ) ;
} ;
Customize: Add setting validation model and control notifications to augment setting sanitization.
When a setting is invalid, not only will it be blocked from being saved but all other settings will be blocked as well. This ensures that Customizer saves aren't partial but are more transactional. User will be displayed the error in a notification so that they can fix and re-attempt saving.
PHP changes:
* Introduces `WP_Customize_Setting::validate()`, `WP_Customize_Setting::$validate_callback`, and the `customize_validate_{$setting_id}` filter.
* Introduces `WP_Customize_Manager::validate_setting_values()` to do validation (and sanitization) for the setting values supplied, returning a list of `WP_Error` instances for invalid settings.
* Attempting to save settings that are invalid will result in the save being blocked entirely, with the errors being sent in the `customize_save_response`. Modifies `WP_Customize_Manager::save()` to check all settings for validity issues prior to calling their `save` methods.
* Introduces `WP_Customize_Setting::json()` for parity with the other Customizer classes. This includes exporting of the `type`.
* Modifies `WP_Customize_Manager::post_value()` to apply `validate` after `sanitize`, and if validation fails, to return the `$default`.
* Introduces `customize_save_validation_before` action which fires right before the validation checks are made prior to saving.
JS changes:
* Introduces `wp.customize.Notification` in JS which to represent `WP_Error` instances returned from the server when setting validation fails.
* Introduces `wp.customize.Setting.prototype.notifications`.
* Introduces `wp.customize.Control.prototype.notifications`, which are synced with a control's settings' notifications.
* Introduces `wp.customize.Control.prototype.renderNotifications()` to re-render a control's notifications in its notification area. This is called automatically when the notifications collection changes.
* Introduces `wp.customize.settingConstructor`, allowing custom setting types to be used in the same way that custom controls, panels, and sections can be made.
* Injects a notification area into existing controls which is populated in response to the control's `notifications` collection changing. A custom control can customize the placement of the notification area by overriding the new `getNotificationsContainerElement` method.
* When a save fails due to setting invalidity, the invalidity errors will be added to the settings to then populate in the controls' notification areas, and the first such invalid control will be focused.
Props westonruter, celloexpressions, mrahmadawais.
See #35210.
See #30937.
Fixes #34893.
Built from https://develop.svn.wordpress.org/trunk@37476
git-svn-id: http://core.svn.wordpress.org/trunk@37444 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-05-20 17:10:27 -04:00
Customize: Allow controls to be created with pre-instantiated `Setting` object(s), or even with plain `Value` object(s).
* Allow passing settings in keyed object (e.g. `settings: { default: 'id' } ), or as an array (e.g. `settings: [ 'id' ]`) with first being default; again, `Setting`/`Value` objects may be supplied instead of IDs.
* Allow a single setting to be supplied with just a single `setting` param, either a string or a `Setting`/`Value` object.
* Update `changeset_status` and `scheduled_changeset_date` to be added dynamically with JS and simply passing of `api.state()` instances as `setting`.
* Introduce a `data-customize-setting-key-link` attribute which, unlike `data-customize-setting-link`, allows passing the setting key (e.g. `default`) as opposed to the setting ID.
* Allow `WP_Customize_Control::get_link()` to return `data-customize-setting-key-link` when setting is not registered.
* Eliminate `default_value` from `WP_Customize_Date_Time_Control` since now comes from supplied `Value`.
* Export status choices as `wp.customize.settings.changeset.statusChoices`.
* Export date and time formats as `wp.customize.settings.dateFormat` and `wp.customize.settings.timeFormat` respectively.
Props westonruter, sayedwp.
See #39896, #30738, #30741, #42083.
Fixes #37964, #36167.
Built from https://develop.svn.wordpress.org/trunk@41750
git-svn-id: http://core.svn.wordpress.org/trunk@41584 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-10-04 16:02:49 -04:00
if ( 0 === deferredSettingIds . length ) {
gatherSettings ( ) ;
} else {
api . apply ( api , deferredSettingIds . concat ( gatherSettings ) ) ;
2016-02-24 13:28:28 -05:00
}
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
2015-09-05 15:53:24 -04:00
// After the control is embedded on the page, invoke the "ready" method.
2014-12-02 17:56:45 -05:00
control . deferred . embedded . done ( function ( ) {
2017-10-25 12:49:49 -04:00
control . linkElements ( ) ; // Link any additional elements after template is rendered by renderContent().
2017-09-19 01:40:44 -04:00
control . setupNotifications ( ) ;
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
control . ready ( ) ;
} ) ;
} ,
Customize: Allow controls to be created with pre-instantiated `Setting` object(s), or even with plain `Value` object(s).
* Allow passing settings in keyed object (e.g. `settings: { default: 'id' } ), or as an array (e.g. `settings: [ 'id' ]`) with first being default; again, `Setting`/`Value` objects may be supplied instead of IDs.
* Allow a single setting to be supplied with just a single `setting` param, either a string or a `Setting`/`Value` object.
* Update `changeset_status` and `scheduled_changeset_date` to be added dynamically with JS and simply passing of `api.state()` instances as `setting`.
* Introduce a `data-customize-setting-key-link` attribute which, unlike `data-customize-setting-link`, allows passing the setting key (e.g. `default`) as opposed to the setting ID.
* Allow `WP_Customize_Control::get_link()` to return `data-customize-setting-key-link` when setting is not registered.
* Eliminate `default_value` from `WP_Customize_Date_Time_Control` since now comes from supplied `Value`.
* Export status choices as `wp.customize.settings.changeset.statusChoices`.
* Export date and time formats as `wp.customize.settings.dateFormat` and `wp.customize.settings.timeFormat` respectively.
Props westonruter, sayedwp.
See #39896, #30738, #30741, #42083.
Fixes #37964, #36167.
Built from https://develop.svn.wordpress.org/trunk@41750
git-svn-id: http://core.svn.wordpress.org/trunk@41584 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-10-04 16:02:49 -04:00
/ * *
* Link elements between settings and inputs .
*
* @ since 4.7 . 0
* @ access public
*
* @ returns { void }
* /
linkElements : function ( ) {
var control = this , nodes , radios , element ;
nodes = control . container . find ( '[data-customize-setting-link], [data-customize-setting-key-link]' ) ;
radios = { } ;
nodes . each ( function ( ) {
var node = $ ( this ) , name , setting ;
if ( node . data ( 'customizeSettingLinked' ) ) {
return ;
}
node . data ( 'customizeSettingLinked' , true ) ; // Prevent re-linking element.
if ( node . is ( ':radio' ) ) {
name = node . prop ( 'name' ) ;
if ( radios [ name ] ) {
return ;
}
radios [ name ] = true ;
node = nodes . filter ( '[name="' + name + '"]' ) ;
}
// Let link by default refer to setting ID. If it doesn't exist, fallback to looking up by setting key.
if ( node . data ( 'customizeSettingLink' ) ) {
setting = api ( node . data ( 'customizeSettingLink' ) ) ;
} else if ( node . data ( 'customizeSettingKeyLink' ) ) {
setting = control . settings [ node . data ( 'customizeSettingKeyLink' ) ] ;
}
if ( setting ) {
element = new api . Element ( node ) ;
control . elements . push ( element ) ;
element . sync ( setting ) ;
element . set ( setting ( ) ) ;
}
} ) ;
} ,
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
/ * *
2014-11-11 18:52:22 -05:00
* Embed the control into the page .
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
* /
embed : function ( ) {
var control = this ,
inject ;
// Watch for changes to the section state
inject = function ( sectionId ) {
var parentContainer ;
2016-02-25 07:53:27 -05:00
if ( ! sectionId ) { // @todo allow a control to be embedded without a section, for instance a control embedded in the front end.
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
return ;
}
// Wait for the section to be registered
api . section ( sectionId , function ( section ) {
// Wait for the section to be ready/initialized
2014-12-02 17:56:45 -05:00
section . deferred . embedded . done ( function ( ) {
2016-09-23 18:23:30 -04:00
parentContainer = ( section . contentContainer . is ( 'ul' ) ) ? section . contentContainer : section . contentContainer . find ( 'ul:first' ) ;
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
if ( ! control . container . parent ( ) . is ( parentContainer ) ) {
parentContainer . append ( control . container ) ;
control . renderContent ( ) ;
}
2014-12-02 17:56:45 -05:00
control . deferred . embedded . resolve ( ) ;
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
} ) ;
} ) ;
} ;
control . section . bind ( inject ) ;
inject ( control . section . get ( ) ) ;
2012-08-22 20:04:18 -04:00
} ,
2014-08-08 19:31:15 -04:00
/ * *
2014-11-11 18:52:22 -05:00
* Triggered when the control ' s markup has been injected into the DOM .
*
2016-10-25 02:31:31 -04:00
* @ returns { void }
2014-08-08 19:31:15 -04:00
* /
2016-10-25 02:31:31 -04:00
ready : function ( ) {
var control = this , newItem ;
if ( 'dropdown-pages' === control . params . type && control . params . allow _addition ) {
newItem = control . container . find ( '.new-content-item' ) ;
newItem . hide ( ) ; // Hide in JS to preserve flex display when showing.
control . container . on ( 'click' , '.add-new-toggle' , function ( e ) {
$ ( e . currentTarget ) . slideUp ( 180 ) ;
newItem . slideDown ( 180 ) ;
newItem . find ( '.create-item-input' ) . focus ( ) ;
} ) ;
control . container . on ( 'click' , '.add-content' , function ( ) {
control . addNewPage ( ) ;
} ) ;
2017-10-16 03:57:48 -04:00
control . container . on ( 'keydown' , '.create-item-input' , function ( e ) {
2016-10-25 02:31:31 -04:00
if ( 13 === e . which ) { // Enter
control . addNewPage ( ) ;
}
} ) ;
}
} ,
2012-08-22 20:04:18 -04:00
Customize: Add setting validation model and control notifications to augment setting sanitization.
When a setting is invalid, not only will it be blocked from being saved but all other settings will be blocked as well. This ensures that Customizer saves aren't partial but are more transactional. User will be displayed the error in a notification so that they can fix and re-attempt saving.
PHP changes:
* Introduces `WP_Customize_Setting::validate()`, `WP_Customize_Setting::$validate_callback`, and the `customize_validate_{$setting_id}` filter.
* Introduces `WP_Customize_Manager::validate_setting_values()` to do validation (and sanitization) for the setting values supplied, returning a list of `WP_Error` instances for invalid settings.
* Attempting to save settings that are invalid will result in the save being blocked entirely, with the errors being sent in the `customize_save_response`. Modifies `WP_Customize_Manager::save()` to check all settings for validity issues prior to calling their `save` methods.
* Introduces `WP_Customize_Setting::json()` for parity with the other Customizer classes. This includes exporting of the `type`.
* Modifies `WP_Customize_Manager::post_value()` to apply `validate` after `sanitize`, and if validation fails, to return the `$default`.
* Introduces `customize_save_validation_before` action which fires right before the validation checks are made prior to saving.
JS changes:
* Introduces `wp.customize.Notification` in JS which to represent `WP_Error` instances returned from the server when setting validation fails.
* Introduces `wp.customize.Setting.prototype.notifications`.
* Introduces `wp.customize.Control.prototype.notifications`, which are synced with a control's settings' notifications.
* Introduces `wp.customize.Control.prototype.renderNotifications()` to re-render a control's notifications in its notification area. This is called automatically when the notifications collection changes.
* Introduces `wp.customize.settingConstructor`, allowing custom setting types to be used in the same way that custom controls, panels, and sections can be made.
* Injects a notification area into existing controls which is populated in response to the control's `notifications` collection changing. A custom control can customize the placement of the notification area by overriding the new `getNotificationsContainerElement` method.
* When a save fails due to setting invalidity, the invalidity errors will be added to the settings to then populate in the controls' notification areas, and the first such invalid control will be focused.
Props westonruter, celloexpressions, mrahmadawais.
See #35210.
See #30937.
Fixes #34893.
Built from https://develop.svn.wordpress.org/trunk@37476
git-svn-id: http://core.svn.wordpress.org/trunk@37444 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-05-20 17:10:27 -04:00
/ * *
* Get the element inside of a control ' s container that contains the validation error message .
*
* Control subclasses may override this to return the proper container to render notifications into .
* Injects the notification container for existing controls that lack the necessary container ,
* including special handling for nav menu items and widgets .
*
* @ since 4.6 . 0
* @ returns { jQuery } Setting validation message element .
* @ this { wp . customize . Control }
* /
getNotificationsContainerElement : function ( ) {
var control = this , controlTitle , notificationsContainer ;
notificationsContainer = control . container . find ( '.customize-control-notifications-container:first' ) ;
if ( notificationsContainer . length ) {
return notificationsContainer ;
}
notificationsContainer = $ ( '<div class="customize-control-notifications-container"></div>' ) ;
if ( control . container . hasClass ( 'customize-control-nav_menu_item' ) ) {
control . container . find ( '.menu-item-settings:first' ) . prepend ( notificationsContainer ) ;
} else if ( control . container . hasClass ( 'customize-control-widget_form' ) ) {
control . container . find ( '.widget-inside:first' ) . prepend ( notificationsContainer ) ;
} else {
controlTitle = control . container . find ( '.customize-control-title' ) ;
if ( controlTitle . length ) {
controlTitle . after ( notificationsContainer ) ;
} else {
control . container . prepend ( notificationsContainer ) ;
}
}
return notificationsContainer ;
} ,
2017-09-19 01:40:44 -04:00
/ * *
* Set up notifications .
*
* @ since 4.9 . 0
* @ returns { void }
* /
setupNotifications : function ( ) {
var control = this , renderNotificationsIfVisible , onSectionAssigned ;
Customize: Allow controls to be created with pre-instantiated `Setting` object(s), or even with plain `Value` object(s).
* Allow passing settings in keyed object (e.g. `settings: { default: 'id' } ), or as an array (e.g. `settings: [ 'id' ]`) with first being default; again, `Setting`/`Value` objects may be supplied instead of IDs.
* Allow a single setting to be supplied with just a single `setting` param, either a string or a `Setting`/`Value` object.
* Update `changeset_status` and `scheduled_changeset_date` to be added dynamically with JS and simply passing of `api.state()` instances as `setting`.
* Introduce a `data-customize-setting-key-link` attribute which, unlike `data-customize-setting-link`, allows passing the setting key (e.g. `default`) as opposed to the setting ID.
* Allow `WP_Customize_Control::get_link()` to return `data-customize-setting-key-link` when setting is not registered.
* Eliminate `default_value` from `WP_Customize_Date_Time_Control` since now comes from supplied `Value`.
* Export status choices as `wp.customize.settings.changeset.statusChoices`.
* Export date and time formats as `wp.customize.settings.dateFormat` and `wp.customize.settings.timeFormat` respectively.
Props westonruter, sayedwp.
See #39896, #30738, #30741, #42083.
Fixes #37964, #36167.
Built from https://develop.svn.wordpress.org/trunk@41750
git-svn-id: http://core.svn.wordpress.org/trunk@41584 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-10-04 16:02:49 -04:00
// Add setting notifications to the control notification.
_ . each ( control . settings , function ( setting ) {
if ( ! setting . notifications ) {
return ;
}
setting . notifications . bind ( 'add' , function ( settingNotification ) {
var params = _ . extend (
{ } ,
settingNotification ,
{
setting : setting . id
}
) ;
control . notifications . add ( new api . Notification ( setting . id + ':' + settingNotification . code , params ) ) ;
} ) ;
setting . notifications . bind ( 'remove' , function ( settingNotification ) {
control . notifications . remove ( setting . id + ':' + settingNotification . code ) ;
} ) ;
} ) ;
2017-09-19 01:40:44 -04:00
renderNotificationsIfVisible = function ( ) {
var sectionId = control . section ( ) ;
if ( ! sectionId || ( api . section . has ( sectionId ) && api . section ( sectionId ) . expanded ( ) ) ) {
control . notifications . render ( ) ;
}
} ;
control . notifications . bind ( 'rendered' , function ( ) {
var notifications = control . notifications . get ( ) ;
control . container . toggleClass ( 'has-notifications' , 0 !== notifications . length ) ;
control . container . toggleClass ( 'has-error' , 0 !== _ . where ( notifications , { type : 'error' } ) . length ) ;
} ) ;
onSectionAssigned = function ( newSectionId , oldSectionId ) {
if ( oldSectionId && api . section . has ( oldSectionId ) ) {
api . section ( oldSectionId ) . expanded . unbind ( renderNotificationsIfVisible ) ;
}
if ( newSectionId ) {
api . section ( newSectionId , function ( section ) {
section . expanded . bind ( renderNotificationsIfVisible ) ;
renderNotificationsIfVisible ( ) ;
} ) ;
}
} ;
control . section . bind ( onSectionAssigned ) ;
onSectionAssigned ( control . section . get ( ) ) ;
control . notifications . bind ( 'change' , _ . debounce ( renderNotificationsIfVisible ) ) ;
} ,
Customize: Add setting validation model and control notifications to augment setting sanitization.
When a setting is invalid, not only will it be blocked from being saved but all other settings will be blocked as well. This ensures that Customizer saves aren't partial but are more transactional. User will be displayed the error in a notification so that they can fix and re-attempt saving.
PHP changes:
* Introduces `WP_Customize_Setting::validate()`, `WP_Customize_Setting::$validate_callback`, and the `customize_validate_{$setting_id}` filter.
* Introduces `WP_Customize_Manager::validate_setting_values()` to do validation (and sanitization) for the setting values supplied, returning a list of `WP_Error` instances for invalid settings.
* Attempting to save settings that are invalid will result in the save being blocked entirely, with the errors being sent in the `customize_save_response`. Modifies `WP_Customize_Manager::save()` to check all settings for validity issues prior to calling their `save` methods.
* Introduces `WP_Customize_Setting::json()` for parity with the other Customizer classes. This includes exporting of the `type`.
* Modifies `WP_Customize_Manager::post_value()` to apply `validate` after `sanitize`, and if validation fails, to return the `$default`.
* Introduces `customize_save_validation_before` action which fires right before the validation checks are made prior to saving.
JS changes:
* Introduces `wp.customize.Notification` in JS which to represent `WP_Error` instances returned from the server when setting validation fails.
* Introduces `wp.customize.Setting.prototype.notifications`.
* Introduces `wp.customize.Control.prototype.notifications`, which are synced with a control's settings' notifications.
* Introduces `wp.customize.Control.prototype.renderNotifications()` to re-render a control's notifications in its notification area. This is called automatically when the notifications collection changes.
* Introduces `wp.customize.settingConstructor`, allowing custom setting types to be used in the same way that custom controls, panels, and sections can be made.
* Injects a notification area into existing controls which is populated in response to the control's `notifications` collection changing. A custom control can customize the placement of the notification area by overriding the new `getNotificationsContainerElement` method.
* When a save fails due to setting invalidity, the invalidity errors will be added to the settings to then populate in the controls' notification areas, and the first such invalid control will be focused.
Props westonruter, celloexpressions, mrahmadawais.
See #35210.
See #30937.
Fixes #34893.
Built from https://develop.svn.wordpress.org/trunk@37476
git-svn-id: http://core.svn.wordpress.org/trunk@37444 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-05-20 17:10:27 -04:00
/ * *
* Render notifications .
*
* Renders the ` control.notifications ` into the control ' s container .
* Control subclasses may override this method to do their own handling
* of rendering notifications .
*
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
* @ deprecated in favor of ` control.notifications.render() `
Customize: Add setting validation model and control notifications to augment setting sanitization.
When a setting is invalid, not only will it be blocked from being saved but all other settings will be blocked as well. This ensures that Customizer saves aren't partial but are more transactional. User will be displayed the error in a notification so that they can fix and re-attempt saving.
PHP changes:
* Introduces `WP_Customize_Setting::validate()`, `WP_Customize_Setting::$validate_callback`, and the `customize_validate_{$setting_id}` filter.
* Introduces `WP_Customize_Manager::validate_setting_values()` to do validation (and sanitization) for the setting values supplied, returning a list of `WP_Error` instances for invalid settings.
* Attempting to save settings that are invalid will result in the save being blocked entirely, with the errors being sent in the `customize_save_response`. Modifies `WP_Customize_Manager::save()` to check all settings for validity issues prior to calling their `save` methods.
* Introduces `WP_Customize_Setting::json()` for parity with the other Customizer classes. This includes exporting of the `type`.
* Modifies `WP_Customize_Manager::post_value()` to apply `validate` after `sanitize`, and if validation fails, to return the `$default`.
* Introduces `customize_save_validation_before` action which fires right before the validation checks are made prior to saving.
JS changes:
* Introduces `wp.customize.Notification` in JS which to represent `WP_Error` instances returned from the server when setting validation fails.
* Introduces `wp.customize.Setting.prototype.notifications`.
* Introduces `wp.customize.Control.prototype.notifications`, which are synced with a control's settings' notifications.
* Introduces `wp.customize.Control.prototype.renderNotifications()` to re-render a control's notifications in its notification area. This is called automatically when the notifications collection changes.
* Introduces `wp.customize.settingConstructor`, allowing custom setting types to be used in the same way that custom controls, panels, and sections can be made.
* Injects a notification area into existing controls which is populated in response to the control's `notifications` collection changing. A custom control can customize the placement of the notification area by overriding the new `getNotificationsContainerElement` method.
* When a save fails due to setting invalidity, the invalidity errors will be added to the settings to then populate in the controls' notification areas, and the first such invalid control will be focused.
Props westonruter, celloexpressions, mrahmadawais.
See #35210.
See #30937.
Fixes #34893.
Built from https://develop.svn.wordpress.org/trunk@37476
git-svn-id: http://core.svn.wordpress.org/trunk@37444 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-05-20 17:10:27 -04:00
* @ since 4.6 . 0
* @ this { wp . customize . Control }
* /
renderNotifications : function ( ) {
var control = this , container , notifications , hasError = false ;
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
if ( 'undefined' !== typeof console && console . warn ) {
console . warn ( '[DEPRECATED] wp.customize.Control.prototype.renderNotifications() is deprecated in favor of instantating a wp.customize.Notifications and calling its render() method.' ) ;
}
Customize: Add setting validation model and control notifications to augment setting sanitization.
When a setting is invalid, not only will it be blocked from being saved but all other settings will be blocked as well. This ensures that Customizer saves aren't partial but are more transactional. User will be displayed the error in a notification so that they can fix and re-attempt saving.
PHP changes:
* Introduces `WP_Customize_Setting::validate()`, `WP_Customize_Setting::$validate_callback`, and the `customize_validate_{$setting_id}` filter.
* Introduces `WP_Customize_Manager::validate_setting_values()` to do validation (and sanitization) for the setting values supplied, returning a list of `WP_Error` instances for invalid settings.
* Attempting to save settings that are invalid will result in the save being blocked entirely, with the errors being sent in the `customize_save_response`. Modifies `WP_Customize_Manager::save()` to check all settings for validity issues prior to calling their `save` methods.
* Introduces `WP_Customize_Setting::json()` for parity with the other Customizer classes. This includes exporting of the `type`.
* Modifies `WP_Customize_Manager::post_value()` to apply `validate` after `sanitize`, and if validation fails, to return the `$default`.
* Introduces `customize_save_validation_before` action which fires right before the validation checks are made prior to saving.
JS changes:
* Introduces `wp.customize.Notification` in JS which to represent `WP_Error` instances returned from the server when setting validation fails.
* Introduces `wp.customize.Setting.prototype.notifications`.
* Introduces `wp.customize.Control.prototype.notifications`, which are synced with a control's settings' notifications.
* Introduces `wp.customize.Control.prototype.renderNotifications()` to re-render a control's notifications in its notification area. This is called automatically when the notifications collection changes.
* Introduces `wp.customize.settingConstructor`, allowing custom setting types to be used in the same way that custom controls, panels, and sections can be made.
* Injects a notification area into existing controls which is populated in response to the control's `notifications` collection changing. A custom control can customize the placement of the notification area by overriding the new `getNotificationsContainerElement` method.
* When a save fails due to setting invalidity, the invalidity errors will be added to the settings to then populate in the controls' notification areas, and the first such invalid control will be focused.
Props westonruter, celloexpressions, mrahmadawais.
See #35210.
See #30937.
Fixes #34893.
Built from https://develop.svn.wordpress.org/trunk@37476
git-svn-id: http://core.svn.wordpress.org/trunk@37444 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-05-20 17:10:27 -04:00
container = control . getNotificationsContainerElement ( ) ;
if ( ! container || ! container . length ) {
return ;
}
notifications = [ ] ;
control . notifications . each ( function ( notification ) {
notifications . push ( notification ) ;
if ( 'error' === notification . type ) {
hasError = true ;
}
} ) ;
if ( 0 === notifications . length ) {
container . stop ( ) . slideUp ( 'fast' ) ;
} else {
container . stop ( ) . slideDown ( 'fast' , null , function ( ) {
$ ( this ) . css ( 'height' , 'auto' ) ;
} ) ;
}
if ( ! control . notificationsTemplate ) {
control . notificationsTemplate = wp . template ( 'customize-control-notifications' ) ;
}
control . container . toggleClass ( 'has-notifications' , 0 !== notifications . length ) ;
control . container . toggleClass ( 'has-error' , hasError ) ;
container . empty ( ) . append ( $ . trim (
control . notificationsTemplate ( { notifications : notifications , altNotice : Boolean ( control . altNotice ) } )
) ) ;
} ,
2014-07-09 19:58:16 -04:00
/ * *
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
* Normal controls do not expand , so just expand its parent
2014-07-09 19:58:16 -04:00
*
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
* @ param { Object } [ params ]
* /
expand : function ( params ) {
api . section ( this . section ( ) ) . expand ( params ) ;
} ,
/ * *
2014-12-03 21:04:22 -05:00
* Bring the containing section and panel into view and then
* this control into view , focusing on the first input .
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
* /
focus : focus ,
/ * *
* Update UI in response to a change in the control ' s active state .
* This does not change the active state , it merely handles the behavior
* for when it does change .
2014-07-09 19:58:16 -04:00
*
2014-12-03 21:04:22 -05:00
* @ since 4.1 . 0
*
* @ param { Boolean } active
* @ param { Object } args
* @ param { Number } args . duration
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
* @ param { Function } args . completeCallback
2014-07-09 19:58:16 -04:00
* /
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
onChangeActive : function ( active , args ) {
2015-08-26 03:26:21 -04:00
if ( args . unchanged ) {
if ( args . completeCallback ) {
args . completeCallback ( ) ;
}
return ;
}
2015-09-25 15:54:50 -04:00
if ( ! $ . contains ( document , this . container [ 0 ] ) ) {
2014-11-11 17:37:22 -05:00
// jQuery.fn.slideUp is not hiding an element if it is not in the DOM
this . container . toggle ( active ) ;
2014-12-15 14:54:21 -05:00
if ( args . completeCallback ) {
args . completeCallback ( ) ;
}
2014-11-11 17:37:22 -05:00
} else if ( active ) {
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
this . container . slideDown ( args . duration , args . completeCallback ) ;
2014-07-09 19:58:16 -04:00
} else {
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
this . container . slideUp ( args . duration , args . completeCallback ) ;
2014-07-09 19:58:16 -04:00
}
} ,
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
/ * *
2014-12-03 21:04:22 -05:00
* @ deprecated 4.1 . 0 Use this . onChangeActive ( ) instead .
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
* /
toggle : function ( active ) {
return this . onChangeActive ( active , this . defaultActiveArguments ) ;
} ,
/ * *
* Shorthand way to enable the active state .
*
2014-12-03 21:04:22 -05:00
* @ since 4.1 . 0
*
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
* @ param { Object } [ params ]
* @ returns { Boolean } false if already active
* /
activate : Container . prototype . activate ,
/ * *
* Shorthand way to disable the active state .
*
2014-12-03 21:04:22 -05:00
* @ since 4.1 . 0
*
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
* @ param { Object } [ params ]
* @ returns { Boolean } false if already inactive
* /
deactivate : Container . prototype . deactivate ,
2014-12-15 14:54:21 -05:00
/ * *
* Re - use _toggleActive from Container class .
*
* @ access private
* /
_toggleActive : Container . prototype . _toggleActive ,
2017-10-04 02:48:46 -04:00
// @todo This function appears to be dead code and can be removed.
2012-08-22 20:04:18 -04:00
dropdownInit : function ( ) {
2013-11-15 01:08:10 -05:00
var control = this ,
statuses = this . container . find ( '.dropdown-status' ) ,
params = this . params ,
toggleFreeze = false ,
update = function ( to ) {
2017-10-04 02:48:46 -04:00
if ( 'string' === typeof to && params . statuses && params . statuses [ to ] ) {
2012-08-22 20:04:18 -04:00
statuses . html ( params . statuses [ to ] ) . show ( ) ;
2017-10-04 02:48:46 -04:00
} else {
2012-08-22 20:04:18 -04:00
statuses . hide ( ) ;
2017-10-04 02:48:46 -04:00
}
2012-08-22 20:04:18 -04:00
} ;
2012-11-09 00:44:00 -05:00
2012-08-22 20:04:18 -04:00
// Support the .dropdown class to open/close complex elements
2012-11-20 16:25:54 -05:00
this . container . on ( 'click keydown' , '.dropdown' , function ( event ) {
2014-12-02 17:56:45 -05:00
if ( api . utils . isKeydownButNotEnterEvent ( event ) ) {
2012-11-20 16:25:54 -05:00
return ;
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
}
2012-11-20 16:25:54 -05:00
2012-08-22 20:04:18 -04:00
event . preventDefault ( ) ;
2012-11-09 00:44:00 -05:00
2017-10-04 02:48:46 -04:00
if ( ! toggleFreeze ) {
control . container . toggleClass ( 'open' ) ;
}
2012-11-09 00:44:00 -05:00
2017-10-04 02:48:46 -04:00
if ( control . container . hasClass ( 'open' ) ) {
control . container . parent ( ) . parent ( ) . find ( 'li.library-selected' ) . focus ( ) ;
}
2012-11-09 15:57:09 -05:00
2012-11-06 09:47:25 -05:00
// Don't want to fire focus and click at same time
toggleFreeze = true ;
setTimeout ( function ( ) {
toggleFreeze = false ;
} , 400 ) ;
2012-08-22 20:04:18 -04:00
} ) ;
this . setting . bind ( update ) ;
update ( this . setting ( ) ) ;
2014-10-24 12:32:18 -04:00
} ,
/ * *
* Render the control from its JS template , if it exists .
*
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
* The control ' s container must already exist in the DOM .
2014-12-03 21:04:22 -05:00
*
* @ since 4.1 . 0
2014-10-24 12:32:18 -04:00
* /
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
renderContent : function ( ) {
2017-10-27 16:18:47 -04:00
var control = this , template , standardTypes , templateId , sectionId ;
2017-10-18 23:04:49 -04:00
standardTypes = [
'button' ,
'checkbox' ,
'date' ,
'datetime-local' ,
'email' ,
'month' ,
'number' ,
'password' ,
'radio' ,
'range' ,
'search' ,
'select' ,
'tel' ,
'time' ,
'text' ,
'textarea' ,
'week' ,
'url'
] ;
templateId = control . templateSelector ;
2017-10-19 23:30:46 -04:00
// Use default content template when a standard HTML type is used, there isn't a more specific template existing, and the control container is empty.
if ( templateId === 'customize-control-' + control . params . type + '-content' &&
_ . contains ( standardTypes , control . params . type ) &&
! document . getElementById ( 'tmpl-' + templateId ) &&
0 === control . container . children ( ) . length )
{
2017-10-18 23:04:49 -04:00
templateId = 'customize-control-default-content' ;
}
2014-10-26 08:06:19 -04:00
2014-11-11 18:52:22 -05:00
// Replace the container element's content with the control.
2017-10-18 23:04:49 -04:00
if ( document . getElementById ( 'tmpl-' + templateId ) ) {
template = wp . template ( templateId ) ;
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
if ( template && control . container ) {
2014-11-11 18:52:22 -05:00
control . container . html ( template ( control . params ) ) ;
2014-10-24 12:32:18 -04:00
}
}
2017-10-27 16:18:47 -04:00
// Re-render notifications after content has been re-rendered.
control . notifications . container = control . getNotificationsContainerElement ( ) ;
sectionId = control . section ( ) ;
if ( ! sectionId || ( api . section . has ( sectionId ) && api . section ( sectionId ) . expanded ( ) ) ) {
control . notifications . render ( ) ;
}
2016-10-25 02:31:31 -04:00
} ,
/ * *
* Add a new page to a dropdown - pages control reusing menus code for this .
*
* @ since 4.7 . 0
* @ access private
* @ returns { void }
* /
addNewPage : function ( ) {
var control = this , promise , toggle , container , input , title , select ;
if ( 'dropdown-pages' !== control . params . type || ! control . params . allow _addition || ! api . Menus ) {
return ;
}
toggle = control . container . find ( '.add-new-toggle' ) ;
container = control . container . find ( '.new-content-item' ) ;
input = control . container . find ( '.create-item-input' ) ;
title = input . val ( ) ;
select = control . container . find ( 'select' ) ;
if ( ! title ) {
input . addClass ( 'invalid' ) ;
return ;
}
input . removeClass ( 'invalid' ) ;
input . attr ( 'disabled' , 'disabled' ) ;
// The menus functions add the page, publish when appropriate, and also add the new page to the dropdown-pages controls.
promise = api . Menus . insertAutoDraftPost ( {
post _title : title ,
post _type : 'page'
} ) ;
promise . done ( function ( data ) {
var availableItem , $content , itemTemplate ;
// Prepare the new page as an available menu item.
// See api.Menus.submitNew().
availableItem = new api . Menus . AvailableItemModel ( {
'id' : 'post-' + data . post _id , // Used for available menu item Backbone models.
'title' : title ,
2017-04-05 19:29:42 -04:00
'type' : 'post_type' ,
2016-10-25 02:31:31 -04:00
'type_label' : api . Menus . data . l10n . page _label ,
2017-04-05 19:29:42 -04:00
'object' : 'page' ,
2016-10-25 02:31:31 -04:00
'object_id' : data . post _id ,
'url' : data . url
} ) ;
// Add the new item to the list of available menu items.
api . Menus . availableMenuItemsPanel . collection . add ( availableItem ) ;
$content = $ ( '#available-menu-items-post_type-page' ) . find ( '.available-menu-items-list' ) ;
itemTemplate = wp . template ( 'available-menu-item' ) ;
$content . prepend ( itemTemplate ( availableItem . attributes ) ) ;
// Focus the select control.
select . focus ( ) ;
control . setting . set ( String ( data . post _id ) ) ; // Triggers a preview refresh and updates the setting.
// Reset the create page form.
container . slideUp ( 180 ) ;
toggle . slideDown ( 180 ) ;
2016-11-23 01:05:32 -05:00
} ) ;
promise . always ( function ( ) {
2016-10-25 02:31:31 -04:00
input . val ( '' ) . removeAttr ( 'disabled' ) ;
} ) ;
2012-08-22 20:04:18 -04:00
}
} ) ;
2014-08-08 19:31:15 -04:00
/ * *
2014-11-11 18:52:22 -05:00
* A colorpicker control .
*
* @ class
2014-08-08 19:31:15 -04:00
* @ augments wp . customize . Control
* @ augments wp . customize . Class
* /
2012-08-22 20:04:18 -04:00
api . ColorControl = api . Control . extend ( {
ready : function ( ) {
var control = this ,
2016-10-25 18:33:30 -04:00
isHueSlider = this . params . mode === 'hue' ,
updating = false ,
picker ;
if ( isHueSlider ) {
picker = this . container . find ( '.color-picker-hue' ) ;
picker . val ( control . setting ( ) ) . wpColorPicker ( {
change : function ( event , ui ) {
updating = true ;
control . setting ( ui . color . h ( ) ) ;
updating = false ;
}
} ) ;
} else {
picker = this . container . find ( '.color-picker-hex' ) ;
picker . val ( control . setting ( ) ) . wpColorPicker ( {
change : function ( ) {
updating = true ;
control . setting . set ( picker . wpColorPicker ( 'color' ) ) ;
updating = false ;
} ,
clear : function ( ) {
updating = true ;
control . setting . set ( '' ) ;
updating = false ;
}
} ) ;
}
2014-10-31 16:45:22 -04:00
2016-11-04 13:08:33 -04:00
control . setting . bind ( function ( value ) {
2016-11-23 01:05:32 -05:00
// Bail if the update came from the control itself.
2016-10-25 18:33:30 -04:00
if ( updating ) {
return ;
}
2014-10-31 16:45:22 -04:00
picker . val ( value ) ;
picker . wpColorPicker ( 'color' , value ) ;
2016-10-25 18:33:30 -04:00
} ) ;
2016-11-04 13:08:33 -04:00
// Collapse color picker when hitting Esc instead of collapsing the current section.
control . container . on ( 'keydown' , function ( event ) {
var pickerContainer ;
if ( 27 !== event . which ) { // Esc.
return ;
}
pickerContainer = control . container . find ( '.wp-picker-container' ) ;
if ( pickerContainer . hasClass ( 'wp-picker-active' ) ) {
picker . wpColorPicker ( 'close' ) ;
control . container . find ( '.wp-color-result' ) . focus ( ) ;
event . stopPropagation ( ) ; // Prevent section from being collapsed.
}
} ) ;
2012-08-22 20:04:18 -04:00
}
} ) ;
2014-08-08 19:31:15 -04:00
/ * *
2015-03-10 14:02:28 -04:00
* A control that implements the media modal .
2014-11-11 18:52:22 -05:00
*
* @ class
2014-08-08 19:31:15 -04:00
* @ augments wp . customize . Control
* @ augments wp . customize . Class
* /
2015-03-10 14:02:28 -04:00
api . MediaControl = api . Control . extend ( {
2012-08-22 20:04:18 -04:00
2014-11-11 18:52:22 -05:00
/ * *
* When the control ' s DOM structure is ready ,
* set up internal event bindings .
* /
2014-12-02 17:56:45 -05:00
ready : function ( ) {
2014-11-11 18:52:22 -05:00
var control = this ;
// Shortcut so that we don't have to use _.bind every time we add a callback.
2015-03-07 06:06:29 -05:00
_ . bindAll ( control , 'restoreDefault' , 'removeFile' , 'openFrame' , 'select' , 'pausePlayer' ) ;
2012-11-20 16:25:54 -05:00
2014-11-11 18:52:22 -05:00
// Bind events, with delegation to facilitate re-rendering.
control . container . on ( 'click keydown' , '.upload-button' , control . openFrame ) ;
2015-03-07 06:06:29 -05:00
control . container . on ( 'click keydown' , '.upload-button' , control . pausePlayer ) ;
2014-11-11 18:52:22 -05:00
control . container . on ( 'click keydown' , '.thumbnail-image img' , control . openFrame ) ;
control . container . on ( 'click keydown' , '.default-button' , control . restoreDefault ) ;
2015-03-07 06:06:29 -05:00
control . container . on ( 'click keydown' , '.remove-button' , control . pausePlayer ) ;
2014-11-11 18:52:22 -05:00
control . container . on ( 'click keydown' , '.remove-button' , control . removeFile ) ;
2015-03-07 06:06:29 -05:00
control . container . on ( 'click keydown' , '.remove-button' , control . cleanupPlayer ) ;
// Resize the player controls when it becomes visible (ie when section is expanded)
api . section ( control . section ( ) ) . container
. on ( 'expanded' , function ( ) {
if ( control . player ) {
control . player . setControlsSize ( ) ;
}
} )
. on ( 'collapsed' , function ( ) {
control . pausePlayer ( ) ;
} ) ;
2012-08-22 20:04:18 -04:00
2016-06-14 15:28:27 -04:00
/ * *
* Set attachment data and render content .
*
* Note that BackgroundImage . prototype . ready applies this ready method
* to itself . Since BackgroundImage is an UploadControl , the value
* is the attachment URL instead of the attachment ID . In this case
* we skip fetching the attachment data because we have no ID available ,
* and it is the responsibility of the UploadControl to set the control ' s
* attachmentData before calling the renderContent method .
*
* @ param { number | string } value Attachment
* /
function setAttachmentDataAndRenderContent ( value ) {
var hasAttachmentData = $ . Deferred ( ) ;
if ( control . extended ( api . UploadControl ) ) {
hasAttachmentData . resolve ( ) ;
} else {
value = parseInt ( value , 10 ) ;
if ( _ . isNaN ( value ) || value <= 0 ) {
delete control . params . attachment ;
hasAttachmentData . resolve ( ) ;
} else if ( control . params . attachment && control . params . attachment . id === value ) {
hasAttachmentData . resolve ( ) ;
}
}
// Fetch the attachment data.
if ( 'pending' === hasAttachmentData . state ( ) ) {
wp . media . attachment ( value ) . fetch ( ) . done ( function ( ) {
control . params . attachment = this . attributes ;
hasAttachmentData . resolve ( ) ;
2016-03-04 18:47:26 -05:00
2016-06-14 15:28:27 -04:00
// Send attachment information to the preview for possible use in `postMessage` transport.
wp . customize . previewer . send ( control . setting . id + '-attachment-data' , this . attributes ) ;
} ) ;
}
hasAttachmentData . done ( function ( ) {
control . renderContent ( ) ;
2016-03-04 18:47:26 -05:00
} ) ;
2016-06-14 15:28:27 -04:00
}
2016-03-04 18:47:26 -05:00
2016-06-14 15:28:27 -04:00
// Ensure attachment data is initially set (for dynamically-instantiated controls).
setAttachmentDataAndRenderContent ( control . setting ( ) ) ;
// Update the attachment data and re-render the control when the setting changes.
control . setting . bind ( setAttachmentDataAndRenderContent ) ;
2012-08-22 20:04:18 -04:00
} ,
2015-03-07 06:06:29 -05:00
pausePlayer : function ( ) {
this . player && this . player . pause ( ) ;
} ,
cleanupPlayer : function ( ) {
this . player && wp . media . mixin . removePlayer ( this . player ) ;
} ,
2014-11-11 18:52:22 -05:00
/ * *
* Open the media modal .
* /
openFrame : function ( event ) {
2014-12-02 17:56:45 -05:00
if ( api . utils . isKeydownButNotEnterEvent ( event ) ) {
2014-11-11 18:52:22 -05:00
return ;
2014-12-02 17:56:45 -05:00
}
2012-08-22 20:04:18 -04:00
2014-11-11 18:52:22 -05:00
event . preventDefault ( ) ;
2012-08-22 20:04:18 -04:00
2014-11-11 18:52:22 -05:00
if ( ! this . frame ) {
this . initFrame ( ) ;
}
2012-08-22 20:04:18 -04:00
2014-11-11 18:52:22 -05:00
this . frame . open ( ) ;
} ,
2012-08-22 20:04:18 -04:00
2014-11-11 18:52:22 -05:00
/ * *
* Create a media modal select frame , and store it so the instance can be reused when needed .
* /
initFrame : function ( ) {
this . frame = wp . media ( {
button : {
text : this . params . button _labels . frame _button
} ,
2014-12-15 15:27:22 -05:00
states : [
new wp . media . controller . Library ( {
title : this . params . button _labels . frame _title ,
library : wp . media . query ( { type : this . params . mime _type } ) ,
multiple : false ,
date : false
} )
]
2014-12-02 17:56:45 -05:00
} ) ;
2012-11-09 00:44:00 -05:00
2014-11-11 18:52:22 -05:00
// When a file is selected, run a callback.
this . frame . on ( 'select' , this . select ) ;
2014-12-02 17:56:45 -05:00
} ,
2012-08-22 20:04:18 -04:00
2014-11-11 18:52:22 -05:00
/ * *
* Callback handler for when an attachment is selected in the media modal .
* Gets the selected image information , and sets it within the control .
* /
select : function ( ) {
// Get the attachment from the modal frame.
2015-03-07 06:06:29 -05:00
var node ,
attachment = this . frame . state ( ) . get ( 'selection' ) . first ( ) . toJSON ( ) ,
mejsSettings = window . _wpmejsSettings || { } ;
2012-08-22 20:04:18 -04:00
2014-11-11 18:52:22 -05:00
this . params . attachment = attachment ;
2012-08-22 20:04:18 -04:00
2014-11-11 18:52:22 -05:00
// Set the Customizer setting; the callback takes care of rendering.
2015-03-10 14:02:28 -04:00
this . setting ( attachment . id ) ;
2015-03-07 06:06:29 -05:00
node = this . container . find ( 'audio, video' ) . get ( 0 ) ;
// Initialize audio/video previews.
if ( node ) {
this . player = new MediaElementPlayer ( node , mejsSettings ) ;
} else {
this . cleanupPlayer ( ) ;
}
2014-11-11 18:52:22 -05:00
} ,
2012-08-22 20:04:18 -04:00
2014-11-11 18:52:22 -05:00
/ * *
* Reset the setting to the default value .
* /
restoreDefault : function ( event ) {
2014-12-02 17:56:45 -05:00
if ( api . utils . isKeydownButNotEnterEvent ( event ) ) {
2014-11-11 18:52:22 -05:00
return ;
}
event . preventDefault ( ) ;
2012-11-06 09:47:25 -05:00
2014-11-11 18:52:22 -05:00
this . params . attachment = this . params . defaultAttachment ;
this . setting ( this . params . defaultAttachment . url ) ;
2015-04-08 16:52:29 -04:00
} ,
2012-08-22 20:04:18 -04:00
2014-11-11 18:52:22 -05:00
/ * *
* Called when the "Remove" link is clicked . Empties the setting .
*
* @ param { object } event jQuery Event object
* /
removeFile : function ( event ) {
2014-12-02 17:56:45 -05:00
if ( api . utils . isKeydownButNotEnterEvent ( event ) ) {
2014-11-11 18:52:22 -05:00
return ;
2014-12-02 17:56:45 -05:00
}
2014-11-11 18:52:22 -05:00
event . preventDefault ( ) ;
2012-08-22 20:04:18 -04:00
2014-11-11 18:52:22 -05:00
this . params . attachment = { } ;
this . setting ( '' ) ;
this . renderContent ( ) ; // Not bound to setting change when emptying.
2015-03-10 14:02:28 -04:00
}
} ) ;
/ * *
* An upload control , which utilizes the media modal .
*
* @ class
* @ augments wp . customize . MediaControl
* @ augments wp . customize . Control
* @ augments wp . customize . Class
* /
api . UploadControl = api . MediaControl . extend ( {
/ * *
* Callback handler for when an attachment is selected in the media modal .
* Gets the selected image information , and sets it within the control .
* /
select : function ( ) {
// Get the attachment from the modal frame.
var node ,
attachment = this . frame . state ( ) . get ( 'selection' ) . first ( ) . toJSON ( ) ,
mejsSettings = window . _wpmejsSettings || { } ;
this . params . attachment = attachment ;
// Set the Customizer setting; the callback takes care of rendering.
this . setting ( attachment . url ) ;
node = this . container . find ( 'audio, video' ) . get ( 0 ) ;
// Initialize audio/video previews.
if ( node ) {
this . player = new MediaElementPlayer ( node , mejsSettings ) ;
} else {
this . cleanupPlayer ( ) ;
}
2014-12-02 17:56:45 -05:00
} ,
2012-08-22 20:04:18 -04:00
2014-11-11 18:52:22 -05:00
// @deprecated
success : function ( ) { } ,
2012-08-22 20:04:18 -04:00
2014-11-11 18:52:22 -05:00
// @deprecated
removerVisibility : function ( ) { }
2014-12-02 17:56:45 -05:00
} ) ;
2012-08-22 20:04:18 -04:00
2014-11-11 18:52:22 -05:00
/ * *
* A control for uploading images .
*
* This control no longer needs to do anything more
* than what the upload control does in JS .
*
* @ class
* @ augments wp . customize . UploadControl
2015-03-10 14:02:28 -04:00
* @ augments wp . customize . MediaControl
2014-11-11 18:52:22 -05:00
* @ augments wp . customize . Control
* @ augments wp . customize . Class
* /
api . ImageControl = api . UploadControl . extend ( {
// @deprecated
thumbnailSrc : function ( ) { }
2012-08-22 20:04:18 -04:00
} ) ;
2014-12-15 18:28:23 -05:00
/ * *
* A control for uploading background images .
*
* @ class
* @ augments wp . customize . UploadControl
2015-03-10 14:02:28 -04:00
* @ augments wp . customize . MediaControl
2014-12-15 18:28:23 -05:00
* @ augments wp . customize . Control
* @ augments wp . customize . Class
* /
api . BackgroundControl = api . UploadControl . extend ( {
/ * *
* When the control ' s DOM structure is ready ,
* set up internal event bindings .
* /
ready : function ( ) {
api . UploadControl . prototype . ready . apply ( this , arguments ) ;
} ,
/ * *
* Callback handler for when an attachment is selected in the media modal .
* Does an additional AJAX request for setting the background context .
* /
select : function ( ) {
api . UploadControl . prototype . select . apply ( this , arguments ) ;
wp . ajax . post ( 'custom-background-add' , {
nonce : _wpCustomizeBackground . nonces . add ,
wp _customize : 'on' ,
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
customize _theme : api . settings . theme . stylesheet ,
2014-12-15 18:28:23 -05:00
attachment _id : this . params . attachment . id
} ) ;
}
} ) ;
Customize: Improve custom background properties UI.
Introduces new control for managing the background position. Adds control for setting the `background-size`.
Props cdog, celloexpressions, grapplerulrich, MikeHansenMe, FolioVision, afercia, helen, melchoyce, karmatosed, westonruter, Kelderic, sebastian.pisula.
Fixes #22058.
Built from https://develop.svn.wordpress.org/trunk@38948
git-svn-id: http://core.svn.wordpress.org/trunk@38891 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-10-26 02:52:29 -04:00
/ * *
* A control for positioning a background image .
*
* @ since 4.7 . 0
*
* @ class
* @ augments wp . customize . Control
* @ augments wp . customize . Class
* /
api . BackgroundPositionControl = api . Control . extend ( {
/ * *
* Set up control UI once embedded in DOM and settings are created .
*
* @ since 4.7 . 0
2016-11-23 01:05:32 -05:00
* @ access public
Customize: Improve custom background properties UI.
Introduces new control for managing the background position. Adds control for setting the `background-size`.
Props cdog, celloexpressions, grapplerulrich, MikeHansenMe, FolioVision, afercia, helen, melchoyce, karmatosed, westonruter, Kelderic, sebastian.pisula.
Fixes #22058.
Built from https://develop.svn.wordpress.org/trunk@38948
git-svn-id: http://core.svn.wordpress.org/trunk@38891 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-10-26 02:52:29 -04:00
* /
ready : function ( ) {
var control = this , updateRadios ;
control . container . on ( 'change' , 'input[name="background-position"]' , function ( ) {
var position = $ ( this ) . val ( ) . split ( ' ' ) ;
control . settings . x ( position [ 0 ] ) ;
control . settings . y ( position [ 1 ] ) ;
} ) ;
updateRadios = _ . debounce ( function ( ) {
var x , y , radioInput , inputValue ;
x = control . settings . x . get ( ) ;
y = control . settings . y . get ( ) ;
inputValue = String ( x ) + ' ' + String ( y ) ;
radioInput = control . container . find ( 'input[name="background-position"][value="' + inputValue + '"]' ) ;
radioInput . click ( ) ;
} ) ;
control . settings . x . bind ( updateRadios ) ;
control . settings . y . bind ( updateRadios ) ;
updateRadios ( ) ; // Set initial UI.
}
} ) ;
2015-07-10 17:33:24 -04:00
/ * *
* A control for selecting and cropping an image .
*
* @ class
* @ augments wp . customize . MediaControl
* @ augments wp . customize . Control
* @ augments wp . customize . Class
* /
api . CroppedImageControl = api . MediaControl . extend ( {
/ * *
* Open the media modal to the library state .
* /
openFrame : function ( event ) {
if ( api . utils . isKeydownButNotEnterEvent ( event ) ) {
return ;
}
this . initFrame ( ) ;
this . frame . setState ( 'library' ) . open ( ) ;
} ,
/ * *
* Create a media modal select frame , and store it so the instance can be reused when needed .
* /
initFrame : function ( ) {
var l10n = _wpMediaViewsL10n ;
this . frame = wp . media ( {
button : {
text : l10n . select ,
close : false
} ,
states : [
new wp . media . controller . Library ( {
title : this . params . button _labels . frame _title ,
library : wp . media . query ( { type : 'image' } ) ,
multiple : false ,
date : false ,
priority : 20 ,
suggestedWidth : this . params . width ,
suggestedHeight : this . params . height
} ) ,
2015-07-27 11:55:24 -04:00
new wp . media . controller . CustomizeImageCropper ( {
2015-07-10 17:33:24 -04:00
imgSelectOptions : this . calculateImageSelectOptions ,
control : this
} )
]
} ) ;
this . frame . on ( 'select' , this . onSelect , this ) ;
this . frame . on ( 'cropped' , this . onCropped , this ) ;
this . frame . on ( 'skippedcrop' , this . onSkippedCrop , this ) ;
} ,
/ * *
* After an image is selected in the media modal , switch to the cropper
* state if the image isn ' t the right size .
* /
onSelect : function ( ) {
var attachment = this . frame . state ( ) . get ( 'selection' ) . first ( ) . toJSON ( ) ;
if ( this . params . width === attachment . width && this . params . height === attachment . height && ! this . params . flex _width && ! this . params . flex _height ) {
this . setImageFromAttachment ( attachment ) ;
this . frame . close ( ) ;
} else {
this . frame . setState ( 'cropper' ) ;
}
} ,
/ * *
* After the image has been cropped , apply the cropped image data to the setting .
*
* @ param { object } croppedImage Cropped attachment data .
* /
onCropped : function ( croppedImage ) {
this . setImageFromAttachment ( croppedImage ) ;
} ,
/ * *
* Returns a set of options , computed from the attached image data and
* control - specific data , to be fed to the imgAreaSelect plugin in
* wp . media . view . Cropper .
*
* @ param { wp . media . model . Attachment } attachment
* @ param { wp . media . controller . Cropper } controller
* @ returns { Object } Options
* /
calculateImageSelectOptions : function ( attachment , controller ) {
var control = controller . get ( 'control' ) ,
flexWidth = ! ! parseInt ( control . params . flex _width , 10 ) ,
flexHeight = ! ! parseInt ( control . params . flex _height , 10 ) ,
realWidth = attachment . get ( 'width' ) ,
realHeight = attachment . get ( 'height' ) ,
xInit = parseInt ( control . params . width , 10 ) ,
yInit = parseInt ( control . params . height , 10 ) ,
ratio = xInit / yInit ,
2016-04-07 21:23:29 -04:00
xImg = xInit ,
yImg = yInit ,
2015-07-20 15:02:24 -04:00
x1 , y1 , imgSelectOptions ;
2015-07-10 17:33:24 -04:00
controller . set ( 'canSkipCrop' , ! control . mustBeCropped ( flexWidth , flexHeight , xInit , yInit , realWidth , realHeight ) ) ;
2016-04-07 21:23:29 -04:00
if ( realWidth / realHeight > ratio ) {
yInit = realHeight ;
2015-07-10 17:33:24 -04:00
xInit = yInit * ratio ;
} else {
2016-04-07 21:23:29 -04:00
xInit = realWidth ;
2015-07-10 17:33:24 -04:00
yInit = xInit / ratio ;
}
2016-04-07 21:23:29 -04:00
x1 = ( realWidth - xInit ) / 2 ;
y1 = ( realHeight - yInit ) / 2 ;
2015-07-20 15:02:24 -04:00
2015-07-10 17:33:24 -04:00
imgSelectOptions = {
handles : true ,
keys : true ,
instance : true ,
persistent : true ,
imageWidth : realWidth ,
imageHeight : realHeight ,
2016-04-07 21:23:29 -04:00
minWidth : xImg > xInit ? xInit : xImg ,
minHeight : yImg > yInit ? yInit : yImg ,
2015-07-20 15:02:24 -04:00
x1 : x1 ,
y1 : y1 ,
x2 : xInit + x1 ,
y2 : yInit + y1
2015-07-10 17:33:24 -04:00
} ;
if ( flexHeight === false && flexWidth === false ) {
imgSelectOptions . aspectRatio = xInit + ':' + yInit ;
}
2016-04-07 21:23:29 -04:00
if ( true === flexHeight ) {
delete imgSelectOptions . minHeight ;
imgSelectOptions . maxWidth = realWidth ;
2015-07-10 17:33:24 -04:00
}
2016-04-07 21:23:29 -04:00
if ( true === flexWidth ) {
delete imgSelectOptions . minWidth ;
imgSelectOptions . maxHeight = realHeight ;
2015-07-10 17:33:24 -04:00
}
return imgSelectOptions ;
} ,
/ * *
* Return whether the image must be cropped , based on required dimensions .
*
* @ param { bool } flexW
* @ param { bool } flexH
* @ param { int } dstW
* @ param { int } dstH
* @ param { int } imgW
* @ param { int } imgH
* @ return { bool }
* /
mustBeCropped : function ( flexW , flexH , dstW , dstH , imgW , imgH ) {
if ( true === flexW && true === flexH ) {
return false ;
}
if ( true === flexW && dstH === imgH ) {
return false ;
}
if ( true === flexH && dstW === imgW ) {
return false ;
}
if ( dstW === imgW && dstH === imgH ) {
return false ;
}
if ( imgW <= dstW ) {
return false ;
}
return true ;
} ,
/ * *
* If cropping was skipped , apply the image data directly to the setting .
* /
onSkippedCrop : function ( ) {
var attachment = this . frame . state ( ) . get ( 'selection' ) . first ( ) . toJSON ( ) ;
this . setImageFromAttachment ( attachment ) ;
} ,
/ * *
* Updates the setting and re - renders the control UI .
*
* @ param { object } attachment
* /
setImageFromAttachment : function ( attachment ) {
this . params . attachment = attachment ;
// Set the Customizer setting; the callback takes care of rendering.
this . setting ( attachment . id ) ;
}
} ) ;
/ * *
* A control for selecting and cropping Site Icons .
*
* @ class
* @ augments wp . customize . CroppedImageControl
* @ augments wp . customize . MediaControl
* @ augments wp . customize . Control
* @ augments wp . customize . Class
* /
api . SiteIconControl = api . CroppedImageControl . extend ( {
2015-07-20 11:57:25 -04:00
/ * *
* Create a media modal select frame , and store it so the instance can be reused when needed .
* /
initFrame : function ( ) {
var l10n = _wpMediaViewsL10n ;
this . frame = wp . media ( {
button : {
text : l10n . select ,
close : false
} ,
states : [
new wp . media . controller . Library ( {
title : this . params . button _labels . frame _title ,
library : wp . media . query ( { type : 'image' } ) ,
multiple : false ,
date : false ,
priority : 20 ,
suggestedWidth : this . params . width ,
suggestedHeight : this . params . height
} ) ,
new wp . media . controller . SiteIconCropper ( {
imgSelectOptions : this . calculateImageSelectOptions ,
control : this
} )
]
} ) ;
this . frame . on ( 'select' , this . onSelect , this ) ;
this . frame . on ( 'cropped' , this . onCropped , this ) ;
this . frame . on ( 'skippedcrop' , this . onSkippedCrop , this ) ;
} ,
2015-07-21 22:30:25 -04:00
/ * *
* After an image is selected in the media modal , switch to the cropper
* state if the image isn ' t the right size .
* /
onSelect : function ( ) {
var attachment = this . frame . state ( ) . get ( 'selection' ) . first ( ) . toJSON ( ) ,
controller = this ;
if ( this . params . width === attachment . width && this . params . height === attachment . height && ! this . params . flex _width && ! this . params . flex _height ) {
wp . ajax . post ( 'crop-image' , {
nonce : attachment . nonces . edit ,
id : attachment . id ,
context : 'site-icon' ,
cropDetails : {
x1 : 0 ,
y1 : 0 ,
width : this . params . width ,
height : this . params . height ,
dst _width : this . params . width ,
dst _height : this . params . height
}
} ) . done ( function ( croppedImage ) {
controller . setImageFromAttachment ( croppedImage ) ;
controller . frame . close ( ) ;
} ) . fail ( function ( ) {
2016-07-04 16:45:28 -04:00
controller . frame . trigger ( 'content:error:crop' ) ;
2015-07-21 22:30:25 -04:00
} ) ;
} else {
this . frame . setState ( 'cropper' ) ;
}
} ,
2015-07-10 17:33:24 -04:00
/ * *
* Updates the setting and re - renders the control UI .
*
* @ param { object } attachment
* /
setImageFromAttachment : function ( attachment ) {
2016-10-25 00:47:29 -04:00
var sizes = [ 'site_icon-32' , 'thumbnail' , 'full' ] , link ,
2015-09-11 16:13:25 -04:00
icon ;
_ . each ( sizes , function ( size ) {
if ( ! icon && ! _ . isUndefined ( attachment . sizes [ size ] ) ) {
icon = attachment . sizes [ size ] ;
}
} ) ;
2015-07-10 17:33:24 -04:00
this . params . attachment = attachment ;
// Set the Customizer setting; the callback takes care of rendering.
this . setting ( attachment . id ) ;
2016-10-25 00:47:29 -04:00
if ( ! icon ) {
return ;
}
2015-07-10 17:33:24 -04:00
// Update the icon in-browser.
2016-10-25 00:47:29 -04:00
link = $ ( 'link[rel="icon"][sizes="32x32"]' ) ;
link . attr ( 'href' , icon . url ) ;
2015-07-10 17:33:24 -04:00
} ,
/ * *
* Called when the "Remove" link is clicked . Empties the setting .
*
* @ param { object } event jQuery Event object
* /
removeFile : function ( event ) {
if ( api . utils . isKeydownButNotEnterEvent ( event ) ) {
return ;
}
event . preventDefault ( ) ;
this . params . attachment = { } ;
this . setting ( '' ) ;
this . renderContent ( ) ; // Not bound to setting change when emptying.
2016-10-25 00:47:29 -04:00
$ ( 'link[rel="icon"][sizes="32x32"]' ) . attr ( 'href' , '/favicon.ico' ) ; // Set to default.
2015-07-10 17:33:24 -04:00
}
} ) ;
2014-08-08 19:31:15 -04:00
/ * *
2014-11-11 18:52:22 -05:00
* @ class
2014-08-08 19:31:15 -04:00
* @ augments wp . customize . Control
* @ augments wp . customize . Class
* /
2014-03-11 00:13:16 -04:00
api . HeaderControl = api . Control . extend ( {
ready : function ( ) {
2015-03-10 14:02:28 -04:00
this . btnRemove = $ ( '#customize-control-header_image .actions .remove' ) ;
this . btnNew = $ ( '#customize-control-header_image .actions .new' ) ;
2014-03-11 00:13:16 -04:00
_ . bindAll ( this , 'openMedia' , 'removeImage' ) ;
this . btnNew . on ( 'click' , this . openMedia ) ;
this . btnRemove . on ( 'click' , this . removeImage ) ;
2015-04-08 18:28:27 -04:00
api . HeaderTool . currentHeader = this . getInitialHeaderImage ( ) ;
2014-03-11 00:13:16 -04:00
new api . HeaderTool . CurrentView ( {
model : api . HeaderTool . currentHeader ,
2014-12-02 16:55:23 -05:00
el : '#customize-control-header_image .current .container'
2014-03-11 00:13:16 -04:00
} ) ;
new api . HeaderTool . ChoiceListView ( {
collection : api . HeaderTool . UploadsList = new api . HeaderTool . ChoiceList ( ) ,
2014-12-02 16:55:23 -05:00
el : '#customize-control-header_image .choices .uploaded .list'
2014-03-11 00:13:16 -04:00
} ) ;
new api . HeaderTool . ChoiceListView ( {
collection : api . HeaderTool . DefaultsList = new api . HeaderTool . DefaultsList ( ) ,
2014-12-02 16:55:23 -05:00
el : '#customize-control-header_image .choices .default .list'
2014-03-11 00:13:16 -04:00
} ) ;
api . HeaderTool . combinedList = api . HeaderTool . CombinedList = new api . HeaderTool . CombinedList ( [
api . HeaderTool . UploadsList ,
api . HeaderTool . DefaultsList
] ) ;
2016-03-05 20:45:27 -05:00
// Ensure custom-header-crop Ajax requests bootstrap the Customizer to activate the previewed theme.
wp . media . controller . Cropper . prototype . defaults . doCropArgs . wp _customize = 'on' ;
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
wp . media . controller . Cropper . prototype . defaults . doCropArgs . customize _theme = api . settings . theme . stylesheet ;
2014-03-11 00:13:16 -04:00
} ,
2015-04-08 18:28:27 -04:00
/ * *
* Returns a new instance of api . HeaderTool . ImageModel based on the currently
* saved header image ( if any ) .
*
* @ since 4.2 . 0
*
* @ returns { Object } Options
* /
getInitialHeaderImage : function ( ) {
if ( ! api . get ( ) . header _image || ! api . get ( ) . header _image _data || _ . contains ( [ 'remove-header' , 'random-default-image' , 'random-uploaded-image' ] , api . get ( ) . header _image ) ) {
return new api . HeaderTool . ImageModel ( ) ;
}
// Get the matching uploaded image object.
var currentHeaderObject = _ . find ( _wpCustomizeHeader . uploads , function ( imageObj ) {
return ( imageObj . attachment _id === api . get ( ) . header _image _data . attachment _id ) ;
} ) ;
// Fall back to raw current header image.
if ( ! currentHeaderObject ) {
currentHeaderObject = {
url : api . get ( ) . header _image ,
thumbnail _url : api . get ( ) . header _image ,
attachment _id : api . get ( ) . header _image _data . attachment _id
} ;
}
return new api . HeaderTool . ImageModel ( {
header : currentHeaderObject ,
choice : currentHeaderObject . url . split ( '/' ) . pop ( )
} ) ;
} ,
2014-03-11 00:13:16 -04:00
/ * *
* Returns a set of options , computed from the attached image data and
* theme - specific data , to be fed to the imgAreaSelect plugin in
* wp . media . view . Cropper .
*
* @ param { wp . media . model . Attachment } attachment
* @ param { wp . media . controller . Cropper } controller
* @ returns { Object } Options
* /
calculateImageSelectOptions : function ( attachment , controller ) {
var xInit = parseInt ( _wpCustomizeHeader . data . width , 10 ) ,
yInit = parseInt ( _wpCustomizeHeader . data . height , 10 ) ,
flexWidth = ! ! parseInt ( _wpCustomizeHeader . data [ 'flex-width' ] , 10 ) ,
flexHeight = ! ! parseInt ( _wpCustomizeHeader . data [ 'flex-height' ] , 10 ) ,
ratio , xImg , yImg , realHeight , realWidth ,
imgSelectOptions ;
realWidth = attachment . get ( 'width' ) ;
realHeight = attachment . get ( 'height' ) ;
this . headerImage = new api . HeaderTool . ImageModel ( ) ;
this . headerImage . set ( {
themeWidth : xInit ,
themeHeight : yInit ,
themeFlexWidth : flexWidth ,
themeFlexHeight : flexHeight ,
imageWidth : realWidth ,
imageHeight : realHeight
} ) ;
controller . set ( 'canSkipCrop' , ! this . headerImage . shouldBeCropped ( ) ) ;
ratio = xInit / yInit ;
xImg = realWidth ;
yImg = realHeight ;
if ( xImg / yImg > ratio ) {
yInit = yImg ;
xInit = yInit * ratio ;
} else {
xInit = xImg ;
yInit = xInit / ratio ;
}
imgSelectOptions = {
handles : true ,
keys : true ,
instance : true ,
persistent : true ,
imageWidth : realWidth ,
imageHeight : realHeight ,
x1 : 0 ,
y1 : 0 ,
x2 : xInit ,
y2 : yInit
} ;
if ( flexHeight === false && flexWidth === false ) {
imgSelectOptions . aspectRatio = xInit + ':' + yInit ;
}
if ( flexHeight === false ) {
imgSelectOptions . maxHeight = yInit ;
}
if ( flexWidth === false ) {
imgSelectOptions . maxWidth = xInit ;
}
return imgSelectOptions ;
} ,
/ * *
* Sets up and opens the Media Manager in order to select an image .
* Depending on both the size of the image and the properties of the
* current theme , a cropping step after selection may be required or
* skippable .
*
* @ param { event } event
* /
openMedia : function ( event ) {
2014-04-07 21:55:15 -04:00
var l10n = _wpMediaViewsL10n ;
2014-03-11 00:13:16 -04:00
event . preventDefault ( ) ;
this . frame = wp . media ( {
button : {
text : l10n . selectAndCrop ,
close : false
} ,
2014-04-07 21:57:16 -04:00
states : [
new wp . media . controller . Library ( {
title : l10n . chooseImage ,
library : wp . media . query ( { type : 'image' } ) ,
multiple : false ,
2014-12-15 15:27:22 -05:00
date : false ,
2014-04-07 21:57:16 -04:00
priority : 20 ,
suggestedWidth : _wpCustomizeHeader . data . width ,
suggestedHeight : _wpCustomizeHeader . data . height
} ) ,
new wp . media . controller . Cropper ( {
imgSelectOptions : this . calculateImageSelectOptions
} )
]
2014-03-11 00:13:16 -04:00
} ) ;
this . frame . on ( 'select' , this . onSelect , this ) ;
this . frame . on ( 'cropped' , this . onCropped , this ) ;
this . frame . on ( 'skippedcrop' , this . onSkippedCrop , this ) ;
this . frame . open ( ) ;
} ,
2014-11-11 18:52:22 -05:00
/ * *
* After an image is selected in the media modal ,
* switch to the cropper state .
* /
2014-03-11 00:13:16 -04:00
onSelect : function ( ) {
this . frame . setState ( 'cropper' ) ;
} ,
2014-11-11 18:52:22 -05:00
/ * *
* After the image has been cropped , apply the cropped image data to the setting .
*
* @ param { object } croppedImage Cropped attachment data .
* /
2014-03-11 00:13:16 -04:00
onCropped : function ( croppedImage ) {
2015-09-15 10:46:32 -04:00
var url = croppedImage . url ,
2014-03-11 00:13:16 -04:00
attachmentId = croppedImage . attachment _id ,
w = croppedImage . width ,
h = croppedImage . height ;
this . setImageFromURL ( url , attachmentId , w , h ) ;
} ,
2014-11-11 18:52:22 -05:00
/ * *
* If cropping was skipped , apply the image data directly to the setting .
*
* @ param { object } selection
* /
2014-03-11 00:13:16 -04:00
onSkippedCrop : function ( selection ) {
var url = selection . get ( 'url' ) ,
w = selection . get ( 'width' ) ,
h = selection . get ( 'height' ) ;
this . setImageFromURL ( url , selection . id , w , h ) ;
} ,
/ * *
* Creates a new wp . customize . HeaderTool . ImageModel from provided
* header image data and inserts it into the user - uploaded headers
* collection .
*
* @ param { String } url
* @ param { Number } attachmentId
* @ param { Number } width
* @ param { Number } height
* /
setImageFromURL : function ( url , attachmentId , width , height ) {
var choice , data = { } ;
data . url = url ;
data . thumbnail _url = url ;
2014-04-13 14:22:14 -04:00
data . timestamp = _ . now ( ) ;
2014-03-11 00:13:16 -04:00
if ( attachmentId ) {
data . attachment _id = attachmentId ;
}
if ( width ) {
data . width = width ;
}
if ( height ) {
data . height = height ;
}
choice = new api . HeaderTool . ImageModel ( {
header : data ,
choice : url . split ( '/' ) . pop ( )
} ) ;
api . HeaderTool . UploadsList . add ( choice ) ;
api . HeaderTool . currentHeader . set ( choice . toJSON ( ) ) ;
choice . save ( ) ;
choice . importImage ( ) ;
} ,
/ * *
* Triggers the necessary events to deselect an image which was set as
* the currently selected one .
* /
removeImage : function ( ) {
api . HeaderTool . currentHeader . trigger ( 'hide' ) ;
api . HeaderTool . CombinedList . trigger ( 'control:removeImage' ) ;
}
} ) ;
2015-02-24 15:31:24 -05:00
/ * *
* wp . customize . ThemeControl
*
* @ constructor
* @ augments wp . customize . Control
* @ augments wp . customize . Class
* /
api . ThemeControl = api . Control . extend ( {
2015-03-27 18:54:29 -04:00
touchDrag : false ,
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
screenshotRendered : false ,
2015-03-31 18:21:25 -04:00
2015-02-24 15:31:24 -05:00
/ * *
* @ since 4.2 . 0
* /
ready : function ( ) {
2017-11-02 20:59:47 -04:00
var control = this , panel = api . panel ( 'themes' ) ;
2017-10-07 02:00:54 -04:00
2017-10-24 15:06:47 -04:00
function disableSwitchButtons ( ) {
2017-11-02 20:59:47 -04:00
return ! panel . canSwitchTheme ( control . params . theme . id ) ;
2017-10-24 15:06:47 -04:00
}
2017-10-07 02:00:54 -04:00
2017-10-24 15:06:47 -04:00
// Temporary special function since supplying SFTP credentials does not work yet. See #42184.
function disableInstallButtons ( ) {
return disableSwitchButtons ( ) || true === api . settings . theme . _filesystemCredentialsNeeded ;
}
2017-11-02 20:59:47 -04:00
function updateButtons ( ) {
control . container . find ( 'button.preview, button.preview-theme' ) . toggleClass ( 'disabled' , disableSwitchButtons ( ) ) ;
control . container . find ( 'button.theme-install' ) . toggleClass ( 'disabled' , disableInstallButtons ( ) ) ;
2017-10-24 15:06:47 -04:00
}
2017-11-02 20:59:47 -04:00
api . state ( 'selectedChangesetStatus' ) . bind ( updateButtons ) ;
api . state ( 'changesetStatus' ) . bind ( updateButtons ) ;
2017-10-07 02:00:54 -04:00
updateButtons ( ) ;
2015-02-24 15:31:24 -05:00
2015-03-27 18:54:29 -04:00
control . container . on ( 'touchmove' , '.theme' , function ( ) {
control . touchDrag = true ;
} ) ;
2015-02-24 15:31:24 -05:00
// Bind details view trigger.
2015-03-27 18:54:29 -04:00
control . container . on ( 'click keydown touchend' , '.theme' , function ( event ) {
2017-10-07 02:00:54 -04:00
var section ;
2015-02-24 15:31:24 -05:00
if ( api . utils . isKeydownButNotEnterEvent ( event ) ) {
return ;
}
2015-03-27 18:54:29 -04:00
// Bail if the user scrolled on a touch device.
if ( control . touchDrag === true ) {
return control . touchDrag = false ;
}
// Prevent the modal from showing when the user clicks the action button.
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
if ( $ ( event . target ) . is ( '.theme-actions .button, .update-theme' ) ) {
2015-02-24 15:31:24 -05:00
return ;
}
2015-04-01 08:36:26 -04:00
event . preventDefault ( ) ; // Keep this AFTER the key filter above
2017-10-07 02:00:54 -04:00
section = api . section ( control . section ( ) ) ;
section . showDetails ( control . params . theme , function ( ) {
2017-10-24 15:06:47 -04:00
// Temporary special function since supplying SFTP credentials does not work yet. See #42184.
if ( api . settings . theme . _filesystemCredentialsNeeded ) {
section . overlay . find ( '.theme-actions .delete-theme' ) . remove ( ) ;
}
2017-10-07 02:00:54 -04:00
} ) ;
2015-02-24 15:31:24 -05:00
} ) ;
2015-04-08 16:52:29 -04:00
control . container . on ( 'render-screenshot' , function ( ) {
var $screenshot = $ ( this ) . find ( 'img' ) ,
source = $screenshot . data ( 'src' ) ;
if ( source ) {
$screenshot . attr ( 'src' , source ) ;
}
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
control . screenshotRendered = true ;
2015-04-08 16:52:29 -04:00
} ) ;
2015-02-24 15:31:24 -05:00
} ,
/ * *
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
* Show or hide the theme based on the presence of the term in the title , description , tags , and author .
2015-02-24 15:31:24 -05:00
*
* @ since 4.2 . 0
2017-10-10 03:09:52 -04:00
* @ param { Array } terms - An array of terms to search for .
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
* @ returns { boolean } Whether a theme control was activated or not .
2015-02-24 15:31:24 -05:00
* /
2017-10-10 03:09:52 -04:00
filter : function ( terms ) {
2015-02-24 15:31:24 -05:00
var control = this ,
2017-10-10 03:09:52 -04:00
matchCount = 0 ,
2015-04-08 16:52:29 -04:00
haystack = control . params . theme . name + ' ' +
control . params . theme . description + ' ' +
control . params . theme . tags + ' ' +
2017-10-10 03:09:52 -04:00
control . params . theme . author + ' ' ;
2015-02-24 15:31:24 -05:00
haystack = haystack . toLowerCase ( ) . replace ( '-' , ' ' ) ;
2017-10-10 03:09:52 -04:00
// Back-compat for behavior in WordPress 4.2.0 to 4.8.X.
if ( ! _ . isArray ( terms ) ) {
terms = [ terms ] ;
}
// Always give exact name matches highest ranking.
if ( control . params . theme . name . toLowerCase ( ) === terms . join ( ' ' ) ) {
matchCount = 100 ;
} else {
// Search for and weight (by 10) complete term matches.
matchCount = matchCount + 10 * ( haystack . split ( terms . join ( ' ' ) ) . length - 1 ) ;
// Search for each term individually (as whole-word and partial match) and sum weighted match counts.
_ . each ( terms , function ( term ) {
matchCount = matchCount + 2 * ( haystack . split ( term + ' ' ) . length - 1 ) ; // Whole-word, double-weighted.
matchCount = matchCount + haystack . split ( term ) . length - 1 ; // Partial word, to minimize empty intermediate searches while typing.
} ) ;
// Upper limit on match ranking.
if ( matchCount > 99 ) {
matchCount = 99 ;
}
}
if ( 0 !== matchCount ) {
2015-02-24 15:31:24 -05:00
control . activate ( ) ;
2017-10-10 03:09:52 -04:00
control . params . priority = 101 - matchCount ; // Sort results by match count.
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
return true ;
2015-02-24 15:31:24 -05:00
} else {
2017-10-10 03:09:52 -04:00
control . deactivate ( ) ; // Hide control
control . params . priority = 101 ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
return false ;
}
} ,
/ * *
* Rerender the theme from its JS template with the installed type .
*
* @ since 4.9 . 0
*
* @ returns { void }
* /
rerenderAsInstalled : function ( installed ) {
var control = this , section ;
if ( installed ) {
control . params . theme . type = 'installed' ;
} else {
section = api . section ( control . params . section ) ;
control . params . theme . type = section . params . action ;
2015-02-24 15:31:24 -05:00
}
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
control . renderContent ( ) ; // Replaces existing content.
control . container . trigger ( 'render-screenshot' ) ;
2015-02-24 15:31:24 -05:00
}
} ) ;
2017-09-21 19:04:45 -04:00
/ * *
* Class wp . customize . CodeEditorControl
*
* @ since 4.9 . 0
*
* @ constructor
* @ augments wp . customize . Control
* @ augments wp . customize . Class
* /
api . CodeEditorControl = api . Control . extend ( {
2017-10-20 17:48:46 -04:00
/ * *
* Initialize .
*
* @ since 4.9 . 0
* @ param { string } id - Unique identifier for the control instance .
* @ param { object } options - Options hash for the control instance .
* @ returns { void }
* /
initialize : function ( id , options ) {
var control = this ;
2017-10-21 04:44:52 -04:00
control . deferred = _ . extend ( control . deferred || { } , {
codemirror : $ . Deferred ( )
} ) ;
api . Control . prototype . initialize . call ( control , id , options ) ;
2017-11-13 17:46:34 -05:00
// Note that rendering is debounced so the props will be used when rendering happens after add event.
control . notifications . bind ( 'add' , function ( notification ) {
// Skip if control notification is not from setting csslint_error notification.
if ( notification . code !== control . setting . id + ':csslint_error' ) {
return ;
}
// Customize the template and behavior of csslint_error notifications.
notification . templateId = 'customize-code-editor-lint-error-notification' ;
notification . render = ( function ( render ) {
return function ( ) {
var li = render . call ( this ) ;
li . find ( 'input[type=checkbox]' ) . on ( 'click' , function ( ) {
control . setting . notifications . remove ( 'csslint_error' ) ;
} ) ;
return li ;
} ;
} ) ( notification . render ) ;
} ) ;
2017-10-20 17:48:46 -04:00
} ,
2017-09-21 19:04:45 -04:00
/ * *
* Initialize the editor when the containing section is ready and expanded .
*
* @ since 4.9 . 0
* @ returns { void }
* /
ready : function ( ) {
var control = this ;
if ( ! control . section ( ) ) {
control . initEditor ( ) ;
return ;
}
// Wait to initialize editor until section is embedded and expanded.
api . section ( control . section ( ) , function ( section ) {
section . deferred . embedded . done ( function ( ) {
var onceExpanded ;
if ( section . expanded ( ) ) {
control . initEditor ( ) ;
} else {
onceExpanded = function ( isExpanded ) {
if ( isExpanded ) {
control . initEditor ( ) ;
section . expanded . unbind ( onceExpanded ) ;
}
} ;
section . expanded . bind ( onceExpanded ) ;
}
} ) ;
} ) ;
} ,
/ * *
* Initialize editor .
*
* @ since 4.9 . 0
* @ returns { void }
* /
initEditor : function ( ) {
2017-10-20 12:39:48 -04:00
var control = this , element , editorSettings = false ;
// Obtain editorSettings for instantiation.
if ( wp . codeEditor && ( _ . isUndefined ( control . params . editor _settings ) || false !== control . params . editor _settings ) ) {
// Obtain default editor settings.
editorSettings = wp . codeEditor . defaultSettings ? _ . clone ( wp . codeEditor . defaultSettings ) : { } ;
editorSettings . codemirror = _ . extend (
{ } ,
editorSettings . codemirror ,
{
indentUnit : 2 ,
tabSize : 2
}
) ;
// Merge editor_settings param on top of defaults.
if ( _ . isObject ( control . params . editor _settings ) ) {
_ . each ( control . params . editor _settings , function ( value , key ) {
if ( _ . isObject ( value ) ) {
editorSettings [ key ] = _ . extend (
{ } ,
editorSettings [ key ] ,
value
) ;
}
} ) ;
}
}
2017-09-21 19:04:45 -04:00
element = new api . Element ( control . container . find ( 'textarea' ) ) ;
control . elements . push ( element ) ;
element . sync ( control . setting ) ;
element . set ( control . setting ( ) ) ;
2017-10-20 12:39:48 -04:00
if ( editorSettings ) {
control . initSyntaxHighlightingEditor ( editorSettings ) ;
2017-09-21 19:04:45 -04:00
} else {
control . initPlainTextareaEditor ( ) ;
}
} ,
/ * *
* Make sure editor gets focused when control is focused .
*
* @ since 4.9 . 0
* @ param { Object } [ params ] - Focus params .
* @ param { Function } [ params . completeCallback ] - Function to call when expansion is complete .
* @ returns { void }
* /
focus : function ( params ) {
var control = this , extendedParams = _ . extend ( { } , params ) , originalCompleteCallback ;
originalCompleteCallback = extendedParams . completeCallback ;
extendedParams . completeCallback = function ( ) {
if ( originalCompleteCallback ) {
originalCompleteCallback ( ) ;
}
if ( control . editor ) {
control . editor . codemirror . focus ( ) ;
}
} ;
api . Control . prototype . focus . call ( control , extendedParams ) ;
} ,
/ * *
* Initialize syntax - highlighting editor .
*
* @ since 4.9 . 0
* @ param { object } codeEditorSettings - Code editor settings .
* @ returns { void }
* /
initSyntaxHighlightingEditor : function ( codeEditorSettings ) {
var control = this , $textarea = control . container . find ( 'textarea' ) , settings , suspendEditorUpdate = false ;
settings = _ . extend ( { } , codeEditorSettings , {
onTabNext : _ . bind ( control . onTabNext , control ) ,
onTabPrevious : _ . bind ( control . onTabPrevious , control ) ,
onUpdateErrorNotice : _ . bind ( control . onUpdateErrorNotice , control )
} ) ;
control . editor = wp . codeEditor . initialize ( $textarea , settings ) ;
2017-09-24 12:00:46 -04:00
// Improve the editor accessibility.
$ ( control . editor . codemirror . display . lineDiv )
. attr ( {
role : 'textbox' ,
'aria-multiline' : 'true' ,
'aria-label' : control . params . label ,
'aria-describedby' : 'editor-keyboard-trap-help-1 editor-keyboard-trap-help-2 editor-keyboard-trap-help-3 editor-keyboard-trap-help-4'
} ) ;
// Focus the editor when clicking on its label.
control . container . find ( 'label' ) . on ( 'click' , function ( ) {
control . editor . codemirror . focus ( ) ;
} ) ;
2017-09-21 19:04:45 -04:00
/ *
* When the CodeMirror instance changes , mirror to the textarea ,
* where we have our "true" change event handler bound .
* /
control . editor . codemirror . on ( 'change' , function ( codemirror ) {
suspendEditorUpdate = true ;
$textarea . val ( codemirror . getValue ( ) ) . trigger ( 'change' ) ;
suspendEditorUpdate = false ;
} ) ;
// Update CodeMirror when the setting is changed by another plugin.
control . setting . bind ( function ( value ) {
if ( ! suspendEditorUpdate ) {
control . editor . codemirror . setValue ( value ) ;
}
} ) ;
// Prevent collapsing section when hitting Esc to tab out of editor.
control . editor . codemirror . on ( 'keydown' , function onKeydown ( codemirror , event ) {
var escKeyCode = 27 ;
if ( escKeyCode === event . keyCode ) {
event . stopPropagation ( ) ;
}
} ) ;
2017-10-20 17:48:46 -04:00
control . deferred . codemirror . resolveWith ( control , [ control . editor . codemirror ] ) ;
2017-09-21 19:04:45 -04:00
} ,
/ * *
* Handle tabbing to the field after the editor .
*
* @ since 4.9 . 0
* @ returns { void }
* /
onTabNext : function onTabNext ( ) {
var control = this , controls , controlIndex , section ;
section = api . section ( control . section ( ) ) ;
controls = section . controls ( ) ;
controlIndex = controls . indexOf ( control ) ;
if ( controls . length === controlIndex + 1 ) {
$ ( '#customize-footer-actions .collapse-sidebar' ) . focus ( ) ;
} else {
controls [ controlIndex + 1 ] . container . find ( ':focusable:first' ) . focus ( ) ;
}
} ,
/ * *
* Handle tabbing to the field before the editor .
*
* @ since 4.9 . 0
* @ returns { void }
* /
onTabPrevious : function onTabPrevious ( ) {
var control = this , controls , controlIndex , section ;
section = api . section ( control . section ( ) ) ;
controls = section . controls ( ) ;
controlIndex = controls . indexOf ( control ) ;
if ( 0 === controlIndex ) {
section . contentContainer . find ( '.customize-section-title .customize-help-toggle, .customize-section-title .customize-section-description.open .section-description-close' ) . last ( ) . focus ( ) ;
} else {
controls [ controlIndex - 1 ] . contentContainer . find ( ':focusable:first' ) . focus ( ) ;
}
} ,
/ * *
* Update error notice .
*
* @ since 4.9 . 0
* @ param { Array } errorAnnotations - Error annotations .
* @ returns { void }
* /
onUpdateErrorNotice : function onUpdateErrorNotice ( errorAnnotations ) {
var control = this , message ;
control . setting . notifications . remove ( 'csslint_error' ) ;
if ( 0 !== errorAnnotations . length ) {
if ( 1 === errorAnnotations . length ) {
message = api . l10n . customCssError . singular . replace ( '%d' , '1' ) ;
} else {
message = api . l10n . customCssError . plural . replace ( '%d' , String ( errorAnnotations . length ) ) ;
}
2017-10-04 02:48:46 -04:00
control . setting . notifications . add ( new api . Notification ( 'csslint_error' , {
2017-09-21 19:04:45 -04:00
message : message ,
type : 'error'
} ) ) ;
}
} ,
/ * *
* Initialize plain - textarea editor when syntax highlighting is disabled .
*
* @ since 4.9 . 0
* @ returns { void }
* /
initPlainTextareaEditor : function ( ) {
var control = this , $textarea = control . container . find ( 'textarea' ) , textarea = $textarea [ 0 ] ;
$textarea . on ( 'blur' , function onBlur ( ) {
$textarea . data ( 'next-tab-blurs' , false ) ;
} ) ;
$textarea . on ( 'keydown' , function onKeydown ( event ) {
var selectionStart , selectionEnd , value , tabKeyCode = 9 , escKeyCode = 27 ;
if ( escKeyCode === event . keyCode ) {
if ( ! $textarea . data ( 'next-tab-blurs' ) ) {
$textarea . data ( 'next-tab-blurs' , true ) ;
event . stopPropagation ( ) ; // Prevent collapsing the section.
}
return ;
}
// Short-circuit if tab key is not being pressed or if a modifier key *is* being pressed.
if ( tabKeyCode !== event . keyCode || event . ctrlKey || event . altKey || event . shiftKey ) {
return ;
}
// Prevent capturing Tab characters if Esc was pressed.
if ( $textarea . data ( 'next-tab-blurs' ) ) {
return ;
}
selectionStart = textarea . selectionStart ;
selectionEnd = textarea . selectionEnd ;
value = textarea . value ;
if ( selectionStart >= 0 ) {
textarea . value = value . substring ( 0 , selectionStart ) . concat ( '\t' , value . substring ( selectionEnd ) ) ;
$textarea . selectionStart = textarea . selectionEnd = selectionStart + 1 ;
}
event . stopPropagation ( ) ;
event . preventDefault ( ) ;
} ) ;
2017-10-20 17:48:46 -04:00
control . deferred . codemirror . rejectWith ( control ) ;
2017-09-21 19:04:45 -04:00
}
} ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
/ * *
* Class wp . customize . DateTimeControl .
*
* @ since 4.9 . 0
* @ constructor
* @ augments wp . customize . Control
* @ augments wp . customize . Class
* /
api . DateTimeControl = api . Control . extend ( {
/ * *
* Initialize behaviors .
*
* @ since 4.9 . 0
* @ returns { void }
* /
ready : function ready ( ) {
var control = this ;
2017-10-02 00:12:47 -04:00
control . inputElements = { } ;
control . invalidDate = false ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
2017-10-30 12:40:47 -04:00
_ . bindAll ( control , 'populateSetting' , 'updateDaysForMonth' , 'populateDateInputs' ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
if ( ! control . setting ) {
Customize: Allow controls to be created with pre-instantiated `Setting` object(s), or even with plain `Value` object(s).
* Allow passing settings in keyed object (e.g. `settings: { default: 'id' } ), or as an array (e.g. `settings: [ 'id' ]`) with first being default; again, `Setting`/`Value` objects may be supplied instead of IDs.
* Allow a single setting to be supplied with just a single `setting` param, either a string or a `Setting`/`Value` object.
* Update `changeset_status` and `scheduled_changeset_date` to be added dynamically with JS and simply passing of `api.state()` instances as `setting`.
* Introduce a `data-customize-setting-key-link` attribute which, unlike `data-customize-setting-link`, allows passing the setting key (e.g. `default`) as opposed to the setting ID.
* Allow `WP_Customize_Control::get_link()` to return `data-customize-setting-key-link` when setting is not registered.
* Eliminate `default_value` from `WP_Customize_Date_Time_Control` since now comes from supplied `Value`.
* Export status choices as `wp.customize.settings.changeset.statusChoices`.
* Export date and time formats as `wp.customize.settings.dateFormat` and `wp.customize.settings.timeFormat` respectively.
Props westonruter, sayedwp.
See #39896, #30738, #30741, #42083.
Fixes #37964, #36167.
Built from https://develop.svn.wordpress.org/trunk@41750
git-svn-id: http://core.svn.wordpress.org/trunk@41584 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-10-04 16:02:49 -04:00
throw new Error ( 'Missing setting' ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
}
2017-10-02 00:12:47 -04:00
control . container . find ( '.date-input' ) . each ( function ( ) {
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
var input = $ ( this ) , component , element ;
component = input . data ( 'component' ) ;
element = new api . Element ( input ) ;
control . inputElements [ component ] = element ;
control . elements . push ( element ) ;
2017-10-30 12:40:47 -04:00
// Add invalid date error once user changes (and has blurred the input).
input . on ( 'change' , function ( ) {
if ( control . invalidDate ) {
control . notifications . add ( new api . Notification ( 'invalid_date' , {
message : api . l10n . invalidDate
} ) ) ;
}
} ) ;
// Remove the error immediately after validity change.
input . on ( 'input' , _ . debounce ( function ( ) {
if ( ! control . invalidDate ) {
control . notifications . remove ( 'invalid_date' ) ;
}
} ) ) ;
2017-11-01 17:04:53 -04:00
// Add zero-padding when blurring field.
input . on ( 'blur' , _ . debounce ( function ( ) {
if ( ! control . invalidDate ) {
control . populateDateInputs ( ) ;
}
} ) ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
} ) ;
control . inputElements . month . bind ( control . updateDaysForMonth ) ;
control . inputElements . year . bind ( control . updateDaysForMonth ) ;
control . populateDateInputs ( ) ;
2017-10-02 00:12:47 -04:00
control . setting . bind ( control . populateDateInputs ) ;
2017-10-30 12:40:47 -04:00
// Start populating setting after inputs have been populated.
_ . each ( control . inputElements , function ( element ) {
element . bind ( control . populateSetting ) ;
} ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
} ,
/ * *
* Parse datetime string .
*
* @ since 4.9 . 0
2017-10-02 00:12:47 -04:00
*
* @ param { string } datetime - Date / Time string . Accepts Y - m - d [ H : i [ : s ] ] format .
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
* @ returns { object | null } Returns object containing date components or null if parse error .
* /
2017-10-02 00:12:47 -04:00
parseDateTime : function parseDateTime ( datetime ) {
var control = this , matches , date , midDayHour = 12 ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
if ( datetime ) {
2017-10-02 00:12:47 -04:00
matches = datetime . match ( /^(\d\d\d\d)-(\d\d)-(\d\d)(?: (\d\d):(\d\d)(?::(\d\d))?)?$/ ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
}
if ( ! matches ) {
return null ;
}
matches . shift ( ) ;
date = {
year : matches . shift ( ) ,
month : matches . shift ( ) ,
day : matches . shift ( ) ,
2017-10-02 00:12:47 -04:00
hour : matches . shift ( ) || '00' ,
minute : matches . shift ( ) || '00' ,
second : matches . shift ( ) || '00'
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
} ;
2017-10-02 00:12:47 -04:00
if ( control . params . includeTime && control . params . twelveHourFormat ) {
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
date . hour = parseInt ( date . hour , 10 ) ;
2017-10-02 00:12:47 -04:00
date . meridian = date . hour >= midDayHour ? 'pm' : 'am' ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
date . hour = date . hour % midDayHour ? String ( date . hour % midDayHour ) : String ( midDayHour ) ;
2017-10-02 00:12:47 -04:00
delete date . second ; // @todo Why only if twelveHourFormat?
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
}
return date ;
} ,
/ * *
* Validates if input components have valid date and time .
*
* @ since 4.9 . 0
* @ return { boolean } If date input fields has error .
* /
validateInputs : function validateInputs ( ) {
2017-10-30 12:40:47 -04:00
var control = this , components , validityInput ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
control . invalidDate = false ;
2017-10-02 00:12:47 -04:00
components = [ 'year' , 'day' ] ;
if ( control . params . includeTime ) {
components . push ( 'hour' , 'minute' ) ;
}
2017-10-30 12:40:47 -04:00
_ . find ( components , function ( component ) {
var element , max , min , value ;
element = control . inputElements [ component ] ;
validityInput = element . element . get ( 0 ) ;
max = parseInt ( element . element . attr ( 'max' ) , 10 ) ;
min = parseInt ( element . element . attr ( 'min' ) , 10 ) ;
value = parseInt ( element ( ) , 10 ) ;
control . invalidDate = isNaN ( value ) || value > max || value < min ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
if ( ! control . invalidDate ) {
2017-10-30 12:40:47 -04:00
validityInput . setCustomValidity ( '' ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
}
2017-10-30 12:40:47 -04:00
return control . invalidDate ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
} ) ;
2017-10-30 12:40:47 -04:00
if ( control . inputElements . meridian && ! control . invalidDate ) {
validityInput = control . inputElements . meridian . element . get ( 0 ) ;
if ( 'am' !== control . inputElements . meridian . get ( ) && 'pm' !== control . inputElements . meridian . get ( ) ) {
control . invalidDate = true ;
} else {
validityInput . setCustomValidity ( '' ) ;
}
}
if ( control . invalidDate ) {
validityInput . setCustomValidity ( api . l10n . invalidValue ) ;
} else {
validityInput . setCustomValidity ( '' ) ;
}
if ( ! control . section ( ) || api . section . has ( control . section ( ) ) && api . section ( control . section ( ) ) . expanded ( ) ) {
_ . result ( validityInput , 'reportValidity' ) ;
}
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
return control . invalidDate ;
} ,
/ * *
* Updates number of days according to the month and year selected .
*
* @ since 4.9 . 0
* @ return { void }
* /
updateDaysForMonth : function updateDaysForMonth ( ) {
var control = this , daysInMonth , year , month , day ;
2017-10-30 12:40:47 -04:00
month = parseInt ( control . inputElements . month ( ) , 10 ) ;
year = parseInt ( control . inputElements . year ( ) , 10 ) ;
day = parseInt ( control . inputElements . day ( ) , 10 ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
if ( month && year ) {
daysInMonth = new Date ( year , month , 0 ) . getDate ( ) ;
control . inputElements . day . element . attr ( 'max' , daysInMonth ) ;
if ( day > daysInMonth ) {
2017-10-30 12:40:47 -04:00
control . inputElements . day ( String ( daysInMonth ) ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
}
}
} ,
/ * *
* Populate setting value from the inputs .
*
* @ since 4.9 . 0
* @ returns { boolean } If setting updated .
* /
populateSetting : function populateSetting ( ) {
var control = this , date ;
if ( control . validateInputs ( ) || ! control . params . allowPastDate && ! control . isFutureDate ( ) ) {
return false ;
}
date = control . convertInputDateToString ( ) ;
control . setting . set ( date ) ;
return true ;
} ,
/ * *
* Converts input values to string in Y - m - d H : i : s format .
*
* @ since 4.9 . 0
* @ return { string } Date string .
* /
convertInputDateToString : function convertInputDateToString ( ) {
var control = this , date = '' , dateFormat , hourInTwentyFourHourFormat ,
getElementValue , pad ;
pad = function ( number , padding ) {
var zeros ;
if ( String ( number ) . length < padding ) {
zeros = padding - String ( number ) . length ;
number = Math . pow ( 10 , zeros ) . toString ( ) . substr ( 1 ) + String ( number ) ;
}
return number ;
} ;
getElementValue = function ( component ) {
2017-10-30 12:40:47 -04:00
var value = parseInt ( control . inputElements [ component ] . get ( ) , 10 ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
if ( _ . contains ( [ 'month' , 'day' , 'hour' , 'minute' ] , component ) ) {
value = pad ( value , 2 ) ;
} else if ( 'year' === component ) {
value = pad ( value , 4 ) ;
}
return value ;
} ;
2017-10-02 00:12:47 -04:00
dateFormat = [ 'year' , '-' , 'month' , '-' , 'day' ] ;
if ( control . params . includeTime ) {
hourInTwentyFourHourFormat = control . inputElements . meridian ? control . convertHourToTwentyFourHourFormat ( control . inputElements . hour ( ) , control . inputElements . meridian ( ) ) : control . inputElements . hour ( ) ;
dateFormat = dateFormat . concat ( [ ' ' , pad ( hourInTwentyFourHourFormat , 2 ) , ':' , 'minute' , ':' , '00' ] ) ;
}
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
_ . each ( dateFormat , function ( component ) {
date += control . inputElements [ component ] ? getElementValue ( component ) : component ;
} ) ;
return date ;
} ,
/ * *
* Check if the date is in the future .
*
* @ since 4.9 . 0
* @ returns { boolean } True if future date .
* /
isFutureDate : function isFutureDate ( ) {
var control = this ;
return 0 < api . utils . getRemainingTime ( control . convertInputDateToString ( ) ) ;
} ,
/ * *
* Convert hour in twelve hour format to twenty four hour format .
*
* @ since 4.9 . 0
2017-10-02 00:12:47 -04:00
* @ param { string } hourInTwelveHourFormat - Hour in twelve hour format .
* @ param { string } meridian - Either 'am' or 'pm' .
* @ returns { string } Hour in twenty four hour format .
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
* /
2017-10-02 00:12:47 -04:00
convertHourToTwentyFourHourFormat : function convertHour ( hourInTwelveHourFormat , meridian ) {
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
var hourInTwentyFourHourFormat , hour , midDayHour = 12 ;
hour = parseInt ( hourInTwelveHourFormat , 10 ) ;
2017-10-02 00:12:47 -04:00
if ( isNaN ( hour ) ) {
return '' ;
}
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
2017-10-02 00:12:47 -04:00
if ( 'pm' === meridian && hour < midDayHour ) {
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
hourInTwentyFourHourFormat = hour + midDayHour ;
2017-10-02 00:12:47 -04:00
} else if ( 'am' === meridian && midDayHour === hour ) {
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
hourInTwentyFourHourFormat = hour - midDayHour ;
} else {
hourInTwentyFourHourFormat = hour ;
}
return String ( hourInTwentyFourHourFormat ) ;
} ,
/ * *
* Populates date inputs in date fields .
*
* @ since 4.9 . 0
* @ returns { boolean } Whether the inputs were populated .
* /
populateDateInputs : function populateDateInputs ( ) {
var control = this , parsed ;
2017-10-02 00:12:47 -04:00
parsed = control . parseDateTime ( control . setting . get ( ) ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
if ( ! parsed ) {
return false ;
}
_ . each ( control . inputElements , function ( element , component ) {
2017-11-01 17:04:53 -04:00
var value = parsed [ component ] ; // This will be zero-padded string.
// Set month and meridian regardless of focused state since they are dropdowns.
if ( 'month' === component || 'meridian' === component ) {
// Options in dropdowns are not zero-padded.
value = value . replace ( /^0/ , '' ) ;
element . set ( value ) ;
} else {
value = parseInt ( value , 10 ) ;
if ( ! element . element . is ( document . activeElement ) ) {
// Populate element with zero-padded value if not focused.
element . set ( parsed [ component ] ) ;
} else if ( value !== parseInt ( element ( ) , 10 ) ) {
// Forcibly update the value if its underlying value changed, regardless of zero-padding.
element . set ( String ( value ) ) ;
}
2017-10-30 12:40:47 -04:00
}
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
} ) ;
return true ;
} ,
/ * *
* Toggle future date notification for date control .
*
* @ since 4.9 . 0
* @ param { boolean } notify Add or remove the notification .
* @ return { wp . customize . DateTimeControl }
* /
toggleFutureDateNotification : function toggleFutureDateNotification ( notify ) {
var control = this , notificationCode , notification ;
notificationCode = 'not_future_date' ;
if ( notify ) {
notification = new api . Notification ( notificationCode , {
type : 'error' ,
message : api . l10n . futureDateError
} ) ;
2017-10-04 02:48:46 -04:00
control . notifications . add ( notification ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
} else {
control . notifications . remove ( notificationCode ) ;
}
return control ;
}
} ) ;
/ * *
* Class PreviewLinkControl .
*
* @ since 4.9 . 0
* @ constructor
* @ augments wp . customize . Control
* @ augments wp . customize . Class
* /
api . PreviewLinkControl = api . Control . extend ( {
2017-10-04 02:48:46 -04:00
defaults : _ . extend ( { } , api . Control . prototype . defaults , {
templateId : 'customize-preview-link-control'
} ) ,
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
/ * *
* Initialize behaviors .
*
* @ since 4.9 . 0
* @ returns { void }
* /
ready : function ready ( ) {
2017-10-02 00:12:47 -04:00
var control = this , element , component , node , url , input , button ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
_ . bindAll ( control , 'updatePreviewLink' ) ;
if ( ! control . setting ) {
control . setting = new api . Value ( ) ;
}
2017-10-02 00:12:47 -04:00
control . previewElements = { } ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
control . container . find ( '.preview-control-element' ) . each ( function ( ) {
node = $ ( this ) ;
component = node . data ( 'component' ) ;
element = new api . Element ( node ) ;
control . previewElements [ component ] = element ;
control . elements . push ( element ) ;
} ) ;
2017-10-02 00:12:47 -04:00
url = control . previewElements . url ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
input = control . previewElements . input ;
button = control . previewElements . button ;
input . link ( control . setting ) ;
2017-10-02 00:12:47 -04:00
url . link ( control . setting ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
2017-10-02 00:12:47 -04:00
url . bind ( function ( value ) {
url . element . parent ( ) . attr ( {
href : value ,
target : api . settings . changeset . uuid
} ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
} ) ;
api . bind ( 'ready' , control . updatePreviewLink ) ;
api . state ( 'saved' ) . bind ( control . updatePreviewLink ) ;
2017-10-02 00:12:47 -04:00
api . state ( 'changesetStatus' ) . bind ( control . updatePreviewLink ) ;
2017-10-22 20:41:47 -04:00
api . state ( 'activated' ) . bind ( control . updatePreviewLink ) ;
api . previewer . previewUrl . bind ( control . updatePreviewLink ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
button . element . on ( 'click' , function ( event ) {
event . preventDefault ( ) ;
if ( control . setting ( ) ) {
input . element . select ( ) ;
document . execCommand ( 'copy' ) ;
button ( button . element . data ( 'copied-text' ) ) ;
}
} ) ;
2017-10-02 00:12:47 -04:00
url . element . parent ( ) . on ( 'click' , function ( event ) {
if ( $ ( this ) . hasClass ( 'disabled' ) ) {
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
event . preventDefault ( ) ;
}
} ) ;
button . element . on ( 'mouseenter' , function ( ) {
if ( control . setting ( ) ) {
button ( button . element . data ( 'copy-text' ) ) ;
}
} ) ;
} ,
/ * *
* Updates Preview Link
*
* @ since 4.9 . 0
* @ return { void }
* /
updatePreviewLink : function updatePreviewLink ( ) {
var control = this , unsavedDirtyValues ;
2017-10-02 00:12:47 -04:00
unsavedDirtyValues = ! api . state ( 'saved' ) . get ( ) || '' === api . state ( 'changesetStatus' ) . get ( ) || 'auto-draft' === api . state ( 'changesetStatus' ) . get ( ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
control . toggleSaveNotification ( unsavedDirtyValues ) ;
2017-10-02 00:12:47 -04:00
control . previewElements . url . element . parent ( ) . toggleClass ( 'disabled' , unsavedDirtyValues ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
control . previewElements . button . element . prop ( 'disabled' , unsavedDirtyValues ) ;
control . setting . set ( api . previewer . getFrontendPreviewUrl ( ) ) ;
} ,
/ * *
* Toggles save notification .
*
* @ since 4.9 . 0
* @ param { boolean } notify Add or remove notification .
* @ return { void }
* /
toggleSaveNotification : function toggleSaveNotification ( notify ) {
var control = this , notificationCode , notification ;
notificationCode = 'changes_not_saved' ;
if ( notify ) {
notification = new api . Notification ( notificationCode , {
type : 'info' ,
message : api . l10n . saveBeforeShare
} ) ;
2017-10-04 02:48:46 -04:00
control . notifications . add ( notification ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
} else {
control . notifications . remove ( notificationCode ) ;
}
}
} ) ;
2012-08-22 20:04:18 -04:00
// Change objects contained within the main customize object to Settings.
api . defaultConstructor = api . Setting ;
2017-10-09 14:56:55 -04:00
/ * *
* Callback for resolved controls .
*
* @ callback deferredControlsCallback
* @ param { wp . customize . Control [ ] } Resolved controls .
* /
/ * *
* Collection of all registered controls .
*
* @ since 3.4 . 0
*
* @ type { Function }
* @ param { ... string } ids - One or more ids for controls to obtain .
* @ param { deferredControlsCallback } [ callback ] - Function called when all supplied controls exist .
* @ returns { wp . customize . Control | undefined | jQuery . promise } Control instance or undefined ( if function called with one id param ) , or promise resolving to requested controls .
*
* @ example < caption > Loop over all registered controls . < / c a p t i o n >
* wp . customize . control . each ( function ( control ) { ... } ) ;
*
* @ example < caption > Getting ` background_color ` control instance . < / c a p t i o n >
* control = wp . customize . control ( 'background_color' ) ;
*
* @ example < caption > Check if control exists . < / c a p t i o n >
* hasControl = wp . customize . control . has ( 'background_color' ) ;
*
* @ example < caption > Deferred getting of ` background_color ` control until it exists , using callback . < / c a p t i o n >
* wp . customize . control ( 'background_color' , function ( control ) { ... } ) ;
*
* @ example < caption > Get title and tagline controls when they both exist , using promise ( only available when multiple IDs are present ) . < / c a p t i o n >
* promise = wp . customize . control ( 'blogname' , 'blogdescription' ) ;
* promise . done ( function ( titleControl , taglineControl ) { ... } ) ;
*
* @ example < caption > Get title and tagline controls when they both exist , using callback . < / c a p t i o n >
* wp . customize . control ( 'blogname' , 'blogdescription' , function ( titleControl , taglineControl ) { ... } ) ;
*
* @ example < caption > Getting setting value for ` background_color ` control . < / c a p t i o n >
* value = wp . customize . control ( 'background_color ' ) . setting . get ( ) ;
* value = wp . customize ( 'background_color' ) . get ( ) ; // Same as above, since setting ID and control ID are the same.
*
* @ example < caption > Add new control for site title . < / c a p t i o n >
* wp . customize . control . add ( new wp . customize . Control ( 'other_blogname' , {
* setting : 'blogname' ,
* type : 'text' ,
* label : 'Site title' ,
* section : 'other_site_identify'
* } ) ) ;
*
* @ example < caption > Remove control . < / c a p t i o n >
* wp . customize . control . remove ( 'other_blogname' ) ;
*
* @ example < caption > Listen for control being added . < / c a p t i o n >
* wp . customize . control . bind ( 'add' , function ( addedControl ) { ... } )
*
* @ example < caption > Listen for control being removed . < / c a p t i o n >
* wp . customize . control . bind ( 'removed' , function ( removedControl ) { ... } )
* /
2012-08-22 20:04:18 -04:00
api . control = new api . Values ( { defaultConstructor : api . Control } ) ;
2017-10-09 14:56:55 -04:00
/ * *
* Callback for resolved sections .
*
* @ callback deferredSectionsCallback
* @ param { wp . customize . Section [ ] } Resolved sections .
* /
/ * *
* Collection of all registered sections .
*
* @ since 3.4 . 0
*
* @ type { Function }
* @ param { ... string } ids - One or more ids for sections to obtain .
* @ param { deferredSectionsCallback } [ callback ] - Function called when all supplied sections exist .
* @ returns { wp . customize . Section | undefined | jQuery . promise } Section instance or undefined ( if function called with one id param ) , or promise resolving to requested sections .
*
* @ example < caption > Loop over all registered sections . < / c a p t i o n >
* wp . customize . section . each ( function ( section ) { ... } )
*
* @ example < caption > Getting ` title_tagline ` section instance . < / c a p t i o n >
* section = wp . customize . section ( 'title_tagline' )
*
* @ example < caption > Expand dynamically - created section when it exists . < / c a p t i o n >
* wp . customize . section ( 'dynamically_created' , function ( section ) {
* section . expand ( ) ;
* } ) ;
*
* @ see { @ link wp . customize . control } for further examples of how to interact with { @ link wp . customize . Values } instances .
* /
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
api . section = new api . Values ( { defaultConstructor : api . Section } ) ;
2017-10-09 14:56:55 -04:00
/ * *
* Callback for resolved panels .
*
* @ callback deferredPanelsCallback
* @ param { wp . customize . Panel [ ] } Resolved panels .
* /
/ * *
* Collection of all registered panels .
*
* @ since 4.0 . 0
*
* @ type { Function }
* @ param { ... string } ids - One or more ids for panels to obtain .
* @ param { deferredPanelsCallback } [ callback ] - Function called when all supplied panels exist .
* @ returns { wp . customize . Panel | undefined | jQuery . promise } Panel instance or undefined ( if function called with one id param ) , or promise resolving to requested panels .
*
* @ example < caption > Loop over all registered panels . < / c a p t i o n >
* wp . customize . panel . each ( function ( panel ) { ... } )
*
* @ example < caption > Getting nav _menus panel instance . < / c a p t i o n >
* panel = wp . customize . panel ( 'nav_menus' ) ;
*
* @ example < caption > Expand dynamically - created panel when it exists . < / c a p t i o n >
* wp . customize . panel ( 'dynamically_created' , function ( panel ) {
* panel . expand ( ) ;
* } ) ;
*
* @ see { @ link wp . customize . control } for further examples of how to interact with { @ link wp . customize . Values } instances .
* /
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
api . panel = new api . Values ( { defaultConstructor : api . Panel } ) ;
2012-08-22 20:04:18 -04:00
2017-10-09 14:56:55 -04:00
/ * *
* Callback for resolved notifications .
*
* @ callback deferredNotificationsCallback
* @ param { wp . customize . Notification [ ] } Resolved notifications .
* /
/ * *
* Collection of all global notifications .
*
* @ since 4.9 . 0
*
* @ type { Function }
* @ param { ... string } codes - One or more codes for notifications to obtain .
* @ param { deferredNotificationsCallback } [ callback ] - Function called when all supplied notifications exist .
* @ returns { wp . customize . Notification | undefined | jQuery . promise } notification instance or undefined ( if function called with one code param ) , or promise resolving to requested notifications .
*
* @ example < caption > Check if existing notification < / c a p t i o n >
* exists = wp . customize . notifications . has ( 'a_new_day_arrived' ) ;
*
* @ example < caption > Obtain existing notification < / c a p t i o n >
* notification = wp . customize . notifications ( 'a_new_day_arrived' ) ;
*
* @ example < caption > Obtain notification that may not exist yet . < / c a p t i o n >
* wp . customize . notifications ( 'a_new_day_arrived' , function ( notification ) { ... } ) ;
*
* @ example < caption > Add a warning notification . < / c a p t i o n >
* wp . customize . notifications . add ( new wp . customize . Notification ( 'midnight_almost_here' , {
* type : 'warning' ,
* message : 'Midnight has almost arrived!' ,
* dismissible : true
* } ) ) ;
*
* @ example < caption > Remove a notification . < / c a p t i o n >
* wp . customize . notifications . remove ( 'a_new_day_arrived' ) ;
*
* @ see { @ link wp . customize . control } for further examples of how to interact with { @ link wp . customize . Values } instances .
* /
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
api . notifications = new api . Notifications ( ) ;
2014-08-08 19:31:15 -04:00
/ * *
2015-09-05 15:53:24 -04:00
* An object that fetches a preview in the background of the document , which
* allows for seamless replacement of an existing preview .
*
2014-11-11 18:52:22 -05:00
* @ class
2014-08-08 19:31:15 -04:00
* @ augments wp . customize . Messenger
* @ augments wp . customize . Class
* @ mixes wp . customize . Events
* /
2012-08-22 20:04:18 -04:00
api . PreviewFrame = api . Messenger . extend ( {
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
sensitivity : null , // Will get set to api.settings.timeouts.previewFrameSensitivity.
2012-08-22 20:04:18 -04:00
2015-09-05 15:53:24 -04:00
/ * *
* Initialize the PreviewFrame .
*
* @ param { object } params . container
* @ param { object } params . previewUrl
* @ param { object } params . query
* @ param { object } options
* /
2012-08-22 20:04:18 -04:00
initialize : function ( params , options ) {
2013-11-15 01:08:10 -05:00
var deferred = $ . Deferred ( ) ;
2012-08-22 20:04:18 -04:00
2015-09-05 15:53:24 -04:00
/ *
* Make the instance of the PreviewFrame the promise object
* so other objects can easily interact with it .
* /
2012-08-22 20:04:18 -04:00
deferred . promise ( this ) ;
this . container = params . container ;
$ . extend ( params , { channel : api . PreviewFrame . uuid ( ) } ) ;
api . Messenger . prototype . initialize . call ( this , params , options ) ;
this . add ( 'previewUrl' , params . previewUrl ) ;
this . query = $ . extend ( params . query || { } , { customize _messenger _channel : this . channel ( ) } ) ;
this . run ( deferred ) ;
} ,
2015-09-05 15:53:24 -04:00
/ * *
* Run the preview request .
*
* @ param { object } deferred jQuery Deferred object to be resolved with
* the request .
* /
2012-08-22 20:04:18 -04:00
run : function ( deferred ) {
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
var previewFrame = this ,
2012-08-22 20:04:18 -04:00
loaded = false ,
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
ready = false ,
readyData = null ,
hasPendingChangesetUpdate = '{}' !== previewFrame . query . customized ,
urlParser ,
params ,
form ;
if ( previewFrame . _ready ) {
previewFrame . unbind ( 'ready' , previewFrame . _ready ) ;
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
}
2012-08-22 20:04:18 -04: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
previewFrame . _ready = function ( data ) {
2012-08-22 20:04:18 -04:00
ready = true ;
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
readyData = data ;
previewFrame . container . addClass ( 'iframe-ready' ) ;
if ( ! data ) {
return ;
}
2012-08-22 20:04:18 -04:00
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
if ( loaded ) {
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
deferred . resolveWith ( previewFrame , [ data ] ) ;
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
}
2012-08-22 20:04:18 -04: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
previewFrame . bind ( 'ready' , previewFrame . _ready ) ;
2012-08-22 20:04:18 -04: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
urlParser = document . createElement ( 'a' ) ;
urlParser . href = previewFrame . previewUrl ( ) ;
2015-03-10 11:56:26 -04: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
params = _ . extend (
api . utils . parseQueryString ( urlParser . search . substr ( 1 ) ) ,
{
customize _changeset _uuid : previewFrame . query . customize _changeset _uuid ,
customize _theme : previewFrame . query . customize _theme ,
customize _messenger _channel : previewFrame . query . customize _messenger _channel
2014-07-09 19:58:16 -04: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
) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
if ( api . settings . changeset . autosaved || ! api . state ( 'saved' ) . get ( ) ) {
Customize: Extend changesets to support autosave revisions with restoration notifications, and introduce a new default linear history mode for saved changesets (with a filter for opt-in to changeset branching).
* Autosaved changes made on top of `auto-draft` changesets get written on top of the `auto-draft` itself, similar to how autosaves for posts will overwrite post drafts.
* Autosaved changes made to saved changesets (e.g. `draft`, `future`) will be placed into an autosave revision for that changeset and that user.
* Opening the Customizer will now prompt the user to restore their most recent auto-draft changeset; if notification is dismissed or ignored then the auto-draft will be marked as dismissed and will not be prompted to user in a notification again.
* Customizer will no longer automatically supply the `changeset_uuid` param in the `customize.php` URL when branching changesets are not active.
* If user closes Customizer explicitly via clicking on X link, then autosave auto-draft/autosave will be dismissed so as to not be prompted again.
* If there is a changeset already saved as a `draft` or `future` (UI is forthcoming) then this changeset will now be autoloaded for the user to keep making additional changes. This is the linear model for changesets.
* To restore the previous behavior of the Customizer where each session started a new changeset, regardless of whether or not there was an existing changeset saved, there is now a `customize_changeset_branching` hook which can be filtered to return `true`.
* `wp.customize.requestChangesetUpdate()` now supports a second with options including `autosave`, `title`, and `date`.
* The window `blur` event for `customize.php` has been replaced with a `visibilitychange` event to reduce autosave requests when clicking into preview window.
* Adds `autosaved` and `branching` args to `WP_Customize_Manager`.
* The `changeset_uuid` param for `WP_Customize_Manager` is extended to recognize a `false` value which causes the Customizer to defer identifying the UUID until `after_setup_theme` in the new `WP_Customize_Manager::establish_loaded_changeset()` method.
* A new `customize_autosaved` query parameter can now be supplied which is passed into the `autosaved` arg in `WP_Customize_Manager`; this option is an opt-in to source data from the autosave revision, allowing a user to restore autosaved changes.
Props westonruter, dlh, sayedwp, JoshuaWold, melchoyce.
See #39896.
Built from https://develop.svn.wordpress.org/trunk@41597
git-svn-id: http://core.svn.wordpress.org/trunk@41430 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-26 03:38:45 -04:00
params . customize _autosaved = 'on' ;
}
2014-07-09 19:58:16 -04: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
urlParser . search = $ . param ( params ) ;
previewFrame . iframe = $ ( '<iframe />' , {
title : api . l10n . previewIframeTitle ,
name : 'customize-' + previewFrame . channel ( )
2014-07-09 19:58:16 -04: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
previewFrame . iframe . attr ( 'onmousewheel' , '' ) ; // Workaround for Safari bug. See WP Trac #38149.
2014-07-09 19:58:16 -04: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
if ( ! hasPendingChangesetUpdate ) {
previewFrame . iframe . attr ( 'src' , urlParser . href ) ;
} else {
previewFrame . iframe . attr ( 'data-src' , urlParser . href ) ; // For debugging purposes.
}
2012-08-22 20:04:18 -04: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
previewFrame . iframe . appendTo ( previewFrame . container ) ;
previewFrame . targetWindow ( previewFrame . iframe [ 0 ] . contentWindow ) ;
2012-08-22 20:04:18 -04: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
/ *
* Submit customized data in POST request to preview frame window since
* there are setting value changes not yet written to changeset .
* /
if ( hasPendingChangesetUpdate ) {
form = $ ( '<form>' , {
action : urlParser . href ,
target : previewFrame . iframe . attr ( 'name' ) ,
method : 'post' ,
hidden : 'hidden'
} ) ;
form . append ( $ ( '<input>' , {
type : 'hidden' ,
name : '_method' ,
value : 'GET'
} ) ) ;
_ . each ( previewFrame . query , function ( value , key ) {
form . append ( $ ( '<input>' , {
type : 'hidden' ,
name : key ,
value : value
} ) ) ;
} ) ;
previewFrame . container . append ( form ) ;
form . submit ( ) ;
form . remove ( ) ; // No need to keep the form around after submitted.
}
2012-08-22 20:04:18 -04: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
previewFrame . bind ( 'iframe-loading-error' , function ( error ) {
previewFrame . iframe . remove ( ) ;
2012-08-22 20:04:18 -04:00
// Check if the user is not logged in.
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
if ( 0 === error ) {
previewFrame . login ( deferred ) ;
2012-08-22 20:04:18 -04:00
return ;
}
// Check for cheaters.
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
if ( - 1 === error ) {
deferred . rejectWith ( previewFrame , [ 'cheatin' ] ) ;
2012-08-22 20:04:18 -04:00
return ;
}
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
deferred . rejectWith ( previewFrame , [ 'request failure' ] ) ;
} ) ;
2012-08-22 20:04:18 -04: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
previewFrame . iframe . one ( 'load' , function ( ) {
loaded = true ;
2012-08-22 20:04:18 -04: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
if ( ready ) {
deferred . resolveWith ( previewFrame , [ readyData ] ) ;
} else {
setTimeout ( function ( ) {
deferred . rejectWith ( previewFrame , [ 'ready timeout' ] ) ;
} , previewFrame . sensitivity ) ;
}
2012-08-22 20:04:18 -04:00
} ) ;
} ,
login : function ( deferred ) {
var self = this ,
reject ;
reject = function ( ) {
deferred . rejectWith ( self , [ 'logged out' ] ) ;
} ;
2015-03-10 17:20:26 -04:00
if ( this . triedLogin ) {
2012-08-22 20:04:18 -04:00
return reject ( ) ;
2015-03-10 17:20:26 -04:00
}
2012-08-22 20:04:18 -04:00
// Check if we have an admin cookie.
$ . get ( api . settings . url . ajax , {
action : 'logged-in'
} ) . fail ( reject ) . done ( function ( response ) {
var iframe ;
2015-03-10 17:20:26 -04:00
if ( '1' !== response ) {
2012-08-22 20:04:18 -04:00
reject ( ) ;
2015-03-10 17:20:26 -04:00
}
2012-08-22 20:04:18 -04:00
2015-03-10 17:20:26 -04:00
iframe = $ ( '<iframe />' , { 'src' : self . previewUrl ( ) , 'title' : api . l10n . previewIframeTitle } ) . hide ( ) ;
2012-08-22 20:04:18 -04:00
iframe . appendTo ( self . container ) ;
2016-01-13 12:22:27 -05:00
iframe . on ( 'load' , function ( ) {
2012-08-22 20:04:18 -04:00
self . triedLogin = true ;
iframe . remove ( ) ;
self . run ( deferred ) ;
} ) ;
} ) ;
} ,
destroy : function ( ) {
api . Messenger . prototype . destroy . call ( this ) ;
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
if ( this . iframe ) {
2012-08-22 20:04:18 -04:00
this . iframe . remove ( ) ;
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
}
2012-08-22 20:04:18 -04:00
delete this . iframe ;
delete this . targetWindow ;
}
} ) ;
( function ( ) {
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
var id = 0 ;
2014-08-08 19:31:15 -04: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
* Return an incremented ID for a preview messenger channel .
*
* This function is named "uuid" for historical reasons , but it is a
* misnomer as it is not an actual UUID , and it is not universally unique .
* This is not to be confused with ` api.settings.changeset.uuid ` .
2014-08-08 19:31:15 -04: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
* @ return { string }
2014-08-08 19:31:15 -04:00
* /
2012-08-22 20:04:18 -04:00
api . PreviewFrame . uuid = function ( ) {
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
return 'preview-' + String ( id ++ ) ;
2012-08-22 20:04:18 -04:00
} ;
} ( ) ) ;
2014-11-11 17:29:23 -05:00
/ * *
2014-12-03 21:04:22 -05:00
* Set the document title of the customizer .
*
* @ since 4.1 . 0
2014-11-11 17:29:23 -05:00
*
* @ param { string } documentTitle
* /
api . setDocumentTitle = function ( documentTitle ) {
var tmpl , title ;
tmpl = api . settings . documentTitleTmpl ;
title = tmpl . replace ( '%s' , documentTitle ) ;
document . title = title ;
2015-03-25 13:26:26 -04:00
api . trigger ( 'title' , title ) ;
2014-11-11 17:29:23 -05:00
} ;
2014-08-08 19:31:15 -04:00
/ * *
2014-11-11 18:52:22 -05:00
* @ class
2014-08-08 19:31:15 -04:00
* @ augments wp . customize . Messenger
* @ augments wp . customize . Class
* @ mixes wp . customize . Events
* /
2012-08-22 20:04:18 -04:00
api . Previewer = api . Messenger . extend ( {
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
refreshBuffer : null , // Will get set to api.settings.timeouts.windowRefresh.
2012-08-22 20:04:18 -04:00
/ * *
2015-09-05 15:53:24 -04:00
* @ param { array } params . allowedUrls
* @ param { string } params . container A selector or jQuery element for the preview
* frame to be placed .
* @ param { string } params . form
* @ param { string } params . previewUrl The URL to preview .
* @ param { object } options
2012-08-22 20:04:18 -04:00
* /
initialize : function ( params , options ) {
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
var previewer = this ,
urlParser = document . createElement ( 'a' ) ;
2012-08-22 20:04:18 -04: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
$ . extend ( previewer , options || { } ) ;
previewer . deferred = {
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
active : $ . Deferred ( )
} ;
2012-08-22 20:04:18 -04: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
// Debounce to prevent hammering server and then wait for any pending update requests.
previewer . refresh = _ . debounce (
( function ( originalRefresh ) {
return function ( ) {
var isProcessingComplete , refreshOnceProcessingComplete ;
isProcessingComplete = function ( ) {
return 0 === api . state ( 'processing' ) . get ( ) ;
} ;
if ( isProcessingComplete ( ) ) {
originalRefresh . call ( previewer ) ;
2012-08-22 20:04:18 -04:00
} else {
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
refreshOnceProcessingComplete = function ( ) {
if ( isProcessingComplete ( ) ) {
originalRefresh . call ( previewer ) ;
api . state ( 'processing' ) . unbind ( refreshOnceProcessingComplete ) ;
}
} ;
api . state ( 'processing' ) . bind ( refreshOnceProcessingComplete ) ;
2012-08-22 20:04:18 -04: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
} ;
} ( previewer . refresh ) ) ,
previewer . refreshBuffer
) ;
2012-08-22 20:04:18 -04: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
previewer . container = api . ensure ( params . container ) ;
previewer . allowedUrls = params . allowedUrls ;
2012-08-22 20:04:18 -04:00
params . url = window . location . href ;
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
api . Messenger . prototype . initialize . call ( previewer , params ) ;
2012-08-22 20:04:18 -04: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
urlParser . href = previewer . origin ( ) ;
previewer . add ( 'scheme' , urlParser . protocol . replace ( /:$/ , '' ) ) ;
2012-08-22 20:04:18 -04:00
// Limit the URL to internal, front-end links.
//
2016-02-25 07:53:27 -05:00
// If the front end and the admin are served from the same domain, load the
2014-10-15 13:21:19 -04:00
// preview over ssl if the Customizer is being loaded over ssl. This avoids
2016-02-25 07:53:27 -05:00
// insecure content warnings. This is not attempted if the admin and front end
// are on different domains to avoid the case where the front end doesn't have
2012-08-22 20:04:18 -04:00
// ssl certs.
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
previewer . add ( 'previewUrl' , params . previewUrl ) . setter ( function ( to ) {
2016-10-24 16:07:31 -04:00
var result = null , urlParser , queryParams , parsedAllowedUrl , parsedCandidateUrls = [ ] ;
2016-08-27 02:05:29 -04:00
urlParser = document . createElement ( 'a' ) ;
urlParser . href = to ;
2012-08-22 20:04:18 -04:00
2016-08-27 02:05:29 -04:00
// Abort if URL is for admin or (static) files in wp-includes or wp-content.
if ( /\/wp-(admin|includes|content)(\/|$)/ . test ( urlParser . pathname ) ) {
2012-08-22 20:04:18 -04:00
return null ;
2016-08-27 02:05:29 -04:00
}
2012-08-22 20:04:18 -04: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
// Remove state query params.
if ( urlParser . search . length > 1 ) {
queryParams = api . utils . parseQueryString ( urlParser . search . substr ( 1 ) ) ;
delete queryParams . customize _changeset _uuid ;
delete queryParams . customize _theme ;
delete queryParams . customize _messenger _channel ;
Customize: Extend changesets to support autosave revisions with restoration notifications, and introduce a new default linear history mode for saved changesets (with a filter for opt-in to changeset branching).
* Autosaved changes made on top of `auto-draft` changesets get written on top of the `auto-draft` itself, similar to how autosaves for posts will overwrite post drafts.
* Autosaved changes made to saved changesets (e.g. `draft`, `future`) will be placed into an autosave revision for that changeset and that user.
* Opening the Customizer will now prompt the user to restore their most recent auto-draft changeset; if notification is dismissed or ignored then the auto-draft will be marked as dismissed and will not be prompted to user in a notification again.
* Customizer will no longer automatically supply the `changeset_uuid` param in the `customize.php` URL when branching changesets are not active.
* If user closes Customizer explicitly via clicking on X link, then autosave auto-draft/autosave will be dismissed so as to not be prompted again.
* If there is a changeset already saved as a `draft` or `future` (UI is forthcoming) then this changeset will now be autoloaded for the user to keep making additional changes. This is the linear model for changesets.
* To restore the previous behavior of the Customizer where each session started a new changeset, regardless of whether or not there was an existing changeset saved, there is now a `customize_changeset_branching` hook which can be filtered to return `true`.
* `wp.customize.requestChangesetUpdate()` now supports a second with options including `autosave`, `title`, and `date`.
* The window `blur` event for `customize.php` has been replaced with a `visibilitychange` event to reduce autosave requests when clicking into preview window.
* Adds `autosaved` and `branching` args to `WP_Customize_Manager`.
* The `changeset_uuid` param for `WP_Customize_Manager` is extended to recognize a `false` value which causes the Customizer to defer identifying the UUID until `after_setup_theme` in the new `WP_Customize_Manager::establish_loaded_changeset()` method.
* A new `customize_autosaved` query parameter can now be supplied which is passed into the `autosaved` arg in `WP_Customize_Manager`; this option is an opt-in to source data from the autosave revision, allowing a user to restore autosaved changes.
Props westonruter, dlh, sayedwp, JoshuaWold, melchoyce.
See #39896.
Built from https://develop.svn.wordpress.org/trunk@41597
git-svn-id: http://core.svn.wordpress.org/trunk@41430 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-26 03:38:45 -04:00
delete queryParams . customize _autosaved ;
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
if ( _ . isEmpty ( queryParams ) ) {
urlParser . search = '' ;
} else {
urlParser . search = $ . param ( queryParams ) ;
}
}
2016-10-24 16:07:31 -04:00
parsedCandidateUrls . push ( urlParser ) ;
// Prepend list with URL that matches the scheme/protocol of the iframe.
if ( previewer . scheme . get ( ) + ':' !== urlParser . protocol ) {
urlParser = document . createElement ( 'a' ) ;
urlParser . href = parsedCandidateUrls [ 0 ] . href ;
urlParser . protocol = previewer . scheme . get ( ) + ':' ;
parsedCandidateUrls . unshift ( urlParser ) ;
}
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
2016-11-23 01:05:32 -05:00
// Attempt to match the URL to the control frame's scheme and check if it's allowed. If not, try the original URL.
2016-10-24 16:07:31 -04:00
parsedAllowedUrl = document . createElement ( 'a' ) ;
_ . find ( parsedCandidateUrls , function ( parsedCandidateUrl ) {
return ! _ . isUndefined ( _ . find ( previewer . allowedUrls , function ( allowedUrl ) {
parsedAllowedUrl . href = allowedUrl ;
2016-10-25 16:53:29 -04:00
if ( urlParser . protocol === parsedAllowedUrl . protocol && urlParser . host === parsedAllowedUrl . host && 0 === urlParser . pathname . indexOf ( parsedAllowedUrl . pathname . replace ( /\/$/ , '' ) ) ) {
2016-10-24 16:07:31 -04:00
result = parsedCandidateUrl . href ;
return true ;
2012-08-22 20:04:18 -04:00
}
2016-10-24 16:07:31 -04:00
} ) ) ;
} ) ;
2012-08-22 20:04:18 -04:00
2016-10-24 16:07:31 -04:00
return result ;
2012-08-22 20:04:18 -04: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
previewer . bind ( 'ready' , previewer . ready ) ;
// Start listening for keep-alive messages when iframe first loads.
previewer . deferred . active . done ( _ . bind ( previewer . keepPreviewAlive , previewer ) ) ;
previewer . bind ( 'synced' , function ( ) {
previewer . send ( 'active' ) ;
} ) ;
2012-08-22 20:04:18 -04:00
// Refresh the preview when the URL is changed (but not yet).
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
previewer . previewUrl . bind ( previewer . refresh ) ;
2012-08-22 20:04:18 -04: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
previewer . scroll = 0 ;
previewer . bind ( 'scroll' , function ( distance ) {
previewer . scroll = distance ;
2012-08-22 20:04:18 -04: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
// Update the URL when the iframe sends a URL message, resetting scroll position. If URL is unchanged, then refresh.
previewer . bind ( 'url' , function ( url ) {
var onUrlChange , urlChanged = false ;
previewer . scroll = 0 ;
onUrlChange = function ( ) {
urlChanged = true ;
} ;
previewer . previewUrl . bind ( onUrlChange ) ;
previewer . previewUrl . set ( url ) ;
previewer . previewUrl . unbind ( onUrlChange ) ;
if ( ! urlChanged ) {
previewer . refresh ( ) ;
}
} ) ;
2014-11-11 17:29:23 -05:00
2014-12-03 21:04:22 -05:00
// Update the document title when the preview changes.
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
previewer . bind ( 'documentTitle' , function ( title ) {
2014-11-11 17:29:23 -05:00
api . setDocumentTitle ( title ) ;
} ) ;
2012-08-22 20:04:18 -04: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
/ * *
* Handle the preview receiving the ready message .
*
* @ since 4.7 . 0
2016-11-23 01:05:32 -05:00
* @ access public
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
*
* @ param { object } data - Data from preview .
* @ param { string } data . currentUrl - Current URL .
* @ param { object } data . activePanels - Active panels .
* @ param { object } data . activeSections Active sections .
* @ param { object } data . activeControls Active controls .
* @ returns { void }
* /
ready : function ( data ) {
var previewer = this , synced = { } , constructs ;
synced . settings = api . get ( ) ;
2016-11-03 01:07:32 -04:00
synced [ 'settings-modified-while-loading' ] = previewer . settingsModifiedWhileLoading ;
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
if ( 'resolved' !== previewer . deferred . active . state ( ) || previewer . loading ) {
synced . scroll = previewer . scroll ;
}
2016-10-26 16:03:32 -04:00
synced [ 'edit-shortcut-visibility' ] = api . state ( 'editShortcutVisibility' ) . get ( ) ;
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
previewer . send ( 'sync' , synced ) ;
// Set the previewUrl without causing the url to set the iframe.
if ( data . currentUrl ) {
previewer . previewUrl . unbind ( previewer . refresh ) ;
previewer . previewUrl . set ( data . currentUrl ) ;
previewer . previewUrl . bind ( previewer . refresh ) ;
}
/ *
* Walk over all panels , sections , and controls and set their
* respective active states to true if the preview explicitly
* indicates as such .
* /
constructs = {
panel : data . activePanels ,
section : data . activeSections ,
control : data . activeControls
} ;
_ ( constructs ) . each ( function ( activeConstructs , type ) {
api [ type ] . each ( function ( construct , id ) {
var isDynamicallyCreated = _ . isUndefined ( api . settings [ type + 's' ] [ id ] ) ;
/ *
* If the construct was created statically in PHP ( not dynamically in JS )
* then consider a missing ( undefined ) value in the activeConstructs to
* mean it should be deactivated ( since it is gone ) . But if it is
* dynamically created then only toggle activation if the value is defined ,
* as this means that the construct was also then correspondingly
* created statically in PHP and the active callback is available .
* Otherwise , dynamically - created constructs should normally have
* their active states toggled in JS rather than from PHP .
* /
if ( ! isDynamicallyCreated || ! _ . isUndefined ( activeConstructs [ id ] ) ) {
if ( activeConstructs [ id ] ) {
construct . activate ( ) ;
} else {
construct . deactivate ( ) ;
}
}
} ) ;
} ) ;
if ( data . settingValidities ) {
api . _handleSettingValidities ( {
settingValidities : data . settingValidities ,
focusInvalidControl : false
} ) ;
}
} ,
/ * *
* Keep the preview alive by listening for ready and keep - alive messages .
*
* If a message is not received in the allotted time then the iframe will be set back to the last known valid URL .
*
* @ since 4.7 . 0
2016-11-23 01:05:32 -05:00
* @ access public
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
*
* @ returns { void }
* /
keepPreviewAlive : function keepPreviewAlive ( ) {
var previewer = this , keepAliveTick , timeoutId , handleMissingKeepAlive , scheduleKeepAliveCheck ;
/ * *
* Schedule a preview keep - alive check .
*
* Note that if a page load takes longer than keepAliveCheck milliseconds ,
* the keep - alive messages will still be getting sent from the previous
* URL .
* /
scheduleKeepAliveCheck = function ( ) {
timeoutId = setTimeout ( handleMissingKeepAlive , api . settings . timeouts . keepAliveCheck ) ;
} ;
/ * *
* Set the previewerAlive state to true when receiving a message from the preview .
* /
keepAliveTick = function ( ) {
api . state ( 'previewerAlive' ) . set ( true ) ;
clearTimeout ( timeoutId ) ;
scheduleKeepAliveCheck ( ) ;
} ;
/ * *
* Set the previewerAlive state to false if keepAliveCheck milliseconds have transpired without a message .
*
* This is most likely to happen in the case of a connectivity error , or if the theme causes the browser
* to navigate to a non - allowed URL . Setting this state to false will force settings with a postMessage
* transport to use refresh instead , causing the preview frame also to be replaced with the current
* allowed preview URL .
* /
handleMissingKeepAlive = function ( ) {
api . state ( 'previewerAlive' ) . set ( false ) ;
} ;
scheduleKeepAliveCheck ( ) ;
previewer . bind ( 'ready' , keepAliveTick ) ;
previewer . bind ( 'keep-alive' , keepAliveTick ) ;
} ,
2015-09-05 15:53:24 -04:00
/ * *
* Query string data sent with each preview request .
*
* @ abstract
* /
2012-08-22 20:04:18 -04:00
query : function ( ) { } ,
abort : function ( ) {
if ( this . loading ) {
this . loading . destroy ( ) ;
delete this . loading ;
}
} ,
2015-09-05 15:53:24 -04: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
* Refresh the preview seamlessly .
2016-11-23 01:05:32 -05:00
*
* @ since 3.4 . 0
* @ access public
* @ returns { void }
2015-09-05 15:53:24 -04:00
* /
2012-08-22 20:04:18 -04:00
refresh : function ( ) {
2016-11-03 01:07:32 -04:00
var previewer = this , onSettingChange ;
2012-08-22 20:04:18 -04:00
2015-03-10 11:56:26 -04:00
// Display loading indicator
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
previewer . send ( 'loading-initiated' ) ;
2015-03-10 11:56:26 -04: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
previewer . abort ( ) ;
2012-08-22 20:04:18 -04: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
previewer . loading = new api . PreviewFrame ( {
url : previewer . url ( ) ,
previewUrl : previewer . previewUrl ( ) ,
query : previewer . query ( { excludeCustomizedSaved : true } ) || { } ,
container : previewer . container
2012-08-22 20:04:18 -04:00
} ) ;
2016-11-03 01:07:32 -04:00
previewer . settingsModifiedWhileLoading = { } ;
onSettingChange = function ( setting ) {
previewer . settingsModifiedWhileLoading [ setting . id ] = true ;
} ;
api . bind ( 'change' , onSettingChange ) ;
previewer . loading . always ( function ( ) {
api . unbind ( 'change' , onSettingChange ) ;
} ) ;
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
previewer . loading . done ( function ( readyData ) {
2016-11-10 17:43:32 -05:00
var loadingFrame = this , onceSynced ;
2012-08-22 20:04:18 -04: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
previewer . preview = loadingFrame ;
previewer . targetWindow ( loadingFrame . targetWindow ( ) ) ;
previewer . channel ( loadingFrame . channel ( ) ) ;
2012-08-22 20:04:18 -04: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
onceSynced = function ( ) {
loadingFrame . unbind ( 'synced' , onceSynced ) ;
2016-11-10 17:43:32 -05:00
if ( previewer . _previousPreview ) {
previewer . _previousPreview . destroy ( ) ;
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
}
2016-11-10 17:43:32 -05:00
previewer . _previousPreview = previewer . preview ;
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
previewer . deferred . active . resolve ( ) ;
delete previewer . loading ;
} ;
loadingFrame . bind ( 'synced' , onceSynced ) ;
2012-08-22 20:04:18 -04: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
// This event will be received directly by the previewer in normal navigation; this is only needed for seamless refresh.
previewer . trigger ( 'ready' , readyData ) ;
2012-08-22 20:04:18 -04: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
previewer . loading . fail ( function ( reason ) {
previewer . send ( 'loading-failed' ) ;
2012-08-22 20:04:18 -04:00
if ( 'logged out' === reason ) {
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
if ( previewer . preview ) {
previewer . preview . destroy ( ) ;
delete previewer . preview ;
2012-08-22 20:04:18 -04: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
previewer . login ( ) . done ( previewer . refresh ) ;
2012-08-22 20:04:18 -04:00
}
2015-03-10 11:56:26 -04:00
if ( 'cheatin' === reason ) {
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
previewer . cheatin ( ) ;
2015-03-10 11:56:26 -04:00
}
2012-08-22 20:04:18 -04:00
} ) ;
} ,
login : function ( ) {
var previewer = this ,
deferred , messenger , iframe ;
2017-10-04 02:48:46 -04:00
if ( this . _login ) {
2012-08-22 20:04:18 -04:00
return this . _login ;
2017-10-04 02:48:46 -04:00
}
2012-08-22 20:04:18 -04:00
deferred = $ . Deferred ( ) ;
this . _login = deferred . promise ( ) ;
messenger = new api . Messenger ( {
channel : 'login' ,
url : api . settings . url . login
} ) ;
2015-03-10 17:20:26 -04:00
iframe = $ ( '<iframe />' , { 'src' : api . settings . url . login , 'title' : api . l10n . loginIframeTitle } ) . appendTo ( this . container ) ;
2012-08-22 20:04:18 -04:00
messenger . targetWindow ( iframe [ 0 ] . contentWindow ) ;
2015-04-06 11:10:27 -04:00
messenger . bind ( 'login' , function ( ) {
var refreshNonces = previewer . refreshNonces ( ) ;
refreshNonces . always ( function ( ) {
iframe . remove ( ) ;
messenger . destroy ( ) ;
delete previewer . _login ;
} ) ;
refreshNonces . done ( function ( ) {
deferred . resolve ( ) ;
} ) ;
refreshNonces . fail ( function ( ) {
previewer . cheatin ( ) ;
deferred . reject ( ) ;
} ) ;
2012-08-22 20:04:18 -04:00
} ) ;
return this . _login ;
} ,
cheatin : function ( ) {
2015-09-03 23:40:25 -04:00
$ ( document . body ) . empty ( ) . addClass ( 'cheatin' ) . append (
'<h1>' + api . l10n . cheatin + '</h1>' +
'<p>' + api . l10n . notAllowed + '</p>'
) ;
2015-04-06 11:10:27 -04:00
} ,
refreshNonces : function ( ) {
var request , deferred = $ . Deferred ( ) ;
deferred . promise ( ) ;
request = wp . ajax . post ( 'customize_refresh_nonces' , {
wp _customize : 'on' ,
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
customize _theme : api . settings . theme . stylesheet
2015-04-06 11:10:27 -04:00
} ) ;
request . done ( function ( response ) {
api . trigger ( 'nonce-refresh' , response ) ;
deferred . resolve ( ) ;
} ) ;
request . fail ( function ( ) {
deferred . reject ( ) ;
} ) ;
return deferred ;
2012-08-22 20:04:18 -04:00
}
} ) ;
Customize: Add setting validation model and control notifications to augment setting sanitization.
When a setting is invalid, not only will it be blocked from being saved but all other settings will be blocked as well. This ensures that Customizer saves aren't partial but are more transactional. User will be displayed the error in a notification so that they can fix and re-attempt saving.
PHP changes:
* Introduces `WP_Customize_Setting::validate()`, `WP_Customize_Setting::$validate_callback`, and the `customize_validate_{$setting_id}` filter.
* Introduces `WP_Customize_Manager::validate_setting_values()` to do validation (and sanitization) for the setting values supplied, returning a list of `WP_Error` instances for invalid settings.
* Attempting to save settings that are invalid will result in the save being blocked entirely, with the errors being sent in the `customize_save_response`. Modifies `WP_Customize_Manager::save()` to check all settings for validity issues prior to calling their `save` methods.
* Introduces `WP_Customize_Setting::json()` for parity with the other Customizer classes. This includes exporting of the `type`.
* Modifies `WP_Customize_Manager::post_value()` to apply `validate` after `sanitize`, and if validation fails, to return the `$default`.
* Introduces `customize_save_validation_before` action which fires right before the validation checks are made prior to saving.
JS changes:
* Introduces `wp.customize.Notification` in JS which to represent `WP_Error` instances returned from the server when setting validation fails.
* Introduces `wp.customize.Setting.prototype.notifications`.
* Introduces `wp.customize.Control.prototype.notifications`, which are synced with a control's settings' notifications.
* Introduces `wp.customize.Control.prototype.renderNotifications()` to re-render a control's notifications in its notification area. This is called automatically when the notifications collection changes.
* Introduces `wp.customize.settingConstructor`, allowing custom setting types to be used in the same way that custom controls, panels, and sections can be made.
* Injects a notification area into existing controls which is populated in response to the control's `notifications` collection changing. A custom control can customize the placement of the notification area by overriding the new `getNotificationsContainerElement` method.
* When a save fails due to setting invalidity, the invalidity errors will be added to the settings to then populate in the controls' notification areas, and the first such invalid control will be focused.
Props westonruter, celloexpressions, mrahmadawais.
See #35210.
See #30937.
Fixes #34893.
Built from https://develop.svn.wordpress.org/trunk@37476
git-svn-id: http://core.svn.wordpress.org/trunk@37444 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-05-20 17:10:27 -04:00
api . settingConstructor = { } ;
2012-08-22 20:04:18 -04:00
api . controlConstructor = {
Customize: Improve custom background properties UI.
Introduces new control for managing the background position. Adds control for setting the `background-size`.
Props cdog, celloexpressions, grapplerulrich, MikeHansenMe, FolioVision, afercia, helen, melchoyce, karmatosed, westonruter, Kelderic, sebastian.pisula.
Fixes #22058.
Built from https://develop.svn.wordpress.org/trunk@38948
git-svn-id: http://core.svn.wordpress.org/trunk@38891 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-10-26 02:52:29 -04:00
color : api . ColorControl ,
media : api . MediaControl ,
upload : api . UploadControl ,
image : api . ImageControl ,
cropped _image : api . CroppedImageControl ,
site _icon : api . SiteIconControl ,
header : api . HeaderControl ,
background : api . BackgroundControl ,
background _position : api . BackgroundPositionControl ,
2017-09-21 19:04:45 -04:00
theme : api . ThemeControl ,
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
date _time : api . DateTimeControl ,
2017-09-21 19:04:45 -04:00
code _editor : api . CodeEditorControl
2012-08-22 20:04:18 -04:00
} ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
api . panelConstructor = {
themes : api . ThemesPanel
} ;
2015-02-24 15:31:24 -05:00
api . sectionConstructor = {
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
themes : api . ThemesSection ,
outer : api . OuterSection
2015-02-24 15:31:24 -05:00
} ;
2012-08-22 20:04:18 -04:00
2016-06-26 10:26:29 -04:00
/ * *
* Handle setting _validities in an error response for the customize - save request .
*
* Add notifications to the settings and focus on the first control that has an invalid setting .
*
* @ since 4.6 . 0
* @ private
*
* @ param { object } args
* @ param { object } args . settingValidities
* @ param { boolean } [ args . focusInvalidControl = false ]
* @ returns { void }
* /
api . _handleSettingValidities = function handleSettingValidities ( args ) {
var invalidSettingControls , invalidSettings = [ ] , wasFocused = false ;
// Find the controls that correspond to each invalid setting.
_ . each ( args . settingValidities , function ( validity , settingId ) {
var setting = api ( settingId ) ;
if ( setting ) {
// Add notifications for invalidities.
if ( _ . isObject ( validity ) ) {
_ . each ( validity , function ( params , code ) {
2016-09-02 18:35:44 -04:00
var notification , existingNotification , needsReplacement = false ;
notification = new api . Notification ( code , _ . extend ( { fromServer : true } , params ) ) ;
2016-06-26 10:26:29 -04:00
// Remove existing notification if already exists for code but differs in parameters.
existingNotification = setting . notifications ( notification . code ) ;
if ( existingNotification ) {
2016-09-02 18:35:44 -04:00
needsReplacement = notification . type !== existingNotification . type || notification . message !== existingNotification . message || ! _ . isEqual ( notification . data , existingNotification . data ) ;
2016-06-26 10:26:29 -04:00
}
if ( needsReplacement ) {
setting . notifications . remove ( code ) ;
}
if ( ! setting . notifications . has ( notification . code ) ) {
2017-10-04 02:48:46 -04:00
setting . notifications . add ( notification ) ;
2016-06-26 10:26:29 -04:00
}
invalidSettings . push ( setting . id ) ;
} ) ;
}
// Remove notification errors that are no longer valid.
setting . notifications . each ( function ( notification ) {
2017-03-23 14:12:44 -04:00
if ( notification . fromServer && 'error' === notification . type && ( true === validity || ! validity [ notification . code ] ) ) {
2016-06-26 10:26:29 -04:00
setting . notifications . remove ( notification . code ) ;
}
} ) ;
}
} ) ;
if ( args . focusInvalidControl ) {
invalidSettingControls = api . findControlsForSettings ( invalidSettings ) ;
// Focus on the first control that is inside of an expanded section (one that is visible).
_ ( _ . values ( invalidSettingControls ) ) . find ( function ( controls ) {
return _ ( controls ) . find ( function ( control ) {
var isExpanded = control . section ( ) && api . section . has ( control . section ( ) ) && api . section ( control . section ( ) ) . expanded ( ) ;
if ( isExpanded && control . expanded ) {
isExpanded = control . expanded ( ) ;
}
if ( isExpanded ) {
control . focus ( ) ;
wasFocused = true ;
}
return wasFocused ;
} ) ;
} ) ;
// Focus on the first invalid control.
if ( ! wasFocused && ! _ . isEmpty ( invalidSettingControls ) ) {
_ . values ( invalidSettingControls ) [ 0 ] [ 0 ] . focus ( ) ;
}
}
} ;
/ * *
* Find all controls associated with the given settings .
*
* @ since 4.6 . 0
* @ param { string [ ] } settingIds Setting IDs .
* @ returns { object < string , wp . customize . Control > } Mapping setting ids to arrays of controls .
* /
api . findControlsForSettings = function findControlsForSettings ( settingIds ) {
var controls = { } , settingControls ;
_ . each ( _ . unique ( settingIds ) , function ( settingId ) {
var setting = api ( settingId ) ;
if ( setting ) {
settingControls = setting . findControls ( ) ;
if ( settingControls && settingControls . length > 0 ) {
controls [ settingId ] = settingControls ;
}
}
} ) ;
return controls ;
} ;
/ * *
* Sort panels , sections , controls by priorities . Hide empty sections and panels .
*
* @ since 4.1 . 0
* /
api . reflowPaneContents = _ . bind ( function ( ) {
2016-09-23 18:23:30 -04:00
var appendContainer , activeElement , rootHeadContainers , rootNodes = [ ] , wasReflowed = false ;
2016-06-26 10:26:29 -04:00
if ( document . activeElement ) {
activeElement = $ ( document . activeElement ) ;
}
// Sort the sections within each panel
api . panel . each ( function ( panel ) {
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
if ( 'themes' === panel . id ) {
return ; // Don't reflow theme sections, as doing so moves them after the themes container.
}
2016-06-26 10:26:29 -04:00
var sections = panel . sections ( ) ,
2016-09-23 18:23:30 -04:00
sectionHeadContainers = _ . pluck ( sections , 'headContainer' ) ;
2016-06-26 10:26:29 -04:00
rootNodes . push ( panel ) ;
2016-09-23 18:23:30 -04:00
appendContainer = ( panel . contentContainer . is ( 'ul' ) ) ? panel . contentContainer : panel . contentContainer . find ( 'ul:first' ) ;
if ( ! api . utils . areElementListsEqual ( sectionHeadContainers , appendContainer . children ( '[id]' ) ) ) {
2016-06-26 10:26:29 -04:00
_ ( sections ) . each ( function ( section ) {
2016-09-23 18:23:30 -04:00
appendContainer . append ( section . headContainer ) ;
2016-06-26 10:26:29 -04:00
} ) ;
wasReflowed = true ;
}
} ) ;
// Sort the controls within each section
api . section . each ( function ( section ) {
var controls = section . controls ( ) ,
controlContainers = _ . pluck ( controls , 'container' ) ;
if ( ! section . panel ( ) ) {
rootNodes . push ( section ) ;
}
2016-09-23 18:23:30 -04:00
appendContainer = ( section . contentContainer . is ( 'ul' ) ) ? section . contentContainer : section . contentContainer . find ( 'ul:first' ) ;
2016-06-26 10:26:29 -04:00
if ( ! api . utils . areElementListsEqual ( controlContainers , appendContainer . children ( '[id]' ) ) ) {
_ ( controls ) . each ( function ( control ) {
appendContainer . append ( control . container ) ;
} ) ;
wasReflowed = true ;
}
} ) ;
// Sort the root panels and sections
rootNodes . sort ( api . utils . prioritySort ) ;
2016-09-23 18:23:30 -04:00
rootHeadContainers = _ . pluck ( rootNodes , 'headContainer' ) ;
appendContainer = $ ( '#customize-theme-controls .customize-pane-parent' ) ; // @todo This should be defined elsewhere, and to be configurable
if ( ! api . utils . areElementListsEqual ( rootHeadContainers , appendContainer . children ( ) ) ) {
2016-06-26 10:26:29 -04:00
_ ( rootNodes ) . each ( function ( rootNode ) {
2016-09-23 18:23:30 -04:00
appendContainer . append ( rootNode . headContainer ) ;
2016-06-26 10:26:29 -04:00
} ) ;
wasReflowed = true ;
}
// Now re-trigger the active Value callbacks to that the panels and sections can decide whether they can be rendered
api . panel . each ( function ( panel ) {
var value = panel . active ( ) ;
panel . active . callbacks . fireWith ( panel . active , [ value , value ] ) ;
} ) ;
api . section . each ( function ( section ) {
var value = section . active ( ) ;
section . active . callbacks . fireWith ( section . active , [ value , value ] ) ;
} ) ;
// Restore focus if there was a reflow and there was an active (focused) element
if ( wasReflowed && activeElement ) {
activeElement . focus ( ) ;
}
api . trigger ( 'pane-contents-reflowed' ) ;
} , api ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
// Define state values.
api . state = new api . Values ( ) ;
_ . each ( [
'saved' ,
'saving' ,
2017-10-01 23:37:46 -04:00
'trashing' ,
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
'activated' ,
'processing' ,
'paneVisible' ,
'expandedPanel' ,
'expandedSection' ,
'changesetDate' ,
'selectedChangesetDate' ,
'changesetStatus' ,
'selectedChangesetStatus' ,
'remainingTimeToPublish' ,
'previewerAlive' ,
2017-10-12 00:01:46 -04:00
'editShortcutVisibility' ,
2017-10-13 17:21:55 -04:00
'changesetLocked' ,
'previewedDevice'
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
] , function ( name ) {
api . state . create ( name ) ;
} ) ;
2012-08-22 20:04:18 -04:00
$ ( function ( ) {
api . settings = window . _wpCustomizeSettings ;
api . l10n = window . _wpCustomizeControlsL10n ;
2014-10-15 13:21:19 -04:00
// Check if we can run the Customizer.
2014-12-02 17:56:45 -05:00
if ( ! api . settings ) {
2012-08-22 20:04:18 -04:00
return ;
2014-12-02 17:56:45 -05:00
}
2012-08-22 20:04:18 -04:00
2015-07-29 14:36:26 -04:00
// Bail if any incompatibilities are found.
if ( ! $ . support . postMessage || ( ! $ . support . cors && api . settings . isCrossDomain ) ) {
return ;
}
2012-08-22 20:04:18 -04: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
if ( null === api . PreviewFrame . prototype . sensitivity ) {
api . PreviewFrame . prototype . sensitivity = api . settings . timeouts . previewFrameSensitivity ;
}
if ( null === api . Previewer . prototype . refreshBuffer ) {
api . Previewer . prototype . refreshBuffer = api . settings . timeouts . windowRefresh ;
}
2016-09-04 17:51:31 -04:00
var parent ,
2013-11-15 01:08:10 -05:00
body = $ ( document . body ) ,
2014-07-08 13:04:15 -04:00
overlay = body . children ( '.wp-full-overlay' ) ,
2015-05-29 09:57:26 -04:00
title = $ ( '#customize-info .panel-title.site-title' ) ,
2014-07-08 14:19:14 -04:00
closeBtn = $ ( '.customize-controls-close' ) ,
2016-02-15 20:57:26 -05:00
saveBtn = $ ( '#save' ) ,
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
btnWrapper = $ ( '#customize-save-button-wrapper' ) ,
publishSettingsBtn = $ ( '#publish-settings' ) ,
2016-02-15 20:57:26 -05:00
footerActions = $ ( '#customize-footer-actions' ) ;
2012-08-22 20:04:18 -04:00
2017-10-25 17:45:49 -04:00
// Add publish settings section in JS instead of PHP since the Customizer depends on it to function.
api . bind ( 'ready' , function ( ) {
api . section . add ( new api . OuterSection ( 'publish_settings' , {
title : api . l10n . publishSettings ,
priority : 0 ,
active : api . settings . theme . active
} ) ) ;
} ) ;
Customize: Allow controls to be created with pre-instantiated `Setting` object(s), or even with plain `Value` object(s).
* Allow passing settings in keyed object (e.g. `settings: { default: 'id' } ), or as an array (e.g. `settings: [ 'id' ]`) with first being default; again, `Setting`/`Value` objects may be supplied instead of IDs.
* Allow a single setting to be supplied with just a single `setting` param, either a string or a `Setting`/`Value` object.
* Update `changeset_status` and `scheduled_changeset_date` to be added dynamically with JS and simply passing of `api.state()` instances as `setting`.
* Introduce a `data-customize-setting-key-link` attribute which, unlike `data-customize-setting-link`, allows passing the setting key (e.g. `default`) as opposed to the setting ID.
* Allow `WP_Customize_Control::get_link()` to return `data-customize-setting-key-link` when setting is not registered.
* Eliminate `default_value` from `WP_Customize_Date_Time_Control` since now comes from supplied `Value`.
* Export status choices as `wp.customize.settings.changeset.statusChoices`.
* Export date and time formats as `wp.customize.settings.dateFormat` and `wp.customize.settings.timeFormat` respectively.
Props westonruter, sayedwp.
See #39896, #30738, #30741, #42083.
Fixes #37964, #36167.
Built from https://develop.svn.wordpress.org/trunk@41750
git-svn-id: http://core.svn.wordpress.org/trunk@41584 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-10-04 16:02:49 -04:00
// Set up publish settings section and its controls.
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
api . section ( 'publish_settings' , function ( section ) {
2017-10-18 19:06:49 -04:00
var updateButtonsState , trashControl , updateSectionActive , isSectionActive , statusControl , dateControl , toggleDateControl , publishWhenTime , pollInterval , updateTimeArrivedPoller , cancelScheduleButtonReminder , timeArrivedPollingInterval = 1000 ;
2017-10-02 20:22:49 -04:00
2017-10-04 02:48:46 -04:00
trashControl = new api . Control ( 'trash_changeset' , {
type : 'button' ,
section : section . id ,
priority : 30 ,
2017-10-18 23:25:47 -04:00
input _attrs : {
2017-10-04 22:56:47 -04:00
'class' : 'button-link button-link-delete' ,
value : api . l10n . discardChanges
}
2017-10-02 20:22:49 -04:00
} ) ;
2017-10-04 02:48:46 -04:00
api . control . add ( trashControl ) ;
trashControl . deferred . embedded . done ( function ( ) {
2017-10-04 22:56:47 -04:00
trashControl . container . find ( '.button-link' ) . on ( 'click' , function ( ) {
2017-10-02 20:22:49 -04:00
if ( confirm ( api . l10n . trashConfirm ) ) {
wp . customize . previewer . trash ( ) ;
}
} ) ;
} ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
2017-10-04 02:48:46 -04:00
api . control . add ( new api . PreviewLinkControl ( 'changeset_preview_link' , {
section : section . id ,
priority : 100
} ) ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
2017-09-29 17:52:45 -04:00
/ * *
* Return whether the pubish settings section should be active .
*
* @ return { boolean } Is section active .
* /
isSectionActive = function ( ) {
2017-10-01 23:37:46 -04:00
if ( ! api . state ( 'activated' ) . get ( ) ) {
return false ;
}
if ( api . state ( 'trashing' ) . get ( ) || 'trash' === api . state ( 'changesetStatus' ) . get ( ) ) {
2017-09-29 17:52:45 -04:00
return false ;
}
if ( '' === api . state ( 'changesetStatus' ) . get ( ) && api . state ( 'saved' ) . get ( ) ) {
return false ;
}
return true ;
} ;
// Make sure publish settings are not available while the theme is not active and the customizer is in a published state.
section . active . validate = isSectionActive ;
updateSectionActive = function ( ) {
section . active . set ( isSectionActive ( ) ) ;
} ;
api . state ( 'activated' ) . bind ( updateSectionActive ) ;
2017-10-01 23:37:46 -04:00
api . state ( 'trashing' ) . bind ( updateSectionActive ) ;
2017-09-29 17:52:45 -04:00
api . state ( 'saved' ) . bind ( updateSectionActive ) ;
api . state ( 'changesetStatus' ) . bind ( updateSectionActive ) ;
updateSectionActive ( ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
// Bind visibility of the publish settings button to whether the section is active.
updateButtonsState = function ( ) {
publishSettingsBtn . toggle ( section . active . get ( ) ) ;
saveBtn . toggleClass ( 'has-next-sibling' , section . active . get ( ) ) ;
} ;
updateButtonsState ( ) ;
section . active . bind ( updateButtonsState ) ;
2017-10-18 19:06:49 -04:00
function highlightScheduleButton ( ) {
if ( ! cancelScheduleButtonReminder ) {
cancelScheduleButtonReminder = api . utils . highlightButton ( btnWrapper , {
delay : 1000 ,
// Only abort the reminder when the save button is focused.
// If the user clicks the settings button to toggle the
// settings closed, we'll still remind them.
focusTarget : saveBtn
} ) ;
}
}
function cancelHighlightScheduleButton ( ) {
if ( cancelScheduleButtonReminder ) {
cancelScheduleButtonReminder ( ) ;
cancelScheduleButtonReminder = null ;
}
}
api . state ( 'selectedChangesetStatus' ) . bind ( cancelHighlightScheduleButton ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
section . contentContainer . find ( '.customize-action' ) . text ( api . l10n . updating ) ;
section . contentContainer . find ( '.customize-section-back' ) . removeAttr ( 'tabindex' ) ;
publishSettingsBtn . prop ( 'disabled' , false ) ;
publishSettingsBtn . on ( 'click' , function ( event ) {
event . preventDefault ( ) ;
section . expanded . set ( ! section . expanded . get ( ) ) ;
} ) ;
section . expanded . bind ( function ( isExpanded ) {
2017-10-19 13:42:54 -04:00
var defaultChangesetStatus ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
publishSettingsBtn . attr ( 'aria-expanded' , String ( isExpanded ) ) ;
publishSettingsBtn . toggleClass ( 'active' , isExpanded ) ;
2017-10-18 19:06:49 -04:00
if ( isExpanded ) {
cancelHighlightScheduleButton ( ) ;
2017-10-19 13:42:54 -04:00
return ;
}
defaultChangesetStatus = api . state ( 'changesetStatus' ) . get ( ) ;
if ( '' === defaultChangesetStatus || 'auto-draft' === defaultChangesetStatus ) {
defaultChangesetStatus = 'publish' ;
}
if ( api . state ( 'selectedChangesetStatus' ) . get ( ) !== defaultChangesetStatus ) {
2017-10-18 19:06:49 -04:00
highlightScheduleButton ( ) ;
} else if ( 'future' === api . state ( 'selectedChangesetStatus' ) . get ( ) && api . state ( 'selectedChangesetDate' ) . get ( ) !== api . state ( 'changesetDate' ) . get ( ) ) {
highlightScheduleButton ( ) ;
}
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
} ) ;
Customize: Allow controls to be created with pre-instantiated `Setting` object(s), or even with plain `Value` object(s).
* Allow passing settings in keyed object (e.g. `settings: { default: 'id' } ), or as an array (e.g. `settings: [ 'id' ]`) with first being default; again, `Setting`/`Value` objects may be supplied instead of IDs.
* Allow a single setting to be supplied with just a single `setting` param, either a string or a `Setting`/`Value` object.
* Update `changeset_status` and `scheduled_changeset_date` to be added dynamically with JS and simply passing of `api.state()` instances as `setting`.
* Introduce a `data-customize-setting-key-link` attribute which, unlike `data-customize-setting-link`, allows passing the setting key (e.g. `default`) as opposed to the setting ID.
* Allow `WP_Customize_Control::get_link()` to return `data-customize-setting-key-link` when setting is not registered.
* Eliminate `default_value` from `WP_Customize_Date_Time_Control` since now comes from supplied `Value`.
* Export status choices as `wp.customize.settings.changeset.statusChoices`.
* Export date and time formats as `wp.customize.settings.dateFormat` and `wp.customize.settings.timeFormat` respectively.
Props westonruter, sayedwp.
See #39896, #30738, #30741, #42083.
Fixes #37964, #36167.
Built from https://develop.svn.wordpress.org/trunk@41750
git-svn-id: http://core.svn.wordpress.org/trunk@41584 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-10-04 16:02:49 -04:00
statusControl = new api . Control ( 'changeset_status' , {
priority : 10 ,
type : 'radio' ,
section : 'publish_settings' ,
setting : api . state ( 'selectedChangesetStatus' ) ,
templateId : 'customize-selected-changeset-status-control' ,
label : api . l10n . action ,
choices : api . settings . changeset . statusChoices
} ) ;
api . control . add ( statusControl ) ;
dateControl = new api . DateTimeControl ( 'changeset_scheduled_date' , {
priority : 20 ,
section : 'publish_settings' ,
setting : api . state ( 'selectedChangesetDate' ) ,
minYear : ( new Date ( ) ) . getFullYear ( ) ,
allowPastDate : false ,
includeTime : true ,
twelveHourFormat : /a/i . test ( api . settings . timeFormat ) ,
description : api . l10n . scheduleDescription
} ) ;
dateControl . notifications . alt = true ;
api . control . add ( dateControl ) ;
publishWhenTime = function ( ) {
api . state ( 'selectedChangesetStatus' ) . set ( 'publish' ) ;
api . previewer . save ( ) ;
} ;
// Start countdown for when the dateTime arrives, or clear interval when it is .
updateTimeArrivedPoller = function ( ) {
var shouldPoll = (
'future' === api . state ( 'changesetStatus' ) . get ( ) &&
'future' === api . state ( 'selectedChangesetStatus' ) . get ( ) &&
api . state ( 'changesetDate' ) . get ( ) &&
api . state ( 'selectedChangesetDate' ) . get ( ) === api . state ( 'changesetDate' ) . get ( ) &&
api . utils . getRemainingTime ( api . state ( 'changesetDate' ) . get ( ) ) >= 0
) ;
if ( shouldPoll && ! pollInterval ) {
pollInterval = setInterval ( function ( ) {
var remainingTime = api . utils . getRemainingTime ( api . state ( 'changesetDate' ) . get ( ) ) ;
api . state ( 'remainingTimeToPublish' ) . set ( remainingTime ) ;
if ( remainingTime <= 0 ) {
clearInterval ( pollInterval ) ;
pollInterval = 0 ;
publishWhenTime ( ) ;
}
} , timeArrivedPollingInterval ) ;
} else if ( ! shouldPoll && pollInterval ) {
clearInterval ( pollInterval ) ;
pollInterval = 0 ;
}
} ;
api . state ( 'changesetDate' ) . bind ( updateTimeArrivedPoller ) ;
api . state ( 'selectedChangesetDate' ) . bind ( updateTimeArrivedPoller ) ;
api . state ( 'changesetStatus' ) . bind ( updateTimeArrivedPoller ) ;
api . state ( 'selectedChangesetStatus' ) . bind ( updateTimeArrivedPoller ) ;
updateTimeArrivedPoller ( ) ;
// Ensure dateControl only appears when selected status is future.
dateControl . active . validate = function ( ) {
return 'future' === api . state ( 'selectedChangesetStatus' ) . get ( ) ;
} ;
toggleDateControl = function ( value ) {
dateControl . active . set ( 'future' === value ) ;
} ;
toggleDateControl ( api . state ( 'selectedChangesetStatus' ) . get ( ) ) ;
api . state ( 'selectedChangesetStatus' ) . bind ( toggleDateControl ) ;
// Show notification on date control when status is future but it isn't a future date.
api . state ( 'saving' ) . bind ( function ( isSaving ) {
if ( isSaving && 'future' === api . state ( 'selectedChangesetStatus' ) . get ( ) ) {
dateControl . toggleFutureDateNotification ( ! dateControl . isFutureDate ( ) ) ;
}
} ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
} ) ;
2014-03-26 18:56:29 -04:00
// Prevent the form from saving when enter is pressed on an input or select element.
2012-08-22 20:04:18 -04:00
$ ( '#customize-controls' ) . on ( 'keydown' , function ( e ) {
2014-03-26 18:56:29 -04:00
var isEnter = ( 13 === e . which ) ,
$el = $ ( e . target ) ;
2012-08-22 20:04:18 -04:00
2014-03-26 18:56:29 -04:00
if ( isEnter && ( $el . is ( 'input:not([type=button])' ) || $el . is ( 'select' ) ) ) {
2012-08-22 20:04:18 -04:00
e . preventDefault ( ) ;
2014-03-26 18:56:29 -04:00
}
2012-08-22 20:04:18 -04:00
} ) ;
2014-12-03 21:04:22 -05:00
// Expand/Collapse the main customizer customize info.
2016-04-17 11:41:27 -04:00
$ ( '.customize-info' ) . find ( '> .accordion-section-title .customize-help-toggle' ) . on ( 'click' , function ( ) {
2015-05-29 09:57:26 -04:00
var section = $ ( this ) . closest ( '.accordion-section' ) ,
content = section . find ( '.customize-panel-description:first' ) ;
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
if ( section . hasClass ( 'cannot-expand' ) ) {
return ;
}
if ( section . hasClass ( 'open' ) ) {
section . toggleClass ( 'open' ) ;
2017-10-02 14:55:47 -04:00
content . slideUp ( api . Panel . prototype . defaultExpandedArguments . duration , function ( ) {
content . trigger ( 'toggled' ) ;
} ) ;
2015-05-29 09:57:26 -04:00
$ ( this ) . attr ( 'aria-expanded' , false ) ;
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
} else {
2017-10-02 14:55:47 -04:00
content . slideDown ( api . Panel . prototype . defaultExpandedArguments . duration , function ( ) {
content . trigger ( 'toggled' ) ;
} ) ;
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
section . toggleClass ( 'open' ) ;
2015-05-29 09:57:26 -04:00
$ ( this ) . attr ( 'aria-expanded' , true ) ;
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
}
} ) ;
2012-08-22 20:04:18 -04:00
// Initialize Previewer
2014-07-09 16:58:15 -04:00
api . previewer = new api . Previewer ( {
2012-08-22 20:04:18 -04:00
container : '#customize-preview' ,
form : '#customize-controls' ,
previewUrl : api . settings . url . preview ,
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
allowedUrls : api . settings . url . allowed
2012-08-22 20:04:18 -04:00
} , {
nonce : api . settings . nonce ,
2015-09-05 15:53:24 -04:00
/ * *
* Build the query to send along with the Preview request .
*
2016-11-23 01:05:32 -05:00
* @ since 3.4 . 0
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
* @ since 4.7 . 0 Added options param .
2016-11-23 01:05:32 -05:00
* @ access public
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
*
* @ param { object } [ options ] Options .
* @ param { boolean } [ options . excludeCustomizedSaved = false ] Exclude saved settings in customized response ( values pending writing to changeset ) .
* @ return { object } Query vars .
2015-09-05 15:53:24 -04: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
query : function ( options ) {
var queryVars = {
2012-08-22 20:04:18 -04:00
wp _customize : 'on' ,
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
customize _theme : api . settings . theme . stylesheet ,
nonce : this . nonce . preview ,
customize _changeset _uuid : api . settings . changeset . uuid
2012-08-22 20:04:18 -04:00
} ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
if ( api . settings . changeset . autosaved || ! api . state ( 'saved' ) . get ( ) ) {
Customize: Extend changesets to support autosave revisions with restoration notifications, and introduce a new default linear history mode for saved changesets (with a filter for opt-in to changeset branching).
* Autosaved changes made on top of `auto-draft` changesets get written on top of the `auto-draft` itself, similar to how autosaves for posts will overwrite post drafts.
* Autosaved changes made to saved changesets (e.g. `draft`, `future`) will be placed into an autosave revision for that changeset and that user.
* Opening the Customizer will now prompt the user to restore their most recent auto-draft changeset; if notification is dismissed or ignored then the auto-draft will be marked as dismissed and will not be prompted to user in a notification again.
* Customizer will no longer automatically supply the `changeset_uuid` param in the `customize.php` URL when branching changesets are not active.
* If user closes Customizer explicitly via clicking on X link, then autosave auto-draft/autosave will be dismissed so as to not be prompted again.
* If there is a changeset already saved as a `draft` or `future` (UI is forthcoming) then this changeset will now be autoloaded for the user to keep making additional changes. This is the linear model for changesets.
* To restore the previous behavior of the Customizer where each session started a new changeset, regardless of whether or not there was an existing changeset saved, there is now a `customize_changeset_branching` hook which can be filtered to return `true`.
* `wp.customize.requestChangesetUpdate()` now supports a second with options including `autosave`, `title`, and `date`.
* The window `blur` event for `customize.php` has been replaced with a `visibilitychange` event to reduce autosave requests when clicking into preview window.
* Adds `autosaved` and `branching` args to `WP_Customize_Manager`.
* The `changeset_uuid` param for `WP_Customize_Manager` is extended to recognize a `false` value which causes the Customizer to defer identifying the UUID until `after_setup_theme` in the new `WP_Customize_Manager::establish_loaded_changeset()` method.
* A new `customize_autosaved` query parameter can now be supplied which is passed into the `autosaved` arg in `WP_Customize_Manager`; this option is an opt-in to source data from the autosave revision, allowing a user to restore autosaved changes.
Props westonruter, dlh, sayedwp, JoshuaWold, melchoyce.
See #39896.
Built from https://develop.svn.wordpress.org/trunk@41597
git-svn-id: http://core.svn.wordpress.org/trunk@41430 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-26 03:38:45 -04:00
queryVars . customize _autosaved = 'on' ;
}
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
/ *
* Exclude customized data if requested especially for calls to requestChangesetUpdate .
* Changeset updates are differential and so it is a performance waste to send all of
* the dirty settings with each update .
* /
queryVars . customized = JSON . stringify ( api . dirtyValues ( {
unsaved : options && options . excludeCustomizedSaved
} ) ) ;
return queryVars ;
2012-08-22 20:04:18 -04: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
/ * *
* Save ( and publish ) the customizer changeset .
*
* Updates to the changeset are transactional . If any of the settings
* are invalid then none of them will be written into the changeset .
* A revision will be made for the changeset post if revisions support
* has been added to the post type .
*
2016-11-23 01:05:32 -05:00
* @ since 3.4 . 0
* @ since 4.7 . 0 Added args param and return value .
*
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
* @ param { object } [ args ] Args .
* @ param { string } [ args . status = publish ] Status .
* @ param { string } [ args . date ] Date , in local time in MySQL format .
* @ param { string } [ args . title ] Title
2016-11-23 01:05:32 -05:00
* @ returns { jQuery . promise } Promise .
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 : function ( args ) {
var previewer = this ,
deferred = $ . Deferred ( ) ,
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
changesetStatus = api . state ( 'selectedChangesetStatus' ) . get ( ) ,
selectedChangesetDate = api . state ( 'selectedChangesetDate' ) . get ( ) ,
2014-03-14 15:16:14 -04:00
processing = api . state ( 'processing' ) ,
submitWhenDoneProcessing ,
2016-05-02 15:13:26 -04:00
submit ,
2016-06-14 15:17:28 -04:00
modifiedWhileSaving = { } ,
invalidSettings = [ ] ,
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
invalidControls = [ ] ,
invalidSettingLessControls = [ ] ;
2014-03-14 15:16:14 -04: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
if ( args && args . status ) {
changesetStatus = args . status ;
}
if ( api . state ( 'saving' ) . get ( ) ) {
deferred . reject ( 'already_saving' ) ;
deferred . promise ( ) ;
}
api . state ( 'saving' ) . set ( true ) ;
2014-03-14 15:16:14 -04:00
2016-05-02 15:13:26 -04:00
function captureSettingModifiedDuringSave ( setting ) {
modifiedWhileSaving [ setting . id ] = true ;
}
2014-03-14 15:16:14 -04:00
submit = function ( ) {
2017-09-18 20:46:45 -04:00
var request , query , settingInvalidities = { } , latestRevision = api . _latestRevision , errorCode = 'client_side_error' ;
2016-06-14 15:17:28 -04:00
2017-05-11 02:42:43 -04:00
api . bind ( 'change' , captureSettingModifiedDuringSave ) ;
2017-09-18 20:46:45 -04:00
api . notifications . remove ( errorCode ) ;
2017-05-11 02:42:43 -04:00
2016-06-14 15:17:28 -04:00
/ *
* Block saving if there are any settings that are marked as
* invalid from the client ( not from the server ) . Focus on
* the control .
* /
api . each ( function ( setting ) {
setting . notifications . each ( function ( notification ) {
2016-09-02 18:35:44 -04:00
if ( 'error' === notification . type && ! notification . fromServer ) {
2016-06-14 15:17:28 -04:00
invalidSettings . push ( setting . id ) ;
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
if ( ! settingInvalidities [ setting . id ] ) {
settingInvalidities [ setting . id ] = { } ;
}
settingInvalidities [ setting . id ] [ notification . code ] = notification ;
2016-06-14 15:17:28 -04:00
}
} ) ;
} ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
2017-10-02 00:12:47 -04:00
// Find all invalid setting less controls with notification type error.
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
api . control . each ( function ( control ) {
if ( ! control . setting || ! control . setting . id && control . active . get ( ) ) {
control . notifications . each ( function ( notification ) {
if ( 'error' === notification . type ) {
invalidSettingLessControls . push ( [ control ] ) ;
}
} ) ;
}
} ) ;
invalidControls = _ . union ( invalidSettingLessControls , _ . values ( api . findControlsForSettings ( invalidSettings ) ) ) ;
2016-06-14 15:17:28 -04:00
if ( ! _ . isEmpty ( invalidControls ) ) {
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
invalidControls [ 0 ] [ 0 ] . focus ( ) ;
2016-06-14 15:17:28 -04:00
api . unbind ( 'change' , captureSettingModifiedDuringSave ) ;
2017-09-18 20:46:45 -04:00
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
if ( invalidSettings . length ) {
2017-10-04 02:48:46 -04:00
api . notifications . add ( new api . Notification ( errorCode , {
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
message : ( 1 === invalidSettings . length ? api . l10n . saveBlockedError . singular : api . l10n . saveBlockedError . plural ) . replace ( /%s/g , String ( invalidSettings . length ) ) ,
type : 'error' ,
dismissible : true ,
saveFailure : true
} ) ) ;
}
2017-09-18 20:46:45 -04: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
deferred . rejectWith ( previewer , [
{ setting _invalidities : settingInvalidities }
] ) ;
api . state ( 'saving' ) . set ( false ) ;
return deferred . promise ( ) ;
2016-06-14 15:17:28 -04: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
/ *
* Note that excludeCustomizedSaved is intentionally false so that the entire
* set of customized data will be included if bypassed changeset update .
* /
query = $ . extend ( previewer . query ( { excludeCustomizedSaved : false } ) , {
nonce : previewer . nonce . save ,
customize _changeset _status : changesetStatus
2015-03-10 18:45:27 -04:00
} ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04: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
if ( args && args . date ) {
query . customize _changeset _date = args . date ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
} else if ( 'future' === changesetStatus && selectedChangesetDate ) {
query . customize _changeset _date = selectedChangesetDate ;
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
}
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04: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
if ( args && args . title ) {
query . customize _changeset _title = args . title ;
}
2017-10-15 18:42:48 -04:00
// Allow plugins to modify the params included with the save request.
api . trigger ( 'save-request-params' , query ) ;
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
/ *
* Note that the dirty customized values will have already been set in the
* changeset and so technically query . customized could be deleted . However ,
* it is remaining here to make sure that any settings that got updated
* quietly which may have not triggered an update request will also get
* included in the values that get saved to the changeset . This will ensure
* that values that get injected via the saved event will be included in
* the changeset . This also ensures that setting values that were invalid
* will get re - validated , perhaps in the case of settings that are invalid
* due to dependencies on other settings .
* /
2015-03-10 18:45:27 -04:00
request = wp . ajax . post ( 'customize_save' , query ) ;
2017-10-01 23:37:46 -04:00
api . state ( 'processing' ) . set ( api . state ( 'processing' ) . get ( ) + 1 ) ;
2016-05-02 15:13:26 -04:00
2014-03-14 15:16:14 -04:00
api . trigger ( 'save' , request ) ;
request . always ( function ( ) {
2017-10-01 23:37:46 -04:00
api . state ( 'processing' ) . set ( api . state ( 'processing' ) . get ( ) - 1 ) ;
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
api . state ( 'saving' ) . set ( false ) ;
2016-05-02 15:13:26 -04:00
api . unbind ( 'change' , captureSettingModifiedDuringSave ) ;
2014-03-14 15:16:14 -04: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
// Remove notifications that were added due to save failures.
api . notifications . each ( function ( notification ) {
if ( notification . saveFailure ) {
api . notifications . remove ( notification . code ) ;
}
} ) ;
2015-01-06 16:47:23 -05:00
request . fail ( function ( response ) {
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
var notification , notificationArgs ;
notificationArgs = {
type : 'error' ,
dismissible : true ,
fromServer : true ,
saveFailure : true
} ;
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
2014-03-14 15:16:14 -04:00
if ( '0' === response ) {
2015-01-06 16:47:23 -05:00
response = 'not_logged_in' ;
} else if ( '-1' === response ) {
// Back-compat in case any other check_ajax_referer() call is dying
response = 'invalid_nonce' ;
}
if ( 'invalid_nonce' === response ) {
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
previewer . cheatin ( ) ;
2015-01-06 16:47:23 -05:00
} else if ( 'not_logged_in' === response ) {
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
previewer . preview . iframe . hide ( ) ;
previewer . login ( ) . done ( function ( ) {
previewer . save ( ) ;
previewer . preview . iframe . show ( ) ;
2014-03-14 15:16:14 -04: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
} else if ( response . code ) {
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
if ( 'not_future_date' === response . code && api . section . has ( 'publish_settings' ) && api . section ( 'publish_settings' ) . active . get ( ) && api . control . has ( 'changeset_scheduled_date' ) ) {
api . control ( 'changeset_scheduled_date' ) . toggleFutureDateNotification ( true ) . focus ( ) ;
2017-10-12 00:01:46 -04:00
} else if ( 'changeset_locked' !== response . code ) {
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
notification = new api . Notification ( response . code , _ . extend ( notificationArgs , {
message : response . message
} ) ) ;
}
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
} else {
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
notification = new api . Notification ( 'unknown_error' , _ . extend ( notificationArgs , {
2017-10-12 00:01:46 -04:00
message : api . l10n . unknownRequestFail
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
} ) ) ;
2014-03-14 15:16:14 -04:00
}
Customize: Add setting validation model and control notifications to augment setting sanitization.
When a setting is invalid, not only will it be blocked from being saved but all other settings will be blocked as well. This ensures that Customizer saves aren't partial but are more transactional. User will be displayed the error in a notification so that they can fix and re-attempt saving.
PHP changes:
* Introduces `WP_Customize_Setting::validate()`, `WP_Customize_Setting::$validate_callback`, and the `customize_validate_{$setting_id}` filter.
* Introduces `WP_Customize_Manager::validate_setting_values()` to do validation (and sanitization) for the setting values supplied, returning a list of `WP_Error` instances for invalid settings.
* Attempting to save settings that are invalid will result in the save being blocked entirely, with the errors being sent in the `customize_save_response`. Modifies `WP_Customize_Manager::save()` to check all settings for validity issues prior to calling their `save` methods.
* Introduces `WP_Customize_Setting::json()` for parity with the other Customizer classes. This includes exporting of the `type`.
* Modifies `WP_Customize_Manager::post_value()` to apply `validate` after `sanitize`, and if validation fails, to return the `$default`.
* Introduces `customize_save_validation_before` action which fires right before the validation checks are made prior to saving.
JS changes:
* Introduces `wp.customize.Notification` in JS which to represent `WP_Error` instances returned from the server when setting validation fails.
* Introduces `wp.customize.Setting.prototype.notifications`.
* Introduces `wp.customize.Control.prototype.notifications`, which are synced with a control's settings' notifications.
* Introduces `wp.customize.Control.prototype.renderNotifications()` to re-render a control's notifications in its notification area. This is called automatically when the notifications collection changes.
* Introduces `wp.customize.settingConstructor`, allowing custom setting types to be used in the same way that custom controls, panels, and sections can be made.
* Injects a notification area into existing controls which is populated in response to the control's `notifications` collection changing. A custom control can customize the placement of the notification area by overriding the new `getNotificationsContainerElement` method.
* When a save fails due to setting invalidity, the invalidity errors will be added to the settings to then populate in the controls' notification areas, and the first such invalid control will be focused.
Props westonruter, celloexpressions, mrahmadawais.
See #35210.
See #30937.
Fixes #34893.
Built from https://develop.svn.wordpress.org/trunk@37476
git-svn-id: http://core.svn.wordpress.org/trunk@37444 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-05-20 17:10:27 -04:00
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
if ( notification ) {
2017-10-04 02:48:46 -04:00
api . notifications . add ( notification ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
}
2016-06-14 15:17:28 -04:00
if ( response . setting _validities ) {
api . _handleSettingValidities ( {
settingValidities : response . setting _validities ,
focusInvalidControl : true
} ) ;
}
Customize: Add setting validation model and control notifications to augment setting sanitization.
When a setting is invalid, not only will it be blocked from being saved but all other settings will be blocked as well. This ensures that Customizer saves aren't partial but are more transactional. User will be displayed the error in a notification so that they can fix and re-attempt saving.
PHP changes:
* Introduces `WP_Customize_Setting::validate()`, `WP_Customize_Setting::$validate_callback`, and the `customize_validate_{$setting_id}` filter.
* Introduces `WP_Customize_Manager::validate_setting_values()` to do validation (and sanitization) for the setting values supplied, returning a list of `WP_Error` instances for invalid settings.
* Attempting to save settings that are invalid will result in the save being blocked entirely, with the errors being sent in the `customize_save_response`. Modifies `WP_Customize_Manager::save()` to check all settings for validity issues prior to calling their `save` methods.
* Introduces `WP_Customize_Setting::json()` for parity with the other Customizer classes. This includes exporting of the `type`.
* Modifies `WP_Customize_Manager::post_value()` to apply `validate` after `sanitize`, and if validation fails, to return the `$default`.
* Introduces `customize_save_validation_before` action which fires right before the validation checks are made prior to saving.
JS changes:
* Introduces `wp.customize.Notification` in JS which to represent `WP_Error` instances returned from the server when setting validation fails.
* Introduces `wp.customize.Setting.prototype.notifications`.
* Introduces `wp.customize.Control.prototype.notifications`, which are synced with a control's settings' notifications.
* Introduces `wp.customize.Control.prototype.renderNotifications()` to re-render a control's notifications in its notification area. This is called automatically when the notifications collection changes.
* Introduces `wp.customize.settingConstructor`, allowing custom setting types to be used in the same way that custom controls, panels, and sections can be made.
* Injects a notification area into existing controls which is populated in response to the control's `notifications` collection changing. A custom control can customize the placement of the notification area by overriding the new `getNotificationsContainerElement` method.
* When a save fails due to setting invalidity, the invalidity errors will be added to the settings to then populate in the controls' notification areas, and the first such invalid control will be focused.
Props westonruter, celloexpressions, mrahmadawais.
See #35210.
See #30937.
Fixes #34893.
Built from https://develop.svn.wordpress.org/trunk@37476
git-svn-id: http://core.svn.wordpress.org/trunk@37444 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-05-20 17:10:27 -04: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
deferred . rejectWith ( previewer , [ response ] ) ;
2015-01-06 16:47:23 -05:00
api . trigger ( 'error' , response ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
// Start a new changeset if the underlying changeset was published.
if ( 'changeset_already_published' === response . code && response . next _changeset _uuid ) {
api . settings . changeset . uuid = response . next _changeset _uuid ;
api . state ( 'changesetStatus' ) . set ( '' ) ;
2017-10-09 12:04:48 -04:00
if ( api . settings . changeset . branching ) {
parent . send ( 'changeset-uuid' , api . settings . changeset . uuid ) ;
}
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
api . previewer . send ( 'changeset-uuid' , api . settings . changeset . uuid ) ;
}
2015-01-06 16:47:23 -05:00
} ) ;
2012-08-22 20:04:18 -04:00
2015-01-06 16:47:23 -05:00
request . done ( function ( response ) {
2016-05-02 15:13:26 -04: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
previewer . send ( 'saved' , response ) ;
2015-01-06 16:47:23 -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
api . state ( 'changesetStatus' ) . set ( response . changeset _status ) ;
2017-10-01 23:37:46 -04:00
if ( response . changeset _date ) {
api . state ( 'changesetDate' ) . set ( response . changeset _date ) ;
}
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04: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
if ( 'publish' === response . changeset _status ) {
Customize: Introduce starter content and site freshness state.
A theme can opt-in for tailored starter content to apply to the customizer when previewing the theme on a fresh install, when `fresh_site` is at its initial `1` value. Starter content is staged in the customizer and does not go live unless the changes are published. Initial starter content is added to Twenty Seventeen.
* The `fresh_site` flag is cleared when a published post or page is saved, when widgets are modified, or when the customizer state is saved.
* Starter content is registered via `starter-content` theme support, where the argument is an array containing `widgets`, `posts`, `nav_menus`, `options`, and `theme_mods`. Posts/pages in starter content are created with the `auto-draft` status, re-using the page/post stubs feature added to nav menus and the static front page controls.
* A `get_theme_starter_content` filter allows for plugins to extend a theme's starter content.
* Starter content in themes can/should re-use existing starter content items in core by using named placeholders.
* Import theme starter content into customized state when fresh site.
* Prevent original_title differences from causing refreshes if title is present.
* Ensure nav menu item url is set according to object when previewing.
* Make sure initial saved state is false if there are dirty settings without an existing changeset.
* Ensure dirty settings are cleaned upon changeset publishing.
Props helen, westonruter, ocean90.
Fixes #38114, #38533.
Built from https://develop.svn.wordpress.org/trunk@38991
git-svn-id: http://core.svn.wordpress.org/trunk@38934 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-10-27 22:57:35 -04:00
// Mark all published as clean if they haven't been modified during the request.
api . each ( function ( setting ) {
/ *
* Note that the setting revision will be undefined in the case of setting
* values that are marked as dirty when the customizer is loaded , such as
* when applying starter content . All other dirty settings will have an
* associated revision due to their modification triggering a change event .
* /
if ( setting . _dirty && ( _ . isUndefined ( api . _latestSettingRevisions [ setting . id ] ) || api . _latestSettingRevisions [ setting . id ] <= latestRevision ) ) {
setting . _dirty = false ;
}
} ) ;
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
api . state ( 'changesetStatus' ) . set ( '' ) ;
api . settings . changeset . uuid = response . next _changeset _uuid ;
2017-10-09 12:04:48 -04:00
if ( api . settings . changeset . branching ) {
parent . send ( 'changeset-uuid' , api . settings . changeset . uuid ) ;
}
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
}
2016-01-26 18:52:25 -05:00
Customize: Extend changesets to support autosave revisions with restoration notifications, and introduce a new default linear history mode for saved changesets (with a filter for opt-in to changeset branching).
* Autosaved changes made on top of `auto-draft` changesets get written on top of the `auto-draft` itself, similar to how autosaves for posts will overwrite post drafts.
* Autosaved changes made to saved changesets (e.g. `draft`, `future`) will be placed into an autosave revision for that changeset and that user.
* Opening the Customizer will now prompt the user to restore their most recent auto-draft changeset; if notification is dismissed or ignored then the auto-draft will be marked as dismissed and will not be prompted to user in a notification again.
* Customizer will no longer automatically supply the `changeset_uuid` param in the `customize.php` URL when branching changesets are not active.
* If user closes Customizer explicitly via clicking on X link, then autosave auto-draft/autosave will be dismissed so as to not be prompted again.
* If there is a changeset already saved as a `draft` or `future` (UI is forthcoming) then this changeset will now be autoloaded for the user to keep making additional changes. This is the linear model for changesets.
* To restore the previous behavior of the Customizer where each session started a new changeset, regardless of whether or not there was an existing changeset saved, there is now a `customize_changeset_branching` hook which can be filtered to return `true`.
* `wp.customize.requestChangesetUpdate()` now supports a second with options including `autosave`, `title`, and `date`.
* The window `blur` event for `customize.php` has been replaced with a `visibilitychange` event to reduce autosave requests when clicking into preview window.
* Adds `autosaved` and `branching` args to `WP_Customize_Manager`.
* The `changeset_uuid` param for `WP_Customize_Manager` is extended to recognize a `false` value which causes the Customizer to defer identifying the UUID until `after_setup_theme` in the new `WP_Customize_Manager::establish_loaded_changeset()` method.
* A new `customize_autosaved` query parameter can now be supplied which is passed into the `autosaved` arg in `WP_Customize_Manager`; this option is an opt-in to source data from the autosave revision, allowing a user to restore autosaved changes.
Props westonruter, dlh, sayedwp, JoshuaWold, melchoyce.
See #39896.
Built from https://develop.svn.wordpress.org/trunk@41597
git-svn-id: http://core.svn.wordpress.org/trunk@41430 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-26 03:38:45 -04:00
// Prevent subsequent requestChangesetUpdate() calls from including the settings that have been saved.
api . _lastSavedRevision = Math . max ( latestRevision , api . _lastSavedRevision ) ;
2016-06-14 15:17:28 -04:00
if ( response . setting _validities ) {
api . _handleSettingValidities ( {
settingValidities : response . setting _validities ,
focusInvalidControl : true
} ) ;
}
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
deferred . resolveWith ( previewer , [ response ] ) ;
2015-01-06 16:47:23 -05:00
api . trigger ( 'saved' , response ) ;
2016-05-02 15:13:26 -04:00
// Restore the global dirty state if any settings were modified during save.
if ( ! _ . isEmpty ( modifiedWhileSaving ) ) {
api . state ( 'saved' ) . set ( false ) ;
}
2014-03-14 15:16:14 -04:00
} ) ;
} ;
2012-08-22 20:04:18 -04:00
2014-03-14 15:16:14 -04:00
if ( 0 === processing ( ) ) {
submit ( ) ;
} else {
submitWhenDoneProcessing = function ( ) {
if ( 0 === processing ( ) ) {
api . state . unbind ( 'change' , submitWhenDoneProcessing ) ;
submit ( ) ;
}
} ;
api . state . bind ( 'change' , submitWhenDoneProcessing ) ;
}
2012-08-22 20:04:18 -04: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
return deferred . promise ( ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
} ,
2017-10-01 23:37:46 -04:00
/ * *
* Trash the current changes .
*
* Revert the Customizer to it ' s previously - published state .
*
* @ since 4.9 . 0
*
* @ returns { jQuery . promise } Promise .
* /
trash : function trash ( ) {
var request , success , fail ;
api . state ( 'trashing' ) . set ( true ) ;
api . state ( 'processing' ) . set ( api . state ( 'processing' ) . get ( ) + 1 ) ;
request = wp . ajax . post ( 'customize_trash' , {
customize _changeset _uuid : api . settings . changeset . uuid ,
nonce : api . settings . nonce . trash
} ) ;
2017-10-04 02:48:46 -04:00
api . notifications . add ( new api . OverlayNotification ( 'changeset_trashing' , {
2017-10-01 23:37:46 -04:00
type : 'info' ,
message : api . l10n . revertingChanges ,
loading : true
} ) ) ;
success = function ( ) {
var urlParser = document . createElement ( 'a' ) , queryParams ;
api . state ( 'changesetStatus' ) . set ( 'trash' ) ;
api . each ( function ( setting ) {
setting . _dirty = false ;
} ) ;
api . state ( 'saved' ) . set ( true ) ;
// Go back to Customizer without changeset.
urlParser . href = location . href ;
queryParams = api . utils . parseQueryString ( urlParser . search . substr ( 1 ) ) ;
delete queryParams . changeset _uuid ;
2017-10-09 12:04:48 -04:00
queryParams [ 'return' ] = api . settings . url [ 'return' ] ;
2017-10-01 23:37:46 -04:00
urlParser . search = $ . param ( queryParams ) ;
location . replace ( urlParser . href ) ;
} ;
fail = function ( code , message ) {
var notificationCode = code || 'unknown_error' ;
api . state ( 'processing' ) . set ( api . state ( 'processing' ) . get ( ) - 1 ) ;
api . state ( 'trashing' ) . set ( false ) ;
api . notifications . remove ( 'changeset_trashing' ) ;
2017-10-04 02:48:46 -04:00
api . notifications . add ( new api . Notification ( notificationCode , {
2017-10-01 23:37:46 -04:00
message : message || api . l10n . unknownError ,
dismissible : true ,
type : 'error'
} ) ) ;
} ;
request . done ( function ( response ) {
success ( response . message ) ;
} ) ;
request . fail ( function ( response ) {
var code = response . code || 'trashing_failed' ;
if ( response . success || 'non_existent_changeset' === code || 'changeset_already_trashed' === code ) {
success ( response . message ) ;
} else {
fail ( code , response . message ) ;
}
} ) ;
} ,
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
/ * *
* Builds the front preview url with the current state of customizer .
*
* @ since 4.9
*
* @ return { string } Preview url .
* /
getFrontendPreviewUrl : function ( ) {
2017-10-22 20:41:47 -04:00
var previewer = this , params , urlParser ;
urlParser = document . createElement ( 'a' ) ;
urlParser . href = previewer . previewUrl . get ( ) ;
params = api . utils . parseQueryString ( urlParser . search . substr ( 1 ) ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
if ( api . state ( 'changesetStatus' ) . get ( ) && 'publish' !== api . state ( 'changesetStatus' ) . get ( ) ) {
params . customize _changeset _uuid = api . settings . changeset . uuid ;
}
2017-10-22 20:41:47 -04:00
if ( ! api . state ( 'activated' ) . get ( ) ) {
params . customize _theme = api . settings . theme . stylesheet ;
}
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
2017-10-22 20:41:47 -04:00
urlParser . search = $ . param ( params ) ;
return urlParser . href ;
2012-08-22 20:04:18 -04:00
}
} ) ;
2017-05-16 08:07:43 -04:00
// Ensure preview nonce is included with every customized request, to allow post data to be read.
$ . ajaxPrefilter ( function injectPreviewNonce ( options ) {
if ( ! /wp_customize=on/ . test ( options . data ) ) {
return ;
}
options . data += '&' + $ . param ( {
customize _preview _nonce : api . settings . nonce . preview
} ) ;
} ) ;
2012-08-22 20:04:18 -04:00
// Refresh the nonces if the preview sends updated nonces over.
2014-07-09 16:58:15 -04:00
api . previewer . bind ( 'nonce' , function ( nonce ) {
2013-11-15 01:08:10 -05:00
$ . extend ( this . nonce , nonce ) ;
} ) ;
2012-08-22 20:04:18 -04:00
2015-04-06 11:10:27 -04:00
// Refresh the nonces if login sends updated nonces over.
api . bind ( 'nonce-refresh' , function ( nonce ) {
$ . extend ( api . settings . nonce , nonce ) ;
$ . extend ( api . previewer . nonce , nonce ) ;
2016-01-27 12:55:26 -05:00
api . previewer . send ( 'nonce-refresh' , nonce ) ;
2015-04-06 11:10:27 -04:00
} ) ;
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
// Create Settings
2012-08-22 20:04:18 -04:00
$ . each ( api . settings . settings , function ( id , data ) {
2017-10-04 02:48:46 -04:00
var Constructor = api . settingConstructor [ data . type ] || api . Setting ;
api . add ( new Constructor ( id , data . value , {
2012-08-22 20:04:18 -04:00
transport : data . transport ,
2015-03-10 18:39:28 -04:00
previewer : api . previewer ,
dirty : ! ! data . dirty
2017-10-04 02:48:46 -04:00
} ) ) ;
2012-08-22 20:04:18 -04:00
} ) ;
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
// Create Panels
$ . each ( api . settings . panels , function ( id , data ) {
2017-10-21 04:51:48 -04:00
var Constructor = api . panelConstructor [ data . type ] || api . Panel , options ;
options = _ . extend ( { params : data } , data ) ; // Inclusion of params alias is for back-compat for custom panels that expect to augment this property.
api . panel . add ( new Constructor ( id , options ) ) ;
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
} ) ;
// Create Sections
$ . each ( api . settings . sections , function ( id , data ) {
2017-10-21 04:51:48 -04:00
var Constructor = api . sectionConstructor [ data . type ] || api . Section , options ;
options = _ . extend ( { params : data } , data ) ; // Inclusion of params alias is for back-compat for custom sections that expect to augment this property.
api . section . add ( new Constructor ( id , options ) ) ;
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
} ) ;
// Create Controls
2012-08-22 20:04:18 -04:00
$ . each ( api . settings . controls , function ( id , data ) {
2017-10-21 04:51:48 -04:00
var Constructor = api . controlConstructor [ data . type ] || api . Control , options ;
options = _ . extend ( { params : data } , data ) ; // Inclusion of params alias is for back-compat for custom controls that expect to augment this property.
api . control . add ( new Constructor ( id , options ) ) ;
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
} ) ;
// Focus the autofocused element
2016-03-01 17:04:27 -05:00
_ . each ( [ 'panel' , 'section' , 'control' ] , function ( type ) {
var id = api . settings . autofocus [ type ] ;
if ( ! id ) {
return ;
}
/ *
* Defer focus until :
* 1. The panel , section , or control exists ( especially for dynamically - created ones ) .
* 2. The instance is embedded in the document ( and so is focusable ) .
* 3. The preview has finished loading so that the active states have been set .
* /
api [ type ] ( id , function ( instance ) {
instance . deferred . embedded . done ( function ( ) {
api . previewer . deferred . active . done ( function ( ) {
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
instance . focus ( ) ;
} ) ;
} ) ;
2016-03-01 17:04:27 -05:00
} ) ;
2012-08-22 20:04:18 -04:00
} ) ;
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
api . bind ( 'ready' , api . reflowPaneContents ) ;
$ ( [ api . panel , api . section , api . control ] ) . each ( function ( i , values ) {
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
var debouncedReflowPaneContents = _ . debounce ( api . reflowPaneContents , api . settings . timeouts . reflowPaneContents ) ;
2016-06-26 10:26:29 -04:00
values . bind ( 'add' , debouncedReflowPaneContents ) ;
values . bind ( 'change' , debouncedReflowPaneContents ) ;
values . bind ( 'remove' , debouncedReflowPaneContents ) ;
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
} ) ;
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
// Set up global notifications area.
api . bind ( 'ready' , function setUpGlobalNotificationsArea ( ) {
var sidebar , containerHeight , containerInitialTop ;
api . notifications . container = $ ( '#customize-notifications-area' ) ;
api . notifications . bind ( 'change' , _ . debounce ( function ( ) {
api . notifications . render ( ) ;
} ) ) ;
sidebar = $ ( '.wp-full-overlay-sidebar-content' ) ;
api . notifications . bind ( 'rendered' , function updateSidebarTop ( ) {
sidebar . css ( 'top' , '' ) ;
if ( 0 !== api . notifications . count ( ) ) {
containerHeight = api . notifications . container . outerHeight ( ) + 1 ;
containerInitialTop = parseInt ( sidebar . css ( 'top' ) , 10 ) ;
sidebar . css ( 'top' , containerInitialTop + containerHeight + 'px' ) ;
}
api . notifications . trigger ( 'sidebarTopUpdated' ) ;
} ) ;
api . notifications . render ( ) ;
} ) ;
2012-08-22 20:04:18 -04:00
// Save and activated states
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
( function ( state ) {
var saved = state . instance ( 'saved' ) ,
saving = state . instance ( 'saving' ) ,
2017-10-01 23:37:46 -04:00
trashing = state . instance ( 'trashing' ) ,
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
activated = state . instance ( 'activated' ) ,
processing = state . instance ( 'processing' ) ,
paneVisible = state . instance ( 'paneVisible' ) ,
expandedPanel = state . instance ( 'expandedPanel' ) ,
expandedSection = state . instance ( 'expandedSection' ) ,
changesetStatus = state . instance ( 'changesetStatus' ) ,
selectedChangesetStatus = state . instance ( 'selectedChangesetStatus' ) ,
changesetDate = state . instance ( 'changesetDate' ) ,
selectedChangesetDate = state . instance ( 'selectedChangesetDate' ) ,
previewerAlive = state . instance ( 'previewerAlive' ) ,
editShortcutVisibility = state . instance ( 'editShortcutVisibility' ) ,
2017-10-12 00:01:46 -04:00
changesetLocked = state . instance ( 'changesetLocked' ) ,
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
populateChangesetUuidParam ;
2012-08-22 20:04:18 -04:00
state . bind ( 'change' , function ( ) {
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
var canSave ;
2012-08-22 20:04:18 -04:00
if ( ! activated ( ) ) {
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
saveBtn . val ( api . l10n . activate ) ;
2014-07-08 14:19:14 -04:00
closeBtn . find ( '.screen-reader-text' ) . text ( api . l10n . cancel ) ;
2012-08-22 20:04:18 -04: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
} else if ( '' === changesetStatus . get ( ) && saved ( ) ) {
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
if ( api . settings . changeset . currentUserCanPublish ) {
saveBtn . val ( api . l10n . published ) ;
} else {
saveBtn . val ( api . l10n . saved ) ;
}
2014-07-08 14:19:14 -04:00
closeBtn . find ( '.screen-reader-text' ) . text ( api . l10n . close ) ;
2012-08-22 20:04:18 -04:00
} else {
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
if ( 'draft' === selectedChangesetStatus ( ) ) {
if ( saved ( ) && selectedChangesetStatus ( ) === changesetStatus ( ) ) {
saveBtn . val ( api . l10n . draftSaved ) ;
} else {
saveBtn . val ( api . l10n . saveDraft ) ;
}
} else if ( 'future' === selectedChangesetStatus ( ) ) {
if ( saved ( ) && selectedChangesetStatus ( ) === changesetStatus ( ) ) {
if ( changesetDate . get ( ) !== selectedChangesetDate . get ( ) ) {
saveBtn . val ( api . l10n . schedule ) ;
} else {
saveBtn . val ( api . l10n . scheduled ) ;
}
} else {
saveBtn . val ( api . l10n . schedule ) ;
}
} else if ( ! api . settings . changeset . currentUserCanPublish ) {
selectedChangesetStatus ( 'draft' ) ;
} else {
saveBtn . val ( api . l10n . publish ) ;
}
2014-07-08 14:19:14 -04:00
closeBtn . find ( '.screen-reader-text' ) . text ( api . l10n . cancel ) ;
2012-08-22 20:04:18 -04: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
/ *
* Save ( publish ) button should be enabled if saving is not currently happening ,
* and if the theme is not active or the changeset exists but is not published .
* /
2017-10-12 00:01:46 -04:00
canSave = ! saving ( ) && ! trashing ( ) && ! changesetLocked ( ) && ( ! activated ( ) || ! saved ( ) || ( changesetStatus ( ) !== selectedChangesetStatus ( ) && '' !== changesetStatus ( ) ) || ( 'future' === selectedChangesetStatus ( ) && changesetDate . get ( ) !== selectedChangesetDate . get ( ) ) ) ;
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
saveBtn . prop ( 'disabled' , ! canSave ) ;
2012-08-22 20:04:18 -04:00
} ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
selectedChangesetStatus . validate = function ( status ) {
if ( '' === status || 'auto-draft' === status ) {
return null ;
}
return status ;
} ;
2012-08-22 20:04:18 -04:00
// Set default states.
Customize: Introduce starter content and site freshness state.
A theme can opt-in for tailored starter content to apply to the customizer when previewing the theme on a fresh install, when `fresh_site` is at its initial `1` value. Starter content is staged in the customizer and does not go live unless the changes are published. Initial starter content is added to Twenty Seventeen.
* The `fresh_site` flag is cleared when a published post or page is saved, when widgets are modified, or when the customizer state is saved.
* Starter content is registered via `starter-content` theme support, where the argument is an array containing `widgets`, `posts`, `nav_menus`, `options`, and `theme_mods`. Posts/pages in starter content are created with the `auto-draft` status, re-using the page/post stubs feature added to nav menus and the static front page controls.
* A `get_theme_starter_content` filter allows for plugins to extend a theme's starter content.
* Starter content in themes can/should re-use existing starter content items in core by using named placeholders.
* Import theme starter content into customized state when fresh site.
* Prevent original_title differences from causing refreshes if title is present.
* Ensure nav menu item url is set according to object when previewing.
* Make sure initial saved state is false if there are dirty settings without an existing changeset.
* Ensure dirty settings are cleaned upon changeset publishing.
Props helen, westonruter, ocean90.
Fixes #38114, #38533.
Built from https://develop.svn.wordpress.org/trunk@38991
git-svn-id: http://core.svn.wordpress.org/trunk@38934 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-10-27 22:57:35 -04:00
changesetStatus ( api . settings . changeset . status ) ;
2017-10-12 00:01:46 -04:00
changesetLocked ( Boolean ( api . settings . changeset . lockUser ) ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
changesetDate ( api . settings . changeset . publishDate ) ;
Customize: Allow controls to be created with pre-instantiated `Setting` object(s), or even with plain `Value` object(s).
* Allow passing settings in keyed object (e.g. `settings: { default: 'id' } ), or as an array (e.g. `settings: [ 'id' ]`) with first being default; again, `Setting`/`Value` objects may be supplied instead of IDs.
* Allow a single setting to be supplied with just a single `setting` param, either a string or a `Setting`/`Value` object.
* Update `changeset_status` and `scheduled_changeset_date` to be added dynamically with JS and simply passing of `api.state()` instances as `setting`.
* Introduce a `data-customize-setting-key-link` attribute which, unlike `data-customize-setting-link`, allows passing the setting key (e.g. `default`) as opposed to the setting ID.
* Allow `WP_Customize_Control::get_link()` to return `data-customize-setting-key-link` when setting is not registered.
* Eliminate `default_value` from `WP_Customize_Date_Time_Control` since now comes from supplied `Value`.
* Export status choices as `wp.customize.settings.changeset.statusChoices`.
* Export date and time formats as `wp.customize.settings.dateFormat` and `wp.customize.settings.timeFormat` respectively.
Props westonruter, sayedwp.
See #39896, #30738, #30741, #42083.
Fixes #37964, #36167.
Built from https://develop.svn.wordpress.org/trunk@41750
git-svn-id: http://core.svn.wordpress.org/trunk@41584 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-10-04 16:02:49 -04:00
selectedChangesetDate ( api . settings . changeset . publishDate ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
selectedChangesetStatus ( '' === api . settings . changeset . status || 'auto-draft' === api . settings . changeset . status ? 'publish' : api . settings . changeset . status ) ;
selectedChangesetStatus . link ( changesetStatus ) ; // Ensure that direct updates to status on server via wp.customizer.previewer.save() will update selection.
2012-08-22 20:04:18 -04:00
saved ( true ) ;
Customize: Introduce starter content and site freshness state.
A theme can opt-in for tailored starter content to apply to the customizer when previewing the theme on a fresh install, when `fresh_site` is at its initial `1` value. Starter content is staged in the customizer and does not go live unless the changes are published. Initial starter content is added to Twenty Seventeen.
* The `fresh_site` flag is cleared when a published post or page is saved, when widgets are modified, or when the customizer state is saved.
* Starter content is registered via `starter-content` theme support, where the argument is an array containing `widgets`, `posts`, `nav_menus`, `options`, and `theme_mods`. Posts/pages in starter content are created with the `auto-draft` status, re-using the page/post stubs feature added to nav menus and the static front page controls.
* A `get_theme_starter_content` filter allows for plugins to extend a theme's starter content.
* Starter content in themes can/should re-use existing starter content items in core by using named placeholders.
* Import theme starter content into customized state when fresh site.
* Prevent original_title differences from causing refreshes if title is present.
* Ensure nav menu item url is set according to object when previewing.
* Make sure initial saved state is false if there are dirty settings without an existing changeset.
* Ensure dirty settings are cleaned upon changeset publishing.
Props helen, westonruter, ocean90.
Fixes #38114, #38533.
Built from https://develop.svn.wordpress.org/trunk@38991
git-svn-id: http://core.svn.wordpress.org/trunk@38934 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-10-27 22:57:35 -04:00
if ( '' === changesetStatus ( ) ) { // Handle case for loading starter content.
api . each ( function ( setting ) {
if ( setting . _dirty ) {
saved ( false ) ;
}
} ) ;
}
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
saving ( false ) ;
2012-08-22 20:04:18 -04:00
activated ( api . settings . theme . active ) ;
2014-03-14 15:16:14 -04:00
processing ( 0 ) ;
2016-09-01 01:55:27 -04:00
paneVisible ( true ) ;
2016-10-21 02:37:30 -04:00
expandedPanel ( false ) ;
expandedSection ( false ) ;
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
previewerAlive ( true ) ;
2016-11-04 13:13:57 -04:00
editShortcutVisibility ( 'visible' ) ;
2012-08-22 20:04:18 -04:00
api . bind ( 'change' , function ( ) {
2017-01-05 00:18:43 -05:00
if ( state ( 'saved' ) . get ( ) ) {
state ( 'saved' ) . set ( false ) ;
}
2012-08-22 20:04:18 -04:00
} ) ;
Customize: Extend changesets to support autosave revisions with restoration notifications, and introduce a new default linear history mode for saved changesets (with a filter for opt-in to changeset branching).
* Autosaved changes made on top of `auto-draft` changesets get written on top of the `auto-draft` itself, similar to how autosaves for posts will overwrite post drafts.
* Autosaved changes made to saved changesets (e.g. `draft`, `future`) will be placed into an autosave revision for that changeset and that user.
* Opening the Customizer will now prompt the user to restore their most recent auto-draft changeset; if notification is dismissed or ignored then the auto-draft will be marked as dismissed and will not be prompted to user in a notification again.
* Customizer will no longer automatically supply the `changeset_uuid` param in the `customize.php` URL when branching changesets are not active.
* If user closes Customizer explicitly via clicking on X link, then autosave auto-draft/autosave will be dismissed so as to not be prompted again.
* If there is a changeset already saved as a `draft` or `future` (UI is forthcoming) then this changeset will now be autoloaded for the user to keep making additional changes. This is the linear model for changesets.
* To restore the previous behavior of the Customizer where each session started a new changeset, regardless of whether or not there was an existing changeset saved, there is now a `customize_changeset_branching` hook which can be filtered to return `true`.
* `wp.customize.requestChangesetUpdate()` now supports a second with options including `autosave`, `title`, and `date`.
* The window `blur` event for `customize.php` has been replaced with a `visibilitychange` event to reduce autosave requests when clicking into preview window.
* Adds `autosaved` and `branching` args to `WP_Customize_Manager`.
* The `changeset_uuid` param for `WP_Customize_Manager` is extended to recognize a `false` value which causes the Customizer to defer identifying the UUID until `after_setup_theme` in the new `WP_Customize_Manager::establish_loaded_changeset()` method.
* A new `customize_autosaved` query parameter can now be supplied which is passed into the `autosaved` arg in `WP_Customize_Manager`; this option is an opt-in to source data from the autosave revision, allowing a user to restore autosaved changes.
Props westonruter, dlh, sayedwp, JoshuaWold, melchoyce.
See #39896.
Built from https://develop.svn.wordpress.org/trunk@41597
git-svn-id: http://core.svn.wordpress.org/trunk@41430 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-26 03:38:45 -04:00
// Populate changeset UUID param when state becomes dirty.
if ( api . settings . changeset . branching ) {
saved . bind ( function ( isSaved ) {
if ( ! isSaved ) {
populateChangesetUuidParam ( true ) ;
}
} ) ;
}
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
saving . bind ( function ( isSaving ) {
body . toggleClass ( 'saving' , isSaving ) ;
} ) ;
2017-10-01 23:37:46 -04:00
trashing . bind ( function ( isTrashing ) {
body . toggleClass ( 'trashing' , isTrashing ) ;
} ) ;
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
api . bind ( 'saved' , function ( response ) {
2012-08-22 20:04:18 -04:00
state ( 'saved' ) . set ( true ) ;
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
if ( 'publish' === response . changeset _status ) {
state ( 'activated' ) . set ( true ) ;
}
2012-08-22 20:04:18 -04:00
} ) ;
activated . bind ( function ( to ) {
2016-06-26 10:26:29 -04:00
if ( to ) {
2012-08-22 20:04:18 -04:00
api . trigger ( 'activated' ) ;
2016-06-26 10:26:29 -04:00
}
2012-08-22 20:04:18 -04:00
} ) ;
2016-11-23 01:05:32 -05:00
/ * *
* Populate URL with UUID via ` history.replaceState() ` .
*
* @ since 4.7 . 0
* @ access private
*
* @ param { boolean } isIncluded Is UUID included .
* @ returns { void }
* /
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
populateChangesetUuidParam = function ( isIncluded ) {
var urlParser , queryParams ;
2017-04-10 17:15:41 -04:00
// Abort on IE9 which doesn't support history management.
if ( ! history . replaceState ) {
return ;
}
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
urlParser = document . createElement ( 'a' ) ;
urlParser . href = location . href ;
queryParams = api . utils . parseQueryString ( urlParser . search . substr ( 1 ) ) ;
if ( isIncluded ) {
if ( queryParams . changeset _uuid === api . settings . changeset . uuid ) {
return ;
}
queryParams . changeset _uuid = api . settings . changeset . uuid ;
} else {
if ( ! queryParams . changeset _uuid ) {
return ;
}
delete queryParams . changeset _uuid ;
}
urlParser . search = $ . param ( queryParams ) ;
history . replaceState ( { } , document . title , urlParser . href ) ;
} ;
Customize: Extend changesets to support autosave revisions with restoration notifications, and introduce a new default linear history mode for saved changesets (with a filter for opt-in to changeset branching).
* Autosaved changes made on top of `auto-draft` changesets get written on top of the `auto-draft` itself, similar to how autosaves for posts will overwrite post drafts.
* Autosaved changes made to saved changesets (e.g. `draft`, `future`) will be placed into an autosave revision for that changeset and that user.
* Opening the Customizer will now prompt the user to restore their most recent auto-draft changeset; if notification is dismissed or ignored then the auto-draft will be marked as dismissed and will not be prompted to user in a notification again.
* Customizer will no longer automatically supply the `changeset_uuid` param in the `customize.php` URL when branching changesets are not active.
* If user closes Customizer explicitly via clicking on X link, then autosave auto-draft/autosave will be dismissed so as to not be prompted again.
* If there is a changeset already saved as a `draft` or `future` (UI is forthcoming) then this changeset will now be autoloaded for the user to keep making additional changes. This is the linear model for changesets.
* To restore the previous behavior of the Customizer where each session started a new changeset, regardless of whether or not there was an existing changeset saved, there is now a `customize_changeset_branching` hook which can be filtered to return `true`.
* `wp.customize.requestChangesetUpdate()` now supports a second with options including `autosave`, `title`, and `date`.
* The window `blur` event for `customize.php` has been replaced with a `visibilitychange` event to reduce autosave requests when clicking into preview window.
* Adds `autosaved` and `branching` args to `WP_Customize_Manager`.
* The `changeset_uuid` param for `WP_Customize_Manager` is extended to recognize a `false` value which causes the Customizer to defer identifying the UUID until `after_setup_theme` in the new `WP_Customize_Manager::establish_loaded_changeset()` method.
* A new `customize_autosaved` query parameter can now be supplied which is passed into the `autosaved` arg in `WP_Customize_Manager`; this option is an opt-in to source data from the autosave revision, allowing a user to restore autosaved changes.
Props westonruter, dlh, sayedwp, JoshuaWold, melchoyce.
See #39896.
Built from https://develop.svn.wordpress.org/trunk@41597
git-svn-id: http://core.svn.wordpress.org/trunk@41430 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-26 03:38:45 -04:00
// Show changeset UUID in URL when in branching mode and there is a saved changeset.
if ( api . settings . changeset . branching ) {
changesetStatus . bind ( function ( newStatus ) {
2017-10-01 23:37:46 -04:00
populateChangesetUuidParam ( '' !== newStatus && 'publish' !== newStatus && 'trash' !== newStatus ) ;
Customize: Extend changesets to support autosave revisions with restoration notifications, and introduce a new default linear history mode for saved changesets (with a filter for opt-in to changeset branching).
* Autosaved changes made on top of `auto-draft` changesets get written on top of the `auto-draft` itself, similar to how autosaves for posts will overwrite post drafts.
* Autosaved changes made to saved changesets (e.g. `draft`, `future`) will be placed into an autosave revision for that changeset and that user.
* Opening the Customizer will now prompt the user to restore their most recent auto-draft changeset; if notification is dismissed or ignored then the auto-draft will be marked as dismissed and will not be prompted to user in a notification again.
* Customizer will no longer automatically supply the `changeset_uuid` param in the `customize.php` URL when branching changesets are not active.
* If user closes Customizer explicitly via clicking on X link, then autosave auto-draft/autosave will be dismissed so as to not be prompted again.
* If there is a changeset already saved as a `draft` or `future` (UI is forthcoming) then this changeset will now be autoloaded for the user to keep making additional changes. This is the linear model for changesets.
* To restore the previous behavior of the Customizer where each session started a new changeset, regardless of whether or not there was an existing changeset saved, there is now a `customize_changeset_branching` hook which can be filtered to return `true`.
* `wp.customize.requestChangesetUpdate()` now supports a second with options including `autosave`, `title`, and `date`.
* The window `blur` event for `customize.php` has been replaced with a `visibilitychange` event to reduce autosave requests when clicking into preview window.
* Adds `autosaved` and `branching` args to `WP_Customize_Manager`.
* The `changeset_uuid` param for `WP_Customize_Manager` is extended to recognize a `false` value which causes the Customizer to defer identifying the UUID until `after_setup_theme` in the new `WP_Customize_Manager::establish_loaded_changeset()` method.
* A new `customize_autosaved` query parameter can now be supplied which is passed into the `autosaved` arg in `WP_Customize_Manager`; this option is an opt-in to source data from the autosave revision, allowing a user to restore autosaved changes.
Props westonruter, dlh, sayedwp, JoshuaWold, melchoyce.
See #39896.
Built from https://develop.svn.wordpress.org/trunk@41597
git-svn-id: http://core.svn.wordpress.org/trunk@41430 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-26 03:38:45 -04:00
} ) ;
}
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
} ( api . state ) ) ;
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
2017-10-12 00:01:46 -04:00
/ * *
* Handles lock notice and take over request .
*
* @ since 4.9 . 0
* /
( function checkAndDisplayLockNotice ( ) {
/ * *
* A notification that is displayed in a full - screen overlay with information about the locked changeset .
*
* @ since 4.9 . 0
* @ class
* @ augments wp . customize . Notification
* @ augments wp . customize . OverlayNotification
* /
var LockedNotification = api . OverlayNotification . extend ( {
/ * *
* Template ID .
*
* @ type { string }
* /
templateId : 'customize-changeset-locked-notification' ,
/ * *
* Lock user .
*
* @ type { object }
* /
lockUser : null ,
/ * *
* Initialize .
*
* @ since 4.9 . 0
*
* @ param { string } [ code ] - Code .
* @ param { object } [ params ] - Params .
* /
initialize : function ( code , params ) {
var notification = this , _code , _params ;
_code = code || 'changeset_locked' ;
_params = _ . extend (
{
type : 'warning' ,
containerClasses : '' ,
lockUser : { }
} ,
params
) ;
_params . containerClasses += ' notification-changeset-locked' ;
api . OverlayNotification . prototype . initialize . call ( notification , _code , _params ) ;
} ,
/ * *
* Render notification .
*
* @ since 4.9 . 0
*
* @ return { jQuery } Notification container .
* /
render : function ( ) {
var notification = this , li , data , takeOverButton , request ;
data = _ . extend (
{
allowOverride : false ,
returnUrl : api . settings . url [ 'return' ] ,
previewUrl : api . previewer . previewUrl . get ( ) ,
frontendPreviewUrl : api . previewer . getFrontendPreviewUrl ( )
} ,
this
) ;
li = api . OverlayNotification . prototype . render . call ( data ) ;
// Try to autosave the changeset now.
api . requestChangesetUpdate ( { } , { autosave : true } ) . fail ( function ( response ) {
if ( ! response . autosaved ) {
li . find ( '.notice-error' ) . prop ( 'hidden' , false ) . text ( response . message || api . l10n . unknownRequestFail ) ;
}
} ) ;
takeOverButton = li . find ( '.customize-notice-take-over-button' ) ;
takeOverButton . on ( 'click' , function ( event ) {
event . preventDefault ( ) ;
if ( request ) {
return ;
}
takeOverButton . addClass ( 'disabled' ) ;
request = wp . ajax . post ( 'customize_override_changeset_lock' , {
wp _customize : 'on' ,
customize _theme : api . settings . theme . stylesheet ,
customize _changeset _uuid : api . settings . changeset . uuid ,
nonce : api . settings . nonce . override _lock
} ) ;
request . done ( function ( ) {
api . notifications . remove ( notification . code ) ; // Remove self.
api . state ( 'changesetLocked' ) . set ( false ) ;
} ) ;
request . fail ( function ( response ) {
var message = response . message || api . l10n . unknownRequestFail ;
li . find ( '.notice-error' ) . prop ( 'hidden' , false ) . text ( message ) ;
request . always ( function ( ) {
takeOverButton . removeClass ( 'disabled' ) ;
} ) ;
} ) ;
request . always ( function ( ) {
request = null ;
} ) ;
} ) ;
return li ;
}
} ) ;
/ * *
* Start lock .
*
* @ since 4.9 . 0
*
* @ param { object } [ args ] - Args .
* @ param { object } [ args . lockUser ] - Lock user data .
* @ param { boolean } [ args . allowOverride = false ] - Whether override is allowed .
* @ returns { void }
* /
function startLock ( args ) {
if ( args && args . lockUser ) {
api . settings . changeset . lockUser = args . lockUser ;
}
api . state ( 'changesetLocked' ) . set ( true ) ;
api . notifications . add ( new LockedNotification ( 'changeset_locked' , {
lockUser : api . settings . changeset . lockUser ,
allowOverride : Boolean ( args && args . allowOverride )
} ) ) ;
}
// Show initial notification.
if ( api . settings . changeset . lockUser ) {
startLock ( { allowOverride : true } ) ;
}
// Check for lock when sending heartbeat requests.
$ ( document ) . on ( 'heartbeat-send.update_lock_notice' , function ( event , data ) {
data . check _changeset _lock = true ;
} ) ;
// Handle heartbeat ticks.
$ ( document ) . on ( 'heartbeat-tick.update_lock_notice' , function ( event , data ) {
var notification , code = 'changeset_locked' ;
if ( ! data . customize _changeset _lock _user ) {
return ;
}
// Update notification when a different user takes over.
notification = api . notifications ( code ) ;
if ( notification && notification . lockUser . id !== api . settings . changeset . lockUser . id ) {
api . notifications . remove ( code ) ;
}
startLock ( {
lockUser : data . customize _changeset _lock _user
} ) ;
} ) ;
// Handle locking in response to changeset save errors.
api . bind ( 'error' , function ( response ) {
if ( 'changeset_locked' === response . code && response . lock _user ) {
startLock ( {
lockUser : response . lock _user
} ) ;
}
} ) ;
} ) ( ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
// Set up initial notifications.
Customize: Extend changesets to support autosave revisions with restoration notifications, and introduce a new default linear history mode for saved changesets (with a filter for opt-in to changeset branching).
* Autosaved changes made on top of `auto-draft` changesets get written on top of the `auto-draft` itself, similar to how autosaves for posts will overwrite post drafts.
* Autosaved changes made to saved changesets (e.g. `draft`, `future`) will be placed into an autosave revision for that changeset and that user.
* Opening the Customizer will now prompt the user to restore their most recent auto-draft changeset; if notification is dismissed or ignored then the auto-draft will be marked as dismissed and will not be prompted to user in a notification again.
* Customizer will no longer automatically supply the `changeset_uuid` param in the `customize.php` URL when branching changesets are not active.
* If user closes Customizer explicitly via clicking on X link, then autosave auto-draft/autosave will be dismissed so as to not be prompted again.
* If there is a changeset already saved as a `draft` or `future` (UI is forthcoming) then this changeset will now be autoloaded for the user to keep making additional changes. This is the linear model for changesets.
* To restore the previous behavior of the Customizer where each session started a new changeset, regardless of whether or not there was an existing changeset saved, there is now a `customize_changeset_branching` hook which can be filtered to return `true`.
* `wp.customize.requestChangesetUpdate()` now supports a second with options including `autosave`, `title`, and `date`.
* The window `blur` event for `customize.php` has been replaced with a `visibilitychange` event to reduce autosave requests when clicking into preview window.
* Adds `autosaved` and `branching` args to `WP_Customize_Manager`.
* The `changeset_uuid` param for `WP_Customize_Manager` is extended to recognize a `false` value which causes the Customizer to defer identifying the UUID until `after_setup_theme` in the new `WP_Customize_Manager::establish_loaded_changeset()` method.
* A new `customize_autosaved` query parameter can now be supplied which is passed into the `autosaved` arg in `WP_Customize_Manager`; this option is an opt-in to source data from the autosave revision, allowing a user to restore autosaved changes.
Props westonruter, dlh, sayedwp, JoshuaWold, melchoyce.
See #39896.
Built from https://develop.svn.wordpress.org/trunk@41597
git-svn-id: http://core.svn.wordpress.org/trunk@41430 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-26 03:38:45 -04:00
( function ( ) {
2017-11-10 16:44:55 -05:00
var removedQueryParams = [ ] , autosaveDismissed = false ;
Customize: Extend changesets to support autosave revisions with restoration notifications, and introduce a new default linear history mode for saved changesets (with a filter for opt-in to changeset branching).
* Autosaved changes made on top of `auto-draft` changesets get written on top of the `auto-draft` itself, similar to how autosaves for posts will overwrite post drafts.
* Autosaved changes made to saved changesets (e.g. `draft`, `future`) will be placed into an autosave revision for that changeset and that user.
* Opening the Customizer will now prompt the user to restore their most recent auto-draft changeset; if notification is dismissed or ignored then the auto-draft will be marked as dismissed and will not be prompted to user in a notification again.
* Customizer will no longer automatically supply the `changeset_uuid` param in the `customize.php` URL when branching changesets are not active.
* If user closes Customizer explicitly via clicking on X link, then autosave auto-draft/autosave will be dismissed so as to not be prompted again.
* If there is a changeset already saved as a `draft` or `future` (UI is forthcoming) then this changeset will now be autoloaded for the user to keep making additional changes. This is the linear model for changesets.
* To restore the previous behavior of the Customizer where each session started a new changeset, regardless of whether or not there was an existing changeset saved, there is now a `customize_changeset_branching` hook which can be filtered to return `true`.
* `wp.customize.requestChangesetUpdate()` now supports a second with options including `autosave`, `title`, and `date`.
* The window `blur` event for `customize.php` has been replaced with a `visibilitychange` event to reduce autosave requests when clicking into preview window.
* Adds `autosaved` and `branching` args to `WP_Customize_Manager`.
* The `changeset_uuid` param for `WP_Customize_Manager` is extended to recognize a `false` value which causes the Customizer to defer identifying the UUID until `after_setup_theme` in the new `WP_Customize_Manager::establish_loaded_changeset()` method.
* A new `customize_autosaved` query parameter can now be supplied which is passed into the `autosaved` arg in `WP_Customize_Manager`; this option is an opt-in to source data from the autosave revision, allowing a user to restore autosaved changes.
Props westonruter, dlh, sayedwp, JoshuaWold, melchoyce.
See #39896.
Built from https://develop.svn.wordpress.org/trunk@41597
git-svn-id: http://core.svn.wordpress.org/trunk@41430 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-26 03:38:45 -04:00
/ * *
* Obtain the URL to restore the autosave .
*
* @ returns { string } Customizer URL .
* /
function getAutosaveRestorationUrl ( ) {
var urlParser , queryParams ;
urlParser = document . createElement ( 'a' ) ;
urlParser . href = location . href ;
queryParams = api . utils . parseQueryString ( urlParser . search . substr ( 1 ) ) ;
if ( api . settings . changeset . latestAutoDraftUuid ) {
queryParams . changeset _uuid = api . settings . changeset . latestAutoDraftUuid ;
} else {
queryParams . customize _autosaved = 'on' ;
}
2017-10-09 12:04:48 -04:00
queryParams [ 'return' ] = api . settings . url [ 'return' ] ;
Customize: Extend changesets to support autosave revisions with restoration notifications, and introduce a new default linear history mode for saved changesets (with a filter for opt-in to changeset branching).
* Autosaved changes made on top of `auto-draft` changesets get written on top of the `auto-draft` itself, similar to how autosaves for posts will overwrite post drafts.
* Autosaved changes made to saved changesets (e.g. `draft`, `future`) will be placed into an autosave revision for that changeset and that user.
* Opening the Customizer will now prompt the user to restore their most recent auto-draft changeset; if notification is dismissed or ignored then the auto-draft will be marked as dismissed and will not be prompted to user in a notification again.
* Customizer will no longer automatically supply the `changeset_uuid` param in the `customize.php` URL when branching changesets are not active.
* If user closes Customizer explicitly via clicking on X link, then autosave auto-draft/autosave will be dismissed so as to not be prompted again.
* If there is a changeset already saved as a `draft` or `future` (UI is forthcoming) then this changeset will now be autoloaded for the user to keep making additional changes. This is the linear model for changesets.
* To restore the previous behavior of the Customizer where each session started a new changeset, regardless of whether or not there was an existing changeset saved, there is now a `customize_changeset_branching` hook which can be filtered to return `true`.
* `wp.customize.requestChangesetUpdate()` now supports a second with options including `autosave`, `title`, and `date`.
* The window `blur` event for `customize.php` has been replaced with a `visibilitychange` event to reduce autosave requests when clicking into preview window.
* Adds `autosaved` and `branching` args to `WP_Customize_Manager`.
* The `changeset_uuid` param for `WP_Customize_Manager` is extended to recognize a `false` value which causes the Customizer to defer identifying the UUID until `after_setup_theme` in the new `WP_Customize_Manager::establish_loaded_changeset()` method.
* A new `customize_autosaved` query parameter can now be supplied which is passed into the `autosaved` arg in `WP_Customize_Manager`; this option is an opt-in to source data from the autosave revision, allowing a user to restore autosaved changes.
Props westonruter, dlh, sayedwp, JoshuaWold, melchoyce.
See #39896.
Built from https://develop.svn.wordpress.org/trunk@41597
git-svn-id: http://core.svn.wordpress.org/trunk@41430 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-26 03:38:45 -04:00
urlParser . search = $ . param ( queryParams ) ;
return urlParser . href ;
}
/ * *
* Remove parameter from the URL .
*
* @ param { Array } params - Parameter names to remove .
* @ returns { void }
* /
function stripParamsFromLocation ( params ) {
var urlParser = document . createElement ( 'a' ) , queryParams , strippedParams = 0 ;
urlParser . href = location . href ;
queryParams = api . utils . parseQueryString ( urlParser . search . substr ( 1 ) ) ;
_ . each ( params , function ( param ) {
if ( 'undefined' !== typeof queryParams [ param ] ) {
strippedParams += 1 ;
delete queryParams [ param ] ;
}
} ) ;
if ( 0 === strippedParams ) {
return ;
}
urlParser . search = $ . param ( queryParams ) ;
history . replaceState ( { } , document . title , urlParser . href ) ;
}
2017-11-10 16:44:55 -05:00
/ * *
* Dismiss autosave .
*
* @ returns { void }
* /
function dismissAutosave ( ) {
if ( autosaveDismissed ) {
return ;
}
wp . ajax . post ( 'customize_dismiss_autosave_or_lock' , {
wp _customize : 'on' ,
customize _theme : api . settings . theme . stylesheet ,
customize _changeset _uuid : api . settings . changeset . uuid ,
nonce : api . settings . nonce . dismiss _autosave _or _lock ,
dismiss _autosave : true
} ) ;
autosaveDismissed = true ;
}
Customize: Extend changesets to support autosave revisions with restoration notifications, and introduce a new default linear history mode for saved changesets (with a filter for opt-in to changeset branching).
* Autosaved changes made on top of `auto-draft` changesets get written on top of the `auto-draft` itself, similar to how autosaves for posts will overwrite post drafts.
* Autosaved changes made to saved changesets (e.g. `draft`, `future`) will be placed into an autosave revision for that changeset and that user.
* Opening the Customizer will now prompt the user to restore their most recent auto-draft changeset; if notification is dismissed or ignored then the auto-draft will be marked as dismissed and will not be prompted to user in a notification again.
* Customizer will no longer automatically supply the `changeset_uuid` param in the `customize.php` URL when branching changesets are not active.
* If user closes Customizer explicitly via clicking on X link, then autosave auto-draft/autosave will be dismissed so as to not be prompted again.
* If there is a changeset already saved as a `draft` or `future` (UI is forthcoming) then this changeset will now be autoloaded for the user to keep making additional changes. This is the linear model for changesets.
* To restore the previous behavior of the Customizer where each session started a new changeset, regardless of whether or not there was an existing changeset saved, there is now a `customize_changeset_branching` hook which can be filtered to return `true`.
* `wp.customize.requestChangesetUpdate()` now supports a second with options including `autosave`, `title`, and `date`.
* The window `blur` event for `customize.php` has been replaced with a `visibilitychange` event to reduce autosave requests when clicking into preview window.
* Adds `autosaved` and `branching` args to `WP_Customize_Manager`.
* The `changeset_uuid` param for `WP_Customize_Manager` is extended to recognize a `false` value which causes the Customizer to defer identifying the UUID until `after_setup_theme` in the new `WP_Customize_Manager::establish_loaded_changeset()` method.
* A new `customize_autosaved` query parameter can now be supplied which is passed into the `autosaved` arg in `WP_Customize_Manager`; this option is an opt-in to source data from the autosave revision, allowing a user to restore autosaved changes.
Props westonruter, dlh, sayedwp, JoshuaWold, melchoyce.
See #39896.
Built from https://develop.svn.wordpress.org/trunk@41597
git-svn-id: http://core.svn.wordpress.org/trunk@41430 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-26 03:38:45 -04:00
/ * *
* Add notification regarding the availability of an autosave to restore .
*
* @ returns { void }
* /
function addAutosaveRestoreNotification ( ) {
var code = 'autosave_available' , onStateChange ;
// Since there is an autosave revision and the user hasn't loaded with autosaved, add notification to prompt to load autosaved version.
2017-10-04 02:48:46 -04:00
api . notifications . add ( new api . Notification ( code , {
Customize: Extend changesets to support autosave revisions with restoration notifications, and introduce a new default linear history mode for saved changesets (with a filter for opt-in to changeset branching).
* Autosaved changes made on top of `auto-draft` changesets get written on top of the `auto-draft` itself, similar to how autosaves for posts will overwrite post drafts.
* Autosaved changes made to saved changesets (e.g. `draft`, `future`) will be placed into an autosave revision for that changeset and that user.
* Opening the Customizer will now prompt the user to restore their most recent auto-draft changeset; if notification is dismissed or ignored then the auto-draft will be marked as dismissed and will not be prompted to user in a notification again.
* Customizer will no longer automatically supply the `changeset_uuid` param in the `customize.php` URL when branching changesets are not active.
* If user closes Customizer explicitly via clicking on X link, then autosave auto-draft/autosave will be dismissed so as to not be prompted again.
* If there is a changeset already saved as a `draft` or `future` (UI is forthcoming) then this changeset will now be autoloaded for the user to keep making additional changes. This is the linear model for changesets.
* To restore the previous behavior of the Customizer where each session started a new changeset, regardless of whether or not there was an existing changeset saved, there is now a `customize_changeset_branching` hook which can be filtered to return `true`.
* `wp.customize.requestChangesetUpdate()` now supports a second with options including `autosave`, `title`, and `date`.
* The window `blur` event for `customize.php` has been replaced with a `visibilitychange` event to reduce autosave requests when clicking into preview window.
* Adds `autosaved` and `branching` args to `WP_Customize_Manager`.
* The `changeset_uuid` param for `WP_Customize_Manager` is extended to recognize a `false` value which causes the Customizer to defer identifying the UUID until `after_setup_theme` in the new `WP_Customize_Manager::establish_loaded_changeset()` method.
* A new `customize_autosaved` query parameter can now be supplied which is passed into the `autosaved` arg in `WP_Customize_Manager`; this option is an opt-in to source data from the autosave revision, allowing a user to restore autosaved changes.
Props westonruter, dlh, sayedwp, JoshuaWold, melchoyce.
See #39896.
Built from https://develop.svn.wordpress.org/trunk@41597
git-svn-id: http://core.svn.wordpress.org/trunk@41430 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-26 03:38:45 -04:00
message : api . l10n . autosaveNotice ,
type : 'warning' ,
dismissible : true ,
render : function ( ) {
var li = api . Notification . prototype . render . call ( this ) , link ;
// Handle clicking on restoration link.
link = li . find ( 'a' ) ;
link . prop ( 'href' , getAutosaveRestorationUrl ( ) ) ;
link . on ( 'click' , function ( event ) {
event . preventDefault ( ) ;
location . replace ( getAutosaveRestorationUrl ( ) ) ;
} ) ;
// Handle dismissal of notice.
2017-11-10 16:44:55 -05:00
li . find ( '.notice-dismiss' ) . on ( 'click' , dismissAutosave ) ;
Customize: Extend changesets to support autosave revisions with restoration notifications, and introduce a new default linear history mode for saved changesets (with a filter for opt-in to changeset branching).
* Autosaved changes made on top of `auto-draft` changesets get written on top of the `auto-draft` itself, similar to how autosaves for posts will overwrite post drafts.
* Autosaved changes made to saved changesets (e.g. `draft`, `future`) will be placed into an autosave revision for that changeset and that user.
* Opening the Customizer will now prompt the user to restore their most recent auto-draft changeset; if notification is dismissed or ignored then the auto-draft will be marked as dismissed and will not be prompted to user in a notification again.
* Customizer will no longer automatically supply the `changeset_uuid` param in the `customize.php` URL when branching changesets are not active.
* If user closes Customizer explicitly via clicking on X link, then autosave auto-draft/autosave will be dismissed so as to not be prompted again.
* If there is a changeset already saved as a `draft` or `future` (UI is forthcoming) then this changeset will now be autoloaded for the user to keep making additional changes. This is the linear model for changesets.
* To restore the previous behavior of the Customizer where each session started a new changeset, regardless of whether or not there was an existing changeset saved, there is now a `customize_changeset_branching` hook which can be filtered to return `true`.
* `wp.customize.requestChangesetUpdate()` now supports a second with options including `autosave`, `title`, and `date`.
* The window `blur` event for `customize.php` has been replaced with a `visibilitychange` event to reduce autosave requests when clicking into preview window.
* Adds `autosaved` and `branching` args to `WP_Customize_Manager`.
* The `changeset_uuid` param for `WP_Customize_Manager` is extended to recognize a `false` value which causes the Customizer to defer identifying the UUID until `after_setup_theme` in the new `WP_Customize_Manager::establish_loaded_changeset()` method.
* A new `customize_autosaved` query parameter can now be supplied which is passed into the `autosaved` arg in `WP_Customize_Manager`; this option is an opt-in to source data from the autosave revision, allowing a user to restore autosaved changes.
Props westonruter, dlh, sayedwp, JoshuaWold, melchoyce.
See #39896.
Built from https://develop.svn.wordpress.org/trunk@41597
git-svn-id: http://core.svn.wordpress.org/trunk@41430 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-26 03:38:45 -04:00
return li ;
}
} ) ) ;
// Remove the notification once the user starts making changes.
onStateChange = function ( ) {
2017-11-10 16:44:55 -05:00
dismissAutosave ( ) ;
Customize: Extend changesets to support autosave revisions with restoration notifications, and introduce a new default linear history mode for saved changesets (with a filter for opt-in to changeset branching).
* Autosaved changes made on top of `auto-draft` changesets get written on top of the `auto-draft` itself, similar to how autosaves for posts will overwrite post drafts.
* Autosaved changes made to saved changesets (e.g. `draft`, `future`) will be placed into an autosave revision for that changeset and that user.
* Opening the Customizer will now prompt the user to restore their most recent auto-draft changeset; if notification is dismissed or ignored then the auto-draft will be marked as dismissed and will not be prompted to user in a notification again.
* Customizer will no longer automatically supply the `changeset_uuid` param in the `customize.php` URL when branching changesets are not active.
* If user closes Customizer explicitly via clicking on X link, then autosave auto-draft/autosave will be dismissed so as to not be prompted again.
* If there is a changeset already saved as a `draft` or `future` (UI is forthcoming) then this changeset will now be autoloaded for the user to keep making additional changes. This is the linear model for changesets.
* To restore the previous behavior of the Customizer where each session started a new changeset, regardless of whether or not there was an existing changeset saved, there is now a `customize_changeset_branching` hook which can be filtered to return `true`.
* `wp.customize.requestChangesetUpdate()` now supports a second with options including `autosave`, `title`, and `date`.
* The window `blur` event for `customize.php` has been replaced with a `visibilitychange` event to reduce autosave requests when clicking into preview window.
* Adds `autosaved` and `branching` args to `WP_Customize_Manager`.
* The `changeset_uuid` param for `WP_Customize_Manager` is extended to recognize a `false` value which causes the Customizer to defer identifying the UUID until `after_setup_theme` in the new `WP_Customize_Manager::establish_loaded_changeset()` method.
* A new `customize_autosaved` query parameter can now be supplied which is passed into the `autosaved` arg in `WP_Customize_Manager`; this option is an opt-in to source data from the autosave revision, allowing a user to restore autosaved changes.
Props westonruter, dlh, sayedwp, JoshuaWold, melchoyce.
See #39896.
Built from https://develop.svn.wordpress.org/trunk@41597
git-svn-id: http://core.svn.wordpress.org/trunk@41430 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-26 03:38:45 -04:00
api . notifications . remove ( code ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
api . unbind ( 'change' , onStateChange ) ;
Customize: Extend changesets to support autosave revisions with restoration notifications, and introduce a new default linear history mode for saved changesets (with a filter for opt-in to changeset branching).
* Autosaved changes made on top of `auto-draft` changesets get written on top of the `auto-draft` itself, similar to how autosaves for posts will overwrite post drafts.
* Autosaved changes made to saved changesets (e.g. `draft`, `future`) will be placed into an autosave revision for that changeset and that user.
* Opening the Customizer will now prompt the user to restore their most recent auto-draft changeset; if notification is dismissed or ignored then the auto-draft will be marked as dismissed and will not be prompted to user in a notification again.
* Customizer will no longer automatically supply the `changeset_uuid` param in the `customize.php` URL when branching changesets are not active.
* If user closes Customizer explicitly via clicking on X link, then autosave auto-draft/autosave will be dismissed so as to not be prompted again.
* If there is a changeset already saved as a `draft` or `future` (UI is forthcoming) then this changeset will now be autoloaded for the user to keep making additional changes. This is the linear model for changesets.
* To restore the previous behavior of the Customizer where each session started a new changeset, regardless of whether or not there was an existing changeset saved, there is now a `customize_changeset_branching` hook which can be filtered to return `true`.
* `wp.customize.requestChangesetUpdate()` now supports a second with options including `autosave`, `title`, and `date`.
* The window `blur` event for `customize.php` has been replaced with a `visibilitychange` event to reduce autosave requests when clicking into preview window.
* Adds `autosaved` and `branching` args to `WP_Customize_Manager`.
* The `changeset_uuid` param for `WP_Customize_Manager` is extended to recognize a `false` value which causes the Customizer to defer identifying the UUID until `after_setup_theme` in the new `WP_Customize_Manager::establish_loaded_changeset()` method.
* A new `customize_autosaved` query parameter can now be supplied which is passed into the `autosaved` arg in `WP_Customize_Manager`; this option is an opt-in to source data from the autosave revision, allowing a user to restore autosaved changes.
Props westonruter, dlh, sayedwp, JoshuaWold, melchoyce.
See #39896.
Built from https://develop.svn.wordpress.org/trunk@41597
git-svn-id: http://core.svn.wordpress.org/trunk@41430 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-26 03:38:45 -04:00
api . state ( 'changesetStatus' ) . unbind ( onStateChange ) ;
} ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
api . bind ( 'change' , onStateChange ) ;
Customize: Extend changesets to support autosave revisions with restoration notifications, and introduce a new default linear history mode for saved changesets (with a filter for opt-in to changeset branching).
* Autosaved changes made on top of `auto-draft` changesets get written on top of the `auto-draft` itself, similar to how autosaves for posts will overwrite post drafts.
* Autosaved changes made to saved changesets (e.g. `draft`, `future`) will be placed into an autosave revision for that changeset and that user.
* Opening the Customizer will now prompt the user to restore their most recent auto-draft changeset; if notification is dismissed or ignored then the auto-draft will be marked as dismissed and will not be prompted to user in a notification again.
* Customizer will no longer automatically supply the `changeset_uuid` param in the `customize.php` URL when branching changesets are not active.
* If user closes Customizer explicitly via clicking on X link, then autosave auto-draft/autosave will be dismissed so as to not be prompted again.
* If there is a changeset already saved as a `draft` or `future` (UI is forthcoming) then this changeset will now be autoloaded for the user to keep making additional changes. This is the linear model for changesets.
* To restore the previous behavior of the Customizer where each session started a new changeset, regardless of whether or not there was an existing changeset saved, there is now a `customize_changeset_branching` hook which can be filtered to return `true`.
* `wp.customize.requestChangesetUpdate()` now supports a second with options including `autosave`, `title`, and `date`.
* The window `blur` event for `customize.php` has been replaced with a `visibilitychange` event to reduce autosave requests when clicking into preview window.
* Adds `autosaved` and `branching` args to `WP_Customize_Manager`.
* The `changeset_uuid` param for `WP_Customize_Manager` is extended to recognize a `false` value which causes the Customizer to defer identifying the UUID until `after_setup_theme` in the new `WP_Customize_Manager::establish_loaded_changeset()` method.
* A new `customize_autosaved` query parameter can now be supplied which is passed into the `autosaved` arg in `WP_Customize_Manager`; this option is an opt-in to source data from the autosave revision, allowing a user to restore autosaved changes.
Props westonruter, dlh, sayedwp, JoshuaWold, melchoyce.
See #39896.
Built from https://develop.svn.wordpress.org/trunk@41597
git-svn-id: http://core.svn.wordpress.org/trunk@41430 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-26 03:38:45 -04:00
api . state ( 'changesetStatus' ) . bind ( onStateChange ) ;
}
if ( api . settings . changeset . autosaved ) {
2017-10-11 01:57:48 -04:00
api . state ( 'saved' ) . set ( false ) ;
2017-11-03 13:37:52 -04:00
removedQueryParams . push ( 'customize_autosaved' ) ;
}
if ( ! api . settings . changeset . branching && ( ! api . settings . changeset . status || 'auto-draft' === api . settings . changeset . status ) ) {
removedQueryParams . push ( 'changeset_uuid' ) ; // Remove UUID when restoring autosave auto-draft.
}
if ( removedQueryParams . length > 0 ) {
stripParamsFromLocation ( removedQueryParams ) ;
Customize: Extend changesets to support autosave revisions with restoration notifications, and introduce a new default linear history mode for saved changesets (with a filter for opt-in to changeset branching).
* Autosaved changes made on top of `auto-draft` changesets get written on top of the `auto-draft` itself, similar to how autosaves for posts will overwrite post drafts.
* Autosaved changes made to saved changesets (e.g. `draft`, `future`) will be placed into an autosave revision for that changeset and that user.
* Opening the Customizer will now prompt the user to restore their most recent auto-draft changeset; if notification is dismissed or ignored then the auto-draft will be marked as dismissed and will not be prompted to user in a notification again.
* Customizer will no longer automatically supply the `changeset_uuid` param in the `customize.php` URL when branching changesets are not active.
* If user closes Customizer explicitly via clicking on X link, then autosave auto-draft/autosave will be dismissed so as to not be prompted again.
* If there is a changeset already saved as a `draft` or `future` (UI is forthcoming) then this changeset will now be autoloaded for the user to keep making additional changes. This is the linear model for changesets.
* To restore the previous behavior of the Customizer where each session started a new changeset, regardless of whether or not there was an existing changeset saved, there is now a `customize_changeset_branching` hook which can be filtered to return `true`.
* `wp.customize.requestChangesetUpdate()` now supports a second with options including `autosave`, `title`, and `date`.
* The window `blur` event for `customize.php` has been replaced with a `visibilitychange` event to reduce autosave requests when clicking into preview window.
* Adds `autosaved` and `branching` args to `WP_Customize_Manager`.
* The `changeset_uuid` param for `WP_Customize_Manager` is extended to recognize a `false` value which causes the Customizer to defer identifying the UUID until `after_setup_theme` in the new `WP_Customize_Manager::establish_loaded_changeset()` method.
* A new `customize_autosaved` query parameter can now be supplied which is passed into the `autosaved` arg in `WP_Customize_Manager`; this option is an opt-in to source data from the autosave revision, allowing a user to restore autosaved changes.
Props westonruter, dlh, sayedwp, JoshuaWold, melchoyce.
See #39896.
Built from https://develop.svn.wordpress.org/trunk@41597
git-svn-id: http://core.svn.wordpress.org/trunk@41430 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-26 03:38:45 -04:00
}
if ( api . settings . changeset . latestAutoDraftUuid || api . settings . changeset . hasAutosaveRevision ) {
addAutosaveRestoreNotification ( ) ;
}
} ) ( ) ;
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
// Check if preview url is valid and load the preview frame.
if ( api . previewer . previewUrl ( ) ) {
api . previewer . refresh ( ) ;
} else {
api . previewer . previewUrl ( api . settings . url . home ) ;
}
2012-08-22 20:04:18 -04:00
// Button bindings.
2014-07-08 13:04:15 -04:00
saveBtn . click ( function ( event ) {
2014-07-09 16:58:15 -04:00
api . previewer . save ( ) ;
2012-08-22 20:04:18 -04:00
event . preventDefault ( ) ;
2012-11-06 09:47:25 -05:00
} ) . keydown ( function ( event ) {
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
if ( 9 === event . which ) { // Tab.
2012-11-06 09:47:25 -05:00
return ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
}
if ( 13 === event . which ) { // Enter.
2014-07-09 16:58:15 -04:00
api . previewer . save ( ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
}
2012-11-06 09:47:25 -05:00
event . preventDefault ( ) ;
} ) ;
2012-11-09 00:44:00 -05:00
2014-07-08 14:19:14 -04:00
closeBtn . keydown ( function ( event ) {
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
if ( 9 === event . which ) { // Tab.
2012-11-06 09:47:25 -05:00
return ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
}
if ( 13 === event . which ) { // Enter.
2013-08-15 12:25:12 -04:00
this . click ( ) ;
Customize: Introduce drafting and scheduling for Customizer changesets.
* Incorporates code from the Customize Snapshots and Customize Posts feature plugins.
* Adds a new Publish Settings section for managing the changeset status, scheduled date, and frontend preview link.
* Updates Publish button to reflect the status selected in the Publish Settings (including Save Draft and Schedule).
* Deactivates the Themes section when a non-publish status selected, and deactivates the Publish Settings section when previewing a theme switch.
* Introduces an `outer` section type (`wp.customize.OuterSection` in JS) for the Publish Settings section to use and for available widgets and available nav menu panels to use in the future. These sections can be expanded while other sections are expanded.
* Introduces `WP_Customize_Date_Time_Control` in PHP and `wp.customize.DateTimeControl` in JS for managing a date/time value.
* Keeps track of scheduled time and proactively publish from the client when the time arrives, as opposed to waiting for WP Cron.
* Auto-publishes a scheduled changeset when attempting to access one that missed its schedule.
* Starts a new changeset if attempting to save a changeset that was previously publish.
* Adds `force` arg to `requestChangesetUpdate()` to force an update request even when there are no pending changes.
* Adds utils methods for `getCurrentTimestamp` and `getRemainingTime`.
* Adds new state values for `selectedChangesetStatus`, `changesetDate`, `selectedChangesetDate`.
* Fixes logic for when to short-circuit check to close Customizer when there are unsaved changes.
* Adds getter methods for `autosaved` and `branching` parameters, with the latter applying the `customize_changeset_branching` filter.
* Call to `establish_loaded_changeset` on the fly when `changeset_uuid()` is called if no changeset UUID was specififed.
* De-duplicates logic for dismissing auto-draft changesets.
* Includes unit tests.
Builds on [41597].
Props sayedwp, westonruter, melchoyce, JoshuaWold, folletto, stubgo, karmatosed, dlh, paaljoachim, afercia, johnregan3, utkarshpatel, valendesigns.
See #30937.
Fixes #39896, #28721, #39275.
Built from https://develop.svn.wordpress.org/trunk@41626
git-svn-id: http://core.svn.wordpress.org/trunk@41461 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-27 18:25:46 -04:00
}
2012-11-06 09:47:25 -05:00
event . preventDefault ( ) ;
2012-08-22 20:04:18 -04:00
} ) ;
2015-07-10 17:22:26 -04:00
$ ( '.collapse-sidebar' ) . on ( 'click' , function ( ) {
2016-09-01 01:55:27 -04:00
api . state ( 'paneVisible' ) . set ( ! api . state ( 'paneVisible' ) . get ( ) ) ;
} ) ;
api . state ( 'paneVisible' ) . bind ( function ( paneVisible ) {
2016-10-30 00:23:44 -04:00
overlay . toggleClass ( 'preview-only' , ! paneVisible ) ;
2016-09-01 01:55:27 -04:00
overlay . toggleClass ( 'expanded' , paneVisible ) ;
overlay . toggleClass ( 'collapsed' , ! paneVisible ) ;
if ( ! paneVisible ) {
$ ( '.collapse-sidebar' ) . attr ( { 'aria-expanded' : 'false' , 'aria-label' : api . l10n . expandSidebar } ) ;
2015-07-10 17:22:26 -04:00
} else {
2016-09-01 01:55:27 -04:00
$ ( '.collapse-sidebar' ) . attr ( { 'aria-expanded' : 'true' , 'aria-label' : api . l10n . collapseSidebar } ) ;
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
}
2012-08-22 20:04:18 -04:00
} ) ;
2016-05-02 15:52:28 -04:00
// Keyboard shortcuts - esc to exit section/panel.
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
body . on ( 'keydown' , function ( event ) {
2016-05-02 15:52:28 -04:00
var collapsedObject , expandedControls = [ ] , expandedSections = [ ] , expandedPanels = [ ] ;
if ( 27 !== event . which ) { // Esc.
return ;
}
2016-11-04 13:08:33 -04:00
/ *
* Abort if the event target is not the body ( the default ) and not inside of # customize - controls .
* This ensures that ESC meant to collapse a modal dialog or a TinyMCE toolbar won ' t collapse something else .
* /
if ( ! $ ( event . target ) . is ( 'body' ) && ! $ . contains ( $ ( '#customize-controls' ) [ 0 ] , event . target ) ) {
return ;
}
2016-05-02 15:52:28 -04:00
// Check for expanded expandable controls (e.g. widgets and nav menus items), sections, and panels.
api . control . each ( function ( control ) {
if ( control . expanded && control . expanded ( ) && _ . isFunction ( control . collapse ) ) {
expandedControls . push ( control ) ;
}
} ) ;
api . section . each ( function ( section ) {
if ( section . expanded ( ) ) {
expandedSections . push ( section ) ;
}
} ) ;
api . panel . each ( function ( panel ) {
if ( panel . expanded ( ) ) {
expandedPanels . push ( panel ) ;
}
} ) ;
// Skip collapsing expanded controls if there are no expanded sections.
if ( expandedControls . length > 0 && 0 === expandedSections . length ) {
expandedControls . length = 0 ;
}
// Collapse the most granular expanded object.
collapsedObject = expandedControls [ 0 ] || expandedSections [ 0 ] || expandedPanels [ 0 ] ;
if ( collapsedObject ) {
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
if ( 'themes' === collapsedObject . params . type ) {
// Themes panel or section.
if ( body . hasClass ( 'modal-open' ) ) {
collapsedObject . closeDetails ( ) ;
2017-09-29 17:52:45 -04:00
} else if ( api . panel . has ( 'themes' ) ) {
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
// If we're collapsing a section, collapse the panel also.
2017-09-29 17:52:45 -04:00
api . panel ( 'themes' ) . collapse ( ) ;
Customize: Introduce a new experience for discovering, installing, and previewing themes within the customizer.
Unify the theme-browsing and theme-customization experiences by introducing a comprehensive theme browser and installer directly accessible in the customizer. Replaces the customizer theme switcher with a full-screen panel for discovering/browsing and installing themes available on WordPress.org. Themes can now be installed and previewed directly in the customizer without entering the wp-admin context. Also includes an extensible framework for browsing and installing themes from other sources.
Also includes CSS auto-prefixing added via `grunt precommit:css`.
For details, see: https://make.wordpress.org/core/2016/10/03/feature-proposal-a-new-experience-for-discovering-installing-and-previewing-themes-in-the-customizer/
Previously [38813] but reverted in [39140].
Fixes #37661, #34843, #38666.
Props celloexpressions, folletto, westonruter, karmatosed, melchoyce, afercia.
Built from https://develop.svn.wordpress.org/trunk@41648
git-svn-id: http://core.svn.wordpress.org/trunk@41482 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-29 16:13:50 -04:00
}
return ;
}
2016-05-02 15:52:28 -04:00
collapsedObject . collapse ( ) ;
event . preventDefault ( ) ;
}
} ) ;
2016-04-17 11:41:27 -04:00
$ ( '.customize-controls-preview-toggle' ) . on ( 'click' , function ( ) {
2016-10-30 00:23:44 -04:00
api . state ( 'paneVisible' ) . set ( ! api . state ( 'paneVisible' ) . get ( ) ) ;
2015-02-09 07:36:28 -05:00
} ) ;
2016-10-21 02:37:30 -04:00
/ *
* Sticky header feature .
* /
( function initStickyHeaders ( ) {
var parentContainer = $ ( '.wp-full-overlay-sidebar-content' ) ,
2017-10-02 14:55:47 -04:00
changeContainer , updateHeaderHeight , releaseStickyHeader , resetStickyHeader , positionStickyHeader ,
2016-10-21 02:37:30 -04:00
activeHeader , lastScrollTop ;
2016-11-23 01:05:32 -05:00
/ * *
* Determine which panel or section is currently expanded .
*
* @ since 4.7 . 0
* @ access private
*
* @ param { wp . customize . Panel | wp . customize . Section } container Construct .
* @ returns { void }
* /
2016-10-21 02:37:30 -04:00
changeContainer = function ( container ) {
var newInstance = container ,
expandedSection = api . state ( 'expandedSection' ) . get ( ) ,
expandedPanel = api . state ( 'expandedPanel' ) . get ( ) ,
headerElement ;
if ( activeHeader && activeHeader . element ) {
2017-10-02 14:55:47 -04:00
// Release previously active header element.
2016-10-21 02:37:30 -04:00
releaseStickyHeader ( activeHeader . element ) ;
2017-10-02 14:55:47 -04:00
// Remove event listener in the previous panel or section.
activeHeader . element . find ( '.description' ) . off ( 'toggled' , updateHeaderHeight ) ;
2016-10-21 02:37:30 -04:00
}
if ( ! newInstance ) {
if ( ! expandedSection && expandedPanel && expandedPanel . contentContainer ) {
newInstance = expandedPanel ;
} else if ( ! expandedPanel && expandedSection && expandedSection . contentContainer ) {
newInstance = expandedSection ;
} else {
activeHeader = false ;
return ;
}
}
headerElement = newInstance . contentContainer . find ( '.customize-section-title, .panel-meta' ) . first ( ) ;
if ( headerElement . length ) {
activeHeader = {
instance : newInstance ,
element : headerElement ,
parent : headerElement . closest ( '.customize-pane-child' ) ,
2017-10-02 14:55:47 -04:00
height : headerElement . outerHeight ( )
2016-10-21 02:37:30 -04:00
} ;
2017-10-02 14:55:47 -04:00
// Update header height whenever help text is expanded or collapsed.
activeHeader . element . find ( '.description' ) . on ( 'toggled' , updateHeaderHeight ) ;
2016-10-21 02:37:30 -04:00
if ( expandedSection ) {
resetStickyHeader ( activeHeader . element , activeHeader . parent ) ;
}
} else {
activeHeader = false ;
}
} ;
api . state ( 'expandedSection' ) . bind ( changeContainer ) ;
api . state ( 'expandedPanel' ) . bind ( changeContainer ) ;
// Throttled scroll event handler.
parentContainer . on ( 'scroll' , _ . throttle ( function ( ) {
if ( ! activeHeader ) {
return ;
}
var scrollTop = parentContainer . scrollTop ( ) ,
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
scrollDirection ;
2016-10-21 02:37:30 -04: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
if ( ! lastScrollTop ) {
scrollDirection = 1 ;
} else {
if ( scrollTop === lastScrollTop ) {
scrollDirection = 0 ;
} else if ( scrollTop > lastScrollTop ) {
scrollDirection = 1 ;
} else {
scrollDirection = - 1 ;
}
}
2016-10-21 02:37:30 -04:00
lastScrollTop = scrollTop ;
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
if ( 0 !== scrollDirection ) {
positionStickyHeader ( activeHeader , scrollTop , scrollDirection ) ;
}
2016-10-21 02:37:30 -04:00
} , 8 ) ) ;
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
// Update header position on sidebar layout change.
api . notifications . bind ( 'sidebarTopUpdated' , function ( ) {
if ( activeHeader && activeHeader . element . hasClass ( 'is-sticky' ) ) {
activeHeader . element . css ( 'top' , parentContainer . css ( 'top' ) ) ;
}
} ) ;
2016-10-21 02:37:30 -04:00
// Release header element if it is sticky.
releaseStickyHeader = function ( headerElement ) {
if ( ! headerElement . hasClass ( 'is-sticky' ) ) {
return ;
}
headerElement
. removeClass ( 'is-sticky' )
. addClass ( 'maybe-sticky is-in-view' )
. css ( 'top' , parentContainer . scrollTop ( ) + 'px' ) ;
} ;
// Reset position of the sticky header.
resetStickyHeader = function ( headerElement , headerParent ) {
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
if ( headerElement . hasClass ( 'is-in-view' ) ) {
headerElement
. removeClass ( 'maybe-sticky is-in-view' )
. css ( {
width : '' ,
top : ''
} ) ;
headerParent . css ( 'padding-top' , '' ) ;
}
2016-10-21 02:37:30 -04:00
} ;
2016-11-23 01:05:32 -05:00
/ * *
2017-10-02 14:55:47 -04:00
* Update active header height .
2016-11-23 01:05:32 -05:00
*
* @ since 4.7 . 0
* @ access private
*
2017-10-02 14:55:47 -04:00
* @ returns { void }
2016-11-23 01:05:32 -05:00
* /
2017-10-02 14:55:47 -04:00
updateHeaderHeight = function ( ) {
activeHeader . height = activeHeader . element . outerHeight ( ) ;
2016-10-21 02:37:30 -04:00
} ;
2016-11-23 01:05:32 -05:00
/ * *
* Reposition header on throttled ` scroll ` event .
*
* @ since 4.7 . 0
* @ access private
*
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
* @ param { object } header - Header .
* @ param { number } scrollTop - Scroll top .
* @ param { number } scrollDirection - Scroll direction , negative number being up and positive being down .
2016-11-23 01:05:32 -05:00
* @ returns { void }
* /
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
positionStickyHeader = function ( header , scrollTop , scrollDirection ) {
2016-10-21 02:37:30 -04:00
var headerElement = header . element ,
headerParent = header . parent ,
headerHeight = header . height ,
headerTop = parseInt ( headerElement . css ( 'top' ) , 10 ) ,
maybeSticky = headerElement . hasClass ( 'maybe-sticky' ) ,
isSticky = headerElement . hasClass ( 'is-sticky' ) ,
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
isInView = headerElement . hasClass ( 'is-in-view' ) ,
isScrollingUp = ( - 1 === scrollDirection ) ;
2016-10-21 02:37:30 -04:00
// When scrolling down, gradually hide sticky header.
if ( ! isScrollingUp ) {
if ( isSticky ) {
headerTop = scrollTop ;
headerElement
. removeClass ( 'is-sticky' )
. css ( {
top : headerTop + 'px' ,
width : ''
} ) ;
}
if ( isInView && scrollTop > headerTop + headerHeight ) {
headerElement . removeClass ( 'is-in-view' ) ;
headerParent . css ( 'padding-top' , '' ) ;
}
return ;
}
// Scrolling up.
if ( ! maybeSticky && scrollTop >= headerHeight ) {
maybeSticky = true ;
headerElement . addClass ( 'maybe-sticky' ) ;
} else if ( 0 === scrollTop ) {
// Reset header in base position.
headerElement
. removeClass ( 'maybe-sticky is-in-view is-sticky' )
. css ( {
top : '' ,
width : ''
} ) ;
headerParent . css ( 'padding-top' , '' ) ;
return ;
}
if ( isInView && ! isSticky ) {
// Header is in the view but is not yet sticky.
if ( headerTop >= scrollTop ) {
// Header is fully visible.
headerElement
. addClass ( 'is-sticky' )
. css ( {
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
top : parentContainer . css ( 'top' ) ,
2016-10-21 02:37:30 -04:00
width : headerParent . outerWidth ( ) + 'px'
} ) ;
}
} else if ( maybeSticky && ! isInView ) {
// Header is out of the view.
headerElement
. addClass ( 'is-in-view' )
. css ( 'top' , ( scrollTop - headerHeight ) + 'px' ) ;
headerParent . css ( 'padding-top' , headerHeight + 'px' ) ;
}
} ;
} ( ) ) ;
2017-10-13 17:21:55 -04:00
// Previewed device bindings. (The api.previewedDevice property is how this Value was first introduced, but since it has moved to api.state.)
api . previewedDevice = api . state ( 'previewedDevice' ) ;
2016-02-15 20:57:26 -05:00
// Set the default device.
api . bind ( 'ready' , function ( ) {
_ . find ( api . settings . previewableDevices , function ( value , key ) {
if ( true === value [ 'default' ] ) {
api . previewedDevice . set ( key ) ;
return true ;
}
} ) ;
} ) ;
// Set the toggled device.
footerActions . find ( '.devices button' ) . on ( 'click' , function ( event ) {
api . previewedDevice . set ( $ ( event . currentTarget ) . data ( 'device' ) ) ;
} ) ;
// Bind device changes.
api . previewedDevice . bind ( function ( newDevice ) {
var overlay = $ ( '.wp-full-overlay' ) ,
devices = '' ;
footerActions . find ( '.devices button' )
. removeClass ( 'active' )
. attr ( 'aria-pressed' , false ) ;
footerActions . find ( '.devices .preview-' + newDevice )
. addClass ( 'active' )
. attr ( 'aria-pressed' , true ) ;
$ . each ( api . settings . previewableDevices , function ( device ) {
devices += ' preview-' + device ;
} ) ;
overlay
. removeClass ( devices )
. addClass ( 'preview-' + newDevice ) ;
} ) ;
2014-07-08 15:53:15 -04:00
// Bind site title display to the corresponding field.
if ( title . length ) {
2016-01-23 18:15:27 -05:00
api ( 'blogname' , function ( setting ) {
var updateTitle = function ( ) {
title . text ( $ . trim ( setting ( ) ) || api . l10n . untitledBlogName ) ;
} ;
setting . bind ( updateTitle ) ;
updateTitle ( ) ;
2014-07-08 15:53:15 -04:00
} ) ;
}
2015-09-05 15:53:24 -04:00
/ *
* Create a postMessage connection with a parent frame ,
* in case the Customizer frame was opened with the Customize loader .
*
* @ see wp . customize . Loader
* /
2012-08-22 20:04:18 -04:00
parent = new api . Messenger ( {
url : api . settings . url . parent ,
channel : 'loader'
} ) ;
Customize: Extend changesets to support autosave revisions with restoration notifications, and introduce a new default linear history mode for saved changesets (with a filter for opt-in to changeset branching).
* Autosaved changes made on top of `auto-draft` changesets get written on top of the `auto-draft` itself, similar to how autosaves for posts will overwrite post drafts.
* Autosaved changes made to saved changesets (e.g. `draft`, `future`) will be placed into an autosave revision for that changeset and that user.
* Opening the Customizer will now prompt the user to restore their most recent auto-draft changeset; if notification is dismissed or ignored then the auto-draft will be marked as dismissed and will not be prompted to user in a notification again.
* Customizer will no longer automatically supply the `changeset_uuid` param in the `customize.php` URL when branching changesets are not active.
* If user closes Customizer explicitly via clicking on X link, then autosave auto-draft/autosave will be dismissed so as to not be prompted again.
* If there is a changeset already saved as a `draft` or `future` (UI is forthcoming) then this changeset will now be autoloaded for the user to keep making additional changes. This is the linear model for changesets.
* To restore the previous behavior of the Customizer where each session started a new changeset, regardless of whether or not there was an existing changeset saved, there is now a `customize_changeset_branching` hook which can be filtered to return `true`.
* `wp.customize.requestChangesetUpdate()` now supports a second with options including `autosave`, `title`, and `date`.
* The window `blur` event for `customize.php` has been replaced with a `visibilitychange` event to reduce autosave requests when clicking into preview window.
* Adds `autosaved` and `branching` args to `WP_Customize_Manager`.
* The `changeset_uuid` param for `WP_Customize_Manager` is extended to recognize a `false` value which causes the Customizer to defer identifying the UUID until `after_setup_theme` in the new `WP_Customize_Manager::establish_loaded_changeset()` method.
* A new `customize_autosaved` query parameter can now be supplied which is passed into the `autosaved` arg in `WP_Customize_Manager`; this option is an opt-in to source data from the autosave revision, allowing a user to restore autosaved changes.
Props westonruter, dlh, sayedwp, JoshuaWold, melchoyce.
See #39896.
Built from https://develop.svn.wordpress.org/trunk@41597
git-svn-id: http://core.svn.wordpress.org/trunk@41430 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-26 03:38:45 -04:00
// Handle exiting of Customizer.
( function ( ) {
var isInsideIframe = false ;
function isCleanState ( ) {
2017-10-19 13:42:54 -04:00
var defaultChangesetStatus ;
2017-10-12 01:17:49 -04:00
/ *
* Handle special case of previewing theme switch since some settings ( for nav menus and widgets )
* are pre - dirty and non - active themes can only ever be auto - drafts .
* /
if ( ! api . state ( 'activated' ) . get ( ) ) {
return 0 === api . _latestRevision ;
}
2017-10-19 13:42:54 -04:00
// Dirty if the changeset status has been changed but not saved yet.
defaultChangesetStatus = api . state ( 'changesetStatus' ) . get ( ) ;
if ( '' === defaultChangesetStatus || 'auto-draft' === defaultChangesetStatus ) {
defaultChangesetStatus = 'publish' ;
}
if ( api . state ( 'selectedChangesetStatus' ) . get ( ) !== defaultChangesetStatus ) {
return false ;
}
// Dirty if scheduled but the changeset date hasn't been saved yet.
if ( 'future' === api . state ( 'selectedChangesetStatus' ) . get ( ) && api . state ( 'selectedChangesetDate' ) . get ( ) !== api . state ( 'changesetDate' ) . get ( ) ) {
return false ;
}
Customize: Extend changesets to support autosave revisions with restoration notifications, and introduce a new default linear history mode for saved changesets (with a filter for opt-in to changeset branching).
* Autosaved changes made on top of `auto-draft` changesets get written on top of the `auto-draft` itself, similar to how autosaves for posts will overwrite post drafts.
* Autosaved changes made to saved changesets (e.g. `draft`, `future`) will be placed into an autosave revision for that changeset and that user.
* Opening the Customizer will now prompt the user to restore their most recent auto-draft changeset; if notification is dismissed or ignored then the auto-draft will be marked as dismissed and will not be prompted to user in a notification again.
* Customizer will no longer automatically supply the `changeset_uuid` param in the `customize.php` URL when branching changesets are not active.
* If user closes Customizer explicitly via clicking on X link, then autosave auto-draft/autosave will be dismissed so as to not be prompted again.
* If there is a changeset already saved as a `draft` or `future` (UI is forthcoming) then this changeset will now be autoloaded for the user to keep making additional changes. This is the linear model for changesets.
* To restore the previous behavior of the Customizer where each session started a new changeset, regardless of whether or not there was an existing changeset saved, there is now a `customize_changeset_branching` hook which can be filtered to return `true`.
* `wp.customize.requestChangesetUpdate()` now supports a second with options including `autosave`, `title`, and `date`.
* The window `blur` event for `customize.php` has been replaced with a `visibilitychange` event to reduce autosave requests when clicking into preview window.
* Adds `autosaved` and `branching` args to `WP_Customize_Manager`.
* The `changeset_uuid` param for `WP_Customize_Manager` is extended to recognize a `false` value which causes the Customizer to defer identifying the UUID until `after_setup_theme` in the new `WP_Customize_Manager::establish_loaded_changeset()` method.
* A new `customize_autosaved` query parameter can now be supplied which is passed into the `autosaved` arg in `WP_Customize_Manager`; this option is an opt-in to source data from the autosave revision, allowing a user to restore autosaved changes.
Props westonruter, dlh, sayedwp, JoshuaWold, melchoyce.
See #39896.
Built from https://develop.svn.wordpress.org/trunk@41597
git-svn-id: http://core.svn.wordpress.org/trunk@41430 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-26 03:38:45 -04:00
return api . state ( 'saved' ) . get ( ) && 'auto-draft' !== api . state ( 'changesetStatus' ) . get ( ) ;
}
/ *
* If we receive a 'back' event , we ' re inside an iframe .
* Send any clicks to the 'Return' link to the parent page .
* /
parent . bind ( 'back' , function ( ) {
isInsideIframe = true ;
} ) ;
2017-10-01 23:37:46 -04:00
function startPromptingBeforeUnload ( ) {
api . unbind ( 'change' , startPromptingBeforeUnload ) ;
2017-10-19 13:42:54 -04:00
api . state ( 'selectedChangesetStatus' ) . unbind ( startPromptingBeforeUnload ) ;
api . state ( 'selectedChangesetDate' ) . unbind ( startPromptingBeforeUnload ) ;
2017-10-01 23:37:46 -04:00
// Prompt user with AYS dialog if leaving the Customizer with unsaved changes
$ ( window ) . on ( 'beforeunload.customize-confirm' , function ( ) {
2017-10-12 00:01:46 -04:00
if ( ! isCleanState ( ) && ! api . state ( 'changesetLocked' ) . get ( ) ) {
2017-10-01 23:37:46 -04:00
setTimeout ( function ( ) {
overlay . removeClass ( 'customize-loading' ) ;
} , 1 ) ;
return api . l10n . saveAlert ;
}
} ) ;
}
api . bind ( 'change' , startPromptingBeforeUnload ) ;
2017-10-19 13:42:54 -04:00
api . state ( 'selectedChangesetStatus' ) . bind ( startPromptingBeforeUnload ) ;
api . state ( 'selectedChangesetDate' ) . bind ( startPromptingBeforeUnload ) ;
Customize: Extend changesets to support autosave revisions with restoration notifications, and introduce a new default linear history mode for saved changesets (with a filter for opt-in to changeset branching).
* Autosaved changes made on top of `auto-draft` changesets get written on top of the `auto-draft` itself, similar to how autosaves for posts will overwrite post drafts.
* Autosaved changes made to saved changesets (e.g. `draft`, `future`) will be placed into an autosave revision for that changeset and that user.
* Opening the Customizer will now prompt the user to restore their most recent auto-draft changeset; if notification is dismissed or ignored then the auto-draft will be marked as dismissed and will not be prompted to user in a notification again.
* Customizer will no longer automatically supply the `changeset_uuid` param in the `customize.php` URL when branching changesets are not active.
* If user closes Customizer explicitly via clicking on X link, then autosave auto-draft/autosave will be dismissed so as to not be prompted again.
* If there is a changeset already saved as a `draft` or `future` (UI is forthcoming) then this changeset will now be autoloaded for the user to keep making additional changes. This is the linear model for changesets.
* To restore the previous behavior of the Customizer where each session started a new changeset, regardless of whether or not there was an existing changeset saved, there is now a `customize_changeset_branching` hook which can be filtered to return `true`.
* `wp.customize.requestChangesetUpdate()` now supports a second with options including `autosave`, `title`, and `date`.
* The window `blur` event for `customize.php` has been replaced with a `visibilitychange` event to reduce autosave requests when clicking into preview window.
* Adds `autosaved` and `branching` args to `WP_Customize_Manager`.
* The `changeset_uuid` param for `WP_Customize_Manager` is extended to recognize a `false` value which causes the Customizer to defer identifying the UUID until `after_setup_theme` in the new `WP_Customize_Manager::establish_loaded_changeset()` method.
* A new `customize_autosaved` query parameter can now be supplied which is passed into the `autosaved` arg in `WP_Customize_Manager`; this option is an opt-in to source data from the autosave revision, allowing a user to restore autosaved changes.
Props westonruter, dlh, sayedwp, JoshuaWold, melchoyce.
See #39896.
Built from https://develop.svn.wordpress.org/trunk@41597
git-svn-id: http://core.svn.wordpress.org/trunk@41430 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-26 03:38:45 -04:00
2017-10-09 12:04:48 -04:00
function requestClose ( ) {
2017-10-12 00:01:46 -04:00
var clearedToClose = $ . Deferred ( ) , dismissAutoSave = false , dismissLock = false ;
2017-10-09 12:04:48 -04:00
if ( isCleanState ( ) ) {
2017-10-12 00:01:46 -04:00
dismissLock = true ;
Customize: Extend changesets to support autosave revisions with restoration notifications, and introduce a new default linear history mode for saved changesets (with a filter for opt-in to changeset branching).
* Autosaved changes made on top of `auto-draft` changesets get written on top of the `auto-draft` itself, similar to how autosaves for posts will overwrite post drafts.
* Autosaved changes made to saved changesets (e.g. `draft`, `future`) will be placed into an autosave revision for that changeset and that user.
* Opening the Customizer will now prompt the user to restore their most recent auto-draft changeset; if notification is dismissed or ignored then the auto-draft will be marked as dismissed and will not be prompted to user in a notification again.
* Customizer will no longer automatically supply the `changeset_uuid` param in the `customize.php` URL when branching changesets are not active.
* If user closes Customizer explicitly via clicking on X link, then autosave auto-draft/autosave will be dismissed so as to not be prompted again.
* If there is a changeset already saved as a `draft` or `future` (UI is forthcoming) then this changeset will now be autoloaded for the user to keep making additional changes. This is the linear model for changesets.
* To restore the previous behavior of the Customizer where each session started a new changeset, regardless of whether or not there was an existing changeset saved, there is now a `customize_changeset_branching` hook which can be filtered to return `true`.
* `wp.customize.requestChangesetUpdate()` now supports a second with options including `autosave`, `title`, and `date`.
* The window `blur` event for `customize.php` has been replaced with a `visibilitychange` event to reduce autosave requests when clicking into preview window.
* Adds `autosaved` and `branching` args to `WP_Customize_Manager`.
* The `changeset_uuid` param for `WP_Customize_Manager` is extended to recognize a `false` value which causes the Customizer to defer identifying the UUID until `after_setup_theme` in the new `WP_Customize_Manager::establish_loaded_changeset()` method.
* A new `customize_autosaved` query parameter can now be supplied which is passed into the `autosaved` arg in `WP_Customize_Manager`; this option is an opt-in to source data from the autosave revision, allowing a user to restore autosaved changes.
Props westonruter, dlh, sayedwp, JoshuaWold, melchoyce.
See #39896.
Built from https://develop.svn.wordpress.org/trunk@41597
git-svn-id: http://core.svn.wordpress.org/trunk@41430 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-26 03:38:45 -04:00
} else if ( confirm ( api . l10n . saveAlert ) ) {
2017-10-12 00:01:46 -04:00
dismissLock = true ;
Customize: Extend changesets to support autosave revisions with restoration notifications, and introduce a new default linear history mode for saved changesets (with a filter for opt-in to changeset branching).
* Autosaved changes made on top of `auto-draft` changesets get written on top of the `auto-draft` itself, similar to how autosaves for posts will overwrite post drafts.
* Autosaved changes made to saved changesets (e.g. `draft`, `future`) will be placed into an autosave revision for that changeset and that user.
* Opening the Customizer will now prompt the user to restore their most recent auto-draft changeset; if notification is dismissed or ignored then the auto-draft will be marked as dismissed and will not be prompted to user in a notification again.
* Customizer will no longer automatically supply the `changeset_uuid` param in the `customize.php` URL when branching changesets are not active.
* If user closes Customizer explicitly via clicking on X link, then autosave auto-draft/autosave will be dismissed so as to not be prompted again.
* If there is a changeset already saved as a `draft` or `future` (UI is forthcoming) then this changeset will now be autoloaded for the user to keep making additional changes. This is the linear model for changesets.
* To restore the previous behavior of the Customizer where each session started a new changeset, regardless of whether or not there was an existing changeset saved, there is now a `customize_changeset_branching` hook which can be filtered to return `true`.
* `wp.customize.requestChangesetUpdate()` now supports a second with options including `autosave`, `title`, and `date`.
* The window `blur` event for `customize.php` has been replaced with a `visibilitychange` event to reduce autosave requests when clicking into preview window.
* Adds `autosaved` and `branching` args to `WP_Customize_Manager`.
* The `changeset_uuid` param for `WP_Customize_Manager` is extended to recognize a `false` value which causes the Customizer to defer identifying the UUID until `after_setup_theme` in the new `WP_Customize_Manager::establish_loaded_changeset()` method.
* A new `customize_autosaved` query parameter can now be supplied which is passed into the `autosaved` arg in `WP_Customize_Manager`; this option is an opt-in to source data from the autosave revision, allowing a user to restore autosaved changes.
Props westonruter, dlh, sayedwp, JoshuaWold, melchoyce.
See #39896.
Built from https://develop.svn.wordpress.org/trunk@41597
git-svn-id: http://core.svn.wordpress.org/trunk@41430 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-26 03:38:45 -04:00
// Mark all settings as clean to prevent another call to requestChangesetUpdate.
api . each ( function ( setting ) {
setting . _dirty = false ;
} ) ;
$ ( document ) . off ( 'visibilitychange.wp-customize-changeset-update' ) ;
$ ( window ) . off ( 'beforeunload.wp-customize-changeset-update' ) ;
closeBtn . css ( 'cursor' , 'progress' ) ;
2017-10-12 00:01:46 -04:00
if ( '' !== api . state ( 'changesetStatus' ) . get ( ) ) {
dismissAutoSave = true ;
Customize: Extend changesets to support autosave revisions with restoration notifications, and introduce a new default linear history mode for saved changesets (with a filter for opt-in to changeset branching).
* Autosaved changes made on top of `auto-draft` changesets get written on top of the `auto-draft` itself, similar to how autosaves for posts will overwrite post drafts.
* Autosaved changes made to saved changesets (e.g. `draft`, `future`) will be placed into an autosave revision for that changeset and that user.
* Opening the Customizer will now prompt the user to restore their most recent auto-draft changeset; if notification is dismissed or ignored then the auto-draft will be marked as dismissed and will not be prompted to user in a notification again.
* Customizer will no longer automatically supply the `changeset_uuid` param in the `customize.php` URL when branching changesets are not active.
* If user closes Customizer explicitly via clicking on X link, then autosave auto-draft/autosave will be dismissed so as to not be prompted again.
* If there is a changeset already saved as a `draft` or `future` (UI is forthcoming) then this changeset will now be autoloaded for the user to keep making additional changes. This is the linear model for changesets.
* To restore the previous behavior of the Customizer where each session started a new changeset, regardless of whether or not there was an existing changeset saved, there is now a `customize_changeset_branching` hook which can be filtered to return `true`.
* `wp.customize.requestChangesetUpdate()` now supports a second with options including `autosave`, `title`, and `date`.
* The window `blur` event for `customize.php` has been replaced with a `visibilitychange` event to reduce autosave requests when clicking into preview window.
* Adds `autosaved` and `branching` args to `WP_Customize_Manager`.
* The `changeset_uuid` param for `WP_Customize_Manager` is extended to recognize a `false` value which causes the Customizer to defer identifying the UUID until `after_setup_theme` in the new `WP_Customize_Manager::establish_loaded_changeset()` method.
* A new `customize_autosaved` query parameter can now be supplied which is passed into the `autosaved` arg in `WP_Customize_Manager`; this option is an opt-in to source data from the autosave revision, allowing a user to restore autosaved changes.
Props westonruter, dlh, sayedwp, JoshuaWold, melchoyce.
See #39896.
Built from https://develop.svn.wordpress.org/trunk@41597
git-svn-id: http://core.svn.wordpress.org/trunk@41430 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-26 03:38:45 -04:00
}
} else {
clearedToClose . reject ( ) ;
}
2017-10-12 00:01:46 -04:00
if ( dismissLock || dismissAutoSave ) {
wp . ajax . send ( 'customize_dismiss_autosave_or_lock' , {
timeout : 500 , // Don't wait too long.
data : {
wp _customize : 'on' ,
customize _theme : api . settings . theme . stylesheet ,
customize _changeset _uuid : api . settings . changeset . uuid ,
nonce : api . settings . nonce . dismiss _autosave _or _lock ,
dismiss _autosave : dismissAutoSave ,
dismiss _lock : dismissLock
}
} ) . always ( function ( ) {
clearedToClose . resolve ( ) ;
} ) ;
}
2017-10-09 12:04:48 -04:00
return clearedToClose . promise ( ) ;
}
Customize: Extend changesets to support autosave revisions with restoration notifications, and introduce a new default linear history mode for saved changesets (with a filter for opt-in to changeset branching).
* Autosaved changes made on top of `auto-draft` changesets get written on top of the `auto-draft` itself, similar to how autosaves for posts will overwrite post drafts.
* Autosaved changes made to saved changesets (e.g. `draft`, `future`) will be placed into an autosave revision for that changeset and that user.
* Opening the Customizer will now prompt the user to restore their most recent auto-draft changeset; if notification is dismissed or ignored then the auto-draft will be marked as dismissed and will not be prompted to user in a notification again.
* Customizer will no longer automatically supply the `changeset_uuid` param in the `customize.php` URL when branching changesets are not active.
* If user closes Customizer explicitly via clicking on X link, then autosave auto-draft/autosave will be dismissed so as to not be prompted again.
* If there is a changeset already saved as a `draft` or `future` (UI is forthcoming) then this changeset will now be autoloaded for the user to keep making additional changes. This is the linear model for changesets.
* To restore the previous behavior of the Customizer where each session started a new changeset, regardless of whether or not there was an existing changeset saved, there is now a `customize_changeset_branching` hook which can be filtered to return `true`.
* `wp.customize.requestChangesetUpdate()` now supports a second with options including `autosave`, `title`, and `date`.
* The window `blur` event for `customize.php` has been replaced with a `visibilitychange` event to reduce autosave requests when clicking into preview window.
* Adds `autosaved` and `branching` args to `WP_Customize_Manager`.
* The `changeset_uuid` param for `WP_Customize_Manager` is extended to recognize a `false` value which causes the Customizer to defer identifying the UUID until `after_setup_theme` in the new `WP_Customize_Manager::establish_loaded_changeset()` method.
* A new `customize_autosaved` query parameter can now be supplied which is passed into the `autosaved` arg in `WP_Customize_Manager`; this option is an opt-in to source data from the autosave revision, allowing a user to restore autosaved changes.
Props westonruter, dlh, sayedwp, JoshuaWold, melchoyce.
See #39896.
Built from https://develop.svn.wordpress.org/trunk@41597
git-svn-id: http://core.svn.wordpress.org/trunk@41430 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-26 03:38:45 -04:00
2017-10-09 12:04:48 -04:00
parent . bind ( 'confirm-close' , function ( ) {
requestClose ( ) . done ( function ( ) {
parent . send ( 'confirmed-close' , true ) ;
} ) . fail ( function ( ) {
parent . send ( 'confirmed-close' , false ) ;
Customize: Extend changesets to support autosave revisions with restoration notifications, and introduce a new default linear history mode for saved changesets (with a filter for opt-in to changeset branching).
* Autosaved changes made on top of `auto-draft` changesets get written on top of the `auto-draft` itself, similar to how autosaves for posts will overwrite post drafts.
* Autosaved changes made to saved changesets (e.g. `draft`, `future`) will be placed into an autosave revision for that changeset and that user.
* Opening the Customizer will now prompt the user to restore their most recent auto-draft changeset; if notification is dismissed or ignored then the auto-draft will be marked as dismissed and will not be prompted to user in a notification again.
* Customizer will no longer automatically supply the `changeset_uuid` param in the `customize.php` URL when branching changesets are not active.
* If user closes Customizer explicitly via clicking on X link, then autosave auto-draft/autosave will be dismissed so as to not be prompted again.
* If there is a changeset already saved as a `draft` or `future` (UI is forthcoming) then this changeset will now be autoloaded for the user to keep making additional changes. This is the linear model for changesets.
* To restore the previous behavior of the Customizer where each session started a new changeset, regardless of whether or not there was an existing changeset saved, there is now a `customize_changeset_branching` hook which can be filtered to return `true`.
* `wp.customize.requestChangesetUpdate()` now supports a second with options including `autosave`, `title`, and `date`.
* The window `blur` event for `customize.php` has been replaced with a `visibilitychange` event to reduce autosave requests when clicking into preview window.
* Adds `autosaved` and `branching` args to `WP_Customize_Manager`.
* The `changeset_uuid` param for `WP_Customize_Manager` is extended to recognize a `false` value which causes the Customizer to defer identifying the UUID until `after_setup_theme` in the new `WP_Customize_Manager::establish_loaded_changeset()` method.
* A new `customize_autosaved` query parameter can now be supplied which is passed into the `autosaved` arg in `WP_Customize_Manager`; this option is an opt-in to source data from the autosave revision, allowing a user to restore autosaved changes.
Props westonruter, dlh, sayedwp, JoshuaWold, melchoyce.
See #39896.
Built from https://develop.svn.wordpress.org/trunk@41597
git-svn-id: http://core.svn.wordpress.org/trunk@41430 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-26 03:38:45 -04:00
} ) ;
2017-10-09 12:04:48 -04:00
} ) ;
closeBtn . on ( 'click.customize-controls-close' , function ( event ) {
event . preventDefault ( ) ;
if ( isInsideIframe ) {
parent . send ( 'close' ) ; // See confirm-close logic above.
} else {
requestClose ( ) . done ( function ( ) {
$ ( window ) . off ( 'beforeunload.customize-confirm' ) ;
window . location . href = closeBtn . prop ( 'href' ) ;
} ) ;
}
Customize: Extend changesets to support autosave revisions with restoration notifications, and introduce a new default linear history mode for saved changesets (with a filter for opt-in to changeset branching).
* Autosaved changes made on top of `auto-draft` changesets get written on top of the `auto-draft` itself, similar to how autosaves for posts will overwrite post drafts.
* Autosaved changes made to saved changesets (e.g. `draft`, `future`) will be placed into an autosave revision for that changeset and that user.
* Opening the Customizer will now prompt the user to restore their most recent auto-draft changeset; if notification is dismissed or ignored then the auto-draft will be marked as dismissed and will not be prompted to user in a notification again.
* Customizer will no longer automatically supply the `changeset_uuid` param in the `customize.php` URL when branching changesets are not active.
* If user closes Customizer explicitly via clicking on X link, then autosave auto-draft/autosave will be dismissed so as to not be prompted again.
* If there is a changeset already saved as a `draft` or `future` (UI is forthcoming) then this changeset will now be autoloaded for the user to keep making additional changes. This is the linear model for changesets.
* To restore the previous behavior of the Customizer where each session started a new changeset, regardless of whether or not there was an existing changeset saved, there is now a `customize_changeset_branching` hook which can be filtered to return `true`.
* `wp.customize.requestChangesetUpdate()` now supports a second with options including `autosave`, `title`, and `date`.
* The window `blur` event for `customize.php` has been replaced with a `visibilitychange` event to reduce autosave requests when clicking into preview window.
* Adds `autosaved` and `branching` args to `WP_Customize_Manager`.
* The `changeset_uuid` param for `WP_Customize_Manager` is extended to recognize a `false` value which causes the Customizer to defer identifying the UUID until `after_setup_theme` in the new `WP_Customize_Manager::establish_loaded_changeset()` method.
* A new `customize_autosaved` query parameter can now be supplied which is passed into the `autosaved` arg in `WP_Customize_Manager`; this option is an opt-in to source data from the autosave revision, allowing a user to restore autosaved changes.
Props westonruter, dlh, sayedwp, JoshuaWold, melchoyce.
See #39896.
Built from https://develop.svn.wordpress.org/trunk@41597
git-svn-id: http://core.svn.wordpress.org/trunk@41430 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-26 03:38:45 -04:00
} ) ;
} ) ( ) ;
2014-07-08 13:04:15 -04:00
2012-08-22 20:04:18 -04:00
// Pass events through to the parent.
2014-07-08 13:04:15 -04:00
$ . each ( [ 'saved' , 'change' ] , function ( i , event ) {
api . bind ( event , function ( ) {
parent . send ( event ) ;
} ) ;
} ) ;
2012-08-22 20:04:18 -04:00
2015-03-25 13:26:26 -04:00
// Pass titles to the parent
api . bind ( 'title' , function ( newTitle ) {
parent . send ( 'title' , newTitle ) ;
} ) ;
2017-10-09 12:04:48 -04:00
if ( api . settings . changeset . branching ) {
parent . send ( 'changeset-uuid' , api . settings . changeset . uuid ) ;
}
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
2012-08-22 20:04:18 -04:00
// Initialize the connection with the parent frame.
parent . send ( 'ready' ) ;
// Control visibility for default controls
$ . each ( {
'background_image' : {
Customize: Improve custom background properties UI.
Introduces new control for managing the background position. Adds control for setting the `background-size`.
Props cdog, celloexpressions, grapplerulrich, MikeHansenMe, FolioVision, afercia, helen, melchoyce, karmatosed, westonruter, Kelderic, sebastian.pisula.
Fixes #22058.
Built from https://develop.svn.wordpress.org/trunk@38948
git-svn-id: http://core.svn.wordpress.org/trunk@38891 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-10-26 02:52:29 -04:00
controls : [ 'background_preset' , 'background_position' , 'background_size' , 'background_repeat' , 'background_attachment' ] ,
2013-11-15 01:08:10 -05:00
callback : function ( to ) { return ! ! to ; }
2012-08-22 20:04:18 -04:00
} ,
'show_on_front' : {
controls : [ 'page_on_front' , 'page_for_posts' ] ,
2013-11-15 01:08:10 -05:00
callback : function ( to ) { return 'page' === to ; }
2012-08-22 20:04:18 -04:00
} ,
'header_textcolor' : {
controls : [ 'header_textcolor' ] ,
2013-11-15 01:08:10 -05:00
callback : function ( to ) { return 'blank' !== to ; }
2012-08-22 20:04:18 -04:00
}
} , function ( settingId , o ) {
api ( settingId , function ( setting ) {
$ . each ( o . controls , function ( i , controlId ) {
api . control ( controlId , function ( control ) {
var visibility = function ( to ) {
control . container . toggle ( o . callback ( to ) ) ;
} ;
visibility ( setting . get ( ) ) ;
setting . bind ( visibility ) ;
} ) ;
} ) ;
} ) ;
} ) ;
Customize: Improve custom background properties UI.
Introduces new control for managing the background position. Adds control for setting the `background-size`.
Props cdog, celloexpressions, grapplerulrich, MikeHansenMe, FolioVision, afercia, helen, melchoyce, karmatosed, westonruter, Kelderic, sebastian.pisula.
Fixes #22058.
Built from https://develop.svn.wordpress.org/trunk@38948
git-svn-id: http://core.svn.wordpress.org/trunk@38891 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-10-26 02:52:29 -04:00
api . control ( 'background_preset' , function ( control ) {
var visibility , defaultValues , values , toggleVisibility , updateSettings , preset ;
visibility = { // position, size, repeat, attachment
'default' : [ false , false , false , false ] ,
'fill' : [ true , false , false , false ] ,
'fit' : [ true , false , true , false ] ,
'repeat' : [ true , false , false , true ] ,
'custom' : [ true , true , true , true ]
} ;
defaultValues = [
_wpCustomizeBackground . defaults [ 'default-position-x' ] ,
_wpCustomizeBackground . defaults [ 'default-position-y' ] ,
_wpCustomizeBackground . defaults [ 'default-size' ] ,
_wpCustomizeBackground . defaults [ 'default-repeat' ] ,
_wpCustomizeBackground . defaults [ 'default-attachment' ]
] ;
values = { // position_x, position_y, size, repeat, attachment
'default' : defaultValues ,
'fill' : [ 'left' , 'top' , 'cover' , 'no-repeat' , 'fixed' ] ,
'fit' : [ 'left' , 'top' , 'contain' , 'no-repeat' , 'fixed' ] ,
'repeat' : [ 'left' , 'top' , 'auto' , 'repeat' , 'scroll' ]
} ;
// @todo These should actually toggle the active state, but without the preview overriding the state in data.activeControls.
toggleVisibility = function ( preset ) {
2016-10-27 01:02:35 -04:00
_ . each ( [ 'background_position' , 'background_size' , 'background_repeat' , 'background_attachment' ] , function ( controlId , i ) {
var control = api . control ( controlId ) ;
if ( control ) {
control . container . toggle ( visibility [ preset ] [ i ] ) ;
}
} ) ;
Customize: Improve custom background properties UI.
Introduces new control for managing the background position. Adds control for setting the `background-size`.
Props cdog, celloexpressions, grapplerulrich, MikeHansenMe, FolioVision, afercia, helen, melchoyce, karmatosed, westonruter, Kelderic, sebastian.pisula.
Fixes #22058.
Built from https://develop.svn.wordpress.org/trunk@38948
git-svn-id: http://core.svn.wordpress.org/trunk@38891 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-10-26 02:52:29 -04:00
} ;
updateSettings = function ( preset ) {
2016-10-27 01:02:35 -04:00
_ . each ( [ 'background_position_x' , 'background_position_y' , 'background_size' , 'background_repeat' , 'background_attachment' ] , function ( settingId , i ) {
var setting = api ( settingId ) ;
if ( setting ) {
setting . set ( values [ preset ] [ i ] ) ;
}
} ) ;
Customize: Improve custom background properties UI.
Introduces new control for managing the background position. Adds control for setting the `background-size`.
Props cdog, celloexpressions, grapplerulrich, MikeHansenMe, FolioVision, afercia, helen, melchoyce, karmatosed, westonruter, Kelderic, sebastian.pisula.
Fixes #22058.
Built from https://develop.svn.wordpress.org/trunk@38948
git-svn-id: http://core.svn.wordpress.org/trunk@38891 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-10-26 02:52:29 -04:00
} ;
preset = control . setting . get ( ) ;
toggleVisibility ( preset ) ;
control . setting . bind ( 'change' , function ( preset ) {
toggleVisibility ( preset ) ;
if ( 'custom' !== preset ) {
updateSettings ( preset ) ;
}
} ) ;
} ) ;
api . control ( 'background_repeat' , function ( control ) {
control . elements [ 0 ] . unsync ( api ( 'background_repeat' ) ) ;
control . element = new api . Element ( control . container . find ( 'input' ) ) ;
control . element . set ( 'no-repeat' !== control . setting ( ) ) ;
control . element . bind ( function ( to ) {
control . setting . set ( to ? 'repeat' : 'no-repeat' ) ;
} ) ;
control . setting . bind ( function ( to ) {
control . element . set ( 'no-repeat' !== to ) ;
} ) ;
} ) ;
api . control ( 'background_attachment' , function ( control ) {
control . elements [ 0 ] . unsync ( api ( 'background_attachment' ) ) ;
control . element = new api . Element ( control . container . find ( 'input' ) ) ;
control . element . set ( 'fixed' !== control . setting ( ) ) ;
control . element . bind ( function ( to ) {
control . setting . set ( to ? 'scroll' : 'fixed' ) ;
} ) ;
control . setting . bind ( function ( to ) {
control . element . set ( 'fixed' !== to ) ;
} ) ;
} ) ;
2012-08-22 20:04:18 -04:00
// Juggle the two controls that use header_textcolor
api . control ( 'display_header_text' , function ( control ) {
var last = '' ;
control . elements [ 0 ] . unsync ( api ( 'header_textcolor' ) ) ;
control . element = new api . Element ( control . container . find ( 'input' ) ) ;
control . element . set ( 'blank' !== control . setting ( ) ) ;
control . element . bind ( function ( to ) {
2017-10-04 02:48:46 -04:00
if ( ! to ) {
2012-08-22 20:04:18 -04:00
last = api ( 'header_textcolor' ) . get ( ) ;
2017-10-04 02:48:46 -04:00
}
2012-08-22 20:04:18 -04:00
control . setting . set ( to ? last : 'blank' ) ;
} ) ;
control . setting . bind ( function ( to ) {
control . element . set ( 'blank' !== to ) ;
} ) ;
} ) ;
2017-09-18 20:46:45 -04:00
// Add behaviors to the static front page controls.
api ( 'show_on_front' , 'page_on_front' , 'page_for_posts' , function ( showOnFront , pageOnFront , pageForPosts ) {
var handleChange = function ( ) {
var setting = this , pageOnFrontId , pageForPostsId , errorCode = 'show_on_front_page_collision' ;
pageOnFrontId = parseInt ( pageOnFront ( ) , 10 ) ;
pageForPostsId = parseInt ( pageForPosts ( ) , 10 ) ;
if ( 'page' === showOnFront ( ) ) {
// Change previewed URL to the homepage when changing the page_on_front.
if ( setting === pageOnFront && pageOnFrontId > 0 ) {
api . previewer . previewUrl . set ( api . settings . url . home ) ;
}
// Change the previewed URL to the selected page when changing the page_for_posts.
if ( setting === pageForPosts && pageForPostsId > 0 ) {
api . previewer . previewUrl . set ( api . settings . url . home + '?page_id=' + pageForPostsId ) ;
}
2015-06-27 15:59:25 -04:00
}
2017-09-18 20:46:45 -04:00
// Toggle notification when the homepage and posts page are both set and the same.
if ( 'page' === showOnFront ( ) && pageOnFrontId && pageForPostsId && pageOnFrontId === pageForPostsId ) {
2017-10-04 02:48:46 -04:00
showOnFront . notifications . add ( new api . Notification ( errorCode , {
2017-09-18 20:46:45 -04:00
type : 'error' ,
message : api . l10n . pageOnFrontError
} ) ) ;
} else {
showOnFront . notifications . remove ( errorCode ) ;
2015-06-27 15:59:25 -04:00
}
2017-09-18 20:46:45 -04:00
} ;
showOnFront . bind ( handleChange ) ;
pageOnFront . bind ( handleChange ) ;
pageForPosts . bind ( handleChange ) ;
handleChange . call ( showOnFront , showOnFront ( ) ) ; // Make sure initial notification is added after loading existing changeset.
// Move notifications container to the bottom.
api . control ( 'show_on_front' , function ( showOnFrontControl ) {
showOnFrontControl . deferred . embedded . done ( function ( ) {
showOnFrontControl . container . append ( showOnFrontControl . getNotificationsContainerElement ( ) ) ;
} ) ;
2015-06-27 15:59:25 -04:00
} ) ;
} ) ;
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
// Add code editor for Custom CSS.
( function ( ) {
2017-09-21 19:04:45 -04:00
var sectionReady = $ . Deferred ( ) ;
2016-11-06 14:09:33 -05:00
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
api . section ( 'custom_css' , function ( section ) {
section . deferred . embedded . done ( function ( ) {
if ( section . expanded ( ) ) {
sectionReady . resolve ( section ) ;
} else {
section . expanded . bind ( function ( isExpanded ) {
if ( isExpanded ) {
sectionReady . resolve ( section ) ;
}
} ) ;
}
} ) ;
} ) ;
2017-09-24 12:00:46 -04:00
// Set up the section description behaviors.
2017-09-21 19:04:45 -04:00
sectionReady . done ( function setupSectionDescription ( section ) {
var control = api . control ( 'custom_css' ) ;
2016-11-06 14:09:33 -05:00
2017-10-20 12:39:48 -04:00
// Hide redundant label for visual users.
control . container . find ( '.customize-control-title:first' ) . addClass ( 'screen-reader-text' ) ;
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
// Close the section description when clicking the close button.
section . container . find ( '.section-description-buttons .section-description-close' ) . on ( 'click' , function ( ) {
section . container . find ( '.section-meta .customize-section-description:first' )
. removeClass ( 'open' )
2017-09-24 12:00:46 -04:00
. slideUp ( ) ;
section . container . find ( '.customize-help-toggle' )
. attr ( 'aria-expanded' , 'false' )
. focus ( ) ; // Avoid focus loss.
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
} ) ;
// Reveal help text if setting is empty.
2017-09-21 19:04:45 -04:00
if ( control && ! control . setting . get ( ) ) {
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
section . container . find ( '.section-meta .customize-section-description:first' )
. addClass ( 'open' )
2017-10-02 14:55:47 -04:00
. show ( )
. trigger ( 'toggled' ) ;
2017-09-24 12:00:46 -04:00
section . container . find ( '.customize-help-toggle' ) . attr ( 'aria-expanded' , 'true' ) ;
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
}
} ) ;
} ) ( ) ;
2016-11-14 22:47:30 -05:00
// Toggle visibility of Header Video notice when active state change.
api . control ( 'header_video' , function ( headerVideoControl ) {
headerVideoControl . deferred . embedded . done ( function ( ) {
var toggleNotice = function ( ) {
2017-09-19 01:40:44 -04:00
var section = api . section ( headerVideoControl . section ( ) ) , noticeCode = 'video_header_not_available' ;
2016-11-14 22:47:30 -05:00
if ( ! section ) {
return ;
}
if ( headerVideoControl . active . get ( ) ) {
2017-09-19 01:40:44 -04:00
section . notifications . remove ( noticeCode ) ;
2016-11-14 22:47:30 -05:00
} else {
2017-10-04 02:48:46 -04:00
section . notifications . add ( new api . Notification ( noticeCode , {
2017-09-19 01:40:44 -04:00
type : 'info' ,
message : api . l10n . videoHeaderNotice
} ) ) ;
2016-11-14 22:47:30 -05:00
}
} ;
toggleNotice ( ) ;
headerVideoControl . active . bind ( toggleNotice ) ;
} ) ;
} ) ;
2016-11-06 14:09:33 -05:00
2016-06-14 15:17:28 -04:00
// Update the setting validities.
api . previewer . bind ( 'selective-refresh-setting-validities' , function handleSelectiveRefreshedSettingValidities ( settingValidities ) {
api . _handleSettingValidities ( {
settingValidities : settingValidities ,
focusInvalidControl : false
} ) ;
} ) ;
2016-02-19 13:41:28 -05:00
// Focus on the control that is associated with the given setting.
api . previewer . bind ( 'focus-control-for-setting' , function ( settingId ) {
2016-12-20 17:05:43 -05:00
var matchedControls = [ ] ;
2016-02-19 13:41:28 -05:00
api . control . each ( function ( control ) {
var settingIds = _ . pluck ( control . settings , 'id' ) ;
if ( - 1 !== _ . indexOf ( settingIds , settingId ) ) {
2016-12-20 17:05:43 -05:00
matchedControls . push ( control ) ;
2016-02-19 13:41:28 -05:00
}
} ) ;
2016-12-20 17:05:43 -05:00
// Focus on the matched control with the lowest priority (appearing higher).
if ( matchedControls . length ) {
matchedControls . sort ( function ( a , b ) {
return a . priority ( ) - b . priority ( ) ;
} ) ;
matchedControls [ 0 ] . focus ( ) ;
2016-02-19 13:41:28 -05:00
}
} ) ;
// Refresh the preview when it requests.
api . previewer . bind ( 'refresh' , function ( ) {
api . previewer . refresh ( ) ;
} ) ;
2016-10-26 16:03:32 -04:00
// Update the edit shortcut visibility state.
2016-11-04 13:13:57 -04:00
api . state ( 'paneVisible' ) . bind ( function ( isPaneVisible ) {
var isMobileScreen ;
if ( window . matchMedia ) {
isMobileScreen = window . matchMedia ( 'screen and ( max-width: 640px )' ) . matches ;
} else {
isMobileScreen = $ ( window ) . width ( ) <= 640 ;
}
api . state ( 'editShortcutVisibility' ) . set ( isPaneVisible || isMobileScreen ? 'visible' : 'hidden' ) ;
} ) ;
if ( window . matchMedia ) {
window . matchMedia ( 'screen and ( max-width: 640px )' ) . addListener ( function ( ) {
var state = api . state ( 'paneVisible' ) ;
state . callbacks . fireWith ( state , [ state . get ( ) , state . get ( ) ] ) ;
} ) ;
}
2016-10-26 16:03:32 -04:00
api . previewer . bind ( 'edit-shortcut-visibility' , function ( visibility ) {
api . state ( 'editShortcutVisibility' ) . set ( visibility ) ;
} ) ;
api . state ( 'editShortcutVisibility' ) . bind ( function ( visibility ) {
api . previewer . send ( 'edit-shortcut-visibility' , visibility ) ;
} ) ;
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
// Autosave changeset.
2017-10-01 23:37:46 -04:00
function startAutosaving ( ) {
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
var timeoutId , updateChangesetWithReschedule , scheduleChangesetUpdate , updatePending = false ;
2017-10-01 23:37:46 -04:00
api . unbind ( 'change' , startAutosaving ) ; // Ensure startAutosaving only fires once.
2017-11-08 23:15:49 -05:00
function onChangeSaved ( isSaved ) {
Customize: Extend changesets to support autosave revisions with restoration notifications, and introduce a new default linear history mode for saved changesets (with a filter for opt-in to changeset branching).
* Autosaved changes made on top of `auto-draft` changesets get written on top of the `auto-draft` itself, similar to how autosaves for posts will overwrite post drafts.
* Autosaved changes made to saved changesets (e.g. `draft`, `future`) will be placed into an autosave revision for that changeset and that user.
* Opening the Customizer will now prompt the user to restore their most recent auto-draft changeset; if notification is dismissed or ignored then the auto-draft will be marked as dismissed and will not be prompted to user in a notification again.
* Customizer will no longer automatically supply the `changeset_uuid` param in the `customize.php` URL when branching changesets are not active.
* If user closes Customizer explicitly via clicking on X link, then autosave auto-draft/autosave will be dismissed so as to not be prompted again.
* If there is a changeset already saved as a `draft` or `future` (UI is forthcoming) then this changeset will now be autoloaded for the user to keep making additional changes. This is the linear model for changesets.
* To restore the previous behavior of the Customizer where each session started a new changeset, regardless of whether or not there was an existing changeset saved, there is now a `customize_changeset_branching` hook which can be filtered to return `true`.
* `wp.customize.requestChangesetUpdate()` now supports a second with options including `autosave`, `title`, and `date`.
* The window `blur` event for `customize.php` has been replaced with a `visibilitychange` event to reduce autosave requests when clicking into preview window.
* Adds `autosaved` and `branching` args to `WP_Customize_Manager`.
* The `changeset_uuid` param for `WP_Customize_Manager` is extended to recognize a `false` value which causes the Customizer to defer identifying the UUID until `after_setup_theme` in the new `WP_Customize_Manager::establish_loaded_changeset()` method.
* A new `customize_autosaved` query parameter can now be supplied which is passed into the `autosaved` arg in `WP_Customize_Manager`; this option is an opt-in to source data from the autosave revision, allowing a user to restore autosaved changes.
Props westonruter, dlh, sayedwp, JoshuaWold, melchoyce.
See #39896.
Built from https://develop.svn.wordpress.org/trunk@41597
git-svn-id: http://core.svn.wordpress.org/trunk@41430 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-26 03:38:45 -04:00
if ( ! isSaved && ! api . settings . changeset . autosaved ) {
api . settings . changeset . autosaved = true ; // Once a change is made then autosaving kicks in.
api . previewer . send ( 'autosaving' ) ;
}
2017-11-08 23:15:49 -05:00
}
api . state ( 'saved' ) . bind ( onChangeSaved ) ;
onChangeSaved ( api . state ( 'saved' ) . get ( ) ) ;
Customize: Extend changesets to support autosave revisions with restoration notifications, and introduce a new default linear history mode for saved changesets (with a filter for opt-in to changeset branching).
* Autosaved changes made on top of `auto-draft` changesets get written on top of the `auto-draft` itself, similar to how autosaves for posts will overwrite post drafts.
* Autosaved changes made to saved changesets (e.g. `draft`, `future`) will be placed into an autosave revision for that changeset and that user.
* Opening the Customizer will now prompt the user to restore their most recent auto-draft changeset; if notification is dismissed or ignored then the auto-draft will be marked as dismissed and will not be prompted to user in a notification again.
* Customizer will no longer automatically supply the `changeset_uuid` param in the `customize.php` URL when branching changesets are not active.
* If user closes Customizer explicitly via clicking on X link, then autosave auto-draft/autosave will be dismissed so as to not be prompted again.
* If there is a changeset already saved as a `draft` or `future` (UI is forthcoming) then this changeset will now be autoloaded for the user to keep making additional changes. This is the linear model for changesets.
* To restore the previous behavior of the Customizer where each session started a new changeset, regardless of whether or not there was an existing changeset saved, there is now a `customize_changeset_branching` hook which can be filtered to return `true`.
* `wp.customize.requestChangesetUpdate()` now supports a second with options including `autosave`, `title`, and `date`.
* The window `blur` event for `customize.php` has been replaced with a `visibilitychange` event to reduce autosave requests when clicking into preview window.
* Adds `autosaved` and `branching` args to `WP_Customize_Manager`.
* The `changeset_uuid` param for `WP_Customize_Manager` is extended to recognize a `false` value which causes the Customizer to defer identifying the UUID until `after_setup_theme` in the new `WP_Customize_Manager::establish_loaded_changeset()` method.
* A new `customize_autosaved` query parameter can now be supplied which is passed into the `autosaved` arg in `WP_Customize_Manager`; this option is an opt-in to source data from the autosave revision, allowing a user to restore autosaved changes.
Props westonruter, dlh, sayedwp, JoshuaWold, melchoyce.
See #39896.
Built from https://develop.svn.wordpress.org/trunk@41597
git-svn-id: http://core.svn.wordpress.org/trunk@41430 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-26 03:38:45 -04: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
/ * *
* Request changeset update and then re - schedule the next changeset update time .
*
2016-11-23 01:05:32 -05:00
* @ since 4.7 . 0
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
* @ private
* /
updateChangesetWithReschedule = function ( ) {
if ( ! updatePending ) {
updatePending = true ;
Customize: Extend changesets to support autosave revisions with restoration notifications, and introduce a new default linear history mode for saved changesets (with a filter for opt-in to changeset branching).
* Autosaved changes made on top of `auto-draft` changesets get written on top of the `auto-draft` itself, similar to how autosaves for posts will overwrite post drafts.
* Autosaved changes made to saved changesets (e.g. `draft`, `future`) will be placed into an autosave revision for that changeset and that user.
* Opening the Customizer will now prompt the user to restore their most recent auto-draft changeset; if notification is dismissed or ignored then the auto-draft will be marked as dismissed and will not be prompted to user in a notification again.
* Customizer will no longer automatically supply the `changeset_uuid` param in the `customize.php` URL when branching changesets are not active.
* If user closes Customizer explicitly via clicking on X link, then autosave auto-draft/autosave will be dismissed so as to not be prompted again.
* If there is a changeset already saved as a `draft` or `future` (UI is forthcoming) then this changeset will now be autoloaded for the user to keep making additional changes. This is the linear model for changesets.
* To restore the previous behavior of the Customizer where each session started a new changeset, regardless of whether or not there was an existing changeset saved, there is now a `customize_changeset_branching` hook which can be filtered to return `true`.
* `wp.customize.requestChangesetUpdate()` now supports a second with options including `autosave`, `title`, and `date`.
* The window `blur` event for `customize.php` has been replaced with a `visibilitychange` event to reduce autosave requests when clicking into preview window.
* Adds `autosaved` and `branching` args to `WP_Customize_Manager`.
* The `changeset_uuid` param for `WP_Customize_Manager` is extended to recognize a `false` value which causes the Customizer to defer identifying the UUID until `after_setup_theme` in the new `WP_Customize_Manager::establish_loaded_changeset()` method.
* A new `customize_autosaved` query parameter can now be supplied which is passed into the `autosaved` arg in `WP_Customize_Manager`; this option is an opt-in to source data from the autosave revision, allowing a user to restore autosaved changes.
Props westonruter, dlh, sayedwp, JoshuaWold, melchoyce.
See #39896.
Built from https://develop.svn.wordpress.org/trunk@41597
git-svn-id: http://core.svn.wordpress.org/trunk@41430 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-26 03:38:45 -04:00
api . requestChangesetUpdate ( { } , { autosave : true } ) . always ( function ( ) {
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
updatePending = false ;
} ) ;
}
scheduleChangesetUpdate ( ) ;
} ;
/ * *
* Schedule changeset update .
*
2016-11-23 01:05:32 -05:00
* @ since 4.7 . 0
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
* @ private
* /
scheduleChangesetUpdate = function ( ) {
clearTimeout ( timeoutId ) ;
timeoutId = setTimeout ( function ( ) {
updateChangesetWithReschedule ( ) ;
} , api . settings . timeouts . changesetAutoSave ) ;
} ;
// Start auto-save interval for updating changeset.
scheduleChangesetUpdate ( ) ;
// Save changeset when focus removed from window.
Customize: Extend changesets to support autosave revisions with restoration notifications, and introduce a new default linear history mode for saved changesets (with a filter for opt-in to changeset branching).
* Autosaved changes made on top of `auto-draft` changesets get written on top of the `auto-draft` itself, similar to how autosaves for posts will overwrite post drafts.
* Autosaved changes made to saved changesets (e.g. `draft`, `future`) will be placed into an autosave revision for that changeset and that user.
* Opening the Customizer will now prompt the user to restore their most recent auto-draft changeset; if notification is dismissed or ignored then the auto-draft will be marked as dismissed and will not be prompted to user in a notification again.
* Customizer will no longer automatically supply the `changeset_uuid` param in the `customize.php` URL when branching changesets are not active.
* If user closes Customizer explicitly via clicking on X link, then autosave auto-draft/autosave will be dismissed so as to not be prompted again.
* If there is a changeset already saved as a `draft` or `future` (UI is forthcoming) then this changeset will now be autoloaded for the user to keep making additional changes. This is the linear model for changesets.
* To restore the previous behavior of the Customizer where each session started a new changeset, regardless of whether or not there was an existing changeset saved, there is now a `customize_changeset_branching` hook which can be filtered to return `true`.
* `wp.customize.requestChangesetUpdate()` now supports a second with options including `autosave`, `title`, and `date`.
* The window `blur` event for `customize.php` has been replaced with a `visibilitychange` event to reduce autosave requests when clicking into preview window.
* Adds `autosaved` and `branching` args to `WP_Customize_Manager`.
* The `changeset_uuid` param for `WP_Customize_Manager` is extended to recognize a `false` value which causes the Customizer to defer identifying the UUID until `after_setup_theme` in the new `WP_Customize_Manager::establish_loaded_changeset()` method.
* A new `customize_autosaved` query parameter can now be supplied which is passed into the `autosaved` arg in `WP_Customize_Manager`; this option is an opt-in to source data from the autosave revision, allowing a user to restore autosaved changes.
Props westonruter, dlh, sayedwp, JoshuaWold, melchoyce.
See #39896.
Built from https://develop.svn.wordpress.org/trunk@41597
git-svn-id: http://core.svn.wordpress.org/trunk@41430 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-26 03:38:45 -04:00
$ ( document ) . on ( 'visibilitychange.wp-customize-changeset-update' , function ( ) {
if ( document . hidden ) {
updateChangesetWithReschedule ( ) ;
}
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 changeset before unloading window.
$ ( window ) . on ( 'beforeunload.wp-customize-changeset-update' , function ( ) {
updateChangesetWithReschedule ( ) ;
} ) ;
2017-10-01 23:37:46 -04:00
}
api . bind ( 'change' , startAutosaving ) ;
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
2017-07-03 17:18:44 -04:00
// Make sure TinyMCE dialogs appear above Customizer UI.
$ ( document ) . one ( 'wp-before-tinymce-init' , function ( ) {
if ( ! window . tinymce . ui . FloatPanel . zIndex || window . tinymce . ui . FloatPanel . zIndex < 500001 ) {
window . tinymce . ui . FloatPanel . zIndex = 500001 ;
}
} ) ;
2017-10-01 23:37:46 -04:00
body . addClass ( 'ready' ) ;
2012-08-22 20:04:18 -04:00
api . trigger ( 'ready' ) ;
} ) ;
2012-11-06 09:47:25 -05:00
} ) ( wp , jQuery ) ;