[ Index ] |
|
Code source de Joomla 1.0.13 |
1 /* 2 JSCookMenu v1.4.3. (c) Copyright 2002-2005 by Heng Yuan 3 4 Permission is hereby granted, free of charge, to any person obtaining a 5 copy of this software and associated documentation files (the "Software"), 6 to deal in the Software without restriction, including without limitation 7 the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 and/or sell copies of the Software, and to permit persons to whom the 9 Software is furnished to do so, subject to the following conditions: 10 11 The above copyright notice and this permission notice shall be included 12 in all copies or substantial portions of the Software. 13 14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 15 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 ITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19 FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20 DEALINGS IN THE SOFTWARE. 21 */ 22 23 var _cmIDCount = 0; var _cmIDName = 'cmSubMenuID'; var _cmTimeOut = null; var _cmCurrentItem = null; var _cmNoAction = new Object (); var _cmNoClick = new Object (); var _cmSplit = new Object (); var _cmItemList = new Array (); var _cmNodeProperties = { mainFolderLeft: '', mainFolderRight: '', mainItemLeft: '', mainItemRight: '', folderLeft: '', folderRight: '', itemLeft: '', itemRight: '', mainSpacing: 0, subSpacing: 0, delay: 500, clickOpen: 1 24 }; function cmNewID () 25 { return _cmIDName + (++_cmIDCount);} 26 function cmActionItem (item, prefix, isMain, idSub, orient, nodeProperties) 27 { var clickOpen = _cmNodeProperties.clickOpen; if (nodeProperties.clickOpen) 28 clickOpen = nodeProperties.clickOpen; _cmItemList[_cmItemList.length] = item; var index = _cmItemList.length - 1; idSub = (!idSub) ? 'null' : ('\'' + idSub + '\''); orient = '\'' + orient + '\''; prefix = '\'' + prefix + '\''; var onClick = (clickOpen == 3) || (clickOpen == 2 && isMain); var returnStr; if (onClick) 29 returnStr = ' onmouseover="cmItemMouseOver (this,' + prefix + ',' + isMain + ',' + idSub + ',' + index + ')" onmousedown="cmItemMouseDownOpenSub (this,' + index + ',' + prefix + ',' + orient + ',' + idSub + ')"'; else 30 returnStr = ' onmouseover="cmItemMouseOverOpenSub (this,' + prefix + ',' + isMain + ',' + idSub + ',' + orient + ',' + index + ')" onmousedown="cmItemMouseDown (this,' + index + ')"'; return returnStr + ' onmouseout="cmItemMouseOut (this,' + nodeProperties.delay + ')" onmouseup="cmItemMouseUp (this,' + index + ')"';} 31 function cmNoClickItem (item, prefix, isMain, idSub, orient, nodeProperties) 32 { _cmItemList[_cmItemList.length] = item; var index = _cmItemList.length - 1; idSub = (!idSub) ? 'null' : ('\'' + idSub + '\''); orient = '\'' + orient + '\''; prefix = '\'' + prefix + '\''; return ' onmouseover="cmItemMouseOver (this,' + prefix + ',' + isMain + ',' + idSub + ',' + index + ')" onmouseout="cmItemMouseOut (this,' + nodeProperties.delay + ')"';} 33 function cmNoActionItem (item, prefix) 34 { return item[1];} 35 function cmSplitItem (prefix, isMain, vertical) 36 { var classStr = 'cm' + prefix; if (isMain) 37 { classStr += 'Main'; if (vertical) 38 classStr += 'HSplit'; else 39 classStr += 'VSplit';} 40 else 41 classStr += 'HSplit'; return eval (classStr);} 42 function cmDrawSubMenu (subMenu, prefix, id, orient, nodeProperties) 43 { var str = '<div class="' + prefix + 'SubMenu" id="' + id + '"><table summary="sub menu" cellspacing="' + nodeProperties.subSpacing + '" class="' + prefix + 'SubMenuTable">'; var strSub = ''; var item; var idSub; var hasChild; var i; var classStr; for (i = 5; i < subMenu.length; ++i) 44 { item = subMenu[i]; if (!item) 45 continue; hasChild = (item.length > 5); idSub = hasChild ? cmNewID () : null; if (item == _cmSplit) 46 item = cmSplitItem (prefix, 0, true); str += '<tr class="' + prefix + 'MenuItem"'; if (item[0] != _cmNoClick) 47 str += cmActionItem (item, prefix, 0, idSub, orient, nodeProperties); else 48 str += cmNoClickItem (item, prefix, 0, idSub, orient, nodeProperties); str += '>' 49 if (item[0] == _cmNoAction || item[0] == _cmNoClick) 50 { str += cmNoActionItem (item, prefix); str += '</tr>'; continue;} 51 classStr = prefix + 'Menu'; classStr += hasChild ? 'Folder' : 'Item'; str += '<td class="' + classStr + 'Left">'; if (item[0] != null) 52 str += item[0]; else 53 str += hasChild ? nodeProperties.folderLeft : nodeProperties.itemLeft; str += '</td><td class="' + classStr + 'Text">' + item[1]; str += '</td><td class="' + classStr + 'Right">'; if (hasChild) 54 { str += nodeProperties.folderRight; strSub += cmDrawSubMenu (item, prefix, idSub, orient, nodeProperties);} 55 else 56 str += nodeProperties.itemRight; str += '</td></tr>';} 57 str += '</table></div>' + strSub; return str;} 58 function cmDraw (id, menu, orient, nodeProperties, prefix) 59 { var obj = cmGetObject (id); if (!nodeProperties) 60 nodeProperties = _cmNodeProperties; if (!prefix) 61 prefix = ''; var str = '<table summary="main menu" class="' + prefix + 'Menu" cellspacing="' + nodeProperties.mainSpacing + '">'; var strSub = ''; if (!orient) 62 orient = 'hbr'; var orientStr = String (orient); var orientSub; var vertical; if (orientStr.charAt (0) == 'h') 63 { orientSub = 'v' + orientStr.substr (1, 2); str += '<tr>'; vertical = false;} 64 else 65 { orientSub = 'v' + orientStr.substr (1, 2); vertical = true;} 66 var i; var item; var idSub; var hasChild; var classStr; for (i = 0; i < menu.length; ++i) 67 { item = menu[i]; if (!item) 68 continue; str += vertical ? '<tr' : '<td'; str += ' class="' + prefix + 'MainItem"'; hasChild = (item.length > 5); idSub = hasChild ? cmNewID () : null; str += cmActionItem (item, prefix, 1, idSub, orient, nodeProperties) + '>'; if (item == _cmSplit) 69 item = cmSplitItem (prefix, 1, vertical); if (item[0] == _cmNoAction || item[0] == _cmNoClick) 70 { str += cmNoActionItem (item, prefix); str += vertical? '</tr>' : '</td>'; continue;} 71 classStr = prefix + 'Main' + (hasChild ? 'Folder' : 'Item'); str += vertical ? '<td' : '<span'; str += ' class="' + classStr + 'Left">'; str += (item[0] == null) ? (hasChild ? nodeProperties.mainFolderLeft : nodeProperties.mainItemLeft) 72 : item[0]; str += vertical ? '</td>' : '</span>'; str += vertical ? '<td' : '<span'; str += ' class="' + classStr + 'Text">'; str += item[1]; str += vertical ? '</td>' : '</span>'; str += vertical ? '<td' : '<span'; str += ' class="' + classStr + 'Right">'; str += hasChild ? nodeProperties.mainFolderRight : nodeProperties.mainItemRight; str += vertical ? '</td>' : '</span>'; str += vertical ? '</tr>' : '</td>'; if (hasChild) 73 strSub += cmDrawSubMenu (item, prefix, idSub, orientSub, nodeProperties);} 74 if (!vertical) 75 str += '</tr>'; str += '</table>' + strSub; obj.innerHTML = str;} 76 function cmDrawFromText (id, orient, nodeProperties, prefix) 77 { var domMenu = cmGetObject (id); var menu = null; for (var currentDomItem = domMenu.firstChild; currentDomItem; currentDomItem = currentDomItem.nextSibling) 78 { if (!currentDomItem.tagName || currentDomItem.tagName.toLowerCase () != 'ul') 79 continue; menu = cmDrawFromTextSubMenu (currentDomItem); break;} 80 if (menu) 81 cmDraw (id, menu, orient, nodeProperties, prefix);} 82 function cmDrawFromTextSubMenu (domMenu) 83 { var items = new Array (); for (var currentDomItem = domMenu.firstChild; currentDomItem; currentDomItem = currentDomItem.nextSibling) 84 { if (!currentDomItem.tagName || currentDomItem.tagName.toLowerCase () != 'li') 85 continue; if (currentDomItem.firstChild == null) 86 { items[items.length] = _cmSplit; continue;} 87 var item = new Array (); var currentItem = currentDomItem.firstChild; for (; currentItem; currentItem = currentItem.nextSibling) 88 { if (!currentItem.tagName || currentItem.tagName.toLowerCase () != 'span') 89 continue; if (!currentItem.firstChild) 90 item[0] = null; else 91 item[0] = currentItem.innerHTML; break;} 92 if (!currentItem) 93 continue; for (; currentItem; currentItem = currentItem.nextSibling) 94 { if (!currentItem.tagName || currentItem.tagName.toLowerCase () != 'a') 95 continue; item[1] = currentItem.innerHTML; item[2] = currentItem.href; item[3] = currentItem.target; item[4] = currentItem.title; if (item[4] == '') 96 item[4] = null; break;} 97 for (; currentItem; currentItem = currentItem.nextSibling) 98 { if (!currentItem.tagName || currentItem.tagName.toLowerCase () != 'ul') 99 continue; var subMenuItems = cmDrawFromTextSubMenu (currentItem); for (i = 0; i < subMenuItems.length; ++i) 100 item[i + 5] = subMenuItems[i]; break;} 101 items[items.length] = item;} 102 return items;} 103 function cmItemMouseOver (obj, prefix, isMain, idSub, index) 104 { clearTimeout (_cmTimeOut); if (!obj.cmPrefix) 105 { obj.cmPrefix = prefix; obj.cmIsMain = isMain;} 106 var thisMenu = cmGetThisMenu (obj, prefix); if (!thisMenu.cmItems) 107 thisMenu.cmItems = new Array (); var i; for (i = 0; i < thisMenu.cmItems.length; ++i) 108 { if (thisMenu.cmItems[i] == obj) 109 break;} 110 if (i == thisMenu.cmItems.length) 111 { thisMenu.cmItems[i] = obj;} 112 if (_cmCurrentItem) 113 { if (_cmCurrentItem == obj || _cmCurrentItem == thisMenu) 114 { var item = _cmItemList[index]; cmSetStatus (item); return;} 115 var thatPrefix = _cmCurrentItem.cmPrefix; var thatMenu = cmGetThisMenu (_cmCurrentItem, thatPrefix); if (thatMenu != thisMenu.cmParentMenu) 116 { if (_cmCurrentItem.cmIsMain) 117 _cmCurrentItem.className = thatPrefix + 'MainItem'; else 118 _cmCurrentItem.className = thatPrefix + 'MenuItem'; if (thatMenu.id != idSub) 119 cmHideMenu (thatMenu, thisMenu, thatPrefix);} 120 } 121 _cmCurrentItem = obj; cmResetMenu (thisMenu, prefix); var item = _cmItemList[index]; var isDefaultItem = cmIsDefaultItem (item); if (isDefaultItem) 122 { if (isMain) 123 obj.className = prefix + 'MainItemHover'; else 124 obj.className = prefix + 'MenuItemHover';} 125 cmSetStatus (item);} 126 function cmItemMouseOverOpenSub (obj, prefix, isMain, idSub, orient, index) 127 { cmItemMouseOver (obj, prefix, isMain, idSub, index); if (idSub) 128 { var subMenu = cmGetObject (idSub); cmShowSubMenu (obj, prefix, subMenu, orient);} 129 } 130 function cmItemMouseOut (obj, delayTime) 131 { if (!delayTime) 132 delayTime = _cmNodeProperties.delay; _cmTimeOut = window.setTimeout ('cmHideMenuTime ()', delayTime); window.defaultStatus = '';} 133 function cmItemMouseDown (obj, index) 134 { if (cmIsDefaultItem (_cmItemList[index])) 135 { if (obj.cmIsMain) 136 obj.className = obj.cmPrefix + 'MainItemActive'; else 137 obj.className = obj.cmPrefix + 'MenuItemActive';} 138 } 139 function cmItemMouseDownOpenSub (obj, index, prefix, orient, idSub) 140 { cmItemMouseDown (obj, index); if (idSub) 141 { var subMenu = cmGetObject (idSub); cmShowSubMenu (obj, prefix, subMenu, orient);} 142 } 143 function cmItemMouseUp (obj, index) 144 { var item = _cmItemList[index]; var link = null, target = '_self'; if (item.length > 2) 145 link = item[2]; if (item.length > 3 && item[3]) 146 target = item[3]; if (link != null) 147 { window.open (link, target);} 148 var prefix = obj.cmPrefix; var thisMenu = cmGetThisMenu (obj, prefix); var hasChild = (item.length > 5); if (!hasChild) 149 { if (cmIsDefaultItem (item)) 150 { if (obj.cmIsMain) 151 obj.className = prefix + 'MainItem'; else 152 obj.className = prefix + 'MenuItem';} 153 cmHideMenu (thisMenu, null, prefix);} 154 else 155 { if (cmIsDefaultItem (item)) 156 { if (obj.cmIsMain) 157 obj.className = prefix + 'MainItemHover'; else 158 obj.className = prefix + 'MenuItemHover';} 159 } 160 } 161 function cmMoveSubMenu (obj, subMenu, orient) 162 { var mode = String (orient); var p = subMenu.offsetParent; var subMenuWidth = cmGetWidth (subMenu); var horiz = cmGetHorizontalAlign (obj, mode, p, subMenuWidth); if (mode.charAt (0) == 'h') 163 { if (mode.charAt (1) == 'b') 164 subMenu.style.top = (cmGetYAt (obj, p) + cmGetHeight (obj)) + 'px'; else 165 subMenu.style.top = (cmGetYAt (obj, p) - cmGetHeight (subMenu)) + 'px'; if (horiz == 'r') 166 subMenu.style.left = (cmGetXAt (obj, p)) + 'px'; else 167 subMenu.style.left = (cmGetXAt (obj, p) + cmGetWidth (obj) - subMenuWidth) + 'px';} 168 else 169 { if (horiz == 'r') 170 subMenu.style.left = (cmGetXAt (obj, p) + cmGetWidth (obj)) + 'px'; else 171 subMenu.style.left = (cmGetXAt (obj, p) - subMenuWidth) + 'px'; if (mode.charAt (1) == 'b') 172 subMenu.style.top = (cmGetYAt (obj, p)) + 'px'; else 173 subMenu.style.top = (cmGetYAt (obj, p) + cmGetHeight (obj) - cmGetHeight (subMenu)) + 'px';} 174 } 175 function cmGetHorizontalAlign (obj, mode, p, subMenuWidth) 176 { var horiz = mode.charAt (2); if (!(document.body)) 177 return horiz; var body = document.body; var browserLeft; var browserRight; if (window.innerWidth) 178 { browserLeft = window.pageXOffset; browserRight = window.innerWidth + browserLeft;} 179 else if (body.clientWidth) 180 { browserLeft = body.clientLeft; browserRight = body.clientWidth + browserLeft;} 181 else 182 return horiz; if (mode.charAt (0) == 'h') 183 { if (horiz == 'r' && (cmGetXAt (obj) + subMenuWidth) > browserRight) 184 horiz = 'l'; if (horiz == 'l' && (cmGetXAt (obj) + cmGetWidth (obj) - subMenuWidth) < browserLeft) 185 horiz = 'r'; return horiz;} 186 else 187 { if (horiz == 'r' && (cmGetXAt (obj, p) + cmGetWidth (obj) + subMenuWidth) > browserRight) 188 horiz = 'l'; if (horiz == 'l' && (cmGetXAt (obj, p) - subMenuWidth) < browserLeft) 189 horiz = 'r'; return horiz;} 190 } 191 function cmShowSubMenu (obj, prefix, subMenu, orient) 192 { if (!subMenu.cmParentMenu) 193 { var thisMenu = cmGetThisMenu (obj, prefix); subMenu.cmParentMenu = thisMenu; if (!thisMenu.cmSubMenu) 194 thisMenu.cmSubMenu = new Array (); thisMenu.cmSubMenu[thisMenu.cmSubMenu.length] = subMenu;} 195 cmMoveSubMenu (obj, subMenu, orient); subMenu.style.visibility = 'visible'; if (document.all) 196 { if (!subMenu.cmOverlap) 197 subMenu.cmOverlap = new Array (); cmHideControl ("IFRAME", subMenu); cmHideControl ("SELECT", subMenu); cmHideControl ("OBJECT", subMenu);} 198 } 199 function cmResetMenu (thisMenu, prefix) 200 { if (thisMenu.cmItems) 201 { var i; var str; var items = thisMenu.cmItems; for (i = 0; i < items.length; ++i) 202 { if (items[i].cmIsMain) 203 str = prefix + 'MainItem'; else 204 str = prefix + 'MenuItem'; if (items[i].className != str) 205 items[i].className = str;} 206 } 207 } 208 function cmHideMenuTime () 209 { if (_cmCurrentItem) 210 { var prefix = _cmCurrentItem.cmPrefix; cmHideMenu (cmGetThisMenu (_cmCurrentItem, prefix), null, prefix); _cmCurrentItem = null;} 211 } 212 function cmHideMenu (thisMenu, currentMenu, prefix) 213 { var str = prefix + 'SubMenu'; if (thisMenu.cmSubMenu) 214 { var i; for (i = 0; i < thisMenu.cmSubMenu.length; ++i) 215 { cmHideSubMenu (thisMenu.cmSubMenu[i], prefix);} 216 } 217 while (thisMenu && thisMenu != currentMenu) 218 { cmResetMenu (thisMenu, prefix); if (thisMenu.className == str) 219 { thisMenu.style.visibility = 'hidden'; cmShowControl (thisMenu);} 220 else 221 break; thisMenu = cmGetThisMenu (thisMenu.cmParentMenu, prefix);} 222 } 223 function cmHideSubMenu (thisMenu, prefix) 224 { if (thisMenu.style.visibility == 'hidden') 225 return; if (thisMenu.cmSubMenu) 226 { var i; for (i = 0; i < thisMenu.cmSubMenu.length; ++i) 227 { cmHideSubMenu (thisMenu.cmSubMenu[i], prefix);} 228 } 229 cmResetMenu (thisMenu, prefix); thisMenu.style.visibility = 'hidden'; cmShowControl (thisMenu);} 230 function cmHideControl (tagName, subMenu) 231 { var x = cmGetX (subMenu); var y = cmGetY (subMenu); var w = subMenu.offsetWidth; var h = subMenu.offsetHeight; var i; for (i = 0; i < document.all.tags(tagName).length; ++i) 232 { var obj = document.all.tags(tagName)[i]; if (!obj || !obj.offsetParent) 233 continue; var ox = cmGetX (obj); var oy = cmGetY (obj); var ow = obj.offsetWidth; var oh = obj.offsetHeight; if (ox > (x + w) || (ox + ow) < x) 234 continue; if (oy > (y + h) || (oy + oh) < y) 235 continue; if(obj.style.visibility == "hidden") 236 continue; subMenu.cmOverlap[subMenu.cmOverlap.length] = obj; obj.style.visibility = "hidden";} 237 } 238 function cmShowControl (subMenu) 239 { if (subMenu.cmOverlap) 240 { var i; for (i = 0; i < subMenu.cmOverlap.length; ++i) 241 subMenu.cmOverlap[i].style.visibility = "";} 242 subMenu.cmOverlap = null;} 243 function cmGetThisMenu (obj, prefix) 244 { var str1 = prefix + 'SubMenu'; var str2 = prefix + 'Menu'; while (obj) 245 { if (obj.className == str1 || obj.className == str2) 246 return obj; obj = obj.parentNode;} 247 return null;} 248 function cmIsDefaultItem (item) 249 { if (item == _cmSplit || item[0] == _cmNoAction || item[0] == _cmNoClick) 250 return false; return true;} 251 function cmGetObject (id) 252 { if (document.all) 253 return document.all[id]; return document.getElementById (id);} 254 function cmGetWidth (obj) 255 { var width = obj.offsetWidth; if (width > 0 || !cmIsTRNode (obj)) 256 return width; if (!obj.firstChild) 257 return 0; return obj.lastChild.offsetLeft - obj.firstChild.offsetLeft + cmGetWidth (obj.lastChild);} 258 function cmGetHeight (obj) 259 { var height = obj.offsetHeight; if (height > 0 || !cmIsTRNode (obj)) 260 return height; if (!obj.firstChild) 261 return 0; return obj.firstChild.offsetHeight;} 262 function cmGetX (obj) 263 { var x = 0; do 264 { x += obj.offsetLeft; obj = obj.offsetParent;} 265 while (obj); return x;} 266 function cmGetXAt (obj, elm) 267 { var x = 0; while (obj && obj != elm) 268 { x += obj.offsetLeft; obj = obj.offsetParent;} 269 if (obj == elm) 270 return x; return x - cmGetX (elm);} 271 function cmGetY (obj) 272 { var y = 0; do 273 { y += obj.offsetTop; obj = obj.offsetParent;} 274 while (obj); return y;} 275 function cmIsTRNode (obj) 276 { var tagName = obj.tagName; return tagName == "TR" || tagName == "tr" || tagName == "Tr" || tagName == "tR";} 277 function cmGetYAt (obj, elm) 278 { var y = 0; if (!obj.offsetHeight && cmIsTRNode (obj)) 279 { var firstTR = obj.parentNode.firstChild; obj = obj.firstChild; y -= firstTR.firstChild.offsetTop;} 280 while (obj && obj != elm) 281 { y += obj.offsetTop; obj = obj.offsetParent;} 282 if (obj == elm) 283 return y; return y - cmGetY (elm);} 284 function cmSetStatus (item) 285 { var descript = ''; if (item.length > 4) 286 descript = (item[4] != null) ? item[4] : (item[2] ? item[2] : descript); else if (item.length > 2) 287 descript = (item[2] ? item[2] : descript); window.defaultStatus = descript;} 288 function cmGetProperties (obj) 289 { if (obj == undefined) 290 return 'undefined'; if (obj == null) 291 return 'null'; var msg = obj + ':\n'; var i; for (i in obj) 292 msg += i + ' = ' + obj[i] + '; '; return msg;}
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Wed Nov 21 14:43:32 2007 | par Balluche grâce à PHPXref 0.7 |
![]() |