aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
author藍挺瑋 <lantw44@gmail.com>2012-12-19 02:54:29 +0800
committerLAN-TW <lantw44@gmail.com>2012-12-19 02:54:29 +0800
commit91b40965bb86ba62f1e91a9098991138bd746b68 (patch)
tree135bcc74672e35b4d4248385a31793dbef2fc465
parent52dec87ef00b93acbc02da685d49dc1ef65cb18f (diff)
downloadinccalendar-91b40965bb86ba62f1e91a9098991138bd746b68.tar.gz
inccalendar-91b40965bb86ba62f1e91a9098991138bd746b68.tar.zst
inccalendar-91b40965bb86ba62f1e91a9098991138bd746b68.zip
嘗試加入修改資料的功能,但仍有許多問題
-rw-r--r--css/month.css3
-rw-r--r--jinhtml/month.html15
-rw-r--r--jinhtml/skel.html2
-rw-r--r--js/caledit.js312
-rw-r--r--js/data.js25
-rw-r--r--js/month.js20
6 files changed, 358 insertions, 19 deletions
diff --git a/css/month.css b/css/month.css
index 47f825c..884cb1f 100644
--- a/css/month.css
+++ b/css/month.css
@@ -32,7 +32,7 @@ tbody#calbody td ul{
word-wrap: break-word;
overflow-x: hidden;
overflow-y: hidden;
- max-height: 200px;
+ max-height: 150px;
}
#timeselect_year, #timeselect_month{
font-family: serif;
@@ -56,6 +56,7 @@ tbody#calbody td ul{
#caledit_static_year, #caledit_static_month, #caledit_static_date,
#caledit_static_hour, #caledit_static_minute, #caledit_static_remind
{
+ text-align: right;
display: inline-block;
width: 40px;
}
diff --git a/jinhtml/month.html b/jinhtml/month.html
index 3f33200..2f6bddb 100644
--- a/jinhtml/month.html
+++ b/jinhtml/month.html
@@ -6,14 +6,9 @@
{% block onload %}
setyearmonth();
setmonthcal();
- inccal_fetch(value_year, value_month);
- calload();
var switchmonthobj = document.getElementById("switchmonth");
switchmonthobj.className += "selected";
switchmonthobj.onclick = "";
- status_bar_append("(Ctrl-L)清單模式 (Ctrl-左右)切換月份 (y)修改年 (m)修改月"
- + " (Enter)查看或編輯資料");
- status_bar_append("(0-9)快速選擇日期");
{% endblock %}
{% block headjs %}
@@ -21,6 +16,8 @@
<script src="js/caledit.js" type="text/javascript"></script>
<script src="js/data.js" type="text/javascript"></script>
<script type="text/javascript">
+ var shortcut_mainmsg = "(Ctrl-L)清單模式 (Ctrl-左右)切換月份 (y)修改年 " +
+ "(m)修改月 (Enter)查看或編輯資料 (0-9)快速選擇日期";
shortcut_bind();
</script>
{% endblock %}
@@ -64,11 +61,11 @@
<input type="button" value="返回月曆" style="background-color: #00FF00; font-size: large;" onclick="caledit_quit()">
</div>
<div id="caledit_left">
- <select id="caledit_select" size="20">
+ <select id="caledit_select" size="20" onchange="caledit_loader(this)">
</select>
</div>
<div id="caledit_right">
- <form id="cal" name="caleditform" onsubmit="">
+ <form id="cal" name="caleditform" onsubmit="return caledit_save_func()">
<input id="caledit_switchedit" type="button" value="編輯" onclick="caledit_edit()">
<span id="caledit_enabled"></span>
<fieldset>
@@ -107,8 +104,8 @@
資料來源:
<span id="caledit_datafrom"></span>
</fieldset>
- <input type="submit" value="儲存">
- <input type="button" value="取消">
+ <input id="caledit_save" type="submit" value="儲存">
+ <input id="caledit_discard" type="button" value="捨棄" onclick="caledit_discard_func()">
</form>
</div>
</div>
diff --git a/jinhtml/skel.html b/jinhtml/skel.html
index 496767c..a2ca581 100644
--- a/jinhtml/skel.html
+++ b/jinhtml/skel.html
@@ -10,6 +10,8 @@
<script src="js/jquery.js" type="text/javascript"></script>
<script src="js/jquery.hotkeys.js" type="text/javascript"></script>
<script type="text/javascript">
+ var googleuser = "{{ googleuser }}";
+ var productname = "{{ productname }}";
function google_logout(){
window.location = "{{ logouturl }}";
}
diff --git a/js/caledit.js b/js/caledit.js
index 9fab7d3..bf51187 100644
--- a/js/caledit.js
+++ b/js/caledit.js
@@ -1,3 +1,11 @@
+var activecalevt;
+var caledit_select_oldval;
+var caledit_ismodified;
+var caledit_loaded;
+var current_form;
+var saved_form;
+var caledit_defmsg = "(Esc)返回 (Ctrl-M)切換編輯 (Ctrl-左)左側 (Ctrl-右)右側 (Alt-U)儲存 (Alt-R)捨棄";
+
function caledit(year, month, date){
var allbrowseobj = document.getElementsByName("calbrowse");
var alldetailobj = document.getElementsByName("caldetail");
@@ -6,10 +14,11 @@ function caledit(year, month, date){
$(document).bind("keydown.caledit", "ctrl+m", caledit_edit);
$(document).bind("keydown.caledit", "ctrl+left", caledit_focus_left);
$(document).bind("keydown.caledit", "ctrl+right", caledit_focus_right);
- $(document).bind("keydown.caledit", "alt+q", caledit_quit);
+ $(document).bind("keydown.caledit", "esc", caledit_quit);
+ $(document).bind("keydown.caledit", "alt+u", caledit_save_func);
+ $(document).bind("keydown.caledit", "alt+r", caledit_discard_func);
status_bar_save();
- status_bar_set("(Alt-Q)返回 (Ctrl-M)切換編輯 (Ctrl-左)左側"
- + " (Ctrl-右)右側 ");
+ status_bar_set(caledit_defmsg);
caledit_switchedit_disable();
for(i=0; i<allbrowseobj.length; i++){
allbrowseobj[i].style.display = "none";
@@ -19,12 +28,36 @@ function caledit(year, month, date){
}
document.getElementById("switchlist").style.display = "none";
document.getElementById("googlelogout").style.display = "none";
+ current_form = new CalEvent();
+ saved_form = new CalEvent();
+ activecalevt = new Array();
+ caledit_createoption();
+ caledit_ismodified = false;
+ caledit_loaded = false;
}
function caledit_quit(){
var allbrowseobj = document.getElementsByName("calbrowse");
var alldetailobj = document.getElementsByName("caldetail");
var i;
+ try{
+ if(caledit_loaded){
+ if(caledit_validate()){
+ caledit_write_current();
+ }else{
+ throw null;
+ }
+ }
+ if(!saved_form.equal(current_form)){
+ throw "您有尚未儲存的資訊,無法離開!";
+ }
+ }catch(err){
+ document.getElementById("caledit_select").value = caledit_select_oldval;
+ if(err != null){
+ status_bar_warning(err);
+ }
+ return;
+ }
$(document).unbind("keydown.main");
$(document).unbind("keydown.caledit");
for(i=0; i<allbrowseobj.length; i++){
@@ -37,6 +70,11 @@ function caledit_quit(){
status_bar_restore();
document.getElementById("switchlist").style.display = "inline";
document.getElementById("googlelogout").style.display = "inline";
+ caledit_clearoption();
+ caledit_clean();
+ if(caledit_ismodified){
+ calload();
+ }
}
function caledit_edit()
@@ -80,6 +118,8 @@ function caledit_switchedit_enable()
for(i=0; i<rwbobj.length; i++){
rwbobj[i].style.display = "block";
}
+ document.getElementById("caledit_save").style.display = "inline";
+ document.getElementById("caledit_discard").style.display = "inline";
}
function caledit_switchedit_disable()
@@ -107,6 +147,9 @@ function caledit_switchedit_disable()
for(i=0; i<rwbobj.length; i++){
rwbobj[i].style.display = "none";
}
+ document.getElementById("caledit_save").style.display = "none";
+ document.getElementById("caledit_discard").style.display = "none";
+ caledit_copyback();
}
function caledit_focus_left(){
@@ -116,3 +159,266 @@ function caledit_focus_left(){
function caledit_focus_right(){
$("#caledit_switchedit").focus();
}
+
+function caledit_clean(){
+ var i;
+ var roobj, rwobj, robobj, rwbobj;
+ roobj = document.getElementsByName("caledit_read");
+ rwobj = document.getElementsByName("caledit_write");
+ robobj = document.getElementsByName("caledit_read_block");
+ rwbobj = document.getElementsByName("caledit_write_block");
+ for(i=0; i<roobj.length; i++){
+ roobj[i].innerHTML = "";
+ }
+ for(i=0; i<rwobj.length; i++){
+ rwobj[i].value = "";
+ }
+ for(i=0; i<robobj.length; i++){
+ robobj[i].innerHTML = "";
+ }
+ for(i=0; i<rwbobj.length; i++){
+ rwbobj[i].value = "";
+ }
+}
+
+function caledit_fill(calevt){
+ var yearobj, monthobj, dateobj, hourobj, minuteobj;
+ var titleobj, remindobj, contentobj;
+ var datafromobj; /* 這項不能修改 */
+ yearobj = document.getElementById("caledit_static_year");
+ monthobj = document.getElementById("caledit_static_month");
+ dateobj = document.getElementById("caledit_static_date");
+ hourobj = document.getElementById("caledit_static_hour");
+ minuteobj = document.getElementById("caledit_static_minute");
+ titleobj = document.getElementById("caledit_static_title");
+ remindobj = document.getElementById("caledit_static_remind");
+ contentobj = document.getElementById("caledit_static_content");
+ datafromobj = document.getElementById("caledit_datafrom");
+ yearobj.innerHTML = calevt.datetime.getFullYear();
+ monthobj.innerHTML = calevt.datetime.getMonth();
+ dateobj.innerHTML = calevt.datetime.getDate();
+ hourobj.innerHTML = calevt.datetime.getHours();
+ minuteobj.innerHTML = calevt.datetime.getMinutes();
+ titleobj.innerHTML = calevt.title;
+ remindobj.innerHTML = calevt.remind;
+ contentobj.innerHTML = calevt.content;
+ switch(calevt.datafrom){
+ case 'native':
+ datafromobj.innerHTML = productname;
+ break;
+ case 'google':
+ datafromobj.innerHTML = 'Google 行事曆';
+ break;
+ case 'ntuceiba':
+ datafromobj.innerHTML = '臺大 CEIBA 網站';
+ break;
+ default:
+ datafromobj.innerHTML = '來源不明';
+ }
+
+ yearobj = document.getElementById("caledit_dyn_year");
+ monthobj = document.getElementById("caledit_dyn_month");
+ dateobj = document.getElementById("caledit_dyn_date");
+ hourobj = document.getElementById("caledit_dyn_hour");
+ minuteobj = document.getElementById("caledit_dyn_minute");
+ titleobj = document.getElementById("caledit_dyn_title");
+ remindobj = document.getElementById("caledit_dyn_remind");
+ contentobj = document.getElementById("caledit_dyn_content");
+ yearobj.value = calevt.datetime.getFullYear();
+ monthobj.value = calevt.datetime.getMonth();
+ dateobj.value = calevt.datetime.getDate();
+ hourobj.value = calevt.datetime.getHours();
+ minuteobj.value = calevt.datetime.getMinutes();
+ titleobj.value = calevt.title;
+ remindobj.value = calevt.remind;
+ contentobj.value = calevt.content;
+}
+
+function caledit_copyback(){
+ var yearobj, monthobj, dateobj, hourobj, minuteobj;
+ var titleobj, remindobj, contentobj;
+ var yearobjw, monthobjw, dateobjw, hourobjw, minuteobjw;
+ var titleobjw, remindobjw, contentobjw;
+
+ yearobj = document.getElementById("caledit_static_year");
+ monthobj = document.getElementById("caledit_static_month");
+ dateobj = document.getElementById("caledit_static_date");
+ hourobj = document.getElementById("caledit_static_hour");
+ minuteobj = document.getElementById("caledit_static_minute");
+ titleobj = document.getElementById("caledit_static_title");
+ remindobj = document.getElementById("caledit_static_remind");
+ contentobj = document.getElementById("caledit_static_content");
+
+ yearobjw = document.getElementById("caledit_dyn_year");
+ monthobjw = document.getElementById("caledit_dyn_month");
+ dateobjw = document.getElementById("caledit_dyn_date");
+ hourobjw = document.getElementById("caledit_dyn_hour");
+ minuteobjw = document.getElementById("caledit_dyn_minute");
+ titleobjw = document.getElementById("caledit_dyn_title");
+ remindobjw = document.getElementById("caledit_dyn_remind");
+ contentobjw = document.getElementById("caledit_dyn_content");
+
+ yearobj.innerHTML = yearobjw.value;
+ monthobj.innerHTML = monthobjw.value;
+ dateobj.innerHTML = dateobjw.value;
+ hourobj.innerHTML = hourobjw.value;
+ minuteobj.innerHTML = minuteobjw.value;
+ titleobj.innerHTML = titleobjw.value;
+ remindobj.innerHTML = remindobjw.value;
+ contentobj.innerHTML = contentobjw.value;
+}
+
+function caledit_validate(){
+ var yearobjw, monthobjw, dateobjw, hourobjw, minuteobjw;
+ var titleobjw, remindobjw, contentobjw;
+ var yearvalue, monthvalue;
+ var tmp;
+ yearobjw = document.getElementById("caledit_dyn_year");
+ monthobjw = document.getElementById("caledit_dyn_month");
+ dateobjw = document.getElementById("caledit_dyn_date");
+ hourobjw = document.getElementById("caledit_dyn_hour");
+ minuteobjw = document.getElementById("caledit_dyn_minute");
+ titleobjw = document.getElementById("caledit_dyn_title");
+ remindobjw = document.getElementById("caledit_dyn_remind");
+ contentobjw = document.getElementById("caledit_dyn_content");
+
+ try{
+ yearvalue = parseInt(yearobjw.value);
+ if(!isFinite(yearvalue)){
+ throw "請輸入正確的年份!";
+ }
+ if(yearvalue < 1970){
+ throw "請輸入 1970 年以後的年份!";
+ }
+ monthvalue = parseInt(monthobjw.value);
+ if(!isFinite(monthvalue) || monthvalue < 1 || monthvalue > 12){
+ throw "請輸入正確的月份!";
+ }
+ tmp = parseInt(dateobjw.value);
+ if(!isFinite(tmp) || tmp < 1 ||
+ tmp > get_month_max_day(yearvalue, monthvalue - 1)){
+ throw "請輸入正確的日期!";
+ }
+ tmp = parseInt(remindobjw.value);
+ if(!isFinite(tmp)){
+ throw "請輸入正確的提醒時間!";
+ }
+ }catch(err){
+ status_bar_warning(err);
+ return false;
+ }
+
+ status_bar_set(caledit_defmsg);
+ return true;
+}
+
+function caledit_write_current(){
+ var yearobjw, monthobjw, dateobjw, hourobjw, minuteobjw;
+ var titleobjw, remindobjw, contentobjw;
+ var yearvalue, monthvalue;
+ var tmp;
+ yearobjw = document.getElementById("caledit_dyn_year");
+ monthobjw = document.getElementById("caledit_dyn_month");
+ dateobjw = document.getElementById("caledit_dyn_date");
+ hourobjw = document.getElementById("caledit_dyn_hour");
+ minuteobjw = document.getElementById("caledit_dyn_minute");
+ titleobjw = document.getElementById("caledit_dyn_title");
+ remindobjw = document.getElementById("caledit_dyn_remind");
+ contentobjw = document.getElementById("caledit_dyn_content");
+
+ current_form.datetime.setFullYear(
+ parseInt(yearobjw.value),
+ parseInt(monthobjw.value),
+ parseInt(dateobjw.value));
+ current_form.datetime.setHours(
+ parseInt(hourobjw.value),
+ parseInt(minuteobjw.value),
+ 0, 0);
+
+ current_form.remind = parseInt(remindobjw.value);
+ current_form.title = titleobjw.value;
+ current_form.content = contentobjw.value;
+}
+
+function caledit_loader(myself){
+ var newcalevent;
+ var dataindex;
+
+ try{
+ if(caledit_loaded){
+ if(caledit_validate()){
+ caledit_write_current();
+ }else{
+ throw false;
+ }
+ }
+ }catch(err){
+ myself.value = caledit_select_oldval;
+ return;
+ }
+
+ if(current_form.equal(saved_form)){
+ if(myself.value == "new"){
+ newcalevent = new CalEvent();
+ newcalevent.datetime.setFullYear(
+ value_year, value_month - 1, value_date);
+ newcalevent.datetime.setHours(0, 0);
+ caledit_fill(newcalevent);
+ $.extend(true, saved_form, newcalevent);
+ $.extend(true, current_form, newcalevent);
+ status_bar_set("新增" + " " + caledit_defmsg);
+ }else{
+ dataindex = parseInt(myself.value);
+ caledit_fill(activecalevt[dataindex]);
+ $.extend(true, saved_form, activecalevt[dataindex]);
+ $.extend(true, current_form, activecalevt[dataindex]);
+ dataindex++;
+ status_bar_set(dataindex.toString() + " " + caledit_defmsg);
+ }
+ caledit_select_oldval = myself.value;
+ }else{
+ status_bar_warning("您有尚未儲存的資訊,無法切換活動!");
+ myself.value = caledit_select_oldval;
+ }
+
+ caledit_loaded = true;
+}
+
+function caledit_discard_func(){
+ caledit_fill(saved_form);
+}
+
+function caledit_save_func(){
+ if(caledit_validate()){
+ caledit_write_current();
+ }else{
+ return false;
+ }
+ inccal_send(current_form);
+ saved_form = current_form;
+ caledit_ismodified = true;
+ return false; /* 這樣才不會真的 submit */
+}
+
+function caledit_createoption(){
+ var calselect = document.getElementById("caledit_select");
+ var addoption = alldata[value_date].data;
+ var newoption;
+ var i;
+ newoption = document.createElement("option");
+ newoption.value = "new";
+ newoption.innerHTML = "新增活動......";
+ calselect.appendChild(newoption);
+ for(i=0; i<addoption.length; i++){
+ newoption = document.createElement("option");
+ newoption.value = i;
+ newoption.innerHTML = generate_display_string(addoption[i]);
+ calselect.appendChild(newoption);
+ activecalevt.push(addoption[i]);
+ }
+}
+
+function caledit_clearoption(){
+ var calselect = document.getElementById("caledit_select");
+ calselect.innerHTML = "";
+}
diff --git a/js/data.js b/js/data.js
index d526202..9b58a14 100644
--- a/js/data.js
+++ b/js/data.js
@@ -40,6 +40,7 @@ function inccal_fetch(year, month){
var retrdata;
var calevent;
var eventobj;
+ var rq;
var i;
while(should_continue){
rq = create_xmlhttp_object();
@@ -84,3 +85,27 @@ function inccal_fetch(year, month){
caleventok = true;
status_bar_restore();
}
+
+function inccal_send(calevt){
+ var rq = create_xmlhttp_object();
+ var str = "";
+ str = 'icon=' + encodeURIComponent(calevt.icon.toString()) + '&' +
+ 'title=' + encodeURIComponent(calevt.title) + '&' +
+ 'content=' + encodeURIComponent(calevt.content) + '&' +
+ 'remind=' + encodeURIComponent(calevt.remind.toString()) + '&' +
+ 'datafrom=' + encodeURIComponent(calevt.datafrom) + '&' +
+ 'year=' + encodeURIComponent(calevt.datetime.getFullYear()) + '&' +
+ 'month=' + encodeURIComponent(calevt.datetime.getMonth()) + '&' +
+ 'date=' + encodeURIComponent(calevt.datetime.getDate()) + '&' +
+ 'hour=' + encodeURIComponent(calevt.datetime.getHours()) + '&' +
+ 'minute=' + encodeURIComponent(calevt.datetime.getMinutes());
+ if(calevt.key == null){
+ rq.open('POST', '/access/insert');
+ rq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
+ rq.send(str);
+ }else{
+ rq.open('POST', '/access/update');
+ rq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
+ rq.send(str + '&key=' + encodeURIComponent(calevt.key));
+ }
+}
diff --git a/js/month.js b/js/month.js
index d99bec8..c3db121 100644
--- a/js/month.js
+++ b/js/month.js
@@ -319,6 +319,7 @@ function setmonthcal(){
todate + ")");
objcaldate.innerHTML = todate;
objcaldatalist.setAttribute("name", "datalist" + todate);
+ objcaldatalist.innerHTML = "";
alldata[todate] = new Object();
alldata[todate].row = i;
alldata[todate].col = od_day;
@@ -336,6 +337,7 @@ function setmonthcal(){
objcal.removeAttribute("onclick");
objcal.removeAttribute("ondblclick");
objcaldatalist.removeAttribute("name");
+ objcaldatalist.innerHTML = "";
}else if(od_year > toyear || od_month > tomonth){
objcal.style.borderColor = "lightgray";
objcal.style.color = "gray";
@@ -345,6 +347,7 @@ function setmonthcal(){
objcal.removeAttribute("onclick");
objcal.removeAttribute("ondblclick");
objcaldatalist.removeAttribute("name");
+ objcaldatalist.innerHTML = "";
}else{
alert("setmonthcal(): fatal error");
return;
@@ -353,6 +356,8 @@ function setmonthcal(){
i++;
}
}
+ inccal_fetch(value_year, value_month);
+ calload();
}
function resetblock(thisdt){
@@ -386,6 +391,8 @@ function setfocusblock(thisdt, reset){
thatobj.style.fontWeight = "bold";
setcookievalue(cookie_date, thisdt);
value_date = thisdt;
+ status_bar_set(value_year + "年" + value_month + "月" + thisdt + "日" +
+ " " + shortcut_mainmsg);
}
function movefocus_up(){
@@ -484,6 +491,12 @@ function shortcut_bind(){
$(document).bind("keydown.main", "ctrl+l", switch_list);
}
+function generate_display_string(calevt){
+ return add_zero_padding(calevt.datetime.getHours().toString(), 2) + ':' +
+ add_zero_padding(calevt.datetime.getMinutes().toString(), 2) + ' ' +
+ calevt.title;
+}
+
function calload(){
var i;
var thisdate;
@@ -497,12 +510,7 @@ function calload(){
alldata[thisdate].data.push(caleventlist[i]);
ulobj = document.getElementsByName("datalist" + thisdate)[0];
liobj = document.createElement("li");
- liobj.innerHTML =
- add_zero_padding(
- caleventlist[i].datetime.getHours().toString(), 2) + ':' +
- add_zero_padding(
- caleventlist[i].datetime.getMinutes().toString(), 2) + ' ' +
- caleventlist[i].title;
+ liobj.innerHTML = generate_display_string(caleventlist[i]);
ulobj.appendChild(liobj);
}