diff options
| author | fisharebest <fisharebest@gmail.com> | 2011-01-01 15:25:47 +0000 |
|---|---|---|
| committer | fisharebest <fisharebest@gmail.com> | 2011-01-01 15:25:47 +0000 |
| commit | 7b875f8eadc778f1083f315494737802a57c123a (patch) | |
| tree | 37c40ab23177d0a14ec595ecdfd764f77bc13953 /library/WT/Menu.php | |
| parent | 3137f53fe8b54364db98d5bfd24a565d0aa801c6 (diff) | |
| download | webtrees-7b875f8eadc778f1083f315494737802a57c123a.tar.gz webtrees-7b875f8eadc778f1083f315494737802a57c123a.tar.bz2 webtrees-7b875f8eadc778f1083f315494737802a57c123a.zip | |
Refactoring class names and use autoloading.
Diffstat (limited to 'library/WT/Menu.php')
| -rw-r--r-- | library/WT/Menu.php | 297 |
1 files changed, 297 insertions, 0 deletions
diff --git a/library/WT/Menu.php b/library/WT/Menu.php new file mode 100644 index 0000000000..02dffde878 --- /dev/null +++ b/library/WT/Menu.php @@ -0,0 +1,297 @@ +<?php +// System for generating menus. +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2002 to 2009 PGV Development Team. All rights reserved. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class WT_Menu { + var $separator = false; + var $label = ' '; + var $labelpos = 'right'; + var $link = '#'; + var $onclick = null; + var $icon = null; + var $hovericon = null; + var $flyout = 'down'; + var $class = ''; + var $hoverclass = ''; + var $submenuclass = ''; + var $iconclass = ''; + var $target = null; + var $parentmenu = null; + var $submenus; + + /** + * Constructor for the menu class + * @param string $label the label for the menu item (usually a wt_lang variable) + * @param string $link The link that the user should be taken to when clicking on the menuitem + * @param string $pos The position of the label relative to the icon (right, left, top, bottom) + * @param string $flyout The direction where any submenus should appear relative to the menu item (right, down) + */ + function __construct($label=' ', $link='#', $pos='right', $flyout='down') + { + $this->submenus = array(); + $this->addLink($link); + $this->addLabel($label, $pos); + $this->addFlyout($flyout); + } + + function isSeparator() + { + $this->separator = true; + } + + function addLabel($label=' ', $pos='right') + { + if ($label) $this->label = $label; + $this->labelpos = $pos; + } + + function addLink($link='#') + { + $this->link = $link; + } + + function addOnclick($onclick) + { + $this->onclick = $onclick; + } + + function addIcon($icon, $hovericon=null) { + global $WT_IMAGES; + + if (isset($WT_IMAGES[$icon])) { + $this->icon = $WT_IMAGES[$icon]; + } else { + $this->icon = null; + } + if (isset($WT_IMAGES[$hovericon])) { + $this->hovericon = $WT_IMAGES[$hovericon]; + } else { + $this->hovericon = null; + } + } + + function addFlyout($flyout='down') + { + $this->flyout = $flyout; + } + + function addClass($class, $hoverclass='', $submenuclass='', $iconclass='icon_general') + { + $this->class = $class; + $this->hoverclass = $hoverclass; + $this->submenuclass = $submenuclass; + $this->iconclass = $iconclass; + } + + function addTarget($target) + { + $this->target = $target; + } + + function addSubMenu($obj) + { + $this->submenus[] = $obj; + } + + function addSeparator() { + $submenu = new WT_Menu(); + $submenu->isSeparator(); + $this->submenus[] = $submenu; + } + + // Get the menu as a simple list - for accessible interfaces, search engines and CSS menus + function getMenuAsList() { + $link = ''; + if ($this->separator) { + return "\t".'<li class="separator"><span></span></li>'."\n"; + } + if ($this->link) { + if ($this->target !== null) { + $link .= ' target="'.$this->target.'"'; + } + if ($this->link=='#') { + $this->link = "javascript:;"; + if ($this->onclick !== null) { + $link .= ' onclick="'.$this->onclick.'"'; + } + $html='<a class="'.$this->iconclass.'" href="'.$this->link.'"'.$link.'>'.$this->label.'</a>'; + } else { + $html='<a class="'.$this->iconclass.'" href="'.$this->link.'">'.$this->label.'</a>'; + } + } else { + return ''; + } + if ($this->submenus) { + $html.="\n\t".'<ul>'."\n"; + foreach ($this->submenus as $submenu) { + $html.="\t".$submenu->getMenuAsList(); + } + $html.="\t".'</ul>'; + return '<li class="node">'.$html.'</li>'."\n"; + } + + return '<li>'.$html.'</li>'."\n"; + } + + // Get the menu as a dropdown form element + function getMenuAsDropdown() { + if ($this->separator || !$this->link && !$this->submenus) { + return ''; + } + if ($this->submenus) { + $options='<option value="'.$this->link.'">'.$this->label.'</option>'; + foreach ($this->submenus as $submenu) { + $options.=$submenu->getMenuAsDropdown(); + } + return '<select onchange="document.location=this.value;">'.$options.'</select>'; + } else { + return '<option value="'.$this->link.'">'.$this->label.'</option>'; + } + } + + function getMenu() { + global $menucount, $TEXT_DIRECTION, $WT_IMAGES; + + if (!isset($menucount)) { + $menucount = 0; + } else { + $menucount++; + } + $id = $menucount.rand(); + if ($this->separator) { + $output = "<div id=\"menu{$id}\" class=\"menu_separator center\">" + ."<img src=\"{$WT_IMAGES['hline']}\" alt=\"\" />" + ."</div>"; + return $output; + } + $c = count($this->submenus); + $output = "<div id=\"menu{$id}\" class=\"{$this->class}\">\n"; + if ($this->link=="#") $this->link = "javascript:;"; + $link = "<a href=\"{$this->link}\" onmouseover=\""; + if ($c >= 0) { + $link .= "show_submenu('menu{$id}_subs', 'menu{$id}', '{$this->flyout}'); "; + } + if ($this->hoverclass !== null) { + $link .= "change_class('menu{$id}', '{$this->hoverclass}'); "; + } + if ($this->hovericon !== null) { + $link .= "change_icon('menu{$id}_icon', '{$this->hovericon}'); "; + } + $link .= '" onmouseout="'; + if ($c >= 0) { + $link .= "timeout_submenu('menu{$id}_subs'); "; + } + if ($this->hoverclass !== null) { + $link .= "change_class('menu{$id}', '{$this->class}'); "; + } + if ($this->hovericon !== null) { + $link .= "change_icon('menu{$id}_icon', '{$this->icon}'); "; + } + if ($this->onclick !== null) { + $link .= "\" onclick=\"{$this->onclick}"; + } + if ($this->target !== null) { + $link .= '" target="'.$this->target; + } + $link .= "\">"; + if ($this->icon !== null) { + $tempTitle = str_replace("\"", '', $this->label); + $MenuIcon = "<img id=\"menu{$id}_icon\" src=\"{$this->icon}\" class=\"icon\" alt=\"{$tempTitle}\" title=\"{$tempTitle}\" />"; + switch ($this->labelpos) { + case "right": + $output .= $link; + $output .= $MenuIcon; + $output .= $this->label; + $output .= "</a>"; + break; + case "left": + $output .= $link; + $output .= $this->label; + $output .= $MenuIcon; + $output .= "</a>"; + break; + case "down": + $output .= $link; + $output .= $MenuIcon; + $output .= "<br />"; + $output .= $this->label; + $output .= "</a>"; + break; + case "up": + $output .= $link; + $output .= $this->label; + $output .= "<br />"; + $output .= $MenuIcon; + $output .= "</a>"; + break; + default: + $output .= $link; + $output .= $MenuIcon; + $output .= "</a>"; + } + } else { + $output .= $link; + $output .= $this->label; + $output .= "</a>"; + } + + if ($c > 0) { + $submenuid = "menu{$id}_subs"; + if ($TEXT_DIRECTION == 'ltr') { + $output .= '<div style="text-align: left;">'; + } else { + $output .= '<div style="text-align: right;">'; + } + $output .= "<div id=\"menu{$id}_subs\" class=\"{$this->submenuclass}\" style=\"position: absolute; visibility: hidden; z-index: 100;"; + if ($this->flyout == 'right') { + if ($TEXT_DIRECTION == 'ltr') { + $output .= ' left: 80px;'; + } else { + $output .= ' right: 50px;'; + } + } + $output .= "\" onmouseover=\"show_submenu('{$this->parentmenu}'); show_submenu('{$submenuid}');\" onmouseout=\"timeout_submenu('menu{$id}_subs');\">\n"; + foreach ($this->submenus as $submenu) { + $submenu->parentmenu = $submenuid; + $output .= $submenu->getMenu(); + } + $output .= "</div></div>\n"; + } + $output .= "</div>\n"; + return $output; + } + + /** + * returns the number of submenu's in this menu + * @return int + */ + function subCount() { + return count($this->submenus); + } +} |
