/* This program is free software; you can redistribute it and/or modify it under the terms of the GNU AFFERO General Public License as published by the Free Software Foundation; either version 3 of the License, or 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 Affero 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 or see http://www.gnu.org/licenses/agpl.txt. */ // OSRM Notifications // [handles notifications: timed tooltips and exclusive notifications] OSRM.GUI.extend( { // tooltips tooltips: { localization: { timeout: 4000, header: "[Tooltip] Localization", body: "You can use the pulldown menu in the upper left corner to select your favorite language. " + "

" + "Don't despair if you cannot find your language of choice. " + "If you want, you can help to provide additional translations! " + "Visit here for more information." // triggered by OSRM.Localization.setLanguageWrapper }, clicking: { timeout: 6000, header: "[Tooltip] Clicking to set markers", body: "You can click on the map with the left mouse button to set a source marker (green) or a target marker (red), " + "if the source marker already exists. " + "The address of the selected location will be displayed in the boxes to the left. " + "

" + "You can delete a marker by clicking on it again with the left mouse button." // triggered by OSRM.Map.click }, dragging: { timeout: 8000, header: "[Tooltip] Dragging markers", body: "You can drag a marker by clicking on it with the left mouse button and holding the button pressed. " + "Then you can move the marker around the map and the route will be updated instantaneously. " + "

" + "You can even create additional markers by dragging them off of the main route! " // triggered by OSRM.Routing.getRoute_Dragging } }, // initialize notifications and tooltip timers init: function() { // notifications // [nothing to be done at the moment] // tooltip timers var tooltips = OSRM.GUI.tooltips; for( id in tooltips ) { // start timer tooltips[id]._timer = setTimeout( function(_id){ return function(){OSRM.GUI._showTooltip(_id);}; }(id), tooltips[id].timeout ); // mark tooltip as pending tooltips[id]._pending = true; } }, // deactivate pending tooltip deactivateTooltip: function(id) { var tooltips = OSRM.GUI.tooltips; if(tooltips[id] == undefined) return; // mark tooltip as no longer pending tooltips[id]._pending = false; }, // show tooltip after timer expired _showTooltip: function(id) { var tooltips = OSRM.GUI.tooltips; if(tooltips[id] == undefined) return; // only show tooltip if it is still pending if( tooltips[id]._pending == false ) { return; } // if a notification is currently shown, restart timer if( OSRM.GUI.isTooltipVisible() ) { tooltips[id]._timer = setTimeout( function(_id){ return function(){OSRM.GUI._showTooltip(_id);}; }(id), tooltips[id].timeout ); return; } // show notification OSRM.GUI.tooltipNotify( tooltips[id].header, tooltips[id].body ); // mark tooltip as no longer pending tooltips[id]._pending = false; }, // exclusive notification exclusiveNotify: function( header, text, closable ){ document.getElementById('exclusive-notification-blanket').style.display = "block"; document.getElementById('exclusive-notification-label').innerHTML = header; document.getElementById('exclusive-notification-box').innerHTML = text; if( closable ) document.getElementById('exclusive-notification-toggle').onclick = OSRM.GUI.exclusiveDenotify; else document.getElementById('exclusive-notification-toggle').style.display = "none"; }, exclusiveDenotify: function() { document.getElementById('exclusive-notification-blanket').style.display = "none"; }, // tooltip notification tooltipNotify: function( header, text ){ document.getElementById('tooltip-notification-wrapper').style.display = "block"; document.getElementById('tooltip-notification-label').innerHTML = header; document.getElementById('tooltip-notification-box').innerHTML = text; document.getElementById('tooltip-notification-box').style.display = "block"; // simple trick to always start with a minimized tooltip OSRM.GUI.tooltipResize(); document.getElementById('tooltip-notification-toggle').onclick = OSRM.GUI.tooltipDenotify; document.getElementById('tooltip-notification-resize').onclick = OSRM.GUI.tooltipResize; }, tooltipResize: function() { if( document.getElementById('tooltip-notification-box').style.display == "none" ) { document.getElementById('tooltip-notification-box').style.display = "block"; var height = document.getElementById('tooltip-notification-box').clientHeight; document.getElementById('tooltip-notification-content').style.height = (height + 28) + "px"; document.getElementById('tooltip-notification-wrapper').style.height = (height + 48) + "px"; document.getElementById('tooltip-notification-resize').className = "iconic-button up-marker top-right-button"; } else { document.getElementById('tooltip-notification-box').style.display = "none"; document.getElementById('tooltip-notification-content').style.height = "18px"; document.getElementById('tooltip-notification-wrapper').style.height = "38px"; document.getElementById('tooltip-notification-resize').className = "iconic-button down-marker top-right-button"; } }, tooltipDenotify: function() { document.getElementById('tooltip-notification-wrapper').style.display = "none"; }, isTooltipVisible: function() { return document.getElementById('tooltip-notification-wrapper').style.display == "block"; } });