     # @return {[none]}           [nothing]
     ###
     _deleteMultiLinesSelections : (startLine, endLine) ->
-        console.log "multi line deletion"
-        
         unless @currentSel?
             console.log "no selection, can't delete multi lines"
             return null

    #   rangeIsStartLine : true if the range starts at the start of 1st line
    ###
    _findLinesAndIsStartIsEnd : () ->
        if this.currentSel == null
            
            # 1- Variables
            sel                = @getEditorSelection()
            range              = sel.getRangeAt(0)
            startContainer     = range.startContainer
            endContainer       = range.endContainer
            initialStartOffset = range.startOffset
            initialEndOffset   = range.endOffset

            # 2- find endLine and the rangeIsEndLine
            # endContainer refers to a div of a line
            if endContainer.id? and endContainer.id.substr(0,5) == 'CNID_'
                endLine = @_lines[ endContainer.id ]
                # rangeIsEndLine if endOffset points on the last node of the div
                # or on the one before the last which is a <br>
                rangeIsEndLine = endContainer.children.length < initialEndOffset or endContainer.children[initialEndOffset].nodeName=="BR"
            # means the range ends inside a div (span, textNode...)
            else if $(endContainer).parents("div").length > 0
                endLineDiv = selection.getLineDiv(endContainer)
                endLine = @_lines[endLineDiv.id]
                # rangeIsEndLine if the selection is at the end of the
                # endContainer and of each of its parents (this approach is more
                # robust than just considering that the line is a flat
                # succession of span : maybe one day there will be a table for
                # instance...)
                rangeIsEndLine = false
                # case of a textNode: it must have no nextSibling
                # and offset must be its length
                if endContainer.nodeType == Node.TEXT_NODE
                    rangeIsEndLine = endContainer.nextSibling == null and
                                     initialEndOffset == endContainer.textContent.length
                # case of another node : it must be a br;
                # or be followed by a br and have maximal offset.
                else
                    rangeIsEndLine = endContainer.nodeName=='BR' or
                                     (endContainer.nextSibling.nodeName=='BR' and
                                     endContainer.childNodes.length==initialEndOffset)
                    #nextSibling    = endContainer.nextSibling
                    #rangeIsEndLine = (nextSibling == null or nextSibling.nodeName=='BR')
                    #(nextSibling == null or (initialEndOffset==parentEndContainer.textContent.length and nextSibling.nodeName=='BR'))
                parentEndContainer = endContainer.parentNode
                while rangeIsEndLine and parentEndContainer.nodeName != "DIV"
                    nextSibling = parentEndContainer.nextSibling
                    rangeIsEndLine = (nextSibling == null or nextSibling.nodeName=='BR')
                    # rangeIsEndLine = endContainer.nodeName=='BR' or
                    #                  (nextSibling.nodeName=='BR' and
                    #                  endContainer.childNodes.length==initialEndOffset)
                    parentEndContainer = parentEndContainer.parentNode
            else
                endLine = @_lines["CNID_1"]
            
            # 3- find startLine and rangeIsStartLine
            if startContainer.nodeName == 'DIV' # startContainer refers to a div of a line
                startLine = @_lines[ startContainer.id ]
                rangeIsStartLine = initialStartOffset == 0
                
            else if $(startContainer).parents("div").length > 0
                # means the range starts inside a div (span, textNode...)
            
                startLine = @_lines[selection.getLineDiv(startContainer).id]
                # case of a textNode: it must have no previousSibling nor offset
                if startContainer.nodeType == Node.TEXT_NODE
                    rangeIsStartLine = endContainer.previousSibling == null and
                                       initialStartOffset == 0
                else
                    rangeIsStartLine = initialStartOffset == 0
                
                parentStartContainer = startContainer.parentNode
                while rangeIsStartLine && parentStartContainer.nodeName != "DIV"
                    rangeIsStartLine = parentStartContainer.previousSibling == null
                    parentStartContainer = parentStartContainer.parentNode
            else
                startLine = @_lines["CNID_1"]

            # Special case of an "empty" line (<span><""></span><br>)
            if endLine?.line$[0].innerHTML == "<span></span><br>"
                rangeIsEndLine = true
            if startLine?.line$[0].innerHTML == "<span></span><br>"
                rangeIsStartLine = true

            # 4- build result
            @currentSel =
                sel              : sel
                range            : range
                startLine        : startLine
                endLine          : endLine
                rangeIsStartLine : rangeIsStartLine
                rangeIsEndLine   : rangeIsEndLine


            console.log @currentSel
            
            @currrentSel


    ###  -----------------------------------------------------------------------

    _processPaste : () =>
        sandbox = @.clipboard
        currSel = @currentSel
        console.log currSel
        

        
        # 1- Sanitize clipboard content with node-validator 
