aboutsummaryrefslogblamecommitdiff
path: root/html_view.py
blob: fc701e60b8d59a88f8d223d7cbb1d5e5538e16f5 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
















                                                                         
                        

                 
 






                                                                          
 



                                                             
 




                                                  


                                                                            


                                   




                                                                              













                                                                        
 



                                                                       
 





                                                    





                                                   










                                                        


                                                                         








                                                 

                           



               
                                                                      
                          


           
                    


          





                         













                                              
# Copyright (C) 2022 Yuchen Pei.
#
# This file is part of ptvtt.
#
# ptvtt 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
# (at your option) any later version.

# ptvtt 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 Affero General
# Public License for more details.

# You should have received a copy of the GNU Affero General Public
# License along with ptvtt.  If not, see <https://www.gnu.org/licenses/>.

from urllib import parse
import util
import ptv_client


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: str, body):
    return """
<!DOCTYPE html>
<html>
<head>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <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)