Context Menu Example
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>Context Menu Example</title> <!-- Standard reset and fonts --> <link rel="stylesheet" type="text/css" href="./build/reset/reset.css"> <link rel="stylesheet" type="text/css" href="./build/fonts/fonts.css"> <!-- CSS for Menu --> <link rel="stylesheet" type="text/css" href="./build/menu/assets/menu.css"> <!-- Page-specific styles --> <style type="text/css"> h1, p, ul { margin:1em; } h1 em, p em, #operainstructions li em { font-weight:bold; } #operainstructions { list-style-type:square; margin-left:2em; } #clones { background-color:#9C6; width:450px; height:400px; overflow:auto; } #clones li { float:left; display:inline; border:solid 1px #000; background-color:#fff; margin:10px; text-align:center; } #clones li img { border:solid 1px #000; margin:5px; } #clones li cite { display:block; text-align:center; margin:0 0 5px 0; padding:0 5px; } </style> <!-- Namespace source file --> <script type="text/javascript" src="./build/yahoo/yahoo.js"></script> <!-- Dependency source files --> <script type="text/javascript" src="./build/event/event.js"></script> <script type="text/javascript" src="./build/dom/dom.js"></script> <!-- Container source file --> <script type="text/javascript" src="./build/container/container_core.js"></script> <!-- Menu source file --> <script type="text/javascript" src="./build/menu/menu.js"></script> <!-- Page-specific script --> <script type="text/javascript"> // "load" event handler for the "window" object YAHOO.example.onWindowLoad = function(p_oEvent) { // Renames an "Ewe" function EditEweName(p_oLI) { var oCite = p_oLI.lastChild; if(oCite.nodeType != 1) { oCite = oCite.previousSibling; } var oTextNode = oCite.firstChild; var sName = window.prompt( "Enter a new name for ", oTextNode.nodeValue ); if(sName && sName.length > 0) { oTextNode.nodeValue = sName; } } // Clones an "Ewe" function CloneEwe(p_oLI) { var oClone = p_oLI.cloneNode(true); p_oLI.parentNode.appendChild(oClone); } // Deletes an "Ewe" function DeleteEwe(p_oLI) { var oUL = p_oLI.parentNode; oUL.removeChild(p_oLI); } /* Returns the LI instance that is the parent node of the target of a "contextmenu" event */ function GetListItemFromEventTarget(p_oNode) { var oLI; if(p_oNode.tagName == "LI") { oLI = p_oNode; } else { /* If the target of the event was a child of an LI, get the parent LI element */do { if(p_oNode.tagName == "LI") { oLI = p_oNode; break; } } while((p_oNode = p_oNode.parentNode)); } return oLI; } // "move" event handler for the context menu function onContextMenuMove() { var oNode = this.contextEventTarget; var bDisabled = (oNode.tagName == "UL"); var i = this.getItemGroups()[0].length - 1; do { this.getItem(i).cfg.setProperty("disabled", bDisabled); } while(i--); } // "click" event handler for each item in the context menu function onContextMenuItemClick(p_sType, p_aArguments, p_oItem) { var oLI = GetListItemFromEventTarget(this.parent.contextEventTarget); switch(this.index) { case 0: // Edit name EditEweName(oLI); break; case 1: // Clone CloneEwe(oLI); break; case 2: // Delete DeleteEwe(oLI); break; } } // "keydown" event handler for the context menu function onContextMenuKeyDown(p_sType, p_sArguments, p_oMenu) { var oDOMEvent = p_sArguments[0]; if(oDOMEvent.shiftKey) { var oLI = GetListItemFromEventTarget(this.contextEventTarget); switch(oDOMEvent.keyCode) { case 69: // Edit name EditEweName(oLI); this.hide(); break; case 67: // Clone CloneEwe(oLI); this.hide(); break; case 68: // Delete DeleteEwe(oLI); this.hide(); break; } } } // Create the context menu var oContextMenu = new YAHOO.widget.ContextMenu( "contextmenu", { trigger: "clones" } ); var aMainMenuItems = [ { text: "Edit Name", helptext: "Shift + E" }, { text: "Clone", helptext: "Shift + C" }, { text: "Delete", helptext: "Shift + D" } ]; var nMainMenuItems = aMainMenuItems.length; var oMenuItem; // Add items to the main menu for(var i=0; i<nMainMenuItems; i++) { oMenuItem = new YAHOO.widget.ContextMenuItem( aMainMenuItems[i].text, { helptext: aMainMenuItems[i].helptext } ); /* Add a "click" event handler to each ContextMenuItem instance */ oMenuItem.clickEvent.subscribe( onContextMenuItemClick, oMenuItem, true ); oContextMenu.addItem(oMenuItem); } // Add a "move" event handler to the context menu oContextMenu.moveEvent.subscribe( onContextMenuMove, oContextMenu, true ); // Add a "keydown" event handler to the context menu oContextMenu.keyDownEvent.subscribe( onContextMenuKeyDown, oContextMenu, true ); // Render the context menu oContextMenu.render(document.body); } // Assign a "load" event handler to the window YAHOO.util.Event.addListener(window, "load", YAHOO.example.onWindowLoad); </script> </head> <body> <h1>Context Menu Example <em>[<a href="">Examples Home</a>]</em></h1> <p>Use the context menu to rename, clone or delete Dolly.</p> <p><em>Please Note:</em> Opera users will need to do the following to use this example:</p> <ul id="operainstructions"> <li><em>Opera for Windows:</em> Hold down the control key and click with the left mouse button.</li> <li><em>Opera for OS X:</em> Hold down the command key (⌘) and click with the left mouse button.</li> </ul> <ul id="clones"> <li><a href="http://www.java2s.com"><img src="http://www.java2s.com/style/logo.png" width="150" height="80" alt="logo"></a><cite>logo</cite></li> </ul> </body> </html>
yui.zip( 3,714 k)Related examples in the same category