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/2k3MenuRoot.htc

293 lines
6.9 KiB

1 year ago
<PUBLIC:COMPONENT
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>lightWeight<EFBFBD>=<3D>true
>
<PUBLIC:DEFAULTS
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>contentEditable<EFBFBD>=<3D>false
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>tabStop<EFBFBD>=<3D>true
/>
<PUBLIC:attach event="ondocumentready" onevent="initElement()" />
<PUBLIC:attach event="onmouseover" onevent="elementOnMouseOver()" />
<PUBLIC:attach event="onmouseout" onevent="elementOnMouseOut()" />
<PUBLIC:attach event="onmousedown" onevent="elementOnMouseDown()" />
<PUBLIC:attach event="onmouseup" onevent="elementOnMouseUp()" />
<PUBLIC:attach event="onpropertychange" onevent="elementPropertyChange()" />
<PUBLIC:attach event="onselectstart" onevent="elementOnSelect()" />
<PUBLIC:attach event="oncontextmenu" onevent="elementOnContextMenu()" />
<PUBLIC:attach event="ondetach" onevent="cleanupElement()" />
<PUBLIC:property name="enabled" value=true />
<PUBLIC:property name="menu" value />
<PUBLIC:property name="menuState" value />
<PUBLIC:method name="hideMenu" />
<script language="jscript">
// ----------------------------------------------------
// 2k3Widgets: 2k3MenuRoot
//
// Copyright <20>2002-2004 Stedy Software and Systems
// Please see http://www.stedy.com for terms of use.
// ----------------------------------------------------
var menuShadowArray = new Array(null, null, null, null) ;
var vbLeftButton = 1 ;
function initElement() {
for (var i = 3; i >= 0; i--) {
menuShadowArray[i] = window.document.createElement("TD") ;
menuShadowArray[i].className = "2k3ShadowElement" ;
element.parentElement.insertAdjacentElement("afterBegin", menuShadowArray[i]) ;
}
element.enabled = makeBooleanOfAttribute("enabled") ;
element.subMenuState = makeBooleanOfAttribute("subMenuState") ;
if (!element.enabled) {
showDisabled(element) ;
}
}
function cleanupElement() {
for (var i = 0; i <= 3; i++) {
if (menuShadowArray[i] != null) {
menuShadowArray[i].style.visibility = "hidden" ;
menuShadowArray[i].removeNode(true) ;
menuShadowArray[i] = null ;
}
}
}
function elementOnMouseOver() {
var el = window.event.srcElement ;
if (el.className == "2k3MenuRootCaption") {
el = el.parentElement ;
}
if (el.className == "2k3MenuRoot") {
if (isElementEnabled(el)) {
if (checkMenuStates()) {
if (element.parentElement.parentElement.parentElement.activeChild == null) {
showActive(el) ;
showMenu() ;
element.menuState = true ;
}
}
else {
if (!element.menuState) {
if (element.parentElement.parentElement.parentElement.activeChild != null) {
if (element.parentElement.parentElement.parentElement.activeChild.parentElement == element.parentElement) {
showOver(el) ;
}
}
else {
showOver(el) ;
}
}
}
}
}
}
function elementOnMouseOut() {
var el = window.event.srcElement ;
if (el.className == "2k3MenuRootCaption") {
el = el.parentElement ;
}
if (el.className == "2k3MenuRootOver") {
if (isElementEnabled(el)) {
if (!element.menuState) {
showNormal(el) ;
}
}
}
}
function elementOnMouseDown() {
var el = window.event.srcElement ;
if (el.className == "2k3MenuRootCaption") {
el = el.parentElement ;
}
if (el.className == "2k3MenuRootOver") {
if ((window.event.button == vbLeftButton) && isElementEnabled(el)) {
if (!element.menuState) {
showActive(el) ;
showMenu() ;
}
}
}
}
function elementOnMouseUp() {
var el = window.event.srcElement ;
if (el.className == "2k3MenuRootCaption") {
el = el.parentElement ;
}
if (el.className == "2k3MenuRootActive") {
if ((window.event.button == vbLeftButton) && isElementEnabled(el)) {
if (element.menuState) {
hideMenu() ;
showOver(el) ;
}
else {
element.menuState = true ;
}
}
}
}
function elementPropertyChange() {
if (window.event.propertyName == "enabled") {
if (element.enabled) {
showEnabled(element) ;
}
else {
showDisabled(element) ;
}
}
}
function elementOnSelect() {
with (window.event) {
cancelBubble = true ;
returnValue = false ;
}
return false ;
}
function elementOnContextMenu() {
with (window.event) {
cancelBubble = true ;
returnValue = false ;
}
return false ;
}
function isElementEnabled(el) {
return el.enabled ;
}
function showNormal(el) {
for (var i = 0; i <= 3; i++) {
if (menuShadowArray[i] != null) {
menuShadowArray[i].style.visibility = "hidden" ;
}
}
el.className = "2k3MenuRoot" ;
}
function showOver(el) {
el.className = "2k3MenuRootOver" ;
}
function showActive(el) {
el.className = "2k3MenuRootActive" ;
for (var i = 3; i >= 0; i--) {
with (menuShadowArray[i].style) {
left = el.offsetLeft + (4 + i) - 1 ;
top = el.offsetTop + (4 + i) ;
width = el.offsetWidth - (i * 2) ;
height = el.offsetHeight - (i * 2) ;
zIndex = el.style.zIndex - 1 ;
visibility = "visible" ;
}
}
}
function showDisabled(el) {
el.className = "2k3MenuRootDisabled" ;
}
function showEnabled(el) {
el.className = "2k3MenuRoot" ;
}
function checkMenuStates() {
for (var i = 0; i < element.parentElement.children.length; i++) {
var childElement = element.parentElement.children[i] ;
if (childElement != element) {
with (childElement) {
if (className == "2k3MenuRootActive") {
hideMenu() ;
return true ;
}
}
}
}
return false ;
}
function showMenu() {
with (element) {
var x = offsetLeft + parentElement.parentElement.parentElement.offsetLeft ;
var y = offsetTop + offsetHeight + parentElement.parentElement.parentElement.offsetTop - 3 ;
var w = offsetWidth - 2 ;
}
with (window.document) {
attachEvent("onclick", hideMenuEx) ;
getElementById(element.menu).showMenu(x, y, w) ;
}
element.parentElement.parentElement.parentElement.activeChild = element ;
}
function hideMenu() {
var el = window.event.srcElement ;
var elParent = el.parentElement ;
if (elParent != null) {
switch (elParent.className) {
case "2k3MenuImageShadow":
elParent = elParent.parentElement ;
break ;
case "2k3MenuImage":
elParent = elParent.parentElement ;
break ;
case "2k3MenuItemOver":
el = elParent.parentElement.parentElement ;
if (el.subMenuState) {
elParent = null ;
el = null ;
return ;
}
break ;
}
}
with (window.document) {
detachEvent("onclick", hideMenuEx) ;
getElementById(element.menu).hideMenu() ;
}
showNormal(element) ;
element.menuState = false ;
element.parentElement.parentElement.parentElement.activeChild = null ;
}
function hideMenuEx() {
var el = window.event.srcElement ;
if (el.className != "2k3MenuRootActive" && el.className != "2k3MenuRootCaption") {
hideMenu() ;
with (window.event) {
cancelBubble = true ;
returnValue = false ;
}
}
}
function makeBooleanOfAttribute(attName) {
a = element.getAttribute(attName) ;
if (typeof(a) == "boolean") {
return a ;
}
else if (a == null) {
a = false ;
}
else if (typeof(a) == "string") {
a = a.toLowerCase() ;
a = (a == "true" || a == "1" || a == "yes") ;
}
else {
a = new Boolean(a) ;
}
return a ;
}
</script>
</PUBLIC:COMPONENT>