edubkendo
5/29/2013 - 10:50 AM

pages.coffee

App = require('app')

App.PagesView = Em.View.extend
  templateName: require('templates/pages')

  click: (event) ->
    # console.log event
    elem = event.srcElement
    x = event.pageX
    y = event.pageY

    getWordAtPoint = (elem, x, y) ->

      if elem.nodeType is elem.TEXT_NODE
        range = elem.ownerDocument.createRange()
        range.selectNodeContents(elem)

        currentPos = 0
        endPos = range.endOffset

        while currentPos+1 < endPos
          # console.log range
          try
            range.setStart(elem, currentPos)
          catch e
            if e
              break
          range.setEnd(elem, currentPos+1)

          if(range.getBoundingClientRect().left <= x && range.getBoundingClientRect().right  >= x && range.getBoundingClientRect().top  <= y && range.getBoundingClientRect().bottom >= y)
            range.expand("word")
            ret = range.toString()
            range.detach()
            console.log ret

          currentPos += 1

      else
        for i in [0..elem.childNodes.length]
          range = elem.childNodes[i]?.ownerDocument.createRange()
          range?.selectNodeContents(elem.childNodes[i])

          if(range?.getBoundingClientRect().left <= x && range?.getBoundingClientRect().right  >= x && range?.getBoundingClientRect().top  <= y && range?.getBoundingClientRect().bottom >= y)

            range?.detach()
            return(getWordAtPoint(elem.childNodes[i], x, y))

          else
            range?.detach()

      return null  

    getWordAtPoint(elem, x, y)
    # console.log document.caretRangeFromPoint(event.pageX, event.pageY).startContainer.data
    # console.log event
    return false