osrm-backend/WebContent/gui/OSRM.Timers.js
DennisSchiefer 0c946f1476 added additional notifications,
better argument passing to wrapped trigger functions for notifications,
notification boxes adapt in size to contained text,
notification functions renamed,
2012-07-04 17:27:08 +01:00

103 lines
4.3 KiB
JavaScript

/*
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 Timers
// [handles notification timers]
OSRM.GUI.extend( {
// notifications
notifications: [
{ time: 4000,
header: "[Tooltip] Localization",
body: "You can use the pulldown menu in the upper left corner to select your favorite language. " +
"<br/><br/>" +
"Don't despair if you cannot find your language of choice. " +
"If you want, you can help to provide additional translations! " +
"Visit <a href='https://github.com/DennisSchiefer/Project-OSRM-Web'>here</a> for more information.",
_classes: ["Localization"],
_funcs: ["setLanguageWrapper"]
},
{ time: 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. " +
"<br/><br/>" +
"You can delete a marker by clicking on it again with the left mouse button.",
_classes: ["Map"],
_funcs: ["click"]
},
{ time: 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. " +
"<br/><br/>" +
"You can even create additional markers by dragging them off of the main route! ",
_classes: ["Routing"],
_funcs: ["getRoute_Dragging"]
}
],
// initialize notification timers
init: function() {
// init timers
var notifications = OSRM.GUI.notifications;
OSRM.G.notification_timers = new Array( notifications.length );
for( var i=0, iEnd=notifications.length; i<iEnd; ++i) {
// start timer
notifications[i].timer = setTimeout( function(id){ return function(){ OSRM.GUI.notification_timeout(id);}; }(i), notifications[i].time);
// create wrapper functions for function calls that will stop the timer
notifications[i].old_functions = [];
for(var j=0, jEnd=notifications[i]._classes.length; j<jEnd;j++) {
notifications[i].old_functions[j] = OSRM[notifications[i]._classes[j]][notifications[i]._funcs[j]];
OSRM[notifications[i]._classes[j]][notifications[i]._funcs[j]] = function(id,id2){ return function(params){ OSRM.GUI.notification_wrapper(id,id2,params);}; }(i,j);
}
}
},
// wrapper function to clear timeouts
notification_wrapper: function(id, id2) {
var notifications = OSRM.GUI.notifications;
clearTimeout( notifications[id].timer );
//notifications[id].old_functions[id2](params);
var args = Array.prototype.slice.call(arguments, 2);
notifications[id].old_functions[id2].apply(this, args);
for(var j=0, jEnd=notifications[id]._classes.length; j<jEnd;j++) {
OSRM[notifications[id]._classes[j]][notifications[id]._funcs[j]] = notifications[id].old_functions[j];
}
},
// show notification message after timeout expired
notification_timeout: function(id) {
// if a notification is already shown, restart timer
if( OSRM.isNotifyVisible() ) {
OSRM.GUI.notifications[id].timer = setTimeout( function(id){ return function(){ OSRM.GUI.notification_timeout(id);}; }(id), OSRM.GUI.notifications[id].time);
return;
}
// show notification
OSRM.notify( OSRM.GUI.notifications[id].header, OSRM.GUI.notifications[id].body, true );
for(var j=0, jEnd=notifications[id]._classes.length; j<jEnd;j++) {
OSRM[notifications[id]._classes[j]][notifications[id]._funcs[j]] = notifications[id].old_functions[j];
}
}
});