| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- /* global wp, gapi, FB, twttr, PaypalExpressCheckout */
- /**
- * Utilities to work with widgets in Customizer.
- */
- /**
- * Checks whether this Customizer supports partial widget refresh.
- * @returns {boolean}
- */
- wp.customizerHasPartialWidgetRefresh = function () {
- return (
- 'object' === typeof wp &&
- 'function' === typeof wp.customize &&
- 'object' === typeof wp.customize.selectiveRefresh &&
- 'object' === typeof wp.customize.widgetsPreview &&
- 'function' === typeof wp.customize.widgetsPreview.WidgetPartial
- );
- };
- /**
- * Verifies that the placed widget ID contains the widget name.
- * @param {object} placement
- * @param {string} widgetName
- * @returns {*|boolean}
- */
- wp.isJetpackWidgetPlaced = function ( placement, widgetName ) {
- return placement.partial.widgetId && 0 === placement.partial.widgetId.indexOf( widgetName );
- };
- /**
- * Bind events for selective refresh in Customizer.
- */
- ( function ( $ ) {
- $( document ).ready( function () {
- if ( wp && wp.customize && wp.customizerHasPartialWidgetRefresh() ) {
- // Refresh widget contents when a partial is rendered.
- wp.customize.selectiveRefresh.bind( 'partial-content-rendered', function ( placement ) {
- if ( placement.container ) {
- // Refresh Google+
- if (
- wp.isJetpackWidgetPlaced( placement, 'googleplus-badge' ) &&
- 'object' === typeof gapi &&
- gapi.person &&
- 'function' === typeof gapi.person.go
- ) {
- gapi.person.go( placement.container[ 0 ] );
- }
- // Refresh Facebook XFBML
- else if (
- wp.isJetpackWidgetPlaced( placement, 'facebook-likebox' ) &&
- 'object' === typeof FB &&
- 'object' === typeof FB.XFBML &&
- 'function' === typeof FB.XFBML.parse
- ) {
- FB.XFBML.parse( placement.container[ 0 ], function () {
- var $fbContainer = $( placement.container[ 0 ] ).find( '.fb_iframe_widget' ),
- fbWidth = $fbContainer.data( 'width' ),
- fbHeight = $fbContainer.data( 'height' );
- $fbContainer.find( 'span' ).css( { width: fbWidth, height: fbHeight } );
- setTimeout( function () {
- $fbContainer
- .find( 'iframe' )
- .css( { width: fbWidth, height: fbHeight, position: 'relative' } );
- }, 1 );
- } );
- }
- // Refresh Twitter
- else if (
- wp.isJetpackWidgetPlaced( placement, 'twitter_timeline' ) &&
- 'object' === typeof twttr &&
- 'object' === typeof twttr.widgets &&
- 'function' === typeof twttr.widgets.load
- ) {
- twttr.widgets.load( placement.container[ 0 ] );
- } else if ( wp.isJetpackWidgetPlaced( placement, 'eu_cookie_law_widget' ) ) {
- // Refresh EU Cookie Law
- if ( $( '#eu-cookie-law' ).hasClass( 'top' ) ) {
- $( '.widget_eu_cookie_law_widget' ).addClass( 'top' );
- } else {
- $( '.widget_eu_cookie_law_widget' ).removeClass( 'top' );
- }
- placement.container.fadeIn();
- } else if ( wp.isJetpackWidgetPlaced( placement, 'jetpack_simple_payments_widget' ) ) {
- // Refresh Simple Payments Widget
- try {
- var buttonId = $( '.jetpack-simple-payments-button', placement.container )
- .attr( 'id' )
- .replace( '_button', '' );
- PaypalExpressCheckout.renderButton( null, null, buttonId, null );
- } catch ( e ) {
- // PaypalExpressCheckout may fail.
- // For the same usage, see also:
- // https://github.com/Automattic/jetpack/blob/6c1971e6bed7d3df793392a7a58ffe0afaeeb5fe/modules/simple-payments/simple-payments.php#L111
- }
- }
- }
- } );
- // Refresh widgets when they're moved.
- wp.customize.selectiveRefresh.bind( 'partial-content-moved', function ( placement ) {
- if ( placement.container ) {
- // Refresh Twitter timeline iframe, since it has to be re-built.
- if (
- wp.isJetpackWidgetPlaced( placement, 'twitter_timeline' ) &&
- placement.container.find( 'iframe.twitter-timeline:not([src]):first' ).length
- ) {
- placement.partial.refresh();
- } else if ( wp.isJetpackWidgetPlaced( placement, 'jetpack_simple_payments_widget' ) ) {
- // Refresh Simple Payments Widget
- placement.partial.refresh();
- }
- }
- } );
- }
- } );
- } )( jQuery );
|