Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save peicheng/f8cceccc649e4a28895d to your computer and use it in GitHub Desktop.
Save peicheng/f8cceccc649e4a28895d to your computer and use it in GitHub Desktop.
// To create a clone of pad CWrp961Hnw as of revision 3:
// http://sketchpad.cc/sp/pad/newsketch?clonePadId=CWrp961Hnw&cloneRevNum=3
// --------------------------------------------------------------------------------
// in etherpad/src/etherpad/control/pad/pad_control.js
// --------------------------------------------------------------------------------
import("etherpad.collab.collab_server.buildHistoricalAuthorDataMapForPadHistory");
function render_newsketch() {
var session = getSession();
var padId;
padId = randomUniquePadId();
session.instantCreate = padId;
var query = "";
if (request.query && request.query != "") {
query = "?"+request.query;
}
response.redirect("/"+padId+query);
}
function _createIfNecessary(localPadId, pad) {
if (pad.exists()) {
delete getSession().instantCreate;
return;
}
var validPadId = padutils.makeValidLocalPadId(localPadId);
if (localPadId != validPadId) {
response.redirect('/'+validPadId);
}
if (request.params.createImmediately || getSession().instantCreate == localPadId) {
var initialContent;
if (request.query) {
var clonePadId = getQueryVariable("clonePadId");
var cloneRevNum = getQueryVariable("cloneRevNum");
var usePadId;
if (isReadOnlyId(clonePadId)) {
usePadId = readonlyToPadId(clonePadId);
if (!pro_utils.isProDomainRequest()) {
usePadId = padutils.getGlobalPadId(usePadId);
}
} else {
usePadId = padutils.getGlobalPadId(clonePadId);
}
var padGlobal = usePadId;
var padText = model.accessPadGlobal(usePadId, function(pad) {
return pad.getRevisionText(cloneRevNum);
}, 'r');
var historicalAuthorData = model.accessPadGlobal(usePadId, function(pad) {
return buildHistoricalAuthorDataMapForPadHistory(pad);
}, 'r');
var list = formatAuthorData(historicalAuthorData);
var header = "// This sketch builds on a prior work created by " + list.join(" & ") + "\n";
var priorUrl = "// http://" + request.host + "/sp/pad/view/"+clonePadId+"/rev."+cloneRevNum + "\n\n";
pad.create(header + priorUrl + padText);
return;
} else {
initialContent = getDefaultPadText();
}
pad.create(initialContent);
delete getSession().instantCreate;
return;
}
response.redirect("/sp/pad/create?padId="+encodeURIComponent(localPadId));
}
function formatAuthorData(historicalAuthorData) {
var authors_all = [];
for (var author in historicalAuthorData) {
var n = historicalAuthorData[author].name;
authors_all[n] = (authors_all[n]) ? 1+authors_all[n] : 1;
}
var authors = [];
for (var n in authors_all) {
if (n == "undefined") {
authors.push("[unnamed author]");
} else {
authors.push(n);
}
}
return authors;
}
function getQueryVariable(variable) {
var query = request.query;
var vars = query.split("&");
for (var i = 0; i < vars.length; i++) {
var pair = vars[i].split("=");
if (pair[0] == variable) {
return pair[1];
}
}
return false;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment