aboutsummaryrefslogblamecommitdiff
path: root/html_view.py
blob: f4dc7b0343df91081f6205baa4d59f49ac5ca5c9 (plain) (tree)
1
2
3

                 
                        















                                                                          


                                                                            




                                                            
                                                                       















                                                                        



                                                                       






























                                                                            
                      



               
                          


           
                    


          














                                                      
import util
import ptv_client
from urllib import parse

def format_stop_and_route_name_li(stop_and_route):
    stop, route = stop_and_route
    return '<li>Stop: {}, Route: {} {} {}</li>'.format(
        stop['stop_name'], ptv_client.get_route_type(route['route_type']),
        route['route_number'], route['route_name'])

def format_stop_and_route_name_ol(stop_and_routes):
    return '<ol>{}</ol>'.format(''.join(
        map(format_stop_and_route_name_li, stop_and_routes)))

def format_stop_and_route_name_tr(stop_and_route):
    stop, route = stop_and_route
    return """
<tr>
  <td>
    <a href="/?route-type={}&stop={}&route={}&stop-name={}&route-number={}">
      {}
    </a>
  </td>
  <td>{}</td><td>{}</td><td>{}</td>
</tr>
""".format(
    route['route_type'], stop['stop_id'], route['route_id'],
    parse.quote(stop['stop_name']), parse.quote(route['route_number']),
    stop['stop_name'], ptv_client.get_route_type(route['route_type']),
    route['route_number'], route['route_name'])

def format_stop_and_route_name_table(stop_and_routes):
    return """
<table>
  <tr>
    <th>Stop</th>
    <th>Route type</th>
    <th>Route number</th>
    <th>Route name</th>
  </tr>
    {}
</table>
""".format(''.join(map(format_stop_and_route_name_tr, stop_and_routes)))

def format_departure_title(stop_name, route_type, route_number):
    return 'Departures of {} {} at {}'.format(
        ptv_client.get_route_type(route_type), route_number, stop_name)

def format_departure_tr(departure, direction_names):
    return """
<tr>
  <td>{}</td><td>{}</td><td>{}</td>
</tr>
""".format(
    util.format_time(util.parse_time(departure['estimated_departure_utc'])),
    util.format_time(util.parse_time(departure['scheduled_departure_utc'])),
    direction_names[departure['direction_id']])

def format_departure_table(departures, direction_names):
    return """
<table>
  <tr>
    <th>Estimated</th>
    <th>Scheduled</th>
    <th>Direction</th>
  </tr>
    {}
</table>
""".format(''.join(format_departure_tr(dep, direction_names)
                   for dep in departures))

def style():
    return """
<style>
  tr:nth-child(even) {background-color: #f2f2f2;}
  tr:hover {background-color: coral;}
</style>
"""

def html(title, body):
    return """
<!DOCTYPE html>
<html>
<head>
  <title>%(title)s</title>
  %(style)s
</head>
<body>
  <h2>%(title)s</h2>
  %(body)s
</body>
</html>
""" % {'title': title, 'style': style(), 'body': body}

def landing_page():
    title = 'PTV timetable search tool'
    body = """
<form method="get" action="">
<p>
  Query: <input type="text" name="q" value="">
</p>
<p>
  <input type="submit" value="Submit">
</p>
</form>
"""
    return html(title, body)