wp/wp-includes/js/autosave.js
author ymh <ymh.work@gmail.com>
Wed, 06 Nov 2013 03:21:17 +0000
changeset 0 d970ebf37754
child 5 5e2f62d02dcd
permissions -rw-r--r--
first import
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
var autosave, autosaveLast = '', autosavePeriodical, autosaveDelayPreview = false, notSaved = true, blockSave = false, fullscreen, autosaveLockRelease = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
jQuery(document).ready( function($) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
	if ( $('#wp-content-wrap').hasClass('tmce-active') && typeof switchEditors != 'undefined' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
		autosaveLast = wp.autosave.getCompareString({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
			post_title : $('#title').val() || '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
			content : switchEditors.pre_wpautop( $('#content').val() ) || '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
			excerpt : $('#excerpt').val() || ''
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
		});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
		autosaveLast = wp.autosave.getCompareString();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
	autosavePeriodical = $.schedule({time: autosaveL10n.autosaveInterval * 1000, func: function() { autosave(); }, repeat: true, protect: true});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
	//Disable autosave after the form has been submitted
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
	$("#post").submit(function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
		$.cancel(autosavePeriodical);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
		autosaveLockRelease = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
	$('input[type="submit"], a.submitdelete', '#submitpost').click(function(){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
		blockSave = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
		window.onbeforeunload = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
		$(':button, :submit', '#submitpost').each(function(){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
			var t = $(this);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
			if ( t.hasClass('button-primary') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
				t.addClass('button-primary-disabled');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
				t.addClass('button-disabled');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
		});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
		if ( $(this).attr('id') == 'publish' )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
			$('#major-publishing-actions .spinner').show();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
			$('#minor-publishing .spinner').show();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
	window.onbeforeunload = function(){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
		var editor = typeof(tinymce) != 'undefined' ? tinymce.activeEditor : false, compareString;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
		if ( editor && ! editor.isHidden() ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
			if ( editor.isDirty() )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
				return autosaveL10n.saveAlert;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
			if ( fullscreen && fullscreen.settings.visible ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
				compareString = wp.autosave.getCompareString({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
					post_title: $('#wp-fullscreen-title').val() || '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
					content: $('#wp_mce_fullscreen').val() || '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
					excerpt: $('#excerpt').val() || ''
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
			} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
				compareString = wp.autosave.getCompareString();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
			if ( compareString != autosaveLast )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
				return autosaveL10n.saveAlert;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
	};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
	$(window).unload( function(e) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
		if ( ! autosaveLockRelease )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
			return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
		// unload fires (twice) on removing the Thickbox iframe. Make sure we process only the main document unload.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
		if ( e.target && e.target.nodeName != '#document' )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
			return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
		$.ajax({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
			type: 'POST',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
			url: ajaxurl,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
			async: false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
			data: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
				action: 'wp-remove-post-lock',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
				_wpnonce: $('#_wpnonce').val(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
				post_ID: $('#post_ID').val(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
				active_post_lock: $('#active_post_lock').val()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
		});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
	} );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
	// preview
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
	$('#post-preview').click(function(){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
		if ( $('#auto_draft').val() == '1' && notSaved ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
			autosaveDelayPreview = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
			autosave();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
		doPreview();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
	doPreview = function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
		$('input#wp-preview').val('dopreview');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
		$('form#post').attr('target', 'wp-preview').submit().attr('target', '');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
		/*
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
		 * Workaround for WebKit bug preventing a form submitting twice to the same action.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
		 * https://bugs.webkit.org/show_bug.cgi?id=28633
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
		 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
		var ua = navigator.userAgent.toLowerCase();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
		if ( ua.indexOf('safari') != -1 && ua.indexOf('chrome') == -1 ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
			$('form#post').attr('action', function(index, value) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
				return value + '?t=' + new Date().getTime();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
		$('input#wp-preview').val('');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
	// This code is meant to allow tabbing from Title to Post content.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
	$('#title').on('keydown.editor-focus', function(e) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
		var ed;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
		if ( e.which != 9 )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
			return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
		if ( !e.ctrlKey && !e.altKey && !e.shiftKey ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
			if ( typeof(tinymce) != 'undefined' )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
				ed = tinymce.get('content');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
			if ( ed && !ed.isHidden() ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
				$(this).one('keyup', function(e){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
					$('#content_tbl td.mceToolbar > a').focus();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
			} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
				$('#content').focus();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
			e.preventDefault();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
	// autosave new posts after a title is typed but not if Publish or Save Draft is clicked
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
	if ( '1' == $('#auto_draft').val() ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
		$('#title').blur( function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
			if ( !this.value || $('#auto_draft').val() != '1' )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
			delayed_autosave();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
		});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
	// When connection is lost, keep user from submitting changes.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
	$(document).on('heartbeat-connection-lost.autosave', function( e, error, status ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
		if ( 'timeout' === error || 503 == status ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
			var notice = $('#lost-connection-notice');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
			if ( ! wp.autosave.local.hasStorage ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
				notice.find('.hide-if-no-sessionstorage').hide();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
			notice.show();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
			autosave_disable_buttons();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
	}).on('heartbeat-connection-restored.autosave', function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
		$('#lost-connection-notice').hide();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
		autosave_enable_buttons();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
function autosave_parse_response( response ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
	var res = wpAjax.parseAjaxResponse(response, 'autosave'), post_id, sup;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
	if ( res && res.responses && res.responses.length ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
		if ( res.responses[0].supplemental ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
			sup = res.responses[0].supplemental;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
			jQuery.each( sup, function( selector, value ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
				if ( selector.match(/^replace-/) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
					jQuery( '#' + selector.replace('replace-', '') ).val( value );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
		// if no errors: add slug UI and update autosave-message
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
		if ( !res.errors ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
			if ( post_id = parseInt( res.responses[0].id, 10 ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
				autosave_update_slug( post_id );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
			if ( res.responses[0].data ) // update autosave message
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
				jQuery('.autosave-message').text( res.responses[0].data );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
	return res;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
// called when autosaving pre-existing post
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
function autosave_saved(response) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
	blockSave = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
	autosave_parse_response(response); // parse the ajax response
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
	autosave_enable_buttons(); // re-enable disabled form buttons
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
// called when autosaving new post
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
function autosave_saved_new(response) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
	blockSave = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
	var res = autosave_parse_response(response), post_id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
	if ( res && res.responses.length && !res.errors ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
		// An ID is sent only for real auto-saves, not for autosave=0 "keepalive" saves
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
		post_id = parseInt( res.responses[0].id, 10 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
		if ( post_id ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
			notSaved = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
			jQuery('#auto_draft').val('0'); // No longer an auto-draft
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
		autosave_enable_buttons();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
		if ( autosaveDelayPreview ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
			autosaveDelayPreview = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
			doPreview();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
		autosave_enable_buttons(); // re-enable disabled form buttons
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
function autosave_update_slug(post_id) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
	// create slug area only if not already there
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
	if ( 'undefined' != makeSlugeditClickable && jQuery.isFunction(makeSlugeditClickable) && !jQuery('#edit-slug-box > *').size() ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
		jQuery.post( ajaxurl, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
				action: 'sample-permalink',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
				post_id: post_id,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
				new_title: fullscreen && fullscreen.settings.visible ? jQuery('#wp-fullscreen-title').val() : jQuery('#title').val(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
				samplepermalinknonce: jQuery('#samplepermalinknonce').val()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
			},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
			function(data) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
				if ( data !== '-1' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
					var box = jQuery('#edit-slug-box');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
					box.html(data);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
					if (box.hasClass('hidden')) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
						box.fadeIn('fast', function () {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
							box.removeClass('hidden');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
						});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
					makeSlugeditClickable();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
function autosave_loading() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
	jQuery('.autosave-message').html(autosaveL10n.savingText);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
function autosave_enable_buttons() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
	jQuery(document).trigger('autosave-enable-buttons');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
	if ( ! wp.heartbeat || ! wp.heartbeat.hasConnectionError() ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
		// delay that a bit to avoid some rare collisions while the DOM is being updated.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
		setTimeout(function(){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
			var parent = jQuery('#submitpost');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
			parent.find(':button, :submit').removeAttr('disabled');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
			parent.find('.spinner').hide();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
		}, 500);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
function autosave_disable_buttons() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
	jQuery(document).trigger('autosave-disable-buttons');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
	jQuery('#submitpost').find(':button, :submit').prop('disabled', true);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
	// Re-enable 5 sec later. Just gives autosave a head start to avoid collisions.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
	setTimeout( autosave_enable_buttons, 5000 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
function delayed_autosave() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
	setTimeout(function(){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
		if ( blockSave )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
			return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
		autosave();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
	}, 200);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
autosave = function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
	var post_data = wp.autosave.getPostData(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
		compareString,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
		successCallback;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
	blockSave = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
	// post_data.content cannot be retrieved at the moment
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
	if ( ! post_data.autosave )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
	// No autosave while thickbox is open (media buttons)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
	if ( jQuery("#TB_window").css('display') == 'block' )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
	compareString = wp.autosave.getCompareString( post_data );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
	// Nothing to save or no change.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
	if ( compareString == autosaveLast )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
	autosaveLast = compareString;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
	jQuery(document).triggerHandler('wpcountwords', [ post_data["content"] ]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
	// Disable buttons until we know the save completed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
	autosave_disable_buttons();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
	if ( post_data["auto_draft"] == '1' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
		successCallback = autosave_saved_new; // new post
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
		successCallback = autosave_saved; // pre-existing post
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
	jQuery.ajax({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
		data: post_data,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
		beforeSend: autosave_loading,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
		type: "POST",
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
		url: ajaxurl,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
		success: successCallback
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
	return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
// Autosave in localStorage
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
// set as simple object/mixin for now
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
window.wp = window.wp || {};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
wp.autosave = wp.autosave || {};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
(function($){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
// Returns the data for saving in both localStorage and autosaves to the server
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
wp.autosave.getPostData = function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
	var ed = typeof tinymce != 'undefined' ? tinymce.activeEditor : null, post_name, parent_id, cats = [],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
		data = {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
			action: 'autosave',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
			autosave: true,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
			post_id: $('#post_ID').val() || 0,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
			autosavenonce: $('#autosavenonce').val() || '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
			post_type: $('#post_type').val() || '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
			post_author: $('#post_author').val() || '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
			excerpt: $('#excerpt').val() || ''
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
		};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
	if ( ed && !ed.isHidden() ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
		// Don't run while the tinymce spellcheck is on. It resets all found words.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
		if ( ed.plugins.spellchecker && ed.plugins.spellchecker.active ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
			data.autosave = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
			return data;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   342
			if ( 'mce_fullscreen' == ed.id )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   343
				tinymce.get('content').setContent(ed.getContent({format : 'raw'}), {format : 'raw'});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   344
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
			tinymce.triggerSave();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
	if ( typeof fullscreen != 'undefined' && fullscreen.settings.visible ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
		data['post_title'] = $('#wp-fullscreen-title').val() || '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
		data['content'] = $('#wp_mce_fullscreen').val() || '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   352
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
		data['post_title'] = $('#title').val() || '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
		data['content'] = $('#content').val() || '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
	/*
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
	// We haven't been saving tags with autosave since 2.8... Start again?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
	$('.the-tags').each( function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
		data[this.name] = this.value;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
	*/
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
	$('input[id^="in-category-"]:checked').each( function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
		cats.push(this.value);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
	data['catslist'] = cats.join(',');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
	if ( post_name = $('#post_name').val() )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
		data['post_name'] = post_name;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
	if ( parent_id = $('#parent_id').val() )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
		data['parent_id'] = parent_id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
	if ( $('#comment_status').prop('checked') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
		data['comment_status'] = 'open';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
	if ( $('#ping_status').prop('checked') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
		data['ping_status'] = 'open';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
	if ( $('#auto_draft').val() == '1' )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   382
		data['auto_draft'] = '1';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
	return data;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
// Concatenate title, content and excerpt. Used to track changes when auto-saving.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
wp.autosave.getCompareString = function( post_data ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   389
	if ( typeof post_data === 'object' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
		return ( post_data.post_title || '' ) + '::' + ( post_data.content || '' ) + '::' + ( post_data.excerpt || '' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   392
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   393
	return ( $('#title').val() || '' ) + '::' + ( $('#content').val() || '' ) + '::' + ( $('#excerpt').val() || '' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
wp.autosave.local = {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   397
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   398
	lastSavedData: '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
	blog_id: 0,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
	hasStorage: false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   401
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   402
	// Check if the browser supports sessionStorage and it's not disabled
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
	checkStorage: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
		var test = Math.random(), result = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   405
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   406
		try {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   407
			sessionStorage.setItem('wp-test', test);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   408
			result = sessionStorage.getItem('wp-test') == test;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   409
			sessionStorage.removeItem('wp-test');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   410
		} catch(e) {}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   411
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   412
		this.hasStorage = result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   413
		return result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
    },
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   416
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   417
	 * Initialize the local storage
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   418
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   419
	 * @return mixed False if no sessionStorage in the browser or an Object containing all post_data for this blog
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   420
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   421
	getStorage: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   422
		var stored_obj = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   423
		// Separate local storage containers for each blog_id
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   424
		if ( this.hasStorage && this.blog_id ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   425
			stored_obj = sessionStorage.getItem( 'wp-autosave-' + this.blog_id );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   426
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   427
			if ( stored_obj )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   428
				stored_obj = JSON.parse( stored_obj );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   429
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   430
				stored_obj = {};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   431
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   432
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   433
		return stored_obj;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   434
	},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   435
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   436
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   437
	 * Set the storage for this blog
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   438
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   439
	 * Confirms that the data was saved successfully.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   440
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   441
	 * @return bool
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   442
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   443
	setStorage: function( stored_obj ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   444
		var key;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   445
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   446
		if ( this.hasStorage && this.blog_id ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   447
			key = 'wp-autosave-' + this.blog_id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   448
			sessionStorage.setItem( key, JSON.stringify( stored_obj ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   449
			return sessionStorage.getItem( key ) !== null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   450
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   451
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   452
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   453
	},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   454
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   455
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   456
	 * Get the saved post data for the current post
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   457
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   458
	 * @return mixed False if no storage or no data or the post_data as an Object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   459
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   460
	getData: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   461
		var stored = this.getStorage(), post_id = $('#post_ID').val();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   462
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   463
		if ( !stored || !post_id )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   464
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   465
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   466
		return stored[ 'post_' + post_id ] || false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   467
	},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   468
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   469
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   470
	 * Set (save or delete) post data in the storage.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   471
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   472
	 * If stored_data evaluates to 'false' the storage key for the current post will be removed
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   473
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   474
	 * $param stored_data The post data to store or null/false/empty to delete the key
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   475
	 * @return bool
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   476
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   477
	setData: function( stored_data ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   478
		var stored = this.getStorage(), post_id = $('#post_ID').val();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   479
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   480
		if ( !stored || !post_id )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   481
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   482
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   483
		if ( stored_data )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   484
			stored[ 'post_' + post_id ] = stored_data;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   485
		else if ( stored.hasOwnProperty( 'post_' + post_id ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   486
			delete stored[ 'post_' + post_id ];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   487
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   488
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   489
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   490
		return this.setStorage(stored);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   491
	},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   492
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   493
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   494
	 * Save post data for the current post
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   495
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   496
	 * Runs on a 15 sec. schedule, saves when there are differences in the post title or content.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   497
	 * When the optional data is provided, updates the last saved post data.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   498
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   499
	 * $param data optional Object The post data for saving, minimum 'post_title' and 'content'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   500
	 * @return bool
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   501
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   502
	save: function( data ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   503
		var result = false, post_data, compareString;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   504
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   505
		if ( ! data ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   506
			post_data = wp.autosave.getPostData();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   507
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   508
			post_data = this.getData() || {};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   509
			$.extend( post_data, data );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   510
			post_data.autosave = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   511
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   512
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   513
		// Cannot get the post data at the moment
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   514
		if ( ! post_data.autosave )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   515
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   516
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   517
		compareString = wp.autosave.getCompareString( post_data );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   518
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   519
		// If the content, title and excerpt did not change since the last save, don't save again
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   520
		if ( compareString == this.lastSavedData )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   521
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   522
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   523
		post_data['save_time'] = (new Date()).getTime();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   524
		post_data['status'] = $('#post_status').val() || '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   525
		result = this.setData( post_data );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   526
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   527
		if ( result )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   528
			this.lastSavedData = compareString;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   529
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   530
		return result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   531
	},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   532
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   533
	// Initialize and run checkPost() on loading the script (before TinyMCE init)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   534
	init: function( settings ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   535
		var self = this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   536
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   537
		// Check if the browser supports sessionStorage and it's not disabled
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   538
		if ( ! this.checkStorage() )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   539
			return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   540
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   541
		// Don't run if the post type supports neither 'editor' (textarea#content) nor 'excerpt'.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   542
		if ( ! $('#content').length && ! $('#excerpt').length )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   543
			return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   544
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   545
		if ( settings )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   546
			$.extend( this, settings );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   547
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   548
		if ( !this.blog_id )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   549
			this.blog_id = typeof window.autosaveL10n != 'undefined' ? window.autosaveL10n.blog_id : 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   550
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   551
		$(document).ready( function(){ self.run(); } );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   552
	},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   553
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   554
	// Run on DOM ready
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   555
	run: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   556
		var self = this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   557
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   558
		// Check if the local post data is different than the loaded post data.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   559
		this.checkPost();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   560
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   561
		// Set the schedule
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   562
		this.schedule = $.schedule({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   563
			time: 15 * 1000,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   564
			func: function() { wp.autosave.local.save(); },
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   565
			repeat: true,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   566
			protect: true
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   567
		});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   568
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   569
		$('form#post').on('submit.autosave-local', function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   570
			var editor = typeof tinymce != 'undefined' && tinymce.get('content'), post_id = $('#post_ID').val() || 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   571
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   572
			if ( editor && ! editor.isHidden() ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   573
				// Last onSubmit event in the editor, needs to run after the content has been moved to the textarea.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   574
				editor.onSubmit.add( function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   575
					wp.autosave.local.save({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   576
						post_title: $('#title').val() || '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   577
						content: $('#content').val() || '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   578
						excerpt: $('#excerpt').val() || ''
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   579
					});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   580
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   581
			} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   582
				self.save({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   583
					post_title: $('#title').val() || '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   584
					content: $('#content').val() || '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   585
					excerpt: $('#excerpt').val() || ''
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   586
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   587
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   588
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   589
			wpCookies.set( 'wp-saving-post-' + post_id, 'check' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   590
		});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   591
	},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   592
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   593
	// Strip whitespace and compare two strings
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   594
	compare: function( str1, str2 ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   595
		function remove( string ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   596
			return string.toString().replace(/[\x20\t\r\n\f]+/g, '');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   597
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   598
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   599
		return ( remove( str1 || '' ) == remove( str2 || '' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   600
	},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   601
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   602
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   603
	 * Check if the saved data for the current post (if any) is different than the loaded post data on the screen
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   604
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   605
	 * Shows a standard message letting the user restore the post data if different.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   606
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   607
	 * @return void
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   608
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   609
	checkPost: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   610
		var self = this, post_data = this.getData(), content, post_title, excerpt, notice,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   611
			post_id = $('#post_ID').val() || 0, cookie = wpCookies.get( 'wp-saving-post-' + post_id );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   612
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   613
		if ( ! post_data )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   614
			return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   615
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   616
		if ( cookie ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   617
			wpCookies.remove( 'wp-saving-post-' + post_id );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   618
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   619
			if ( cookie == 'saved' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   620
				// The post was saved properly, remove old data and bail
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   621
				this.setData( false );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   622
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   623
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   624
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   625
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   626
		// There is a newer autosave. Don't show two "restore" notices at the same time.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   627
		if ( $('#has-newer-autosave').length )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   628
			return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   629
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   630
		content = $('#content').val() || '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   631
		post_title = $('#title').val() || '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   632
		excerpt = $('#excerpt').val() || '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   633
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   634
		if ( $('#wp-content-wrap').hasClass('tmce-active') && typeof switchEditors != 'undefined' )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   635
			content = switchEditors.pre_wpautop( content );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   636
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   637
		// cookie == 'check' means the post was not saved properly, always show #local-storage-notice
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   638
		if ( cookie != 'check' && this.compare( content, post_data.content ) && this.compare( post_title, post_data.post_title ) && this.compare( excerpt, post_data.excerpt ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   639
			return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   640
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   641
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   642
		this.restore_post_data = post_data;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   643
		this.undo_post_data = {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   644
			content: content,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   645
			post_title: post_title,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   646
			excerpt: excerpt
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   647
		};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   648
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   649
		notice = $('#local-storage-notice');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   650
		$('.wrap h2').first().after( notice.addClass('updated').show() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   651
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   652
		notice.on( 'click', function(e) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   653
			var target = $( e.target );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   654
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   655
			if ( target.hasClass('restore-backup') ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   656
				self.restorePost( self.restore_post_data );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   657
				target.parent().hide();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   658
				$(this).find('p.undo-restore').show();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   659
			} else if ( target.hasClass('undo-restore-backup') ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   660
				self.restorePost( self.undo_post_data );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   661
				target.parent().hide();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   662
				$(this).find('p.local-restore').show();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   663
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   664
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   665
			e.preventDefault();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   666
		});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   667
	},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   668
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   669
	// Restore the current title, content and excerpt from post_data.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   670
	restorePost: function( post_data ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   671
		var editor;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   672
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   673
		if ( post_data ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   674
			// Set the last saved data
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   675
			this.lastSavedData = wp.autosave.getCompareString( post_data );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   676
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   677
			if ( $('#title').val() != post_data.post_title )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   678
				$('#title').focus().val( post_data.post_title || '' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   679
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   680
			$('#excerpt').val( post_data.excerpt || '' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   681
			editor = typeof tinymce != 'undefined' && tinymce.get('content');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   682
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   683
			if ( editor && ! editor.isHidden() && typeof switchEditors != 'undefined' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   684
				// Make sure there's an undo level in the editor
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   685
				editor.undoManager.add();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   686
				editor.setContent( post_data.content ? switchEditors.wpautop( post_data.content ) : '' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   687
			} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   688
				// Make sure the Text editor is selected
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   689
				$('#content-html').click();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   690
				$('#content').val( post_data.content );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   691
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   692
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   693
			return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   694
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   695
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   696
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   697
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   698
};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   699
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   700
wp.autosave.local.init();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   701
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   702
}(jQuery));