Пример #1
0
    def _apply(self):
        formatter = self.m_editor.getFormatter()

        link = self.m_webPageText.getText().strip()
        if not link:
            return False

        print self.m_origAnchorStart, self.m_origAnchorEnd

        if (self.m_origAnchorStart is not None)  and  self.m_fillOutCB.getValue():
            # Expand selection to these bounds
            self.m_range.setRange(self.m_origAnchorStart, self.m_origAnchorEnd)

        # Ensure the selection hasn't changed, or at least changes to the
        # expanded bounds we want
        Selection.setRange(self.m_range)

        targetText = self.m_targetText.getText()

        if self.m_range.isCursor():
            # Insert into a single cursor location
            newEle = DOM.createAnchor()
            newEle.href = link
            newEle.innerText = targetText

            sp = self.m_range.getStartPoint()
            startNode = sp.getTextNode()
            offset = sp.getOffset()
            print "sp", sp, startNode, offset
            parentEle = startNode.parentElement
            text = startNode.data

            if offset == 0:
                parentEle.insertBefore(newEle, startNode)

            else:
                if offset < len(text):
                    # Split this in two and insert the node between
                    startNode.splitText(offset)

                DOM.insertAfter(startNode, newEle)

            Selection.setRange(Range(newEle))

        elif targetText != self.m_origTargetText:
            # Replace whatever was selected with this text
            ele = self.m_range.surroundContents()
            newEle = DOM.createAnchor()
            newEle.href = link
            newEle.innerText = targetText
            ele.parentElement.replaceChild(newEle, ele)

            Selection.setRange(Range(newEle))
        else:
            formatter.createLink(link)


        return True
Пример #2
0
    def fetchStringFromTexts(self, startPoint, endPoint):
        res = None
        texts = Range.getSelectedTextElements(
                        startPoint.getTextNode(), endPoint.getTextNode())
        if texts is not None:
            res = self.fetchStringFromTexts(texts, startPoint, endPoint)

        return res
Пример #3
0
    def fetchStringFromTexts(self, startPoint, endPoint):
        res = None
        texts = Range.getSelectedTextElements(
                        startPoint.getTextNode(), endPoint.getTextNode())
        if texts is not None:
            res = self.fetchStringFromTexts(texts, startPoint, endPoint)

        return res
Пример #4
0
    def selectNodes(self, startNode, startOffset, endNode=None, endOffset=None):

        startText = self.findNodeByNumber(startNode)
        if endNode is not None:
            endText = self.findNodeByNumber(endNode)
        else:
            endText = startText
            endOffset = startOffset

        rng = Range(RangeEndPoint(startText, startOffset),
                    RangeEndPoint(endText, endOffset))

        self.getSelection()
        Selection.setRange(rng)

        self.refresh()
Пример #5
0
    def getAnchorLimit(self, node, anchor, forward):
        href = anchor.href
        while True:
            prevNode = node
            node = Range.getAdjacentTextElement(prevNode, forward)
            if node is not None:
                cmpAnchor = self.getAnchor(node)
                if (cmpAnchor is None) or not href == cmpAnchor.href:
                    break

            if node is None:
                break

        res = RangeEndPoint()
        res.setTextNode(prevNode)
        res.setOffset(forward and prevNode.getData().length() or 0)
        return res
Пример #6
0
    def getAnchorLimit(self, node, anchor, forward):
        href = anchor.href
        while True:
            prevNode = node
            node = Range.getAdjacentTextElement(prevNode, forward)
            if node is not None:
                cmpAnchor = self.getAnchor(node)
                if (cmpAnchor is None) or not href == cmpAnchor.href:
                    break

            if node is None:
                break

        res = RangeEndPoint()
        res.setTextNode(prevNode)
        res.setOffset(forward and prevNode.getData().length() or 0)
        return res