Light12306/Web12306/js/ui/widget_datebar.js

98 lines
2.6 KiB
JavaScript
Raw Normal View History

define(function (require, exports, module) {
var ev = require("../platform/EventObject.js");
var tpl = $("#datebar-template").doT();
var container = $("ul.date-bar-list");
2014-07-04 20:57:57 +08:00
var parser = require("../platform/parser.js");
2014-08-06 20:56:47 +08:00
var utility = require("../utility.js");
var getFirstDayOfWeek = function (date) {
2014-08-06 20:56:47 +08:00
date = utility.toDate(date);
var day = date.getDay();
if (day === 1)
return date;
2014-07-04 20:57:57 +08:00
var offset = day === 0 ? -6 : 1 - day;
2014-08-06 20:56:47 +08:00
return utility.addDays(date, offset);
};
var formatDate = function (date) {
var m = date.getMonth() + 1;
var d = date.getDate();
return (m < 10 ? "0" : "") + m + "月" + (d < 10 ? "0" : "") + d + "日";
};
var getDateString = function (date) {
2014-08-06 20:56:47 +08:00
return utility.formatDate(date, 'yyyy-MM-dd');
};
var WidgetDateBarUi = function () {
var that = this;
2014-08-06 20:56:47 +08:00
var today = utility.addDays(new Date(), 0);
var date = null;
2014-08-06 20:56:47 +08:00
var maxdays = utility.addDays(today, 30);
var currentHightDate = today;
ev.apply(this);
this.init = function () {
$("div.date-bar-prev").click(that.goPrev);
$("div.date-bar-next").click(that.goNext);
2014-07-04 20:57:57 +08:00
$(document).on("click", "ul.date-bar-list li:not(.disabled):not(.selected)", function () {
that.fireEvent("requireChangeDate", this.dataset.date);
});
that.go(today);
};
this.go = function (goDate, selectedDate) {
2014-08-06 20:56:47 +08:00
goDate = utility.toDate(goDate);
if (selectedDate)
2014-08-06 20:56:47 +08:00
currentHightDate = utility.toDate(selectedDate);
var d = getFirstDayOfWeek(goDate);
if (!date || d.getTime() !== date.getTime()) {
date = d;
that.render();
}
container.find("li:not(.disabled)").removeClass("selected").filter("[data-date='" + getDateString(currentHightDate) + "']").addClass("selected");
};
this.goNext = function () {
2014-08-06 20:56:47 +08:00
that.go(utility.addDays(date, 7));
};
this.goPrev = function () {
2014-08-06 20:56:47 +08:00
that.go(utility.addDays(date, -7));
};
this.render = function () {
var data = [];
var namestr = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
for (var i = 0; i < 7; i++) {
2014-08-06 20:56:47 +08:00
var d = utility.addDays(date, i);
data.push({
_date: d,
name: namestr[d.getDay()],
date: formatDate(d),
disabled: d < today || d > maxdays,
selected: d.getTime() == today.getTime(),
datecode: getDateString(d)
});
}
container.empty().html(tpl(data));
};
Object.defineProperty(this, "current", {
get: function () {
return date;
},
set: function (value) {
that.go(getFirstDayOfWeek(value));
}
});
return this;
};
WidgetDateBarUi.prototype = Object.create(ev);
WidgetDateBarUi.constructor = ev;
return new WidgetDateBarUi();
});