| [ Index ] |
PHP Cross Reference of Wordpress 2.9.1 |
[Summary view] [Print] [Text view]
1 var autosave, autosaveLast = '', autosavePeriodical, autosaveOldMessage = '', autosaveDelayPreview = false, notSaved = true, blockSave = false, interimLogin = false; 2 3 jQuery(document).ready( function($) { 4 var dotabkey = true; 5 6 autosaveLast = $('#post #title').val() + $('#post #content').val(); 7 autosavePeriodical = $.schedule({time: autosaveL10n.autosaveInterval * 1000, func: function() { autosave(); }, repeat: true, protect: true}); 8 9 //Disable autosave after the form has been submitted 10 $("#post").submit(function() { 11 $.cancel(autosavePeriodical); 12 }); 13 14 $('input[type="submit"], a.submitdelete', '#submitpost').click(function(){ 15 blockSave = true; 16 window.onbeforeunload = null; 17 $(':button, :submit', '#submitpost').each(function(){ 18 var t = $(this); 19 if ( t.hasClass('button-primary') ) 20 t.addClass('button-primary-disabled'); 21 else 22 t.addClass('button-disabled'); 23 }); 24 $('#ajax-loading').css('visibility', 'visible'); 25 }); 26 27 window.onbeforeunload = function(){ 28 var mce = typeof(tinyMCE) != 'undefined' ? tinyMCE.activeEditor : false, title, content; 29 30 if ( mce && !mce.isHidden() ) { 31 if ( mce.isDirty() ) 32 return autosaveL10n.saveAlert; 33 } else { 34 title = $('#post #title').val(), content = $('#post #content').val(); 35 if ( ( title || content ) && title + content != autosaveLast ) 36 return autosaveL10n.saveAlert; 37 } 38 }; 39 40 // preview 41 $('#post-preview').click(function(){ 42 if ( 1 > $('#post_ID').val() && notSaved ) { 43 autosaveDelayPreview = true; 44 autosave(); 45 return false; 46 } 47 doPreview(); 48 return false; 49 }); 50 51 doPreview = function() { 52 $('input#wp-preview').val('dopreview'); 53 $('form#post').attr('target', 'wp-preview').submit().attr('target', ''); 54 $('input#wp-preview').val(''); 55 } 56 57 // This code is meant to allow tabbing from Title to Post if tinyMCE is defined. 58 if ( typeof tinyMCE != 'undefined' ) { 59 $('#title')[$.browser.opera ? 'keypress' : 'keydown'](function (e) { 60 if ( e.which == 9 && !e.shiftKey && !e.controlKey && !e.altKey ) { 61 if ( ($("#post_ID").val() < 1) && ($("#title").val().length > 0) ) { autosave(); } 62 if ( tinyMCE.activeEditor && ! tinyMCE.activeEditor.isHidden() && dotabkey ) { 63 e.preventDefault(); 64 dotabkey = false; 65 tinyMCE.activeEditor.focus(); 66 return false; 67 } 68 } 69 }); 70 } 71 72 // autosave new posts after a title is typed but not if Publish or Save Draft is clicked 73 if ( 0 > $('#post_ID').val() ) { 74 $('#title').blur( function() { 75 if ( !this.value || 0 < $('#post_ID').val() ) 76 return; 77 78 delayed_autosave(); 79 }); 80 } 81 }); 82 83 function autosave_parse_response(response) { 84 var res = wpAjax.parseAjaxResponse(response, 'autosave'), message = '', postID, sup, url; 85 86 if ( res && res.responses && res.responses.length ) { 87 message = res.responses[0].data; // The saved message or error. 88 // someone else is editing: disable autosave, set errors 89 if ( res.responses[0].supplemental ) { 90 sup = res.responses[0].supplemental; 91 if ( 'disable' == sup['disable_autosave'] ) { 92 autosave = function() {}; 93 res = { errors: true }; 94 } 95 if ( sup['session_expired'] && (url = sup['session_expired']) ) { 96 if ( !interimLogin || interimLogin.closed ) { 97 interimLogin = window.open(url, 'login', 'width=600,height=450,resizable=yes,scrollbars=yes,status=yes'); 98 interimLogin.focus(); 99 } 100 delete sup['session_expired']; 101 } 102 jQuery.each(sup, function(selector, value) { 103 if ( selector.match(/^replace-/) ) { 104 jQuery('#'+selector.replace('replace-', '')).val(value); 105 } 106 }); 107 } 108 109 // if no errors: add slug UI 110 if ( !res.errors ) { 111 postID = parseInt( res.responses[0].id, 10 ); 112 if ( !isNaN(postID) && postID > 0 ) { 113 autosave_update_slug(postID); 114 } 115 } 116 } 117 if ( message ) { jQuery('#autosave').html(message); } // update autosave message 118 else if ( autosaveOldMessage && res ) { jQuery('#autosave').html( autosaveOldMessage ); } 119 return res; 120 } 121 122 // called when autosaving pre-existing post 123 function autosave_saved(response) { 124 autosave_parse_response(response); // parse the ajax response 125 autosave_enable_buttons(); // re-enable disabled form buttons 126 } 127 128 // called when autosaving new post 129 function autosave_saved_new(response) { 130 var res = autosave_parse_response(response), tempID, postID; 131 // if no errors: update post_ID from the temporary value, grab new save-nonce for that new ID 132 if ( res && res.responses.length && !res.errors ) { 133 tempID = jQuery('#post_ID').val(); 134 postID = parseInt( res.responses[0].id, 10 ); 135 autosave_update_post_ID( postID ); // disabled form buttons are re-enabled here 136 if ( tempID < 0 && postID > 0 ) { // update media buttons 137 notSaved = false; 138 jQuery('#media-buttons a').each(function(){ 139 this.href = this.href.replace(tempID, postID); 140 }); 141 } 142 if ( autosaveDelayPreview ) { 143 autosaveDelayPreview = false; 144 doPreview(); 145 } 146 } else { 147 autosave_enable_buttons(); // re-enable disabled form buttons 148 } 149 } 150 151 function autosave_update_post_ID( postID ) { 152 if ( !isNaN(postID) && postID > 0 ) { 153 if ( postID == parseInt(jQuery('#post_ID').val(), 10) ) { return; } // no need to do this more than once 154 jQuery('#post_ID').attr({name: "post_ID"}); 155 jQuery('#post_ID').val(postID); 156 // We need new nonces 157 jQuery.post(autosaveL10n.requestFile, { 158 action: "autosave-generate-nonces", 159 post_ID: postID, 160 autosavenonce: jQuery('#autosavenonce').val(), 161 post_type: jQuery('#post_type').val() 162 }, function(html) { 163 jQuery('#_wpnonce').val(html.updateNonce); 164 jQuery('#delete-action a.submitdelete').attr('href', html.deleteURL); 165 autosave_enable_buttons(); // re-enable disabled form buttons 166 jQuery('#delete-action a.submitdelete').fadeIn(); 167 }, 168 'json'); 169 jQuery('#hiddenaction').val('editpost'); 170 } 171 } 172 173 function autosave_update_slug(post_id) { 174 // create slug area only if not already there 175 if ( 'undefined' != makeSlugeditClickable && jQuery.isFunction(makeSlugeditClickable) && !jQuery('#edit-slug-box > *').size() ) { 176 jQuery.post( 177 ajaxurl, 178 { 179 action: 'sample-permalink', 180 post_id: post_id, 181 new_title: jQuery('#title').val(), 182 samplepermalinknonce: jQuery('#samplepermalinknonce').val() 183 }, 184 function(data) { 185 jQuery('#edit-slug-box').html(data); 186 makeSlugeditClickable(); 187 } 188 ); 189 } 190 } 191 192 function autosave_loading() { 193 jQuery('#autosave').html(autosaveL10n.savingText); 194 } 195 196 function autosave_enable_buttons() { 197 // delay that a bit to avoid some rare collisions while the DOM is being updated. 198 setTimeout(function(){ 199 jQuery(':button, :submit', '#submitpost').removeAttr('disabled'); 200 jQuery('#ajax-loading').css('visibility', 'hidden'); 201 }, 500); 202 } 203 204 function autosave_disable_buttons() { 205 jQuery(':button, :submit', '#submitpost').attr('disabled', 'disabled'); 206 // Re-enable 5 sec later. Just gives autosave a head start to avoid collisions. 207 setTimeout(autosave_enable_buttons, 5000); 208 } 209 210 function delayed_autosave() { 211 setTimeout(function(){ 212 if ( blockSave ) 213 return; 214 autosave(); 215 }, 200); 216 } 217 218 autosave = function() { 219 // (bool) is rich editor enabled and active 220 var rich = (typeof tinyMCE != "undefined") && tinyMCE.activeEditor && !tinyMCE.activeEditor.isHidden(), post_data, doAutoSave, ed, origStatus, successCallback; 221 222 autosave_disable_buttons(); 223 224 post_data = { 225 action: "autosave", 226 post_ID: jQuery("#post_ID").val() || 0, 227 post_title: jQuery("#title").val() || "", 228 autosavenonce: jQuery('#autosavenonce').val(), 229 post_type: jQuery('#post_type').val() || "", 230 autosave: 1 231 }; 232 233 jQuery('.tags-input').each( function() { 234 post_data[this.name] = this.value; 235 } ); 236 237 // We always send the ajax request in order to keep the post lock fresh. 238 // This (bool) tells whether or not to write the post to the DB during the ajax request. 239 doAutoSave = true; 240 241 // No autosave while thickbox is open (media buttons) 242 if ( jQuery("#TB_window").css('display') == 'block' ) 243 doAutoSave = false; 244 245 /* Gotta do this up here so we can check the length when tinyMCE is in use */ 246 if ( rich && doAutoSave ) { 247 ed = tinyMCE.activeEditor; 248 // Don't run while the TinyMCE spellcheck is on. It resets all found words. 249 if ( ed.plugins.spellchecker && ed.plugins.spellchecker.active ) { 250 doAutoSave = false; 251 } else { 252 if ( 'mce_fullscreen' == ed.id ) 253 tinyMCE.get('content').setContent(ed.getContent({format : 'raw'}), {format : 'raw'}); 254 tinyMCE.get('content').save(); 255 } 256 } 257 258 post_data["content"] = jQuery("#content").val(); 259 if ( jQuery('#post_name').val() ) 260 post_data["post_name"] = jQuery('#post_name').val(); 261 262 // Nothing to save or no change. 263 if ( ( post_data["post_title"].length == 0 && post_data["content"].length == 0 ) || post_data["post_title"] + post_data["content"] == autosaveLast ) { 264 doAutoSave = false; 265 } 266 267 origStatus = jQuery('#original_post_status').val(); 268 269 goodcats = ([]); 270 jQuery("[name='post_category[]']:checked").each( function(i) { 271 goodcats.push(this.value); 272 } ); 273 post_data["catslist"] = goodcats.join(","); 274 275 if ( jQuery("#comment_status").attr("checked") ) 276 post_data["comment_status"] = 'open'; 277 if ( jQuery("#ping_status").attr("checked") ) 278 post_data["ping_status"] = 'open'; 279 if ( jQuery("#excerpt").size() ) 280 post_data["excerpt"] = jQuery("#excerpt").val(); 281 if ( jQuery("#post_author").size() ) 282 post_data["post_author"] = jQuery("#post_author").val(); 283 post_data["user_ID"] = jQuery("#user-id").val(); 284 285 if ( doAutoSave ) { 286 autosaveLast = jQuery("#title").val()+jQuery("#content").val(); 287 } else { 288 post_data['autosave'] = 0; 289 } 290 291 if ( parseInt(post_data["post_ID"], 10) < 1 ) { 292 post_data["temp_ID"] = post_data["post_ID"]; 293 successCallback = autosave_saved_new; // new post 294 } else { 295 successCallback = autosave_saved; // pre-existing post 296 } 297 298 autosaveOldMessage = jQuery('#autosave').html(); 299 300 jQuery.ajax({ 301 data: post_data, 302 beforeSend: doAutoSave ? autosave_loading : null, 303 type: "POST", 304 url: autosaveL10n.requestFile, 305 success: successCallback 306 }); 307 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Fri Jan 8 00:19:48 2010 | Cross-referenced by PHPXref 0.7 |