diff -r 2f6f6f7551ca -r 32102edaa81b web/wp-admin/js/common.dev.js --- a/web/wp-admin/js/common.dev.js Thu Sep 16 15:45:36 2010 +0000 +++ b/web/wp-admin/js/common.dev.js Mon Nov 19 18:26:13 2012 +0100 @@ -1,147 +1,69 @@ -var showNotice, adminMenu, columns, validateForm; +var showNotice, adminMenu, columns, validateForm, screenMeta; (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) { - var id = el.slideToggle(150, function() { - el.css('display',''); - }).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 column = $(this).val(); - if ( $(this).attr('checked') ) - $('.column-' + column).show(); + var $t = $(this), column = $t.val(); + if ( $t.prop('checked') ) + that.checked(column); else - $('.column-' + column).hide(); + that.unchecked(column); - columns.save_manage_columns_state(); + columns.saveManageColumnsState(); }); }, - save_manage_columns_state : function() { - var hidden = $('.manage-column').filter(':hidden').map(function() { return this.id; }).get().join(','); + saveManageColumnsState : function() { + var hidden = this.hidden(); $.post(ajaxurl, { action: 'hidden-columns', hidden: hidden, screenoptionnonce: $('#screenoptionnonce').val(), page: pagenow }); + }, + + checked : function(column) { + $('.column-' + column).show(); + this.colSpanChange(+1); + }, + + unchecked : function(column) { + $('.column-' + column).hide(); + this.colSpanChange(-1); + }, + + hidden : function() { + return $('.manage-column').filter(':hidden').map(function() { return this.id; }).get().join(','); + }, + + useCheckboxesForHidden : function() { + this.hidden = function(){ + return $('.hide-column-tog').not(':checked').map(function() { + var id = this.id; + return id.substring( id, id.length - 5 ); + }).get().join(','); + }; + }, + + colSpanChange : function(diff) { + var $t = $('table').find('.colspanchange'), n; + if ( !$t.length ) + return; + n = parseInt( $t.attr('colspan'), 10 ) + diff; + $t.attr('colspan', n.toString()); } } @@ -151,8 +73,6 @@ 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() { @@ -169,49 +89,173 @@ } }; -jQuery(document).ready( function($) { - var lastClicked = false, checks, first, last, checked; +screenMeta = { + element: null, // #screen-meta + toggles: null, // .screen-meta-toggle + page: null, // #wpcontent + + init: function() { + this.element = $('#screen-meta'); + this.toggles = $('.screen-meta-toggle a'); + this.page = $('#wpcontent'); + + this.toggles.click( this.toggleEvent ); + }, + + toggleEvent: function( e ) { + var panel = $( this.href.replace(/.+#/, '#') ); + e.preventDefault(); + + if ( !panel.length ) + return; - // Move .updated and .error alert boxes - $('div.wrap h2:first').nextAll('div.updated, div.error').addClass('below-h2'); - $('div.updated, div.error').not('.below-h2').insertAfter( $('div.wrap h2:first') ); + 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'); + }); + }, + + close: function( panel, link ) { + panel.slideUp( 'fast', function() { + link.removeClass('screen-meta-active'); + $('.screen-meta-toggle').css('visibility', ''); + panel.parent().hide(); + }); + } +}; - // screen settings tab - $('#show-settings-link').click(function () { - if ( ! $('#screen-options-wrap').hasClass('screen-options-open') ) - $('#contextual-help-link-wrap').css('visibility', 'hidden'); +/** + * 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(); +}); - $('#screen-options-wrap').slideToggle('fast', function(){ - if ( $(this).hasClass('screen-options-open') ) { - $('#show-settings-link').css({'backgroundImage':'url("images/screen-options-right.gif")'}); - $('#contextual-help-link-wrap').css('visibility', ''); - $(this).removeClass('screen-options-open'); - } else { - $('#show-settings-link').css({'backgroundImage':'url("images/screen-options-right-up.gif")'}); - $(this).addClass('screen-options-open'); - } - }); +$(document).ready( function() { + var lastClicked = false, checks, first, last, checked, menu = $('#adminmenu'), + pageInput = $('input.current-page'), currentPage = pageInput.val(), 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); + + // reset any compensation for submenus near the bottom of the screen + $('#adminmenu div.wp-submenu').css('margin-top', ''); + + if ( body.hasClass('folded') ) { + body.removeClass('folded'); + setUserSetting('mfold', 'o'); + } else { + body.addClass('folded'); + setUserSetting('mfold', 'f'); + } return false; }); - // help tab - $('#contextual-help-link').click(function () { - if ( ! $('#contextual-help-wrap').hasClass('contextual-help-open') ) - $('#screen-options-link-wrap').css('visibility', 'hidden'); + $('li.wp-has-submenu', menu).hoverIntent({ + over: function(e){ + var b, h, o, f, m = $(this).find('.wp-submenu'), menutop, wintop, maxtop; + + if ( m.is(':visible') ) + 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('margin-top', '-'+o+'px'); + else + m.css('margin-top', ''); - $('#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', ''); - $(this).removeClass('contextual-help-open'); - } else { - $('#contextual-help-link').css({'backgroundImage':'url("images/screen-options-right-up.gif")'}); - $(this).addClass('contextual-help-open'); - } - }); - return false; + menu.find('.wp-submenu').removeClass('sub-open'); + m.addClass('sub-open'); + }, + out: function(){ + $(this).find('.wp-submenu').removeClass('sub-open').css('margin-top', ''); + }, + 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; } @@ -220,13 +264,13 @@ 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; }); } } @@ -234,31 +278,31 @@ return true; }); - $('thead, tfoot').find(':checkbox').click( function(e) { - var c = $(this).attr('checked'), + $('thead, tfoot').find('.check-column :checkbox').click( function(e) { + 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; }); }); @@ -267,24 +311,60 @@ $('div.default-password-nag').hide(); return false; }); + + // tab in textareas + $('#newcontent').bind('keydown.wpevent_InsertTab', function(e) { + if ( e.keyCode != 9 ) + return true; + + var el = e.target, selStart = el.selectionStart, selEnd = el.selectionEnd, val = el.value, scroll, sel; + + try { + this.lastKey = 9; // not a standard DOM property, lastKey is to help stop Opera tab event. See blur handler below. + } catch(err) {} + + if ( document.selection ) { + el.focus(); + sel = document.selection.createRange(); + sel.text = '\t'; + } else if ( selStart >= 0 ) { + scroll = this.scrollTop; + el.value = val.substring(0, selStart).concat('\t', val.substring(selEnd) ); + el.selectionStart = el.selectionEnd = selStart + 1; + this.scrollTop = scroll; + } + + if ( e.stopPropagation ) + e.stopPropagation(); + if ( e.preventDefault ) + e.preventDefault(); + }); + + $('#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'); + }); + } + }); -jQuery(document).ready( function($){ - var turboNag = $('span.turbo-nag', '#user_info'); - - if ( !turboNag.length || ('undefined' != typeof(google) && google.gears) ) +// internal use +$(document).bind( 'wp_CloseOnEscape', function( e, data ) { + if ( typeof(data.cb) != 'function' ) return; - if ( 'undefined' != typeof GearsFactory ) { - return; - } else { - try { - if ( ( 'undefined' != typeof window.ActiveXObject && ActiveXObject('Gears.Factory') ) || - ( 'undefined' != typeof navigator.mimeTypes && navigator.mimeTypes['application/x-googlegears'] ) ) { - return; - } - } catch(e){} - } + if ( typeof(data.condition) != 'function' || data.condition() ) + data.cb(); - turboNag.show(); + return true; }); + +})(jQuery);