Fix Android viewport zoom
--- /dev/null
+++ b/css/local.css.php
@@ -1,1 +1,216 @@
-
+<?php
+ header('Content-type: text/css');
+ ob_start("compress");
+ function compress($buffer) {
+ /* remove comments */
+ $buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);
+ /* remove tabs, spaces, newlines, etc. */
+ $buffer = str_replace(array("\r\n", "\r", "\n", "\t", ' ', ' ', ' '), '', $buffer);
+ return $buffer;
+ }
+
+echo '
+.ui-li-thumb, .ui-li-icon { position: relative; }
+
+ .ui-navbar {
+ width: 100%;
+ }
+ .ui-btn-inner {
+ white-space: normal !important;
+ }
+ .ui-li-heading {
+ white-space: normal !important;
+ }
+ .ui-listview-filter {
+ margin: 0 !important;
+ }
+ .ui-icon-navigation {
+ background-image: url('.$_REQUEST['labsPath'].'css/images/113-navigation.png);
+ background-position: 1px 0;
+ }
+ .ui-icon-beaker {
+ background-image: url('.$_REQUEST['labsPath'].'css/images/91-beaker-2.png);
+ background-position: 1px 0;
+ }
+ #footer {
+ text-size: 0.75em;
+ text-align: center;
+ }
+ body {
+ background-color: #F0F0F0;
+ }
+ #jqm-homeheader {
+ text-align: center;
+ }
+ .viaPoints {
+ display: none;
+ text-size: 0.2em;
+ }
+ .min-width-480px .viaPoints {
+ display: inline;
+ }
+ #extrainfo {
+ visibility: hidden;
+ display: none;
+ }
+ #servicewarning {
+ padding: 1em;
+ margin-bottom: 0.5em;
+ text-size: 0.2em;
+ background-color: #FF9;
+ -moz-border-radius: 15px;
+border-radius: 15px;
+ }
+
+
+#footer {
+clear:both;
+text-align:center;
+}
+ // 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 (false)
+ echo '
+// adaptive layout from jQuery Mobile docs site
+.type-interior .content-secondary {
+ border-right: 0;
+ border-left: 0;
+ margin: 10px -15px 0;
+ background: #fff;
+ border-top: 1px solid #ccc;
+}
+.type-home .ui-content {
+ margin-top: 5px;
+}
+.type-interior .ui-content {
+ padding-bottom: 0;
+}
+.content-secondary .ui-collapsible-contain {
+ padding: 10px 15px;
+
+}
+.content-secondary .ui-collapsible-heading {
+ margin: 0 0 30px;
+}
+.content-secondary .ui-collapsible-heading-collapsed,
+.content-secondary .ui-collapsible-content {
+ padding:0;
+ margin: 0;
+}
+@media all and (min-width: 650px){
+.content-secondary {
+ text-align: left;
+ float: left;
+ width: 45%;
+ background: none;
+ border-top: 0;
+ }
+ .content-secondary,
+ .type-interior .content-secondary {
+ margin: 30px 0 20px 2%;
+ padding: 20px 4% 0 0;
+ background: none;
+ }
+ .type-index .content-secondary {
+ padding: 0;
+ }
+ .type-index .content-secondary .ui-listview {
+ margin: 0;
+ }
+ .content-primary {
+ width: 45%;
+ float: right;
+ margin-top: 30px;
+ margin-right: 1%;
+ padding-right: 1%;
+ }
+ .content-primary ul:first-child {
+ margin-top: 0;
+ }
+
+ .type-interior .content-primary {
+ padding: 1.5em 6% 3em 0;
+ margin: 0;
+ }
+ /* fix up the collapsibles - expanded on desktop */
+ .content-secondary .ui-collapsible-heading {
+ display: none;
+ }
+ .content-secondary .ui-collapsible-contain {
+ margin:0;
+ }
+ .content-secondary .ui-collapsible-content {
+ display: block;
+ margin: 0;
+ padding: 0;
+ }
+ .type-interior .content-secondary .ui-li-divider {
+ padding-top: 1em;
+ padding-bottom: 1em;
+ }
+ .type-interior .content-secondary {
+ margin: 0;
+ padding: 0;
+ }
+}
+@media all and (min-width: 750px){
+ .type-home .ui-content,
+ .type-interior .ui-content {
+ background-position: 39%;
+ }
+ .content-secondary {
+ width: 34%;
+ }
+ .content-primary {
+ width: 56%;
+ padding-right: 1%;
+ }
+ .type-interior .ui-content {
+ background-position: 34%;
+ }
+}
+
+@media all and (min-width: 1200px){
+ .type-home .ui-content{
+ background-position: 38.5%;
+ }
+ .type-interior .ui-content {
+ background-position: 30%;
+ }
+ .content-secondary {
+ width: 30%;
+ padding-right:6%;
+ margin: 30px 0 20px 5%;
+ }
+ .type-interior .content-secondary {
+ margin: 0;
+ padding: 0;
+ }
+ .content-primary {
+ width: 50%;
+ margin-right: 5%;
+ padding-right: 3%;
+ }
+ .type-interior .content-primary {
+ width: 60%;
+ }
+}';
+ ob_end_flush();
+?>
+
--- a/dotcloud/postinstall
+++ b/dotcloud/postinstall
@@ -3,8 +3,8 @@
curl http://s3-ap-southeast-1.amazonaws.com/busresources/cbrfeed.zip \
-o /home/dotcloud/current/cbrfeed.zip
-wget http://s3-ap-southeast-1.amazonaws.com/busresources/Graph.obj \
--O /tmp/Graph.obj
+curl http://s3-ap-southeast-1.amazonaws.com/busresources/Graph.obj \
+-o /tmp/Graph.obj
#db setup
#curl https://github.com/maxious/ACTBus-ui/raw/master/transitdata.cbrfeed.sql.gz -o transitdata.cbrfeed.sql.gz
--- a/include/common-template.inc.php
+++ b/include/common-template.inc.php
@@ -32,7 +32,8 @@
<html lang="en">
<head>
<meta charset="UTF-8">
- <title>' . $pageTitle . '</title>
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<title>' . $pageTitle . '</title>
<meta name="google-site-verification"
content="-53T5Qn4TB_de1NyfR_ZZkEVdUNcNFSaYKSFkWKx-sY" />
<link rel="stylesheet" href="'.$labsPath.'css/jquery-ui-1.8.12.custom.css" />';
@@ -77,8 +78,7 @@
});
</script>
';
- echo '<style type="text/css">
-.ui-li-thumb, .ui-li-icon { position: relative; }';
+ echo '<style type="text/css">';
if (strstr($_SERVER['HTTP_USER_AGENT'], 'Android')) echo '.ui-shadow,.ui-btn-up-a,.ui-btn-hover-a,.ui-btn-down-a,.ui-body-b,.ui-btn-up-b,.ui-btn-hover-b,
.ui-btn-down-b,.ui-bar-c,.ui-body-c,.ui-btn-up-c,.ui-btn-hover-c,.ui-btn-down-c,.ui-bar-c,.ui-body-d,
@@ -88,208 +88,11 @@
box-shadow: none;
-webkit-box-shadow: none;
}';
-echo '
- .ui-navbar {
- width: 100%;
- }
- .ui-btn-inner {
- white-space: normal !important;
- }
- .ui-li-heading {
- white-space: normal !important;
- }
- .ui-listview-filter {
- margin: 0 !important;
- }
- .ui-icon-navigation {
- background-image: url('.$labsPath.'css/images/113-navigation.png);
- background-position: 1px 0;
- }
- .ui-icon-beaker {
- background-image: url('.$labsPath.'css/images/91-beaker-2.png);
- background-position: 1px 0;
- }
- #footer {
- text-size: 0.75em;
- text-align: center;
- }
- body {
- background-color: #F0F0F0;
- }
- #jqm-homeheader {
- text-align: center;
- }
- .viaPoints {
- display: none;
- text-size: 0.2em;
- }
- .min-width-480px .viaPoints {
- display: inline;
- }
- #extrainfo {
- visibility: hidden;
- display: none;
- }
- #servicewarning {
- padding: 1em;
- margin-bottom: 0.5em;
- text-size: 0.2em;
- background-color: #FF9;
- -moz-border-radius: 15px;
-border-radius: 15px;
- }
-
-
-#footer {
-clear:both;
-text-align:center;
-}
- // 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;
-}
-
-
-// adaptive layout from jQuery Mobile docs site
-.type-interior .content-secondary {
- border-right: 0;
- border-left: 0;
- margin: 10px -15px 0;
- background: #fff;
- border-top: 1px solid #ccc;
-}
-.type-home .ui-content {
- margin-top: 5px;
-}
-.type-interior .ui-content {
- padding-bottom: 0;
-}
-.content-secondary .ui-collapsible-contain {
- padding: 10px 15px;
-
-}
-.content-secondary .ui-collapsible-heading {
- margin: 0 0 30px;
-}
-.content-secondary .ui-collapsible-heading-collapsed,
-.content-secondary .ui-collapsible-content {
- padding:0;
- margin: 0;
-}
-@media all and (min-width: 650px){
-.content-secondary {
- text-align: left;
- float: left;
- width: 45%;
- background: none;
- border-top: 0;
- }
- .content-secondary,
- .type-interior .content-secondary {
- margin: 30px 0 20px 2%;
- padding: 20px 4% 0 0;
- background: none;
- }
- .type-index .content-secondary {
- padding: 0;
- }
- .type-index .content-secondary .ui-listview {
- margin: 0;
- }
- .content-primary {
- width: 45%;
- float: right;
- margin-top: 30px;
- margin-right: 1%;
- padding-right: 1%;
- }
- .content-primary ul:first-child {
- margin-top: 0;
- }
-
- .type-interior .content-primary {
- padding: 1.5em 6% 3em 0;
- margin: 0;
- }
- /* fix up the collapsibles - expanded on desktop */
- .content-secondary .ui-collapsible-heading {
- display: none;
- }
- .content-secondary .ui-collapsible-contain {
- margin:0;
- }
- .content-secondary .ui-collapsible-content {
- display: block;
- margin: 0;
- padding: 0;
- }
- .type-interior .content-secondary .ui-li-divider {
- padding-top: 1em;
- padding-bottom: 1em;
- }
- .type-interior .content-secondary {
- margin: 0;
- padding: 0;
- }
+echo '</style>';
+
+echo '<link rel="stylesheet" href="'.$labsPath.'css/local.css.php?labsPath='.$labsPath.'" />';
-}
-@media all and (min-width: 750px){
- .type-home .ui-content,
- .type-interior .ui-content {
- background-position: 39%;
- }
- .content-secondary {
- width: 34%;
- }
- .content-primary {
- width: 56%;
- padding-right: 1%;
- }
- .type-interior .ui-content {
- background-position: 34%;
- }
-}
-
-@media all and (min-width: 1200px){
- .type-home .ui-content{
- background-position: 38.5%;
- }
- .type-interior .ui-content {
- background-position: 30%;
- }
- .content-secondary {
- width: 30%;
- padding-right:6%;
- margin: 30px 0 20px 5%;
- }
- .type-interior .content-secondary {
- margin: 0;
- padding: 0;
- }
- .content-primary {
- width: 50%;
- margin-right: 5%;
- padding-right: 3%;
- }
- .type-interior .content-primary {
- width: 60%;
- }
-}
-
-</style>';
+
if (strstr($_SERVER['HTTP_USER_AGENT'], 'iPhone') || strstr($_SERVER['HTTP_USER_AGENT'], 'iPod') || strstr($_SERVER['HTTP_USER_AGENT'], 'iPad')) {
echo '<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
--- a/include/db/servicealert-dao.inc.php
+++ b/include/db/servicealert-dao.inc.php
@@ -2,7 +2,7 @@
function getServiceOverride($date="") {
global $conn;
$query = "Select * from calendar_dates where date = :date and exception_type = '1' LIMIT 1";
- debug($query,"database");
+ // debug($query,"database");
$query = $conn->prepare($query); // Create a prepared statement
$query->bindParam(":date", date("Ymd",($date != "" ? $date : time())));
$query->execute();
@@ -12,4 +12,42 @@
}
return $query->fetch(PDO::FETCH_ASSOC);
}
+
+function getCurrentAlerts() {
+ global $conn;
+ $query = "SELECT * from servicealerts_alerts";
+ //debug($query, "database");
+ $query = $conn->prepare($query);
+ //if ($stop_sequence != "") $query->bindParam(":stop_sequence", $stop_sequence);
+ $query->execute();
+ if (!$query) {
+ databaseError($conn->errorInfo());
+ return Array();
+ }
+ return $query->fetchAll();
+}
+function getInformedAlerts($id,$filter_class,$filter_id) {
+
+ global $conn;
+ $query = "SELECT * from servicealerts_informed where servicealert_id = :servicealert_id";
+
+ if ($filter_class != "" && $filter_id != "") {
+ $query .= " AND (informed_class = :informed_class OR informed_class = 'network') AND informed_id = :informed_id";
+
+ }
+ //debug($query, "database");
+ $query = $conn->prepare($query);
+ if ($filter_class != "" && $filter_id != "") {
+ $query->bindParam(":informed_class", $filter_class);
+ $query->bindParam(":informed_id", $filter_id);
+ }
+ $query->bindParam(":servicealert_id", $id);
+ $query->execute();
+ if (!$query) {
+ databaseError($conn->errorInfo());
+ return Array();
+ }
+ return $query->fetchAll();
+}
+
?>
--- a/labs/myway_timeliness.php
+++ b/labs/myway_timeliness.php
@@ -6,17 +6,16 @@
<!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../js/flot/excanvas.min.js"></script><![endif]-->
<script language="javascript" type="text/javascript" src="../js/flot/jquery.flot.js"></script>
- <div id="placeholder" style="width:800px;height:600px"></div>
+ <div id="placeholder" style="width:1000px;height:600px"></div>
<script type="text/javascript">
$(function () {
var d = new Date();
d.setUTCMinutes(0);
d.setUTCHours(0);
var midnight = d.getTime();
- var d1 = [];
+
<?php
-//$query = "select * from myway_timingdeltas order by time";
-$query = "select * from myway_timingdeltas where abs(timing_delta) < 2*(select stddev(timing_delta) from myway_timingdeltas) order by time;";
+$query = "select * from myway_timingdeltas where abs(timing_delta) < 2*(select stddev(timing_delta) from myway_timingdeltas) order by route_full_name;";
$query = $conn->prepare($query);
$query->execute();
if (!$query) {
@@ -24,39 +23,34 @@
return Array();
}
$i = 0;
+$labels = Array();
+$lastRoute = "";
foreach ($query->fetchAll() as $delta) {
- echo "d1.push([ midnight+ (1000*" . midnight_seconds(strtotime($delta['time'])) . "), {$delta['timing_delta']}]); \n";
- $i++;
+ $routeName = $delta['route_full_name'];
+ if (strstr($routeName," 3")) $routeName = "312-319";
+ else $routeName = preg_replace('/\D/', '', $routeName);
+ if ($routeName != $lastRoute) {
+ $i++;
+ echo " var d$i = [];";
+ $lastRoute = $routeName;
+ $labels[$i] = $routeName;
+ }
+ echo "d$i.push([ midnight+ (1000*" . midnight_seconds(strtotime($delta['time'])) . "), {$delta['timing_delta']}]); \n";
};
?>
- var d2 = [];
-<?php
-//$query = "select * from myway_timingdeltas order by route_full_name";
-$query = "select * from myway_timingdeltas where abs(timing_delta) < 2*(select stddev(timing_delta) from myway_timingdeltas) order by route_full_name";
-$query = $conn->prepare($query);
-$query->execute();
-if (!$query) {
- databaseError($conn->errorInfo());
- return Array();
-}
-$i = 0;
-foreach ($query->fetchAll() as $delta) {
- // echo "d2.push([$i, {$delta['timing_delta']}]); \n";
- $i++;
-};
-?>
var placeholder = $("#placeholder");
var plot = $.plot(placeholder, [
- {
- data: d1,
- points: { show: true }
- },
- {
- data: d2,
- points: { show: true }
- },
+<?php
+foreach ($labels as $key => $label) {
+ echo " {
+ data: d$key,
+ points: { show: true },
+ label: '$label'
+ },";
+}
+ ?>
],
{
xaxis: {
@@ -111,7 +105,7 @@
showTooltip(item.pageX, item.pageY,
- item.series.label + " of " + x + " "+ time +" = " + y +" ( "+ y/60+" minutes )");
+ item.series.label + " at "+ time +" = " + y +" ( "+ y/60+" minutes )");
}
}
else {
--- a/servicealerts_api.php
+++ b/servicealerts_api.php
@@ -6,48 +6,43 @@
- add,remove,patch
- stop
- trip
+ - network
- patterns (WHERE=)
- route (short_name or route_id)
- street
- stop
- trip */
-/* header {
- gtrtfs_version: "1"
- timestamp: 1307926866
+$return = Array();
+$return['header']['gtrtfs_version'] = "1";
+$return['header']['timestamp'] = time();
+$return['entities'] = Array();
+foreach(getCurrentAlerts() as $alert) {
+ $informedEntities = getInformedAlerts($alert['id'],$_REQUEST['filter_class'],$_REQUEST['filter_id']);
+ if (sizeof($informedEntities) >0) {
+ $entity = Array();
+ $entity['id'] = $alert['id'];
+ $entity['alert']['active_period']['start'] = $alert['start'];
+ $entity['alert']['active_period']['start'] = $alert['end'];
+ $entity['alert']['url']['translation'] = $alert['url'];
+ $entity['alert']['description']['translation'] = $alert['description'];
+
+ foreach ($informedEntities as $informedEntity) {
+ $informed = Array();
+ $informed[$informedEntity['informed_class']."_id"] = $informedEntity['informed_id'];
+ if ($informedEntity['informed_action'] != "") $informed["x-action"] = $informedEntity['informed_action'];
+ //$informed[$informedEntity['class']."_type"] = $informedEntity['type'];
+ $entity['informed'][] = $informed;
+ }
+ $return['entities'][] = $entity;
+ }
}
-entity {
- id: "21393"
- alert {
- active_period {
- start: 1307955600
- end: 1307988000
- }
- informed_entity {
- route_id: "100"
- route_type: 1
- }
- url {
- translation {
- text: "http://trimet.org/alerts/"
- }
- }
- description_text {
- translation {
- text: "Rose Festival fleet departures will cause bridge lifts until around 10 a.m. Expect delays."
- }
- }
- }
-}*/
-$return = Array();
-
-header('Content-Type: text/javascript; charset=utf8');
+//header('Content-Type: text/javascript; charset=utf8');
// header('Access-Control-Allow-Origin: http://bus.lambdacomplex.org/');
header('Access-Control-Max-Age: 3628800');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');
if (isset($_GET['callback'])) {
$json = '(' . json_encode($return) . ');'; //must wrap in parens and end with semicolon
- print_r($_GET['callback'] . $json); //callback is prepended for json-p
-
+ //print_r($_GET['callback'] . $json); //callback is prepended for json-p
}
else echo json_encode($return);
?>
--- a/stop.php
+++ b/stop.php
@@ -12,6 +12,7 @@
// expand out to all platforms
}*/
+
$stops = Array();
$stopPositions = Array();
$stopNames = Array();
@@ -60,8 +61,13 @@
}
}
include_header($stop['stop_name'], "stop");
+/*$serviceAlerts = json_decode(getPage(curPageURL() . "/servicealerts_api.php?filter_class=stop&filter_id=".$stopid) , true);
+
+foreach($serviceAlerts['entities'] as $serviceAlert) {
+ echo '<div id="servicewarning">'.$serviceAlert['alert']['description']['translation'].'</div>';
+}*/
+
echo '<span class="content-secondary">';
-timePlaceSettings();
echo $stopLinks;
if (sizeof($stops) > 0) {
trackEvent("View Stops", "View Combined Stops", $stop["stop_name"], $stop["stop_id"]);
@@ -76,6 +82,7 @@
)
)) ;
}
+timePlaceSettings();
echo '</span><span class="content-primary">';
echo ' <ul data-role="listview" data-inset="true">';
if (sizeof($allStopsTrips) > 0) {