spacer

Webref WebRef   Sitemap · Experts · Tools · Services · Newsletters · About i.com


home / experts / dhtml / column64

Developer News
Microsoft Shows Off Silverlight 4, IE9 Plans
Metasploit Expands Vulnerability Test Framework
HyperCard Reborn?

Logo

Hiermenus Go Forth, XXVIII:
Version 4.2.2 - The Complete Script (Full-Window)



IE5 for Macintosh Fix

HM 4.2.1 introduced support for the new tall-menu scrolling behavior in IE5Mac. In our discussion, we mentioned the update problems and our solution. We size and position to-be-displayed child menus, then display them with a timer. We overlooked that all parent menu properties that reflected the child menu's display status should not be updated before the timer fires. Properties like menuElement.hasChildVisible and menuElement.visibleChild should be set after the timer fires, not before.

Even though the display time interval is negligibly short, a user moving their mouse at light speed over the menu items (like one Dan Ragle seems to do from time to time) can create orphan child menus. That is, child menus that the script believes do not exist because the necessary properties that reflect their status have incorrect values. And since HM believes these child menus to be hidden, it never hides them, even when the top-level menu is hidden.

We have corrected this by creating a new function HM_f_DisplayChild() that is called as the displayChild() method of menu items:

Version 4.2.1

function HM_f_ShowChild(){
    ...        
    this.child.moveTo(this.child.xPos,this.child.yPos);
    this.menu.hasChildVisible = true;
    this.menu.visibleChild = this.child;

    if(HM_IE5M) {
        setTimeout(this.child.id+".showIt(true)",10);
    }
    else {
        this.child.showIt(true);
    }
}

Version 4.2.2

function HM_f_ShowChild(){
    ...        
    this.child.moveTo(this.child.xPos,this.child.yPos);

    if(HM_IE5M) {
        setTimeout(this.id+".displayChild()",10);
    }
    else {
        this.displayChild();
    }
}

function HM_f_DisplayChild(){
    this.menu.hasChildVisible = true;
    this.menu.visibleChild = this.child;
    this.child.showIt(true);
}

Oops!

Version 4.2.1 had a regression bug because of a couple of lines inadvertantly omitted from HM_f_ShowChild() in HM_ScriptDOM.js:

function HM_f_ShowChild(){
    ...        

    if(!this.tree.PositionUnder || this.menu!=this.tree.treeParent) {
        if(this.child.scrollbarsCreated) {                    <--
            this.child.style.height = this.child.origHeight;  <--  omitted by mistake
        }                                                     <--
        this.child.keepInWindow();
    }
}

This omission could cause scrollbars to display permanently on short menus that displayed menus after browser resize.

Files Changed in Version 4.2.2

You will need to overwrite previous versions of the above files to upgrade to 4.2.2.

If you set the new global parameter HM_GL_ScrollBothBars, then you will need to add it to your version of HM_Loader.js.

On the next page, a sample demonstration page.


Produced by Peter Belesis and

internet.commediabistro.comJusttechjobs.comGraphics.com

Search:

WebMediaBrands Corporate Info

Legal Notices, Licensing, Permissions, Privacy Policy.
Advertise | Newsletters | Shopping | E-mail Offers | Freelance Jobs

webref The latest from WebReference.com Browse >
Rolling Out Your Own HTML Application Version Control · HTML 5: Client-side Storage · Working with Ajax Server Extensions
Sitemap · Experts · Tools · Services · Email a Colleague · Contact FREE Newsletters 
 The latest from internet.com
Wi-Fi Product Watch, November 2009 · Chip Market Recovering From '08 Collapse · Low-Cost Tools to Kickstart Your New Business

All Rights Reserved. Legal Notices.
Created: March 07, 2002
Revised: March 07, 2002

URL: http://www.webreference.com/dhtml/column64/4.html