Update API.js
This commit is contained in:
parent
f59238fe58
commit
f7dd756642
|
@ -585,105 +585,106 @@ exports.deletePad = function(padID, callback)
|
|||
*/
|
||||
exports.restoreRevision = function (padID, rev, callback)
|
||||
{
|
||||
var Changeset = require("ep_etherpad-lite/static/js/Changeset");
|
||||
var padMessage = require("ep_etherpad-lite/node/handler/PadMessageHandler.js");
|
||||
var Changeset = require("ep_etherpad-lite/static/js/Changeset");
|
||||
var padMessage = require("ep_etherpad-lite/node/handler/PadMessageHandler.js");
|
||||
|
||||
//check if rev is a number
|
||||
if (rev !== undefined && typeof rev != "number")
|
||||
{
|
||||
//try to parse the number
|
||||
if (!isNaN(parseInt(rev)))
|
||||
{
|
||||
rev = parseInt(rev);
|
||||
}
|
||||
else
|
||||
{
|
||||
callback(new customError("rev is not a number", "apierror"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
//check if rev is a number
|
||||
if (rev !== undefined && typeof rev != "number")
|
||||
{
|
||||
//try to parse the number
|
||||
if (!isNaN(parseInt(rev)))
|
||||
{
|
||||
rev = parseInt(rev);
|
||||
}
|
||||
else
|
||||
{
|
||||
callback(new customError("rev is not a number", "apierror"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
//ensure this is not a negativ number
|
||||
if (rev !== undefined && rev < 0)
|
||||
{
|
||||
callback(new customError("rev is a negativ number", "apierror"));
|
||||
return;
|
||||
}
|
||||
//ensure this is not a negativ number
|
||||
if (rev !== undefined && rev < 0)
|
||||
{
|
||||
callback(new customError("rev is a negativ number", "apierror"));
|
||||
return;
|
||||
}
|
||||
|
||||
//ensure this is not a float value
|
||||
if (rev !== undefined && !is_int(rev))
|
||||
{
|
||||
callback(new customError("rev is a float value", "apierror"));
|
||||
return;
|
||||
}
|
||||
//ensure this is not a float value
|
||||
if (rev !== undefined && !is_int(rev))
|
||||
{
|
||||
callback(new customError("rev is a float value", "apierror"));
|
||||
return;
|
||||
}
|
||||
|
||||
//get the pad
|
||||
getPadSafe(padID, true, function (err, pad)
|
||||
{
|
||||
if (ERR(err, callback)) return;
|
||||
//get the pad
|
||||
getPadSafe(padID, true, function (err, pad)
|
||||
{
|
||||
if (ERR(err, callback)) return;
|
||||
|
||||
|
||||
//check if this is a valid revision
|
||||
if (rev > pad.getHeadRevisionNumber())
|
||||
{
|
||||
callback(new customError("rev is higher than the head revision of the pad", "apierror"));
|
||||
return;
|
||||
}
|
||||
//check if this is a valid revision
|
||||
if (rev > pad.getHeadRevisionNumber())
|
||||
{
|
||||
callback(new customError("rev is higher than the head revision of the pad", "apierror"));
|
||||
return;
|
||||
}
|
||||
|
||||
pad.getInternalRevisionAText(rev, function (err, atext)
|
||||
{
|
||||
if (ERR(err, callback)) return;
|
||||
pad.getInternalRevisionAText(rev, function (err, atext)
|
||||
{
|
||||
if (ERR(err, callback)) return;
|
||||
|
||||
var oldText = pad.text();
|
||||
atext.text += "\n";
|
||||
function eachAttribRun(attribs, func)
|
||||
{
|
||||
var attribsIter = Changeset.opIterator(attribs);
|
||||
var textIndex = 0;
|
||||
var newTextStart = 0;
|
||||
var newTextEnd = atext.text.length;
|
||||
while (attribsIter.hasNext())
|
||||
{
|
||||
var op = attribsIter.next();
|
||||
var nextIndex = textIndex + op.chars;
|
||||
if (!(nextIndex <= newTextStart || textIndex >= newTextEnd))
|
||||
{
|
||||
func(Math.max(newTextStart, textIndex), Math.min(newTextEnd, nextIndex), op.attribs);
|
||||
}
|
||||
textIndex = nextIndex;
|
||||
}
|
||||
}
|
||||
var oldText = pad.text();
|
||||
atext.text += "\n";
|
||||
function eachAttribRun(attribs, func)
|
||||
{
|
||||
var attribsIter = Changeset.opIterator(attribs);
|
||||
var textIndex = 0;
|
||||
var newTextStart = 0;
|
||||
var newTextEnd = atext.text.length;
|
||||
while (attribsIter.hasNext())
|
||||
{
|
||||
var op = attribsIter.next();
|
||||
var nextIndex = textIndex + op.chars;
|
||||
if (!(nextIndex <= newTextStart || textIndex >= newTextEnd))
|
||||
{
|
||||
func(Math.max(newTextStart, textIndex), Math.min(newTextEnd, nextIndex), op.attribs);
|
||||
}
|
||||
textIndex = nextIndex;
|
||||
}
|
||||
}
|
||||
|
||||
// create a new changeset with a helper builder object
|
||||
var builder = Changeset.builder(oldText.length);
|
||||
// create a new changeset with a helper builder object
|
||||
var builder = Changeset.builder(oldText.length);
|
||||
|
||||
// assemble each line into the builder
|
||||
eachAttribRun(atext.attribs, function (start, end, attribs)
|
||||
{
|
||||
builder.insert(atext.text.substring(start, end), attribs);
|
||||
});
|
||||
// assemble each line into the builder
|
||||
eachAttribRun(atext.attribs, function (start, end, attribs)
|
||||
{
|
||||
builder.insert(atext.text.substring(start, end), attribs);
|
||||
});
|
||||
|
||||
var lastNewlinePos = oldText.lastIndexOf('\n');
|
||||
if (lastNewlinePos < 0)
|
||||
{
|
||||
builder.remove(oldText.length - 1, 0);
|
||||
} else
|
||||
{
|
||||
builder.remove(lastNewlinePos, oldText.match(/\n/g).length - 1);
|
||||
builder.remove(oldText.length - lastNewlinePos - 1, 0);
|
||||
}
|
||||
var lastNewlinePos = oldText.lastIndexOf('\n');
|
||||
if (lastNewlinePos < 0)
|
||||
{
|
||||
builder.remove(oldText.length - 1, 0);
|
||||
} else
|
||||
{
|
||||
builder.remove(lastNewlinePos, oldText.match(/\n/g).length - 1);
|
||||
builder.remove(oldText.length - lastNewlinePos - 1, 0);
|
||||
}
|
||||
|
||||
var changeset = builder.toString();
|
||||
var changeset = builder.toString();
|
||||
|
||||
//append the changeset
|
||||
pad.appendRevision(changeset);
|
||||
//
|
||||
padMessage.updatePadClients(pad, function ()
|
||||
{
|
||||
});
|
||||
callback(null, null);
|
||||
});
|
||||
});
|
||||
//append the changeset
|
||||
pad.appendRevision(changeset);
|
||||
//
|
||||
padMessage.updatePadClients(pad, function ()
|
||||
{
|
||||
});
|
||||
callback(null, null);
|
||||
});
|
||||
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue