VirtualBox

Changeset 83451 in vbox


Ignore:
Timestamp:
Mar 26, 2020 7:17:38 PM (5 years ago)
Author:
vboxsync
Message:

TestManager/common.js: The iframe#rXXXXXX parent scroll/jump thing should be fixed now. Need to keep it all hidden till the iframe is fully loaded and only then display it. Optimized the changing of the #rXXXXXX part, though not for firefox which seems to not want to act on location.hash changes.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/ValidationKit/testmanager/htdocs/js/common.js

    r83440 r83451  
    892892
    893893/**
    894  * Highlights the desired revision.
    895  *
    896  * This is a WORKAROUND for browser where we cannot use the URL fragment to
    897  * do this.
    898  */
    899 function svnHistoryTooltipHighligh(oTooltip)
    900 {
    901     var iRevision = oTooltip.iRevision;
    902     if (false && isBrowserFirefox())
    903     {
    904         var sDesiredHash = '#r' + iRevision;
    905         var sCurrentHash = oTooltip.oIFrame.contentWindow.location.hash;
    906         //console.log('before: location.hash=' + sCurrentHash + ' src=' + oTooltip.oIFrame.src);
    907         if (sCurrentHash != sDesiredHash)
    908         {
    909             oTooltip.oIFrame.contentWindow.location.hash = sDesiredHash;
    910             oTooltip.oIFrame.contentWindow.location.reload();
    911             //console.log('after:  location.hash=' + oTooltip.oIFrame.contentWindow.location.hash + ' src='+oTooltip.oIFrame.src);
    912         }
    913         return true;
    914     }
    915 
    916     /* Clear old selection - not needed as we appear to be reloading the page each time... */
    917     var aoElements = oTooltip.oIFrame.contentDocument.getElementsByTagName('dt');
    918     var i;
    919     for (i = 0; i < aoElements.length; i++)
    920         aoElements[i].className = '';
    921     aoElements = oTooltip.oIFrame.contentDocument.getElementsByTagName('dd');
    922     for (i = 0; i < aoElements.length; i++)
    923         aoElements[i].className = '';
    924 
    925     /* New selection: */
    926     var oDt = oTooltip.oIFrame.contentDocument.getElementById('r' + iRevision);
    927     oDt.className = 'tmvcstimeline-highlight';
    928     oDt.nextElementSibling.className = 'tmvcstimeline-highlight';
    929 
    930     return true;
    931 }
    932 
    933 /**
    934894 * iframe.onload hook that repositions and resizes the tooltip.
    935895 *
     
    947907    if (g_oCurrentTooltip && g_oCurrentTooltip.oIFrame.contentWindow)
    948908    {
    949         var oSubElement = g_oCurrentTooltip.oIFrame;
    950         svnHistoryTooltipHighligh(g_oCurrentTooltip); /* do early as it increases the element padding */
    951 
    952         var cxSpace  = Math.max(oSubElement.offsetLeft * 2, 0); /* simplified */
    953         var cySpace  = Math.max(oSubElement.offsetTop  * 2, 0); /* simplified */
    954         var cxNeeded = oSubElement.contentWindow.document.body.scrollWidth  + cxSpace;
    955         var cyNeeded = oSubElement.contentWindow.document.body.scrollHeight + cySpace;
     909        var oIFrameElement = g_oCurrentTooltip.oIFrame;
     910        var cxSpace  = Math.max(oIFrameElement.offsetLeft * 2, 0); /* simplified */
     911        var cySpace  = Math.max(oIFrameElement.offsetTop  * 2, 0); /* simplified */
     912        var cxNeeded = oIFrameElement.contentWindow.document.body.scrollWidth  + cxSpace;
     913        var cyNeeded = oIFrameElement.contentWindow.document.body.scrollHeight + cySpace;
    956914        var cx = Math.min(cxNeeded, g_oCurrentTooltip.cxMax);
    957915        var cy;
    958916
    959917        g_oCurrentTooltip.oElm.width = cx + 'px';
    960         oSubElement.width            = (cx - cxSpace) + 'px';
     918        oIFrameElement.width            = (cx - cxSpace) + 'px';
    961919        if (cx >= cxNeeded)
    962920        {
    963921            //console.log('svnHistoryTooltipOnLoad: overflowX -> hidden');
    964             oSubElement.style.overflowX = 'hidden';
     922            oIFrameElement.style.overflowX = 'hidden';
    965923        }
    966924        else
    967925        {
    968             oSubElement.style.overflowX = 'scroll';
     926            oIFrameElement.style.overflowX = 'scroll';
    969927        }
    970928
     
    980938
    981939        g_oCurrentTooltip.oElm.height = cy + 'px';
    982         oSubElement.height            = (cy - cySpace) + 'px';
     940        oIFrameElement.height            = (cy - cySpace) + 'px';
    983941        if (cy >= cyNeeded)
    984942        {
    985943            //console.log('svnHistoryTooltipOnLoad: overflowY -> hidden');
    986             oSubElement.style.overflowY = 'hidden';
     944            oIFrameElement.style.overflowY = 'hidden';
    987945        }
    988946        else
    989947        {
    990             oSubElement.style.overflowY = 'scroll';
     948            oIFrameElement.style.overflowY = 'scroll';
    991949        }
    992950
    993951        //console.log('cyNeeded='+cyNeeded+' cyMax='+g_oCurrentTooltip.cyMax+' cySpace='+cySpace+' cy='+cy);
    994         //console.log('oSubElement.offsetTop='+oSubElement.offsetTop);
     952        //console.log('oIFrameElement.offsetTop='+oIFrameElement.offsetTop);
    995953        //console.log('svnHistoryTooltipOnLoad: cx='+cx+'cxMax='+g_oCurrentTooltip.cxMax+' cxNeeded='+cxNeeded+' cy='+cy+' cyMax='+g_oCurrentTooltip.cyMax);
    996954
     
    10421000function svnHistoryTooltipShowEx(oEvt, sRepository, iRevision, sUrlPrefix)
    10431001{
    1044     var sKey        = svnHistoryTooltipCalcId(sRepository, iRevision);
    1045     var oTooltip    = g_dTooltips[sKey];
    1046     var oParent     = oEvt.currentTarget;
     1002    var sKey    = svnHistoryTooltipCalcId(sRepository, iRevision);
     1003    var oParent = oEvt.currentTarget;
    10471004    //console.log('svnHistoryTooltipShow ' + sRepository);
    10481005
    10491006    function svnHistoryTooltipDelayedShow()
    10501007    {
    1051         var oSubElement;
    10521008        var sSrc;
    10531009
    1054         oTooltip = g_dTooltips[sKey];
     1010        var oTooltip = g_dTooltips[sKey];
    10551011        //console.log('svnHistoryTooltipDelayedShow ' + sRepository + ' ' + oTooltip);
    10561012        if (!oTooltip)
     
    10631019            oTooltip.oElm = document.createElement('div');
    10641020            oTooltip.oElm.setAttribute('id', sKey);
    1065             oTooltip.oElm.setAttribute('class', 'tmvcstooltip');
     1021            oTooltip.oElm.className      = 'tmvcstooltip';
     1022            oTooltip.oElm.style.display  = 'none';  /* Note! Must stay hidden till loaded, or parent jumps with #rXXXX.*/
    10661023            oTooltip.oElm.style.position = 'absolute';
    1067             oTooltip.oElm.style.zIndex = 6001;
     1024            oTooltip.oElm.style.zIndex   = 6001;
    10681025            oTooltip.xPos      = 0;
    10691026            oTooltip.yPos      = 0;
     
    10751032            oTooltip.iRevision = iRevision;   /**< For  :target/highlighting */
    10761033
    1077             oSubElement = document.createElement('iframe');
    1078             oSubElement.setAttribute('id', sKey + '_iframe');
    1079             oSubElement.setAttribute('style', 'position: relative;"');
    1080             oSubElement.onmouseenter = tooltipElementOnMouseEnter;
    1081             oSubElement.onmouseout   = tooltipElementOnMouseOut;
    1082             oTooltip.oElm.appendChild(oSubElement);
    1083             oTooltip.oIFrame = oSubElement;
     1034            var oIFrameElement = document.createElement('iframe');
     1035            oIFrameElement.setAttribute('id', sKey + '_iframe');
     1036            oIFrameElement.style.position = 'relative';
     1037            oIFrameElement.onmouseenter  = tooltipElementOnMouseEnter;
     1038            oIFrameElement.onmouseout     = tooltipElementOnMouseOut;
     1039            oTooltip.oElm.appendChild(oIFrameElement);
     1040            oTooltip.oIFrame = oIFrameElement;
    10841041            g_dTooltips[sKey] = oTooltip;
    10851042
    10861043            document.body.appendChild(oTooltip.oElm);
    10871044
    1088             oSubElement.onload = function() { tooltipReallyShow(oTooltip, oParent); svnHistoryTooltipOnLoad();  };
     1045            oIFrameElement.onload = function() { /* A slight delay here to give time for #rXXXX scrolling before we show it. */
     1046                setTimeout(function(){tooltipReallyShow(oTooltip, oParent); svnHistoryTooltipOnLoad();}, 64);
     1047            };
    10891048
    10901049            var sUrl = sUrlPrefix + 'index.py?Action=VcsHistoryTooltip&repo=' + sRepository
    10911050                     + '&rev=' + svnHistoryTooltipCalcLastRevision(iRevision)
    1092                      + '&cEntries=' + g_cTooltipSvnRevisions;
    1093             if (false && isBrowserFirefox()) /* The other browsers will scroll the main window when jumping to the revision. */
    1094                 sUrl = sUrl + '#r' + iRevision;
    1095             oSubElement.setAttribute('src', sUrl);
    1096 
     1051                     + '&cEntries=' + g_cTooltipSvnRevisions
     1052                     + '#r' + iRevision;
     1053            oIFrameElement.src = sUrl;
    10971054        }
    10981055        else
    10991056        {
    1100             /* Show the existing one with different :target/highlighting */
    1101             oTooltip.iRevision = iRevision;
    1102             if (false && isBrowserFirefox()) /* The other browsers will scroll the main window when jumping to the revision. */
    1103                 svnHistoryTooltipHighligh(oTooltip);
    1104             tooltipReallyShow(oTooltip, oParent);
    1105             svnHistoryTooltipOnLoad();
     1057            /*
     1058             * Show the existing one, possibly with different :target/highlighting.
     1059             */
     1060            if (oTooltip.iRevision != iRevision)
     1061            {
     1062                //console.log('Changing revision ' + oTooltip.iRevision + ' -> ' + iRevision);
     1063                oTooltip.oIFrame.contentWindow.location.hash = '#r' + iRevision;
     1064                if (!isBrowserFirefox()) /* Chrome updates stuff like expected; Firefox OTOH doesn't change anything. */
     1065                {
     1066                    setTimeout(function() { /* Slight delay to make sure it scrolls before it's shown. */
     1067                        tooltipReallyShow(oTooltip, oParent);
     1068                        svnHistoryTooltipOnLoad();
     1069                    }, 64);
     1070                }
     1071                else
     1072                    oTooltip.oIFrame.contentWindow.location.reload();
     1073            }
     1074            else
     1075            {
     1076                tooltipReallyShow(oTooltip, oParent);
     1077                svnHistoryTooltipOnLoad();
     1078            }
    11061079        }
    11071080    }
    11081081
    11091082    /*
    1110      * Delay the change.
     1083     * Delay the change (in case the mouse moves on).
    11111084     */
    11121085    tooltipResetShowTimer();
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette