better argument passing to wrapped trigger functions for notifications, notification boxes adapt in size to contained text, notification functions renamed,
103 lines
4.3 KiB
JavaScript
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];
|
|
}
|
|
}
|
|
|
|
});
|