X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/6c8f14c09105d0afa4c1574215c59b5021040e76..5e031ad59895b5682d1509675cafe9f2c5081c12:/wp-admin/js/dashboard.js diff --git a/wp-admin/js/dashboard.js b/wp-admin/js/dashboard.js index 50a17f85..f5e37e62 100644 --- a/wp-admin/js/dashboard.js +++ b/wp-admin/js/dashboard.js @@ -1,19 +1,22 @@ +/* global pagenow, ajaxurl, postboxes, wpActiveEditor:true */ var ajaxWidgets, ajaxPopulateWidgets, quickPressLoad; jQuery(document).ready( function($) { - /* Dashboard Welcome Panel */ - var welcomePanel = $('#welcome-panel'), + var welcomePanel = $( '#welcome-panel' ), welcomePanelHide = $('#wp_welcome_panel-hide'), - updateWelcomePanel = function( visible ) { - $.post( ajaxurl, { - action: 'update-welcome-panel', - visible: visible, - welcomepanelnonce: $('#welcomepanelnonce').val() - }); - }; + updateWelcomePanel; + + updateWelcomePanel = function( visible ) { + $.post( ajaxurl, { + action: 'update-welcome-panel', + visible: visible, + welcomepanelnonce: $( '#welcomepanelnonce' ).val() + }); + }; - if ( welcomePanel.hasClass('hidden') && welcomePanelHide.prop('checked') ) + if ( welcomePanel.hasClass('hidden') && welcomePanelHide.prop('checked') ) { welcomePanel.removeClass('hidden'); + } $('.welcome-panel-close, .welcome-panel-dismiss a', welcomePanel).click( function(e) { e.preventDefault(); @@ -28,12 +31,7 @@ jQuery(document).ready( function($) { }); // These widgets are sometimes populated via ajax - ajaxWidgets = [ - 'dashboard_incoming_links', - 'dashboard_primary', - 'dashboard_secondary', - 'dashboard_plugins' - ]; + ajaxWidgets = ['dashboard_primary']; ajaxPopulateWidgets = function(el) { function show(i, id) { @@ -41,7 +39,7 @@ jQuery(document).ready( function($) { if ( e.length ) { p = e.parent(); setTimeout( function(){ - p.load( ajaxurl + '?action=dashboard-widgets&widget=' + id, '', function() { + p.load( ajaxurl + '?action=dashboard-widgets&widget=' + id + '&pagenow=' + pagenow, '', function() { p.hide().slideDown('normal', function(){ $(this).css('display', ''); }); @@ -52,8 +50,9 @@ jQuery(document).ready( function($) { if ( el ) { el = el.toString(); - if ( $.inArray(el, ajaxWidgets) != -1 ) + if ( $.inArray(el, ajaxWidgets) !== -1 ) { show(0, el); + } } else { $.each( ajaxWidgets, show ); } @@ -65,33 +64,41 @@ jQuery(document).ready( function($) { /* QuickPress */ quickPressLoad = function() { var act = $('#quickpost-action'), t; + + $( '#quick-press .submit input[type="submit"], #quick-press .submit input[type="reset"]' ).prop( 'disabled' , false ); + t = $('#quick-press').submit( function() { $('#dashboard_quick_press #publishing-action .spinner').show(); $('#quick-press .submit input[type="submit"], #quick-press .submit input[type="reset"]').prop('disabled', true); - if ( 'post' == act.val() ) { - act.val( 'post-quickpress-publish' ); + $.post( t.attr( 'action' ), t.serializeArray(), function( data ) { + // Replace the form, and prepend the published post. + $('#dashboard_quick_press .inside').html( data ); + $('#quick-press').removeClass('initial-form'); + quickPressLoad(); + highlightLatestPost(); + $('#title').focus(); + }); + + function highlightLatestPost () { + var latestPost = $('.drafts ul li').first(); + latestPost.css('background', '#fffbe5'); + setTimeout(function () { + latestPost.css('background', 'none'); + }, 1000); } - $('#dashboard_quick_press div.inside').load( t.attr( 'action' ), t.serializeArray(), function() { - $('#dashboard_quick_press #publishing-action .spinner').hide(); - $('#quick-press .submit input[type="submit"], #quick-press .submit input[type="reset"]').prop('disabled', false); - $('#dashboard_quick_press ul').next('p').remove(); - $('#dashboard_quick_press ul').find('li').each( function() { - $('#dashboard_recent_drafts ul').prepend( this ); - } ).end().remove(); - quickPressLoad(); - } ); return false; } ); $('#publish').click( function() { act.val( 'post-quickpress-publish' ); } ); - $('#title, #tags-input').each( function() { + $('#title, #tags-input, #content').each( function() { var input = $(this), prompt = $('#' + this.id + '-prompt-text'); - if ( '' === this.value ) + if ( '' === this.value ) { prompt.removeClass('screen-reader-text'); + } prompt.click( function() { $(this).addClass('screen-reader-text'); @@ -99,8 +106,9 @@ jQuery(document).ready( function($) { }); input.blur( function() { - if ( '' === this.value ) + if ( '' === this.value ) { prompt.removeClass('screen-reader-text'); + } }); input.focus( function() { @@ -111,7 +119,72 @@ jQuery(document).ready( function($) { $('#quick-press').on( 'click focusin', function() { wpActiveEditor = 'content'; }); + + autoResizeTextarea(); }; quickPressLoad(); + $( '.meta-box-sortables' ).sortable( 'option', 'containment', 'document' ); + + function autoResizeTextarea() { + if ( document.documentMode && document.documentMode < 9 ) { + return; + } + + // Add a hidden div. We'll copy over the text from the textarea to measure its height. + $('body').append( '' ); + + var clone = $('.quick-draft-textarea-clone'), + editor = $('#content'), + editorHeight = editor.height(), + // 100px roughly accounts for browser chrome and allows the + // save draft button to show on-screen at the same time. + editorMaxHeight = $(window).height() - 100; + + // Match up textarea and clone div as much as possible. + // Padding cannot be reliably retrieved using shorthand in all browsers. + clone.css({ + 'font-family': editor.css('font-family'), + 'font-size': editor.css('font-size'), + 'line-height': editor.css('line-height'), + 'padding-bottom': editor.css('paddingBottom'), + 'padding-left': editor.css('paddingLeft'), + 'padding-right': editor.css('paddingRight'), + 'padding-top': editor.css('paddingTop'), + 'white-space': 'pre-wrap', + 'word-wrap': 'break-word', + 'display': 'none' + }); + + // propertychange is for IE < 9 + editor.on('focus input propertychange', function() { + var $this = $(this), + //   is to ensure that the height of a final trailing newline is included. + textareaContent = $this.val() + ' ', + // 2px is for border-top & border-bottom + cloneHeight = clone.css('width', $this.css('width')).text(textareaContent).outerHeight() + 2; + + // Default to having scrollbars + editor.css('overflow-y', 'auto'); + + // Only change the height if it has indeed changed and both heights are below the max. + if ( cloneHeight === editorHeight || ( cloneHeight >= editorMaxHeight && editorHeight >= editorMaxHeight ) ) { + return; + } + + // Don't allow editor to exceed height of window. + // This is also bound in CSS to a max-height of 1300px to be extra safe. + if ( cloneHeight > editorMaxHeight ) { + editorHeight = editorMaxHeight; + } else { + editorHeight = cloneHeight; + } + + // No scrollbars as we change height, not for IE < 9 + editor.css('overflow', 'hidden'); + + $this.css('height', editorHeight + 'px'); + }); + } + } );