All rights reserved. */ /* ========================================================================== */ /* Originally part of m0n0wall (http://m0n0.ch/wall) Copyright (C) 2003-2004 Manuel Kasper . All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* ========================================================================== */ require("menu.inc"); define("TMENU_STUB", " // set up drop downs anywhere in the body of the page. I think the bottom of the page is better.. // but you can experiment with effect on loadtime. if (TransMenu.isSupported()) { //================================================================================================== // create a set of dropdowns //================================================================================================== // the first param should always be down, as it is here // // The second and third param are the top and left offset positions of the menus from their actuators // respectively. To make a menu appear a little to the left and bottom of an actuator, you could use // something like -5, 5 // // The last parameter can be .topLeft, .bottomLeft, .topRight, or .bottomRight to inidicate the corner // of the actuator from which to measure the offset positions above. Here we are saying we want the // menu to appear directly below the bottom left corner of the actuator //================================================================================================== var ms = new TransMenuSet(TransMenu.direction.down, 1, 0, TransMenu.reference.bottomLeft); //================================================================================================== // create a dropdown menu //================================================================================================== // the first parameter should be the HTML element which will act actuator for the menu //================================================================================================== @@MENU_DEFINITIONS@@ //================================================================================================== // write drop downs into page //================================================================================================== // this method writes all the HTML for the menus into the page with document.write(). It must be // called within the body of the HTML page. //================================================================================================== TransMenu.renderAll(); } "); class NervecenterMenu extends Menu { private $menuJScript = "NOT-SET"; private $menuJScriptEvents = "NOT-SET"; private $menuID = "NOT-SET"; public function __construct($identification = "", $filename = "", Component $c = NULL) { parent::__construct($identification, $filename, $c); $id = "mnua_" . str_replace(" ", "", strtolower($this->getID())); $this->menuID = $id; if ($this->hasParent()) { $this->menuJScript = "\tvar {$id} = ms.addMenu(document.getElementById('{$id}'));\n"; } } // end __construct public function getMenuID() { return $this->menuID; } public function setMenuID($myMenuID) { $this->menuID = $myMenuID; } public function getMenuJScript() { $childJScript = ""; foreach ($this->getChildren() as $component) { $childJScript .= $component->getMenuJScript(); } if (! $this->hasParent()) { $this->menuJScript = str_replace("@@MENU_DEFINITIONS@@", $childJScript, TMENU_STUB); } else { $this->menuJScript .= "\n$childJScript\n"; } return $this->menuJScript; } public function getMenuJScriptEvents() { return $this->menuJScriptEvents; } public function __toString() { if (! $this->hasParent()) { $menuMarkup =<< @@CHILD_ELEMENTS@@ EOD; } else { $name = gettext($this->getID()); $id = "mnua_" . str_replace(" ", "", strtolower($this->getID())); $menuMarkup =<<{$name} @@CHILD_ELEMENTS@@ EOD; } $childMarkup = ""; foreach ($this->getChildren() as $component) { $childMarkup .= $component; } $menuMarkup = str_replace("@@CHILD_ELEMENTS@@", $childMarkup, $menuMarkup); return $menuMarkup; } } class NervecenterMenuItem extends MenuItem { private $menuJScript = "NOT-SET"; private $menuJScriptEvents = "NOT-SET"; public function __construct($identification = "", $filename = "", $href = "", Component $c = NULL) { parent::__construct($identification, $filename, $href, $c); $href = $this->getHref() <> "" ? $this->getHref() : "{$this->getFile()}"; $name = gettext($this->getID()); $file = $this->getFile(); $this->menuJScript = $this->check_access("{$file}", "\t{$this->getParent()->getMenuID()}.addItem('{$name}', '{$href}');\n"); } public function getMenuJScript() { return $this->menuJScript; } public function getMenuJScriptEvents() { return $this->menuJScriptEvents; } public function __toString() { return ""; } } ?>