X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/f9001779751f83dc8a10e478bfecb4d8dd5f964c..refs/tags/wordpress-3.3:/wp-admin/js/common.dev.js diff --git a/wp-admin/js/common.dev.js b/wp-admin/js/common.dev.js index 46b4b247..b8ee100e 100644 --- a/wp-admin/js/common.dev.js +++ b/wp-admin/js/common.dev.js @@ -1,131 +1,22 @@ -var showNotice, adminMenu, columns, validateForm; +var showNotice, adminMenu, columns, validateForm, screenMeta, autofold_menu; (function($){ -// sidebar admin menu +// Removed in 3.3. +// (perhaps) needed for back-compat adminMenu = { - init : function() { - 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 - t.hide(); - }); - - this.favorites(); - - $('.separator', menu).click(function(){ - if ( $('body').hasClass('folded') ) { - adminMenu.fold(1); - deleteUserSetting( 'mfold' ); - } else { - adminMenu.fold(); - setUserSetting( 'mfold', 'f' ); - } - return false; - }); - - if ( $('body').hasClass('folded') ) - this.fold(); - - this.restoreMenuState(); - }, - - restoreMenuState : function() { - $('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 ( 'o' == v ) - $(e).addClass('wp-menu-open'); - else if ( 'c' == v ) - $(e).removeClass('wp-menu-open'); - }); - }, - - toggle : function(el) { - el.slideToggle(150, function() { - var id = el.parent().toggleClass( 'wp-menu-open' ).attr('id'); - if ( id ) { - $('li.wp-has-submenu', '#adminmenu').each(function(i, e) { - if ( id == e.id ) { - var v = $(e).hasClass('wp-menu-open') ? 'o' : 'c'; - setUserSetting( 'm'+i, v ); - } - }); - } - }); - - return false; - }, - - fold : function(off) { - if (off) { - $('body').removeClass('folded'); - $('#adminmenu li.wp-has-submenu').unbind(); - } else { - $('body').addClass('folded'); - $('#adminmenu li.wp-has-submenu').hoverIntent({ - over: function(e){ - var m, b, h, o, f; - m = $(this).find('.wp-submenu'); - 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() + $(window).scrollTop() - 15; // The fold - if ( f < (b - o) ) { - o = b - f; - } - if ( o > 1 ) { - m.css({'marginTop':'-'+o+'px'}); - } else if ( m.css('marginTop') ) { - m.css({'marginTop':''}); - } - m.addClass('sub-open'); - }, - out: function(){ $(this).find('.wp-submenu').removeClass('sub-open').css({'marginTop':''}); }, - timeout: 220, - sensitivity: 8, - interval: 100 - }); - - } - }, - - 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); - }).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); - }); - } + init : function() {}, + fold : function() {}, + restoreMenuState : function() {}, + toggle : function() {}, + favorites : function() {} }; -$(document).ready(function(){ adminMenu.init(); }); - // show/hide/save table columns columns = { init : function() { var that = this; $('.hide-column-tog', '#adv-settings').click( function() { var $t = $(this), column = $t.val(); - if ( $t.attr('checked') ) + if ( $t.prop('checked') ) that.checked(column); else that.unchecked(column); @@ -182,8 +73,6 @@ validateForm = function( form ) { return !$( form ).find('.form-required').filter( function() { return $('input:visible', this).val() == ''; } ).addClass( 'form-invalid' ).find('input:visible').change( function() { $(this).closest('.form-invalid').removeClass( 'form-invalid' ); } ).size(); } -})(jQuery); - // stub for doing better warnings showNotice = { warn : function() { @@ -200,49 +89,169 @@ showNotice = { } }; -jQuery(document).ready( function($) { - var lastClicked = false, checks, first, last, checked, bgx = ( isRtl ? 'left' : 'right' ); +screenMeta = { + element: null, // #screen-meta + toggles: null, // .screen-meta-toggle + page: null, // #wpcontent - // Move .updated and .error alert boxes. Don't move boxes designed to be inline. - $('div.wrap h2:first').nextAll('div.updated, div.error').addClass('below-h2'); - $('div.updated, div.error').not('.below-h2, .inline').insertAfter( $('div.wrap h2:first') ); + init: function() { + this.element = $('#screen-meta'); + this.toggles = $('.screen-meta-toggle a'); + this.page = $('#wpcontent'); - // screen settings tab - $('#show-settings-link').click(function () { - 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({'backgroundPosition':'top '+bgx}); - $('#contextual-help-link-wrap').css('visibility', ''); - $(this).removeClass('screen-options-open'); - } else { - $('#show-settings-link').css({'backgroundPosition':'bottom '+bgx}); - $(this).addClass('screen-options-open'); - } + this.toggles.click( this.toggleEvent ); + }, + + toggleEvent: function( e ) { + var panel = $( this.href.replace(/.+#/, '#') ); + e.preventDefault(); + + if ( !panel.length ) + return; + + if ( panel.is(':visible') ) + screenMeta.close( panel, $(this) ); + else + screenMeta.open( panel, $(this) ); + }, + + open: function( panel, link ) { + + $('.screen-meta-toggle').not( link.parent() ).css('visibility', 'hidden'); + + panel.parent().show(); + panel.slideDown( 'fast', function() { + link.addClass('screen-meta-active'); }); - return false; - }); + }, - // help tab - $('#contextual-help-link').click(function () { - if ( ! $('#contextual-help-wrap').hasClass('contextual-help-open') ) - $('#screen-options-link-wrap').css('visibility', 'hidden'); - - $('#contextual-help-wrap').slideToggle('fast', function() { - if ( $(this).hasClass('contextual-help-open') ) { - $('#contextual-help-link').css({'backgroundPosition':'top '+bgx}); - $('#screen-options-link-wrap').css('visibility', ''); - $(this).removeClass('contextual-help-open'); - } else { - $('#contextual-help-link').css({'backgroundPosition':'bottom '+bgx}); - $(this).addClass('contextual-help-open'); - } + close: function( panel, link ) { + panel.slideUp( 'fast', function() { + link.removeClass('screen-meta-active'); + $('.screen-meta-toggle').css('visibility', ''); + panel.parent().hide(); }); + } +}; + +/** + * Help tabs. + */ +$('.contextual-help-tabs').delegate('a', 'click focus', function(e) { + var link = $(this), + panel; + + e.preventDefault(); + + // Don't do anything if the click is for the tab already showing. + if ( link.is('.active a') ) + return false; + + // Links + $('.contextual-help-tabs .active').removeClass('active'); + link.parent('li').addClass('active'); + + panel = $( link.attr('href') ); + + // Panels + $('.help-tab-content').not( panel ).removeClass('active').hide(); + panel.addClass('active').show(); +}); + +$(document).ready( function() { + var lastClicked = false, checks, first, last, checked, menu = $('#adminmenu'), + pageInput = $('input.current-page'), currentPage = pageInput.val(), folded, refresh; + + // admin menu + refresh = function(i, el){ // force the browser to refresh the tabbing index + var node = $(el), tab = node.attr('tabindex'); + if ( tab ) + node.attr('tabindex', '0').attr('tabindex', tab); + }; + + $('#collapse-menu', menu).click(function(){ + var body = $(document.body); + + if ( body.hasClass('folded') ) { + body.removeClass('folded'); + setUserSetting('mfold', 'o'); + } else { + body.addClass('folded'); + setUserSetting('mfold', 'f'); + } return false; }); + $('li.wp-has-submenu', menu).hoverIntent({ + over: function(e){ + var b, h, o, f, m = $(this).find('.wp-submenu'), menutop, wintop, maxtop; + + if ( !$(document.body).hasClass('folded') && $(this).hasClass('wp-menu-open') ) + return; + + menutop = $(this).offset().top; + wintop = $(window).scrollTop(); + maxtop = menutop - wintop - 30; // max = make the top of the sub almost touch admin bar + + b = menutop + m.height() + 1; // Bottom offset of the menu + h = $('#wpwrap').height(); // Height of the entire page + o = 60 + b - h; + f = $(window).height() + wintop - 15; // The fold + + if ( f < (b - o) ) + o = b - f; + + if ( o > maxtop ) + o = maxtop; + + if ( o > 1 ) + m.css({'marginTop':'-'+o+'px'}); + else if ( m.css('marginTop') ) + m.css({'marginTop':''}); + + m.addClass('sub-open'); + }, + out: function(){ + $(this).find('.wp-submenu').removeClass('sub-open'); + }, + timeout: 200, + sensitivity: 7, + interval: 90 + }); + + // Tab to select, Enter to open sub, Esc to close sub and focus the top menu + $('li.wp-has-submenu > a.wp-not-current-submenu', menu).bind('keydown.adminmenu', function(e){ + if ( e.which != 13 ) + return; + + var target = $(e.target); + + e.stopPropagation(); + e.preventDefault(); + + menu.find('.wp-submenu').removeClass('sub-open'); + target.siblings('.wp-submenu').toggleClass('sub-open').find('a[role="menuitem"]').each(refresh); + }).each(refresh); + + $('a[role="menuitem"]', menu).bind('keydown.adminmenu', function(e){ + if ( e.which != 27 ) + return; + + var target = $(e.target); + + e.stopPropagation(); + e.preventDefault(); + + target.add( target.siblings() ).closest('.sub-open').removeClass('sub-open').siblings('a.wp-not-current-submenu').focus(); + }); + + // Move .updated and .error alert boxes. Don't move boxes designed to be inline. + $('div.wrap h2:first').nextAll('div.updated, div.error').addClass('below-h2'); + $('div.updated, div.error').not('.below-h2, .inline').insertAfter( $('div.wrap h2:first') ); + + // Init screen meta + screenMeta.init(); + // check all checkboxes $('tbody').children().children('.check-column').find(':checkbox').click( function(e) { if ( 'undefined' == e.shiftKey ) { return true; } @@ -251,13 +260,13 @@ jQuery(document).ready( function($) { checks = $( lastClicked ).closest( 'form' ).find( ':checkbox' ); first = checks.index( lastClicked ); last = checks.index( this ); - checked = $(this).attr('checked'); + checked = $(this).prop('checked'); if ( 0 < first && 0 < last && first != last ) { - checks.slice( first, last ).attr( 'checked', function(){ + checks.slice( first, last ).prop( 'checked', function(){ if ( $(this).closest('tr').is(':visible') ) - return checked ? 'checked' : ''; + return checked; - return ''; + return false; }); } } @@ -266,30 +275,30 @@ jQuery(document).ready( function($) { }); $('thead, tfoot').find('.check-column :checkbox').click( function(e) { - var c = $(this).attr('checked'), + var c = $(this).prop('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() { + .prop('checked', function() { if ( $(this).closest('tr').is(':hidden') ) - return ''; + return false; if ( toggle ) - return $(this).attr( 'checked' ) ? '' : 'checked'; + return $(this).prop( 'checked' ); else if (c) - return 'checked'; - return ''; + return true; + return false; }); $(this).closest('table').children('thead, tfoot').filter(':visible') .children().children('.check-column').find(':checkbox') - .attr('checked', function() { + .prop('checked', function() { if ( toggle ) - return ''; + return false; else if (c) - return 'checked'; - return ''; + return true; + return false; }); }); @@ -300,7 +309,7 @@ jQuery(document).ready( function($) { }); // tab in textareas - $('#newcontent').keydown(function(e) { + $('#newcontent').bind('keydown.wpevent_InsertTab', function(e) { if ( e.keyCode != 9 ) return true; @@ -327,8 +336,53 @@ jQuery(document).ready( function($) { e.preventDefault(); }); - $('#newcontent').blur(function(e) { + $('#newcontent').bind('blur.wpevent_InsertTab', function(e) { if ( this.lastKey && 9 == this.lastKey ) this.focus(); }); + + if ( pageInput.length ) { + pageInput.closest('form').submit( function(e){ + + // Reset paging var for new filters/searches but not for bulk actions. See #17685. + if ( $('select[name="action"]').val() == -1 && $('select[name="action2"]').val() == -1 && pageInput.val() == currentPage ) + pageInput.val('1'); + }); + } + + // auto-fold the menu when screen is under 800px + $(window).bind('resize.autofold', function(){ + if ( getUserSetting('mfold') == 'f' ) + return; + + var width = $(window).width(); + + // fold admin menu + if ( width <= 800 ) { + if ( !folded ) { + $(document.body).addClass('folded'); + folded = true; + } + } else { + if ( folded ) { + $(document.body).removeClass('folded'); + folded = false; + } + } + + }).triggerHandler('resize'); + }); + +// internal use +$(document).bind( 'wp_CloseOnEscape', function( e, data ) { + if ( typeof(data.cb) != 'function' ) + return; + + if ( typeof(data.condition) != 'function' || data.condition() ) + data.cb(); + + return true; +}); + +})(jQuery);