From: maxious Date: Sun, 20 Mar 2011 04:06:26 +0000 Subject: Hide viaPoints when display width is less than 480px X-Git-Url: http://maxious.lambdacomplex.org/git/?p=busui.git&a=commitdiff&h=d536d0756ef163683062fdcca6c1f19425ae97cc --- Hide viaPoints when display width is less than 480px --- --- a/common-geo.inc.php +++ b/common-geo.inc.php @@ -51,7 +51,7 @@ if ($collapsible) $output.= ''; return $output; } -function distance($lat1, $lng1, $lat2, $lng2) +function distance($lat1, $lng1, $lat2, $lng2, $roundLargeValues = false) { $pi80 = M_PI / 180; $lat1*= $pi80; @@ -64,7 +64,10 @@ $a = sin($dlat / 2) * sin($dlat / 2) + cos($lat1) * cos($lat2) * sin($dlng / 2) * sin($dlng / 2); $c = 2 * atan2(sqrt($a) , sqrt(1 - $a)); $km = $r * $c; - return $km * 1000; + if ($roundLargeValues) { + if ($km < 1) return floor($km * 1000); + else return round($km,2)."k"; + } else return floor($km * 1000); } function decodePolylineToArray($encoded) { --- a/common-template.inc.php +++ b/common-template.inc.php @@ -1,11 +1,37 @@ - - + + + ' . $pageTitle . ''; + if ($datepicker) echo ''; if (isDebugServer()) echo ' @@ -20,7 +46,7 @@ }); '; -echo ' - + #jqm-homeheader { + text-align: center; + } + .viaPoints { + display: none; + text-size: 0.2em; + } + .min-width-480px .viaPoints { + display: block; + } + // source http://webaim.org/techniques/skipnav/ + #skip a, #skip a:hover, #skip a:visited +{ +position:absolute; +left:0px; +top:-500px; +width:1px; +height:1px; +overflow:hidden; +} + +#skip a:active, #skip a:focus +{ +position:static; +width:auto; +height:auto; +} +'; + if (strstr($_SERVER['HTTP_USER_AGENT'], 'iPhone') || strstr($_SERVER['HTTP_USER_AGENT'], 'iPod')) { + echo ' '; + } if ($geolocate) { echo " "; } echo ' + '; if ($opendiv) { echo '
@@ -82,6 +145,7 @@

' . $pageTitle . '

+
'; } } @@ -95,6 +159,10 @@ } echo ''; + if (!isDebug()) { + $googleAnalyticsImageUrl = googleAnalyticsGetImageUrl(); + echo ''; + } } function timePlaceSettings($geolocate = false) { @@ -109,22 +177,22 @@ or enter an address/co-ordinates in the box below.
'; } echo '
-

Change Time/Place (' . (isset($_SESSION['time']) ? $_SESSION['time'] : "Current Time,") . ' '.ucwords(service_period()).')...

-
+

Change Time/Place (' . (isset($_SESSION['time']) ? $_SESSION['time'] : "Current Time,") . ' ' . ucwords(service_period()) . ')...

