# Text document API for text

text = require './text' if typeof WEB is 'undefined'

text.api =
  provides: {text:true}

  # The number of characters in the string
  getLength: -> @snapshot.length

  # Get the text contents of a document
  getText: -> @snapshot

  insert: (pos, text, callback) ->
    op = [{p:pos, i:text}]
    
    @submitOp op, callback
    op
  
  del: (pos, length, callback) ->
    op = [{p:pos, d:@snapshot[pos...(pos + length)]}]

    @submitOp op, callback
    op
  
  _register: ->
    @on 'remoteop', (op) ->
      for component in op
        if component.i != undefined
          @emit 'insert', component.p, component.i
        else
          @emit 'delete', component.p, component.d
