wp/wp-admin/js/dashboard.js
changeset 5 5e2f62d02dcd
parent 0 d970ebf37754
child 7 cf61fcea0001
--- a/wp/wp-admin/js/dashboard.js	Mon Jun 08 16:11:51 2015 +0000
+++ b/wp/wp-admin/js/dashboard.js	Tue Jun 09 03:35:32 2015 +0200
@@ -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;
 
-	if ( welcomePanel.hasClass('hidden') && welcomePanelHide.prop('checked') )
+	updateWelcomePanel = function( visible ) {
+		$.post( ajaxurl, {
+			action: 'update-welcome-panel',
+			visible: visible,
+			welcomepanelnonce: $( '#welcomepanelnonce' ).val()
+		});
+	};
+
+	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 @@
 	});
 
 	// 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 @@
 			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 @@
 
 		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 @@
 	/* 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 @@
 			});
 
 			input.blur( function() {
-				if ( '' === this.value )
+				if ( '' === this.value ) {
 					prompt.removeClass('screen-reader-text');
+				}
 			});
 
 			input.focus( function() {
@@ -111,7 +119,72 @@
 		$('#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( '<div class="quick-draft-textarea-clone" style="display: none;"></div>' );
+
+		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),
+				// &nbsp; is to ensure that the height of a final trailing newline is included.
+				textareaContent = $this.val() + '&nbsp;',
+				// 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');
+		});
+	}
+
 } );