diff options
| author | 藍挺瑋 <lantw44@gmail.com> | 2012-12-19 02:54:29 +0800 |
|---|---|---|
| committer | LAN-TW <lantw44@gmail.com> | 2012-12-19 02:54:29 +0800 |
| commit | 91b40965bb86ba62f1e91a9098991138bd746b68 (patch) | |
| tree | 135bcc74672e35b4d4248385a31793dbef2fc465 | |
| parent | 52dec87ef00b93acbc02da685d49dc1ef65cb18f (diff) | |
| download | inccalendar-91b40965bb86ba62f1e91a9098991138bd746b68.tar.gz inccalendar-91b40965bb86ba62f1e91a9098991138bd746b68.tar.zst inccalendar-91b40965bb86ba62f1e91a9098991138bd746b68.zip | |
嘗試加入修改資料的功能,但仍有許多問題
| -rw-r--r-- | css/month.css | 3 | ||||
| -rw-r--r-- | jinhtml/month.html | 15 | ||||
| -rw-r--r-- | jinhtml/skel.html | 2 | ||||
| -rw-r--r-- | js/caledit.js | 312 | ||||
| -rw-r--r-- | js/data.js | 25 | ||||
| -rw-r--r-- | js/month.js | 20 |
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 = ""; +} @@ -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); } |
