[ Index ]

PHP Cross Reference of Wordpress 2.9.1

title

Body

[close]

/wp-includes/js/ -> autosave.dev.js (source)

   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  }


Generated: Fri Jan 8 00:19:48 2010 Cross-referenced by PHPXref 0.7