forked from Botanical/BotanJS
69 lines
1.4 KiB
JavaScript
69 lines
1.4 KiB
JavaScript
(function(){
|
|
var ns = __namespace( "Components.Vim.State" );
|
|
|
|
var Stator = function( cur, start )
|
|
{
|
|
this.__cursor = cur;
|
|
this.__startPosition = start == undefined ? cur.aPos : start;
|
|
this.__startState = this.__saveCur();
|
|
};
|
|
|
|
Stator.prototype.save = function( insertLength, contentUndo, removeLen )
|
|
{
|
|
if( removeLen == undefined ) removeLen = 0;
|
|
var cur = this.__cursor;
|
|
var feeder = cur.feeder;
|
|
var startPos = this.__startPosition - removeLen;
|
|
|
|
var sSt = this.__startState;
|
|
var eSt = this.__saveCur();
|
|
|
|
var st = sSt;
|
|
// Calling this repeatedly will swap between UNDO / REDO state
|
|
return function() {
|
|
var contentRedo = feeder.content.substr( startPos, insertLength );
|
|
feeder.content =
|
|
feeder.content.substring( 0, startPos )
|
|
+ contentUndo
|
|
+ feeder.content.substring( startPos + insertLength );
|
|
insertLength = contentUndo.length;
|
|
contentUndo = contentRedo;
|
|
|
|
cur.PStart = st.p;
|
|
cur.PEnd = st.p + 1;
|
|
cur.X = st.x;
|
|
cur.Y = st.y;
|
|
cur.pX = st.cpX - 1;
|
|
feeder.panX = st.px;
|
|
feeder.panY = st.py;
|
|
|
|
feeder.pan();
|
|
|
|
st = ( st == sSt ) ? eSt : sSt;
|
|
};
|
|
};
|
|
|
|
Stator.prototype.__saveCur = function()
|
|
{
|
|
var c = this.__cursor;
|
|
var obj = {
|
|
p: c.PStart
|
|
, x: c.X
|
|
, y: c.Y
|
|
, cpX: c.pX
|
|
, px: c.feeder.panX
|
|
, py: c.feeder.panY
|
|
};
|
|
|
|
if( 0 < obj.x )
|
|
{
|
|
obj.p -= 1;
|
|
obj.x -= 1;
|
|
}
|
|
|
|
return obj;
|
|
};
|
|
|
|
ns[ NS_EXPORT ]( EX_CLASS, "Stator", Stator );
|
|
})();
|