src/cm/media/js/client/c_selection.js
author raph
Thu, 10 Dec 2009 16:23:01 +0100
changeset 45 678f8cb31c05
parent 0 40c8f766c9b8
child 341 053551f213fb
permissions -rw-r--r--
min client generated
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     1
getWrapperAncestor = function(elt) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     2
	var parent = elt ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     3
	while (parent != null) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     4
    	if (CY.DOM.hasClass(parent, 'c-s')) 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     5
    		return parent ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     6
    	parent = parent.parentNode ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     7
	}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     8
	return null ; 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     9
}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    10
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    11
hasWrapperAncestor = function(elt) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    12
	return (getWrapperAncestor(elt) != null) ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    13
/*	var parent = elt ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
	while (parent != null) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    15
    	if (CY.DOM.hasClass(parent, 'c-s')) 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    16
    		return true ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
    	parent = parent.parentNode ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    18
	}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    19
	return false ;*/ 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    20
}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    21
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    22
// returns null or :
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    23
// {'text' : textcontent, 'start': {'elt':startNode, 'nbChar':startOffset(==number of characters to selection start in the start node},
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    24
// 'end': ....}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    25
// the text attribute is informational having it empty doesn't mean selection is empty !!
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    26
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    27
// when selection starts/ends in/on a non textual element (<hr/> for example) we very often have anchorNode/focusNode == body elt
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    28
// TODO adapt this body case by considering offset ( cf. http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    29
getSelectionInfo  = function () {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    30
	var startNode = null, endNode = null, startOffset = 0, endOffset = 0, text = '' ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    32
	if (window.getSelection) { // everything else than IE
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    33
		var userSelection = window.getSelection();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    34
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
		if (userSelection.rangeCount > 0) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
			var range = userSelection.getRangeAt(0) ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    37
			text = range.toString() ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    38
			if (text != "")  {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    39
				
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    40
				// selection occured from right to left ? :
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    41
				var r1 = document.createRange() ;r1.setStart(userSelection.anchorNode, userSelection.anchorOffset) ;r1.collapse(true) ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    42
				var r2 = document.createRange() ;r2.setEnd(userSelection.focusNode, userSelection.focusOffset) ;r2.collapse(false) ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    43
				var leftToRight = (r2.compareBoundaryPoints(2, r1) == 1) ; // 2 is for END_TO_END
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
//				CY.log("leftToRight : " + leftToRight) ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    45
				startNode = (leftToRight) ? userSelection.anchorNode.parentNode : userSelection.focusNode.parentNode ;  
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    46
				innerStartNode = (leftToRight) ? userSelection.anchorNode : userSelection.focusNode ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    47
				endNode = (leftToRight) ? userSelection.focusNode.parentNode : userSelection.anchorNode.parentNode;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    48
				innerEndNode = (leftToRight) ? userSelection.focusNode : userSelection.anchorNode;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    49
					
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    50
				startOffset = (leftToRight) ? userSelection.anchorOffset : userSelection.focusOffset;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    51
				endOffset = (leftToRight) ? userSelection.focusOffset : userSelection.anchorOffset ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    52
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
				if (!hasWrapperAncestor(endNode) && hasWrapperAncestor(startNode)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    54
					var r3 = document.createRange() ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    55
					r3.setStart(innerStartNode, startOffset) ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    56
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    57
					var csStartAncestor = getWrapperAncestor(startNode) ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    58
					var next = csStartAncestor ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    59
					r3.setEndAfter(next) ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    60
					
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    61
					var ind = parseInt(csStartAncestor.id.substring('sv_'.length)) ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    62
					while(r3.toString().length < range.toString().length) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    63
							ind++ ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    64
							var node = CY.get("#sv_"+ind) ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    65
							if (node) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    66
								next = CY.Node.getDOMNode(node) ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    67
								r3.setEndAfter(next) ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    68
							}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    69
							else 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    70
								break ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    71
					}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    72
					endNode = next.lastChild ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    73
					endOffset = CY.DOM.getText(endNode).length ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    74
				}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    75
				else if (!hasWrapperAncestor(startNode) && hasWrapperAncestor(endNode)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    76
					var r3 = document.createRange() ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    77
					r3.setEnd(innerEndNode, endOffset) ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    78
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    79
					var csEndAncestor = getWrapperAncestor(endNode) ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    80
					var prev = csEndAncestor ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    81
					r3.setStartBefore(prev) ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    82
					
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    83
					var ind = parseInt(csEndAncestor.id.substring('sv_'.length)) ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    84
					while(r3.toString().length < range.toString().length) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    85
							ind-- ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    86
							var node = CY.get("#sv_"+ind) ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    87
							if (node) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    88
								prev = CY.Node.getDOMNode(node) ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    89
								r3.setStartBefore(prev) ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    90
							}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    91
							else 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    92
								break ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    93
					}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    94
					startNode = prev.firstChild ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    95
					startOffset = 0 ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    96
				}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    97
				else if (!hasWrapperAncestor(startNode) && !hasWrapperAncestor(endNode)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    98
					var textLength = text.length ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    99
					
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   100
					// gather nodes with id sv_xxxx as candidates for start ancestor
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   101
					var startNodeInds = [] ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   102
					for (var ind = 0 ;  ; ind++) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   103
						var svNode = CY.get("#sv_"+ind) ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   104
						if (svNode == null) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   105
							break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   106
						}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   107
						else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   108
							var svText = svNode.get("text") ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   109
							if (text.indexOf(svText) == 0) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   110
								startNodeInds.push(ind) ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   111
							}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   112
						}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   113
					}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   114
					
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   115
					// gather nodes with id sv_xxxx as candidates for end ancestor
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   116
					var endNodeInds = [] ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   117
					for (var ind = 0 ;  ; ind++) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   118
						var svNode = CY.get("#sv_"+ind) ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   119
						if (svNode == null) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   120
							break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   121
						}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   122
						else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   123
							var svText = svNode.get("text") ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   124
							if (text.indexOf(svText) == (textLength - svText.length)) { // i.e. the selection exactly ends with svText
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   125
								endNodeInds.push(ind) ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   126
							}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   127
						}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   128
					}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   129
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   130
					var stop = false ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   131
					for (var i = 0 ; i < startNodeInds.length ; i++) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   132
						for (var j = 0 ; j < endNodeInds.length ; j++) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   133
							var r4 = document.createRange() ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   134
							
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   135
							var s = CY.Node.getDOMNode(CY.get("#sv_"+startNodeInds[i])) ; var e = CY.Node.getDOMNode(CY.get("#sv_"+endNodeInds[j])) ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   136
							
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   137
							r4.setStartBefore(s) ; r4.setEndAfter(CY.Node.getDOMNode(e)) ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   138
							
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   139
							// does r4 starts after range start and r4 ends before range end ? 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   140
							if ((-1 < r4.compareBoundaryPoints(0, range)) && (1 > r4.compareBoundaryPoints(2, range))) { 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   141
								startNode = s.firstChild ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   142
								startOffset = 0 ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   143
								endNode = e.lastChild ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   144
								endOffset = CY.DOM.getText(e).length ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   145
								
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   146
								stop = true ; 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   147
								break ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   148
							}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   149
						}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   150
						if (stop)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   151
							break ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   152
					}							
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   153
				}				
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   154
				
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   155
				r1.detach() ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   156
				r2.detach() ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   157
			}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   158
			else 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   159
				return null ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   160
		}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   161
		else 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   162
			return null ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   163
		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   164
	}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   165
	else if (document.selection) { // IE case
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   166
		var rng = document.selection.createRange();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   167
		if (rng.text.length == 0) 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   168
			return null ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   169
		var el = rng.parentElement();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   170
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   171
		// duplicate the range and collapse it to its start, to ask IE the parent element of the start textNode.		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   172
		var rngStart = rng.duplicate();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   173
		var rngEnd = rng.duplicate();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   174
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   175
		rngStart.collapse(true); // collapse to start
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   176
		rngEnd.collapse(false);  // collapse to end
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   177
		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   178
		startNode = rngStart.parentElement() ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   179
		while(rngStart.moveStart('character', -1) != 0) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   180
			if (rngStart.parentElement() != startNode)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   181
				break ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   182
			startOffset++ ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   183
		}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   184
		endNode = rngEnd.parentElement() ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   185
		while(rngEnd.moveEnd('character', -1) != 0) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   186
			if (rngEnd.parentElement() != endNode)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   187
				break ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   188
			endOffset++ ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   189
		}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   190
		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   191
		text = rng.text ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   192
	}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   193
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   194
	if (!hasWrapperAncestor(startNode) || !hasWrapperAncestor(endNode)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   195
		// CY.log('no wrapper on one end') ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   196
		return null ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   197
	}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   198
	return {'text' : text, 'start' : {'elt':startNode, 'offset':startOffset}, 'end' : {'elt':endNode, 'offset':endOffset}} ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   199
}