bengillies.net

a blog by Ben Gillies

ZPublishCleanup

// hijack function to handle 412 edit conflict response
config.extensions.ServerSideSavingPlugin.saveTiddlerCallback = function(context, userParams) {
  var tiddler = context.tiddler;
  if(context.status || context.httpStatus == 1223) { 
    handle204(context);
  } else {
    if(context.httpStatus == 412) {
      handle412(context);
    } else {
      displayMessage(config.extensions.ServerSideSavingPlugin.locale.saveError.format([tiddler.title, context.statusText]));
    }
  }
};

function handle204(context) {
  var tiddler = context.tiddler;
  if(tiddler.fields.changecount == context.changecount) { //# check for changes since save was triggered
    tiddler.clearChangeCount();
  } else if(tiddler.fields.changecount > 0) {
    tiddler.fields.changecount -= context.changecount;
  }
  displayMessage(config.extensions.ServerSideSavingPlugin.locale.saved.format([tiddler.title]));
  store.setDirty(false); 
  // from here is a custom bit for the copyPlugin; you'd want to handle via a custom 204 handler passed into the ServerSideSavingPlugin
  if (tiddler.fields["sourceworkspace"]) {
    newWorkspace = tiddler.fields['server.workspace'];
    originalworkspace = tiddler.fields["sourceworkspace"];
    tiddler.fields["server.workspace"] = originalworkspace;
       tiddler.fields["server.page.revision"] = tiddler.fields["revisionsidinsource"];
    if (tiddler.fields["publishlevel"] == 'move') {
        store.removeTiddler(tiddler.title);
        autoSaveChanges();            
    }
    delete tiddler.fields['sourceworkspace'];
    delete tiddler.fields["revisionsidinsource"];
    
  }
}

function handle412(context) {
  var tiddler = context.tiddler;
  try {
    var adaptor = config.extensions.ServerSideSavingPlugin.getTiddlerServerAdaptor(tiddler);
  } catch(ex) {
    return false;
  }
  if (!adaptor.host){
    adaptor.host = context.host;
  }
  var context = {workspace: tiddler.fields["server.workspace"]};
  var req = adaptor.getTiddler(tiddler.title, context, {}, onGetTiddler);
  return req ? tiddler : false;
}

function onGetTiddler(context) {
  var destTiddler = context.tiddler;
  var sourceTiddler = store.getTiddler(destTiddler.title);
  sourceTiddler.fields['server.page.revision'] = destTiddler.fields['server.page.revision'];
  sourceTiddler.fields['server.workspace'] = destTiddler.fields['server.workspace'];
  
  store.saveTiddler(sourceTiddler.title);
  autoSaveChanges(false);

}

Comments

name:
comment: