composition type & support for list references
This commit is contained in:
		
							parent
							
								
									bb0bfcc5c8
								
							
						
					
					
						commit
						e55ed9f2b4
					
				@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user