+
- +
- '; foreach ($service_periods as $service_period) { - echo "'; + echo "'; } echo ' --- a/common.inc.php +++ b/common.inc.php @@ -25,31 +25,31 @@ $_SESSION['time'] = filter_var($_REQUEST['time'], FILTER_SANITIZE_STRING); } if (isset($_REQUEST['geolocate'])) { - $geocoded = false; if (isset($_REQUEST['lat']) && isset($_REQUEST['lon'])) { $_SESSION['lat'] = trim(filter_var($_REQUEST['lat'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION)); $_SESSION['lon'] = trim(filter_var($_REQUEST['lon'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION)); } else { - $geolocate = filter_var($_REQUEST['geolocate'], FILTER_SANITIZE_URL); - echo $_REQUEST['geolocate']; - if (startsWith($geolocate, "-")) { - $locateparts = explode(",",$geolocate); - $_SESSION['lat'] = $locateparts[0]; - $_SESSION['lon'] =$locateparts[1]; - } else { - $contents = geocode($geolocate, true); - print_r($contents); - if (isset($contents[0]->centroid)) { - $geocoded = true; - $_SESSION['lat'] = $contents[0]->centroid->coordinates[0]; - $_SESSION['lon'] = $contents[0]->centroid->coordinates[1]; + $geolocate = filter_var($_REQUEST['geolocate'], FILTER_SANITIZE_URL); + echo $_REQUEST['geolocate']; + if (startsWith($geolocate, "-")) { + $locateparts = explode(",", $geolocate); + $_SESSION['lat'] = $locateparts[0]; + $_SESSION['lon'] = $locateparts[1]; } else { - $_SESSION['lat'] = ""; - $_SESSION['lon'] = ""; - } + $contents = geocode($geolocate, true); + print_r($contents); + if (isset($contents[0]->centroid)) { + $geocoded = true; + $_SESSION['lat'] = $contents[0]->centroid->coordinates[0]; + $_SESSION['lon'] = $contents[0]->centroid->coordinates[1]; + } + else { + $_SESSION['lat'] = ""; + $_SESSION['lon'] = ""; + } } } } @@ -66,6 +66,31 @@ function debug($msg, $debugReason = "other") { if (isDebug($debugReason)) echo "\n\n"; +} +function isJQueryMobileDevice() +{ + // http://forum.jquery.com/topic/what-is-the-best-way-to-detect-all-useragents-which-can-handle-jquery-mobile#14737000002087897 + $user_agent = $_SERVER['HTTP_USER_AGENT']; + return preg_match('/iphone/i', $user_agent) + || preg_match('/android/i', $user_agent) + || preg_match('/webos/i', $user_agent) + || preg_match('/ios/i', $user_agent) + || preg_match('/bada/i', $user_agent) + || preg_match('/maemo/i', $user_agent) + || preg_match('/meego/i', $user_agent) + || preg_match('/fennec/i', $user_agent) + || (preg_match('/symbian/i', $user_agent) + && preg_match('/s60/i', $user_agent) + && $browser['majorver'] >= 5) + || (preg_match('/symbian/i', $user_agent) + && preg_match('/platform/i', $user_agent) + && $browser['majorver'] >= 3) + || (preg_match('/blackberry/i', $user_agent) + && $browser['majorver'] >= 5) + || (preg_match('/opera mobile/i', $user_agent) + && $browser['majorver'] >= 10) + || (preg_match('/opera mini/i', $user_agent) + && $browser['majorver'] >= 5); } function isFastDevice() { @@ -129,5 +154,27 @@ { return str_replace(")", "", str_replace("(", "
", $input)); } +function sksort(&$array, $subkey = "id", $sort_ascending = false) +{ + if (count($array)) $temp_array[key($array) ] = array_shift($array); + foreach ($array as $key => $val) { + $offset = 0; + $found = false; + foreach ($temp_array as $tmp_key => $tmp_val) { + if (!$found and strtolower($val[$subkey]) > strtolower($tmp_val[$subkey])) { + $temp_array = array_merge((array)array_slice($temp_array, 0, $offset) , array( + $key => $val + ) , array_slice($temp_array, $offset)); + $found = true; + } + $offset++; + } + if (!$found) $temp_array = array_merge($temp_array, array( + $key => $val + )); + } + if ($sort_ascending) $array = array_reverse($temp_array); + else $array = $temp_array; +} ?> --- /dev/null +++ b/ga.php @@ -1,1 +1,187 @@ + array( + "method" => "GET", + "user_agent" => $_SERVER["HTTP_USER_AGENT"], + "header" => ("Accepts-Language: " . $_SERVER["HTTP_ACCEPT_LANGUAGE"])) + ); + if (!empty($_GET["utmdebug"])) { + $data = file_get_contents( + $utmUrl, false, stream_context_create($options)); + } else { + $data = @file_get_contents( + $utmUrl, false, stream_context_create($options)); + } + } + + // Track a page view, updates all the cookies and campaign tracker, + // makes a server side request to Google Analytics and writes the transparent + // gif byte data to the response. + function trackPageView() { + $timeStamp = time(); + $domainName = $_SERVER["SERVER_NAME"]; + if (empty($domainName)) { + $domainName = ""; + } + + // Get the referrer from the utmr parameter, this is the referrer to the + // page that contains the tracking pixel, not the referrer for tracking + // pixel. + $documentReferer = $_GET["utmr"]; + if (empty($documentReferer) && $documentReferer !== "0") { + $documentReferer = "-"; + } else { + $documentReferer = urldecode($documentReferer); + } + $documentPath = $_GET["utmp"]; + if (empty($documentPath)) { + $documentPath = ""; + } else { + $documentPath = urldecode($documentPath); + } + + $account = $_GET["utmac"]; + $userAgent = $_SERVER["HTTP_USER_AGENT"]; + if (empty($userAgent)) { + $userAgent = ""; + } + + // Try and get visitor cookie from the request. + $cookie = $_COOKIE[COOKIE_NAME]; + + $guidHeader = $_SERVER["HTTP_X_DCMGUID"]; + if (empty($guidHeader)) { + $guidHeader = $_SERVER["HTTP_X_UP_SUBNO"]; + } + if (empty($guidHeader)) { + $guidHeader = $_SERVER["HTTP_X_JPHONE_UID"]; + } + if (empty($guidHeader)) { + $guidHeader = $_SERVER["HTTP_X_EM_UID"]; + } + + $visitorId = getVisitorId($guidHeader, $account, $userAgent, $cookie); + + // Always try and add the cookie to the response. + setrawcookie( + COOKIE_NAME, + $visitorId, + $timeStamp + COOKIE_USER_PERSISTENCE, + COOKIE_PATH); + + $utmGifLocation = "http://www.google-analytics.com/__utm.gif"; + + // Construct the gif hit url. + $utmUrl = $utmGifLocation . "?" . + "utmwv=" . VERSION . + "&utmn=" . getRandomNumber() . + "&utmhn=" . urlencode($domainName) . + "&utmr=" . urlencode($documentReferer) . + "&utmp=" . urlencode($documentPath) . + "&utmac=" . $account . + "&utmcc=__utma%3D999.999.999.999.999.1%3B" . + "&utmvid=" . $visitorId . + "&utmip=" . getIP($_SERVER["REMOTE_ADDR"]); + + sendRequestToGoogleAnalytics($utmUrl); + + // If the debug parameter is on, add a header to the response that contains + // the url that was used to contact Google Analytics. + if (!empty($_GET["utmdebug"])) { + header("X-GA-MOBILE-URL:" . $utmUrl); + } + // Finally write the gif data to the response. + writeGifData(); + } +?> + --- a/index.php +++ b/index.php @@ -5,9 +5,10 @@
-

busness time


Canberra Bus Timetables and Trip Planner
+

busness time


Canberra Bus Timetables and Trip Planner
- Launch Trip Planner... + + Launch Trip Planner...
'; -echo '
    '; -$url = $APIurl . "/json/routes"; -$contents = json_decode(getPage($url)); -function printRoutes($routes) -{ +} +if ($_REQUEST['bysuburb']) { + include_header("Routes by Suburb", "routeList"); + navbar(); + echo '
      '; + if (!isset($_REQUEST['firstLetter'])) { + foreach (range('A', 'Z') as $letter) { + echo "
    • $letter...
    • \n"; + } + } + else { + foreach ($suburbs as $suburb) { + if (startsWith($suburb, $_REQUEST['firstLetter'])) { + echo '
    • ' . $suburb . '
    • '; + } + } + } + echo '
    '; +} +else if ($_REQUEST['nearby'] || $_REQUEST['suburb']) { + if ($_REQUEST['suburb']) { + $suburb = filter_var($_REQUEST['suburb'], FILTER_SANITIZE_STRING); + $url = $APIurl . "/json/stopzonesearch?q=" . $suburb; + include_header("Routes by Suburb", "routeList"); + } + if ($_REQUEST['nearby']) { + $url = $APIurl . "/json/neareststops?lat={$_SESSION['lat']}&lon={$_SESSION['lon']}&limit=15"; + include_header("Routes Nearby", "routeList"); + } + $stops = json_decode(getPage($url)); + $routes = Array(); + foreach ($stops as $stop) { + $url = $APIurl . "/json/stoproutes?stop=" . $stop[0]; + $stoproutes = json_decode(getPage($url)); + foreach ($stoproutes as $route) { + if (!isset($routes[$route[0]])) $routes[$route[0]] = $route; + } + } + navbar(); + echo '
      '; + sksort($routes, 1, true); foreach ($routes as $row) { - echo '
    • ' . $row[1] . ' ' . $row[2] . " (" . ucwords($row[3]) . ")
    • \n"; + echo '
    • ' . $row[1] . ' ' . $row[2] . " (" . ucwords($row[4]) . ")
    • \n"; } } -if ($_REQUEST['bynumber']) { +else if ($_REQUEST['bynumber']) { + include_header("Routes by Number", "routeList"); + navbar(); + echo '
        '; + $url = $APIurl . "/json/routes"; + $contents = json_decode(getPage($url)); $routeSeries = Array(); $seriesRange = Array(); foreach ($contents as $key => $row) { @@ -54,11 +96,19 @@ echo ''; if ($series <= 9) echo '
      • ' . $series . "
          \n"; else echo "
        • {$seriesRange[$series]['min']}-{$seriesRange[$series]['max']}
        • \n"; } } else { + include_header("Routes by Destination", "routeList"); + navbar(); + echo '
            '; + $url = $APIurl . "/json/routes"; + $contents = json_decode(getPage($url)); + // by destination! foreach ($contents as $key => $row) { $routeDestinations[$row[2]][] = $row; } @@ -73,7 +123,9 @@ foreach ($routeDestinations as $destination => $routes) { echo ''; echo '
          • ' . $destination . "...
          • \n"; } } --- a/schedule_viewer.py +++ b/schedule_viewer.py @@ -281,6 +281,23 @@ result.append( (r.route_id, r.route_short_name, r.route_long_name, servicep.service_id) ) result.sort(key = lambda x: x[1:3]) return result + + def handle_json_GET_routesearch(self, params): + """Return a list of routes with matching short name.""" + schedule = self.server.schedule + routeshortname = params.get('routeshortname', None) + result = [] + for r in schedule.GetRouteList(): + if r.route_short_name == routeshortname: + servicep = None + for t in schedule.GetTripList(): + if t.route_id == r.route_id: + servicep = t.service_period + break + result.append( (r.route_id, r.route_short_name, r.route_long_name, servicep.service_id) ) + result.sort(key = lambda x: x[1:3]) + return result + def handle_json_GET_routerow(self, params): schedule = self.server.schedule @@ -477,8 +494,8 @@ result = {} for trip in trips: route = schedule.GetRoute(trip.route_id) - if not trip.route_short_name+route.route_long_name in result: - result[trip.route_short_name+route.route_long_name] = (route.route_id, route.route_short_name, route.route_long_name, trip.trip_id) + if not route.route_short_name+route.route_long_name+trip.service_id in result: + result[route.route_short_name+route.route_long_name+trip.service_id] = (route.route_id, route.route_short_name, route.route_long_name, trip.trip_id, trip.service_id) return result def handle_json_GET_stopalltrips(self, params): @@ -509,6 +526,8 @@ if service_period == None or trip.service_id == service_period: result.append((time, (trip.trip_id, trip_name, trip.service_id), tp)) return result + + def handle_json_GET_stoptrips(self, params): """Given a stop_id and time in seconds since midnight return the next --- a/stop.php +++ b/stop.php @@ -48,7 +48,7 @@ } include_header($stop[1], "stop"); timePlaceSettings(); -echo '
            '; +echo '
            '; echo $stopLinks; if (sizeof($stops) > 0) { echo '

            ' . staticmap($stopPositions) . '

            '; @@ -72,10 +72,8 @@ foreach ($trips as $row) { echo '
          • '; echo '

            ' . $row[1][1]; - if (isFastDevice()) { - $viaPoints = viaPointNames($row[1][0], $stopid); - if ($viaPoints != "") echo '
            Via: ' . $viaPoints . ''; - } + $viaPoints = viaPointNames($row[1][0], $stopid); + if ($viaPoints != "") echo '
            Via: ' . $viaPoints . '
            '; if (sizeof($tripStopNumbers) > 0) { echo '
            Boarding At: '; foreach ($tripStopNumbers[$row[1][0]] as $key) { --- a/stopList.php +++ b/stopList.php @@ -1,7 +1,8 @@ '; - foreach ($suburbs as $suburb) { - if (!isset($_REQUEST['firstLetter'])) { - foreach (range('A', 'Z') as $letter) { - echo "
          • $letter...
          • \n"; + if (!isset($_REQUEST['firstLetter'])) { + foreach (range('A', 'Z') as $letter) { + echo "
          • $letter...
          • \n"; + } + } + else { + foreach ($suburbs as $suburb) { + if (startsWith($suburb, $_REQUEST['firstLetter'])) { + echo '
          • ' . $suburb . '
          • '; } - } - else if (startsWith($suburb, $_REQUEST['firstLetter'])) { - echo '
          • ' . $suburb . '
          • '; } } echo '

          '; @@ -48,6 +51,10 @@ include_header("Nearby Stops", "stopList"); navbar(); timePlaceSettings(true); + if (!isset($_SESSION['lat']) || !isset($_SESSION['lat']) || $_SESSION['lat'] == "" || $_SESSION['lon'] == "") { + include_footer(); + die(); + } } else if ($_REQUEST['suburb']) { $suburb = filter_var($_REQUEST['suburb'], FILTER_SANITIZE_STRING); @@ -63,7 +70,7 @@ timePlaceSettings(); } echo ' '; - var_dump ($stopsGrouped); } include_footer(); ?> --- a/trip.php +++ b/trip.php @@ -4,16 +4,17 @@ $stopid = filter_var($_REQUEST['stopid'], FILTER_SANITIZE_NUMBER_INT); $routeid = filter_var($_REQUEST['routeid'], FILTER_SANITIZE_NUMBER_INT); $routetrips = Array(); -if ($_REQUEST['routeid']) { +if ($_REQUEST['routeid'] && !$_REQUEST['tripid']) { + $tripid = 0; $url = $APIurl . "/json/routetrips?route_id=" . $routeid; $routetrips = json_decode(getPage($url)); foreach ($routetrips as $trip) { - if ($trip[0] < midnight_seconds()) { + if ($trip[0] > midnight_seconds()) { $tripid = $trip[1]; break; } } - if (!($tripid > 0)) $tripid = $routetrip[0][1]; + if ($tripid == 0) $tripid = $routetrips[0][1]; } $url = $APIurl . "/json/triprows?trip=" . $tripid; $trips = array_flatten(json_decode(getPage($url))); @@ -23,18 +24,29 @@ $routetrips = json_decode(getPage($url)); } include_header("Stops on " . $trips[1]->route_short_name . ' ' . $trips[1]->route_long_name, "trip"); -timePlaceSettings(); -echo '

          Other Trips: '; -foreach ($routetrips as $othertrip) { - echo '' . midnight_seconds_to_time($othertrip[0]) . ' '; -} -echo '

          Other directions/timing periods: '; -echo '
            '; $url = $APIurl . "/json/tripstoptimes?trip=" . $tripid; $json = json_decode(getPage($url)); $stops = $json[0]; $times = $json[1]; -echo '
          • ' . midnight_seconds_to_time($times[0]) . '-' . midnight_seconds_to_time($times[sizeof($times) - 1]) . '
          • '; +$viaPoints = Array(); +foreach ($stops as $stop) { + if (!startsWith($stop[5], "Wj")) { + $viaPoints[] = $stop[1]; + } +} +echo '

            Via:

            ' . implode(", ", $viaPoints) . '

            '; +echo '

            Other Trips:

            '; +foreach ($routetrips as $othertrip) { + echo '' . midnight_seconds_to_time($othertrip[0]) . ' '; +} +echo '

            Other directions/timing periods:

            '; +$url = $APIurl . "/json/routesearch?routeshortname=" . $trips[1]->route_short_name; +$json = json_decode(getPage($url)); +foreach ($json as $row) { + if ($row[0] != $routeid) echo '' . $row[2] . ' (' . ucwords($row[3]) . ') '; +} +echo '
              '; +echo '
            • ' . midnight_seconds_to_time($times[0]) . '-' . midnight_seconds_to_time($times[sizeof($times) - 1]) . ' ' . $trips[1]->route_long_name . '
            • '; $stopsGrouped = Array(); foreach ($stops as $key => $row) { if (($stops[$key][1] != $stops[$key + 1][1]) || $key + 1 >= sizeof($stops)) { @@ -45,7 +57,7 @@ // subsequent duplicates $stopsGrouped["stop_ids"][] = $row[0]; $stopsGrouped["endTime"] = $times[$key]; - echo ''; + echo ''; echo '

              ' . midnight_seconds_to_time($stopsGrouped['startTime']) . ' to ' . midnight_seconds_to_time($stopsGrouped['endTime']) . '

              '; echo bracketsMeanNewLine($row[1]); echo '
              '; --- a/tripPlanner.php +++ b/tripPlanner.php @@ -5,7 +5,10 @@ $to = (isset($_REQUEST['to']) ? filter_var($_REQUEST['to'], FILTER_SANITIZE_STRING) : "Barry"); $date = (isset($_REQUEST['date']) ? filter_var($_REQUEST['date'], FILTER_SANITIZE_STRING) : date("m/d/Y")); $time = (isset($_REQUEST['time']) ? filter_var($_REQUEST['time'], FILTER_SANITIZE_STRING) : date("H:i")); -// todo: convert date from form to h:ia? +function formatTime($timeString) { + $timeParts = explode("T",$timeString); + return str_replace("Z","",$timeParts[1]); +} function tripPlanForm($errorMessage = "") { global $date, $time, $from, $to; @@ -40,7 +43,7 @@ } function processItinerary($itineraryNumber, $itinerary) { - echo '
              0 ? 'data-collapsed="true"' : "") . '>

              Option #' . ($itineraryNumber + 1) . ": " . floor($itinerary->duration / 60000) . " minutes ({$itinerary->startTime} to {$itinerary->endTime})

              "; + echo '

              0 ? 'data-collapsed="true"' : "") . '>

              Option #' . ($itineraryNumber + 1) . ": " . floor($itinerary->duration / 60000) . " minutes (".formatTime($itinerary->startTime)." to ".formatTime($itinerary->endTime).")

              "; echo "Walking time: " . floor($itinerary->walkTime / 60000) . " minutes (" . floor($itinerary->walkDistance) . " meters)
              \n"; echo "Transit time: " . floor($itinerary->transitTime / 60000) . " minutes
              \n"; echo "Waiting time: " . floor($itinerary->waitingTime / 60000) . " minutes
              \n"; @@ -119,7 +122,7 @@ $tripplan = json_decode($page); debug(print_r($triplan, true)); echo "

              From: {$tripplan->plan->from->name} To: {$tripplan->plan->to->name}

              "; - echo "

              At: {$tripplan->plan->date}

              "; + echo "

              At: ".formatTime($tripplan->plan->date)."

              "; if (is_array($tripplan->plan->itineraries->itinerary)) { echo '
              '; foreach ($tripplan->plan->itineraries->itinerary as $itineraryNumber => $itinerary) {