diff --git a/documents/Principle_zh-CN.md b/documents/Principle_zh-CN.md index 88cf25e..3af268b 100644 --- a/documents/Principle_zh-CN.md +++ b/documents/Principle_zh-CN.md @@ -106,7 +106,7 @@ Common类下的为通用请求接口,一般与用户状态等相关 |username|string|需要登录的用户名| |password|string|加盐密码,计算方法是先将密码求SHA256并16进制输出小写,再与盐的字符串形式拼接,然后整体做SHA256输出16进制小写| -返回参数:一个bool,表示是否登陆成功 +返回参数:一个string,作为token由客户端保存,在之后的请求中用于鉴权 此请求与上面的盐获取请求配套使用,用于通常意义下的客户端登录。 @@ -121,7 +121,7 @@ Common类下的为通用请求接口,一般与用户状态等相关 |username|string|需要登陆的用户名| |password|string|明文密码| -返回参数:一个bool,表示是否登陆成功 +返回参数:一个string,作为token由客户端保存,在之后的请求中用于鉴权 此请求设计用于Web端进行登录,其安全性由HTTPS保证。 diff --git a/src/static/i18n/strings_en-US.properties b/src/static/i18n/strings_en-US.properties index 154fe60..50d214d 100644 --- a/src/static/i18n/strings_en-US.properties +++ b/src/static/i18n/strings_en-US.properties @@ -12,9 +12,12 @@ ccn-header-user-login=Login ccn-header-user-logout=Logout ccn-header-language=Language -ccn-js-failToLogin=Fail to login. Please check your username or password. -ccn-js-failToLogout=Fail to logout due to unknow reason. Consider refreshing page to solve problem. -ccn-js-failToOperate=An operation failed. It may caused by your input wrong data, or system error. Refreshing page may fix system problem. Before refreshing page, please backup all your unsaved data. +ccn-messagebox-confirm=OK +ccn-messagebox-title=Notification + +ccn-js-fail-login=Fail to login. Please check your username or password. +ccn-js-fail-logout=Fail to logout due to unknow reason. Consider refreshing page to solve problem. +ccn-js-fail-operate=An operation failed. It may caused by your input wrong data, or system error. Refreshing page may fix system problem. Before refreshing page, please backup all your unsaved data. ccn-home-desc=
A light, self-host calendar system.
Originally, this app is served for yyc12345 personal use.
Pull request / issue / translation are welcomed.
Submit them in our GitHub project.
This project source code is licensed AGPL v3.
diff --git a/src/static/i18n/strings_zh-CN.properties b/src/static/i18n/strings_zh-CN.properties index 6129f6e..7ad32c7 100644 --- a/src/static/i18n/strings_zh-CN.properties +++ b/src/static/i18n/strings_zh-CN.properties @@ -12,9 +12,12 @@ ccn-header-user-login=登录 ccn-header-user-logout=登出 ccn-header-language=语言 -ccn-js-failToLogin=登陆失败,请检查您的用户名和密码。 -ccn-js-failToLogout=由于未知原因,登出失败,请考虑刷新页面解决问题。 -ccn-js-failToOperate=一个操作失败了,可能是您输入了错误的参数,又或者是系统错误。刷新页面可能会解决系统错误问题。请在刷新前备份好自己的数据。 +ccn-messagebox-confirm=确认 +ccn-messagebox-title=通知 + +ccn-js-fail-login=登陆失败,请检查您的用户名和密码。 +ccn-js-fail-logout=由于未知原因,登出失败,请考虑刷新页面解决问题。 +ccn-js-fail-operate=一个操作失败了,可能是您输入了错误的参数,又或者是系统错误。刷新页面可能会解决系统错误问题。请在刷新前备份好自己的数据。 ccn-home-desc=一个轻量的自建日历系统
原本是出于yyc12345的个人使用而制作的。
欢迎提出Pull request / issue / 翻译
将他们提交到我们的GitHub项目.
本工程代码使用AGPL v3授权。
diff --git a/src/static/js/api.js b/src/static/js/api.js index 4af7885..bfbd434 100644 --- a/src/static/js/api.js +++ b/src/static/js/api.js @@ -1,7 +1,10 @@ +// the api use bool to return status: fail: return false, true: return data(including true and false) +// the api use other type to return data: fail: return undefined, true: return data(if the returned value have change be null, return undefined instaed). + // var cached_salt = undefined /* -function cnn_api_common_salt(_username) { +function ccn_api_common_salt(_username) { // true or false // gotten salt store in cached_salt. var gotten_data = undefined; @@ -23,7 +26,7 @@ function cnn_api_common_salt(_username) { } else return false; } -function cnn_api_common_login(_username, password) { +function ccn_api_common_login(_username, password) { // return true or false, token is managed by this js file self. // if cached_salt is undefined, return false directly if (typeof(cached_salt) == undefined) return false; @@ -51,7 +54,7 @@ function cnn_api_common_login(_username, password) { // ====================================================== common -function cnn_api_common_webLogin(_username, password) { +function ccn_api_common_webLogin(_username, password) { var gotten_data = undefined; $.ajax({ url: '/api/common/webLogin', @@ -71,7 +74,7 @@ function cnn_api_common_webLogin(_username, password) { } else return false; } -function cnn_api_common_logout() { +function ccn_api_common_logout() { // return true or false var gotten_data = undefined; $.ajax({ @@ -86,13 +89,13 @@ function cnn_api_common_logout() { } }); - if (IsResponseOK(gotten_data)) { + if (IsResponseOK(gotten_data) && gotten_data['data']) { SetApiToken(''); return true; } return false; } -function cnn_api_common_tokenValid() { +function ccn_api_common_tokenValid() { // get from local database first, then judge it via post // return true or false var gotten_token = GetApiToken(); @@ -111,7 +114,7 @@ function cnn_api_common_tokenValid() { } }); - if (IsResponseOK(gotten_data)) return true; + if (IsResponseOK(gotten_data) && gotten_data['data']) return true; else { SetApiToken(''); return false; @@ -130,7 +133,7 @@ function cnn_api_common_tokenValid() { // ====================================================== todo -function cnn_api_todo_getFull() { +function ccn_api_todo_getFull() { // return data or undefined var gotten_data = undefined; $.ajax({ @@ -149,7 +152,7 @@ function cnn_api_todo_getFull() { else return undefined; } -function cnn_api_todo_add() { +function ccn_api_todo_add() { // return data or undefined var gotten_data = undefined; $.ajax({ @@ -168,7 +171,7 @@ function cnn_api_todo_add() { else return undefined; } -function cnn_api_todo_update(_uuid, _data, _lastChange) { +function ccn_api_todo_update(_uuid, _data, _lastChange) { // return data or undefined var gotten_data = undefined; $.ajax({ @@ -190,7 +193,7 @@ function cnn_api_todo_update(_uuid, _data, _lastChange) { else return undefined; } -function cnn_api_todo_delete(_uuid, _lastChange) { +function ccn_api_todo_delete(_uuid, _lastChange) { // return true or false var gotten_data = undefined; $.ajax({ @@ -207,7 +210,7 @@ function cnn_api_todo_delete(_uuid, _lastChange) { } }); - return IsResponseOK(gotten_data); + return (IsResponseOK(gotten_data) && gotten_data['data']); } // ====================================================== admin diff --git a/src/static/js/headerNav.js b/src/static/js/headerNav.js index 36c604f..4147849 100644 --- a/src/static/js/headerNav.js +++ b/src/static/js/headerNav.js @@ -1,32 +1,32 @@ -function cnn_headerNav_Insert() { +function ccn_headerNav_Insert() { $('body').prepend(ccn_template_headerNav.render()); } -function cnn_headerNav_LoggedRefresh() { - if (cnn_api_common_tokenValid()) { +function ccn_headerNav_LoggedRefresh() { + if (ccn_api_common_tokenValid()) { // logged, show all nav button and logout button - $("#cnn-header-nav-home").show(); - $("#cnn-header-nav-calendar").show(); - $("#cnn-header-nav-todo").show(); - $("#cnn-header-nav-admin").show(); + $("#ccn-header-nav-home").show(); + $("#ccn-header-nav-calendar").show(); + $("#ccn-header-nav-todo").show(); + $("#ccn-header-nav-admin").show(); - $("#cnn-header-user-login").hide(); - $("#cnn-header-user-logout").show(); + $("#ccn-header-user-login").hide(); + $("#ccn-header-user-logout").show(); } else { - $("#cnn-header-nav-home").show(); - $("#cnn-header-nav-calendar").hide(); - $("#cnn-header-nav-todo").hide(); - $("#cnn-header-nav-admin").hide(); + $("#ccn-header-nav-home").show(); + $("#ccn-header-nav-calendar").hide(); + $("#ccn-header-nav-todo").hide(); + $("#ccn-header-nav-admin").hide(); - $("#cnn-header-user-login").show(); - $("#cnn-header-user-logout").hide(); + $("#ccn-header-user-login").show(); + $("#ccn-header-user-logout").hide(); } } // bind language process and internal process function such as logout and expand menu -function cnn_headerNav_BindEvents() { +function ccn_headerNav_BindEvents() { // bind function - $("#cnn-header-language > *").each(function(){ + $("#ccn-header-language > *").each(function(){ $(this).click(function(){ ccn_i18n_ChangeLanguage($(this).attr("language")); ccn_i18n_ApplyLanguage(); @@ -34,14 +34,14 @@ function cnn_headerNav_BindEvents() { }); // bind logout - $("#cnn-header-user-logout").click(function() { - if (cnn_api_common_logout()) { + $("#ccn-header-user-logout").click(function() { + if (ccn_api_common_logout()) { // ok, logout // jump into home page again window.location.href = '/web/home'; return; - } else alert($.i18n.prop("ccn-js-failToLogout")); + } else ccn_messagebox_Show($.i18n.prop("ccn-js-fail-logout")); }); // bind burger menu diff --git a/src/static/js/messagebox.js b/src/static/js/messagebox.js new file mode 100644 index 0000000..a36a488 --- /dev/null +++ b/src/static/js/messagebox.js @@ -0,0 +1,19 @@ +function ccn_messagebox_Insert() { + $('body').append(ccn_template_messagebox.render()); +} + +function ccn_messagebox_Show(/*title,*/ info) { + //$('#ccn-messagebox-title').text(title); + $('#ccn-messagebox-body').text(info); + + $('#ccn-messagebox-modal').addClass('is-active'); +} + +function ccn_messagebox_BindEvent() { + $('#ccn-messagebox-btnClose').click(ccn_messagebox_Hide); + $('#ccn-messagebox-btnConfirm').click(ccn_messagebox_Hide); +} + +function ccn_messagebox_Hide() { + $('#ccn-messagebox-modal').removeClass('is-active'); +} diff --git a/src/static/js/page/admin.js b/src/static/js/page/admin.js index 368e489..319e8a4 100644 --- a/src/static/js/page/admin.js +++ b/src/static/js/page/admin.js @@ -5,9 +5,13 @@ $(document).ready(function() { ccn_template_Load(); // nav process - cnn_headerNav_Insert(); - cnn_headerNav_BindEvents(); - cnn_headerNav_LoggedRefresh(); + ccn_headerNav_Insert(); + ccn_headerNav_BindEvents(); + ccn_headerNav_LoggedRefresh(); + + // messagebox process + ccn_messagebox_Insert(); + ccn_messagebox_BindEvent(); // apply i18n ccn_i18n_ApplyLanguage(); diff --git a/src/static/js/page/calendar.js b/src/static/js/page/calendar.js index 819472c..7d455f8 100644 --- a/src/static/js/page/calendar.js +++ b/src/static/js/page/calendar.js @@ -5,10 +5,14 @@ $(document).ready(function() { ccn_template_Load(); // nav process - cnn_headerNav_Insert(); - cnn_headerNav_BindEvents(); - cnn_headerNav_LoggedRefresh(); + ccn_headerNav_Insert(); + ccn_headerNav_BindEvents(); + ccn_headerNav_LoggedRefresh(); + // messagebox process + ccn_messagebox_Insert(); + ccn_messagebox_BindEvent(); + // process calendar it self ccn_calendar_LoadCalendarBody(); diff --git a/src/static/js/page/home.js b/src/static/js/page/home.js index 10ef276..dbc5116 100644 --- a/src/static/js/page/home.js +++ b/src/static/js/page/home.js @@ -5,10 +5,14 @@ $(document).ready(function() { ccn_template_Load(); // nav process - cnn_headerNav_Insert(); - cnn_headerNav_BindEvents(); - cnn_headerNav_LoggedRefresh(); + ccn_headerNav_Insert(); + ccn_headerNav_BindEvents(); + ccn_headerNav_LoggedRefresh(); + // messagebox process + ccn_messagebox_Insert(); + ccn_messagebox_BindEvent(); + // apply i18n ccn_i18n_ApplyLanguage(); }); \ No newline at end of file diff --git a/src/static/js/page/login.js b/src/static/js/page/login.js index cc46610..6cab6e7 100644 --- a/src/static/js/page/login.js +++ b/src/static/js/page/login.js @@ -5,9 +5,13 @@ $(document).ready(function() { ccn_template_Load(); // nav process - cnn_headerNav_Insert(); - cnn_headerNav_BindEvents(); - cnn_headerNav_LoggedRefresh(); + ccn_headerNav_Insert(); + ccn_headerNav_BindEvents(); + ccn_headerNav_LoggedRefresh(); + + // messagebox process + ccn_messagebox_Insert(); + ccn_messagebox_BindEvent(); // apply i18n ccn_i18n_ApplyLanguage(); @@ -28,23 +32,23 @@ function ccn_login_startLogin() { /* // try get salt - if (cnn_api_common_salt(username)) { + if (ccn_api_common_salt(username)) { // continue login - if (cnn_api_common_login(username, password)) { + if (ccn_api_common_login(username, password)) { // ok, logged // jump into home page again window.location.href = '/web/home'; - } else alert($.i18n.prop("ccn-js-failToLogin")); - } else alert($.i18n.prop("ccn-js-failToLogin")); + } else ccn_messagebox_Show($.i18n.prop("ccn-js-fail-login")); + } else ccn_messagebox_Show($.i18n.prop("ccn-js-fail-login")); */ - if (cnn_api_common_webLogin(username, password)) { + if (ccn_api_common_webLogin(username, password)) { // ok, logged // jump into home page again window.location.href = '/web/home'; return; - } else alert($.i18n.prop("ccn-js-failToLogin")); + } else ccn_messagebox_Show($.i18n.prop("ccn-js-fail-login")); // retore ui $("#ccn-login-form-login").removeAttr("disabled"); diff --git a/src/static/js/page/todo.js b/src/static/js/page/todo.js index 0e7150b..f6ddd90 100644 --- a/src/static/js/page/todo.js +++ b/src/static/js/page/todo.js @@ -7,9 +7,13 @@ $(document).ready(function() { ccn_template_Load(); // nav process - cnn_headerNav_Insert(); - cnn_headerNav_BindEvents(); - cnn_headerNav_LoggedRefresh(); + ccn_headerNav_Insert(); + ccn_headerNav_BindEvents(); + ccn_headerNav_LoggedRefresh(); + + // messagebox process + ccn_messagebox_Insert(); + ccn_messagebox_BindEvent(); // apply i18n ccn_i18n_ApplyLanguage(); @@ -26,7 +30,7 @@ function ccn_todo_RefreshCacheList() { // clean list cache first ccn_todo_todoListCache = new Array(); - var result = cnn_api_todo_getFull(); + var result = ccn_api_todo_getFull(); if(typeof(result) != 'undefined') { for(var index in result) { ccn_todo_todoListCache[result[index][0]] = result[index]; @@ -96,10 +100,10 @@ function ccn_todo_Refresh() { } function ccn_todo_Add() { - var result = cnn_api_todo_add(); + var result = ccn_api_todo_add(); if (typeof(result) == 'undefined') { // fail - alert($.i18n.prop("ccn-js-failToOperate")); + ccn_messagebox_Show($.i18n.prop("ccn-js-fail-operate")); } else { // add into cache ccn_todo_todoListCache[result[0]] = result; @@ -138,14 +142,14 @@ function ccn_todo_ItemEdit() { function ccn_todo_ItemDelete() { var uuid = $(this).attr("uuid"); - var result = cnn_api_todo_delete( + var result = ccn_api_todo_delete( uuid, ccn_todo_todoListCache[uuid][3] ); if(typeof(result) == 'undefined') { // fail - alert($.i18n.prop("ccn-js-failToOperate")); + ccn_messagebox_Show($.i18n.prop("ccn-js-fail-operate")); } else { // remove body $("#ccn-todo-todoItem-" + uuid).remove(); @@ -156,7 +160,7 @@ function ccn_todo_ItemUpdate() { var uuid = $(this).attr("uuid"); var newData = $("#ccn-todo-todoItem-textarea-" + uuid).val(); - var result = cnn_api_todo_update( + var result = ccn_api_todo_update( uuid, newData, ccn_todo_todoListCache[uuid][3] @@ -164,7 +168,7 @@ function ccn_todo_ItemUpdate() { if (typeof(result) == 'undefined') { // fail - alert($.i18n.prop("ccn-js-failToOperate")); + ccn_messagebox_Show($.i18n.prop("ccn-js-fail-operate")); } else { // safely update data & lastChanged and control ccn_todo_todoListCache[uuid][2] = newData; diff --git a/src/static/js/template.js b/src/static/js/template.js index 2f1029f..0fe55a8 100644 --- a/src/static/js/template.js +++ b/src/static/js/template.js @@ -1,4 +1,5 @@ var ccn_template_headerNav = undefined; +var ccn_template_messagebox = undefined; var ccn_template_calendarItem = undefined; var ccn_template_scheduleItem = undefined; var ccn_template_userItem = undefined; @@ -13,6 +14,14 @@ function ccn_template_Load() { ccn_template_headerNav = $.templates(data); } }); + $.ajax({ + url: $("#jsrender-tmpl-messagebox").attr('src'), + type: "GET", + async: false, + success: function (data) { + ccn_template_messagebox = $.templates(data); + } + }); switch(ccn_pages_currentPage) { case ccn_pages_enumPages.home: diff --git a/src/static/tmpl/headerNav.tmpl b/src/static/tmpl/headerNav.tmpl index a3ff069..87d67d4 100644 --- a/src/static/tmpl/headerNav.tmpl +++ b/src/static/tmpl/headerNav.tmpl @@ -14,24 +14,24 @@