From 43623c464c64f18b82028537bc2cdc94af183901 Mon Sep 17 00:00:00 2001 From: Aaron Jorbin Date: Tue, 7 Apr 2015 03:08:38 +0000 Subject: [PATCH] Enable users to initiate a shiny update from plugin detail modal The plugin detail modal can contain a link to update a plugin. When it does, we should initiate a shiny update. This relies upon postMessage which isn't available in all browsers, specifically it isn't in IE versions below 8 so this is going to be a progressive enhancement that some small percentage of users will miss out on. These are the same users that can't use the customizer. Fixes #31739 git-svn-id: https://develop.svn.wordpress.org/trunk@32062 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/plugin-install.php | 2 +- src/wp-admin/js/updates.js | 43 ++++++++++++++++++++++-- 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/src/wp-admin/includes/plugin-install.php b/src/wp-admin/includes/plugin-install.php index c700a6bec8..b8cf32f021 100644 --- a/src/wp-admin/includes/plugin-install.php +++ b/src/wp-admin/includes/plugin-install.php @@ -561,7 +561,7 @@ function install_plugin_information() { break; case 'update_available': if ( $status['url'] ) { - echo '' . __( 'Install Update Now' ) .''; + echo '' . __( 'Install Update Now' ) .''; } break; case 'newer_installed': diff --git a/src/wp-admin/js/updates.js b/src/wp-admin/js/updates.js index d6d8ed84df..05ad2515c7 100644 --- a/src/wp-admin/js/updates.js +++ b/src/wp-admin/js/updates.js @@ -1,3 +1,4 @@ +/* global tb_remove */ window.wp = window.wp || {}; (function( $, wp, pagenow ) { @@ -473,6 +474,26 @@ window.wp = window.wp || {}; wp.updates.updatePlugin( $button.data( 'plugin' ), $button.data( 'slug' ) ); } ); + // + $( '#plugin_update_from_iframe' ).on( 'click' , function( e ) { + var target, data; + + target = window.parent == window ? null : window.parent, + $.support.postMessage = !! window.postMessage; + + if ( $.support.postMessage === false || target === null ) + return; + + e.preventDefault(); + + data = { + 'action' : 'updatePlugin', + 'slug' : $(this).data('slug') + }; + + target.postMessage( JSON.stringify( data ), window.location.origin ); + }); + } ); $( window ).on( 'message', function( e ) { @@ -487,11 +508,29 @@ window.wp = window.wp || {}; message = $.parseJSON( event.data ); - if ( typeof message.action === 'undefined' || message.action !== 'decrementUpdateCount' ) { + if ( typeof message.action === 'undefined' ) { return; } - wp.updates.decrementCount( message.upgradeType ); + switch (message.action){ + case 'decrementUpdateCount' : + wp.updates.decrementCount( message.upgradeType ); + break; + case 'updatePlugin' : + tb_remove(); + if ( 'plugins' === pagenow || 'plugins-network' === pagenow ) { + // Return the user to the input box of the plugin's table row after closing the modal. + $( '#' + message.slug ).find( '.check-column input' ).focus(); + // trigger the update + $( '.plugin-update-tr[data-slug="' + message.slug + '"]' ).find( '.update-link' ).trigger( 'click' ); + } else if ( 'plugin-install' === pagenow ) { + $( '.plugin-card-' + message.slug ).find( 'h4 a' ).focus(); + $( '.plugin-card-' + message.slug ).find( '[data-slug="' + message.slug + '"]' ).trigger( 'click' ); + } + break; + } + + } );