Wrap time/place and map in collapsing regions
--- a/busui/common.inc.php
+++ b/busui/common.inc.php
@@ -2,13 +2,15 @@
date_default_timezone_set('Australia/ACT');
$APIurl = "http://localhost:8765";
error_reporting(E_ALL ^ E_NOTICE);
+
+// SELECT array_to_string(array(SELECT REPLACE(name_2006, ',', '\,') as name FROM suburbs order by name), ',')
+$suburbs = explode(",","Acton,Ainslie,Amaroo,Aranda,Banks,Barton,Belconnen,Bonner,Bonython,Braddon,Bruce,Calwell,Campbell,Chapman,Charnwood,Chifley,Chisholm,City,Conder,Cook,Curtin,Deakin,Dickson,Downer,Duffy,Dunlop,Evatt,Fadden,Farrer,Fisher,Florey,Flynn,Forrest,Franklin,Fraser,Fyshwick,Garran,Gilmore,Giralang,Gordon,Gowrie,Greenway,Griffith,Gungahlin,Hackett,Hall,Harrison,Hawker,Higgins,Holder,Holt,Hughes,Hume,Isaacs,Isabella Plains,Kaleen,Kambah,Kingston,Latham,Lawson,Lyneham,Lyons,Macarthur,Macgregor,Macquarie,Mawson,McKellar,Melba,Mitchell,Monash,Narrabundah,Ngunnawal,Nicholls,Oaks Estate,O'Connor,O'Malley,Oxley,Page,Palmerston,Parkes,Pearce,Phillip,Pialligo,Red Hill,Reid,Richardson,Rivett,Russell,Scullin,Spence,Stirling,Symonston,Tharwa,Theodore,Torrens,Turner,Wanniassa,Waramanga,Watson,Weetangera,Weston,Yarralumla");
+
// you have to open the session to be able to modify or remove it
- session_start();
-
-
+session_start();
function isDebug()
{
- return $_SERVER['SERVER_NAME'] == "localhost" || $_SERVER['SERVER_NAME'] == "127.0.0.1" || !$_SERVER['SERVER_NAME'];
+ return $_SERVER['SERVER_NAME'] == "10.0.1.154" || $_SERVER['SERVER_NAME'] == "localhost" || $_SERVER['SERVER_NAME'] == "127.0.0.1" || !$_SERVER['SERVER_NAME'];
}
function debug($msg) {
@@ -50,6 +52,10 @@
padding-bottom: 18px;
width: 100%;
}
+
+ .ui-li-heading {
+ white-space: normal !important;
+ }
</style>
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
@@ -156,6 +162,7 @@
}
function getPage($url)
{
+ debug($url);
$ch = curl_init($url);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $ch, CURLOPT_HEADER, 0 );
@@ -219,8 +226,11 @@
}
$center = $totalLat/sizeof($mapPoints).",".$totalLon/sizeof($mapPoints);
}
-
- return '<img src="staticmaplite/staticmap.php?center='.$center.'&zoom='.$zoom.'&size='.$width.'x'.$height.'&maptype=mapnik&markers='.$markers.'" width='.$width.' height='.$height.'>';
+ $output = "";
+ $output .= '<div data-role="collapsible" data-collapsed="true"><h3>Open Map...</h3>';
+ $output .= '<center><img src="staticmaplite/staticmap.php?center='.$center.'&zoom='.$zoom.'&size='.$width.'x'.$height.'&maptype=mapnik&markers='.$markers.'" width='.$width.' height='.$height.'></center>';
+ $output .= '</div>';
+ return $output;
}
function distance($lat1, $lng1, $lat2, $lng2)
@@ -351,6 +361,68 @@
function bracketsMeanNewLine($input) {
return str_replace(")","</small>",str_replace("(","<br><small>",$input));
}
+
+function viaPoints($tripid,$stopid, $timingPointsOnly = false) {
+ global $APIurl;
+ $url = $APIurl."/json/tripstoptimes?trip=".$tripid;
+
+$json = json_decode(getPage($url));
+debug(print_r($json,true));
+$stops = $json[0];
+$times = $json[1];
+$foundStop = false;
+$viaPoints = Array();
+foreach ($stops as $key => $row)
+{
+ if ($foundStop) {
+ if (!$timingPointsOnly || !startsWith($row[5],"Wj") ) {
+ $viaPoints[] = Array("id" => $row[0], "name" => $row[1], "time" => $times[$key]);
+ }
+ } else {
+ if ($row[0] == $stopid) $foundStop = true;
+ }
+}
+ return $viaPoints;
+}
+
+function viaPointNames($tripid,$stopid) {
+ $points = viaPoints($tripid,$stopid,true);
+ $pointNames = Array();
+ foreach ($points as $point) {
+ $pointNames[] = $point['name'];
+ }
+ return implode(", ",$pointNames);
+}
+
+function timePlaceSettings() {
+ global $service_periods;
+ echo '<div data-role="collapsible" data-collapsed="true">
+ <h3>Change Time/Place...</h3>
+ <div class="ui-body">
+ <div data-role="fieldcontain">
+ <label for="geolocate"> Current Location: </label>
+ <input type="text" id="geolocate" name="geolocate" value="Enter co-ordinates or address here"/> <a href="#" style="display:none" name="here" id="here"/>Here?</a>
+ </div>
+ <div data-role="fieldcontain">
+ <label for="time"> Time: </label>
+ <input type="time" value="'. date("H:m").'"/> <a href="#" style="display:none" name="currentTime" id="currentTime"/>Current Time?</a>
+ </div>
+ <div data-role="fieldcontain">
+ <label for="service_period"> Service Period: </label>
+ <select name="service_period">';
+
+ foreach ($service_periods as $service_period) {
+ echo "<option value=\"$service_period\"".(service_period() === $service_period ? "SELECTED" : "").'>'.ucwords($service_period).'</option>';
+ }
+ echo '</select>
+ <a href="#" style="display:none" name="currentPeriod" id="currentPeriod"/>Current Period?</a>
+ </div>
+
+ <input type="submit" value="Update"/>
+ </div></div>';
+echo " <script>
+$('#here').click(function(event) { $('#geolocate').val(getCookie('geolocate')); return false;});
+$('#here').show();
+ </script>";
+}
?>
-
-
Binary files /dev/null and b/busui/css/images/01-refresh.png differ
Binary files /dev/null and b/busui/css/images/02-redo.png differ
Binary files /dev/null and b/busui/css/images/06-magnify.png differ
Binary files /dev/null and b/busui/css/images/07-map-marker.png differ
Binary files /dev/null and b/busui/css/images/101-gameplan.png differ
Binary files /dev/null and b/busui/css/images/102-walk.png differ
Binary files /dev/null and b/busui/css/images/103-map.png differ
Binary files /dev/null and b/busui/css/images/113-navigation.png differ
Binary files /dev/null and b/busui/css/images/121-landscape.png differ
Binary files /dev/null and b/busui/css/images/13-target.png differ
Binary files /dev/null and b/busui/css/images/139-flags.png differ
Binary files /dev/null and b/busui/css/images/145-persondot.png differ
Binary files /dev/null and b/busui/css/images/184-warning.png differ
Binary files /dev/null and b/busui/css/images/193-location-arrow.png differ
Binary files /dev/null and b/busui/css/images/28-star.png differ
Binary files /dev/null and b/busui/css/images/53-house.png differ
Binary files /dev/null and b/busui/css/images/55-network.png differ
Binary files /dev/null and b/busui/css/images/57-download.png differ
Binary files /dev/null and b/busui/css/images/58-bookmark.png differ
Binary files /dev/null and b/busui/css/images/59-flag.png differ
Binary files /dev/null and b/busui/css/images/60-signpost.png differ
Binary files /dev/null and b/busui/css/images/73-radar.png differ
Binary files /dev/null and b/busui/css/images/74-location.png differ
Binary files /dev/null and b/busui/css/images/83-calendar.png differ
Binary files a/busui/images/01-refresh.png and /dev/null differ
Binary files a/busui/images/02-redo.png and /dev/null differ
Binary files a/busui/images/06-magnify.png and /dev/null differ
Binary files a/busui/images/07-map-marker.png and /dev/null differ
Binary files a/busui/images/101-gameplan.png and /dev/null differ
Binary files a/busui/images/102-walk.png and /dev/null differ
Binary files a/busui/images/103-map.png and /dev/null differ
Binary files a/busui/images/113-navigation.png and /dev/null differ
Binary files a/busui/images/121-landscape.png and /dev/null differ
Binary files a/busui/images/13-target.png and /dev/null differ
Binary files a/busui/images/139-flags.png and /dev/null differ
Binary files a/busui/images/145-persondot.png and /dev/null differ
Binary files a/busui/images/184-warning.png and /dev/null differ
Binary files a/busui/images/193-location-arrow.png and /dev/null differ
Binary files a/busui/images/28-star.png and /dev/null differ
Binary files a/busui/images/53-house.png and /dev/null differ
Binary files a/busui/images/55-network.png and /dev/null differ
Binary files a/busui/images/57-download.png and /dev/null differ
Binary files a/busui/images/58-bookmark.png and /dev/null differ
Binary files a/busui/images/59-flag.png and /dev/null differ
Binary files a/busui/images/60-signpost.png and /dev/null differ
Binary files a/busui/images/73-radar.png and /dev/null differ
Binary files a/busui/images/74-location.png and /dev/null differ
Binary files a/busui/images/83-calendar.png and /dev/null differ
--- a/busui/index.php
+++ b/busui/index.php
@@ -21,42 +21,17 @@
<li data-role="list-divider">Timetables - Stops</li>
<li><a href="stopList.php">Major (Timing Point) Stops</a></li>
<li><a href="stopList.php">All Stops</a></li>
- <li><a href="stopList.php?nearbyfavs=yes">Nearby/Favourite Stops</a></li>
+ <li><a href="stopList.php?suburbs=yes">Stops By Suburb</a></li>
+ <li><a href="stopList.php?nearby=yes">Nearby Stops</a></li>
</ul>
<ul data-role="listview" data-inset="true" data-theme="c" data-dividertheme="b">
<li data-role="list-divider">Timetables - Routes</li>
<li><a href="routeList.php">Routes By Final Destination</a></li>
<li><a href="routeList.php?bynumber=yes">Routes By Number</a></li>
- <li><a href="routeList.php?nearbyfavs=yes">Nearby/Favourites Routes</a></li>
+ <li><a href="routeList.php?nearby=yes">Nearby Routes</a></li>
</ul>
- <div class="ui-body ui-body-c">
- <h3>Time/Place Settings</h3>
- <div data-role="fieldcontain">
- <label for="geolocate"> Current Location: </label>
- <input type="text" id="geolocate" name="geolocate"/> <a href="#" style="display:none" name="here" id="here"/>Here?</a>
- </div>
- <div data-role="fieldcontain">
- <label for="time"> Time: </label>
- <input type="time" value="<?php echo date("H:m"); ?>"/> <a href="#" style="display:none" name="currentTime" id="currentTime"/>Current Time?</a>
- </div>
- <div data-role="fieldcontain">
- <label for="service_period"> Service Period: </label>
- <select name="service_period">
- <?php
- foreach ($service_periods as $service_period) {
- echo "<option value=\"$service_period\"".(service_period() === $service_period ? "SELECTED" : "").'>'.ucwords($service_period).'</option>';
- }?>
- </select>
- <a href="#" style="display:none" name="currentPeriod" id="currentPeriod"/>Current Period?</a>
- </div>
-
- <input type="submit" value="Update"/>
- </div>
- <script>
-$('#here').click(function(event) { $('#geolocate').val(getCookie('geolocate')); return false;});
-$('#here').show();
- </script>
- </div>
+<?php echo timePlaceSettings();?>
+
</div>
</body>
</html>
--- a/busui/js/jquery.ui.datepicker.mobile.js
+++ b/busui/js/jquery.ui.datepicker.mobile.js
@@ -47,9 +47,12 @@
};
//bind to pagecreate to automatically enhance date inputs
- $( ".ui-page" ).live( "pagecreate", function(){
+ $( ".ui-page" ).live( "pagecreate", function(){
$( "input[type='date'], input[data-type='date']" ).each(function(){
+ if ($(this).hasClass("hasDatepicker") == false) {
$(this).after( $( "<div />" ).datepicker({ altField: "#" + $(this).attr( "id" ), showOtherMonths: true }) );
- });
- });
+ $(this).addClass("hasDatepicker");
+ }
+ });
+ });
})( jQuery );
--- a/busui/schedule_viewer.py
+++ b/busui/schedule_viewer.py
@@ -88,8 +88,11 @@
def StopToTuple(stop):
"""Return tuple as expected by javascript function addStopMarkerFromList"""
return (stop.stop_id, stop.stop_name, float(stop.stop_lat),
- float(stop.stop_lon), stop.location_type)
-
+ float(stop.stop_lon), stop.location_type, stop.stop_code)
+def StopZoneToTuple(stop):
+ """Return tuple as expected by javascript function addStopMarkerFromList"""
+ return (stop.stop_id, stop.stop_name, float(stop.stop_lat),
+ float(stop.stop_lon), stop.location_type, stop.stop_code, stop.zone_id)
class ScheduleRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def do_GET(self):
@@ -301,11 +304,11 @@
except KeyError:
# if a non-existent trip is searched for, the return nothing
return
- time_stops = trip.GetTimeStops()
+ time_stops = trip.GetTimeInterpolatedStops()
stops = []
times = []
- for arr,dep,stop in time_stops:
- stops.append(StopToTuple(stop))
+ for arr,ts,is_timingpoint in time_stops:
+ stops.append(StopToTuple(ts.stop))
times.append(arr)
return [stops, times]
@@ -366,7 +369,34 @@
query = params.get('q', None).lower()
matches = []
for s in schedule.GetStopList():
- if s.stop_id.lower().find(query) != -1 or s.stop_name.lower().find(query) != -1:
+ if s.stop_name.lower().find(query) != -1 or s.stop_code.lower().find(query) != -1:
+ matches.append(StopToTuple(s))
+ return matches
+
+ def handle_json_GET_stopnamesearch(self, params):
+ schedule = self.server.schedule
+ query = params.get('q', None).lower()
+ matches = []
+ for s in schedule.GetStopList():
+ if s.stop_name.lower().find(query) != -1:
+ matches.append(StopToTuple(s))
+ return matches
+
+ def handle_json_GET_stopcodesearch(self, params):
+ schedule = self.server.schedule
+ query = params.get('q', None).lower()
+ matches = []
+ for s in schedule.GetStopList():
+ if s.stop_code.lower().find(query) != -1:
+ matches.append(StopToTuple(s))
+ return matches
+
+ def handle_json_GET_stopzonesearch(self, params):
+ schedule = self.server.schedule
+ query = params.get('q', None).lower()
+ matches = []
+ for s in schedule.GetStopList():
+ if s.zone_id != None and s.zone_id.lower().find(query) != -1:
matches.append(StopToTuple(s))
return matches
@@ -391,7 +421,6 @@
# Need make a tuple to find correct bisect point
time_trips = time_trips[bisect.bisect_left(time_trips, (time, 0)):]
time_trips = time_trips[:15]
- # TODO: combine times for a route to show next 2 departure times
result = []
for time, (trip, index), tp in time_trips:
headsign = None
@@ -411,8 +440,9 @@
if len(trip_name):
trip_name += " - "
trip_name += route.route_long_name
- if headsign:
- trip_name += " (Direction: %s)" % headsign
+ # comment out directions because we already have them in the long name
+ #if headsign:
+ # trip_name += " (Direction: %s)" % headsign
if service_period == None or trip.service_id == service_period:
result.append((time, (trip.trip_id, trip_name, trip.service_id), tp))
return result
--- a/busui/stop.php
+++ b/busui/stop.php
@@ -13,7 +13,8 @@
foreach ($trips as $row)
{
echo '<li>';
-echo '<h3><a href="trip.php?stopid='.$_REQUEST['stopid'].'&tripid='.$row[1][0].'">'.bracketsMeanNewLine($row[1][1]).'</a></h3>';
+echo '<h3><a href="trip.php?stopid='.$_REQUEST['stopid'].'&tripid='.$row[1][0].'">'.$row[1][1];
+echo '<br><small>Via: '.viaPointNames($row[1][0],$_REQUEST['stopid']).'</small> </a></h3>';
echo '<p class="ui-li-aside"><strong>'.midnight_seconds_to_time($row[0]).'</strong></p>';
echo '</li>';
}
--- a/busui/stopList.php
+++ b/busui/stopList.php
@@ -4,12 +4,22 @@
echo'
<div data-role="navbar">
<ul>
- <li><a href="stopList.php">Timing Points</a></li>
+ <li><a href="stopList.php">Timing Points</a></li>
+ <li><a href="stopList.php?suburbs=yes">By Suburb</a></li>
+ <li><a href="stopList.php?nearby=yes">Nearby Stops</a></li>
<li><a href="stopList.php?allstops=yes">All Stops</a></li>
</ul>
</div>
';
-
+// By suburb
+if (isset($_REQUEST['suburbs'])) {
+ echo ' <ul data-role="listview" data-filter="true" data-inset="true" >';
+ foreach ($suburbs as $suburb) {
+ echo '<li><a href="stopList.php?suburb='.urlencode($suburb).'">'.$suburb.'</a></li>';
+ }
+echo '</ul>';
+} else {
+// Timing Points / All stops
echo '<div class="noscriptnav"> Go to letter: ';
foreach(range('A','Z') as $letter)
{
@@ -22,7 +32,8 @@
echo ' <ul data-role="listview" data-filter="true" data-inset="true" >';
$url = $APIurl."/json/timingpoints";
if ($_REQUEST['allstops']) $url = $APIurl."/json/stops";
-if ($_REQUEST['lat'] && $_REQUEST['lon']) $url = $APIurl."/json/neareststops?lat={$_REQUEST['lat']}&lon={$_REQUEST['lon']}&limit=15";
+if ($_REQUEST['nearby']) $url = $APIurl."/json/neareststops?lat={$_REQUEST['lat']}&lon={$_REQUEST['lon']}&limit=15";
+if ($_REQUEST['suburb']) $url = $APIurl."/json/stopzonesearch?q={$_REQUEST['suburb']}";
$contents = json_decode(getPage($url));
debug(print_r($contents,true));
foreach ($contents as $key => $row) {
@@ -42,7 +53,7 @@
echo '<li><a href="stop.php?stopid='.$row[0].'">'.bracketsMeanNewLine($row[1]).'</a></li>';
}
echo '</ul>';
-
+}
include_footer();
?>
--- a/busui/trip.php
+++ b/busui/trip.php
@@ -1,6 +1,7 @@
<?php
include('common.inc.php');
$tripid = $_REQUEST['tripid'];
+$stopid = $_REQUEST['stopid'];
if ($_REQUEST['routeid']) {
$url = $APIurl."/json/routetrips?route_id=".$_REQUEST['routeid'];
$trips = json_decode(getPage($url));
@@ -30,7 +31,9 @@
foreach ($stops as $key => $row)
{
echo '<li>';
-echo '<h3><a href="stop.php?stopid='.$row[0].'">'.bracketsMeanNewLine($row[1]).'</a></h3>';
+echo '<h3><a href="stop.php?stopid='.$row[0].'">'.bracketsMeanNewLine($row[1]);
+if ($row[0] == $stopid) echo "<br><small> Current Location</small>";
+echo '</a></h3>';
echo '<p class="ui-li-aside">'.midnight_seconds_to_time($times[$key]).'</p>';
echo '</li>';
}
--- a/busui/tripPlanner.php
+++ b/busui/tripPlanner.php
@@ -6,7 +6,8 @@
$from = (isset($_REQUEST['from']) ? $_REQUEST['from'] : "Brigalow");
$to = (isset($_REQUEST['to']) ? $_REQUEST['to'] : "Barry");
$date = (isset($_REQUEST['date']) ? $_REQUEST['date'] : date("m/d/Y"));
- $time = (isset($_REQUEST['time']) ? $_REQUEST['time'] : date("h:ia"));
+ $time = (isset($_REQUEST['time']) ? $_REQUEST['time'] : date("H:m"));
+ # todo: convert date from form to h:ia?
echo "<font color=red>$errorMessage</font>";
echo '<form action="tripPlanner.php" method="post">
<div data-role="fieldcontain">