HERE Maps API - How to create a Context Menu
(Avnee.nathani - Added Screenshot) |
m (Jasfox - - →Example code) |
||
| (24 intermediate revisions by 5 users not shown) | |||
| Line 1: | Line 1: | ||
| − | [[Category: | + | [[Category:Nokia Maps]][[Category:Code Snippet]][[Category:JavaScript]] |
| − | {{Abstract|This article explains how to | + | {{Abstract|This article explains how to add context menus to Nokia Maps and how to customise them.}} |
| + | |||
{{ArticleMetaData | {{ArticleMetaData | ||
| + | |sourcecode= <!-- Link to example source code e.g. [[Media:The Code Example ZIP.zip]] --> | ||
| + | |installfile= <!-- Link to installation file (e.g. [[Media:The Installation File.sis]]) --> | ||
| + | |devices= <!-- Devices tested against - e.g. ''devices=Nokia 6131 NFC, Nokia C7-00'') --> | ||
| + | |sdk= <!-- SDK(s) built and tested against (e.g. [http://linktosdkdownload/ Nokia Qt SDK 1.1]) --> | ||
|platform= Web browser | |platform= Web browser | ||
| + | |devicecompatability= <!-- Compatible devices e.g.: All* (must have internal GPS) --> | ||
| + | |dependencies=Nokia Maps 2.2.3 | ||
| + | |keywords= Nokia Maps, component, Context Menu, Right Click, JavaScript | ||
| + | |signing=<!-- Signing requirements - empty or one of: Self-Signed, DevCert, Manufacturer --> | ||
| + | |capabilities= <!-- Capabilities required by the article/code example (e.g. Location, NetworkServices. --> | ||
| + | |id= <!-- Article Id (Knowledge base articles only) --> | ||
| + | |language= <!-- Language category code for non-English topics - e.g. Lang-Chinese --> | ||
| + | |translated-by= <!-- [[User:XXXX]] --> | ||
| + | |translated-from-title= <!-- Title only --> | ||
| + | |translated-from-id= <!-- Id of translated revision --> | ||
| + | |review-by=<!-- After re-review: [[User:username]] --> | ||
| + | |review-timestamp= <!-- After re-review: YYYYMMDD --> | ||
|update-by=[[User:avnee.nathani]] | |update-by=[[User:avnee.nathani]] | ||
|update-timestamp=20111231 | |update-timestamp=20111231 | ||
| + | |creationdate=20110621 | ||
| + | |author=[[User:Maveric]] | ||
}} | }} | ||
| − | [[File:NokiaMapsRightClick.png| | + | {{SeeAlso| |
| + | * [http://developer.here.net/javascript_api Nokia Maps API] | ||
| + | * [http://developer.here.net/apiexplorer/examples/api-for-js/context-menu/context-menu.html Context menu Example] | ||
| + | }} | ||
| + | [[File:NokiaMapsRightClick.png|700px]] | ||
| + | <br /> | ||
| + | Context menus are used to display relevant information and options to the user on right-click: | ||
==Introduction== | ==Introduction== | ||
| + | Context menus are useful because they can be customised to display items that are not present by default, and provide the user with added functionality. | ||
| + | They are instantiated as follows: | ||
| − | + | <code java>var contextMenu = new nokia.maps.map.component.ContextMenu();</code> | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | map. | + | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
==Prerequisites== | ==Prerequisites== | ||
| Line 26: | Line 45: | ||
Nokia Maps API supported web browser (basically any modern web browser) | Nokia Maps API supported web browser (basically any modern web browser) | ||
| − | ==Important about | + | ==Important note about maps credentials== |
| − | + | Nokia provides several services options within the Maps API offering. The service is free to use, but you must obtain and use authentication and authorization credentials to use the services. Please read the | |
| − | + | [http://developer.here.net/terms_conditions Terms and Conditions] and check the [http://developer.here.net/web/guest/plans Pricing Plans page] to decide which business model best fits your needs. Authentication requires unique Maps API credentials, namely an AppId and a token. You can get these credentials free for free following the instructions [http://developer.here.net/docs/maps_js/topics/credentials.html#acquiring-credentials here] | |
| − | + | ==Code Commentary== | |
| + | Context menu divisions are added to the context menu with the following syntax | ||
| + | <code java> var menuItems1 = function(contextMenuEvent, group) { | ||
| + | group.addEntry("Menu Item 1", | ||
| + | function(activationEvent) {alert("Menu Item 1 clicked");}); | ||
| + | group.addEntry("Menu Item 2", | ||
| + | function(activationEvent) {alert("Menu Item 2 clicked");}); | ||
| + | group.addEntry("Menu Item 3", | ||
| + | function(activationEvent) {alert("Menu Item 3 clicked");}); | ||
| + | contextMenu.addHandler(menuItems1); | ||
| + | </code> | ||
| + | The {{Icode|addHandler()}} function takes as a parameter a function which by default creates a new context menu division, in this case adding three new items to the new division. | ||
| + | <code java> contextMenu.removeHandler(handler); </code> | ||
| + | The {{Icode|removeHandler()}} method removes a whole context menu division and all items within it. | ||
==Implementation== | ==Implementation== | ||
| − | |||
| + | The following statement is important: | ||
| + | <code java>map.components.add(contextMenu);</code> | ||
| + | Without this the context box is not rendered on the map. | ||
==Example code== | ==Example code== | ||
| + | The example displays a context menu when the map is right clicked, Further {{Icode|alerts()}} are displayed when the menu items are clicked. | ||
| + | Remember to add in your own [[How to Obtain Your Own Nokia appID and Token| AppId and Token]]. | ||
| + | <code javascript> | ||
| + | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | ||
| + | <html xmlns="http://www.w3.org/1999/xhtml"> | ||
| + | <head> | ||
| + | <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> | ||
| + | <meta http-equiv="X-UA-Compatible" content="IE=7; IE=EmulateIE9" /> | ||
| + | <title>Context Menu</title> | ||
| + | <script type="text/javascript" charset="UTF-8" src="http://api.maps.nokia.com/2.2.3/jsl.js"></script> | ||
| + | </head> | ||
| + | <body> | ||
| + | <form> | ||
| + | Click to add/remove a group of menu items from the context menu. <br /> | ||
| + | <input type = "button" id ="addRemove" value = "Add Menu Items" onclick = "addRemoveGroup(extraMenuItems)"/> | ||
| − | < | + | </form> |
| − | + | <div id="mapcanvas" style="width:1200px; height:800px;" > </div> | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | <script type="text/javascript"> | |
| − | + | /*<![CDATA[*/ | |
| − | + | ||
| − | + | ///////////////////////////////////////////////////////////////////////////////////// | |
| − | <div id=" | + | // Don't forget to set your API credentials |
| − | + | // | |
| − | <script type="text/javascript"> | + | // Replace with your appId and token which you can obtain when you |
| − | + | // register on http://api.developer.nokia.com/ | |
| − | + | // | |
| − | + | nokia.Settings.set( "appId", "YOUR APP ID GOES HERE"); | |
| − | + | nokia.Settings.set( "authenticationToken", "YOUR AUTHENTICATION TOKEN GOES HERE"); | |
| − | + | // | |
| − | var map = new nokia.maps.map.Display( | + | ///////////////////////////////////////////////////////////////////////////////////// |
| − | { | + | |
| − | + | // Get the DOM node to which we will append the map | |
| − | + | var mapContainer = document.getElementById("mapcanvas"); | |
| − | + | ||
| − | + | ||
| − | + | // Create a map inside the map container DOM node | |
| − | + | var map = new nokia.maps.map.Display(mapContainer, { | |
| − | + | components: [ | |
| − | + | new nokia.maps.map.component.panning.Drag(), | |
| − | + | new nokia.maps.map.component.panning.Kinetic() | |
| − | + | ], | |
| − | }); | + | 'zoomLevel': 13, |
| − | + | 'center': [18.975, 72.825833] | |
| − | + | }); | |
| − | + | ||
| − | + | var contextMenu = new nokia.maps.map.component.ContextMenu(); | |
| − | map.components.add( | + | |
| − | + | /* Add Custom Context Menu Items */ | |
| − | + | ||
| − | </script> | + | //This adds three items with a menu separator |
| − | </body> | + | var menuItems1 = function(contextMenuEvent, group) { |
| + | group.addEntry("Menu Item 1", | ||
| + | function(activationEvent) {alert("Menu Item 1 clicked");}); | ||
| + | group.addEntry("Menu Item 2", | ||
| + | function(activationEvent) {alert("Menu Item 2 clicked");}); | ||
| + | group.addEntry("Menu Item 3", | ||
| + | function(activationEvent) {alert("Menu Item 3 clicked");}); | ||
| + | } | ||
| + | //This adds one item with a menu separator | ||
| + | var menuItems2 = function(contextMenuEvent, group) { | ||
| + | group.addEntry("Menu Item 4", | ||
| + | function(activationEvent) {alert("Menu Item 4 clicked");}); | ||
| + | } | ||
| + | //Two extra items added with a menu separator when Add/Remove button clicked | ||
| + | var extraMenuItems = function(contextMenuEvent,group){ | ||
| + | group.addEntry("Menu Item 5", | ||
| + | function(activationEvent) {alert("Menu Item 5 clicked");}); | ||
| + | group.addEntry("Menu Item 6", | ||
| + | function(activationEvent) {alert("Menu Item 6 clicked");}); | ||
| + | } | ||
| + | |||
| + | contextMenu.addHandler(menuItems1); | ||
| + | contextMenu.addHandler(menuItems2); | ||
| + | map.components.add(contextMenu); | ||
| + | |||
| + | var isAdded = false; | ||
| + | |||
| + | |||
| + | // Simple function to add/remove a group of menu items... | ||
| + | function addRemoveGroup(handler){ | ||
| + | if (isAdded == false){ | ||
| + | contextMenu.addHandler(handler); | ||
| + | document.getElementById("addRemove").value ="Remove Menu Items"; | ||
| + | isAdded = true; | ||
| + | } else { | ||
| + | contextMenu.removeHandler(handler); | ||
| + | document.getElementById("addRemove").value ="Add Menu Items"; | ||
| + | isAdded = false; | ||
| + | } | ||
| + | } | ||
| + | /*]]>*/ | ||
| + | </script> | ||
| + | </body> | ||
</html> | </html> | ||
</code> | </code> | ||
| − | + | ==For more on the Nokia Maps API== | |
| − | ==For more on Nokia Maps API== | + | |
Please check out the Nokia Maps API full documentation and API reference here: | Please check out the Nokia Maps API full documentation and API reference here: | ||
| − | * http:// | + | * [http://developer.here.net/javascript_api Nokia Maps API] |
| − | + | ||
| − | + | ||
| − | + | ||
| + | You may also access the interactive API explorer | ||
| + | * [http://developer.here.net/javascript_api_explorer API explorer] | ||
==Tested with== | ==Tested with== | ||
* Google Chrome 11.0x | * Google Chrome 11.0x | ||
* Mozilla Firefox 5.0b | * Mozilla Firefox 5.0b | ||
Revision as of 14:25, 4 January 2013
This article explains how to add context menus to Nokia Maps and how to customise them.
Article Metadata
Compatibility
Article
See Also
Context menus are used to display relevant information and options to the user on right-click:
Contents |
Introduction
Context menus are useful because they can be customised to display items that are not present by default, and provide the user with added functionality. They are instantiated as follows:
var contextMenu = new nokia.maps.map.component.ContextMenu();
Prerequisites
Nokia Maps API supported web browser (basically any modern web browser)
Important note about maps credentials
Nokia provides several services options within the Maps API offering. The service is free to use, but you must obtain and use authentication and authorization credentials to use the services. Please read the Terms and Conditions and check the Pricing Plans page to decide which business model best fits your needs. Authentication requires unique Maps API credentials, namely an AppId and a token. You can get these credentials free for free following the instructions here
Code Commentary
Context menu divisions are added to the context menu with the following syntax
var menuItems1 = function(contextMenuEvent, group) {
group.addEntry("Menu Item 1",
function(activationEvent) {alert("Menu Item 1 clicked");});
group.addEntry("Menu Item 2",
function(activationEvent) {alert("Menu Item 2 clicked");});
group.addEntry("Menu Item 3",
function(activationEvent) {alert("Menu Item 3 clicked");});
contextMenu.addHandler(menuItems1);
The addHandler() function takes as a parameter a function which by default creates a new context menu division, in this case adding three new items to the new division.
contextMenu.removeHandler(handler);
The removeHandler() method removes a whole context menu division and all items within it.
Implementation
The following statement is important:
map.components.add(contextMenu);
Without this the context box is not rendered on the map.
Example code
The example displays a context menu when the map is right clicked, Further alerts() are displayed when the menu items are clicked. Remember to add in your own AppId and Token.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=7; IE=EmulateIE9" />
<title>Context Menu</title>
<script type="text/javascript" charset="UTF-8" src="http://api.maps.nokia.com/2.2.3/jsl.js"></script>
</head>
<body>
<form>
Click to add/remove a group of menu items from the context menu. <br />
<input type = "button" id ="addRemove" value = "Add Menu Items" onclick = "addRemoveGroup(extraMenuItems)"/>
</form>
<div id="mapcanvas" style="width:1200px; height:800px;" > </div>
<script type="text/javascript">
/*<![CDATA[*/
/////////////////////////////////////////////////////////////////////////////////////
// Don't forget to set your API credentials
//
// Replace with your appId and token which you can obtain when you
// register on http://api.developer.nokia.com/
//
nokia.Settings.set( "appId", "YOUR APP ID GOES HERE");
nokia.Settings.set( "authenticationToken", "YOUR AUTHENTICATION TOKEN GOES HERE");
//
/////////////////////////////////////////////////////////////////////////////////////
// Get the DOM node to which we will append the map
var mapContainer = document.getElementById("mapcanvas");
// Create a map inside the map container DOM node
var map = new nokia.maps.map.Display(mapContainer, {
components: [
new nokia.maps.map.component.panning.Drag(),
new nokia.maps.map.component.panning.Kinetic()
],
'zoomLevel': 13,
'center': [18.975, 72.825833]
});
var contextMenu = new nokia.maps.map.component.ContextMenu();
/* Add Custom Context Menu Items */
//This adds three items with a menu separator
var menuItems1 = function(contextMenuEvent, group) {
group.addEntry("Menu Item 1",
function(activationEvent) {alert("Menu Item 1 clicked");});
group.addEntry("Menu Item 2",
function(activationEvent) {alert("Menu Item 2 clicked");});
group.addEntry("Menu Item 3",
function(activationEvent) {alert("Menu Item 3 clicked");});
}
//This adds one item with a menu separator
var menuItems2 = function(contextMenuEvent, group) {
group.addEntry("Menu Item 4",
function(activationEvent) {alert("Menu Item 4 clicked");});
}
//Two extra items added with a menu separator when Add/Remove button clicked
var extraMenuItems = function(contextMenuEvent,group){
group.addEntry("Menu Item 5",
function(activationEvent) {alert("Menu Item 5 clicked");});
group.addEntry("Menu Item 6",
function(activationEvent) {alert("Menu Item 6 clicked");});
}
contextMenu.addHandler(menuItems1);
contextMenu.addHandler(menuItems2);
map.components.add(contextMenu);
var isAdded = false;
// Simple function to add/remove a group of menu items...
function addRemoveGroup(handler){
if (isAdded == false){
contextMenu.addHandler(handler);
document.getElementById("addRemove").value ="Remove Menu Items";
isAdded = true;
} else {
contextMenu.removeHandler(handler);
document.getElementById("addRemove").value ="Add Menu Items";
isAdded = false;
}
}
/*]]>*/
</script>
</body>
</html>
For more on the Nokia Maps API
Please check out the Nokia Maps API full documentation and API reference here:
You may also access the interactive API explorer
Tested with
- Google Chrome 11.0x
- Mozilla Firefox 5.0b

