[ Index ]
 

Code source de Joomla 1.0.13

Accédez au Source d'autres logiciels libres

title

Body

[fermer]

/includes/js/ -> JSCookMenu_mini.js (source)

   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;}


Généré le : Wed Nov 21 14:43:32 2007 par Balluche grâce à PHPXref 0.7
  Clicky Web Analytics