//輸入起/迄整點、寬、高及是否顯示時間標題列,傳回顯示全日時段狀態的<div>
function genTimeline(startHour, endHour, width, height, incHeader) {
$.Darkthread.tools.addDefaultStyles(".dttl_BookingBlock", {
".dttl_BookingBlock": {
float: "left", position: "absolute",
margin: "0px", padding: "0px", height: "100%",
"font-size": "9pt", "background-color": "#dddddd",
"border-left": "solid #444444 1px",
"border-right": "solid #444444 1px"
},
".dttl_Timeline": {
border: "solid black 1px", position: "relative"
},
".dttl_TimelineHeader": {
border: "solid black 1px",
backgroundColor: "#dddddd",
"font-size": "8pt", position: "relative"
},
".dttl_SplitLine": {
float: "left", position: "absolute",
"border-left": "solid gray 1px",
width: "1px", height: "100%"
}
});
var $tl = $("<div class='dttl_Timeline' />");
$tl.height(height).width(width);
var hourWidth = width / (endHour - startHour);
var $h = $("<div />");
if (incHeader)
$h.width(width).height(15).addClass("dttl_TimelineHeader");
for (var i = startHour; i < endHour; i++) {
var vLine =
"<div class='dttl_SplitLine' style='left:" +
hourWidth * (i - startHour) + "px;' />";
$tl.append(vLine);
if (incHeader)
$h.append("<div>" + i + "</div>").append(vLine);
}
if (incHeader) {
$h.find("div").css({
float: "left", margin: "0px", width: hourWidth + "px",
textAlign: "center"
});
}
var $container = $("<div class='dttl_Container' />");
$container.append($h).append($tl)
.data("hourWidth", hourWidth)
.data("startHour", startHour)
.data("endHour", endHour);
return $container;
}
//display會直接顯示在方格中,可支援HTML語法
//detail以title="..."方式處理,請給純文字
//cssOption可為css屬性物件,例如: { border:"...", color:"..." }或是className
//會傳回<div> jQuery物件供後續應用
function addBooking(timeline, startTime, endTime, display, detail, cssOption) {
if (cssOption == undefined || typeof cssOption == "string")
cssOption = { };
var $tl = $(timeline);
var sh = $tl.data("startHour"), eh = $tl.data("endHour");
//將時間先轉成小數
var p = startTime.split(':');
var st = parseInt(p[0]) + (parseFloat(p[1]) / 60);
//小於startHour, 以startHour為準
if (st < sh) st = sh;
p = endTime.split(':');
var et = parseInt(p[0]) + (parseFloat(p[1]) / 60);
//大於endHour, 以endHour為準
if (et > eh) et = eh;
//算出起始位置及寬度
var hw = $tl.data("hourWidth");
var w = (et - st) * hw;
var x = (st - sh) * hw;
//加入顯示元素
var $container = $tl.children("div:last");
var $dv = $("<div class=\"dttl_BookingBlock\"/>");
$dv.css(cssOption).css({
left: x + "px", width: w + "px",
opacity: 0.7
});
$dv.html("<span style='padding: 2px;'>" + display + "</span>")
.attr("title", startTime + "-" + endTime + "\n" + detail);
if (typeof cssOption == "string")
$dv.addClass(cssOption);
$container.append($dv);
return $dv;
}