You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
zhky/web/js/coolMenuItem.htc

188 lines
4.7 KiB

<PUBLIC:COMPONENT lightWeight=false>
<PUBLIC:DEFAULTS contentEditable=false tabStop=false/>
<PUBLIC:attach event="ondocumentready" onevent="initCoolMenuItem()" />
<PUBLIC:attach event="onmouseover" onevent="coolMenuItemOnMouseOver()" />
<PUBLIC:attach event="onmouseout" onevent="coolMenuItemOnMouseOut()" />
<PUBLIC:attach event="onpropertychange" onevent="coolMenuItemPropertyChange()" />
<PUBLIC:property name="enabled" value=true />
<PUBLIC:property name="subMenu" value="" />
<PUBLIC:property name="subMenuState" value=false />
<PUBLIC:method name="hideMenu" />
<script language="VBScript">
option explicit
dim fo_shadows
dim onClickHolder
dim drawState
dim dispCounter
dim dispTimer
dim dispEl
dim dispFade
sub initCoolMenuItem()
element.nowrap = true
if not enabled then showDisabled
end sub
sub coolMenuItemOnMouseOver
window.clearTimeout(dispTimer)
if not enabled then exit sub
dim el
set el = getRealItem(window.event.srcElement)
with el
if .className = "coolMenuItem" and not subMenuState then
dispFade = not checkMenuStates
with .runtimeStyle
.backgroundColor = "highlight"
.color = "highlighttext"
end with
if .subMenu <> "" then
set dispEl = el
dispCounter = 0
dispTimer = window.setTimeout(GetRef("timedMenuDisplay"), 5)
end if
end if
end with
set el = nothing
end sub
sub coolMenuItemOnMouseOut
window.clearTimeout(dispTimer)
if not enabled then exit sub
dim el
set el = getRealItem(window.event.srcElement)
with el
if .className = "coolMenuItem" then
if not subMenuState then
with .runtimeStyle
.backgroundColor = ""
.color = ""
end with
.parentElement.setMenuItem nothing
end if
end if
end with
set el = nothing
end sub
function getRealItem(el)
dim tmpElement
set tmpElement = el
if (tmpElement.tagName = "IMG") then
set tmpElement = tmpElement.parentElement
end if
if (tmpElement.className = "coolMenuMore") then
set tmpElement = tmpElement.parentElement
end if
set getRealItem = tmpElement
set tmpElement = nothing
end function
sub timedMenuDisplay
dim elMenu
window.clearTimeout(dispTimer)
if dispCounter < 10 then
dispCounter = dispCounter + 1
dispTimer = window.setTimeout(GetRef("timedMenuDisplay"), 25)
exit sub
end if
set elMenu = window.document.body.parentElement.document.getElementById(cstr(dispEl.subMenu))
showMenu dispEl, elMenu, dispFade
dispEl.parentElement.setMenuItem dispEl
set elMenu = nothing
set dispEl = nothing
end sub
sub showDisabled
if drawState <> "DISABLED" then
if isobject(element.onclick) then
set onClickHolder = element.onclick
element.onclick = nothing
end if
style.cursor = "default"
drawState = "DISABLED"
innerHTML = "<span class='coolDisabled'><span class='coolDisabled'>" & innerHTML & "</span></span>"
end if
end sub
sub showEnabled
if drawState = "DISABLED" then
if isobject(onClickHolder) then
set element.onclick = onClickHolder
set onClickHolder = nothing
end if
style.cursor = "hand"
drawState = "ENABLED"
innerHTML = children(0).children(0).innerHTML
end if
end sub
function checkMenuStates
dim lastMenuItem
set lastMenuItem = element.parentElement.getMenuItem()
if not lastMenuItem is nothing then
if lastMenuItem.subMenuState then
lastMenuItem.hideMenu lastMenuItem, window.document.getElementById(cstr(lastMenuItem.subMenu))
checkMenuStates = true
end if
end if
set lastMenuItem = nothing
end function
sub showMenu(elMenuItem, elMenu, blnFade)
dim menuRoot
if elMenu is nothing then exit sub
with elMenu
if not .menuSized then .sizeMenu
with .style
.zIndex = 60
.left = elMenuItem.offsetLeft + elMenuItem.offsetWidth + elMenuItem.parentElement.offsetLeft + 2
.top = elMenuItem.offsetTop + elMenuItem.parentElement.offsetTop - 1
end with
elMenuItem.subMenuState = true
if blnFade then .filters.blendTrans.apply()
.style.visibility = "visible"
if blnFade then .filters.blendTrans.play()
.menuRoot = parentElement.menuRoot
set menuRoot = window.document.body.parentElement.document.getElementById(cstr(parentElement.menuRoot))
menuRoot.addSubMenu .id, element
set menuRoot = nothing
end with
end sub
sub hideMenu(elMenuItem, elMenu)
dim menuRoot
if subMenuState = false then exit sub
if elMenu is nothing then exit sub
elMenu.style.visibility = "hidden"
with elMenuItem
.subMenuState = false
with .runtimeStyle
.backgroundColor = ""
.color = ""
end with
end with
set menuRoot = window.document.body.parentElement.document.getElementById(cstr(parentElement.menuRoot))
menuRoot.removeSubMenu elMenu.id
set menuRoot = nothing
end sub
sub coolMenuItemPropertyChange
if window.event.propertyName = "enabled" then
if not enabled then
showDisabled
else
showEnabled
end if
end if
end sub
</script>
</PUBLIC:COMPONENT>