WordPress/wp-admin/js/updates.min.js
Gary Pendergast 9c69213f2b Shiny Updates: Add ajax-y updates to the plugin list page, and ajax-y updates and installs to the plugin card page.
This also includes JS architecture that can be expanded to support theme, core and language pack updates.

Props pento, ericlewis, lgladdy, adamsilverstein, DrewAPicture

See #29820


Built from https://develop.svn.wordpress.org/trunk@31333


git-svn-id: http://core.svn.wordpress.org/trunk@31314 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-02-05 04:19:23 +00:00

1 line
5.4 KiB
JavaScript

window.wp=window.wp||{},function(a,b){b.updates={},b.updates.ajaxNonce=window._wpUpdatesSettings.ajax_nonce,b.updates.l10n=window._wpUpdatesSettings.l10n,b.updates.updateLock=!1,b.updates.updateQueue=[],b.updates.decrementCount=function(b){var c,d,e=a("#wp-admin-bar-updates .ab-label"),f=a('a[href="update-core.php"] .update-plugins');if($pluginsMenuItem=a("#menu-plugins"),c=e.text(),c=parseInt(c,10)-1,!(0>c||isNaN(c))&&(a("#wp-admin-bar-updates .ab-item").removeAttr("title"),e.text(c),f.each(function(a,b){b.className=b.className.replace(/count-\d+/,"count-"+c)}),f.removeAttr("title"),f.find(".update-count").text(c),"plugin"===b)){if(d=$pluginsMenuItem.find(".plugin-count").eq(0).text(),d=parseInt(d,10)-1,0>d||isNaN(d))return;$pluginsMenuItem.find(".plugin-count").text(d),$pluginsMenuItem.find(".update-plugins").each(function(a,b){b.className=b.className.replace(/count-\d+/,"count-"+d)}),d>0?a(".subsubsub .upgrade .count").text("("+d+")"):a(".subsubsub .upgrade").remove()}},b.updates.updatePlugin=function(c,d){var e;if("plugins"===pagenow||"plugins-network"===pagenow?e=a("#"+d).next().find(".update-message"):"plugin-install"===pagenow&&(e=a(".plugin-card-"+d).find(".update-now")),e.addClass("updating-message"),e.text(b.updates.l10n.updating),b.updates.updateLock)return void b.updates.updateQueue.push({type:"update-plugin",data:{plugin:c,slug:d}});b.updates.updateLock=!0;var f={action:"update-plugin",_ajax_nonce:b.updates.ajaxNonce,plugin:c,slug:d};a.ajax({type:"post",url:ajaxurl,data:f,complete:b.updates.updateRequestComplete})},b.updates.updateRequestComplete=function(a){if(b.updates.updateLock=!1,a.responseJSON&&a.responseJSON.success)b.updates.updateSuccess(a.responseJSON);else{var c=b.updates.l10n.updateFailed;a.responseJSON&&a.responseJSON.data&&a.responseJSON.data.error&&(c+=": "+a.responseJSON.data.error),alert(c),a.responseJSON&&a.responseJSON.data&&a.responseJSON.data.slug&&b.updates.updateError(a.responseJSON)}b.updates.queueChecker()},b.updates.updateSuccess=function(c){var d;"plugins"===pagenow||"plugins-network"===pagenow?(d=a("#"+c.data.slug).next().find(".update-message"),a("#"+c.data.slug).addClass("updated").removeClass("update"),a("#"+c.data.slug+"-update").addClass("updated").removeClass("update")):"plugin-install"===pagenow&&(d=a(".plugin-card-"+c.data.slug).find(".update-now"),d.addClass("button-disabled")),d.removeClass("updating-message").addClass("updated-message"),d.text(b.updates.l10n.updated),b.updates.decrementCount("plugin")},b.updates.updateError=function(c){var d;"plugins"===pagenow||"plugins-network"===pagenow?d=a("#"+c.data.slug).next().find(".update-message"):"plugin-install"===pagenow&&(d=a(".plugin-card-"+c.data.slug).find(".update-now")),d.removeClass("updating-message"),d.text(b.updates.l10n.updateFailed)},b.updates.installPlugin=function(c){var d=a(".plugin-card-"+c).find(".install-now");if(d.addClass("updating-message"),d.text(b.updates.l10n.installing),b.updates.updateLock)return void b.updates.updateQueue.push({type:"install-plugin",data:{slug:c}});b.updates.updateLock=!0;var e={action:"install-plugin",_ajax_nonce:b.updates.ajaxNonce,slug:c};a.ajax({type:"post",url:ajaxurl,data:e,complete:b.updates.installRequestComplete})},b.updates.installRequestComplete=function(a){if(b.updates.updateLock=!1,a.responseJSON&&a.responseJSON.success)b.updates.installSuccess(a.responseJSON);else{var c=b.updates.l10n.installFailed;a.responseJSON&&a.responseJSON.data&&a.responseJSON.data.error&&(c+=": "+a.responseJSON.data.error),alert(c),a.responseJSON&&a.responseJSON.data&&a.responseJSON.data.slug&&b.updates.installError(a.responseJSON)}b.updates.queueChecker()},b.updates.installSuccess=function(c){var d=a(".plugin-card-"+c.data.slug).find(".install-now");d.removeClass("updating-message").addClass("updated-message button-disabled"),d.text(b.updates.l10n.installed)},b.updates.installError=function(c){var d=a(".plugin-card-"+c.data.slug).find(".install-now");d.removeClass("updating-message"),d.text(b.updates.l10n.installNow)},b.updates.queueChecker=function(){if(!(b.updates.updateLock||b.updates.updateQueue.length<=0)){var a=b.updates.updateQueue.shift();switch(a.type){case"update-plugin":b.updates.updatePlugin(a.data.plugin,a.data.slug);break;case"install-plugin":b.updates.installPlugin(a.data.slug);break;default:console.log("Failed to exect queued update job."),console.log(a)}}},a(document).ready(function(){a(".plugin-update-tr .update-link").on("click",function(c){c.preventDefault();var d=a(c.target).parents(".plugin-update-tr");b.updates.updatePlugin(d.data("plugin"),d.data("slug"))}),a("#bulk-action-form").on("submit",function(c){var d,e;"update-selected"==a("#bulk-action-selector-top").val()&&(c.preventDefault(),a('input[name="checked[]"]:checked').each(function(c,f){$checkbox=a(f),d=$checkbox.val(),e=$checkbox.parents("tr").prop("id"),b.updates.updatePlugin(d,e),$checkbox.attr("checked",!1)}))}),a(".plugin-card .update-now").on("click",function(c){c.preventDefault(),$button=a(c.target),b.updates.updatePlugin($button.data("plugin"),$button.data("slug"))}),a(".plugin-card .install-now").on("click",function(c){c.preventDefault(),$button=a(c.target),$button.hasClass("button-disabled")||b.updates.installPlugin($button.data("slug"))})}),a(window).on("message",function(c){var d,e=c.originalEvent,f=document.location,g=f.protocol+"//"+f.hostname;e.origin===g&&(d=a.parseJSON(e.data),"undefined"!=typeof d.action&&"decrementUpdateCount"===d.action&&b.updates.decrementCount(d.upgradeType))})}(jQuery,window.wp);