Light12306/Web12306/js/ui/ui-sysnotice.js

95 lines
3.1 KiB
JavaScript

define(function (require, exports, module) {
var data = require("../data.js");
var utility = require("../utility.js");
var storage = require("../platform/storage.js");
var loadUrl = data.sysNoticeUrl;
var savedNotice = JSON.parse(storage.get("systemNotice") || "{}");
var unreadNotice = null;
var noticeTemplate = $("#search_tips_template").doT();
var port = require("../platform/extensionPort.js");
var loadSystemNotice = function () {
$.getJSON(loadUrl).done(function (json) {
var nowDate = new Date().getTime();
json.lastLoad = new Date().getTime();
if (savedNotice.lastReadId) {
var takeCounter = 0;
json.items = _.filter(json.items, function (i) {
return (!i.expiresTime || nowDate > i.expiresTime) && (!savedNotice.lastReadId || savedNotice.lastReadId < i.id || (takeCounter++ < data.sysNoticeMaxShowCount));
});
json.lastReadId = savedNotice.lastReadId;
}
savedNotice = json;
unreadNotice = _.filter(savedNotice.items, function (s) {
return !savedNotice.lastReadId || savedNotice.lastReadId < s.id;
});
renderUnreadNotice();
storage.put("systemNotice", savedNotice);
//定时器
setTimeout(loadSystemNotice, data.sysNoticeLoadInterval);
port.track(data.trackTypes.LOAD_SYS_NOTICE);
});
};
var renderUnreadNotice = function () {
if (unreadNotice && unreadNotice.length) {
$(".search-tips-container").html(noticeTemplate(unreadNotice));
$("#index-tip-body").find(".order-num").html(unreadNotice.length).show();
} else {
$("#index-tip-body").find(".order-num").html("0").hide();
//取最新的几条通知
var shownNotice = _.first(savedNotice.items, data.sysNoticeMaxShowCount);
if (!shownNotice || !shownNotice.length) {
shownNotice = [{ title: "暂时没有系统公告" }];
}
$(".search-tips-container").html(noticeTemplate(shownNotice));
}
};
var resetUnreadItems = function () {
unreadNotice = null;
renderUnreadNotice();
};
var closeNotice = function () {
if (!$("section.search-tips-container:visible").length)
return;
$("section.search-tips-container").fadeOut();
if (!savedNotice || !savedNotice.items) return;
if (savedNotice.items.length)
savedNotice.lastReadId = savedNotice.items[0].id;
else savedNotice.lastReadId = 0;
resetUnreadItems();
};
//是否需要立刻刷新通知?
if (!savedNotice.lastLoad || (new Date().getTime() - savedNotice.lastLoad) > 1000 * 60 * 30) {
loadSystemNotice();
} else {
unreadNotice = _.filter(savedNotice.items, function (s) {
return savedNotice.lastReadId < s.id;
});
renderUnreadNotice();
var nextTime = Math.min(savedNotice.lastLoad ? new Date() - savedNotice.lastLoad : data.sysNoticeLoadInterval, data.sysNoticeLoadInterval);
setTimeout(loadSystemNotice, nextTime);
}
$("#index-tip-body").click(function (e) {
$(this).next().fadeIn();
e.stopPropagation();
port.track(data.trackTypes.OPEN_SYS_NOTICE);
});
$(document).on("click", "section.search-tips-container i.fa-times", function () {
closeNotice();
}).on("click", ".search-tips-container", function (e) {
e.preventDefault();
e.stopPropagation();
}).on("click", function () {
closeNotice();
});
});