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 () { $.post(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.length) { shownNotice = [{ title: "暂时没有系统公告" }]; } $(".search-tips-container").html(noticeTemplate(shownNotice)); } }; var resetUnreadItems = function () { unreadNotice = null; renderUnreadNotice(); }; var closeNotice = function () { $("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(); }); });