Light12306/RwTicketAssistantV2/app/infobar/scripts/main.js

1413 lines
42 KiB
JavaScript
Raw Normal View History


//刷票页面
$(function () {
var $doc = $(document);
var initialized = false;
var currentUser = null;
//UI初始化
$("#seatTypeList label").each(function (i, e) {
e.dataset["index"] = i;
});
//联系人搜索
$("#addp_search_key")
.searchDelay()
.bind("search.fish.searchdelay", function (e, key) {
if (!key) {
$("#contactList button").show();
$("#addp_search_clear").prop("disabled", true);
} else {
$("#contactList button").hide().filter("[data-key*=" + key + "], [data-fl*=" + key.toUpperCase() + "]").show();
$("#addp_search_clear").prop("disabled", !key);
}
});
$("#addp_search_clear").click(function () {
$("#addp_search_key").val("").searchDelay("search");
});
//日期选择
(function () {
var dateLoopContainer = $("#dateLoopBox");
var date = new Date().trimToDay();
var html = [];
for (var j = 0; j < 25; j++) {
var nd = date.addDays(j);
html.push("<button type='button' class='btn btn-primary btn-sm' data-fulldate='" + nd.format("yyyy-MM-dd") + "' data-date='" + nd.format("MM-dd") + "'>" + nd.format("MM-dd") + "</button>");
}
dateLoopContainer.html(html.join(""));
$doc.on("click", "#dateLoopContainer button", function () {
//点击删除
var btn = $(this);
var dt = this.dataset.fulldate;
currentUser.currentProfile.dateloop = _.without(currentUser.currentProfile.dateloop, dt, null);
currentUser.save();
btn.remove();
$("#dateLoop .modal-body button[data-fulldate='" + dt + "']").prop("disabled", false);
$("#dateLoopBtn").prop("disabled", false);
message.sendToTab({ action: "removeDateLoop", detail: dt });
});
$doc.on("click", "#dateLoopBox button", function () {
var btn = $(this);
currentUser.currentProfile.dateloop.push(this.dataset.fulldate);
$("#dateLoopContainer").append(btn.clone().removeClass("btn-primary").addClass("btn-default"));
this.disabled = true;
currentUser.save();
$("#dateLoopBtn").prop("disabled", currentUser.currentProfile.dateloop.length >= 5);
if (currentUser.currentProfile.dateloop.length >= 5) {
$("#dateLoop").modal("hide");
}
message.sendToTab({ action: "addDateLoop", detail: this.dataset.fulldate });
});
message.addAction("addDateLoop", function () {
$("#dateLoop .modal-body button[data-fulldate='" + this + "']:enabled").click();
});
message.addAction("removeDateLoop", function () {
$("#dateLoopContainer button[data-fulldate='" + this + "']").click();
});
})();
var applyProfile = function (p) {
if (!p) return;
//处理席别
var seatContainer = $("#seatTypeList");
2014-09-02 21:41:17 +08:00
p.selectedSeatType = p.selectedSeatType || [];
var bakst = p.selectedSeatType;
seatContainer.find(":checkbox:checked").each(function () {
this.checked = false;
$(this).change();
});
$.each(bakst, function () {
seatContainer.find(":checkbox[value=" + this + "]:not(:checked)").prop("checked", true).change();
});
p.selectedSeatType = bakst;
2014-09-02 21:41:17 +08:00
p.selectedTrain = p.selectedTrain || [];
$("#trains").val(p.selectedTrain.join(',')).change();
trains.importTags(p.selectedTrain.join(','));
//联系人
2014-09-02 21:41:17 +08:00
currentUser.currentProfile.passengers = currentUser.currentProfile.passengers || [];
$("#passengers").html($.map(currentUser.currentProfile.passengers, function (e) { return e.toHtml(true); }).join(""));
$("#btnAddPassengerD, #btnAddPassengerM").prop("disabled", currentUser.currentProfile.passengers.length >= 5);
//日期轮查
(function () {
var dateloop = $("#dateLoopContainer");
var cd = new Date().trimToDay();
dateloop.empty();
$("#dateLoop button").prop("disabled", false);
var loopFiltered = [];
2014-09-02 21:41:17 +08:00
currentUser.currentProfile.dateloop = currentUser.currentProfile.dateloop || [];
$.each(currentUser.currentProfile.dateloop, function () {
var dd = new Date(this + '');
if (dd >= cd) {
dateloop.append("<button type='button' class='btn btn-default btn-sm' data-fulldate='" + dd.format("yyyy-MM-dd") + "' data-date='" + dd.format("MM-dd") + "'>" + dd.format("MM-dd") + "</button>");
loopFiltered.push(this + '');
}
currentUser.currentProfile.dateloop = loopFiltered;
$("#dateLoop button[data-fulldate='" + this + "']").prop("disabled", true);
});
$("#dateLoopBtn").prop("disabled", currentUser.currentProfile.dateloop.length >= 5);
})();
//各种选项
$("input[data-profile-key], select[data-profile-key]").each(function () {
var ele = this;
var $ele = $(this);
var type = ele.type;
var key = ele.dataset.profileKey;
var profile = currentUser.currentProfile;
var propertyvalue = profile[key];
if (typeof propertyvalue == 'boolean') {
if (type == "radio") {
$("input[name=" + ele.name + "][value=" + (propertyvalue ? 1 : 0) + "]")[0].checked = true;
} else if (type == "checkbox") {
ele.checked = propertyvalue;
} else {
$ele.val(propertyvalue ? "1" : "0");
}
} else {
$ele.val(propertyvalue);
}
});
message.sendToTab({ action: "profileChanged", detail: JSON.parse(JSON.stringify(p)) });
};
var applyPassengers = function () {
if (!currentUser) return;
$("#contactList").empty();
if (!currentUser.passengers || !currentUser.passengers.length) {
$("#addp_refresh").bsButton("loading");
currentUser.reloadPassengers();
return;
}
var list = $.map(currentUser.passengers, function (e) {
return e.toHtml();
});
$("#contactList").html(list.join("")).find();
$("#addp_refresh").bsButton("reset");
$("#addPassenger").trigger("show.bs.modal");
};
//席别
$("input:checkbox[name=seat]").change(function () {
if (!currentUser) return;
var $cb = $(this);
var $parent = $cb.parent();
var $container = $parent.parent();
if (this.checked) {
//已选中?
$parent.addClass("highlight");
//将其移动到队列末端
var $p = $parent.prevAll().find(":checkbox:checked").parent().last();
$p.length ? $p.after($parent) : $container.prepend($parent);
if (currentUser && initialized) currentUser.currentProfile.selectedSeatType.push(this.value);
if (initialized)
message.sendActionToTab("addSeat", this.value);
} else {
//取消选择,则放回原来的位置
var index = $parent[0].dataset.index;
var notChecked = $parent.nextAll().find(":checkbox:not(:checked)").parent();
$parent.removeClass("highlight");
if (!notChecked.length) $container.append($parent);
else {
if (index > notChecked.last()[0].dataset.index) {
notChecked.last().after($parent);
} else if (index < notChecked.first()[0].dataset.index) {
notChecked.first().before($parent);
} else {
for (var j = 1; j < notChecked.length; j++) {
if (notChecked[j - 1].dataset.index < index && notChecked[j].dataset.index > index) {
notChecked.eq(j - 1).after($parent);
break;
}
}
}
}
if (currentUser && initialized) currentUser.currentProfile.selectedSeatType = _.without(currentUser.currentProfile.selectedSeatType, this.value);
if (initialized)
message.sendActionToTab("removeSeat", this.value);
}
if (currentUser && initialized) currentUser.save();
});
$doc.on("click", ".seatCheckLink", function () {
var codes = this.dataset.target;
$("input:checkbox[name=seat]:checked").each(function () {
this.checked = false;
$(this).change();
});
for (var j = 0; j < codes.length; j++) {
$("input:checkbox[name=seat][value=" + codes[j] + "]").prop("checked", true).change();
}
message.sendActionToTab("seatReset", currentUser.currentProfile.selectedSeatType);
});
message.addAction("addSeat", function () {
$("input:checkbox[name=seat][value=" + this + "]:not(:checked)").prop("checked", true).change();
});
message.addAction("removeSeat", function () {
$("input:checkbox[name=seat][value=" + this + "]:checked").prop("checked", false).change();
});
//车次
var trains = $("#trains").tagsInput({
height: "20px",
defaultText: "输入车次",
removeWithBackspace: true,
spacer: ",. |\n",
width: "100%",
onChange: function () {
if (!currentUser || !initialized) return;
currentUser.currentProfile.selectedTrain = _.filter($("#trains").val().split(','), function (e) { return e; });
currentUser.save();
},
onAddTag: function (id) {
if (!initialized) return;
message.sendActionToTab("addTrain", id);
},
onRemoveTag: function (id) {
if (!initialized) return;
message.sendActionToTab("removeTrain", id);
},
autosize: false,
onBeforeAdd: function (v) {
return v ? v.toUpperCase() : "";
}
});
$("#addtrain_ok").click(function () {
var val = $.trim($("#addtrain_code").val());
if (!val) return;
//自动转换成正则表达式
val = val.replace(/[\s,.。-]/g, "|").replace(/[\^\$]/g, "").toUpperCase();
if (trains.tagExist(val))
return;
try {
new RegExp("^" + val + "$");
} catch (e) {
alert("表达式不正确...");
return;
}
trains.addTag(val);
$("#addTrain").modal("hide");
});
$doc.on("click", ".cmd-addtrain", function () {
if (!trains.tagExist(this.dataset.code))
trains.addTag(this.dataset.code);
});
message.addAction("addTrain", function () {
var code = this + '';
if (!trains.tagExist(code))
trains.addTag(code);
});
message.addAction("removeTrain", function () {
var code = this + '';
if (trains.tagExist(code))
trains.removeTag(code);
});
//联系人
(function () {
$doc.on("show.bs.modal", "#addPassenger", function () {
var container = $("#addPassenger");
var buttons = container.find("[data-key]");
buttons.prop("disabled", false);
2014-09-02 21:41:17 +08:00
buttons.filter("[data-invalid]").prop("disabled", true);
buttons.find("i").remove();
$.each(currentUser.currentProfile.passengers, function () {
buttons.filter("[data-key='" + this.key + "']").prop("disabled", true).prepend('<i class="glyphicon glyphicon-ok" style="margin-right:5px;"></i>');
});
});
var addPassenger = function (p) {
if (_.findWhere(currentUser.currentProfile.passengers, { key: p.key }))
return;
currentUser.currentProfile.passengers.push(p);
$("#passengers").append(p.toHtml(true));
$("#btnAddPassengerD, #btnAddPassengerM").prop("disabled", currentUser.currentProfile.passengers.length >= 5);
currentUser.save();
message.sendActionToTab("addPassenger", p);
};
var removePassenger = function (p) {
if (!_.findWhere(currentUser.currentProfile.passengers, { key: p.key }))
return;
currentUser.currentProfile.passengers = _.without(currentUser.currentProfile.passengers, p);
$("#btnAddPassengerD, #btnAddPassengerM").prop("disabled", false);
currentUser.save();
message.sendActionToTab("removePassenger", p);
};
$doc.on("click", "#addPassenger button[data-key]", function () {
if (currentUser.currentProfile.passengers.length >= 5) {
alert("亲,联系人最多只能选择五个哦。");
$("#addPassenger").modal("hide");
return;
}
this.disabled = true;
$(this).prepend('<i class="glyphicon glyphicon-ok" style="margin-right:5px;"></i>');
var key = this.dataset.key;
var p = _.findWhere(currentUser.passengers, { key: key });
addPassenger(p);
if (currentUser.currentProfile.passengers.length >= 5) {
$("#addPassenger").modal("hide");
}
});
$doc.on("click", "#passengers button[data-key]", function () {
var key = this.dataset.key;
var $btn = $(this);
$btn.remove();
removePassenger(_.findWhere(currentUser.currentProfile.passengers, { key: key }));
});
$("#addmp_ok").click(function () {
if (currentUser.currentProfile.passengers.length >= 5) {
alert("亲,联系人最多只能选择五个哦。");
$("#enterPassenger").modal("hide");
return;
}
var idtype = $("#addmp_idtype").val();
var id = $("#addmp_id").val();
var name = $("#addmp_name").val();
var type = $("#addmp_tickettype").val();
if (!name || !id) {
alert("咦,名字或证件号没写....");
return;
}
var p = _.findWhere(currentUser.currentProfile.passengers, { name: name, idtype: idtype, id: id });
if (p) {
alert("这位客官,同名同证件号的乘客已经添加过了哦。。");
return;
}
var pm = new Passenger(name, type, passengerTypeCode[type], idtype, idTypeCode[idtype], id, "");
pm.save = false;
addPassenger(pm);
$("#enterPassenger").modal("hide");
});
message.addAction("addPassenger", function () {
//查找联系人
var p = _.findWhere(currentUser.passengers, { name: this.name, typename: this.typename, id: this.id });
if (p)
addPassenger(p);
});
message.addAction("removePassenger", function () {
//查找联系人
var p = _.findWhere(currentUser.passengers, { name: this.name, typename: this.typename, id: this.id });
if (p) {
$("#passengers button[data-key='" + p.key + "']").click();
}
});
})();
//时间选择初始化
var ranges = $("#timerangeContainer select");
for (var i = 0; i < 24; i++) {
var number = (i < 10 ? "0" : "") + i;
ranges.each(function () {
this.options[i] = new Option(number + ":" + (this.dataset.isend ? "59" : "00"), i);
});
}
//各种杂项以及通过 data-profile-key 进行绑定的元素
(function () {
$doc.on("change", "[data-profile-key]", function () {
if (!currentUser)
return;
var ele = this;
var $ele = $(this);
var type = ele.type;
var key = ele.dataset.profileKey;
var profile = currentUser.currentProfile;
var propertyvalue = profile[key];
if (typeof propertyvalue == 'boolean') {
if (type == "radio") {
profile[key] = $("input[name=" + ele.name + "]:checked")[0].value == "1";
} else if (type == "checkbox") {
profile[key] = ele.checked;
} else {
profile[key] = $ele.val() == "1";
}
} else if (typeof propertyvalue == 'number') {
profile[key] = parseInt($ele.val() + '');
} else {
profile[key] = $.trim($ele.val());
}
profile.save();
if (initialized) {
message.sendActionToTab("miscChanged", { key: key, value: profile[key] });
}
});
$doc.on("change", "[data-sysconfigkey]", function () {
if (!sysConfig)
return;
var ele = this;
var $ele = $(this);
var type = ele.type;
var key = ele.dataset.sysconfigkey;
var profile = {};
if (type == "radio") {
profile[key] = $("input[name=" + ele.name + "]:checked")[0].value == "1";
} else if (type == "checkbox") {
profile[key] = ele.checked;
} else {
profile[key] = $.trim($ele.val());
}
message.sendAction("setUserConfig", profile);
});
message.addAction("miscChanged", function () {
var obj = $("[data-profile-key='" + this.key + "']");
var dom;
if (!obj.length) return;
var type = obj.attr("type");
if (typeof this.value === 'boolean') {
if (type === "radio") {
dom = $("input[name=" + obj[0].name + "][value=" + (this.value ? 1 : 0) + "]")[0];
if (dom.checked === this.value) return;
dom.checked = this.value;
} else if (type === "checkbox") {
if (obj[0].checked === this.value) return;
obj[0].checked = this.value;
} else {
if (obj.val() == this.value) return;
obj.val(this.value ? "1" : "0");
}
} else {
if (obj.val() == this.value) return;
obj.val(this.value);
}
obj.change();
});
})();
//出行计划保存
$("#cmdSaveTravelMethod").click(function () {
message.sendToTab({ action: "getStationInfo" }, function (response) {
var info = response.detail;
if (!info || !info.fromCode || !info.toCode) {
alert("您还木有选择出发地目标地和出发时间呢。。。");
return;
}
$.extend(currentUser.currentProfile, info);
var name = prompt("请输入新的出行计划的名称(如果名称已经存在,则会被覆盖):", info.fromText + "--" + info.toText);
if (!name)
return;
//移除老的
$("#historyList button").each(function () {
if ($(this).text() == name) {
var buttonGroup = $(this).closest(".btn-group");
currentUser.savedProfile.remove(buttonGroup.data("travel"));
buttonGroup.removeData("travel");
buttonGroup.remove();
return false;
}
});
var pro = new Profile(currentUser.currentProfile);
pro.name = name;
currentUser.savedProfile.add(pro);
var html = $('<div class="btn-group"><button class="btn btn-info btn-sm">' + pro.name + '</button><button class="btn btn-sm btn-danger" data-cmd="deleteTravelWay"><i class="glyphicon glyphicon-remove"></i></button></div>');
html.data("travel", pro);
$("#historyList").append(html);
notification.create({ iconUrl: LARGEICON, message: "出行计划已保存~", title: "订票助手" });
});
});
$doc.on("click", "button[data-cmd=deleteTravelWay]", function () {
var buttonGroup = $(this).closest(".btn-group");
var name = buttonGroup.find("button:first").text();
if (!confirm("确定要删除出行计划【" + name + "】吗?")) return;
currentUser.savedProfile.remove(buttonGroup.data("travel"));
buttonGroup.removeData("travel");
buttonGroup.remove();
});
$doc.on("click", "#historyList button.btn-info", function () {
var btn = $(this);
var name = $.trim(btn.text());
var profile = _.findWhere(currentUser.savedProfile.list, { name: name });
currentUser.resetCurrentProfile(profile);
applyProfile(currentUser.currentProfile);
message.sendActionToTab("profileReload", profile);
$("#travelHistory").modal("hide");
});
//重置请求
$("#btnResetProfile").click(function () {
if (!currentUser) return;
currentUser.currentProfile.reset();
applyProfile(currentUser.currentProfile);
currentUser.save();
});
//刷新联系人
$("#addp_refresh").click(function () {
if (!currentUser || this.disabled)
return;
currentUser.passengers = [];
applyPassengers();
});
if (currentUser) {
applyProfile(currentUser.currentProfile);
applyPassengers();
}
//还原状态
var applyUser = function (user) {
initialized = false;
if (!user)
return;
currentUser = user;
applyProfile(user.currentProfile);
applyPassengers();
//出行计划
var travelContainer = $("#historyList");
travelContainer.empty();
$.each(currentUser.savedProfile.list, function () {
var t = this;
var html = $('<div class="btn-group"><button class="btn btn-info btn-sm">' + t.name + '</button><button class="btn btn-sm btn-danger" data-cmd="deleteTravelWay"><i class="glyphicon glyphicon-remove"></i></button></div>');
html.data("travel", this);
travelContainer.append(html);
});
//绑定事件
currentUser.on("passengerLoaded", function () {
applyPassengers();
});
currentUser.on("userSaved", function () {
message.sendToTab({ action: "profileChanged", detail: JSON.parse(JSON.stringify(currentUser.currentProfile)) });
});
initialized = true;
};
//处理消息
(function () {
message.addAction("stationInfoUpdate", function () {
if (currentUser) {
$.extend(currentUser.currentProfile, this);
currentUser.save();
}
});
message.addAction("getCurrentProfile", function (response) {
if (!currentUser) return;
response({ detail: JSON.parse(JSON.stringify(currentUser.currentProfile)) });
});
message.addAction("getCurrentUser", function (response) {
if (!currentUser) return;
response({ detail: JSON.parse(JSON.stringify(currentUser)) });
});
message.addAction("passengerUpdated", function () {
currentUser.reloadPassengers(this);
});
message.addAction("userOptionChanged", function () {
currentUser.options = $.extend(currentUser.options, this);
currentUser.save();
});
2014-09-03 23:20:12 +08:00
message.addAction("setResignMode", function () {
var p = this;
if (p.profile) {
currentUser.currentProfile = $.extend(currentUser.currentProfile, p.profile);
//禁用学生票的选择
$("input:checkbox[name=optStudent]").prop("disabled", true);
} else {
$("input:checkbox[name=optStudent]").prop("disabled", false);
}
});
})();
(function () {
//刷新统计
var counters = $("#queryStat");
var refreshCount = 0;
var statData = null;
var lastCity = null;
var enableBus = new Date() < new Date("2014-01-25 00:00:00");
var enableSfc = new Date() < new Date("2014-02-15 00:00:00");
var manuallyHide = false;
var checkIsBus = function (fromText, toText) {
if (!enableBus || manuallyHide) return false;
if (fromText.indexOf("北京") === -1) return false;
var target = ["呼和浩特", "太原", "菏泽", "大连", "合肥", "南京", "武汉"];
var valid = _.some(target, function (e) { return toText.indexOf(e) !== -1; });
return valid;
};
2014-09-03 23:20:12 +08:00
var checkSfc = function (formText, toText) {
if (!enableSfc || manuallyHide) return false;
return true;
};
message.addAction("queryStatisticsReport", function () {
statData = this;
var stat = this.stat;
var profile = currentUser.currentProfile;
if (lastCity !== profile.fromCode + profile.toCode) {
refreshCount = 0;
lastCity = profile.fromCode + profile.toCode;
}
refreshCount++;
counters.css("visibility", "visible");
counters.find("span:eq(0)").html("第 " + refreshCount + " 次查票");
if (this.failed) {
counters.find("span:eq(1)").html("查询失败");
counters.find("span:eq(2)").html("查询失败");
} else {
counters.find("span:eq(1)").html("" + stat.original.length + " 趟车");
counters.find("span:eq(2)").html(stat.filtered.length + " 趟车过滤");
}
if ($("#btnRefresh.btn-success, #btnRefresh.btn-info").length) {
chrome.extension.sendMessage({ ticketEvent: 'refresh', times: refreshCount });
}
2014-09-01 20:24:57 +08:00
//$("#bus").hide();
//if (refreshCount >= 30) {
// var a = $("#bus");
// if (checkIsBus(profile.fromText, profile.toText)) {
// //可以橙色大巴
// a.find("span").html("免费橙色大巴送您顺利回家");
// a.find("a:eq(0)").attr("href", "http://www.ijinshan.com/bus/");
// a.show();
// } else if (checkSfc(profile.fromText, profile.toText)) {
// //显示顺风车
// a.find("span").html("免费顺风车助您顺利回家");
// a.find("a:eq(0)").attr("href", "http://www.shunfengche.org/NewYearAction.aspx");
// a.show();
// }
//}
});
2014-09-03 23:20:12 +08:00
$("#bus a:last").click(function () {
manuallyHide = true;
$(this).parent().hide();
});
$(document).on("show.bs.modal", "#queryResult", function () {
var div = $("#queryResult .modal-body");
var html = [];
var showGroup = function (reason, title) {
var list = _.where(statData.stat.filtered, { reason: reason });
if (!list.length) return;
html.push("<strong>" + title + "</strong>" + _.map(list, function (e) { return e.code; }).join("; "));
};
showGroup(1, " 因无票被过滤");
showGroup(2, "因发站不同过滤");
showGroup(3, "因到站不同过滤");
showGroup(4, "时间不对被过滤");
showGroup(5, "非预定车次过滤");
if (!html.length) {
html.push("<em>没有车次被过滤</em>");
}
div.html(html.join("<br />"));
});
})();
//刷票
(function () {
var btn = $("#btnRefresh");
var btnIcon = btn.find("i");
var btnText = btn.find("span");
var timer = null;
var nextTime;
var stat;
localStorage.removeItem("lastStatics");
message.addAction("pageInitCall", function () {
if (!btn.hasClass("btn-primary")) {
btn.click();
}
});
var formatNumber = function (n) {
n = (n / 10) + '';
return n.indexOf(".") == -1 ? n + ".0" : n;
};
var countDown = function () {
nextTime--;
if (nextTime <= 0) {
doQuery();
} else {
$("#stopTimer").text(formatNumber(nextTime) + "秒后重查");
}
};
var isInQuery = false;
//var messageTimeoutTimer = null;
//var doQueryTimeout = function () {
// if (btn.hasClass("btn-success"))
// btn.click();
// clearTimeout(messageTimeoutTimer);
// messageTimeoutTimer = null;
//};
var doQuery = function () {
isInQuery = true;
resetTimer();
var queryDate, byAuto = btn.hasClass("btn-success");
if (byAuto && currentUser.currentProfile.dateloop && currentUser.currentProfile.dateloop.length) {
//如果是自动查询的,那就看看是否需要轮换日期
var currentDateLoop = $("#dateLoopContainer button.btn-primary");
if (!currentDateLoop.length) {
//没有轮查
currentDateLoop = $("#dateLoopContainer button:first");
queryDate = currentDateLoop[0].dataset.fulldate;
currentDateLoop.addClass("btn-primary");
} else {
var nextLoop = currentDateLoop.next();
currentDateLoop.removeClass("btn-primary");
if (!nextLoop.length) {
//最后一个了,那就木有了。改查第一天
queryDate = currentUser.currentProfile.depDate;
} else {
queryDate = nextLoop[0].dataset.fulldate;
nextLoop.addClass("btn-primary");
}
}
} else {
//获得当前信息
message.sendToTab({ action: "getStationInfo" }, function (response) {
var info = response.detail;
$.extend(currentUser.currentProfile, info);
btn.removeClass("btn-primary").addClass("btn-success");
queryDate = currentUser.currentProfile.depDate;
});
}
btnText.text("正在查询");
btnIcon.removeClass().addClass("glyphicon glyphicon-flash");
$("#stopTimer").hide();
message.sendToTab({ action: "startQuery", detail: { date: queryDate, byAuto: byAuto } }, function (resp) {
if (!resp.canquery)
btn.click();
if (resp.sysAuto) {
btnText.text("系统刷新中");
btn.removeClass("btn-success").addClass("btn-info");
btnIcon.removeClass().addClass("glyphicon glyphicon-dashboard");
}
});
//messageTimeoutTimer = setTimeout(doQueryTimeout, 2000);
};
var reset = function () {
resetTimer();
btn.removeClass("btn-success btn-info").addClass("btn-primary");
$("#dateLoopContainer button").removeClass("btn-primary");
btnText.text("开始刷票");
$("#stopTimer").hide();
btnIcon.removeClass().addClass("glyphicon glyphicon-refresh");
message.sendToTab({ action: "profileChanged", detail: JSON.parse(JSON.stringify(currentUser.currentProfile)) });
};
var resetTimer = function () {
if (timer !== null) {
clearInterval(timer);
timer = null;
}
};
btn.click(function () {
$(".btnMute").click();
if (btn.hasClass("btn-success")) {
reset();
} else if (btn.hasClass("btn-info")) {
reset();
message.sendActionToTab("stopQuery");
} else {
var profile = currentUser.currentProfile;
message.sendAction("track", {
type: 95, values: [
profile.fromCode,
profile.fromText,
profile.toCode,
profile.toText,
2014-09-03 23:20:12 +08:00
profile.depDate,
(profile.passengers && Passenger.length) || 0,
(profile.selectedTrain && profile.selectedTrain.length) || 0,
(profile.selectedSeatType && profile.selectedSeatType.length) || 0,
(profile.dateloop && profile.dateloop.length) || 0,
profile.autoSubmitEnabled,
profile.partialSubmitEnabled,
profile.studentTicket
]
});
doQuery();
}
});
if (!btn.hasClass("btn-primary"))
btn.click();
2014-09-03 23:20:12 +08:00
message.addAction("autoSubmitOrder", function () {
var profile = currentUser.currentProfile;
message.sendAction("track", {
2014-09-03 23:20:12 +08:00
type: 86, values: [
profile.fromCode,
profile.fromText,
profile.toCode,
profile.toText,
profile.depDate,
(profile.passengers && Passenger.length) || 0,
(profile.selectedTrain && profile.selectedTrain.length) || 0,
(profile.selectedSeatType && profile.selectedSeatType.length) || 0,
(profile.dateloop && profile.dateloop.length) || 0,
profile.autoSubmitEnabled,
profile.partialSubmitEnabled,
profile.studentTicket
]
});
});
message.addAction("queryStatisticsReport", function () {
if (!isInQuery && (this.failed !== true)) return;
//clearTimeout(messageTimeoutTimer);
isInQuery = false;
stat = this;
localStorage['lastStatics'] = JSON.stringify(this);
if (stat.auto) {
//找到了!
btn.click();
$(document).trigger("ticketAvailable", stat.auto);
return;
}
//倒计时5秒
if (stat.nextTime > 0 && (!btn.hasClass("btn-info") || stat.failed)) {
nextTime = Math.round(stat.nextTime * 10);
$("#stopTimer").text(formatNumber(nextTime) + "秒后重查");
$("#stopTimer").show();
btnText.text("停止查询");
btn.removeClass().addClass("btn btn-success");
btnIcon.removeClass().addClass("glyphicon glyphicon-time");
if (timer)
clearInterval(timer);
timer = setInterval(countDown, 100);
}
});
message.addAction("checkAutoRefreshEnabled", function (response) {
response({ enabled: btn.hasClass("btn-success") });
});
message.addAction("getLastAutoData", function (response) {
if (stat)
response(stat);
else {
var json = localStorage["lastStatics"];
if (json)
response(JSON.parse(json));
else {
response(null);
}
}
});
message.addAction("queryStop", function () {
$.extend(currentUser.currentProfile, this);
reset();
});
})();
$doc.on("currentUserChange", function (e, u) {
if (!u) {
if (currentUser && currentUser.username === sessionStorage["12306_sessionuser"]) return;
if (sessionStorage["12306_sessionuser"]) {
u = new LoginUser(sessionStorage["12306_sessionuser"]);
} else return;
}
applyUser(u);
});
});
$(function promptUser() {
var audio = new Audio("http://static.liebao.cn/resources/audio/music2.ogg");
$(document).on("ticketAvailable", function (e, auto) {
if (sysConfig.enableSoundPrompt) {
$(".btnMute").show();
audio.loop = true;
audio.play();
}
if (sysConfig.enablePopupPrompt) {
notification.create({
iconUrl: "/icons/icon_128.png",
title: "订票助手",
message: "主公,查到车次:" + auto.train + " " + (seatTypeFull[auto.seat]) + ",快灰来订票啊!"
});
}
message.sendAction("attention", { tabid: message.tab.id, windowid: message.tab.windowId });
});
$(".btnMute").click(function () {
audio.pause();
$(".btnMute").hide();
});
});
//提交页面
$(function () {
//倒计时
(function () {
var current = 0;
var span = null;
var timer = null;
message.addAction("pageInitCall", function () {
if (timer) {
clearInterval(timer);
timer = null;
}
if (this.page != 'onSubmitPage') return;
current = (ISOTN ? sysConfig.otnAutoSubmitOrderDelay : sysConfig.dynamicAutoSubmitOrderDelay) / 100;
span = $("#countDown").removeClass("label-success").addClass("label-warning").html("请等待 <em>" + (current / 100) + "</em> 秒再提交订单").find("em");
if (current > 0) {
timer = setInterval(function () {
current -= 1;
if (current > 0) {
var str = (current / 10) + "";
span.html(str + (str.length < 2 ? ".0" : ""));
} else {
span.parent().removeClass("label-warning").addClass("label-success").html("可以提交订单了哦");
clearInterval(timer);
timer = null;
message.sendToTab({ action: "enableSubmitOrder" });
}
}, 100);
} else {
span.parent().removeClass("label-warning").addClass("label-success").html("可以提交订单了哦");
message.sendToTab({ action: "enableSubmitOrder" });
}
});
})();
//实时余票
(function () {
var timer = null;
var stat = null;
message.addAction("reportSubmitInfo", function () {
resetTimer();
stat = this;
message.sendAction("track", {
type: 96,
values: [
stat.from,
stat.to,
stat.date,
2014-09-03 23:20:12 +08:00
0,
stat.td,
stat.code || ""
]
});
startRtp();
});
message.addAction("sysConfigUpdate", function () {
if ($(".rtp:visible").length)
startRtp();
});
message.addAction("pageInitCall", function () {
resetTimer();
});
var resetTimer = function () {
if (timer) {
clearInterval(timer);
timer = null;
}
};
var startRtp = function () {
resetTimer();
if (!sysConfig.enableRealTimeTicketQuery) {
$(".rtp").find("span").remove().append("<span class='label label-normal label-danger'>实时余票查询已被自动关闭</span>");
return;
}
if (!stat) return;
timer = setInterval(queryTicket, 10000);
queryTicket();
};
var queryTicket = function () {
otsweb.queryTicket(stat.from, stat.to, stat.date, stat.td, stat.code, function (data) {
if (!data) {
$(".rtp").find("span").remove().end().append('<span class="label label-danger label-normal">警告:车次已无票</label>');
} else {
var html = [];
$.each(data, function (i, d) {
if (i[0] == "_" || d === -2 || !seatType[i]) return; //没有席别
html.push("<span class='label label-normal label-" + (d > 0 ? "primary" : "default") + "'>");
html.push(seatType[i]);
html.push(" ");
if (d == -1) {
html.push("未售");
} else if (d == 9999) {
html.push("大量");
} else if (d > 0) {
html.push(d + "张");
} else {
html.push("无");
}
html.push("</span> ");
});
$(".rtp").find("span").remove().end().append(html.join(""));
}
});
};
})();
});
//登录页面
$(function () {
var tempUser = null;
if (localStorage["tempuser"])
tempUser = JSON.parse(localStorage["tempuser"]);
message.addAction("logTempUser", function () {
tempUser = this;
localStorage["tempuser"] = JSON.stringify(this);
});
message.addAction("logTempUserSuccess", function () {
if (!tempUser)
return;
message.sendAction("track", { type: 93 });
var name = this.name;
var user = new LoginUser(tempUser.tempUser);
sessionStorage["12306_sessionuser"] = tempUser.tempUser;
user.dispname = name;
user.save();
//记录到列表
USERS.add(tempUser.tempUser, name, sysConfig.rememberLoginPwd ? tempUser.tempPwd : "");
//记录最后用户
localStorage.setItem("12306_lastUser", JSON.stringify({ name: tempUser.tempUser, pwd: sysConfig.rememberLoginPwd ? tempUser.tempPwd : "" }));
sessionStorage.setItem("12306_sessionuser", tempUser.tempUser);
//刷新列表
refreshList();
$(document).trigger("currentUserChange", user);
});
message.addAction("getLastUser", function (r) {
if (localStorage["12306_lastUser"]) {
var info = JSON.parse(localStorage["12306_lastUser"]);
r({
name: info.name,
pwd: info.pwd
});
}
});
var refreshList = function () {
$("#userSelect option").remove();
var dom = document.getElementById("userSelect");
if (_.size(USERS.list) > 0) {
dom.options[dom.options.length] = new Option('请选择', '');
$.each(USERS.list, function (e) {
dom.options[dom.options.length] = new Option(this.dispname, e);
});
} else {
dom.options[dom.options.length] = new Option('还没有记录...', '');
}
};
refreshList();
$("#userSelect").change(function () {
var value = $(this).val();
if (!value) return;
var item = USERS.find(value);
if (!item) return;
message.sendToTab({
action: "fillUserInfo",
detail: {
name: value,
pwd: item.password
}
});
});
$("#deleteUser").click(function () {
var user = $("#userSelect").val();
if (!user) return;
var u = USERS.find(user);
if (confirm("确定要删除已经记录的用户【" + u.dispname + "】吗?所有的相关设置(如出行计划等)都将会被删除。")) {
USERS.remove(user);
refreshList();
}
});
//日期
(function () {
var from = new Date().trimToDay();
var today = from.addDays(19);
$("#presellTip").html(from.format("MM月dd日") + " ~ " + today.format("MM月dd日"));
})();
});
//页面切换
(function () {
var switchPage = function (page) {
//所有页面
var pages = $(".containerWraper > div");
var currentPage = pages.filter(".current");
var toPage = pages.filter("#" + page);
if (currentPage.attr("id") == page || !toPage.length)
return;
currentPage.addClass("slideOut").removeClass("current");
toPage.removeClass("slideOut").addClass("current");
if (toPage[0].dataset.hidelogo) {
$("#mainWrapper").addClass("nologo");
}
else {
$("#mainWrapper").removeClass("nologo");
}
};
message.addAction("pageInitCall", function () {
var page = this.page;
if (page == "onMainPage")
return;
message.sendAction("track", { type: 94, values: [page] });
if (this.username) {
sessionStorage["12306_sessionuser"] = this.username;
}
$(".special").hide();
if (page === "onLoginPage") {
$(".btnMute").click();
$(".loginPageOnly, .preSellTip").show();
if (localStorage["12306_lastUser"]) {
$("#userSelect").val(JSON.parse(localStorage["12306_lastUser"]).name);
}
switchPage("loginPage");
return;
}
if (ISOTN && !this.logined) {
//未登录,无法使用
$(".btnMute").click();
$(".notLoginTip").show();
switchPage("loginPage");
return;
}
if (page === "onQueryPage") {
if (!localStorage["query_usageTip"]) {
localStorage["query_usageTip"] = "1";
notification.create({
iconUrl: "/icons/icon_128.png",
title: "欢迎使用~",
message: "订票助手增强并扩展了系统的刷票功能。不出意外的话,您可以完全用不到系统的更多选项区域了,助手会帮你直接设置好的,只需要在最上方的助手工具区设置即可。"
});
}
$(".btnMute").click();
$("#queryStat").css("visibility", "hidden");
$(document).trigger("currentUserChange");
switchPage("queryPage");
} else if (page === "onSubmitPage") {
$(document).trigger("currentUserChange");
switchPage("loginPage");
$(".submitPageOnly").show();
} else if (page === "onMainPage") {
}
});
message.addAction("onUnvalidPage", function () {
$(".special").hide();
$(".preSellTip").show();
$(".unvalid").show();
switchPage("loginPage");
});
})();
(function () {
var servervalidTimer = setTimeout(function () {
notification.create({
iconUrl: "/icons/icon_128.png",
title: "订票助手好像没有正常启动",
message: "看起来好像订票助手没有启动。建议您重新打开浏览器。"
});
}, 3000);
message.sendAction("servervalid", null, function (resp) {
clearTimeout(servervalidTimer);
if (resp.valid <= 0) {
$("#chkEnableSmartDns").parent().hide();
$("#curServerSpeed").parent().remove();
} else {
//显示服务器速度
var refreshSpeed = function () {
chrome.runtime.sendMessage({ action: "getCurrentServer" }, function (m) {
var data = ISOTN ? m["kyfw.12306.cn"] : m["dynamic.12306.cn"];
var speed = data.speed;
var cls = speed === 0 ? "label-default" : speed < 0 ? "label-danger" : speed < 100 ? "label-success" : speed < 400 ? "label-warning" : "label-danger";
$("#curServerSpeed").removeClass().addClass("label label-normal " + cls).html(speed > 0 ? speed + " 毫秒" + (data.rate ? " (加速" + data.rate + "%)" : "") : speed < 0 ? "无法连接" : "正在帮你测速...");
});
};
refreshSpeed();
setInterval(refreshSpeed, 3000);
}
});
2014-09-03 23:20:12 +08:00
message.addAction("serverStateChange", function (m) {
var state = m.state;
if (state === 1) {
$("#curServerSpeed").html("正在更新节点列表...");
} else if (state === 2) {
$("#curServerSpeed").html("正在为您测速...");
} else if (state === 3) {
$("#curServerSpeed").html("正在准备备用节点...");
}
});
var refreshSysConfig = function () {
$("#chkEnableSmartDns")[0].checked = sysConfig.enableServerAutoChange;
//$("#chkEnableAutoCaptcha")[0].checked = sysConfig.enableAutoCaptcha;
if (sysConfig.enableServerAutoChange) {
$("#curServerSpeed").parent().show();
} else {
$("#curServerSpeed").parent().hide();
}
$("input[data-sysconfigkey], select[data-sysconfigkey]").each(function () {
var ele = this;
var $ele = $(this);
var type = ele.type;
var key = ele.dataset.sysconfigkey;
var profile = sysConfig;
var propertyvalue = profile[key];
if (typeof propertyvalue == 'boolean') {
if (type == "radio") {
$("input[name=" + ele.name + "][value=" + (propertyvalue ? 1 : 0) + "]")[0].checked = true;
} else if (type == "checkbox") {
ele.checked = propertyvalue;
} else {
$ele.val(propertyvalue ? "1" : "0");
}
} else {
$ele.val(propertyvalue);
}
});
};
$(document).on("sysConfigUpdated", function () {
refreshSysConfig();
//message.sendAction("getBaseSysConfig", null, function (response) {
// if (response.detail.enableAutoCaptcha && ISOTN) {
// $("#chkEnableAutoCaptcha").parent().show();
// } else {
// $("#chkEnableAutoCaptcha").parent().hide();
// }
//});
});
if (sysConfig)
refreshSysConfig();
$("#chkEnableSmartDns").change(function () {
message.sendAction("setUserConfig", { enableServerAutoChange: this.checked });
if (this.checked) {
$("#curServerSpeed").parent().show();
} else {
$("#curServerSpeed").parent().hide();
}
});
//$("#chkEnableAutoCaptcha").change(function () {
// message.sendAction("setUserConfig", { enableAutoCaptcha: this.checked });
//});
})();
$(function () {
//更新信息
var info, updateTipIsShown = false;
var checkUpdateInfo = function () {
if (!info.hasUpdate)
$("#updateAvailable").hide();
else {
log.print("nv-" + info.version);
var a = $("#updateAvailable").show().find("a");
a.attr("title", "最新版:" + info.version);
if (info.url)
a.attr("href", info.url);
if (!updateTipIsShown) {
updateTipIsShown = true;
notification.create({
title: "很高兴地告诉你有新版咯", message: "订票助手新版本发布:" + info.version + ",建议立刻收到碗里去哦。切记多手准备不要全靠哪个渠道买票哦。难道你忘记了大明湖畔的电话订票了吗~~", buttons: [
{
title: "点击这里立刻更新", iconUrl: "/infobar/theme/plus_16.png", onClick: function () {
chrome.tabs.create({ url: info.url });
}
}
]
});
}
}
$("#systemNotification").html(info.notify || "暂无通知");
};
message.sendAction("getUpdateInfo", null, function (data) {
info = data;
checkUpdateInfo();
});
message.addAction("updateInfoRefreshed", function () {
info = this;
checkUpdateInfo();
});
message.sendAction("triggerUpdate");
message.addAction("isAlive", function (r) {
r(true);
});
});
//infobar模式兼容
if (NONINFOBARMODE) {
$("body").addClass("iframemode");
var url = "https://kyfw.12306.cn/otn/leftTicket/init";
document.write('<div id="iframewrapper"><iframe src="' + url + '" frameborder="0" height="100%" width="100%"></iframe></div>');
};
2014-09-10 21:49:46 +08:00
//切换到新版本
(function() {
$("#lnkGoAdv").click(function() {
chrome.tabs.getSelected(function(tab) {
chrome.tabs.update(tab.id, {
url: "http://12306.liebao.cn/"
});
});
});
})();
$(function () {
message.addAction("isReady", function (r) {
r({ ready: true });
});
//var vt = $("div.compatibleIntro").show();
//if (ISOTN) {
// vt.find("a").html("老版<br />12306").attr("href", NONINFOBARMODE ? chrome.extension.getURL("/infobar/main.html") : "http://dynamic.12306.cn/otsweb/");
//} else {
// vt.find("a").html("新版<br />12306").attr("href", NONINFOBARMODE ? chrome.extension.getURL("/infobar/main.html?new") : "http://kyfw.12306.cn/otn/");
//}
message.sendAction("track", { type: 98 });
});