本帖最後由 samuelho668 於 2019-5-26 18:42 編輯
全面電子化算啦, 每次改少少野又要晒錢逐個站又印又貼
電子化左佢順便合併埋個到站時間, 最好顯示埋下一班車而家去到邊, 唔好淨係得個時間
加個制俾乘客選路線編號, 一個 mon 搞掂晒
|
|
|
|
|
kiwai 發表於 2019-5-26 21:59
77K 的新豬紙係幾時生效?
20/5/2019
現有核突聯盟成員包括 1, 5, 5A, 8, 48X, 60M, 60X, 77K, 86, 101, 101R, 101X, 102, 102P, 102R, 103, 104, 107, 107P, 109, 110, 111, 112, 113, 115, 115P, 116, 117, 118, 118P, 170, 171, 182, 182X, 219X, 268A, 268P, 291P, 302, 302A, 307, 307P, 601, 601P, 603, 606, 606A, 606X, 619, 619P, 619X, 621, 673, 678, 680, 680A, 680P, 680X, 681, 681P, 690, 904, 905, 905P, 914, 914P, 914X, 948, 948P, 948X, 980X, 982X, 985, 985A, 985B, N118, N121, N122, N170, N171, N182, N619, N680, N691
有漏請指,有部份線應該只係部份站換左 |
|
|
|
|
FY5856 發表於 2019-5-28 07:57
20/5/2019
現有核突聯盟成員包括 1, 5, 5A, 8, 48X, 60M, 60X, 77K, 86, 101, 101R, 101X, 102, 102P, 1 ...
紅隧路線已全面更換 |
|
|
|
|
ATSE40 發表於 2019-5-26 17:06
然而事實係啱啱倒返轉,時間表行數係越縮越少。見到好似85A咁15 - 25顯得出成間公司都係倒後行緊,中巴啲 ...
鼓勵人下載佢地個官方apps望!唔係點推高使用人數同下載次數 |
|
|
|
|
jaclam 發表於 2019-5-26 10:02
斷估改完站名嘅 28 都有改
28 改站名改左一斷時間,琴日5月29日先換垃圾紙
仲有垃圾紙最新成員:81C
版本上寫 3/6/2019 生效,唔知係咪減班啦吓
現有核突聯盟成員包括 1, 5, 5A, 8, 28, 48X, 60M, 60X, 77K, 81C, 86, 101, 101R, 101X, 102, 102P, 102R, 103, 103P, 104, 106, 106A, 106P, 107, 107P, 109, 110, 111, 111P, 112, 113, 115, 115P, 116, 117, 118, 118P, 170, 171, 171A, 171P, 182, 182X, 219X, 268A, 268P, 291P, 302, 302A, 307, 307P, 601, 601P, 603, 606, 606A, 606X, 619, 619P, 619X, 621, 673, 678, 680, 680A, 680P, 680X, 681, 681P, 690, 904, 905, 905P, 914, 914P, 914X, 948, 948P, 948X, 980X, 982X, 985, 985A, 985B, N118, N121, N122, N170, N171, N182, N619, N680, N691
有漏請指 |
|
|
|
|
利申: IT9.
purely use KMB routesearch, internally it use AJAX to call JSON format for data detail.
Using the jquery, JSON, and copy and paste the javascript on routesearch, already can generate below map, using browser.
Don't know why KMB make it so uninformational....
Paste with code for your interest. Just for fun only, not very serious on the layout and accuracy. Use with care.
If KMB use below style, please pay me back($) for my suggestion. Although I admit copying the code from KMB, I provide the layout.
Code for your reference..
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Home page - RouteList</title>
<link rel="stylesheet" href="/lib/bootstrap/dist/css/bootstrap.css" />
<link rel="stylesheet" href="/css/site.css" />
</head>
<body>
<div class="container">
<main role="main" class="pb-3">
<style>
.ts_td{
padding: 0px 5px 0px 5px;
text-align:center;
}
</style>
<div width="100%">
<div style="width:220px;float:left;height:800px;">
<div id="route-number" style="height:60px; background-color:black; font-size:35px;text-align:center; vertical-align:central; color:white;">
</div>
<div id="service-detail" style="">
</div>
<div id="service-detail2">
</div>
</div>
<div>
<div id="route-from" style="background-color:darkblue; color:white; text-align:center; font-size:22px;font-weight:bold; padding:4px 4px 4px 4px;"></div>
<div id="detail">
</div>
<div id="route-to" style="background-color:darkblue; color:white; text-align:center; font-size:22px;font-weight:bold; padding:4px 4px 4px 4px;"></div>
</div>
</div>
<div class="text-center">
</div>
</main>
</div>
<script src="/lib/jquery/dist/jquery.js"></script>
<script src="/lib/bootstrap/dist/js/bootstrap.bundle.js"></script>
<script type="text/javascript">
// assume A4 size, 800 pt height, 600 pt width.
var s = "";
var s2 = "";
var route = "978";
var serviceTypeList = [];
var bound = 1;
var fontsize = "14";
console.log(route.substring(0, 1));
var content_height = 800 - 40 * 2;
var totalStop = 10; // arb. value for init
var stopHeight = 10; // arb. value for init
route = route.toUpperCase();
switch(route.substring(0, 1) )
{
case "9":
$("#route-number").css('background', "#009140");
console.log("a");
break;
case "6":
$("#route-number").css('background', "#FF0000");
console.log("b");
break;
case "3":
$("#route-number").css('background', "#FF0000");
console.log("c");
break;
case "1":
$("#route-number").css('background', "#FF0000");
console.log("d");
break;
default:
$("#route-number").css('background', "#000000");
break;
}
var BoundAndServiceType = [];
$(document).ready(function () {
//alert("Hello");
$.getJSON("http://search.kmb.hk/KMBWebSite/Function/FunctionRequest.ashx?action=getroutebound&route="+ route, function (message) {
for (i = 0; i < message.length; i++) {
}
});
$.getJSON("http://search.kmb.hk/KMBWebSite/Function/FunctionRequest.ashx?action=getstops&route="+ route + "&bound=" + bound.toString() + "&serviceType=1", function (data) {
//console.log(data);
s = "<table><tbody>";
//console.log(data.data.route);
//console.log(data.data.basicInfo);
//console.log(data.data.routeStops);
//console.log(data.data.routeStops[0]["CName"]);
//console.log(data.data.routeStops.length);
totalStop = data.data.routeStops.length;
stopHeight = Math.floor(content_height / (totalStop-2));
console.log("stop height: " + stopHeight.toString());
if (data.data.routeStops.length > 50) {
fontsize = 12;
}
//for (i = 0; i < data.data.routeStops.length; i++) {
// skip start end stop.
for (i = 1; i < data.data.routeStops.length -2; i++) {
//console.log(data.data.routeStops["CName"]);
s += "<tr style='height:" + stopHeight + "px'><td style='width:35px;background-color:#555555;color:#FFFFFF;text-align:center;font-size:" + fontsize + "'>⬤</td><td style='padding-left:5px;font-size:" + fontsize + " '>" + SpecialCharacterReplace(data.data.routeStops["CName"]) + "</td><td>" + toTitleCase(data.data.routeStops["EName"]) + "</td></tr>";
//console.log(s);
}
s += "</tbody></table>";
$('#detail').prepend(s);
// set route from to..
$('#route-number').prepend(route);
// from to is not correct for stop...
//$('#route-from').prepend(data.data.basicInfo["OriCName"] +" " + toTitleCase(data.data.basicInfo["OriEName"]) );
//$('#route-to').prepend(data.data.basicInfo["DestCName"] +" " + toTitleCase(data.data.basicInfo["DestEName"]));
$('#route-from').prepend(SpecialCharacterReplace(data.data.routeStops[0]["CName"]) + " " + toTitleCase(data.data.routeStops[0]["EName"]));
$('#route-to').prepend(SpecialCharacterReplace(data.data.routeStops[data.data.routeStops.length - 1]["CName"]) + " " + toTitleCase(data.data.routeStops[data.data.routeStops.length - 1]["EName"]));
});
$.getJSON("http://search.kmb.hk/KMBWebSite/Function/FunctionRequest.ashx?action=getSpecialRoute&route=" + route + "&bound=1&serviceType=1", function (data) {
//$('#service-detail2').prepend(s2);
});
$.getJSON("http://search.kmb.hk/KMBWebSite/Function/FunctionRequest.ashx?action=getschedule&route=" + route + "&bound=1&serviceType=1", function (message) {
//s2 = "<table><tbody>";
//console.log("AAAAAA");
////console.log(result);
//console.log(message.length);
//console.log(message.data["01"]);
//console.log(message.data.length);
var types = ["W", "MF", "MS", "S", "H", "D", "X"];
var html = "";
//var departureTimeTableRowsHtml = '';
var sorted = [];
for (var i in message.data) {
sorted.push(message.data);
}
sorted = sorted.sort(function (a, b) {
return a[0]["ServiceType"] - b[0]["ServiceType"];
});
console.log('sorted', sorted);
var this_idx = 0;
for (var idx in sorted) {
var times = sorted[idx];
html += addTimeTableRow(times, types, sorted[idx][0]["ServiceType"].trim() != "01", bound);
}
//for (i = 0; i < serviceTypeList.length; i++) {
// var s3 = serviceTypeList;
// console.log(s3);
// console.log(message.data[s3]);
// //for (j = 0; j < message.data.length; j++) {
// // console.log(message.data);
// // s2 += "<tr><td><div>From: " + message.data["Origin_Eng"] + " to: " + message.data["Destination_Eng"] + "</div></td></tr>";
// // for (j = 0; j < message.data.length; j++) {
// // console.log(message.data[j]["BoundText1"]);
// // s2 += message.data[j]["BoundText1"] + message.data[j]["BoundTime1"] + "</td></tr>";
// // }
// //}
//}
//for (i = 0; i < data.data["01"].length; i++) {
// //console.log(data.data["01"]["BoundText1"]);
// s2 += "<tr><td>From: " + data.data["01"]["Origin_Eng"] + " to: " + data.data["01"]["Destination_Eng"]
// + data.data["01"]["BoundText1"] +
// + data.data["01"]["BoundTime1"] +
// "</td></tr>";
//}
s2 += "</tbody></table>";
$('#service-detail').prepend(html);
});
});
function SpecialCharacterReplace(str) {
return str.replace("", "邨")
}
function toTitleCase(str) {
return str.toLowerCase().replace(/(?:^|\s)\w/g, function(match) {
return match.toUpperCase();
});
}
function addTimeTableRow(times, types, isSpecial, bound) {
console.log(times);
var html = "<div style='font-size:8px; margin-bottom:10px;';><table><tbody>";
if (times.length > 0) {
console.log("At a...");
//var startFromENG = "Departure from " + (bound == 1 ? testen_org : testen_org);//dojo.byId("busDetailsOrigin").innerHTML;
//var startFromCHI = "由 " + (bound == 1 ? testtc_org : testtc_org);//dojo.byId("busDetailsOrigin").innerHTML;
var startFromENG = "Departure from " + (bound == 1 ? toTitleCase(times[0]["Origin_Eng"]) : toTitleCase(times[0]["Destination_Eng"]));//dojo.byId("busDetailsOrigin").innerHTML;
var startFromCHI = "由 " + (bound == 1 ? SpecialCharacterReplace(times[0]["Origin_Chi"]) : SpecialCharacterReplace(times[0]["Destination_Chi"]));//dojo.byId("busDetailsOrigin").innerHTML;
if (isSpecial) {
startFromENG = "[Special] " + startFromENG;
startFromCHI = "[特別班次] " + startFromCHI;
}
var destinationENG = toTitleCase((bound == 1 ? times[0]["Destination_Eng"] : times[0]["Origin_Eng"]));
//if(this_route == '980X'){ destinationENG = (bound == 1 ? this_engdist : this_engdist); }
// if (destinationENG && destinationENG != null && destinationENG.length > 0) {
// destinationENG = " To " + destinationENG;
// }
var destinationCHI = (bound == 1 ? SpecialCharacterReplace(times[0]["Destination_Chi"]) : SpecialCharacterReplace(times[0]["Origin_Chi"]));
//if(this_route == '980X'){ destinationCHI = (bound == 1 ? this_chidist : this_chidist); }
// if (destinationCHI && destinationCHI != null && destinationCHI.length > 0) {
// destinationCHI = " 往 " + destinationCHI;
// }
var fromText = startFromCHI + " 出發";
if (destinationCHI.length > 0)
fromText += " 至" + destinationCHI;
fromText += " " +startFromENG ;
if (destinationENG.length > 0)
fromText += " to " + destinationENG;
//var fromText = getStrByLang(startFromENG, startFromCHI + " 出發", startFromCHI + " 出发") + getStrByLang(destinationENG, destinationCHI, destinationCHI);
//var fromText = startFromENG;
html +=
"<tr class='titleTR'>" +
"<td id='busRouteTimeTableSpectialTitle'>" +
"<span>" +
fromText +
"</span>" +
"<span>" +
//getStrByLang(times[0]["ServiceType_Eng"], times[0]["ServiceType_Chi"], times[0]["ServiceType_Chi"]) +
times[0]["ServiceType_Eng"] +
"</span>" +
"</td>" +
"</tr>";
console.log("At b...");
//type 1
var departureTimeTableRowsHtml = '';
for(var i in types){
departureTimeTableRowsHtml += addDepartureTimeTableRow(times, bound, types );
}
html += departureTimeTableRowsHtml;
//type 2
console.log("At c...");
var timeFreqTableRowsHtml = "";
for (var i in types) {
timeFreqTableRowsHtml += addTimeFreqTableRow(times, types, bound);
}
if (timeFreqTableRowsHtml == "" && departureTimeTableRowsHtml == "") {
return "";
}
console.log("At d...");
html += timeFreqTableRowsHtml;
}
html += "</table></div>";
return html;
}
function addTimeFreqTableRow(times, type, bound) {
var html = "";
//console.log('addTimeFreqTableRow',times,type,bound)
if (times.length > 0) {
var typeTitle = "";
switch (type.trim()) {
case "W":
typeTitle = getStrByLang2("Mon To Fri ", "星期一至五 ", "星期一至五 ");
break;
case "MF":
typeTitle = getStrByLang2("Mon To Fri", "星期一至五", "星期一至五");
break;
case "S":
typeTitle = getStrByLang2("Saturday", "星期六", "星期六");
break;
case "H":
typeTitle = getStrByLang2("Holiday", "星期日及公眾假期", "星期日及公众假期");
break;
case "MS":
typeTitle = getStrByLang2("Mon To Sat", "星期一至六", "星期一至六");
break;
case "D":
typeTitle = getStrByLang2("Everyday", "每天", "每天");
break;
case "X":
typeTitle = getStrByLang2(" ", " ", " ");
break;
}
if (typeTitle == "") {
return "";
}
//check is except holiday
var hasHoliday = false;
var hasEveryday = false;
for (var index in times) {
if (times[index]["DayType"].trim() == "H") {
hasHoliday = true;
}
if (times[index]["DayType"].trim() == "D") {
hasEveryday = true;
}
}
var exceptHolidayStatment = "";
//var routeNo = times[0]["Route"].trim();
//if (routeNo == "14D" || routeNo == "3P" || routeNo == "28S" || routeNo == "15P") {
// exceptHolidayStatment = getStrByLang("(except School & Public Holidays)", "(學校假期及公眾假期除外)", "(学校假期及公众假期除外)");
//} else {
if (!hasHoliday && !hasEveryday) {
exceptHolidayStatment = getStrByLang2("(except Public Holidays)", "(公眾假期除外)", "(公众假期除外)");
}
//}
html +=
"<tr>" +
"<td style='background-color:" + (type.trim() == "H" ? "#ff0000": "#cccccc" )+ "; text-align:center;'>" +
typeTitle + exceptHolidayStatment +
"</td>" +
"</tr>";
html +=
"<tr>" +
"<td>" +
"<table cellpadding='0' cellspacing='0'" +
"<tr>" +
"<td class='ts_td' >" +
getStrByLang("Time", "時間", "时间") +
"</td>" +
"<td class='ts_td' >" +
getStrByLang("Frequency(Minute)", "班次(分鐘)", "班次(分钟)") +
"</td>" +
"</tr>";
//eliminate invalid time
var validTimes = times.filter(function(time){
/*if bound is invalid, ignore that row*/
if(time['BoundTime'+ bound] === ""){
return false;
}
//try split the fromTo text
var fromToTime = (time["BoundText" + bound]).split('-');
/*if fromToTime it is empty, ignore that row*/
if(fromToTime.length == 0 ){
return false;
}
/*if from time in fromToTime is empty, ignore that row*/
if(fromToTime[0] == ''){
return false;
}
return true;
}).filter(function(time){
/* only retain rows of the current day type */
if(time["DayType"] && time["DayType"].trim() == type){
return true;
}else{
return false;
}
});
var addedRoadCount = 0;
var previousRow;
for (var idx = 0; idx < validTimes.length; idx++) {
var time = validTimes[idx];
var text = time["BoundText" + bound];
var timeStr = time["BoundTime" + bound];
//console.log(timeStr);
if (text && text != null && text.indexOf("-") != -1) {
addedRoadCount++;
var row = text.split("-");
//if previous row to time == current row from time
if (previousRow && (previousRow[1].trim() == row[0].trim())) {
//do nothing
} else {
html +=
"<tr>" +
"<td class='ts_td'>" +
row[0] +
"</td>" +
"<td>";
//only add the horizontal line if it is not the first of the time
if (addedRoadCount != 1) {
html += "<hr style='border-top: 1px solid #dddddd;border-bottom: 0px;border-left: 0px;border-right: 0px;' />";
}
}
//var rowspan = (timeDiff(row[0], row[1]) + 1);
var rowspan = 1;
html +=
"</td>" +
"</tr>" +
"<tr >" +
"<td style='text-align:center;'>????</td>" +
"<td class='ts_td'>" +
timeStr +
"</td>" +
"</tr>";
//if last row
if (idx === (validTimes.length - 1)) {
html +=
"<tr>" +
"<td class='ts_td'>" +
row[1] +
"</td>" +
"<td>" +
"" +
"</td>" +
"</tr>" +
"<tr>" +
"<td>" +
"</td>" +
"<td>" +
"</td>" +
"</tr>";
} else {
html +=
"<tr>" +
"<td class='ts_td'>" +
row[1] +
"</td>" +
"<td>" +
"<hr style='border-top: 1px solid #dddddd;border-bottom: 0px;border-left: 0px;border-right: 0px; margin:5px;' />" +
"</td>" +
"</tr>" +
"<tr>" +
"<td>" +
"</td>" +
"<td>" +
"</td>" +
"</tr>";
}
previousRow = row;
}
}
html +=
"</table>" +
"</td>" +
"</tr>";
if (addedRoadCount == 0) {
return "";
}
}
//console.log('addTimeFreqTableRow',html);
return html;
}
function addDepartureTimeTableRow(times, bound, inputDayType) {
var timeInTableCount = 0;
var timeInTableHtml = "<tr>";
var dayType = "";
var typeTitle = "";
for (var idx in times) {
var text = times[idx]["BoundText" + bound];
if (text && text != null && text.indexOf("-") == -1) {
dayType = times[idx]["DayType"].trim();
// console.log('inputDayType',inputDayType,dayType, inputDayType==dayType );
if (inputDayType == dayType) {
var array = text.split(",");
for (var i = 0; i < array.length; i++) {
var time = array.trim();
if (time.length > 0) {
if (timeInTableCount >= 5 && timeInTableCount % 5 == 0) {
timeInTableHtml += "</tr><tr>";
}
timeInTableHtml += "<td>" + time + "</td>";
timeInTableCount++;
}
}
}
}
}
timeInTableHtml += "</tr>";
console.log(timeInTableHtml);
switch (inputDayType.trim()) {
case "W":
typeTitle = getStrByLang2("Mon To Fri ", "星期一至五 ", "星期一至五 ");
break;
case "MF":
typeTitle = getStrByLang2("Mon To Fri", "星期一至五", "星期一至五");
break;
case "S":
typeTitle = getStrByLang2("Saturday", "星期六", "星期六");
break;
case "H":
typeTitle = getStrByLang2("Holiday", "星期日及公眾假期", "星期日及公众假期");
break;
case "MS":
typeTitle = getStrByLang2("Mon To Sat", "星期一至六", "星期一至六");
break;
case "D":
typeTitle = getStrByLang2("Everyday", "每天", "每天");
break;
case "X":
typeTitle = getStrByLang2(" ", " ", " ");
break;
}
//check is except holiday
var hasHoliday = false;
var hasEveryday = false;
for (var index in times) {
if (times[index]["DayType"].trim() == "H") {
hasHoliday = true;
}
if (times[index]["DayType"].trim() == "D") {
hasEveryday = true;
}
}
var exceptHolidayStatment = "";
var routeNo = times[0]["Route"].trim();
if (routeNo == "14D" || routeNo == "3P" || routeNo == "28S" || routeNo == "15P") {
exceptHolidayStatment = getStrByLang("<br />(except School & Public Holidays)", "<br />(學校假期及公眾假期除外)", "<br />(学校假期及公众假期除外)");
} else {
if (!hasHoliday && !hasEveryday) {
exceptHolidayStatment = getStrByLang("<br />(except Public Holidays)", "<br />(公眾假期除外)", "<br />(公众假期除外)");
}
}
var html = "";
if (timeInTableCount > 0) {
html +=
"<tr>" +
"<td style='background-color:" + (inputDayType.trim() == "H" ? "#ff0000": "#cccccc" )+ "; text-align:center;'>" +
typeTitle + exceptHolidayStatment +
"</td>" +
"</tr>" +
"<tr>" +
"<td class='spectialTD'>" +
"<table cellpadding='0' cellspacing='0' class='specialTable'>" +
"<tr>" +
"<td colspan='" + timeInTableCount + "' class='specialTDTitle fontSize11'>" +
getStrByLang2("Start Time", "開出時間", "开出时间") +
"</td>" +
"</tr>" +
timeInTableHtml +
"</table>" +
"</td>" +
"</tr>";
}
console.log(html);
return html;
}
function getStrByLang(s1, s2, s3) {
return (s1 + "<br />" + s2);
}
function getStrByLang2(s1, s2, s3) {
return (s2 + " " + s1);
}
function timeDiff(startTime, endTime) {
if (startTime && startTime != null && startTime != "" && endTime && endTime != null && endTime != "") {
var startDateTime = Date.parse('01/01/2015 ' + startTime.trim());
var endDateTime = Date.parse((endTime.indexOf("00:") != -1 ? '01/02/2015 ' : '01/01/2015 ') + endTime.trim());
var diff = endDateTime - startDateTime;
var diffHour = diff / 1000 / 60 / 60;
return parseInt(diffHour / 5);
}
return 0;
}
</script>
</body>
</html>
|
|
|
|
|
|
Advertisement
Advertisement
Advertisement
Advertisement
Advertisement
|