Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
Clear All
new posts

    Different values with JS getSelection().focusNode.parentNode

    After adding some SmartGWT widgets to our GWT application we're seeing different values in this JavaScript statement, located in our custom JavaScript code: "getSelection().focusNode.parentNode". Without SmartGWT widgets the value is "SPAN". After adding a couple of SmartGWT containers around some of our GWT widgets the value is now "TD". The action that eventually hits this JavaScript comes from a left-click on a GWT HTML widget. Here's a rough diagram of our container hierarchy when using SmartGWT widgets ([SGWT] denotes a SmartGWT widget):

    Code:
    VLayout [SGWT]
    	HStack [SGWT]
    		ScrollPanel
    			VerticalPanel
    				<our GWT Table widget>
    		HorizontalPanel
    			VerticalPanel
    				HorizontalPanel
    					HorizontalPanel
    						GroupBox
    						GroupBox
    				HorizontalPanel
    					Label
    				ScrollPanel
    					HTML <------------ widget we're clicking on
    			VerticalPanel
    				TreeGrid [SGWT]
    				VerticalPanel
    The HStack has setShowResizeBar set to true.

    Using Firebug's 3d view to inspect the DOM of the application with and without SmartGWT shows the element we're clicking on as a "SPAN" in both cases (with and without SmartGWT). The outside "TD" element that contains this "SPAN" is the same for both applications.

    ------------------------------------------------------------------------
    The call chain made to get to our "getSelection().focusNode.parentNode JavaScript statement is:
    - User Left-clicks on text in the HTML widget
    - onClick(ClickEvent event) handler recieves the click event
    - Call made to the native JS method "getSelectedChar()" shown below.

    The following statment is always false when using SmartGWT widgets, as shown in the above diagram: "if (anchorParent.nodeName != "SPAN")"

    ------------------------------------------------------------------------
    Any idea what we're doing wrong?

    SmartGWT version: 4.0d
    Browser: Firefox 20.0.1

    ------------------------------------------------------------------------
    function getSelectedChar() in TextSelection.js:

    Code:
    document.getSelectedChar = function getSelectedChar()
    {
    	// Make sure that this click wasn't part of a selection
    	var selection = document.getSelection().getRangeAt(0);
    	var length = selection.toString().length;
    	if (length != 0) { return -1; }
    	
    	// Check that the text was selected from left to right
    	var backwards = isSelectionBackwards();
    	
    	// Get the anchor, focus, and parent nodes
    	if (!backwards)
    	{
    		var anchor = document.getSelection().anchorNode;
    		var anchorOffset = document.getSelection().anchorOffset;
    		var anchorParent = anchor.parentNode;
    		var focus = document.getSelection().focusNode;
    		var focusOffset = document.getSelection().focusOffset;
    		var focusParent = focus.parentNode;
    	}
    	else
    	{
    		var anchor = document.getSelection().focusNode;
    		var anchorOffset = document.getSelection().focusOffset;
    		var anchorParent = anchor.parentNode;
    		var focus = document.getSelection().anchorNode;
    		var focusOffset = document.getSelection().anchorOffset;
    		var focusParent = focus.parentNode;
    	}
    	
    	if (anchorParent.nodeName != "SPAN") { return -1; }
    	var mentionText = anchorParent.textContent;
    	var str = anchor.textContent;
    	str = str.substring(anchorOffset, anchorOffset + 1);
    	document.getSelectedText(true);
    	return endPos;
    }

    #2
    Don't intermix GWT and SmartGWT widgets - see the FAQ. No idea how it breaks this particular JavaScript (or what it's for) but that's not the only thing that will break; this is a bad strategy.

    Comment

    Working...
    X