/* 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 printing // [printing support] OSRM.Printing = { // create UI for printing in mainwindow init: function() { var icon = document.createElement('div'); icon.id = "gui-printer-inactive"; icon.className = "iconic-button top-right-button"; var spacer = document.createElement('div'); spacer.className = "quad top-right-button"; var input_mask_header = document.getElementById('input-mask-header'); input_mask_header.appendChild(spacer,input_mask_header.lastChild); input_mask_header.appendChild(icon,input_mask_header.lastChild); document.getElementById("gui-printer-inactive").onclick = OSRM.Printing.openPrintWindow; }, // switch printer button on/off activate: function() { // use showing route description as trigger if( document.getElementById("gui-printer-inactive") ) document.getElementById("gui-printer-inactive").id = "gui-printer"; }, deactivate: function() { // use hide route as trigger if( document.getElementById("gui-printer") ) document.getElementById("gui-printer").id = "gui-printer-inactive"; }, // create UI in printwindow show: function(response) { // create header var header = '' + '
' + '
' + '
' + '
' + '
' + '
' + OSRM.loc("GUI_START")+ ':
' + '
' + document.getElementById("gui-input-source").value + '
' + '
' + '
' + '
' + OSRM.loc("GUI_END")+ ':
' + '
' + document.getElementById("gui-input-target").value + '
' + '
' + '
' + '
' + '
' + '
' + '
' + '
' + OSRM.loc("DISTANCE")+':
' + '
' + OSRM.Utils.metersToDistance(response.route_summary.total_distance) + '
' + '
' + '
' + '
' + OSRM.loc("DURATION")+':
' + '
' + OSRM.Utils.secondsToTime(response.route_summary.total_time) + '
' + '
' + '
' + '
' + '
' + '
' + '
' + ''; // create route description var body = ''; for(var i=0; i < response.route_instructions.length; i++){ //odd or even ? var rowstyle='description-body-odd'; if(i%2==0) { rowstyle='description-body-even'; } body += ''; body += ''; body += ''; body += ""; // build route description body += ''; if( response.route_instructions[i][1] != "" ) body += OSRM.loc(OSRM.RoutingDescription._getDrivingInstruction(response.route_instructions[i][0])).replace(/\[(.*)\]/,"$1").replace(/%s/, response.route_instructions[i][1]).replace(/%d/, OSRM.loc(response.route_instructions[i][6])); else body += OSRM.loc(OSRM.RoutingDescription._getDrivingInstruction(response.route_instructions[i][0])).replace(/\[(.*)\]/,"").replace(/%d/, OSRM.loc(response.route_instructions[i][6])); body += ""; body += ''; if( i != response.route_instructions.length-1 ) body += ''+OSRM.Utils.metersToDistance(response.route_instructions[i][2])+''; body += ""; body += ""; } body += ''; // put everything in DOM var print_window = OSRM.G.printwindow; print_window.document.getElementById('description').innerHTML = '' + header + body + '
'; print_window.document.getElementById('overview-map-description').innerHTML = '' + header + '
'; // draw map var positions = OSRM.G.route.getPositions(); var tile_server_id = OSRM.G.map.getActiveLayerId(); var zoom = print_window.drawMap( OSRM.DEFAULTS.TILE_SERVERS[tile_server_id], new L.LatLngBounds( positions ) ); // draw markers print_window.prefetchIcons( OSRM.G.images ); print_window.drawMarkers( OSRM.G.markers.route ); // draw route & query for better geometry print_window.drawRoute( positions ); OSRM.JSONP.call(OSRM.Routing._buildCall()+'&z='+zoom+'&instructions=false', OSRM.Printing.drawRoute, OSRM.Printing.timeoutRoute, OSRM.DEFAULTS.JSONP_TIMEOUT, 'print'); }, timeoutRoute: function() {}, drawRoute: function(response) { if(!response) return; var positions = OSRM.RoutingGeometry._decode(response.route_geometry, 5); OSRM.G.printwindow.drawRoute( positions ); }, // opens the print window and closes old instances openPrintWindow: function() { // do not open window if there is no route to draw if( !OSRM.G.route.isRoute() || !OSRM.G.route.isShown() ) return; // close old window (should we really do this?) if( OSRM.G.printwindow ) OSRM.G.printwindow.close(); // generate a new window and wait till it has finished loading OSRM.G.printwindow = window.open("printing/printing.html","","width=540,height=500,left=100,top=100,dependent=yes,location=no,menubar=no,scrollbars=yes,status=no,toolbar=no,resizable=yes"); }, // add content to printwindow after it has finished loading printWindowLoaded: function(){ var print_window = OSRM.G.printwindow; var print_document = print_window.document; // add events print_document.getElementById('gui-printer').onclick = print_window.printWindow; // localization print_document.getElementById('description-label').innerHTML = OSRM.loc( "ROUTE_DESCRIPTION" ); print_document.getElementById('overview-map-label').innerHTML = OSRM.loc( "OVERVIEW_MAP" ); // add routing content OSRM.Printing.show( OSRM.G.response ); // finally, focus on printwindow print_window.focus(); } };