Ignore:
Timestamp:
03/05/07 10:41:46 (5 years ago)
Author:
sys
Message:

Debuggage implémentation ctrlC / ctrlX dans champs textes pour la gestion des espaces inséccables.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Xul_Cms/chrome/content/scenaricms/widgets/sctab/texteditor.xbl.xml

    r8746 r8861  
    8383                                this.fDraftTextBox.style.color="#666666"; 
    8484                                 
    85                                 //Controller copie de XEDInputController. 
     85                                //Controller copie de XEDInputController (nécessaire pour préservaion des espaces inséccables dans le copier/coller). 
    8686                                var vController = { 
    8787                                        fInput : this.fEditorBox.inputField, 
     
    102102                return; 
    103103        } 
    104         //ut.debug("XEDInputController!!!!!!!"+pCmd); 
    105104        //On copie 
    106105        var vSel = vEditor.selection; 
     106        if(vSel.isCollapsed) return; 
    107107        var vRange = vSel.getRangeAt(0); 
    108         var vCurrNode = vRange.startContainer; 
    109         var vStartOffs = vRange.startOffset; 
    110         if(vCurrNode.nodeType!=3) { 
    111                 vCurrNode = vCurrNode.fisrtChild; 
    112                 if(vCurrNode.nodeType!=3) return; 
    113                 vStartOffs = 0; 
    114         } 
     108        var vStartNode = vRange.startContainer; 
    115109        var vEndNode = vRange.endContainer; 
    116         var vEndOffs = vRange.endOffset; 
    117         if(vEndNode.nodeType!=3) { 
    118                 vEndNode = vEndNode.lastChild; 
    119                 while(vEndNode && vEndNode.nodeType!=3) { 
    120                         vEndNode = vEndNode.previsouSibling; 
     110         
     111        var vResult = ""; 
     112         
     113        if(vStartNode == vEndNode) { 
     114                vResult = vStartNode.substringData(vRange.startOffset, vRange.endOffset - vRange.startOffset); 
     115        } else { 
     116                var vTw = vStartNode.ownerDocument.createTreeWalker(vRange.commonAncestorContainer, NodeFilter.SHOW_ELEMENT|NodeFilter.SHOW_TEXT|NodeFilter.SHOW_CDATA_SECTION, null, true); 
     117                var vCurrNode = vTw.currentNode; 
     118                while(vCurrNode && vCurrNode != vStartNode) vCurrNode = vTw.nextNode(); 
     119                 
     120                if(vCurrNode == vStartNode) { 
     121                        if(vStartNode.nodeType==3) { 
     122                                vResult += vStartNode.substringData(vRange.startOffset, vStartNode.length - vRange.startOffset); 
     123                                vCurrNode = vTw.nextNode(); 
     124                        } else { 
     125                                vCurrNode = vTw.currentNode = vStartNode.childNodes.item(vRange.startOffset); 
     126                        } 
    121127                } 
    122                 if(!vEndNode) return; 
    123                 vEndOffs = vEndNode.length; 
    124         } 
    125          
    126         var vResult; 
    127         if(vCurrNode == vEndNode) { 
    128                 vResult = vCurrNode.substringData(vStartOffs, vEndOffs - vStartOffs); 
    129         } else { 
    130                 vResult = vCurrNode.substringData(vStartOffs, vCurrNode.length - vStartOffs); 
    131                 vCurrNode = vCurrNode.nextSibling; 
    132                 while(vCurr != vEndNode) { 
    133                         vResult += vCurrNode.data; 
    134                         vCurrNode = vCurrNode.nextSibling; 
     128                 
     129                var vStopNode = vEndNode; 
     130                if(vEndNode.nodeType==1) vStopNode = vEndNode.childNodes.item(vRange.endOffset); 
     131                 
     132                while(vCurrNode && vCurrNode != vStopNode) { 
     133                        if(vCurrNode.nodeType==3) { 
     134                                vResult += vCurrNode.data; 
     135                        } else { 
     136                                switch(vCurrNode.localName) { 
     137                                        case "br" : 
     138                                        case "div" : 
     139                                        case "p" : 
     140                                                vResult += ut.isWin ? "\r\n" : "\n"; 
     141                                } 
     142                        } 
     143                        vCurrNode = vTw.nextNode(); 
    135144                } 
    136                 vResult += vEndNode.data.substringData(0, vEndOffs); 
     145                if(vCurrNode == vEndNode) { 
     146                        if(vEndNode.nodeType==3) vResult += vEndNode.substringData(0, vRange.endOffset); 
     147                } 
    137148        } 
    138149         
Note: See TracChangeset for help on using the changeset viewer.