From 491b68752b017350ac7fd59e36af88a274940c6c Mon Sep 17 00:00:00 2001 From: azaozz Date: Tue, 18 Aug 2009 09:53:37 +0000 Subject: [PATCH] Speed up jQuery based scripts, props Denis-de-Bernardy, see #10021 git-svn-id: http://svn.automattic.com/wordpress/trunk@11837 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-admin/js/common.dev.js | 138 ++++++++++++-------- wp-admin/js/common.js | 2 +- wp-admin/js/widgets.dev.js | 236 +++++++++++++++++----------------- wp-admin/js/widgets.js | 2 +- wp-admin/widgets.php | 21 +-- wp-includes/script-loader.php | 4 +- 6 files changed, 215 insertions(+), 188 deletions(-) diff --git a/wp-admin/js/common.dev.js b/wp-admin/js/common.dev.js index e2ff4bd24..4ea3fad0e 100644 --- a/wp-admin/js/common.dev.js +++ b/wp-admin/js/common.dev.js @@ -2,18 +2,20 @@ var showNotice, adminMenu, columns, validateForm; (function($){ // sidebar admin menu adminMenu = { - init : function() { - $('#adminmenu div.wp-menu-toggle').each( function() { - if ( $(this).siblings('.wp-submenu').length ) - $(this).click(function(){ adminMenu.toggle( $(this).siblings('.wp-submenu') ); }); + var menu = $('#adminmenu'); + + $('.wp-menu-toggle', menu).each( function() { + var t = $(this), sub = t.siblings('.wp-submenu'); + if ( sub.length ) + t.click(function(){ adminMenu.toggle( sub ); }); else - $(this).hide(); + t.hide(); }); - + this.favorites(); - - $('a.separator').click(function(){ + + $('.separator', menu).click(function(){ if ( $('body').hasClass('folded') ) { adminMenu.fold(1); deleteUserSetting( 'mfold' ); @@ -24,27 +26,31 @@ adminMenu = { return false; }); - if ( $('body').hasClass('folded') ) { + if ( $('body').hasClass('folded') ) this.fold(); - } + this.restoreMenuState(); }, restoreMenuState : function() { - $('#adminmenu li.wp-has-submenu').each(function(i, e) { + $('li.wp-has-submenu', '#adminmenu').each(function(i, e) { var v = getUserSetting( 'm'+i ); - if ( $(e).hasClass('wp-has-current-submenu') ) return true; // leave the current parent open + if ( $(e).hasClass('wp-has-current-submenu') ) + return true; // leave the current parent open - if ( 'o' == v ) $(e).addClass('wp-menu-open'); - else if ( 'c' == v ) $(e).removeClass('wp-menu-open'); + if ( 'o' == v ) + $(e).addClass('wp-menu-open'); + else if ( 'c' == v ) + $(e).removeClass('wp-menu-open'); }); }, toggle : function(el) { + el['slideToggle'](150, function() { + el.css('display',''); + }).parent().toggleClass( 'wp-menu-open' ); - el['slideToggle'](150, function(){el.css('display','');}).parent().toggleClass( 'wp-menu-open' ); - - $('#adminmenu li.wp-has-submenu').each(function(i, e) { + $('.wp-has-submenu', '#adminmenu').each(function(i, e) { var v = $(e).hasClass('wp-menu-open') ? 'o' : 'c'; setUserSetting( 'm'+i, v ); }); @@ -62,14 +68,14 @@ adminMenu = { over: function(e){ var m, b, h, o, f; m = $(this).find('.wp-submenu'); - b = m.parent().offset().top + m.height() + 1; // Bottom offset of the menu + b = $(this).offset().top + m.height() + 1; // Bottom offset of the menu h = $('#wpwrap').height(); // Height of the entire page o = 60 + b - h; - f = $(window).height() + $('body').scrollTop() - 15; // The fold - if (f < (b - o)) { + f = $(window).height() + $(window).scrollTop() - 15; // The fold + if ( f < (b - o) ) { o = b - f; } - if (o > 1) { + if ( o > 1 ) { m.css({'marginTop':'-'+o+'px'}); } else if ( m.css('marginTop') ) { m.css({'marginTop':''}); @@ -86,27 +92,42 @@ adminMenu = { }, favorites : function() { - $('#favorite-inside').width($('#favorite-actions').width()-4); - $('#favorite-toggle, #favorite-inside').bind( 'mouseenter', function(){$('#favorite-inside').removeClass('slideUp').addClass('slideDown'); setTimeout(function(){if ( $('#favorite-inside').hasClass('slideDown') ) { $('#favorite-inside').slideDown(100); $('#favorite-first').addClass('slide-down'); }}, 200) } ); - - $('#favorite-toggle, #favorite-inside').bind( 'mouseleave', function(){$('#favorite-inside').removeClass('slideDown').addClass('slideUp'); setTimeout(function(){if ( $('#favorite-inside').hasClass('slideUp') ) { $('#favorite-inside').slideUp(100, function(){ $('#favorite-first').removeClass('slide-down'); } ); }}, 300) } ); + $('#favorite-inside').width( $('#favorite-actions').width() - 4 ); + $('#favorite-toggle, #favorite-inside').bind('mouseenter', function() { + $('#favorite-inside').removeClass('slideUp').addClass('slideDown'); + setTimeout(function() { + if ( $('#favorite-inside').hasClass('slideDown') ) { + $('#favorite-inside').slideDown(100); + $('#favorite-first').addClass('slide-down'); + } + }, 200); + }).bind('mouseleave', function() { + $('#favorite-inside').removeClass('slideDown').addClass('slideUp'); + setTimeout(function() { + if ( $('#favorite-inside').hasClass('slideUp') ) { + $('#favorite-inside').slideUp(100, function() { + $('#favorite-first').removeClass('slide-down'); + }); + } + }, 300); + }); } }; -$(document).ready(function(){adminMenu.init();}); +$(document).ready(function(){ adminMenu.init(); }); // show/hide/save table columns columns = { init : function() { - $('.hide-column-tog').click( function() { - var column = $(this).val(), show = $(this).attr('checked'); - if ( show ) { + $('.hide-column-tog', '#adv-settings').click( function() { + var column = $(this).val(); + if ( $(this).attr('checked') ) $('.column-' + column).show(); - } else { + else $('.column-' + column).hide(); - } + columns.save_manage_columns_state(); - } ); + }); }, save_manage_columns_state : function() { @@ -148,17 +169,20 @@ jQuery(document).ready( function($) { var lastClicked = false, checks, first, last, checked; // pulse - $('.fade').animate( { backgroundColor: '#ffffe0' }, 300).animate( { backgroundColor: '#fffbcc' }, 300).animate( { backgroundColor: '#ffffe0' }, 300).animate( { backgroundColor: '#fffbcc' }, 300); + $('div.fade').animate( { opacity: .5 }, 400) + .animate( { opacity: 1 }, 400) + .animate( { opacity: .5 }, 400) + .animate( { opacity: 1 }, 400); // Move .updated and .error alert boxes - $('div.wrap h2 ~ div.updated, div.wrap h2 ~ div.error').addClass('below-h2'); - $('div.updated, div.error').not('.below-h2').insertAfter('div.wrap h2:first'); + $('div.wrap').children('h2:first').nextAll('div.updated, div.error').addClass('below-h2'); + $('div.updated, div.error').not('.below-h2').insertAfter( $('div.wrap').children('h2:first') ); // screen settings tab $('#show-settings-link').click(function () { - if ( ! $('#screen-options-wrap').hasClass('screen-options-open') ) { + if ( ! $('#screen-options-wrap').hasClass('screen-options-open') ) $('#contextual-help-link-wrap').css('visibility', 'hidden'); - } + $('#screen-options-wrap').slideToggle('fast', function(){ if ( $(this).hasClass('screen-options-open') ) { $('#show-settings-link').css({'backgroundImage':'url("images/screen-options-right.gif")'}); @@ -174,10 +198,10 @@ jQuery(document).ready( function($) { // help tab $('#contextual-help-link').click(function () { - if ( ! $('#contextual-help-wrap').hasClass('contextual-help-open') ) { + if ( ! $('#contextual-help-wrap').hasClass('contextual-help-open') ) $('#screen-options-link-wrap').css('visibility', 'hidden'); - } - $('#contextual-help-wrap').slideToggle('fast', function(){ + + $('#contextual-help-wrap').slideToggle('fast', function() { if ( $(this).hasClass('contextual-help-open') ) { $('#contextual-help-link').css({'backgroundImage':'url("images/screen-options-right.gif")'}); $('#screen-options-link-wrap').css('visibility', ''); @@ -189,20 +213,19 @@ jQuery(document).ready( function($) { }); return false; }); - $('#contextual-help-link-wrap, #screen-options-link-wrap').show(); // check all checkboxes - $( 'table:visible tbody .check-column :checkbox' ).click( function(e) { + $('tbody').children().children('.check-column').find(':checkbox').click( function(e) { if ( 'undefined' == e.shiftKey ) { return true; } if ( e.shiftKey ) { if ( !lastClicked ) { return true; } - checks = $( lastClicked ).parents( 'form:first' ).find( ':checkbox' ); + checks = $( lastClicked ).closest( 'form' ).find( ':checkbox' ); first = checks.index( lastClicked ); last = checks.index( this ); checked = $(this).attr('checked'); if ( 0 < first && 0 < last && first != last ) { checks.slice( first, last ).attr( 'checked', function(){ - if ( $(this).parents('tr').is(':visible') ) + if ( $(this).closest('tr').is(':visible') ) return checked ? 'checked' : ''; return ''; @@ -211,13 +234,17 @@ jQuery(document).ready( function($) { } lastClicked = this; return true; - } ); - $( 'thead :checkbox, tfoot :checkbox' ).click( function(e) { - var c = $(this).attr('checked'), kbtoggle = 'undefined' == typeof toggleWithKeyboard ? false : toggleWithKeyboard, toggle = e.shiftKey || kbtoggle; + }); - - $(this).parents( 'form:first' ).find( 'table tbody:visible' ).find( '.check-column :checkbox' ).attr( 'checked', function() { - if ( $(this).parents('tr').is(':hidden') ) + $('thead, tfoot').find(':checkbox').click( function(e) { + var c = $(this).attr('checked'), + kbtoggle = 'undefined' == typeof toggleWithKeyboard ? false : toggleWithKeyboard, + toggle = e.shiftKey || kbtoggle; + + $(this).closest( 'table' ).children( 'tbody' ).filter(':visible') + .children().children('.check-column').find(':checkbox') + .attr('checked', function() { + if ( $(this).closest('tr').is(':hidden') ) return ''; if ( toggle ) return $(this).attr( 'checked' ) ? '' : 'checked'; @@ -225,7 +252,10 @@ jQuery(document).ready( function($) { return 'checked'; return ''; }); - $(this).parents( 'form:first' ).find( 'table thead:visible, table tfoot:visible').find( '.check-column :checkbox' ).attr( 'checked', function() { + + $(this).closest('table').children('thead, tfoot').filter(':visible') + .children().children('.check-column').find(':checkbox') + .attr('checked', function() { if ( toggle ) return ''; else if (c) @@ -233,17 +263,16 @@ jQuery(document).ready( function($) { return ''; }); }); + $('#default-password-nag-no').click( function() { setUserSetting('default_password_nag', 'hide'); $('div.default-password-nag').hide(); return false; }); - - }); jQuery(document).ready( function($){ - var turboNag = $('.turbo-nag'); + var turboNag = $('span.turbo-nag', '#user_info'); if ( !turboNag.length || ('undefined' != typeof(google) && google.gears) ) return; @@ -260,5 +289,4 @@ jQuery(document).ready( function($){ } turboNag.show(); - }); diff --git a/wp-admin/js/common.js b/wp-admin/js/common.js index d9073ce29..36993f2bb 100644 --- a/wp-admin/js/common.js +++ b/wp-admin/js/common.js @@ -1 +1 @@ -var showNotice,adminMenu,columns,validateForm;(function(a){adminMenu={init:function(){a("#adminmenu div.wp-menu-toggle").each(function(){if(a(this).siblings(".wp-submenu").length){a(this).click(function(){adminMenu.toggle(a(this).siblings(".wp-submenu"))})}else{a(this).hide()}});this.favorites();a("a.separator").click(function(){if(a("body").hasClass("folded")){adminMenu.fold(1);deleteUserSetting("mfold")}else{adminMenu.fold();setUserSetting("mfold","f")}return false});if(a("body").hasClass("folded")){this.fold()}this.restoreMenuState()},restoreMenuState:function(){a("#adminmenu li.wp-has-submenu").each(function(c,d){var b=getUserSetting("m"+c);if(a(d).hasClass("wp-has-current-submenu")){return true}if("o"==b){a(d).addClass("wp-menu-open")}else{if("c"==b){a(d).removeClass("wp-menu-open")}}})},toggle:function(b){b.slideToggle(150,function(){b.css("display","")}).parent().toggleClass("wp-menu-open");a("#adminmenu li.wp-has-submenu").each(function(d,f){var c=a(f).hasClass("wp-menu-open")?"o":"c";setUserSetting("m"+d,c)});return false},fold:function(b){if(b){a("body").removeClass("folded");a("#adminmenu li.wp-has-submenu").unbind()}else{a("body").addClass("folded");a("#adminmenu li.wp-has-submenu").hoverIntent({over:function(j){var d,c,g,k,i;d=a(this).find(".wp-submenu");c=d.parent().offset().top+d.height()+1;g=a("#wpwrap").height();k=60+c-g;i=a(window).height()+a("body").scrollTop()-15;if(i<(c-k)){k=c-i}if(k>1){d.css({marginTop:"-"+k+"px"})}else{if(d.css("marginTop")){d.css({marginTop:""})}}d.addClass("sub-open")},out:function(){a(this).find(".wp-submenu").removeClass("sub-open").css({marginTop:""})},timeout:220,sensitivity:8,interval:100})}},favorites:function(){a("#favorite-inside").width(a("#favorite-actions").width()-4);a("#favorite-toggle, #favorite-inside").bind("mouseenter",function(){a("#favorite-inside").removeClass("slideUp").addClass("slideDown");setTimeout(function(){if(a("#favorite-inside").hasClass("slideDown")){a("#favorite-inside").slideDown(100);a("#favorite-first").addClass("slide-down")}},200)});a("#favorite-toggle, #favorite-inside").bind("mouseleave",function(){a("#favorite-inside").removeClass("slideDown").addClass("slideUp");setTimeout(function(){if(a("#favorite-inside").hasClass("slideUp")){a("#favorite-inside").slideUp(100,function(){a("#favorite-first").removeClass("slide-down")})}},300)})}};a(document).ready(function(){adminMenu.init()});columns={init:function(){a(".hide-column-tog").click(function(){var c=a(this).val(),b=a(this).attr("checked");if(b){a(".column-"+c).show()}else{a(".column-"+c).hide()}columns.save_manage_columns_state()})},save_manage_columns_state:function(){var b=a(".manage-column").filter(":hidden").map(function(){return this.id}).get().join(",");a.post(ajaxurl,{action:"hidden-columns",hidden:b,screenoptionnonce:a("#screenoptionnonce").val(),page:pagenow})}};a(document).ready(function(){columns.init()});validateForm=function(b){return !a(b).find(".form-required").filter(function(){return a("input:visible",this).val()==""}).addClass("form-invalid").change(function(){a(this).removeClass("form-invalid")}).size()}})(jQuery);showNotice={warn:function(){var a=commonL10n.warnDelete||"";if(confirm(a)){return true}return false},note:function(a){alert(a)}};jQuery(document).ready(function(d){var f=false,a,e,c,b;d(".fade").animate({backgroundColor:"#ffffe0"},300).animate({backgroundColor:"#fffbcc"},300).animate({backgroundColor:"#ffffe0"},300).animate({backgroundColor:"#fffbcc"},300);d("div.wrap h2 ~ div.updated, div.wrap h2 ~ div.error").addClass("below-h2");d("div.updated, div.error").not(".below-h2").insertAfter("div.wrap h2:first");d("#show-settings-link").click(function(){if(!d("#screen-options-wrap").hasClass("screen-options-open")){d("#contextual-help-link-wrap").css("visibility","hidden")}d("#screen-options-wrap").slideToggle("fast",function(){if(d(this).hasClass("screen-options-open")){d("#show-settings-link").css({backgroundImage:'url("images/screen-options-right.gif")'});d("#contextual-help-link-wrap").css("visibility","");d(this).removeClass("screen-options-open")}else{d("#show-settings-link").css({backgroundImage:'url("images/screen-options-right-up.gif")'});d(this).addClass("screen-options-open")}});return false});d("#contextual-help-link").click(function(){if(!d("#contextual-help-wrap").hasClass("contextual-help-open")){d("#screen-options-link-wrap").css("visibility","hidden")}d("#contextual-help-wrap").slideToggle("fast",function(){if(d(this).hasClass("contextual-help-open")){d("#contextual-help-link").css({backgroundImage:'url("images/screen-options-right.gif")'});d("#screen-options-link-wrap").css("visibility","");d(this).removeClass("contextual-help-open")}else{d("#contextual-help-link").css({backgroundImage:'url("images/screen-options-right-up.gif")'});d(this).addClass("contextual-help-open")}});return false});d("#contextual-help-link-wrap, #screen-options-link-wrap").show();d("table:visible tbody .check-column :checkbox").click(function(g){if("undefined"==g.shiftKey){return true}if(g.shiftKey){if(!f){return true}a=d(f).parents("form:first").find(":checkbox");e=a.index(f);c=a.index(this);b=d(this).attr("checked");if(01){d.css({marginTop:"-"+k+"px"})}else{if(d.css("marginTop")){d.css({marginTop:""})}}d.addClass("sub-open")},out:function(){a(this).find(".wp-submenu").removeClass("sub-open").css({marginTop:""})},timeout:220,sensitivity:8,interval:100})}},favorites:function(){a("#favorite-inside").width(a("#favorite-actions").width()-4);a("#favorite-toggle, #favorite-inside").bind("mouseenter",function(){a("#favorite-inside").removeClass("slideUp").addClass("slideDown");setTimeout(function(){if(a("#favorite-inside").hasClass("slideDown")){a("#favorite-inside").slideDown(100);a("#favorite-first").addClass("slide-down")}},200)}).bind("mouseleave",function(){a("#favorite-inside").removeClass("slideDown").addClass("slideUp");setTimeout(function(){if(a("#favorite-inside").hasClass("slideUp")){a("#favorite-inside").slideUp(100,function(){a("#favorite-first").removeClass("slide-down")})}},300)})}};a(document).ready(function(){adminMenu.init()});columns={init:function(){a(".hide-column-tog","#adv-settings").click(function(){var b=a(this).val();if(a(this).attr("checked")){a(".column-"+b).show()}else{a(".column-"+b).hide()}columns.save_manage_columns_state()})},save_manage_columns_state:function(){var b=a(".manage-column").filter(":hidden").map(function(){return this.id}).get().join(",");a.post(ajaxurl,{action:"hidden-columns",hidden:b,screenoptionnonce:a("#screenoptionnonce").val(),page:pagenow})}};a(document).ready(function(){columns.init()});validateForm=function(b){return !a(b).find(".form-required").filter(function(){return a("input:visible",this).val()==""}).addClass("form-invalid").change(function(){a(this).removeClass("form-invalid")}).size()}})(jQuery);showNotice={warn:function(){var a=commonL10n.warnDelete||"";if(confirm(a)){return true}return false},note:function(a){alert(a)}};jQuery(document).ready(function(d){var f=false,a,e,c,b;d("div.fade").animate({opacity:0.5},400).animate({opacity:1},400).animate({opacity:0.5},400).animate({opacity:1},400);d("div.wrap").children("h2:first").nextAll("div.updated, div.error").addClass("below-h2");d("div.updated, div.error").not(".below-h2").insertAfter(d("div.wrap").children("h2:first"));d("#show-settings-link").click(function(){if(!d("#screen-options-wrap").hasClass("screen-options-open")){d("#contextual-help-link-wrap").css("visibility","hidden")}d("#screen-options-wrap").slideToggle("fast",function(){if(d(this).hasClass("screen-options-open")){d("#show-settings-link").css({backgroundImage:'url("images/screen-options-right.gif")'});d("#contextual-help-link-wrap").css("visibility","");d(this).removeClass("screen-options-open")}else{d("#show-settings-link").css({backgroundImage:'url("images/screen-options-right-up.gif")'});d(this).addClass("screen-options-open")}});return false});d("#contextual-help-link").click(function(){if(!d("#contextual-help-wrap").hasClass("contextual-help-open")){d("#screen-options-link-wrap").css("visibility","hidden")}d("#contextual-help-wrap").slideToggle("fast",function(){if(d(this).hasClass("contextual-help-open")){d("#contextual-help-link").css({backgroundImage:'url("images/screen-options-right.gif")'});d("#screen-options-link-wrap").css("visibility","");d(this).removeClass("contextual-help-open")}else{d("#contextual-help-link").css({backgroundImage:'url("images/screen-options-right-up.gif")'});d(this).addClass("contextual-help-open")}});return false});d("tbody").children().children(".check-column").find(":checkbox").click(function(g){if("undefined"==g.shiftKey){return true}if(g.shiftKey){if(!f){return true}a=d(f).closest("form").find(":checkbox");e=a.index(f);c=a.index(this);b=d(this).attr("checked");if(0 250 && inside.closest('div.widgets-sortables').length ) { + css['width'] = w + 30 + 'px'; + if ( inside.closest('div.widget-liquid-right').length ) + css['marginLeft'] = 235 - w + 'px'; + widget.css(css); + } + wpWidgets.fixLabels(widget); + inside.slideDown('fast'); } else { - $(this).parent().removeClass('closed'); + inside.slideUp('fast', function() { + widget.css({'width':'','marginLeft':''}); + }); } - }); + return false; + }); - $('#widgets-right .widget, #wp_inactive_widgets .widget').each(function(){ + $('input.widget-control-save').live('click', function(){ + wpWidgets.save( $(this).closest('div.widget'), 0, 1, 0 ); + return false; + }); + + $('a.widget-control-remove').live('click', function(){ + wpWidgets.save( $(this).closest('div.widget'), 1, 1, 0 ); + return false; + }); + + $('a.widget-control-close').live('click', function(){ + wpWidgets.close( $(this).closest('div.widget') ); + return false; + }); + + sidebars.children('.widget').each(function() { wpWidgets.appendTitle(this); + if ( $('p.widget-error', this).length ) + $('a.widget-action', this).click(); }); - this.addEvents(); - $('.widget-error').parents('.widget').find('a.widget-action').click(); - - $('#available-widgets').droppable({ - tolerance: 'pointer', - accept: function(o){ - return $(o).parent().attr('id') != 'widget-list'; - }, - drop: function(e,ui) { - ui.draggable.addClass('deleting'); - $('#removing-widget').hide().children('span').html(''); - }, - over: function(e,ui) { - ui.draggable.addClass('deleting'); - $('.widget-placeholder').hide(); - - if ( ui.draggable.hasClass('ui-sortable-helper') ) - $('#removing-widget').show().children('span').html( ui.draggable.find('.widget-title h4').html() ); - }, - out: function(e,ui) { - ui.draggable.removeClass('deleting'); - $('.widget-placeholder').show(); - $('#removing-widget').hide().children('span').html(''); - } - }); - - $('#widget-list .widget').draggable({ - connectToSortable: '.widgets-sortables', - handle: '.widget-title', + $('#widget-list').children('.widget').draggable({ + connectToSortable: 'div.widgets-sortables', + handle: '> .widget-top > .widget-title', distance: 2, helper: 'clone', zIndex: 5, containment: 'document', start: function(e,ui) { wpWidgets.fixWebkit(1); - ui.helper.find('.widget-description').hide(); + ui.helper.find('div.widget-description').hide(); }, stop: function(e,ui) { if ( rem ) @@ -78,17 +87,17 @@ wpWidgets = { } }); - $('.widgets-sortables').sortable({ + sidebars.sortable({ placeholder: 'widget-placeholder', - connectWith: '.widgets-sortables', - items: '.widget', - handle: '.widget-title', + items: '> .widget', + handle: '> .widget-top > .widget-title', + connectWith: 'div.widgets-sortables', cursor: 'move', distance: 2, containment: 'document', start: function(e,ui) { wpWidgets.fixWebkit(1); - ui.item.find('.widget-inside').hide(); + ui.item.children('.widget-inside').hide(); ui.item.css({'marginLeft':'','width':''}); }, stop: function(e,ui) { @@ -101,7 +110,10 @@ wpWidgets = { return; } - var add = ui.item.find('input.add_new').val(), n = ui.item.find('input.multi_number').val(), id = ui.item.attr('id'), sb = $(this).attr('id'); + var add = ui.item.find('input.add_new').val(), + n = ui.item.find('input.multi_number').val(), + id = ui.item.attr('id'), + sb = $(this).attr('id'); ui.item.css({'marginLeft':'','width':''}); wpWidgets.fixWebkit(); @@ -115,7 +127,6 @@ wpWidgets = { ui.item.attr( 'id', 'new-' + id ); rem = 'div#' + id; } - wpWidgets.addEvents(ui.item); wpWidgets.save( ui.item, 0, 0, 1 ); ui.item.find('input.add_new').val(''); ui.item.find('a.widget-action').click(); @@ -127,14 +138,36 @@ wpWidgets = { if ( !$(this).is(':visible') ) $(this).sortable('cancel'); } - }).not(':visible').sortable('disable'); - wpWidgets.resize(); - wpWidgets.fixLabels(); + }).parent().filter('.closed').children('.widgets-sortables').sortable('disable'); + + $('#available-widgets').droppable({ + tolerance: 'pointer', + accept: function(o){ + return $(o).parent().attr('id') != 'widget-list'; + }, + drop: function(e,ui) { + ui.draggable.addClass('deleting'); + $('#removing-widget').hide().children('span').html(''); + }, + over: function(e,ui) { + ui.draggable.addClass('deleting'); + $('div.widget-placeholder').hide(); + + if ( ui.draggable.hasClass('ui-sortable-helper') ) + $('#removing-widget').show().children('span') + .html( ui.draggable.find('div.widget-title').children('h4').html() ); + }, + out: function(e,ui) { + ui.draggable.removeClass('deleting'); + $('div.widget-placeholder').show(); + $('#removing-widget').hide().children('span').html(''); + } + }); }, saveOrder : function(sb) { if ( sb ) - $('#' + sb).parents('.widgets-holder-wrap').find('.ajax-feedback').css('visibility', 'visible'); + $('#' + sb).closest('div.widgets-holder-wrap').find('img.ajax-feedback').css('visibility', 'visible'); var a = { action: 'widgets-order', @@ -142,20 +175,21 @@ wpWidgets = { sidebars: [] }; - $('.widgets-sortables').each( function() { + $('div.widgets-sortables').each( function() { a['sidebars[' + $(this).attr('id') + ']'] = $(this).sortable('toArray').join(','); }); $.post( ajaxurl, a, function() { - $('.ajax-feedback').css('visibility', 'hidden'); + $('img.ajax-feedback').css('visibility', 'hidden'); }); + this.resize(); }, save : function(widget, del, animate, order) { - var sb = widget.parents('.widgets-sortables').attr('id'), data = widget.find('form').serialize(), a; + var sb = widget.closest('div.widgets-sortables').attr('id'), data = widget.find('form').serialize(), a; widget = $(widget); - widget.find('.ajax-feedback').css('visibility', 'visible'); + $('.ajax-feedback', widget).css('visibility', 'visible'); a = { action: 'save-widget', @@ -172,11 +206,11 @@ wpWidgets = { var id; if ( del ) { - if ( !$('.widget_number', widget).val() ) { - id = $('.widget-id', widget).val(); - $('#available-widgets .widget-id').each(function(){ + if ( !$('input.widget_number', widget).val() ) { + id = $('input.widget-id', widget).val(); + $('#available-widgets').find('input.widget-id').each(function(){ if ( $(this).val() == id ) - $(this).parents('.widget').show(); + $(this).closest('div.widget').show(); }); } @@ -193,7 +227,7 @@ wpWidgets = { } else { $('.ajax-feedback').css('visibility', 'hidden'); if ( r && r.length > 2 ) { - $('.widget-content', widget).html(r); + $('div.widget-content', widget).html(r); wpWidgets.appendTitle(widget); wpWidgets.fixLabels(widget); } @@ -204,20 +238,17 @@ wpWidgets = { }, appendTitle : function(widget) { - $('input[type="text"]', widget).each(function(){ - var title; - if ( this.id.indexOf('title') != -1 ) { - title = $(this).val().replace(/<[^<>]+>/g, '').replace(//g, '>'); - if ( title ) - $('.widget-title .in-widget-title', widget).html(': ' + title); - return false; - } - }); + var title = $('input[id*="-title"]', widget); + if ( title = title.val() ) { + title = title.replace(/<[^<>]+>/g, '').replace(//g, '>'); + $(widget).children('.widget-top').children('.widget-title').children() + .children('.in-widget-title').html(': ' + title); + } }, resize : function() { - $('.widgets-sortables').not('#wp_inactive_widgets').each(function(){ - var h = 50, H = $('.widget', this).length; + $('div.widgets-sortables').not('#wp_inactive_widgets').each(function(){ + var h = 50, H = $(this).children('.widget').length; h = h + parseInt(H * 48, 10); $(this).css( 'minHeight', h + 'px' ); }); @@ -230,55 +261,22 @@ wpWidgets = { KhtmlUserSelect: n }); }, - - fixLabels : function(sc) { - sc = sc || document; - $('.widget-inside label', sc).each(function(){ + fixLabels : function(widget) { + widget.children('.widget-inside').find('label').each(function(){ var f = $(this).attr('for'); - if ( f && f == $('input', this).attr('id') ) $(this).removeAttr('for'); }); }, - - close : function(widget) { - widget.find('.widget-inside').slideUp('fast', function(){ - widget.css({'width':'','marginLeft':''}); - }); - }, - addEvents : function(sc) { - sc = sc || document; - $('a.widget-action', sc).click(function(){ - var w = parseInt( $(this).parents('.widget').find('.widget-width').val(), 10 ), css = {}, inside = $(this).parents('.widget-top').siblings('.widget-inside'); - if ( inside.is(':hidden') ) { - if ( w > 250 && inside.parents('.widgets-sortables').length ) { - css['width'] = w + 30 + 'px'; - if ( inside.parents('.widget-liquid-right').length ) - css['marginLeft'] = 235 - w + 'px'; - inside.parents('.widget').css(css); - } - inside.slideDown('fast'); - } else { - inside.slideUp('fast', function(){ inside.parents('.widget').css({'width':'','marginLeft':''}); }); - } - return false; - }); - $('.widget-control-save', sc).click(function(){ - wpWidgets.save( $(this).parents('.widget'), 0, 1, 0 ); - return false; - }); - $('.widget-control-remove', sc).click(function(){ - wpWidgets.save( $(this).parents('.widget'), 1, 1, 0 ); - return false; - }); - $('.widget-control-close', sc).click(function(){ - wpWidgets.close( $(this).parents('.widget') ); - return false; + close : function(widget) { + widget.children('.widget-inside').slideUp('fast', function(){ + widget.css({'width':'','marginLeft':''}); }); } }; -$(document).ready(function(){wpWidgets.init();}); + +$(document).ready(function($){ wpWidgets.init(); }); })(jQuery); diff --git a/wp-admin/js/widgets.js b/wp-admin/js/widgets.js index 60389f899..205501277 100644 --- a/wp-admin/js/widgets.js +++ b/wp-admin/js/widgets.js @@ -1 +1 @@ -var wpWidgets;(function(a){wpWidgets={init:function(){var b;if(a("body").hasClass("widgets_access")){return}a("#widgets-right div.sidebar-name").click(function(){var d=a(this).siblings(".widgets-sortables");if(d.is(":visible")){d.sortable("disable");a(this).parent().addClass("closed")}else{a(this).parent().removeClass("closed");d.sortable("enable").sortable("refresh")}});a("#widgets-left div.sidebar-name").click(function(){if(a(this).siblings(".widget-holder").is(":visible")){a(this).parent().addClass("closed")}else{a(this).parent().removeClass("closed")}});a("#widgets-right .widget, #wp_inactive_widgets .widget").each(function(){wpWidgets.appendTitle(this)});this.addEvents();a(".widget-error").parents(".widget").find("a.widget-action").click();a("#available-widgets").droppable({tolerance:"pointer",accept:function(c){return a(c).parent().attr("id")!="widget-list"},drop:function(d,c){c.draggable.addClass("deleting");a("#removing-widget").hide().children("span").html("")},over:function(d,c){c.draggable.addClass("deleting");a(".widget-placeholder").hide();if(c.draggable.hasClass("ui-sortable-helper")){a("#removing-widget").show().children("span").html(c.draggable.find(".widget-title h4").html())}},out:function(d,c){c.draggable.removeClass("deleting");a(".widget-placeholder").show();a("#removing-widget").hide().children("span").html("")}});a("#widget-list .widget").draggable({connectToSortable:".widgets-sortables",handle:".widget-title",distance:2,helper:"clone",zIndex:5,containment:"document",start:function(d,c){wpWidgets.fixWebkit(1);c.helper.find(".widget-description").hide()},stop:function(d,c){if(b){a(b).hide()}b="";wpWidgets.fixWebkit()}});a(".widgets-sortables").sortable({placeholder:"widget-placeholder",connectWith:".widgets-sortables",items:".widget",handle:".widget-title",cursor:"move",distance:2,containment:"document",start:function(d,c){wpWidgets.fixWebkit(1);c.item.find(".widget-inside").hide();c.item.css({marginLeft:"",width:""})},stop:function(f,c){if(c.item.hasClass("ui-draggable")){c.item.draggable("destroy")}if(c.item.hasClass("deleting")){wpWidgets.save(c.item,1,0,1);c.item.remove();return}var d=c.item.find("input.add_new").val(),i=c.item.find("input.multi_number").val(),h=c.item.attr("id"),g=a(this).attr("id");c.item.css({marginLeft:"",width:""});wpWidgets.fixWebkit();if(d){if("multi"==d){c.item.html(c.item.html().replace(/<[^<>]+>/g,function(e){return e.replace(/__i__|%i%/g,i)}));c.item.attr("id",h.replace(/__i__|%i%/g,i));i++;a("div#"+h).find("input.multi_number").val(i)}else{if("single"==d){c.item.attr("id","new-"+h);b="div#"+h}}wpWidgets.addEvents(c.item);wpWidgets.save(c.item,0,0,1);c.item.find("input.add_new").val("");c.item.find("a.widget-action").click();return}wpWidgets.saveOrder(g)},receive:function(d,c){if(!a(this).is(":visible")){a(this).sortable("cancel")}}}).not(":visible").sortable("disable");wpWidgets.resize();wpWidgets.fixLabels()},saveOrder:function(c){if(c){a("#"+c).parents(".widgets-holder-wrap").find(".ajax-feedback").css("visibility","visible")}var b={action:"widgets-order",savewidgets:a("#_wpnonce_widgets").val(),sidebars:[]};a(".widgets-sortables").each(function(){b["sidebars["+a(this).attr("id")+"]"]=a(this).sortable("toArray").join(",")});a.post(ajaxurl,b,function(){a(".ajax-feedback").css("visibility","hidden")});this.resize()},save:function(g,d,e,b){var h=g.parents(".widgets-sortables").attr("id"),f=g.find("form").serialize(),c;g=a(g);g.find(".ajax-feedback").css("visibility","visible");c={action:"save-widget",savewidgets:a("#_wpnonce_widgets").val(),sidebar:h};if(d){c.delete_widget=1}f+="&"+a.param(c);a.post(ajaxurl,f,function(i){var j;if(d){if(!a(".widget_number",g).val()){j=a(".widget-id",g).val();a("#available-widgets .widget-id").each(function(){if(a(this).val()==j){a(this).parents(".widget").show()}})}if(e){b=0;g.slideUp("fast",function(){a(this).remove();wpWidgets.saveOrder()})}else{g.remove();wpWidgets.resize()}}else{a(".ajax-feedback").css("visibility","hidden");if(i&&i.length>2){a(".widget-content",g).html(i);wpWidgets.appendTitle(g);wpWidgets.fixLabels(g)}}if(b){wpWidgets.saveOrder()}})},appendTitle:function(b){a('input[type="text"]',b).each(function(){var c;if(this.id.indexOf("title")!=-1){c=a(this).val().replace(/<[^<>]+>/g,"").replace(//g,">");if(c){a(".widget-title .in-widget-title",b).html(": "+c)}return false}})},resize:function(){a(".widgets-sortables").not("#wp_inactive_widgets").each(function(){var c=50,b=a(".widget",this).length;c=c+parseInt(b*48,10);a(this).css("minHeight",c+"px")})},fixWebkit:function(b){b=b?"none":"";a("body").css({WebkitUserSelect:b,KhtmlUserSelect:b})},fixLabels:function(b){b=b||document;a(".widget-inside label",b).each(function(){var c=a(this).attr("for");if(c&&c==a("input",this).attr("id")){a(this).removeAttr("for")}})},close:function(b){b.find(".widget-inside").slideUp("fast",function(){b.css({width:"",marginLeft:""})})},addEvents:function(b){b=b||document;a("a.widget-action",b).click(function(){var d=parseInt(a(this).parents(".widget").find(".widget-width").val(),10),e={},c=a(this).parents(".widget-top").siblings(".widget-inside");if(c.is(":hidden")){if(d>250&&c.parents(".widgets-sortables").length){e.width=d+30+"px";if(c.parents(".widget-liquid-right").length){e.marginLeft=235-d+"px"}c.parents(".widget").css(e)}c.slideDown("fast")}else{c.slideUp("fast",function(){c.parents(".widget").css({width:"",marginLeft:""})})}return false});a(".widget-control-save",b).click(function(){wpWidgets.save(a(this).parents(".widget"),0,1,0);return false});a(".widget-control-remove",b).click(function(){wpWidgets.save(a(this).parents(".widget"),1,1,0);return false});a(".widget-control-close",b).click(function(){wpWidgets.close(a(this).parents(".widget"));return false})}};a(document).ready(function(){wpWidgets.init()})})(jQuery); \ No newline at end of file +var wpWidgets;(function(a){wpWidgets={init:function(){var c,b=a("div.widgets-sortables");a("#widgets-right").children(".widgets-holder-wrap").children(".sidebar-name").click(function(){var e=a(this).siblings(".widgets-sortables"),d=a(this).parent();if(!d.hasClass("closed")){e.sortable("disable");d.addClass("closed")}else{d.removeClass("closed");e.sortable("enable").sortable("refresh")}});a("#widgets-left").children(".widgets-holder-wrap").children(".sidebar-name").click(function(){a(this).siblings(".widget-holder").parent().toggleClass("closed")});b.not("#wp_inactive_widgets").each(function(){var e=50,d=a(this).children(".widget").length;e=e+parseInt(d*48,10);a(this).css("minHeight",e+"px")});a("a.widget-action").live("click",function(){var f={},g=a(this).closest("div.widget"),d=g.children(".widget-inside"),e=parseInt(g.find("input.widget-width").val(),10);if(d.is(":hidden")){if(e>250&&d.closest("div.widgets-sortables").length){f.width=e+30+"px";if(d.closest("div.widget-liquid-right").length){f.marginLeft=235-e+"px"}g.css(f)}wpWidgets.fixLabels(g);d.slideDown("fast")}else{d.slideUp("fast",function(){g.css({width:"",marginLeft:""})})}return false});a("input.widget-control-save").live("click",function(){wpWidgets.save(a(this).closest("div.widget"),0,1,0);return false});a("a.widget-control-remove").live("click",function(){wpWidgets.save(a(this).closest("div.widget"),1,1,0);return false});a("a.widget-control-close").live("click",function(){wpWidgets.close(a(this).closest("div.widget"));return false});b.children(".widget").each(function(){wpWidgets.appendTitle(this);if(a("p.widget-error",this).length){a("a.widget-action",this).click()}});a("#widget-list").children(".widget").draggable({connectToSortable:"div.widgets-sortables",handle:"> .widget-top > .widget-title",distance:2,helper:"clone",zIndex:5,containment:"document",start:function(f,d){wpWidgets.fixWebkit(1);d.helper.find("div.widget-description").hide()},stop:function(f,d){if(c){a(c).hide()}c="";wpWidgets.fixWebkit()}});b.sortable({placeholder:"widget-placeholder",items:"> .widget",handle:"> .widget-top > .widget-title",connectWith:"div.widgets-sortables",cursor:"move",distance:2,containment:"document",start:function(f,d){wpWidgets.fixWebkit(1);d.item.children(".widget-inside").hide();d.item.css({marginLeft:"",width:""})},stop:function(g,d){if(d.item.hasClass("ui-draggable")){d.item.draggable("destroy")}if(d.item.hasClass("deleting")){wpWidgets.save(d.item,1,0,1);d.item.remove();return}var f=d.item.find("input.add_new").val(),j=d.item.find("input.multi_number").val(),i=d.item.attr("id"),h=a(this).attr("id");d.item.css({marginLeft:"",width:""});wpWidgets.fixWebkit();if(f){if("multi"==f){d.item.html(d.item.html().replace(/<[^<>]+>/g,function(e){return e.replace(/__i__|%i%/g,j)}));d.item.attr("id",i.replace(/__i__|%i%/g,j));j++;a("div#"+i).find("input.multi_number").val(j)}else{if("single"==f){d.item.attr("id","new-"+i);c="div#"+i}}wpWidgets.save(d.item,0,0,1);d.item.find("input.add_new").val("");d.item.find("a.widget-action").click();return}wpWidgets.saveOrder(h)},receive:function(f,d){if(!a(this).is(":visible")){a(this).sortable("cancel")}}}).parent().filter(".closed").children(".widgets-sortables").sortable("disable");a("#available-widgets").droppable({tolerance:"pointer",accept:function(d){return a(d).parent().attr("id")!="widget-list"},drop:function(f,d){d.draggable.addClass("deleting");a("#removing-widget").hide().children("span").html("")},over:function(f,d){d.draggable.addClass("deleting");a("div.widget-placeholder").hide();if(d.draggable.hasClass("ui-sortable-helper")){a("#removing-widget").show().children("span").html(d.draggable.find("div.widget-title").children("h4").html())}},out:function(f,d){d.draggable.removeClass("deleting");a("div.widget-placeholder").show();a("#removing-widget").hide().children("span").html("")}})},saveOrder:function(c){if(c){a("#"+c).closest("div.widgets-holder-wrap").find("img.ajax-feedback").css("visibility","visible")}var b={action:"widgets-order",savewidgets:a("#_wpnonce_widgets").val(),sidebars:[]};a("div.widgets-sortables").each(function(){b["sidebars["+a(this).attr("id")+"]"]=a(this).sortable("toArray").join(",")});a.post(ajaxurl,b,function(){a("img.ajax-feedback").css("visibility","hidden")});this.resize()},save:function(g,d,e,b){var h=g.closest("div.widgets-sortables").attr("id"),f=g.find("form").serialize(),c;g=a(g);a(".ajax-feedback",g).css("visibility","visible");c={action:"save-widget",savewidgets:a("#_wpnonce_widgets").val(),sidebar:h};if(d){c.delete_widget=1}f+="&"+a.param(c);a.post(ajaxurl,f,function(i){var j;if(d){if(!a("input.widget_number",g).val()){j=a("input.widget-id",g).val();a("#available-widgets").find("input.widget-id").each(function(){if(a(this).val()==j){a(this).closest("div.widget").show()}})}if(e){b=0;g.slideUp("fast",function(){a(this).remove();wpWidgets.saveOrder()})}else{g.remove();wpWidgets.resize()}}else{a(".ajax-feedback").css("visibility","hidden");if(i&&i.length>2){a("div.widget-content",g).html(i);wpWidgets.appendTitle(g);wpWidgets.fixLabels(g)}}if(b){wpWidgets.saveOrder()}})},appendTitle:function(b){var c=a('input[id*="-title"]',b);if(c=c.val()){c=c.replace(/<[^<>]+>/g,"").replace(//g,">");a(b).children(".widget-top").children(".widget-title").children().children(".in-widget-title").html(": "+c)}},resize:function(){a("div.widgets-sortables").not("#wp_inactive_widgets").each(function(){var c=50,b=a(this).children(".widget").length;c=c+parseInt(b*48,10);a(this).css("minHeight",c+"px")})},fixWebkit:function(b){b=b?"none":"";a("body").css({WebkitUserSelect:b,KhtmlUserSelect:b})},fixLabels:function(b){b.children(".widget-inside").find("label").each(function(){var c=a(this).attr("for");if(c&&c==a("input",this).attr("id")){a(this).removeAttr("for")}})},close:function(b){b.children(".widget-inside").slideUp("fast",function(){b.css({width:"",marginLeft:""})})}};a(document).ready(function(b){wpWidgets.init()})})(jQuery); \ No newline at end of file diff --git a/wp-admin/widgets.php b/wp-admin/widgets.php index fc5942115..09aa75a37 100644 --- a/wp-admin/widgets.php +++ b/wp-admin/widgets.php @@ -15,9 +15,19 @@ require_once(ABSPATH . 'wp-admin/includes/widgets.php'); if ( ! current_user_can('switch_themes') ) wp_die( __( 'Cheatin’ uh?' )); -wp_enqueue_script('admin-widgets'); wp_admin_css( 'widgets' ); +$widgets_access = get_user_setting( 'widgets_access' ); +if ( isset($_GET['widgets-access']) ) { + $widgets_access = 'on' == $_GET['widgets-access'] ? 'on' : 'off'; + set_user_setting( 'widgets_access', $widgets_access ); +} + +if ( 'on' == $widgets_access ) + add_filter( 'admin_body_class', create_function('', '{return " widgets_access ";}') ); +else + wp_enqueue_script('admin-widgets'); + do_action( 'sidebar_admin_setup' ); $title = __( 'Widgets' ); @@ -302,15 +312,6 @@ if ( isset($_GET['editwidget']) && $_GET['editwidget'] ) { exit; } -$widgets_access = get_user_setting( 'widgets_access' ); -if ( isset($_GET['widgets-access']) ) { - $widgets_access = 'on' == $_GET['widgets-access'] ? 'on' : 'off'; - set_user_setting( 'widgets_access', $widgets_access ); -} - -if ( 'on' == $widgets_access ) - add_filter( 'admin_body_class', create_function('', '{return " widgets_access ";}') ); - $messages = array( __('Changes saved.') ); diff --git a/wp-includes/script-loader.php b/wp-includes/script-loader.php index efe51120a..267cea920 100644 --- a/wp-includes/script-loader.php +++ b/wp-includes/script-loader.php @@ -60,7 +60,7 @@ function wp_default_scripts( &$scripts ) { $scripts->add( 'utils', "/wp-admin/js/utils$suffix.js", false, '20090102' ); - $scripts->add( 'common', "/wp-admin/js/common$suffix.js", array('jquery', 'hoverIntent', 'utils'), '20090730' ); + $scripts->add( 'common', "/wp-admin/js/common$suffix.js", array('jquery', 'hoverIntent', 'utils'), '20090817' ); $scripts->add_data( 'common', 'group', 1 ); $scripts->localize( 'common', 'commonL10n', array( 'warnDelete' => __("You are about to permanently delete the selected items.\n 'Cancel' to stop, 'OK' to delete."), @@ -340,7 +340,7 @@ function wp_default_scripts( &$scripts ) { $scripts->add( 'media-upload', "/wp-admin/js/media-upload$suffix.js", array( 'thickbox' ), '20090114' ); $scripts->add_data( 'media-upload', 'group', 1 ); - $scripts->add( 'admin-widgets', "/wp-admin/js/widgets$suffix.js", array( 'jquery-ui-sortable', 'jquery-ui-draggable', 'jquery-ui-droppable' ), '20090601' ); + $scripts->add( 'admin-widgets', "/wp-admin/js/widgets$suffix.js", array( 'jquery-ui-sortable', 'jquery-ui-draggable', 'jquery-ui-droppable' ), '20090817' ); $scripts->add_data( 'admin-widgets', 'group', 1 ); $scripts->add( 'word-count', "/wp-admin/js/word-count$suffix.js", array( 'jquery' ), '20090422' );