diff --git a/lib/Operations/Basic.coffee b/lib/Operations/Basic.coffee index b24f17c0..ffcad3ae 100644 --- a/lib/Operations/Basic.coffee +++ b/lib/Operations/Basic.coffee @@ -188,7 +188,7 @@ module.exports = ()-> # Every instance of $Operation must have an $execute function. # We use duck-typing to check if op is instantiated since there # could exist multiple classes of $Operation - # + # if not op? # nop else if op.execute? or not (op.op_number? and op.creator?) @@ -212,7 +212,7 @@ module.exports = ()-> success = @ for name, op_uid of @unchecked op = @HB.getOperation op_uid - if op + if op @[name] = op else uninstantiated[name] = op_uid diff --git a/lib/Operations/Structured.coffee b/lib/Operations/Structured.coffee index b1f386c0..9209acde 100644 --- a/lib/Operations/Structured.coffee +++ b/lib/Operations/Structured.coffee @@ -191,6 +191,15 @@ module.exports = ()-> else @toArray() + ref: (pos)-> + if pos? + o = @getOperationByPosition(pos+1) + if not (o instanceof ops.Delimiter) + o + else + throw new Error "this position does not exist" + else + throw new Error "you must specify a position parameter" # # Retrieves the x-th not deleted element. @@ -307,7 +316,7 @@ module.exports = ()-> class ops.Composition extends ops.ListManager constructor: (custom_type, @composition_value, uid, composition_ref)-> - super custom_type, null, null, uid + super custom_type, uid if composition_ref @saveOperation 'composition_ref', composition_ref else @@ -323,14 +332,14 @@ module.exports = ()-> # callOperationSpecificInsertEvents: (op)-> if @composition_ref.next_cl is op - @custom_type._apply op.content + o.undo_delta = @custom_type._apply op.content else o = @end.prev_cl while o isnt op - @custom_type._undo o.content + @custom_type._unapply o.undo_delta o = o.next_cl while o isnt @end - @custom_type._apply o.content + o.undo_delta = @custom_type._apply o.content o = o.next_cl @composition_ref = @end.prev_cl