AJAX-reload of scrollable Sheets resets scrollbar to top position
-----------------------------------------------------------------

                 Key: TOBAGO-229
                 URL: https://issues.apache.org/jira/browse/TOBAGO-229
             Project: MyFaces Tobago
          Issue Type: Bug
            Reporter: Dennis Hauser


A workaround could be to store the scrollbar position before reloading and to 
set it to the original after the reload is completed  ( see attached code 
fragment exchange-energy-trade_win.js)

This does work theoretically, but the marked lines in the second code fragment 
(tobago-sheet.js) are resetting the sheet completely again.


-------------
exchange-energy-trade_win.js


function eetReloadOverviewWin() {

    // -------- neu von hier--------
    var dataDiv = Tobago.element("marketPage:overviewSheet_data_div");
    var scrollTop = dataDiv.scrollTop;
    var scrollLeft = dataDiv.scrollLeft;
    // -------- bis hier --------
                        
    var options = {
        insertion: function(receiver, response) {

            if (response.substring(0, 20) == "<status code=\"304\"/>") {
                // no update needed, do nothing
                receiver.skipUpdate = true;

            } else if (response.substring(0, 11) == "<input id=\"") {
                // update content
                Element.update(receiver, response);

                // -------- neu von hier--------
          var dataDiv2 = Tobago.element("marketPage:overviewSheet_data_div");
          dataDiv2.scrollTop = scrollTop;
          dataDiv2.scrollLeft = scrollLeft;
                // -------- bis hier --------

            } else {
                // unknown response do full page reload
                LOG.debug("initiating full reload");
                var mos = Tobago.element("marketPage:overviewSheet");
          if (mos != null) {
                    Tobago.submitAction("marketPage:overviewSheet");
                }    
            }
            if (eetOverviewTimeoutWin) {
                clearTimeout(eetOverviewTimeoutWin);
            }
            eetOverviewTimeoutWin = setTimeout(eetReloadOverviewWin, 
eetGetConfigWin().overviewSheetReloadTimeout);
        },
        createOverlay: false
    };
    Tobago.reloadComponent("marketPage:overviewSheet", 
"marketPage:overviewSheet", options);
}


-------------
resources/html/standard/standard/script/tobago-sheet.js


Tobago.Sheet.prototype.setup = function() {
    ...

    // Problematisches Codefragment, dessen Sinn mir sich nicht erschließt,
    // dessen Auskommentierung jedoch das Problem löst. :-)
    // -------- von hier --------

    // ToDo: find a better way to fix this problem
    // IE needs this in case of ajax loading of style classes
    var outerDiv = Tobago.element(this.outerDivId);
    outerDiv.className = outerDiv.className;
    outerDiv.innerHTML = outerDiv.innerHTML;

    // -------- bis hier --------
    ...

}
-------------

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
https://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira


Reply via email to