Ver Fonte

Merge pull request #2586 from openNAMU/dont_use

일단 병합
잉여개발기 há 6 meses atrás
pai
commit
b26b11067b
100 ficheiros alterados com 1250 adições e 1055 exclusões
  1. 2 0
      .dockerignore
  2. 10 1
      .github/ISSUE_TEMPLATE/bug_report.md
  3. 8 3
      .gitignore
  4. 14 10
      Dockerfile.ko
  5. 22 19
      app.py
  6. 0 0
      bin/test
  7. 2 0
      debug_build.sh
  8. 41 0
      docker-compose.yaml
  9. 3 2
      lang/en-US.json
  10. 3 2
      lang/ko-KR.json
  11. 1 1
      readme-en.md
  12. 1 1
      readme.md
  13. 4 1
      requirements.txt
  14. 11 9
      route/__init__.py
  15. 3 3
      route/api_skin_info.py
  16. 1 1
      route/api_user_info.py
  17. 6 6
      route/bbs_delete.py
  18. 7 7
      route/bbs_make.py
  19. 18 18
      route/bbs_w.py
  20. 8 8
      route/bbs_w_comment_tool.py
  21. 8 8
      route/bbs_w_delete.py
  22. 15 15
      route/bbs_w_edit.py
  23. 5 5
      route/bbs_w_hide.py
  24. 5 5
      route/bbs_w_pinned.py
  25. 8 8
      route/bbs_w_post.py
  26. 10 10
      route/bbs_w_tool.py
  27. 33 39
      route/edit.py
  28. 1 1
      route/edit_backlink_reset.py
  29. 6 6
      route/edit_delete.py
  30. 5 5
      route/edit_delete_file.py
  31. 7 7
      route/edit_delete_multiple.py
  32. 22 22
      route/edit_move.py
  33. 6 6
      route/edit_request.py
  34. 7 7
      route/edit_revert.py
  35. 15 11
      route/edit_upload.py
  36. 17 17
      route/filter_all.py
  37. 33 33
      route/filter_all_add.py
  38. 65 65
      route/give_admin_groups.py
  39. 4 4
      route/give_delete_admin_group.py
  40. 27 27
      route/give_user_ban.py
  41. 11 11
      route/give_user_fix.py
  42. 4 1
      route/go_api_bbs.py
  43. 5 3
      route/go_api_func_language.py
  44. 15 5
      route/go_api_setting.py
  45. 1 1
      route/go_api_w_render.py
  46. 3 18
      route/go_main_func_easter_egg.py
  47. 8 0
      route/go_view_list_random.py
  48. 11 0
      route/go_view_user_watch_list.py
  49. 11 0
      route/go_view_w_watch_list.py
  50. 4 4
      route/list_acl.py
  51. 3 3
      route/list_admin.py
  52. 6 6
      route/list_admin_auth_use.py
  53. 5 5
      route/list_admin_group.py
  54. 11 10
      route/list_history.py
  55. 8 8
      route/list_image_file.py
  56. 4 4
      route/list_long_page.py
  57. 4 4
      route/list_no_link.py
  58. 6 6
      route/list_old_page.py
  59. 4 4
      route/list_please.py
  60. 10 10
      route/list_title_index.py
  61. 4 4
      route/list_user.py
  62. 17 17
      route/list_user_check.py
  63. 7 7
      route/list_user_check_delete.py
  64. 10 11
      route/login_find.py
  65. 12 12
      route/login_find_email.py
  66. 10 10
      route/login_find_email_check.py
  67. 10 10
      route/login_find_key.py
  68. 8 8
      route/login_login.py
  69. 6 6
      route/login_login_2fa.py
  70. 6 6
      route/login_login_2fa_email.py
  71. 9 9
      route/login_register.py
  72. 6 7
      route/login_register_email.py
  73. 5 5
      route/login_register_email_check.py
  74. 6 6
      route/login_register_submit.py
  75. 2 2
      route/main_func_error_404.py
  76. 8 8
      route/main_search_deep.py
  77. 14 14
      route/main_setting.py
  78. 60 0
      route/main_setting_404_page.py
  79. 12 12
      route/main_setting_email_test.py
  80. 22 22
      route/main_setting_external.py
  81. 10 10
      route/main_setting_head.py
  82. 59 59
      route/main_setting_main.py
  83. 6 6
      route/main_setting_main_logo.py
  84. 42 42
      route/main_setting_phrase.py
  85. 6 6
      route/main_setting_robot.py
  86. 4 4
      route/main_setting_sitemap.py
  87. 11 11
      route/main_setting_sitemap_set.py
  88. 32 32
      route/main_setting_skin_set.py
  89. 6 6
      route/main_setting_top_menu.py
  90. 5 5
      route/main_sys_restart.py
  91. 4 4
      route/main_sys_shutdown.py
  92. 9 9
      route/main_sys_update.py
  93. 58 59
      route/main_tool_admin.py
  94. 52 53
      route/main_tool_other.py
  95. 21 21
      route/main_tool_redirect.py
  96. 23 24
      route/main_view.py
  97. 49 9
      route/n_bbs_in.py
  98. 9 10
      route/n_bbs_main.py
  99. 3 3
      route/n_bbs_w_set.py
  100. 9 10
      route/n_edit_move_all.py

+ 2 - 0
.dockerignore

@@ -8,6 +8,8 @@ data/version.json
 
 route/tool/set_mark/custom.py
 
+*_data
+
 images
 
 .vscode

+ 10 - 1
.github/ISSUE_TEMPLATE.md → .github/ISSUE_TEMPLATE/bug_report.md

@@ -1,3 +1,12 @@
+---
+name: Bug report
+about: 버그 제보 템플릿입니다.
+title: ""
+labels: []
+assignees: []
+---
+
+<!-- 여기 아래부터는 bug_report.md 내용 -->
 ## 환경 (Environment)
 * 운영체제 (OS) :
 * 파이썬 버전 (Python version) :
@@ -18,4 +27,4 @@
 <!-- 다 작성해주시면 오류 해결에 좀 더 빠른 시간이 소요됩니다. -->
 <!-- If you fill it out, it will take faster time to resolve the error. -->
 
-<!-- 완전 뜬금없는 내용이 아닌 한 단순 질문 올리셔도 됩니다. -->
+<!-- 완전 뜬금없는 내용이 아닌 한 단순 질문 올리셔도 됩니다. -->

+ 8 - 3
.gitignore

@@ -32,8 +32,13 @@ views/sl_open
 views/nitori
 views/jsonnamu
 
-route_go/bin/*
-!route_go/bin/test
+bin/*
+!bin/test
 
 sitemap.xml
-sitemap_0.xml
+sitemap_0.xml
+
+*_data
+
+venv
+.env

+ 14 - 10
Dockerfile.ko

@@ -1,22 +1,26 @@
-FROM python:3.11.10-slim
+FROM python:3.11
 
 MAINTAINER 2du <min08101@naver.com>
 MAINTAINER hoparkgo9ma <me@ho9.me>
 
-ENV NAMU_DB_TYPE sqlite
-ENV NAMU_DB data
-ENV NAMU_HOST 0.0.0.0
-ENV NAMU_PORT 3000
-ENV NAMU_GOLANGPORT 3001
-ENV NAMU_LANG ko-KR
-ENV NAMU_MARKUP namumark
-ENV NAMU_ENCRYPT sha3
-ENV NAMU_DOCKER O
+
+ENV NAMU_DB_TYPE=sqlite
+ENV NAMU_DB=data
+ENV NAMU_HOST=0.0.0.0
+ENV NAMU_PORT=3000
+ENV NAMU_GOLANGPORT=3001
+ENV NAMU_LANG=ko-KR
+ENV NAMU_MARKUP=namumark
+ENV NAMU_ENCRYPT=sha3
+ENV NAMU_DOCKER=O
 
 ADD . /app
 WORKDIR /app
 
+# RUN echo "nameserver 1.1.1.1" >> /etc/resolv.conf
 RUN pip install -r requirements.txt
+RUN pip install -r requirements-optional.txt
+
 EXPOSE 3000
 
 CMD [ "python", "./app.py" ]

+ 22 - 19
app.py

@@ -49,7 +49,7 @@ with get_db_connect(init_mode = True) as conn:
 
     if run_mode != 'dev':
         file_name = linux_exe_chmod()
-        local_file_path = os.path.join("route_go", "bin", file_name)
+        local_file_path = os.path.join("bin", file_name)
 
         if not (setup_tool == "normal" and os.path.exists(local_file_path)):
             if os.path.exists(local_file_path):
@@ -246,16 +246,16 @@ for for_a in server_set:
 
 if platform.system() == 'Linux':
     if platform.machine() in ["AMD64", "x86_64"]:
-        cmd = [os.path.join(".", "route_go", "bin", "main.amd64.bin")]
+        cmd = [os.path.join(".", "bin", "main.amd64.bin")]
     else:
-        cmd = [os.path.join(".", "route_go", "bin", "main.arm64.bin")]
+        cmd = [os.path.join(".", "bin", "main.arm64.bin")]
 elif platform.system() == 'Darwin':
-    cmd = [os.path.join(".", "route_go", "bin", "main.mac.arm64.bin")]
+    cmd = [os.path.join(".", "bin", "main.mac.arm64.bin")]
 else:
     if platform.machine() in ["AMD64", "x86_64"]:
-        cmd = [os.path.join(".", "route_go", "bin", "main.amd64.exe")]
+        cmd = [os.path.join(".", "bin", "main.amd64.exe")]
     else:
-        cmd = [os.path.join(".", "route_go", "bin", "main.arm64.exe")]
+        cmd = [os.path.join(".", "bin", "main.arm64.exe")]
         
 cmd += [server_set["golang_port"]]
 if run_mode != '':
@@ -272,7 +272,7 @@ async def golang_process_check():
                 "url" : "test",
                 "data" : json_dumps(other_set_temp),
                 "session" : "{}",
-                "cookie" : "",
+                "cookies" : "",
                 "ip" : "127.0.0.1"
             }
 
@@ -462,7 +462,7 @@ def before_request_func():
                             history.go(0);
                         }
                     </script>
-                    <h2>''' + get_lang(conn, 'error_password_require_for_wiki_access') + '''</h2>
+                    <h2>''' + load_lang('error_password_require_for_wiki_access') + '''</h2>
                     <input type="password" id="wiki_access">
                     <input type="submit" onclick="opennamu_do_wiki_access();">
                 '''
@@ -644,8 +644,8 @@ app.route('/xref_page/<int:num>/<everything:name>')(view_xref)
 app.route('/xref_this/<everything:name>', defaults = { 'xref_type' : 2 })(view_xref)
 app.route('/xref_this_page/<int:num>/<everything:name>', defaults = { 'xref_type' : 2 })(view_xref)
 
-app.route('/doc_watch_list/<int:num>/<everything:name>')(w_watch_list)
-app.route('/doc_star_doc/<int:num>/<everything:name>', defaults = { 'do_type' : 'star_doc' })(w_watch_list)
+app.route('/doc_watch_list/<int:num>/<everything:name>')(view_w_watch_list)
+app.route('/doc_star_doc/<int:num>/<everything:name>', defaults = { 'do_type' : 'star_doc' })(view_w_watch_list)
 
 app.route('/raw/<everything:name>')(view_w_raw)
 app.route('/raw_acl/<everything:name>', defaults = { 'doc_acl' : 'on' })(view_w_raw)
@@ -658,10 +658,13 @@ app.route('/down/<everything:name>')(view_down)
 app.route('/acl_multiple', defaults = { 'multiple' : True }, methods = ['POST', 'GET'])(view_set)
 app.route('/acl/<everything:name>', methods = ['POST', 'GET'])(view_set)
 
+app.route('/render/<int:doc_rev>/<everything:name>')(view_w)
+
 app.route('/w_from/<everything:name>', defaults = { 'do_type' : 'from' })(view_w)
 app.route('/w/<everything:name>')(view_w)
 
 app.route('/random')(view_random)
+app.route('/list/random')(view_list_random)
 
 # Func-edit
 app.route('/edit/<everything:name>', methods = ['POST', 'GET'])(edit)
@@ -737,11 +740,11 @@ app.route('/alarm')(user_alarm)
 app.route('/alarm/delete')(user_alarm_delete)
 app.route('/alarm/delete/<int:id>')(user_alarm_delete)
 
-app.route('/watch_list', defaults = { 'tool' : 'watch_list' })(user_watch_list)
+app.route('/watch_list', defaults = { 'do_type' : 'watch_list' })(view_user_watch_list)
 app.route('/watch_list/<everything:name>', defaults = { 'tool' : 'watch_list' })(user_watch_list_name)
 app.route('/watch_list_from/<everything:name>', defaults = { 'tool' : 'watch_list_from' })(user_watch_list_name)
 
-app.route('/star_doc', defaults = { 'tool' : 'star_doc' })(user_watch_list)
+app.route('/star_doc', defaults = { 'do_type' : 'star_doc' })(view_user_watch_list)
 app.route('/star_doc/<everything:name>', defaults = { 'tool' : 'star_doc' })(user_watch_list_name)
 app.route('/star_doc_from/<everything:name>', defaults = { 'tool' : 'star_doc_from' })(user_watch_list_name)
 
@@ -847,8 +850,8 @@ app.route('/api/recent_discuss/<set_type>/<int:limit>')(api_list_recent_discuss)
 app.route('/api/recent_discuss/<int:limit>')(api_list_recent_discuss)
 app.route('/api/recent_discuss')(api_list_recent_discuss)
 
-app.route('/api/lang', methods = ['POST'])(api_func_language)
-app.route('/api/lang/<data>')(api_func_language)
+app.route('/api/lang', methods = ['POST'])(api_func_language_exter)
+app.route('/api/lang/<data>')(api_func_language_exter)
 app.route('/api/sha224/<everything:data>')(api_func_sha224)
 app.route('/api/ip/<everything:data>')(api_func_ip)
 
@@ -873,9 +876,9 @@ app.route('/api/v2/history/<int:num>/<set_type>/<everything:doc_name>')(api_list
 app.route('/api/v2/topic/<int:num>/<set_type>/<everything:name>')(api_topic_list)
 
 app.route('/api/v2/bbs')(api_bbs_list)
-app.route('/api/v2/bbs/main')(api_bbs)
+app.route('/api/v2/bbs/main')(api_bbs_exter)
 app.route('/api/v2/bbs/set/<int:bbs_num>/<name>', methods = ['GET', 'PUT'])(api_bbs_w_set)
-app.route('/api/v2/bbs/in/<int:bbs_num>/<int:page>')(api_bbs)
+app.route('/api/v2/bbs/in/<int:bbs_num>/<int:page>')(api_bbs_exter)
 app.route('/api/v2/bbs/w/<sub_code>', defaults = { 'legacy' : '' })(api_bbs_w)
 app.route('/api/v2/bbs/w/tabom/<sub_code>', methods = ['GET', 'POST'])(api_bbs_w_tabom)
 app.route('/api/v2/bbs/w/comment/<sub_code>/<tool>', defaults = { 'legacy' : '' })(api_bbs_w_comment_exter)
@@ -886,7 +889,7 @@ app.route('/api/v2/doc_watch_list/<int:num>/<everything:name>')(api_w_watch_list
 app.route('/api/v2/set_reset/<everything:name>')(api_w_set_reset)
 app.route('/api/v2/page_view/<everything:name>')(api_w_page_view)
 
-app.route('/api/v2/setting/<name>', methods = ['GET', 'PUT'])(api_setting)
+app.route('/api/v2/setting/<name>', methods = ['GET', 'PUT'])(api_setting_exter)
 
 app.route('/api/v2/auth')(api_func_auth)
 app.route('/api/v2/auth/<user_name>')(api_func_auth)
@@ -898,7 +901,7 @@ app.route('/api/v2/user/setting/editor', methods = ['GET', 'POST', 'DELETE'])(ap
 app.route('/api/v2/ip/<everything:data>', methods = ['GET', 'POST'])(api_func_ip)
 app.route('/api/v2/ip_menu/<everything:ip>', defaults = { 'option' : 'user' }, methods = ['GET', 'POST'])(api_func_ip_menu)
 app.route('/api/v2/user_menu/<everything:ip>')(api_func_ip_menu)
-app.route('/api/v2/lang', defaults = { 'legacy' : '' }, methods = ['POST'])(api_func_language)
+app.route('/api/v2/lang', defaults = { 'legacy' : '' }, methods = ['POST'])(api_func_language_exter)
 
 # Func-main
 # 여기도 전반적인 조정 시행 예정
@@ -931,7 +934,7 @@ app.route('/setting/external', methods = ['POST', 'GET'])(main_setting_external)
 app.route('/setting/sitemap', methods = ['POST', 'GET'])(main_setting_sitemap)
 app.route('/setting/sitemap_set', methods = ['POST', 'GET'])(main_setting_sitemap_set)
 app.route('/setting/skin_set', methods = ['POST', 'GET'])(main_setting_skin_set)
-app.route('/setting/404_page', methods = ['POST', 'GET'])(setting_404_page)
+app.route('/setting/404_page', methods = ['POST', 'GET'])(main_setting_404_page)
 app.route('/setting/email_test', methods = ['POST', 'GET'])(main_setting_email_test)
 
 app.route('/easter_egg')(main_func_easter_egg)

+ 0 - 0
route_go/bin/test → bin/test


+ 2 - 0
debug_build.sh

@@ -0,0 +1,2 @@
+sudo rm -rf *_data
+docker compose up --build

+ 41 - 0
docker-compose.yaml

@@ -0,0 +1,41 @@
+services:
+    opennamu-web:
+        container_name: opennamu-web
+        # image: opennamu:latest
+        build:
+            context: .
+            dockerfile: Dockerfile.ko
+        ports:
+            - "3000:3000"
+        volumes:
+            - ./docker_data:/app/data
+        environment:
+            NAMU_DB_TYPE: mysql
+            NAMU_DB: data
+            NAMU_DB_HOST: opennamu-db
+            NAMU_DB_PORT: 3306
+            NAMU_DB_USER: opennamu
+            NAMU_DB_PASSWORD: opennamu_password
+            NAMU_LANG: ko-KR
+            NAMU_MARKUP: namumark
+        networks:
+            - opennamu
+        depends_on:
+            - opennamu-db
+
+    opennamu-db:
+        container_name: opennamu-db
+        image: mysql:latest
+        restart: always
+        environment:
+            MYSQL_ROOT_PASSWORD: root_password
+            MYSQL_DATABASE: data
+            MYSQL_USER: opennamu
+            MYSQL_PASSWORD: opennamu_password
+        volumes:
+            - ./db_data:/var/lib/mysql
+        networks:
+            - opennamu
+
+networks:
+    opennamu:

+ 3 - 2
lang/en-US.json

@@ -62,6 +62,7 @@
     "delete_bottom_text" : "Delete textarea bottom notice",
     "revert_bottom_text" : "Revert textarea bottom notice",
     "warning_restart" : "Restarting... Press Refresh (F5)",
+    "random_list" : "Random document(s) list",
 
     "_comment_": "Common",
     "data": "Data",
@@ -744,7 +745,7 @@
     "topic_long_error": "The discussions topic must not exceed 256 characters.",
     "email_error": "No one has this email.",
     "regex_error": "There is an error in the regular expression.",
-    "decument_404_error": "This document does not exist.",
+    "document_404_error": "This document does not exist.",
     "func_404_error": "This URL does not have the correct function.",
     "fast_edit_error": "You can edit another document after this period (Second(s)): ",
     "too_many_dec_error": "This feature is not supported because there are too many documents.",
@@ -783,7 +784,7 @@
     "challenge_title_tenth_contribute": "Boys, Be Ambitious!",
     "challenge_info_tenth_contribute": "Make your 10th contribution<br><br>Reward: 📝 title and 1000 exp",
     "challenge_title_hundredth_contribute": "Knowledge is power.",
-    "challenge_info_hundredth_contribute": "Make your 100th contribution<br><br>보상: 🖊️ title and 3000 exp",
+    "challenge_info_hundredth_contribute": "Make your 100th contribution<br><br>Reward: 🖊️ title and 3000 exp",
     "challenge_title_thousandth_contribute": "Rome wasn't built in a day.",
     "challenge_info_thousandth_contribute": "Make your 1000th contribution<br><br>Reward: 🏅 title and 10000 exp",
     "challenge_title_first_discussion": "Truth is generally the best vindication against slander.",

+ 3 - 2
lang/ko-KR.json

@@ -110,7 +110,7 @@
     "user_document": "사용자 문서",
     "id": "아이디",
     "no_login_warning": "비로그인 상태입니다. 편집 시 지금 접속한 IP가 기록됩니다.",
-    "decument_404_error": "이 문서는 존재하지 않습니다.",
+    "document_404_error": "이 문서는 존재하지 않습니다.",
     "key": "키",
     "lastest": "최신",
     "now_password": "현재 비밀번호",
@@ -709,5 +709,6 @@
     "move_bottom_text" : "이동 하단 문구",
     "delete_bottom_text" : "삭제 하단 문구",
     "revert_bottom_text" : "되돌리기 하단 문구",
-    "warning_restart" : "재시작 중... 새로고침(F5)를 눌러주세요"
+    "warning_restart" : "재시작 중... 새로고침(F5)를 눌러주세요",
+    "random_list" : "랜덤 문서 목록"
 }

+ 1 - 1
readme-en.md

@@ -32,7 +32,7 @@ openNAMU is protected by [BSD 3-Clause License](./LICNESE). Please refer to the
  * [highlight.js](https://highlightjs.org/)
  * [KaTeX](https://katex.org/)
  * [Feather](https://feathericons.com/)
- * [go.mod](https://github.com/openNAMU/openNAMU/blob/beta/route_go/go.mod)
+ * [GopenNAMU](https://github.com/openNAMU/GopenNAMU)
 
 ## Etc.
  * Owner rights are granted to the first registor.

+ 1 - 1
readme.md

@@ -32,7 +32,7 @@
  * [highlight.js](https://highlightjs.org/)
  * [KaTeX](https://katex.org/)
  * [Feather](https://feathericons.com/)
- * [go.mod](https://github.com/openNAMU/openNAMU/blob/beta/route_go/go.mod)
+ * [GopenNAMU](https://github.com/openNAMU/GopenNAMU)
 
 ### 도움을 주신 분들
  * [Team Croatia](https://github.com/TeamCroatia)

+ 4 - 1
requirements.txt

@@ -1,15 +1,18 @@
 pip
 
+h11
 flask
 flask[async]
 hypercorn
 
 aiohttp
 asyncio
+nest_asyncio
 requests
 
 diff-match-patch
 
 pillow
 
-pymysql
+pymysql
+cryptography

+ 11 - 9
route/__init__.py

@@ -81,6 +81,7 @@ from route.main_setting_sitemap_set import main_setting_sitemap_set
 from route.main_setting_skin_set import main_setting_skin_set
 from route.main_setting_top_menu import main_setting_top_menu
 from route.main_setting_email_test import main_setting_email_test
+from route.main_setting_404_page import main_setting_404_page
 
 from route.main_sys_restart import main_sys_restart
 from route.main_sys_shutdown import main_sys_shutdown
@@ -139,7 +140,6 @@ from route.user_setting_skin_set_main import user_setting_skin_set_main
 from route.user_setting_top_menu import user_setting_top_menu
 from route.user_setting_user_name import user_setting_user_name
 
-from route.user_watch_list import user_watch_list
 from route.user_watch_list_name import user_watch_list_name
 
 from route.view_set import view_set
@@ -161,14 +161,10 @@ from route.n_list_recent_discuss import list_recent_discuss
 from route.n_list_recent_block import list_recent_block
 from route.n_list_user_check_submit import list_user_check_submit
 
-from route.n_w_watch_list import w_watch_list
-
 from route.n_topic_list import topic_list
 
 from route.n_give_auth import give_auth
 
-from route.n_setting_404_page import setting_404_page
-
 from route.n_bbs_main import bbs_main
 from route.n_bbs_in import bbs_in
 from route.n_bbs_w_set import bbs_w_set
@@ -176,7 +172,7 @@ from route.n_bbs_w_set import bbs_w_set
 from route.n_edit_move_all import edit_move_all
 
 from route.go_api_func_llm import api_func_llm
-from route.go_api_func_language import api_func_language
+from route.go_api_func_language import api_func_language, api_func_language_exter
 from route.go_api_func_sha224 import api_func_sha224
 from route.go_api_func_ip import api_func_ip
 from route.go_api_func_ip_menu import api_func_ip_menu
@@ -197,7 +193,7 @@ from route.go_api_list_auth import api_list_auth
 from route.go_api_list_markup import api_list_markup
 from route.go_api_list_history import api_list_history, api_list_history_exter
 
-from route.go_api_bbs import api_bbs
+from route.go_api_bbs import api_bbs, api_bbs_exter
 from route.go_api_bbs_list import api_bbs_list
 from route.go_api_bbs_w import api_bbs_w
 from route.go_api_bbs_w_set import api_bbs_w_set
@@ -205,7 +201,7 @@ from route.go_api_bbs_w_tabom import api_bbs_w_tabom
 from route.go_api_bbs_w_comment import api_bbs_w_comment, api_bbs_w_comment_exter
 from route.go_api_bbs_w_comment_one import api_bbs_w_comment_one, api_bbs_w_comment_one_exter
 
-from route.go_api_setting import api_setting
+from route.go_api_setting import api_setting, api_setting_exter
 
 from route.go_api_topic import api_topic
 from route.go_api_topic_list import api_topic_list
@@ -221,4 +217,10 @@ from route.go_api_w_render import api_w_render, api_w_render_exter
 from route.go_api_w_set_reset import api_w_set_reset
 from route.go_api_w_page_view import api_w_page_view
 
-from route.go_main_func_easter_egg import main_func_easter_egg
+from route.go_main_func_easter_egg import main_func_easter_egg
+
+from route.go_view_list_random import view_list_random
+
+from route.go_view_w_watch_list import view_w_watch_list
+
+from route.go_view_user_watch_list import view_user_watch_list

+ 3 - 3
route/api_skin_info.py

@@ -4,7 +4,7 @@ from .tool.func import *
 
 async def api_skin_info(name = ''):
     with get_db_connect() as conn:
-        name = skin_check(conn) if name == '' else './views/' + name + '/index.html'
+        name = await skin_check() if name == '' else './views/' + name + '/index.html'
 
         if not flask.request.args.get('all', None):
             json_address = re.sub(r"(((?!\.|\/).)+)\.html$", "info.json", name)
@@ -25,7 +25,7 @@ async def api_skin_info(name = ''):
                 "Before Namu" : "https://raw.githubusercontent.com/openNAMU/openNAMU-Skin-Before_Namu/master/info.json"
             }
 
-            for i in load_skin(conn, skin_check(conn, 1), 1):
+            for i in await load_skin(await skin_check(1), 1):
                 json_address = re.sub(r"(((?!\.|\/).)+)\.html$", "info.json", './views/' + i + '/index.html')
                 try:
                     json_data = json_loads(open(json_address, encoding='utf8').read())
@@ -33,7 +33,7 @@ async def api_skin_info(name = ''):
                     json_data = None
 
                 if json_data:
-                    if i == skin_check(conn, 1):
+                    if i == await skin_check(1):
                         json_data = {**json_data, **{ "main" : "true" }}
 
                     if "info_link" in json_data:

+ 1 - 1
route/api_user_info.py

@@ -74,6 +74,6 @@ async def api_user_info(user_name = ''):
             'edit_request_able',
             'cidr'
         ]
-        lang_data = { for_a : get_lang(conn, for_a) for for_a in lang_data_list }
+        lang_data = { for_a : await get_lang(for_a) for for_a in lang_data_list }
                 
         return flask.jsonify({ 'data' : data_result, 'language' : lang_data })

+ 6 - 6
route/bbs_delete.py

@@ -26,14 +26,14 @@ async def bbs_delete(bbs_num = ''):
             
             return redirect(conn, '/bbs/main')
         else:
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [get_lang(conn, 'bbs_delete'), await wiki_set(), await wiki_custom(conn), wiki_css(['(' + bbs_name + ')', 0])],
-                data = render_simple_set(conn, '''
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [await get_lang('bbs_delete'), await wiki_set(), await wiki_custom(), wiki_css(['(' + bbs_name + ')', 0])],
+                data = await render_simple_set('''
                     <form method="post">
-                        <span>''' + get_lang(conn, 'delete_warning') + '''</span>
+                        <span>''' + await get_lang('delete_warning') + '''</span>
                         <hr class="main_hr">
-                        <button type="submit">''' + get_lang(conn, 'delete') + '''</button>
+                        <button type="submit">''' + await get_lang('delete') + '''</button>
                     </form>
                 '''),
-                menu = [['bbs/set/' + bbs_num_str, get_lang(conn, 'return')]]
+                menu = [['bbs/set/' + bbs_num_str, await get_lang('return')]]
             ))

+ 7 - 7
route/bbs_make.py

@@ -21,21 +21,21 @@ async def bbs_make():
 
             return redirect(conn, '/bbs/main')
         else:
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [get_lang(conn, 'bbs_make'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [await get_lang('bbs_make'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
                 data = '''
                     <form method="post">
-                        <input placeholder="''' + get_lang(conn, 'bbs_name') + '''" name="bbs_name">
+                        <input placeholder="''' + await get_lang('bbs_name') + '''" name="bbs_name">
                         <hr class="main_hr">
                         
                         <select name="bbs_type">
-                            <option value="comment">''' + get_lang(conn, 'comment_base') + '''</option>
-                            <option value="thread">''' + get_lang(conn, 'thread_base') + '''</option>
+                            <option value="comment">''' + await get_lang('comment_base') + '''</option>
+                            <option value="thread">''' + await get_lang('thread_base') + '''</option>
                         </select>
                         <hr class="main_hr">
                         
-                        <button type="submit">''' + get_lang(conn, 'save') + '''</button>
+                        <button type="submit">''' + await get_lang('save') + '''</button>
                     </form>
                 ''',
-                menu = [['bbs/main', get_lang(conn, 'return')]]
+                menu = [['bbs/main', await get_lang('return')]]
             ))

+ 18 - 18
route/bbs_w.py

@@ -22,24 +22,24 @@ async def bbs_w(bbs_num = '', tool = 'bbs', page = 1, name = ''):
             bbs_num_str = str(bbs_num)
 
             title_name = bbs_name
-            sub = '(' + get_lang(conn, 'bbs') + ')'
-            menu = [['bbs/main', get_lang(conn, 'return')], ['bbs/edit/' + bbs_num_str, get_lang(conn, 'add')], ['bbs/set/' + bbs_num_str, get_lang(conn, 'bbs_set')]]
+            sub = '(' + await get_lang('bbs') + ')'
+            menu = [['bbs/main', await get_lang('return')], ['bbs/edit/' + bbs_num_str, await get_lang('add')], ['bbs/set/' + bbs_num_str, await get_lang('bbs_set')]]
         elif tool == 'record':
             curs.execute(db_change('select set_data, set_id from bbs_set where set_name = "bbs_name"'))
             db_data = curs.fetchall()
             bbs_name_dict = { for_a[1] : for_a[0] for for_a in db_data } if db_data else {}
             
             title_name = name
-            sub = '(' + get_lang(conn, 'bbs_record') + ')'
-            menu = [['user/' + url_pas(name), get_lang(conn, 'user_tool')]]
+            sub = '(' + await get_lang('bbs_record') + ')'
+            menu = [['user/' + url_pas(name), await get_lang('user_tool')]]
         elif tool == 'comment_record':
             curs.execute(db_change('select set_data, set_id from bbs_set where set_name = "bbs_name"'))
             db_data = curs.fetchall()
             bbs_name_dict = { for_a[1] : for_a[0] for for_a in db_data } if db_data else {}
             
             title_name = name
-            sub = '(' + get_lang(conn, 'bbs_comment_record') + ')'
-            menu = [['user/' + url_pas(name), get_lang(conn, 'user_tool')]]
+            sub = '(' + await get_lang('bbs_comment_record') + ')'
+            menu = [['user/' + url_pas(name), await get_lang('user_tool')]]
         else:
             curs.execute(db_change('select set_data, set_id from bbs_set where set_name = "bbs_name"'))
             db_data = curs.fetchall()
@@ -53,9 +53,9 @@ async def bbs_w(bbs_num = '', tool = 'bbs', page = 1, name = ''):
                     bbs_type = db_data_2[0][0] if db_data_2 else 'comment'
 
                     if bbs_type == 'thread':
-                        bbs_type = get_lang(conn, 'thread_base')
+                        bbs_type = await get_lang('thread_base')
                     else:
-                        bbs_type = get_lang(conn, 'comment_base')
+                        bbs_type = await get_lang('comment_base')
                     
                     curs.execute(db_change('select set_data from bbs_data where set_id = ? and set_name = "date" order by set_code + 0 desc limit 1'), [for_a[1]])
                     db_data_2 = curs.fetchall()
@@ -69,25 +69,25 @@ async def bbs_w(bbs_num = '', tool = 'bbs', page = 1, name = ''):
             
             data += '<hr class="main_hr">'
 
-            title_name = get_lang(conn, 'bbs_main')
-            menu = [['other', get_lang(conn, 'other_tool')]] + ([['bbs/make', get_lang(conn, 'add')]] if admin_auth == 1 else [])
+            title_name = await get_lang('bbs_main')
+            menu = [['other', await get_lang('other_tool')]] + ([['bbs/make', await get_lang('add')]] if admin_auth == 1 else [])
 
         if tool == 'comment_record':
             data += '''
                 <table id="main_table_set">
                     <tr id="main_table_top_tr">
-                        <td id="main_table_width">''' + get_lang(conn, 'editor') + '''</td>
-                        <td id="main_table_width">''' + get_lang(conn, 'time') + '''</td>
-                        <td id="main_table_width">''' + get_lang(conn, 'comment') + '''</td>
+                        <td id="main_table_width">''' + await get_lang('editor') + '''</td>
+                        <td id="main_table_width">''' + await get_lang('time') + '''</td>
+                        <td id="main_table_width">''' + await get_lang('comment') + '''</td>
                     </tr>
             '''
         else:
             data += '''
                 <table id="main_table_set">
                     <tr id="main_table_top_tr">
-                        <td id="main_table_width">''' + get_lang(conn, 'editor') + '''</td>
-                        <td id="main_table_width">''' + get_lang(conn, 'time') + '''</td>
-                        <td id="main_table_width">''' + get_lang(conn, 'last_comment_time') + '''</td>
+                        <td id="main_table_width">''' + await get_lang('editor') + '''</td>
+                        <td id="main_table_width">''' + await get_lang('time') + '''</td>
+                        <td id="main_table_width">''' + await get_lang('last_comment_time') + '''</td>
                     </tr>
             '''
 
@@ -188,8 +188,8 @@ async def bbs_w(bbs_num = '', tool = 'bbs', page = 1, name = ''):
                 
         data += '</table>'
 
-        return easy_minify(conn, flask.render_template(skin_check(conn),
-            imp = [title_name, await wiki_set(), await wiki_custom(conn), wiki_css([sub, 0])],
+        return easy_minify(flask.render_template(await skin_check(),
+            imp = [title_name, await wiki_set(), await wiki_custom(), wiki_css([sub, 0])],
             data = data,
             menu = menu
         ))

+ 8 - 8
route/bbs_w_comment_tool.py

@@ -8,23 +8,23 @@ async def bbs_w_comment_tool(bbs_num = '', post_num = '', comment_num = ''):
         post_num_str = str(post_num)
         
         data += '''
-            <h2>''' + get_lang(conn, 'tool') + '''</h2>
+            <h2>''' + await get_lang('tool') + '''</h2>
             <ul>
-                <li><a href="/bbs/raw/''' + url_pas(bbs_num_str) + '/' + url_pas(post_num_str) + '/' + url_pas(comment_num) + '">' + get_lang(conn, 'raw') + '''</a></li>
-                <li><a href="/bbs/edit/''' + url_pas(bbs_num_str) + '/' + url_pas(post_num_str) + '/' + url_pas(comment_num) + '">' + get_lang(conn, 'edit') + '''</a></li>
+                <li><a href="/bbs/raw/''' + url_pas(bbs_num_str) + '/' + url_pas(post_num_str) + '/' + url_pas(comment_num) + '">' + await get_lang('raw') + '''</a></li>
+                <li><a href="/bbs/edit/''' + url_pas(bbs_num_str) + '/' + url_pas(post_num_str) + '/' + url_pas(comment_num) + '">' + await get_lang('edit') + '''</a></li>
             </ul>
         '''
 
         if await acl_check('', 'owner_auth', '', '') != 1:
             data += '''
-                <h3>''' + get_lang(conn, 'owner') + '''</h2>
+                <h3>''' + await get_lang('owner') + '''</h2>
                 <ul>
-                    <li><a href="/bbs/delete/''' + url_pas(bbs_num_str) + '/' + url_pas(post_num_str) + '/' + url_pas(comment_num) + '">' + get_lang(conn, 'delete') + '''</a></li>
+                    <li><a href="/bbs/delete/''' + url_pas(bbs_num_str) + '/' + url_pas(post_num_str) + '/' + url_pas(comment_num) + '">' + await get_lang('delete') + '''</a></li>
                 </ul>
             '''
 
-        return easy_minify(conn, flask.render_template(skin_check(conn),
-            imp = [get_lang(conn, 'bbs_comment_tool'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+        return easy_minify(flask.render_template(await skin_check(),
+            imp = [await get_lang('bbs_comment_tool'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
             data = data,
-            menu = [['bbs/w/' + url_pas(bbs_num_str) + '/' + url_pas(post_num_str) + '#' + url_pas(comment_num), get_lang(conn, 'return')]]
+            menu = [['bbs/w/' + url_pas(bbs_num_str) + '/' + url_pas(post_num_str) + '#' + url_pas(comment_num), await get_lang('return')]]
         ))

+ 8 - 8
route/bbs_w_delete.py

@@ -47,20 +47,20 @@ async def bbs_w_delete(bbs_num = '', post_num = '', comment_num = ''):
             sub = '(' + bbs_name + ')'
             sub += ' (' + post_num_str + ')'
             
-            name = get_lang(conn, 'bbs_comment_delete')
+            name = await get_lang('bbs_comment_delete')
             if comment_num == '':
-                name = get_lang(conn, 'bbs_post_delete')
+                name = await get_lang('bbs_post_delete')
             else:
                 sub += ' (' + comment_num + ')'
 
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [name, await wiki_set(), await wiki_custom(conn), wiki_css([sub, 0])],
-                data = render_simple_set(conn, '''
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [name, await wiki_set(), await wiki_custom(), wiki_css([sub, 0])],
+                data = await render_simple_set('''
                     <form method="post">
-                        <span>''' + get_lang(conn, 'delete_warning') + '''</span>
+                        <span>''' + await get_lang('delete_warning') + '''</span>
                         <hr class="main_hr">
-                        <button type="submit">''' + get_lang(conn, 'delete') + '''</button>
+                        <button type="submit">''' + await get_lang('delete') + '''</button>
                     </form>
                 '''),
-                menu = [['bbs/w/' + bbs_num_str + '/' + post_num_str, get_lang(conn, 'return')]]
+                menu = [['bbs/w/' + bbs_num_str + '/' + post_num_str, await get_lang('return')]]
             ))

+ 15 - 15
route/bbs_w_edit.py

@@ -112,45 +112,45 @@ async def bbs_w_edit(bbs_num = '', post_num = '', comment_num = ''):
                 for data_list in acl_list:
                     acl_div[for_a] += '<option value="' + data_list + '">' + (data_list if data_list != '' else 'normal') + '</option>'
     
-            editor_top_text = '<a href="/filter/edit_filter">(' + get_lang(conn, 'edit_filter_rule') + ')</a>'
+            editor_top_text = '<a href="/filter/edit_filter">(' + await get_lang('edit_filter_rule') + ')</a>'
 
             if editor_top_text != '':
                 editor_top_text += '<hr class="main_hr">'
 
             if comment_num != '':
-                bbs_title = get_lang(conn, 'bbs_comment_edit')
+                bbs_title = await get_lang('bbs_comment_edit')
             elif post_num == '':
-                bbs_title = get_lang(conn, 'post_add')
+                bbs_title = await get_lang('post_add')
             else:
-                bbs_title = get_lang(conn, 'post_edit')
+                bbs_title = await get_lang('post_edit')
     
-            return easy_minify(conn, flask.render_template(skin_check(conn), 
-                imp = [bbs_title, await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+            return easy_minify(flask.render_template(await skin_check(), 
+                imp = [bbs_title, await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
                 data =  editor_top_text + '''
                     <form method="post">                        
-                        <input style="''' + option_display + '''" placeholder="''' + get_lang(conn, 'title') + '''" name="title" value="''' + html.escape(title) + '''">
+                        <input style="''' + option_display + '''" placeholder="''' + await get_lang('title') + '''" name="title" value="''' + html.escape(title) + '''">
                         <hr style="''' + option_display + '''" class="main_hr">
 
                         ''' + await edit_editor(conn, ip, data, 'bbs') + '''
 
                         <!--
                         <div style="''' + option_display + '''">
-                            ''' + render_simple_set(conn, '''
+                            ''' + await render_simple_set('''
                                 <hr class="main_hr">
-                                <a href="/acl/TEST#exp">(''' + get_lang(conn, 'reference') + ''')</a>
-                                <h2>''' + get_lang(conn, 'acl') + '''</h2>
-                                <h3>''' + get_lang(conn, 'post_view_acl') + '''</h3>
+                                <a href="/acl/TEST#exp">(''' + await get_lang('reference') + ''')</a>
+                                <h2>''' + await get_lang('acl') + '''</h2>
+                                <h3>''' + await get_lang('post_view_acl') + '''</h3>
                                 <select name="post_view_acl">''' + acl_div[0] + '''</select>
 
-                                <h4>''' + get_lang(conn, 'post_comment_acl') + '''</h4>
+                                <h4>''' + await get_lang('post_comment_acl') + '''</h4>
                                 <select name="post_comment_acl">''' + acl_div[1] + '''</select>
 
-                                <h2>''' + get_lang(conn, 'markup') + '''</h2>
-                                ''' + get_lang(conn, 'not_working') + '''
+                                <h2>''' + await get_lang('markup') + '''</h2>
+                                ''' + await get_lang('not_working') + '''
                             ''') + '''
                         </div>
                         -->
                     </form>
                 ''',
-                menu = [['bbs/in/' + bbs_num_str, get_lang(conn, 'return')]]
+                menu = [['bbs/in/' + bbs_num_str, await get_lang('return')]]
             ))

+ 5 - 5
route/bbs_w_hide.py

@@ -20,12 +20,12 @@ async def bbs_w_hide(bbs_num = '', post_num = ''):
         if flask.request.method == 'POST':
             pass
         else:
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [get_lang(conn, 'bbs_post_hide'), await wiki_set(), await wiki_custom(conn), wiki_css(['(' + bbs_name + ')' + ' (' + post_num_str + ')', 0])],
-                data = render_simple_set(conn, '''
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [await get_lang('bbs_post_hide'), await wiki_set(), await wiki_custom(), wiki_css(['(' + bbs_name + ')' + ' (' + post_num_str + ')', 0])],
+                data = await render_simple_set('''
                     <form method="post">
-                        <button type="submit">''' + get_lang(conn, 'hide') + '''</button>
+                        <button type="submit">''' + await get_lang('hide') + '''</button>
                     </form>
                 '''),
-                menu = [['bbs/w/' + bbs_num_str + '/' + post_num_str, get_lang(conn, 'return')]]
+                menu = [['bbs/w/' + bbs_num_str + '/' + post_num_str, await get_lang('return')]]
             ))

+ 5 - 5
route/bbs_w_pinned.py

@@ -33,14 +33,14 @@ async def bbs_w_pinned(bbs_num = '', post_num = ''):
             return redirect(conn, '/bbs/in/' + bbs_num_str)
         else:
             curs.execute(db_change('select set_data from bbs_data where set_code = ? and set_id = ? and set_name = "pinned"'), [post_num_str, bbs_num_str])
-            pinned = get_lang(conn, 'pinned') if not curs.fetchall() else get_lang(conn, 'pinned_release')
+            pinned = await get_lang('pinned') if not curs.fetchall() else await get_lang('pinned_release')
 
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [get_lang(conn, 'bbs_post_pinned'), await wiki_set(), await wiki_custom(conn), wiki_css(['(' + bbs_name + ')' + ' (' + post_num_str + ')', 0])],
-                data = render_simple_set(conn, '''
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [await get_lang('bbs_post_pinned'), await wiki_set(), await wiki_custom(), wiki_css(['(' + bbs_name + ')' + ' (' + post_num_str + ')', 0])],
+                data = await render_simple_set('''
                     <form method="post">
                         <button type="submit">''' + pinned + '''</button>
                     </form>
                 '''),
-                menu = [['bbs/w/' + bbs_num_str + '/' + post_num_str, get_lang(conn, 'return')]]
+                menu = [['bbs/w/' + bbs_num_str + '/' + post_num_str, await get_lang('return')]]
             ))

+ 8 - 8
route/bbs_w_post.py

@@ -31,15 +31,15 @@ async def bbs_w_post_comment(conn, user_id, sub_code, comment_num, bbs_num_str,
                 comment_add_count += 1
 
             date = ''
-            date += '<a href="javascript:opennamu_change_comment(\'' + sub_code_check + '\');">(' + get_lang(conn, 'comment') + ')</a> '
-            date += '<a href="/bbs/tool/' + bbs_num_str + '/' + post_num_str + '/' + sub_code_check + '">(' + get_lang(conn, 'tool') + ')</a> '
+            date += '<a href="javascript:opennamu_change_comment(\'' + sub_code_check + '\');">(' + await get_lang('comment') + ')</a> '
+            date += '<a href="/bbs/tool/' + bbs_num_str + '/' + post_num_str + '/' + sub_code_check + '">(' + await get_lang('tool') + ')</a> '
             date += temp_dict['comment_date']
 
             comment_data += '<span style="padding-left: 20px;"></span>' * margin_count
             comment_data += api_topic_thread_make(
                 await ip_pas(temp_dict['comment_user_id']),
                 date,
-                render_set(conn, doc_data = temp_dict['comment']),
+                await render_set(conn, doc_data = temp_dict['comment']),
                 sub_code_check,
                 color = color,
                 add_style = 'width: calc(100% - ' + str(margin_count * 20) + 'px);'
@@ -175,7 +175,7 @@ async def bbs_w_post(bbs_num = '', post_num = ''):
                     return await re_error(conn, 0)
 
                 date = ''
-                date += '<a href="javascript:opennamu_change_comment(\'0\');">(' + get_lang(conn, 'comment') + ')</a> '
+                date += '<a href="javascript:opennamu_change_comment(\'0\');">(' + await get_lang('comment') + ')</a> '
                 date += temp_dict['date']
 
                 data = ''
@@ -183,7 +183,7 @@ async def bbs_w_post(bbs_num = '', post_num = ''):
                 data += api_topic_thread_make(
                     await ip_pas(temp_dict['user_id']),
                     date,
-                    render_set(conn, doc_data = temp_dict['data']),
+                    await render_set(conn, doc_data = temp_dict['data']),
                     '0',
                     color = 'red'
                 )
@@ -209,8 +209,8 @@ async def bbs_w_post(bbs_num = '', post_num = ''):
                     </form>
                 '''
 
-                return easy_minify(conn, flask.render_template(skin_check(conn),
-                    imp = [bbs_name, await wiki_set(), await wiki_custom(conn), wiki_css(['(' + get_lang(conn, 'bbs') + ')', 0])],
+                return easy_minify(flask.render_template(await skin_check(),
+                    imp = [bbs_name, await wiki_set(), await wiki_custom(), wiki_css(['(' + await get_lang('bbs') + ')', 0])],
                     data = data,
-                    menu = [['bbs/in/' + bbs_num_str, get_lang(conn, 'return')], ['bbs/edit/' + bbs_num_str + '/' + post_num_str, get_lang(conn, 'edit')], ['bbs/tool/' + bbs_num_str + '/' + post_num_str, get_lang(conn, 'tool')]]
+                    menu = [['bbs/in/' + bbs_num_str, await get_lang('return')], ['bbs/edit/' + bbs_num_str + '/' + post_num_str, await get_lang('edit')], ['bbs/tool/' + bbs_num_str + '/' + post_num_str, await get_lang('tool')]]
                 ))

+ 10 - 10
route/bbs_w_tool.py

@@ -10,33 +10,33 @@ async def bbs_w_tool(bbs_num = '', post_num = ''):
         post_num_str = str(post_num)
         
         data += '''
-            <h2>''' + get_lang(conn, 'tool') + '''</h2>
+            <h2>''' + await get_lang('tool') + '''</h2>
             <ul>
-                <li><a href="/bbs/raw/''' + url_pas(bbs_num_str) + '/' + url_pas(post_num_str) + '">' + get_lang(conn, 'raw') + '''</a></li>
+                <li><a href="/bbs/raw/''' + url_pas(bbs_num_str) + '/' + url_pas(post_num_str) + '">' + await get_lang('raw') + '''</a></li>
             </ul>
         '''
 
         if await acl_check('', 'bbs_auth', '', '') != 1:
             curs.execute(db_change('select set_data from bbs_data where set_code = ? and set_id = ? and set_name = "pinned"'), [post_num_str, bbs_num_str])
-            pinned = get_lang(conn, 'pinned') if not curs.fetchall() else get_lang(conn, 'pinned_release')
+            pinned = await get_lang('pinned') if not curs.fetchall() else await get_lang('pinned_release')
 
             data += '''
-                <h3>''' + get_lang(conn, 'admin') + '''</h3>
+                <h3>''' + await get_lang('admin') + '''</h3>
                 <ul>
-                    <!-- <li><a href="/bbs/blind/''' + url_pas(bbs_num_str) + '/' + url_pas(post_num_str) + '">' + get_lang(conn, 'hide') + '''</a></li> -->
+                    <!-- <li><a href="/bbs/blind/''' + url_pas(bbs_num_str) + '/' + url_pas(post_num_str) + '">' + await get_lang('hide') + '''</a></li> -->
                     <li><a href="/bbs/pinned/''' + url_pas(bbs_num_str) + '/' + url_pas(post_num_str) + '">' + pinned + '''</a></li>
                 </ul>
             '''
 
             data += '''
-                <h3>''' + get_lang(conn, 'owner') + '''</h2>
+                <h3>''' + await get_lang('owner') + '''</h2>
                 <ul>
-                    <li><a href="/bbs/delete/''' + url_pas(bbs_num_str) + '/' + url_pas(post_num_str) + '">' + get_lang(conn, 'delete') + '''</a></li>
+                    <li><a href="/bbs/delete/''' + url_pas(bbs_num_str) + '/' + url_pas(post_num_str) + '">' + await get_lang('delete') + '''</a></li>
                 </ul>
             '''
 
-        return easy_minify(conn, flask.render_template(skin_check(conn),
-            imp = [get_lang(conn, 'bbs_post_tool'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+        return easy_minify(flask.render_template(await skin_check(),
+            imp = [await get_lang('bbs_post_tool'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
             data = data,
-            menu = [['bbs/w/' + url_pas(bbs_num_str) + '/' + url_pas(post_num_str), get_lang(conn, 'return')]]
+            menu = [['bbs/w/' + url_pas(bbs_num_str) + '/' + url_pas(post_num_str), await get_lang('return')]]
         ))

+ 33 - 39
route/edit.py

@@ -4,26 +4,20 @@ from .tool.func import *
 
 from .view_set import view_set_markup
 
-def edit_render_set(name, content):
-    with get_db_connect() as conn:
-        render_set(conn, 
-            doc_name = name,
-            doc_data = content
+async def edit_timeout(conn, name, content, timeout = 3):
+    try:
+        await asyncio.wait_for(
+            render_set(
+                conn,
+                doc_name = name,
+                doc_data = content
+            ),
+            timeout = timeout
         )
 
-# https://stackoverflow.com/questions/13821156/timeout-function-using-threading-in-python-does-not-work
-def edit_timeout(func, args = (), timeout = 3):
-    pool = multiprocessing.Pool(processes = 1)
-    result = pool.apply_async(func, args = args)
-    try:
-        result.get(timeout = timeout)
-    except multiprocessing.TimeoutError:
-        pool.terminate()
-        return 1
-    else:
-        pool.close()
-        pool.join()
         return 0
+    except asyncio.TimeoutError:
+        return 1
         
 async def edit_editor(conn, ip, data_main = '', do_type = 'edit', addon = '', name = ''):
     curs = conn.cursor()
@@ -53,9 +47,9 @@ async def edit_editor(conn, ip, data_main = '', do_type = 'edit', addon = '', na
     elif do_type == 'bbs':
         do_type = 'edit'
             
-    p_text = html.escape(sql_d[0][0]) if sql_d and sql_d[0][0] != '' else get_lang(conn, 'default_edit_help')
+    p_text = html.escape(sql_d[0][0]) if sql_d and sql_d[0][0] != '' else await get_lang('default_edit_help')
     
-    monaco_editor_top += '<a href="javascript:opennamu_do_editor_temp_save();">(' + get_lang(conn, 'load_temp_save') + ')</a> <a href="javascript:opennamu_do_editor_temp_save_load();">(' + get_lang(conn, 'load_temp_save_load') + ')</a>'
+    monaco_editor_top += '<a href="javascript:opennamu_do_editor_temp_save();">(' + await get_lang('load_temp_save') + ')</a> <a href="javascript:opennamu_do_editor_temp_save_load();">(' + await get_lang('load_temp_save_load') + ')</a>'
     monaco_editor_top += '<hr class="main_hr">'
     
     darkmode = flask.request.cookies.get('main_css_darkmode', '0')
@@ -70,8 +64,8 @@ async def edit_editor(conn, ip, data_main = '', do_type = 'edit', addon = '', na
 
     # 에디터 선택창
     monaco_editor_top += '<select onclick="do_sync_monaco_and_textarea();" id="opennamu_select_editor" onchange="opennamu_edit_turn_off_monaco();">'
-    monaco_editor_top += '<option value="default" ' + ('selected' if editor_display[0] == '' else '') + '>' + get_lang(conn, 'default') + '</option>'
-    monaco_editor_top += '<option value="monaco" ' + ('selected' if editor_display[1] == '' else '') + '>' + get_lang(conn, 'monaco_editor') + '</option>'
+    monaco_editor_top += '<option value="default" ' + ('selected' if editor_display[0] == '' else '') + '>' + await get_lang('default') + '</option>'
+    monaco_editor_top += '<option value="monaco" ' + ('selected' if editor_display[1] == '' else '') + '>' + await get_lang('monaco_editor') + '</option>'
     monaco_editor_top += '</select> '
 
     # 문법 선택창
@@ -82,7 +76,7 @@ async def edit_editor(conn, ip, data_main = '', do_type = 'edit', addon = '', na
 
     textarea_size = 'opennamu_textarea_500' if do_type == 'edit' else 'opennamu_textarea_100'
 
-    out_field = await captcha_get(conn) + ip_warning(conn) + addon
+    out_field = await captcha_get(conn) + await ip_warning(conn) + addon
     if out_field != '':
         out_field += '<hr class="main_hr">'
 
@@ -91,7 +85,7 @@ async def edit_editor(conn, ip, data_main = '', do_type = 'edit', addon = '', na
         <div>
             ''' + monaco_editor_top + '''
             <hr class="main_hr">
-            ''' + edit_button(conn) + '''
+            ''' + await edit_button(conn) + '''
             <div id="opennamu_editor_user_button"></div>
         </div>
         
@@ -111,8 +105,8 @@ async def edit_editor(conn, ip, data_main = '', do_type = 'edit', addon = '', na
             });
         </script>
                         
-        <button id="opennamu_save_button" type="submit" onclick="do_stop_exit_release();">''' + get_lang(conn, 'send') + '''</button>
-        <button id="opennamu_preview_button" type="button" onclick="opennamu_do_editor_preview();">''' + get_lang(conn, 'preview') + '''</button>
+        <button id="opennamu_save_button" type="submit" onclick="do_stop_exit_release();">''' + await get_lang('send') + '''</button>
+        <button id="opennamu_preview_button" type="button" onclick="opennamu_do_editor_preview();">''' + await get_lang('preview') + '''</button>
         <hr class="main_hr">
 
         <div id="opennamu_preview_area"></div>
@@ -214,7 +208,7 @@ async def edit(name = 'Test', section = 0, do_type = ''):
             db_data_2 = curs.fetchall()
             db_data_2 = number_check(db_data_2[0][0]) if db_data_2 and db_data_2[0][0] != '' else ''
             if db_data_2 != '' and platform.system() in ('Linux', 'Darwin'):
-                timeout = edit_timeout(edit_render_set, (name, content), timeout = int(db_data_2))
+                timeout = await edit_timeout(conn, name, content, int(db_data_2))
             else:
                 timeout = 0
 
@@ -239,7 +233,7 @@ async def edit(name = 'Test', section = 0, do_type = ''):
                     leng
                 )
                 
-                render_set(conn, 
+                await render_set(conn, 
                     doc_name = name,
                     doc_data = content,
                     data_type = 'backlink'
@@ -278,7 +272,7 @@ async def edit(name = 'Test', section = 0, do_type = ''):
                 
                 if load_title == 0 and section == '':
                     load_title = name
-                    editor_top_text += '<a href="/manager/15/' + url_pas(name) + '">(' + get_lang(conn, 'load') + ')</a> '
+                    editor_top_text += '<a href="/manager/15/' + url_pas(name) + '">(' + await get_lang('load') + ')</a> '
                 elif section != '':
                     load_title = name
                     
@@ -296,7 +290,7 @@ async def edit(name = 'Test', section = 0, do_type = ''):
                         data_section = '\n' + data + '\n'
                         
                         while 1:
-                            data_match_re = r'\n((={1,6})(#?) ?([^\n]+))\n'
+                            data_match_re = r'\n((={1,6})(#?) ?([^\n]+)=)\n'
                             data_match = re.search(data_match_re, data_section)
                             if not data_match:
                                 data_section = ''
@@ -335,7 +329,7 @@ async def edit(name = 'Test', section = 0, do_type = ''):
 
                 doc_ver = flask.request.form.get('ver', '')
 
-                warning_edit = get_lang(conn, 'exp_edit_conflict') + ' '
+                warning_edit = await get_lang('exp_edit_conflict') + ' '
     
                 if flask.request.form.get('ver', '0') == '0':
                     warning_edit += '<a href="/raw/' + url_pas(name) + '">(r' + doc_ver + ')</a>'
@@ -352,16 +346,16 @@ async def edit(name = 'Test', section = 0, do_type = ''):
             if data_section == '':
                 data_section = data
     
-            editor_top_text += '<a href="/filter/edit_filter">(' + get_lang(conn, 'edit_filter_rule') + ')</a>'
+            editor_top_text += '<a href="/filter/edit_filter">(' + await get_lang('edit_filter_rule') + ')</a>'
     
             if editor_top_text != '':
                 editor_top_text += '<hr class="main_hr">'
 
             sub_menu = ' (' + str(section) + ')' if section != '' else ''
-            sub_title = '(' + get_lang(conn, 'edit_request') + ')' if edit_req_mode == 1 else '(' + get_lang(conn, 'edit') + ')'
+            sub_title = '(' + await get_lang('edit_request') + ')' if edit_req_mode == 1 else '(' + await get_lang('edit') + ')'
 
-            return easy_minify(conn, flask.render_template(skin_check(conn), 
-                imp = [name, await wiki_set(), await wiki_custom(conn), wiki_css([sub_title + sub_menu, 0])],
+            return easy_minify(flask.render_template(await skin_check(), 
+                imp = [name, await wiki_set(), await wiki_custom(), wiki_css([sub_title + sub_menu, 0])],
                 data = editor_top_text + '''
                     <form method="post">
                         <textarea style="display: none;" name="doc_section_data_where">''' + data_section_where + '''</textarea>
@@ -370,16 +364,16 @@ async def edit(name = 'Test', section = 0, do_type = ''):
                         <input style="display: none;" id="opennamu_editor_doc_name" value="''' + html.escape(name) + '''">
                         <input style="display: none;" name="ver" value="''' + doc_ver + '''">
                         
-                        <input placeholder="''' + get_lang(conn, 'why') + '''" name="send">
+                        <input placeholder="''' + await get_lang('why') + '''" name="send">
                         <hr class="main_hr">
                         
                         ''' + await edit_editor(conn, ip, data_section, addon = get_edit_text_bottom_check_box(conn) + get_edit_text_bottom(conn, 'edit') , name = name) + '''
                     </form>
                 ''',
                 menu = [
-                    ['w/' + url_pas(name), get_lang(conn, 'return')],
-                    ['delete/' + url_pas(name), get_lang(conn, 'delete')], 
-                    ['move/' + url_pas(name), get_lang(conn, 'move')], 
-                    ['upload', get_lang(conn, 'upload')]
+                    ['w/' + url_pas(name), await get_lang('return')],
+                    ['delete/' + url_pas(name), await get_lang('delete')], 
+                    ['move/' + url_pas(name), await get_lang('move')], 
+                    ['upload', await get_lang('upload')]
                 ]
             ))

+ 1 - 1
route/edit_backlink_reset.py

@@ -7,7 +7,7 @@ async def edit_backlink_reset(name = 'Test'):
         curs.execute(db_change("select data from data where title = ?"), [name])
         old = curs.fetchall()
         if old:
-            render_set(conn, 
+            await render_set(conn, 
                 doc_name = name,
                 doc_data = old[0][0],
                 data_type = 'backlink'

+ 6 - 6
route/edit_delete.py

@@ -53,15 +53,15 @@ async def edit_delete(name):
 
             return redirect(conn, '/w/' + url_pas(name))
         else:            
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [name, await wiki_set(), await wiki_custom(conn), wiki_css(['(' + get_lang(conn, 'delete') + ')', 0])],
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [name, await wiki_set(), await wiki_custom(), wiki_css(['(' + await get_lang('delete') + ')', 0])],
                 data = '''
                     <form method="post">
-                        <input placeholder="''' + get_lang(conn, 'why') + '''" name="send">
+                        <input placeholder="''' + await get_lang('why') + '''" name="send">
                         <hr class="main_hr">
-                        ''' + await captcha_get(conn) + ip_warning(conn) + get_edit_text_bottom_check_box(conn) + get_edit_text_bottom(conn, 'delete')  + '''
-                        <button type="submit">''' + get_lang(conn, 'delete') + '''</button>
+                        ''' + await captcha_get(conn) + await ip_warning(conn) + get_edit_text_bottom_check_box(conn) + get_edit_text_bottom(conn, 'delete')  + '''
+                        <button type="submit">''' + await get_lang('delete') + '''</button>
                     </form>
                 ''',
-                menu = [['w/' + url_pas(name), get_lang(conn, 'return')]]
+                menu = [['w/' + url_pas(name), await get_lang('return')]]
             ))

+ 5 - 5
route/edit_delete_file.py

@@ -30,18 +30,18 @@ async def edit_delete_file(name = 'test.jpg'):
 
             return redirect(conn, '/w/' + url_pas(name))
         else:
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [name, await wiki_set(), await wiki_custom(conn), wiki_css(['(' + get_lang(conn, 'file_delete') + ')', 0])],
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [name, await wiki_set(), await wiki_custom(), wiki_css(['(' + await get_lang('file_delete') + ')', 0])],
                 data = '''
                     <form method="post">
                         <img src="/image/''' + url_pas(file_all_name) + '''">
                         <hr class="main_hr">
                         <a href="/image/''' + url_pas(file_all_name) + '''">/image/''' + url_pas(file_all_name) + '''</a>
                         <hr class="main_hr">
-                        <label><input name="with_doc" type="checkbox" checked> ''' + get_lang(conn, 'file_delete_with_document') + '''</label>
+                        <label><input name="with_doc" type="checkbox" checked> ''' + await get_lang('file_delete_with_document') + '''</label>
                         <hr class="main_hr">
-                        <button type="submit">''' + get_lang(conn, 'file_delete') + '''</button>
+                        <button type="submit">''' + await get_lang('file_delete') + '''</button>
                     </form>
                 ''',
-                menu = [['w/' + url_pas(name), get_lang(conn, 'return')]]
+                menu = [['w/' + url_pas(name), await get_lang('return')]]
             ))

+ 7 - 7
route/edit_delete_multiple.py

@@ -23,17 +23,17 @@ async def edit_delete_multiple():
 
             return redirect(conn, '/recent_change')
         else:
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [get_lang(conn, 'many_delete'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [await get_lang('many_delete'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
                 data = '''
                     <form method="post">
-                        <textarea class="opennamu_textarea_500" placeholder="''' + get_lang(conn, 'many_delete_help') + '''" name="content"></textarea>
+                        <textarea class="opennamu_textarea_500" placeholder="''' + await get_lang('many_delete_help') + '''" name="content"></textarea>
                         <hr class="main_hr">
-                        <input placeholder="''' + get_lang(conn, 'why') + '''" name="send" type="text">
+                        <input placeholder="''' + await get_lang('why') + '''" name="send" type="text">
                         <hr class="main_hr">
-                        ''' + await captcha_get(conn) + ip_warning(conn) + get_edit_text_bottom_check_box(conn) + get_edit_text_bottom(conn, 'edit')  + '''
-                        <button type="submit">''' + get_lang(conn, 'delete') + '''</button>
+                        ''' + await captcha_get(conn) + await ip_warning(conn) + get_edit_text_bottom_check_box(conn) + get_edit_text_bottom(conn, 'edit')  + '''
+                        <button type="submit">''' + await get_lang('delete') + '''</button>
                     </form>
                 ''',
-                menu = [['manager/1', get_lang(conn, 'return')]]
+                menu = [['manager/1', await get_lang('return')]]
             ))

+ 22 - 22
route/edit_move.py

@@ -213,53 +213,53 @@ async def edit_move(name):
             owner_auth = await acl_check(tool = 'owner_auth')
             owner_auth = 1 if owner_auth == 0 else 0
 
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [name, await wiki_set(), await wiki_custom(conn), wiki_css(['(' + get_lang(conn, 'move') + ')', 0])],
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [name, await wiki_set(), await wiki_custom(), wiki_css(['(' + await get_lang('move') + ')', 0])],
                 data = '''
                     <form method="post">
-                        <span>''' + get_lang(conn, 'document_name') + '''</span>
+                        <span>''' + await get_lang('document_name') + '''</span>
                         <hr class="main_hr">
                         <input value="''' + name + '''" name="title" type="text">
                         <hr class="main_hr">
                         
-                        <input placeholder="''' + get_lang(conn, 'why') + '''" name="send" type="text">
+                        <input placeholder="''' + await get_lang('why') + '''" name="send" type="text">
                         <hr class="main_hr">
                         
-                        <h2>''' + get_lang(conn, 'document') + '''</h2>
+                        <h2>''' + await get_lang('document') + '''</h2>
                         <select name="move_option">
-                            <option value="normal"> ''' + get_lang(conn, 'normal') + '''</option>
-                            <option value="none"> ''' + get_lang(conn, 'dont_move') + '''</option>
-                            <option value="reverse"> ''' + get_lang(conn, 'replace_move') + '''</option>
-                            ''' + ('<option value="merge"> ' + get_lang(conn, 'merge_move') + '</option>' if owner_auth == 1 else '') + '''
+                            <option value="normal"> ''' + await get_lang('normal') + '''</option>
+                            <option value="none"> ''' + await get_lang('dont_move') + '''</option>
+                            <option value="reverse"> ''' + await get_lang('replace_move') + '''</option>
+                            ''' + ('<option value="merge"> ' + await get_lang('merge_move') + '</option>' if owner_auth == 1 else '') + '''
                         </select>
                         <hr class="main_hr">
-                        <!-- <label><input type="checkbox" name="move_redirect_make"> ''' + get_lang(conn, 'move_redirect_make') + '''</label>
+                        <!-- <label><input type="checkbox" name="move_redirect_make"> ''' + await get_lang('move_redirect_make') + '''</label>
                         <hr class="main_hr"> -->
                         
-                        <h2>''' + get_lang(conn, 'discussion') + '''</h2>
+                        <h2>''' + await get_lang('discussion') + '''</h2>
                         <select name="move_topic_option">
-                            <option value="none"> ''' + get_lang(conn, 'dont_move') + '''</option>
-                            <option value="normal"> ''' + get_lang(conn, 'normal') + '''</option>
-                            <option value="reverse"> ''' + get_lang(conn, 'replace_move') + '''</option>
-                            ''' + ('<option value="merge"> ' + get_lang(conn, 'merge_move') + '</option>' if owner_auth == 1 else '') + '''
+                            <option value="none"> ''' + await get_lang('dont_move') + '''</option>
+                            <option value="normal"> ''' + await get_lang('normal') + '''</option>
+                            <option value="reverse"> ''' + await get_lang('replace_move') + '''</option>
+                            ''' + ('<option value="merge"> ' + await get_lang('merge_move') + '</option>' if owner_auth == 1 else '') + '''
                         </select>
                         <hr class="main_hr">
 
                         ''' + ((
-                            '''<h2>''' + get_lang(conn, 'document_set') + '''</h2>
+                            '''<h2>''' + await get_lang('document_set') + '''</h2>
                             <select name="document_set_option">
-                                <option value="none"> ''' + get_lang(conn, 'dont_move') + '''</option>
-                                <option value="normal"> ''' + get_lang(conn, 'normal') + '''</option>
-                                <option value="reverse"> ''' + get_lang(conn, 'replace_move') + '''</option>
+                                <option value="none"> ''' + await get_lang('dont_move') + '''</option>
+                                <option value="normal"> ''' + await get_lang('normal') + '''</option>
+                                <option value="reverse"> ''' + await get_lang('replace_move') + '''</option>
                             </select>
                             <hr class="main_hr">
                             '''
                         ) if owner_auth == 1 else '') + '''
 
-                        ''' + await captcha_get(conn) + ip_warning(conn) + get_edit_text_bottom_check_box(conn) + get_edit_text_bottom(conn, 'move')  + '''
+                        ''' + await captcha_get(conn) + await ip_warning(conn) + get_edit_text_bottom_check_box(conn) + get_edit_text_bottom(conn, 'move')  + '''
                         
-                        <button type="submit">''' + get_lang(conn, 'move') + '''</button>
+                        <button type="submit">''' + await get_lang('move') + '''</button>
                     </form>
                 ''',
-                menu = [['w/' + url_pas(name), get_lang(conn, 'return')], ['move_all', get_lang(conn, 'multiple_move')]]
+                menu = [['w/' + url_pas(name), await get_lang('return')], ['move_all', await get_lang('multiple_move')]]
             ))

+ 6 - 6
route/edit_request.py

@@ -63,7 +63,7 @@ async def edit_request(name = 'Test', do_type = ''):
                     mode = 'edit_request'
                 )
                 
-                render_set(conn, 
+                await render_set(conn, 
                     doc_name = name,
                     doc_data = edit_request_data,
                     data_type = 'backlink'
@@ -88,10 +88,10 @@ async def edit_request(name = 'Test', do_type = ''):
             db_data = curs.fetchall()
             old_data = db_data[0][0] if db_data else ''
 
-            result = view_diff_do(old_data, edit_request_data, 'r' + doc_ver, get_lang(conn, 'edit_request'))
+            result = view_diff_do(old_data, edit_request_data, 'r' + doc_ver, await get_lang('edit_request'))
 
-            return easy_minify(conn, flask.render_template(skin_check(conn), 
-                imp = [name, await wiki_set(), await wiki_custom(conn), wiki_css(['(' + get_lang(conn, 'edit_request_check') + ')', 0])],
+            return easy_minify(flask.render_template(await skin_check(), 
+                imp = [name, await wiki_set(), await wiki_custom(), wiki_css(['(' + await get_lang('edit_request_check') + ')', 0])],
                 data = '''
                     <div id="opennamu_get_user_info">''' + html.escape(edit_request_user) + '''</div>
                     <hr class="main_hr">
@@ -102,8 +102,8 @@ async def edit_request(name = 'Test', do_type = ''):
                     ''' + result + '''
                     <hr class="main_hr">
                     <form method="post">
-                        <button ''' + disabled + ''' id="opennamu_save_button" type="submit" name="check" value="Y">''' + get_lang(conn, 'approve') + '''</button>
-                        <button ''' + disabled + ''' id="opennamu_preview_button" type="submit" name="check" value="">''' + get_lang(conn, 'decline') + '''</button>
+                        <button ''' + disabled + ''' id="opennamu_save_button" type="submit" name="check" value="Y">''' + await get_lang('approve') + '''</button>
+                        <button ''' + disabled + ''' id="opennamu_preview_button" type="submit" name="check" value="">''' + await get_lang('decline') + '''</button>
                         <hr class="main_hr">
                         <textarea readonly class="opennamu_textarea_500">''' + html.escape(edit_request_data) + '''</textarea>
                     </form>

+ 7 - 7
route/edit_revert.py

@@ -61,7 +61,7 @@ async def edit_revert(name, num):
                 mode = 'revert'
             )
 
-            render_set(conn, 
+            await render_set(conn, 
                 doc_name = name,
                 doc_data = data[0][0],
                 data_type = 'backlink'
@@ -74,15 +74,15 @@ async def edit_revert(name, num):
             else:
                 preview = ''
             
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [name, await wiki_set(), await wiki_custom(conn), wiki_css(['(r' + str(num) + ') (' + get_lang(conn, 'revert') + ')', 0])],
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [name, await wiki_set(), await wiki_custom(), wiki_css(['(r' + str(num) + ') (' + await get_lang('revert') + ')', 0])],
                 data = '''
                     <form method="post">
-                        <input placeholder="''' + get_lang(conn, 'why') + '''" name="send" type="text">
+                        <input placeholder="''' + await get_lang('why') + '''" name="send" type="text">
                         <hr class="main_hr">
-                        ''' + await captcha_get(conn) + ip_warning(conn) + get_edit_text_bottom_check_box(conn) + get_edit_text_bottom(conn, 'revert')  + '''
-                        <button type="submit">''' + get_lang(conn, 'revert') + '''</button>
+                        ''' + await captcha_get(conn) + await ip_warning(conn) + get_edit_text_bottom_check_box(conn) + get_edit_text_bottom(conn, 'revert')  + '''
+                        <button type="submit">''' + await get_lang('revert') + '''</button>
                     </form>
                 ''' + preview,
-                menu = [['history/' + url_pas(name), get_lang(conn, 'history')], ['recent_changes', get_lang(conn, 'recent_change')]]
+                menu = [['history/' + url_pas(name), await get_lang('history')], ['recent_changes', await get_lang('recent_change')]]
             ))

+ 15 - 11
route/edit_upload.py

@@ -99,7 +99,7 @@ async def edit_upload():
 
                 curs.execute(db_change("insert into data (title, data) values (?, ?)"), ['file:' + name, file_d])
 
-                render_set(conn, 
+                await render_set(conn, 
                     doc_name = 'file:' + name,
                     doc_data = file_d,
                     data_type = 'backlink'
@@ -120,7 +120,7 @@ async def edit_upload():
 
             return redirect(conn, '/w/file:' + name)
         else:
-            license_list = '<option value="direct_input">' + get_lang(conn, 'direct_input') + '</option>'
+            license_list = '<option value="direct_input">' + await get_lang('direct_input') + '</option>'
             file_name = html.escape(flask.request.args.get('name', ''))
 
             curs.execute(db_change("select html from html_filter where kind = 'image_license'"))
@@ -135,28 +135,32 @@ async def edit_upload():
             db_data = curs.fetchall()
             upload_default = html.escape(db_data[0][0]) if db_data and db_data[0][0] != '' else ''
             
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [get_lang(conn, 'upload'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [await get_lang('upload'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
                 data = '''
-                    <a href="/filter/file_filter">(''' + get_lang(conn, 'file_filter_list') + ''')</a> <a href="/filter/extension_filter">(''' + get_lang(conn, 'extension_filter_list') + ''')</a>
+                    <a href="/filter/file_filter">(''' + await get_lang('file_filter_list') + ''')</a> <a href="/filter/extension_filter">(''' + await get_lang('extension_filter_list') + ''')</a>
                     ''' + upload_help + '''
                     <hr class="main_hr">
-                    ''' + get_lang(conn, 'max_file_size') + ''' : ''' + str(file_max) + '''MB
+                    ''' + await get_lang('max_file_size') + ''' : ''' + str(file_max) + '''MB
                     <hr class="main_hr">
                     <form method="post" enctype="multipart/form-data" accept-charset="utf8">
-                        <input multiple="multiple" type="file" name="f_data[]">
+                        <input multiple="multiple" type="file" name="f_data[]" id="file_input">
                         <hr class="main_hr">
-                        <input placeholder="''' + get_lang(conn, 'file_name') + '''" name="f_name" value="''' + file_name + '''">
+                        <input placeholder="''' + await get_lang('file_name') + '''" name="f_name" value="''' + file_name + '''">
                         <hr class="main_hr">
                         <select name="f_lice_sel">
                             ''' + license_list + '''
                         </select>
                         <hr class="main_hr">
-                        <textarea class="opennamu_textarea_100" placeholder="''' + get_lang(conn, 'other') + '''" name="f_lice">''' + upload_default + '''</textarea>
+                        <textarea class="opennamu_textarea_100" placeholder="''' + await get_lang('other') + '''" name="f_lice">''' + upload_default + '''</textarea>
                         <hr class="main_hr">
                         ''' + await captcha_get(conn) + '''
-                        <button id="opennamu_save_button" type="submit">''' + get_lang(conn, 'save') + '''</button>
+                        <button id="opennamu_save_button" type="submit">''' + await get_lang('save') + '''</button>
                     </form>
+                    <hr class="main_hr">
+                    <div id="preview"></div>
+                    <script defer src="/views/main_css/js/func/file_preview.js''' + cache_v() + '''"></script>
+                    <script>window.addEventListener("DOMContentLoaded", function() { opennamu_file_preview(); });</script>
                 ''',
-                menu = [['other', get_lang(conn, 'return')]]
+                menu = [['other', await get_lang('return')]]
             ))

+ 17 - 17
route/filter_all.py

@@ -21,37 +21,37 @@ async def filter_all(tool):
                 return await re_error(conn, 0)
 
         if tool == 'inter_wiki':
-            title = get_lang(conn, 'interwiki_list')
+            title = await get_lang('interwiki_list')
             curs.execute(db_change("select html, plus, plus_t from html_filter where kind = 'inter_wiki'"))
         elif tool == 'email_filter':
-            title = get_lang(conn, 'email_filter_list')
+            title = await get_lang('email_filter_list')
             curs.execute(db_change("select html, plus, plus_t from html_filter where kind = 'email'"))
         elif tool == 'name_filter':
-            title = get_lang(conn, 'id_filter_list')
+            title = await get_lang('id_filter_list')
             curs.execute(db_change("select html, plus, plus_t from html_filter where kind = 'name'"))
         elif tool == 'edit_filter':
-            title = get_lang(conn, 'edit_filter_list')
+            title = await get_lang('edit_filter_list')
             curs.execute(db_change("select html, plus, plus_t from html_filter where kind = 'regex_filter'"))
         elif tool == 'file_filter':
-            title = get_lang(conn, 'file_filter_list')
+            title = await get_lang('file_filter_list')
             curs.execute(db_change("select html, plus, plus_t from html_filter where kind = 'file'"))
         elif tool == 'image_license':
-            title = get_lang(conn, 'image_license_list')
+            title = await get_lang('image_license_list')
             curs.execute(db_change("select html, plus, plus_t from html_filter where kind = 'image_license'"))
         elif tool == 'extension_filter':
-            title = get_lang(conn, 'extension_filter_list')
+            title = await get_lang('extension_filter_list')
             curs.execute(db_change("select html, plus, plus_t from html_filter where kind = 'extension'"))
         elif tool == 'document':
-            title = get_lang(conn, 'document_filter_list')
+            title = await get_lang('document_filter_list')
             curs.execute(db_change("select html, plus, plus_t from html_filter where kind = 'document'"))
         elif tool == 'outer_link':
-            title = get_lang(conn, 'outer_link_filter_list')
+            title = await get_lang('outer_link_filter_list')
             curs.execute(db_change("select html, plus, plus_t from html_filter where kind = 'outer_link'"))
         elif tool == 'template':
-            title = get_lang(conn, 'template_document_list')
+            title = await get_lang('template_document_list')
             curs.execute(db_change("select html, plus, plus_t from html_filter where kind = 'template'"))
         else:
-            title = get_lang(conn, 'edit_tool_list')
+            title = await get_lang('edit_tool_list')
             curs.execute(db_change("select html, plus, plus_t from html_filter where kind = 'edit_top'"))
 
         db_data = curs.fetchall()
@@ -62,9 +62,9 @@ async def filter_all(tool):
             div += html.escape(data[0])
             if admin == 1:
                 if tool in ('inter_wiki', 'outer_link', 'edit_filter', 'document', 'edit_top', 'template'):
-                    div += ' <a href="/filter/' + tool + '/add/' + url_pas(data[0]) + '">(' + get_lang(conn, 'edit') + ')</a>'
+                    div += ' <a href="/filter/' + tool + '/add/' + url_pas(data[0]) + '">(' + await get_lang('edit') + ')</a>'
                     
-                div += ' <a href="/filter/' + tool + '/del/' + url_pas(data[0]) + '">(' + get_lang(conn, 'delete') + ')</a>'
+                div += ' <a href="/filter/' + tool + '/del/' + url_pas(data[0]) + '">(' + await get_lang('delete') + ')</a>'
 
             div += '</td>'
 
@@ -85,10 +85,10 @@ async def filter_all(tool):
 
         if admin == 1:
             div += '<hr class="main_hr">'
-            div += '<a href="/filter/' + tool + '/add">(' + get_lang(conn, 'add') + ')</a>'
+            div += '<a href="/filter/' + tool + '/add">(' + await get_lang('add') + ')</a>'
 
-        return easy_minify(conn, flask.render_template(skin_check(conn),
-            imp = [title, await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+        return easy_minify(flask.render_template(await skin_check(),
+            imp = [title, await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
             data = div,
-            menu = [['manager/1', get_lang(conn, 'return')]]
+            menu = [['manager/1', await get_lang('return')]]
         ))

+ 33 - 33
route/filter_all_add.py

@@ -123,7 +123,7 @@ async def filter_all_add(tool, name = None):
 
                     select = '''
                         <hr class="main_hr">
-                        ''' + get_lang(conn, 'inter_wiki_space_change') + '''
+                        ''' + await get_lang('inter_wiki_space_change') + '''
                         <hr class="main_hr">
                         <select name="inter_type">
                             <option ''' + select[0] + ''' value="url_encode">%20</option>
@@ -133,17 +133,17 @@ async def filter_all_add(tool, name = None):
                 else:
                     ex = 'youtube.com'
 
-                title = get_lang(conn, 'interwiki_add') if tool == 'inter_wiki' else get_lang(conn, 'outer_link_add')
+                title = await get_lang('interwiki_add') if tool == 'inter_wiki' else await get_lang('outer_link_add')
                 form_data = '''
-                    ''' + get_lang(conn, 'name') + '''
+                    ''' + await get_lang('name') + '''
                     <hr class="main_hr">
                     <input value="''' + html.escape(value[0]) + '''" type="text" name="title">
                     <hr class="main_hr">
-                    ''' + get_lang(conn, 'link') + ''' (EX : ''' + ex + ''')
+                    ''' + await get_lang('link') + ''' (EX : ''' + ex + ''')
                     <hr class="main_hr">
                     <input value="''' + html.escape(value[1]) + '''" type="text" name="link">
                     <hr class="main_hr">
-                    ''' + get_lang(conn, 'icon') + ''' (''' + ('HTML' if tool == 'inter_wiki' else get_lang(conn, 'html_or_link')) + ''') (''' + get_lang(conn, 'link') + ' - EX' + ''' : /image/Test.svg)
+                    ''' + await get_lang('icon') + ''' (''' + ('HTML' if tool == 'inter_wiki' else await get_lang('html_or_link')) + ''') (''' + await get_lang('link') + ' - EX' + ''' : /image/Test.svg)
                     <hr class="main_hr">
                     <input value="''' + html.escape(value[2]) + '''" type="text" name="icon">
                     ''' + select + '''
@@ -161,49 +161,49 @@ async def filter_all_add(tool, name = None):
                     textarea = ''
                     time_data = ''
 
-                title = get_lang(conn, 'edit_filter_add')
+                title = await get_lang('edit_filter_add')
                 form_data = '''
                     <hr class="main_hr">
-                    <input placeholder="''' + get_lang(conn, 'day') + '''" name="day" type="text" value="''' + html.escape(time_data) + '''">
+                    <input placeholder="''' + await get_lang('day') + '''" name="day" type="text" value="''' + html.escape(time_data) + '''">
                     <hr class="main_hr">
-                    <input placeholder="''' + get_lang(conn, 'regex') + '''" name="content" value="''' + html.escape(textarea) + '''" type="text">
+                    <input placeholder="''' + await get_lang('regex') + '''" name="content" value="''' + html.escape(textarea) + '''" type="text">
                 '''
             elif tool == 'name_filter':
-                title = get_lang(conn, 'id_filter_add')
+                title = await get_lang('id_filter_add')
                 form_data = '' + \
-                    get_lang(conn, 'regex') + \
+                    await get_lang('regex') + \
                     '<hr class="main_hr">' + \
                     '<input value="' + html.escape(name) + '" type="text" name="title">' + \
                 ''
             elif tool == 'file_filter':
-                title = get_lang(conn, 'file_filter_add')
+                title = await get_lang('file_filter_add')
                 form_data = '' + \
-                    get_lang(conn, 'regex') + \
+                    await get_lang('regex') + \
                     '<hr class="main_hr">' + \
                     '<input value="' + html.escape(name) + '" type="text" name="title">' + \
                 ''
             elif tool == 'email_filter':
-                title = get_lang(conn, 'email_filter_add')
+                title = await get_lang('email_filter_add')
                 form_data = '' + \
-                    get_lang(conn, 'email') + \
+                    await get_lang('email') + \
                     '<hr class="main_hr">' + \
                     '<input value="' + html.escape(name) + '" type="text" name="title">' + \
                 ''
             elif tool == 'image_license':
-                title = get_lang(conn, 'image_license_add')
+                title = await get_lang('image_license_add')
                 form_data = '' + \
-                    get_lang(conn, 'license') + \
+                    await get_lang('license') + \
                     '<hr class="main_hr">' + \
                     '<input value="' + html.escape(name) + '" type="text" name="title">' + \
                 ''
             elif tool == 'extension_filter':
-                title = get_lang(conn, 'extension_filter_add')
+                title = await get_lang('extension_filter_add')
                 form_data = '' + \
-                    get_lang(conn, 'extension') + \
+                    await get_lang('extension') + \
                     '<hr class="main_hr">' + \
                     '<input value="' + html.escape(name) + '" type="text" name="title">' + \
                     '<hr class="main_hr">' + \
-                    get_lang(conn, 'max_file_size') + ' (MB) (' + get_lang(conn, 'default') + ' : ' + get_lang(conn, 'empty') + ')' + \
+                    await get_lang('max_file_size') + ' (MB) (' + await get_lang('default') + ' : ' + await get_lang('empty') + ')' + \
                     '<hr class="main_hr">' + \
                     '<input value="" type="text" name="max_file_size">' + \
                 ''
@@ -214,24 +214,24 @@ async def filter_all_add(tool, name = None):
                 db_data = curs.fetchall()
                 acl_list = [['selected' if db_data and db_data[0][1] == for_a else '', for_a] for for_a in acl_list]
 
-                title = get_lang(conn, 'document_filter_add')
+                title = await get_lang('document_filter_add')
                 form_data = '''
-                    ''' + get_lang(conn, 'name') + '''
+                    ''' + await get_lang('name') + '''
                     <hr class="main_hr">
                     <input value="''' + html.escape(name) + '''" type="text" name="name">
                     <hr class="main_hr">
-                    ''' + get_lang(conn, 'regex') + '''
+                    ''' + await get_lang('regex') + '''
                     <hr class="main_hr">
                     <input value="''' + (html.escape(db_data[0][0]) if db_data else '') + '''" type="text" name="regex">
                     <hr class="main_hr">
-                    <a href="/acl/Test#exp">''' + get_lang(conn, 'acl') + '''</a>
+                    <a href="/acl/Test#exp">''' + await get_lang('acl') + '''</a>
                     <hr class="main_hr">
                     <select name="acl">
                         ''' + ''.join(['<option ' + for_a[0] + ' value=' + for_a[1] + '>' + ('normal' if for_a[1] == '' else for_a[1]) + '</option>' for for_a in acl_list]) + '''
                     </select>
                 '''
             elif tool == 'template':
-                title = get_lang(conn, 'template_document_add')
+                title = await get_lang('template_document_add')
 
                 value = ''
                 if name:
@@ -240,17 +240,17 @@ async def filter_all_add(tool, name = None):
                     value = exist[0][0] if exist else '' 
 
                 form_data = '' + \
-                    get_lang(conn, 'template') + \
+                    await get_lang('template') + \
                     '<hr class="main_hr">' + \
                     '<input value="' + html.escape(name) + '" type="text" name="title">' + \
                     '<hr class="main_hr">' + \
-                    get_lang(conn, 'explanation') + \
+                    await get_lang('explanation') + \
                     '<hr class="main_hr">' + \
                     '<input value="' + html.escape(value) + '" type="text" name="exp">' + \
                     '<hr class="main_hr">' + \
                 ''
             else:
-                title = get_lang(conn, 'edit_tool_add')
+                title = await get_lang('edit_tool_add')
                 
                 value = ''
                 if name:
@@ -259,23 +259,23 @@ async def filter_all_add(tool, name = None):
                     value = exist[0][0] if exist else ''    
 
                 form_data = '''
-                    ''' + get_lang(conn, 'title') + '''
+                    ''' + await get_lang('title') + '''
                     <hr class="main_hr">
                     <input value="''' + html.escape(name) + '''" type="text" name="title">
                     <hr class="main_hr">
-                    ''' + get_lang(conn, 'markup') + '''
+                    ''' + await get_lang('markup') + '''
                     <hr class="main_hr">
                     <input value="''' + html.escape(value) + '''" type="text" name="markup">
                 '''
 
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [title, await wiki_set(), await wiki_custom(conn), wiki_css([get_sub, 0])],
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [title, await wiki_set(), await wiki_custom(), wiki_css([get_sub, 0])],
                 data =  '''
                         <form method="post">
                             ''' + form_data + '''
                             <hr class="main_hr">
-                            <button ''' + stat + ''' type="submit">''' + get_lang(conn, 'add') + '''</button>
+                            <button ''' + stat + ''' type="submit">''' + await get_lang('add') + '''</button>
                         </form>
                         ''',
-                menu = [['filter/' + tool, get_lang(conn, 'return')]]
+                menu = [['filter/' + tool, await get_lang('return')]]
             ))

+ 65 - 65
route/give_admin_groups.py

@@ -5,67 +5,67 @@ async def give_admin_groups(name = 'test'):
         curs = conn.cursor()
 
         acl_name_list = [
-            [1, 'owner', get_lang(conn, 'owner_authority')],
-                [2, '', get_lang(conn, 'all_function_authority')],
-                [2, 'admin', get_lang(conn, 'admin_authority')],
-                    [3, 'ban', get_lang(conn, 'ban_authority')],
-                        [4, '', get_lang(conn, 'admin_default_feature_authority')],
-                    [3, 'toron', get_lang(conn, 'discussion_authority')],
-                        [4, '', get_lang(conn, 'admin_default_feature_authority')],
-                    [3, 'check', get_lang(conn, 'user_analyze_authority')],
-                        [4, 'view_user_watchlist', get_lang(conn, 'view_user_watchlist_authority')],
-                        [4, '', get_lang(conn, 'user_check_authority')],
-                        [4, '', get_lang(conn, 'admin_default_feature_authority')],
-                    [3, 'acl', get_lang(conn, 'document_acl_authority')],
-                        [4, '', get_lang(conn, 'admin_default_feature_authority')],
-                    [3, 'hidel', get_lang(conn, 'history_hide_authority')],
-                        [4, '', get_lang(conn, 'admin_default_feature_authority')],
-                    [3, 'give', get_lang(conn, 'authorization_authority')],
-                        [4, '', get_lang(conn, 'admin_default_feature_authority')],
-                    [3, 'bbs', get_lang(conn, 'bbs_management_authority')],
-                        [4, '', get_lang(conn, 'admin_default_feature_authority')],
-                    [3, 'vote_fix', get_lang(conn, 'vote_management_authority')],
-                        [4, '', get_lang(conn, 'admin_default_feature_authority')],
-                    [3, 'admin_default_feature', get_lang(conn, 'admin_default_feature_authority')],
-                        [4, 'doc_watch_list_view', get_lang(conn, 'doc_watch_list_view_authority')],
-                        [4, 'treat_as_admin', get_lang(conn, 'treat_as_admin_authority')],
-                        [4, 'view_hide_user_name', get_lang(conn, 'view_hide_user_name_authority')],
-                        [4, 'user_name_bold', get_lang(conn, 'user_name_bold_authority')],
-                        [4, 'multiple_upload', get_lang(conn, 'multiple_upload_authority')],
-                        [4, 'slow_edit_pass', get_lang(conn, 'slow_edit_pass_authority')],
-                        [4, 'edit_bottom_compulsion_pass', get_lang(conn, 'edit_bottom_compulsion_pass_authority')],
-                        [4, 'edit_filter_pass', get_lang(conn, 'edit_filter_pass_authority')],
-                        [4, '', get_lang(conn, 'user_authority')],
-            [1, 'user', get_lang(conn, 'user_authority')],
-                [2, 'captcha_pass', get_lang(conn, 'captcha_pass_authority')],
-                [2, 'ip', get_lang(conn, 'ip_authority')],
-                    [3, 'document', get_lang(conn, 'document_authority')],
-                        [4, 'edit', get_lang(conn, 'edit_authority')],
-                            [5, '', get_lang(conn, 'view_authority')],
-                        [4, 'edit_request', get_lang(conn, 'edit_request_authority')],
-                            [5, '', get_lang(conn, 'view_authority')],
-                        [4, 'move', get_lang(conn, 'move_authority')],
-                            [5, '', get_lang(conn, 'view_authority')],
-                        [4, 'new_make', get_lang(conn, 'new_make_authority')],
-                            [5, '', get_lang(conn, 'view_authority')],
-                        [4, 'delete', get_lang(conn, 'delete_authority')],
-                            [5, '', get_lang(conn, 'view_authority')],
-                        [4, 'view', get_lang(conn, 'view_authority')],
-                    [3, 'discuss', get_lang(conn, 'discuss_authority')],
-                        [4, 'discuss_make_new_thread', get_lang(conn, 'discuss_make_new_thread_authority')],
-                            [5, '', get_lang(conn, 'discuss_view_authority')],
-                        [4, 'discuss_view', get_lang(conn, 'discuss_view_authority')],
-                    [3, 'upload', get_lang(conn, 'upload_authority')],
-                    [3, 'vote', get_lang(conn, 'vote_authority')],
-                    [3, 'bbs_use', get_lang(conn, 'bbs_authority')],
-                        [4, 'bbs_edit', get_lang(conn, 'bbs_edit_authority')],
-                            [5, '', get_lang(conn, 'bbs_view_authority')],
-                        [4, 'bbs_comment', get_lang(conn, 'bbs_comment_authority')],
-                            [5, '', get_lang(conn, 'bbs_view_authority')],
-                        [4, 'bbs_view', get_lang(conn, 'bbs_view_authority')],
-                    [3, 'captcha_one_check_five_pass', get_lang(conn, 'captcha_one_check_five_pass_authority')],
-                    [3, 'edit_filter_view', get_lang(conn, 'edit_filter_view_authority')],
-                    [3, 'nothing', get_lang(conn, 'nothing_authority')]
+            [1, 'owner', await get_lang('owner_authority')],
+                [2, '', await get_lang('all_function_authority')],
+                [2, 'admin', await get_lang('admin_authority')],
+                    [3, 'ban', await get_lang('ban_authority')],
+                        [4, '', await get_lang('admin_default_feature_authority')],
+                    [3, 'toron', await get_lang('discussion_authority')],
+                        [4, '', await get_lang('admin_default_feature_authority')],
+                    [3, 'check', await get_lang('user_analyze_authority')],
+                        [4, 'view_user_watchlist', await get_lang('view_user_watchlist_authority')],
+                        [4, '', await get_lang('user_check_authority')],
+                        [4, '', await get_lang('admin_default_feature_authority')],
+                    [3, 'acl', await get_lang('document_acl_authority')],
+                        [4, '', await get_lang('admin_default_feature_authority')],
+                    [3, 'hidel', await get_lang('history_hide_authority')],
+                        [4, '', await get_lang('admin_default_feature_authority')],
+                    [3, 'give', await get_lang('authorization_authority')],
+                        [4, '', await get_lang('admin_default_feature_authority')],
+                    [3, 'bbs', await get_lang('bbs_management_authority')],
+                        [4, '', await get_lang('admin_default_feature_authority')],
+                    [3, 'vote_fix', await get_lang('vote_management_authority')],
+                        [4, '', await get_lang('admin_default_feature_authority')],
+                    [3, 'admin_default_feature', await get_lang('admin_default_feature_authority')],
+                        [4, 'doc_watch_list_view', await get_lang('doc_watch_list_view_authority')],
+                        [4, 'treat_as_admin', await get_lang('treat_as_admin_authority')],
+                        [4, 'view_hide_user_name', await get_lang('view_hide_user_name_authority')],
+                        [4, 'user_name_bold', await get_lang('user_name_bold_authority')],
+                        [4, 'multiple_upload', await get_lang('multiple_upload_authority')],
+                        [4, 'slow_edit_pass', await get_lang('slow_edit_pass_authority')],
+                        [4, 'edit_bottom_compulsion_pass', await get_lang('edit_bottom_compulsion_pass_authority')],
+                        [4, 'edit_filter_pass', await get_lang('edit_filter_pass_authority')],
+                        [4, '', await get_lang('user_authority')],
+            [1, 'user', await get_lang('user_authority')],
+                [2, 'captcha_pass', await get_lang('captcha_pass_authority')],
+                [2, 'ip', await get_lang('ip_authority')],
+                    [3, 'document', await get_lang('document_authority')],
+                        [4, 'edit', await get_lang('edit_authority')],
+                            [5, '', await get_lang('view_authority')],
+                        [4, 'edit_request', await get_lang('edit_request_authority')],
+                            [5, '', await get_lang('view_authority')],
+                        [4, 'move', await get_lang('move_authority')],
+                            [5, '', await get_lang('view_authority')],
+                        [4, 'new_make', await get_lang('new_make_authority')],
+                            [5, '', await get_lang('view_authority')],
+                        [4, 'delete', await get_lang('delete_authority')],
+                            [5, '', await get_lang('view_authority')],
+                        [4, 'view', await get_lang('view_authority')],
+                    [3, 'discuss', await get_lang('discuss_authority')],
+                        [4, 'discuss_make_new_thread', await get_lang('discuss_make_new_thread_authority')],
+                            [5, '', await get_lang('discuss_view_authority')],
+                        [4, 'discuss_view', await get_lang('discuss_view_authority')],
+                    [3, 'upload', await get_lang('upload_authority')],
+                    [3, 'vote', await get_lang('vote_authority')],
+                    [3, 'bbs_use', await get_lang('bbs_authority')],
+                        [4, 'bbs_edit', await get_lang('bbs_edit_authority')],
+                            [5, '', await get_lang('bbs_view_authority')],
+                        [4, 'bbs_comment', await get_lang('bbs_comment_authority')],
+                            [5, '', await get_lang('bbs_view_authority')],
+                        [4, 'bbs_view', await get_lang('bbs_view_authority')],
+                    [3, 'captcha_one_check_five_pass', await get_lang('captcha_one_check_five_pass_authority')],
+                    [3, 'edit_filter_view', await get_lang('edit_filter_view_authority')],
+                    [3, 'nothing', await get_lang('nothing_authority')]
         ]
 
         if html.escape(name) != name:
@@ -108,14 +108,14 @@ async def give_admin_groups(name = 'test'):
 
             data += '</ul>'
 
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [name, await wiki_set(), await wiki_custom(conn), wiki_css(['(' + get_lang(conn, 'admin_group') + ')', 0])],
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [name, await wiki_set(), await wiki_custom(), wiki_css(['(' + await get_lang('admin_group') + ')', 0])],
                 data = '''
                     <form method="post">
                         ''' + data + '''
                         <hr class="main_hr">
-                        <button ''' + state +  ''' type="submit">''' + get_lang(conn, 'save') + '''</button>
+                        <button ''' + state +  ''' type="submit">''' + await get_lang('save') + '''</button>
                     </form>
                 ''',
-                menu = [['auth/list', get_lang(conn, 'return')]]
+                menu = [['auth/list', await get_lang('return')]]
             ))

+ 4 - 4
route/give_delete_admin_group.py

@@ -21,12 +21,12 @@ async def give_delete_admin_group(name = 'test'):
             else:
                 return await re_error(conn, 47)
         else:
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [get_lang(conn, "delete_admin_group"), await wiki_set(), await wiki_custom(conn), wiki_css(['(' + name + ')', 0])],
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [await get_lang("delete_admin_group"), await wiki_set(), await wiki_custom(), wiki_css(['(' + name + ')', 0])],
                 data = '' + \
                     '<form method="post">' + \
-                        '<button type="submit">' + get_lang(conn, 'delete') + '</button>' + \
+                        '<button type="submit">' + await get_lang('delete') + '</button>' + \
                     '</form>' + \
                 '',
-                menu = [['auth/list', get_lang(conn, 'return')]]
+                menu = [['auth/list', await get_lang('return')]]
             ))

+ 27 - 27
route/give_user_ban.py

@@ -103,11 +103,11 @@ async def give_user_ban(name = None, ban_type = ''):
             return redirect(conn, '/recent_block')
         else:
             if ban_type == 'multiple':
-                main_name = get_lang(conn, 'multiple_ban')
-                n_name = '<textarea class="opennamu_textarea_500" placeholder="' + get_lang(conn, 'name_or_ip_or_regex_or_cidr_multiple') + '" name="name"></textarea><hr class="main_hr">'
+                main_name = await get_lang('multiple_ban')
+                n_name = '<textarea class="opennamu_textarea_500" placeholder="' + await get_lang('name_or_ip_or_regex_or_cidr_multiple') + '" name="name"></textarea><hr class="main_hr">'
             else:
-                main_name = get_lang(conn, 'ban')
-                n_name = '<input placeholder="' + get_lang(conn, 'name_or_ip_or_regex_or_cidr') + '" value="' + (name if name else '') + '" name="name"><hr class="main_hr">'
+                main_name = await get_lang('ban')
+                n_name = '<input placeholder="' + await get_lang('name_or_ip_or_regex_or_cidr') + '" value="' + (name if name else '') + '" name="name"><hr class="main_hr">'
 
             now = 0
             
@@ -129,55 +129,55 @@ async def give_user_ban(name = None, ban_type = ''):
 
             owner_option = ''
             if await acl_check(tool = 'owner_auth', ip = ip) != 1:
-                owner_option = '<option value="private" ' + ('selected' if ban_type == 'private' else '') + '>' + get_lang(conn, 'private') + '</option>'
+                owner_option = '<option value="private" ' + ('selected' if ban_type == 'private' else '') + '>' + await get_lang('private') + '</option>'
 
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [main_name, await wiki_set(), await wiki_custom(conn), wiki_css([now, 0])],
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [main_name, await wiki_set(), await wiki_custom(), wiki_css([now, 0])],
                 data = info_data + '''
                     <form method="post" ''' + action + '''>
-                        <h2>''' + get_lang(conn, 'method') + '''</h2>
+                        <h2>''' + await get_lang('method') + '''</h2>
                         ''' + n_name + '''
         
                         <select name="do_ban_type">
-                            <option value="normal">''' + get_lang(conn, 'normal') + '''</option>
-                            <option value="regex" ''' + ('selected' if ban_type == 'regex' else '') + '>' + get_lang(conn, 'regex') + '''</option>
-                            <option value="cidr" ''' + ('selected' if ban_type == 'cidr' else '') + '>' + get_lang(conn, 'cidr') + '''</option>
+                            <option value="normal">''' + await get_lang('normal') + '''</option>
+                            <option value="regex" ''' + ('selected' if ban_type == 'regex' else '') + '>' + await get_lang('regex') + '''</option>
+                            <option value="cidr" ''' + ('selected' if ban_type == 'cidr' else '') + '>' + await get_lang('cidr') + '''</option>
                             ''' + owner_option + '''
                         </select>
                         <hr class="main_hr">
         
                         <select name="ban_option">
-                            <option value="">''' + get_lang(conn, 'default') + '''</option>
-                            <option value="login_able">''' + get_lang(conn, 'login_able') + '''</option>
-                            <option value="login_able_and_regsiter_disable">''' + get_lang(conn, 'login_able_and_regsiter_disable') + '''</option>
-                            <option value="edit_request_able">''' + get_lang(conn, 'edit_request_able') + '''</option>
-                            <option value="completely_ban">''' + get_lang(conn, 'completely_ban') + '''</option>
-                            <option value="dont_come_this_site">''' + get_lang(conn, 'dont_come_this_site') + '''</option>
-                            <option value="release">''' + get_lang(conn, 'release') + '''</option>
+                            <option value="">''' + await get_lang('default') + '''</option>
+                            <option value="login_able">''' + await get_lang('login_able') + '''</option>
+                            <option value="login_able_and_regsiter_disable">''' + await get_lang('login_able_and_regsiter_disable') + '''</option>
+                            <option value="edit_request_able">''' + await get_lang('edit_request_able') + '''</option>
+                            <option value="completely_ban">''' + await get_lang('completely_ban') + '''</option>
+                            <option value="dont_come_this_site">''' + await get_lang('dont_come_this_site') + '''</option>
+                            <option value="release">''' + await get_lang('release') + '''</option>
                         </select>
         
-                        <h2>''' + get_lang(conn, 'date') + '''</h2>
+                        <h2>''' + await get_lang('date') + '''</h2>
                         <select name="date_type">
-                            <option value="date">''' + get_lang(conn, 'date') + '''</option>
-                            <option value="days">''' + get_lang(conn, 'day') + '''</option>
+                            <option value="date">''' + await get_lang('date') + '''</option>
+                            <option value="days">''' + await get_lang('day') + '''</option>
                         </select>
                         <hr class="main_hr">
         
-                        <span>''' + get_lang(conn, 'day') + '''</span>
+                        <span>''' + await get_lang('day') + '''</span>
                         <hr class="main_hr">
                         <input name="date_days">
                         <hr class="main_hr">
 
-                        <span>''' + get_lang(conn, 'date') + '''</span>
+                        <span>''' + await get_lang('date') + '''</span>
                         <hr class="main_hr">
                         <input type="date" value="''' + date_value + '''" name="date" pattern="\\d{4}-\\d{2}-\\d{2}">
         
-                        <h2>''' + get_lang(conn, 'other') + '''</h2>
-                        <input placeholder="''' + get_lang(conn, 'why') + '''" name="why" type="text">
+                        <h2>''' + await get_lang('other') + '''</h2>
+                        <input placeholder="''' + await get_lang('why') + '''" name="why" type="text">
                         <hr class="main_hr">
         
-                        <button type="submit">''' + get_lang(conn, 'save') + '''</button>
+                        <button type="submit">''' + await get_lang('save') + '''</button>
                     </form>
                 ''',
-                menu = [['manager', get_lang(conn, 'return')]]
+                menu = [['manager', await get_lang('return')]]
             ))   

+ 11 - 11
route/give_user_fix.py

@@ -47,28 +47,28 @@ async def give_user_fix(user_name = ''):
 
             return redirect(conn, '/user/' + url_pas(user_name))
         else:
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [get_lang(conn, 'user_fix'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [await get_lang('user_fix'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
                 data = '''
                     <form method="post">
                         <div id="opennamu_get_user_info">''' + html.escape(user_name) + '''</div>
                         <hr class="main_hr">
-                        <a href="/change/user_name/''' + url_pas(user_name) + '''">(''' + get_lang(conn, 'change_user_name') + ''')</a>
+                        <a href="/change/user_name/''' + url_pas(user_name) + '''">(''' + await get_lang('change_user_name') + ''')</a>
                         <hr class="main_hr">
                         <select name="select">
-                            <option value="password_change">''' + get_lang(conn, 'password_change') + '''</option>
-                            <option value="2fa_password_change">''' + get_lang(conn, '2fa_password_change') + '''</option>
-                            <option value="2fa_off">''' + get_lang(conn, '2fa_off') + '''</option>
+                            <option value="password_change">''' + await get_lang('password_change') + '''</option>
+                            <option value="2fa_password_change">''' + await get_lang('2fa_password_change') + '''</option>
+                            <option value="2fa_off">''' + await get_lang('2fa_off') + '''</option>
                         </select>
                         <hr class="main_hr">
-                        ''' + get_lang(conn, 'password_change') + ''' | ''' + get_lang(conn, '2fa_password_change') + '''
+                        ''' + await get_lang('password_change') + ''' | ''' + await get_lang('2fa_password_change') + '''
                         <hr class="main_hr">
-                        <input placeholder="''' + get_lang(conn, 'new_password') + '''" name="new_password" type="password">
+                        <input placeholder="''' + await get_lang('new_password') + '''" name="new_password" type="password">
                         <hr class="main_hr">
-                        <input placeholder="''' + get_lang(conn, 'password_confirm') + '''" name="password_check" type="password">
+                        <input placeholder="''' + await get_lang('password_confirm') + '''" name="password_check" type="password">
                         <hr class="main_hr">
-                        <button type="submit">''' + get_lang(conn, 'go') + '''</button>
+                        <button type="submit">''' + await get_lang('go') + '''</button>
                     </form>
                 ''',
-                menu = [['manager', get_lang(conn, 'return')]]
+                menu = [['manager', await get_lang('return')]]
             ))

+ 4 - 1
route/go_api_bbs.py

@@ -5,4 +5,7 @@ async def api_bbs(bbs_num = "", page = 1):
     other_set["bbs_num"] = str(bbs_num)
     other_set["page"] = str(page)
 
-    return flask.jsonify(await python_to_golang(sys._getframe().f_code.co_name, other_set))
+    return await python_to_golang(sys._getframe().f_code.co_name, other_set)
+
+async def api_bbs_exter(bbs_num = "", page = 1):
+    return flask.jsonify(await api_bbs(bbs_num, page))

+ 5 - 3
route/go_api_func_language.py

@@ -4,10 +4,12 @@ async def api_func_language(legacy = 'on', data = 'Test'):
     other_set = {}
     if flask.request.method == 'POST':
         other_set["data"] = flask.request.form.get('data', '')
-        other_set["data"] = other_set["data"].split(' ')
     else:
-        other_set["data"] = [data]
+        other_set["data"] = data
 
     other_set["legacy"] = legacy
 
-    return flask.jsonify(await python_to_golang(sys._getframe().f_code.co_name, other_set))
+    return await python_to_golang(sys._getframe().f_code.co_name, other_set)
+
+async def api_func_language_exter(legacy = 'on', data = 'Test'):
+    return flask.jsonify(await api_func_language(legacy, data))

+ 15 - 5
route/go_api_setting.py

@@ -1,12 +1,22 @@
 from .tool.func import *
 
-async def api_setting(name = 'Test'):
+async def api_setting(name = 'Test', method = '', data = ''):
     other_set = {}
     other_set["set_name"] = name
 
+    if method == '':
+        method = flask.request.method
+
     func_name = sys._getframe().f_code.co_name
-    if flask.request.method == 'PUT':
+    if method == 'PUT':
         func_name += '_put'
-        other_set['data'] = flask.request.form.get('data', 'Test')
-    
-    return flask.jsonify(await python_to_golang(func_name, other_set))
+
+        if data == '':
+            other_set['data'] = flask.request.form.get('data', 'Test')
+        else:
+            other_set['data'] = data
+
+    return await python_to_golang(func_name, other_set)
+
+async def api_setting_exter(name = 'Test'):
+    return flask.jsonify(await api_setting(name))

+ 1 - 1
route/go_api_w_render.py

@@ -45,7 +45,7 @@ async def api_w_render(name = '', tool = '', request_method = '', request_data =
                 data_org = re.sub('^\n+', '', data_org)
 
             if markup in ('', 'namumark'):
-                data_pas = render_set(conn, 
+                data_pas = await render_set(conn, 
                     doc_name = name, 
                     doc_data = data_org, 
                     data_type = data_type,

+ 3 - 18
route/go_main_func_easter_egg.py

@@ -10,25 +10,10 @@ async def main_func_easter_egg():
             if not curs.fetchall():
                 curs.execute(db_change('insert into user_set (name, id, data) values ("get_🥚", ?, "Y")'), [ip])
     
-        if platform.system() == 'Linux':
-            if platform.machine() in ["AMD64", "x86_64"]:
-                data = subprocess.Popen([os.path.join(".", "route_go", "bin", "main.amd64.bin"), sys._getframe().f_code.co_name], stdout = subprocess.PIPE).communicate()[0]
-            else:
-                data = subprocess.Popen([os.path.join(".", "route_go", "bin", "main.arm64.bin"), sys._getframe().f_code.co_name], stdout = subprocess.PIPE).communicate()[0]
+        data = ''
 
-            data = data.decode('utf8')
-        elif platform.system() == 'Windows':
-            if platform.machine() in ["AMD64", "x86_64"]:
-                data = subprocess.Popen([os.path.join(".", "route_go", "bin", "main.amd64.exe"), sys._getframe().f_code.co_name], stdout = subprocess.PIPE).communicate()[0]
-            else:
-                data = subprocess.Popen([os.path.join(".", "route_go", "bin", "main.arm64.exe"), sys._getframe().f_code.co_name], stdout = subprocess.PIPE).communicate()[0]
-
-            data = data.decode('utf8')
-        else:
-            data = ''
-
-        return easy_minify(conn, flask.render_template(skin_check(conn),
-            imp = ['Easter Egg', await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+        return easy_minify(flask.render_template(await skin_check(),
+            imp = ['Easter Egg', await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
             data = data,
             menu = 0
         ))

+ 8 - 0
route/go_view_list_random.py

@@ -0,0 +1,8 @@
+from .tool.func import *
+
+async def view_list_random():
+    other_set = {}
+
+    data = await python_to_golang(sys._getframe().f_code.co_name, other_set)
+
+    return data["data"]

+ 11 - 0
route/go_view_user_watch_list.py

@@ -0,0 +1,11 @@
+from .tool.func import *
+
+async def view_user_watch_list(num = 1, do_type = 'watch_list'):
+    other_set = {}
+    other_set['name'] = ip_check()
+    other_set['num'] = str(num)
+    other_set['do_type'] = do_type
+
+    data = await python_to_golang(sys._getframe().f_code.co_name, other_set)
+
+    return data["data"]

+ 11 - 0
route/go_view_w_watch_list.py

@@ -0,0 +1,11 @@
+from .tool.func import *
+
+async def view_w_watch_list(name, num = 1, do_type = 'watch_list'):
+    other_set = {}
+    other_set['name'] = name
+    other_set['num'] = str(num)
+    other_set['do_type'] = do_type
+
+    data = await python_to_golang(sys._getframe().f_code.co_name, other_set)
+
+    return data["data"]

+ 4 - 4
route/list_acl.py

@@ -30,10 +30,10 @@ async def list_acl(arg_num = 1):
             ''
 
         div += '</ul>'
-        div += get_next_page_bottom(conn, '/list/document/acl/{}', arg_num, list_data)
+        div += await get_next_page_bottom('/list/document/acl/{}', arg_num, list_data)
 
-        return easy_minify(conn, flask.render_template(skin_check(conn),
-            imp = [get_lang(conn, 'acl_document_list'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+        return easy_minify(flask.render_template(await skin_check(),
+            imp = [await get_lang('acl_document_list'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
             data = div,
-            menu = [['other', get_lang(conn, 'return')]]
+            menu = [['other', await get_lang('return')]]
         ))

+ 3 - 3
route/list_admin.py

@@ -19,8 +19,8 @@ async def list_admin():
 
         div += '</ul>'
 
-        return easy_minify(conn, flask.render_template(skin_check(conn),
-            imp = [get_lang(conn, 'admin_list'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+        return easy_minify(flask.render_template(await skin_check(),
+            imp = [await get_lang('admin_list'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
             data = div,
-            menu = [['other', get_lang(conn, 'return')]]
+            menu = [['other', await get_lang('return')]]
         ))

+ 6 - 6
route/list_admin_auth_use.py

@@ -35,18 +35,18 @@ async def list_admin_auth_use(arg_num = 1, arg_search = 'normal'):
                 list_data += '<li>' + await ip_pas(data[0]) + ' | ' + html.escape(do_data) + ' | ' + data[2] + '</li>'
 
             list_data += '</ul>'
-            list_data += get_next_page_bottom(conn, '/list/admin/auth_use_page/{}/' + url_pas(arg_search), arg_num, get_list)
+            list_data += await get_next_page_bottom('/list/admin/auth_use_page/{}/' + url_pas(arg_search), arg_num, get_list)
 
             arg_search = html.escape(arg_search) if arg_search != 'normal' else ''
 
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [get_lang(conn, 'authority_use_list'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [await get_lang('authority_use_list'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
                 data = '''
                     <form method="post">
-                        <input class="opennamu_width_200" name="search" placeholder="''' + get_lang(conn, 'start_with_search') + '''" value="''' + arg_search + '''">
-                        <button type="submit">''' + get_lang(conn, 'search') + '''</button>
+                        <input class="opennamu_width_200" name="search" placeholder="''' + await get_lang('start_with_search') + '''" value="''' + arg_search + '''">
+                        <button type="submit">''' + await get_lang('search') + '''</button>
                     </form>
                     <hr class="main_hr">
                 ''' + list_data,
-                menu = [['other', get_lang(conn, 'return')]]
+                menu = [['other', await get_lang('return')]]
             ))

+ 5 - 5
route/list_admin_group.py

@@ -10,7 +10,7 @@ async def list_admin_group():
         curs.execute(db_change("select distinct name from alist order by name asc"))
         for data in curs.fetchall():
             if await acl_check('', 'owner_auth', '', '') != 1 and not data[0] in org_acl_list:
-                delete_admin_group = ' <a href="/auth/list/delete/' + url_pas(data[0]) + '">(' + get_lang(conn, "delete") + ')</a>'
+                delete_admin_group = ' <a href="/auth/list/delete/' + url_pas(data[0]) + '">(' + await get_lang("delete") + ')</a>'
             else:
                 delete_admin_group = ''
 
@@ -24,11 +24,11 @@ async def list_admin_group():
         list_data += '' + \
             '</ul>' + \
             '<hr class="main_hr">' + \
-            '<a href="/manager/8">(' + get_lang(conn, 'add') + ')</a>' + \
+            '<a href="/manager/8">(' + await get_lang('add') + ')</a>' + \
         ''
 
-        return easy_minify(conn, flask.render_template(skin_check(conn),
-            imp = [get_lang(conn, 'admin_group_list'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+        return easy_minify(flask.render_template(await skin_check(),
+            imp = [await get_lang('admin_group_list'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
             data = list_data,
-            menu = [['manager', get_lang(conn, 'return')]]
+            menu = [['manager', await get_lang('return')]]
         ))

+ 11 - 10
route/list_history.py

@@ -25,14 +25,14 @@ async def list_history(tool = 'history', num = 1, set_type = 'normal', doc_name
                 data = await api_list_history(num, set_type, doc_name)
 
                 title = doc_name
-                sub = '(' + get_lang(conn, 'history') + ') (' + get_lang(conn, set_type) + ')'
-                menu = [['w/' + url_pas(doc_name), get_lang(conn, 'return')], ['history_add/' + url_pas(doc_name), get_lang(conn, 'history_add')], ['history_reset/' + url_pas(doc_name), get_lang(conn, 'history_reset')]]
+                sub = '(' + await get_lang('history') + ') (' + await get_lang(set_type) + ')'
+                menu = [['w/' + url_pas(doc_name), await get_lang('return')], ['history_add/' + url_pas(doc_name), await get_lang('history_add')], ['history_reset/' + url_pas(doc_name), await get_lang('history_reset')]]
             else:
                 data = await api_list_recent_change(num, set_type, 50, '')
 
-                title = get_lang(conn, 'recent_change')
-                sub = '(' + get_lang(conn, set_type) + ')'
-                menu = [['other', get_lang(conn, 'return')], ['recent_edit_request', get_lang(conn, 'edit_request')]]
+                title = await get_lang('recent_change')
+                sub = '(' + await get_lang(set_type) + ')'
+                menu = [['other', await get_lang('return')], ['recent_edit_request', await get_lang('edit_request')]]
 
             lang = data["language"]
             auth = data["auth"]
@@ -110,7 +110,8 @@ async def list_history(tool = 'history', num = 1, set_type = 'normal', doc_name
 
                 right += f'<span style="display: none;" id="opennamu_history_tool_{for_a}">'
 
-                right += f'<a href="/raw_rev/{data[for_a][0]}/{doc_name}">{lang["raw"]}</a>'
+                right += f'<a href="/render/{data[for_a][0]}/{doc_name}">{lang["view"]}</a>'
+                right += f' | <a href="/raw_rev/{data[for_a][0]}/{doc_name}">{lang["raw"]}</a>'
                 right += f' | <a href="/revert/{data[for_a][0]}/{doc_name}">{lang["revert"]} (r{data[for_a][0]})</a>'
 
                 if int(data[for_a][0]) > 1:
@@ -147,7 +148,7 @@ async def list_history(tool = 'history', num = 1, set_type = 'normal', doc_name
                 '''
 
             if tool == "history":
-                data_html += get_next_page_bottom(conn, f'/history_page/{{}}/{set_type}/{doc_name}', num, data)
+                data_html += await get_next_page_bottom(f'/history_page/{{}}/{set_type}/{doc_name}', num, data)
                 data_html = (
                     '<form method="post">'
                     f'<select name="a">{select}</select> '
@@ -157,10 +158,10 @@ async def list_history(tool = 'history', num = 1, set_type = 'normal', doc_name
                     '<hr class="main_hr"></hr>' + data_html
                 )
             else:
-                data_html += get_next_page_bottom(conn, f'/recent_change/{{}}/{set_type}', num, data)
+                data_html += await get_next_page_bottom(f'/recent_change/{{}}/{set_type}', num, data)
 
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [title, await wiki_set(), await wiki_custom(conn), wiki_css([sub, 0])],
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [title, await wiki_set(), await wiki_custom(), wiki_css([sub, 0])],
                 data = data_html,
                 menu = menu
             ))

+ 8 - 8
route/list_image_file.py

@@ -8,9 +8,9 @@ async def list_image_file(arg_num = 1, do_type = 0):
 
         list_data = ''
         if do_type == 0:
-            list_data += '<a href="/list/image">(' + get_lang(conn, 'image') + ')</a>'
+            list_data += '<a href="/list/image">(' + await get_lang('image') + ')</a>'
         else:
-            list_data += '<a href="/list/file">(' + get_lang(conn, 'normal') + ')</a>'
+            list_data += '<a href="/list/file">(' + await get_lang('normal') + ')</a>'
         
         list_data += '<hr class="main_hr">'
 
@@ -36,7 +36,7 @@ async def list_image_file(arg_num = 1, do_type = 0):
                 render_data += '||\n'
                 render_data += sub_data + '||'
 
-            end_data = render_set(conn, 
+            end_data = await render_set(conn, 
                 doc_name = '',
                 doc_data = render_data,
                 data_type = 'view',
@@ -54,12 +54,12 @@ async def list_image_file(arg_num = 1, do_type = 0):
             list_data += '</ul>'
 
         if do_type == 0:
-            list_data += get_next_page_bottom(conn, '/list/file/{}', arg_num, data_list)
+            list_data += await get_next_page_bottom('/list/file/{}', arg_num, data_list)
         else:
-            list_data += get_next_page_bottom(conn, '/list/image/{}', arg_num, data_list)
+            list_data += await get_next_page_bottom('/list/image/{}', arg_num, data_list)
 
-        return easy_minify(conn, flask.render_template(skin_check(conn),
-            imp = [get_lang(conn, 'image_file_list'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+        return easy_minify(flask.render_template(await skin_check(),
+            imp = [await get_lang('image_file_list'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
             data = list_data,
-            menu = [['other', get_lang(conn, 'return')]]
+            menu = [['other', await get_lang('return')]]
         ))

+ 4 - 4
route/list_long_page.py

@@ -23,10 +23,10 @@ async def list_long_page(tool = 'long_page', arg_num = 1):
 
             div += '</li>'
 
-        div += '</ul>' + get_next_page_bottom(conn, '/list/document/' + ('long' if title == 'long_page' else 'short') + '/{}', arg_num, n_list)
+        div += '</ul>' + await get_next_page_bottom('/list/document/' + ('long' if title == 'long_page' else 'short') + '/{}', arg_num, n_list)
 
-        return easy_minify(conn, flask.render_template(skin_check(conn),
-            imp = [get_lang(conn, title), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+        return easy_minify(flask.render_template(await skin_check(),
+            imp = [await get_lang(title), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
             data = div,
-            menu = [['other', get_lang(conn, 'return')]]
+            menu = [['other', await get_lang('return')]]
         ))

+ 4 - 4
route/list_no_link.py

@@ -21,10 +21,10 @@ async def list_no_link(num = 1):
 
             div += '</li>'
         
-        div += '</ul>' + get_next_page_bottom(conn, '/list/document/no_link/{}', num, n_list)
+        div += '</ul>' + await get_next_page_bottom('/list/document/no_link/{}', num, n_list)
         
-        return easy_minify(conn, flask.render_template(skin_check(conn),
-            imp = [get_lang(conn, 'no_link_document_list'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+        return easy_minify(flask.render_template(await skin_check(),
+            imp = [await get_lang('no_link_document_list'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
             data = div,
-            menu = [['other', get_lang(conn, 'return')]]
+            menu = [['other', await get_lang('return')]]
         ))

+ 6 - 6
route/list_old_page.py

@@ -6,9 +6,9 @@ async def list_old_page(num = 1, set_type = 'old'):
     with get_db_connect() as conn:
         title = ''
         if set_type == 'old':
-            title = get_lang(conn, 'old_page')
+            title = await get_lang('old_page')
         else:
-            title = get_lang(conn, 'new_page')
+            title = await get_lang('new_page')
 
         data = await api_list_old_page(num, set_type)
         data = data["data"]
@@ -23,10 +23,10 @@ async def list_old_page(num = 1, set_type = 'old'):
 
             data_html += await opennamu_make_list(right, data[for_a][1])
 
-        data_html += get_next_page_bottom(conn, f'/list/document/{set_type}/{{}}', int(num), data)
+        data_html += await get_next_page_bottom(f'/list/document/{set_type}/{{}}', int(num), data)
 
-        return easy_minify(conn, flask.render_template(skin_check(conn),
-            imp = [title, await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+        return easy_minify(flask.render_template(await skin_check(),
+            imp = [title, await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
             data = data_html,
-            menu = [['other', get_lang(conn, 'return')]]
+            menu = [['other', await get_lang('return')]]
         ))

+ 4 - 4
route/list_please.py

@@ -17,10 +17,10 @@ async def list_please(arg_num = 1):
                 '</li>' + \
             ''
 
-        div += '</ul>' + get_next_page_bottom(conn, '/list/document/need/{}', arg_num, data_list)
+        div += '</ul>' + await get_next_page_bottom('/list/document/need/{}', arg_num, data_list)
 
-        return easy_minify(conn, flask.render_template(skin_check(conn),
-            imp = [get_lang(conn, 'need_document'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+        return easy_minify(flask.render_template(await skin_check(),
+            imp = [await get_lang('need_document'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
             data = div,
-            menu = [['other', get_lang(conn, 'return')]]
+            menu = [['other', await get_lang('return')]]
         ))

+ 10 - 10
route/list_title_index.py

@@ -40,26 +40,26 @@ async def list_title_index(num = 1):
                 data += '''
                     </ul>
                     <ul>
-                        <li>''' + get_lang(conn, 'all') + ' : ' + str(count_end[0]) + '''</li>
+                        <li>''' + await get_lang('all') + ' : ' + str(count_end[0]) + '''</li>
                     </ul>
                     <ul>
-                        <li>''' + get_lang(conn, 'category') + ' : ' + str(count_end[1]) + '''</li>
-                        <li>''' + get_lang(conn, 'user_document') + ' : ' + str(count_end[2]) + '''</li>
-                        <li>''' + get_lang(conn, 'file') + ' : ' + str(count_end[3]) + '''</li>
-                        <li>''' + get_lang(conn, 'other') + ' : ' + str(count_end[4]) + '''</li>
+                        <li>''' + await get_lang('category') + ' : ' + str(count_end[1]) + '''</li>
+                        <li>''' + await get_lang('user_document') + ' : ' + str(count_end[2]) + '''</li>
+                        <li>''' + await get_lang('file') + ' : ' + str(count_end[3]) + '''</li>
+                        <li>''' + await get_lang('other') + ' : ' + str(count_end[4]) + '''</li>
                 '''
             else:
                 data += '''
                     </ul>
                     <ul>
-                        <li>''' + get_lang(conn, 'all') + ' : ' + all_title[0][0] + '''</li>
+                        <li>''' + await get_lang('all') + ' : ' + all_title[0][0] + '''</li>
                 '''
 
-        data += '</ul>' + get_next_page_bottom(conn, '/list/document/all/{}', num, title_list)
+        data += '</ul>' + await get_next_page_bottom('/list/document/all/{}', num, title_list)
         sub = ' (' + str(num) + ')'
 
-        return easy_minify(conn, flask.render_template(skin_check(conn),
-            imp = [get_lang(conn, 'all_document_list'), await wiki_set(), await wiki_custom(conn), wiki_css([sub, 0])],
+        return easy_minify(flask.render_template(await skin_check(),
+            imp = [await get_lang('all_document_list'), await wiki_set(), await wiki_custom(), wiki_css([sub, 0])],
             data = data,
-            menu = [['other', get_lang(conn, 'return')]]
+            menu = [['other', await get_lang('return')]]
         ))

+ 4 - 4
route/list_user.py

@@ -16,10 +16,10 @@ async def list_user(arg_num = 1):
             list_data += ' | ' + data[1] if data[1] != '' else ''
             list_data += '</li>'
 
-        list_data += '</ul>' + get_next_page_bottom(conn, '/list/user/{}', arg_num, user_list)
+        list_data += '</ul>' + await get_next_page_bottom('/list/user/{}', arg_num, user_list)
 
-        return easy_minify(conn, flask.render_template(skin_check(conn),
-            imp = [get_lang(conn, 'member_list'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+        return easy_minify(flask.render_template(await skin_check(),
+            imp = [await get_lang('member_list'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
             data = list_data,
-            menu = [['other', get_lang(conn, 'return')]]
+            menu = [['other', await get_lang('return')]]
         ))

+ 17 - 17
route/list_user_check.py

@@ -67,7 +67,7 @@ async def list_user_check(name = 'test', plus_name = None, arg_num = 1, do_type
                     b_ip_count = len(curs.fetchall())
 
                     if a_ip_count + b_ip_count != all_ip_count:
-                        div += get_lang(conn, 'same_ip_exist') + '<hr class="main_hr">'    
+                        div += await get_lang('same_ip_exist') + '<hr class="main_hr">'    
             else:
                 plus = ''
                 set_list = [name, sql_num]
@@ -83,8 +83,8 @@ async def list_user_check(name = 'test', plus_name = None, arg_num = 1, do_type
             if record:
                 if not plus_id:
                     div = '' + \
-                        '<a href="/manager/14/' + url_pas(name) + '">(' + get_lang(conn, 'compare') + ')</a> ' + \
-                        '<a href="/list/user/check/' + url_pas(name) + '/simple">(' + get_lang(conn, 'simple_check') + ')</a>' + \
+                        '<a href="/manager/14/' + url_pas(name) + '">(' + await get_lang('compare') + ')</a> ' + \
+                        '<a href="/list/user/check/' + url_pas(name) + '/simple">(' + await get_lang('simple_check') + ')</a>' + \
                         '<hr class="main_hr">' + \
                     '' + div
                 else:
@@ -98,9 +98,9 @@ async def list_user_check(name = 'test', plus_name = None, arg_num = 1, do_type
                     <table id="main_table_set">
                         <tbody>
                             <tr id="main_table_top_tr">
-                                <td id="main_table_width">''' + get_lang(conn, 'name') + '''</td>
-                                <td id="main_table_width">''' + get_lang(conn, 'ip') + '''</td>
-                                <td id="main_table_width">''' + get_lang(conn, 'time') + '''</td>
+                                <td id="main_table_width">''' + await get_lang('name') + '''</td>
+                                <td id="main_table_width">''' + await get_lang('ip') + '''</td>
+                                <td id="main_table_width">''' + await get_lang('time') + '''</td>
                             </tr>
                 '''
 
@@ -123,7 +123,7 @@ async def list_user_check(name = 'test', plus_name = None, arg_num = 1, do_type
                             <td>
                                 <a href="/list/user/check/''' + url_pas(data[0]) + '''">''' + data[0] + '''</a>
                                 <a href="/list/user/check/delete/''' + url_pas(data[0]) + '/' + url_pas(data[1]) + '/' + url_pas(data[3]) + '/' + ('0' if ip_or_user(name) == 0 else '1') + '''">
-                                    (''' + get_lang(conn, 'delete') + ''')
+                                    (''' + await get_lang('delete') + ''')
                                 </a>
                             </td>
                             <td><a href="/list/user/check/''' + url_pas(data[1]) + '''">''' + data[1] + '''</a></td>
@@ -140,13 +140,13 @@ async def list_user_check(name = 'test', plus_name = None, arg_num = 1, do_type
                 '''
 
             if plus_id:
-                div += get_next_page_bottom(conn, 
+                div += await get_next_page_bottom(
                     '/list/user/check/' + url_pas(name) + '/normal/{}/' + url_pas(plus_id), 
                     num, 
                     record
                 )
             else:
-                div += get_next_page_bottom(conn, 
+                div += await get_next_page_bottom(
                     '/list/user/check/' + url_pas(name) + '/normal/{}', 
                     num, 
                     record
@@ -155,10 +155,10 @@ async def list_user_check(name = 'test', plus_name = None, arg_num = 1, do_type
             if plus_id:
                 name += ', ' + plus_id
 
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [name, await wiki_set(), await wiki_custom(conn), wiki_css(['(' + get_lang(conn, 'check') + ')', 0])],
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [name, await wiki_set(), await wiki_custom(), wiki_css(['(' + await get_lang('check') + ')', 0])],
                 data = div,
-                menu = [['manager', get_lang(conn, 'return')]]
+                menu = [['manager', await get_lang('return')]]
             ))
         else:
             curs.execute(db_change("" + \
@@ -174,18 +174,18 @@ async def list_user_check(name = 'test', plus_name = None, arg_num = 1, do_type
 
             if div != '':
                 div = '<ul>' + div + '</ul>'
-                div += get_next_page_bottom(conn, 
+                div += await get_next_page_bottom(
                     '/list/user/check/' + url_pas(name) + '/' + check_type + '/{}', 
                     num, 
                     record
                 )
 
             div = '' + \
-                '<a href="/list/user/check/' + url_pas(name) + '/normal">(' + get_lang(conn, 'check') + ')</a>' + \
+                '<a href="/list/user/check/' + url_pas(name) + '/normal">(' + await get_lang('check') + ')</a>' + \
             '' + div
 
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [name, await wiki_set(), await wiki_custom(conn), wiki_css(['(' + get_lang(conn, 'simple_check') + ')', 0])],
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [name, await wiki_set(), await wiki_custom(), wiki_css(['(' + await get_lang('simple_check') + ')', 0])],
                 data = div,
-                menu = [['check/' + url_pas(name), get_lang(conn, 'return')]]
+                menu = [['check/' + url_pas(name), await get_lang('return')]]
             ))

+ 7 - 7
route/list_user_check_delete.py

@@ -17,20 +17,20 @@ async def list_user_check_delete(name = None, ip = None, time = None, do_type =
 
                 return redirect(conn, '/list/user/check/' + url_pas(user_id if return_type == '0' else user_ip))
             else:
-                return easy_minify(conn, flask.render_template(skin_check(conn),
-                    imp = [get_lang(conn, 'check'), await wiki_set(), await wiki_custom(conn), wiki_css(['(' + get_lang(conn, 'delete') + ')', 0])],
+                return easy_minify(flask.render_template(await skin_check(),
+                    imp = [await get_lang('check'), await wiki_set(), await wiki_custom(), wiki_css(['(' + await get_lang('delete') + ')', 0])],
                     data = '''
-                        ''' + get_lang(conn, 'name') + ''' : ''' + user_id + '''
+                        ''' + await get_lang('name') + ''' : ''' + user_id + '''
                         <hr class="main_hr">
-                        ''' + get_lang(conn, 'ip') + ''' : ''' + user_ip + '''
+                        ''' + await get_lang('ip') + ''' : ''' + user_ip + '''
                         <hr class="main_hr">
-                        ''' + get_lang(conn, 'time') + ''' : ''' + time + '''
+                        ''' + await get_lang('time') + ''' : ''' + time + '''
                         <hr class="main_hr">
                         <form method="post">
-                            <button type="submit">''' + get_lang(conn, 'delete') + '''</button>
+                            <button type="submit">''' + await get_lang('delete') + '''</button>
                         </form>
                     ''',
-                    menu = [['check/' + url_pas(user_id if return_type == '0' else user_ip), get_lang(conn, 'return')]]
+                    menu = [['check/' + url_pas(user_id if return_type == '0' else user_ip), await get_lang('return')]]
                 ))
         else:
             return redirect(conn)

+ 10 - 11
route/login_find.py

@@ -1,14 +1,13 @@
 from .tool.func import *
 
 async def login_find():
-    with get_db_connect() as conn:
-        return easy_minify(conn, flask.render_template(skin_check(conn),
-            imp = [get_lang(conn, 'password_search'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
-            data = '''
-                <ul>
-                    <li><a href="/login/find/email">''' + get_lang(conn, 'email') + '''</a></li>
-                    <li><a href="/login/find/key">''' + get_lang(conn, 'key') + '''</a></li>
-                </ul>
-            ''',
-            menu = [['user', get_lang(conn, 'return')]]
-        ))
+    return easy_minify(flask.render_template(await skin_check(),
+        imp = [await get_lang('password_search'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
+        data = '''
+            <ul>
+                <li><a href="/login/find/email">''' + await get_lang('email') + '''</a></li>
+                <li><a href="/login/find/key">''' + await get_lang('key') + '''</a></li>
+            </ul>
+        ''',
+        menu = [['user', await get_lang('return')]]
+    ))

+ 12 - 12
route/login_find_email.py

@@ -79,18 +79,18 @@ async def login_find_email(tool):
                 sql_d = curs.fetchall()
                 b_text = (sql_d[0][0] + '<hr class="main_hr">') if sql_d and sql_d[0][0] != '' else ''
         
-                return easy_minify(conn, flask.render_template(skin_check(conn),
-                    imp = [get_lang(conn, 'password_search'), await wiki_set(), await wiki_custom(conn), wiki_css(['(' + get_lang(conn, 'email') + ')', 0])],
+                return easy_minify(flask.render_template(await skin_check(),
+                    imp = [await get_lang('password_search'), await wiki_set(), await wiki_custom(), wiki_css(['(' + await get_lang('email') + ')', 0])],
                     data = b_text + '''
                         <form method="post">
-                            <input placeholder="''' + get_lang(conn, 'id') + '''" name="id" type="text">
+                            <input placeholder="''' + await get_lang('id') + '''" name="id" type="text">
                             <hr class="main_hr">
-                            <input placeholder="''' + get_lang(conn, 'email') + '''" name="email" type="text">
+                            <input placeholder="''' + await get_lang('email') + '''" name="email" type="text">
                             <hr class="main_hr">
-                            <button type="submit">''' + get_lang(conn, 'save') + '''</button>
+                            <button type="submit">''' + await get_lang('save') + '''</button>
                         </form>
                     ''',
-                    menu = [['user', get_lang(conn, 'return')]]
+                    menu = [['user', await get_lang('return')]]
                 ))
             else:
                 if tool == 'need_email' and not 'c_type' in flask.session:
@@ -100,17 +100,17 @@ async def login_find_email(tool):
                 sql_d = curs.fetchall()
                 b_text = (sql_d[0][0] + '<hr class="main_hr">') if sql_d and sql_d[0][0] != '' else ''
         
-                return easy_minify(conn, flask.render_template(skin_check(conn),
-                    imp = [get_lang(conn, 'email'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+                return easy_minify(flask.render_template(await skin_check(),
+                    imp = [await get_lang('email'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
                     data = '''
-                        <a href="/filter/email_filter">(''' + get_lang(conn, 'email_filter_list') + ''')</a>
+                        <a href="/filter/email_filter">(''' + await get_lang('email_filter_list') + ''')</a>
                         <hr class="main_hr">
                         ''' + b_text + '''
                         <form method="post">
-                            <input placeholder="''' + get_lang(conn, 'email') + '''" name="email" type="text">
+                            <input placeholder="''' + await get_lang('email') + '''" name="email" type="text">
                             <hr class="main_hr">
-                            <button type="submit">''' + get_lang(conn, 'save') + '''</button>
+                            <button type="submit">''' + await get_lang('save') + '''</button>
                         </form>
                     ''',
-                    menu = [['user', get_lang(conn, 'return')]]
+                    menu = [['user', await get_lang('return')]]
                 ))

+ 10 - 10
route/login_find_email_check.py

@@ -30,15 +30,15 @@ async def login_find_email_check(tool):
                 sql_d = curs.fetchall()
                 b_text = (sql_d[0][0] + '<hr class="main_hr">') if sql_d and sql_d[0][0] != '' else ''
         
-                return easy_minify(conn, flask.render_template(skin_check(conn),
-                    imp = [get_lang(conn, 'reset_user_ok'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+                return easy_minify(flask.render_template(await skin_check(),
+                    imp = [await get_lang('reset_user_ok'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
                     data = '' + \
                         b_text + \
-                        get_lang(conn, 'id') + ' : ' + user_id + \
+                        await get_lang('id') + ' : ' + user_id + \
                         '<hr class="main_hr">' + \
-                        get_lang(conn, 'password') + ' : ' + user_pw + \
+                        await get_lang('password') + ' : ' + user_pw + \
                     '',
-                    menu = [['user', get_lang(conn, 'return')]]
+                    menu = [['user', await get_lang('return')]]
                 ))
             elif 'c_type' in flask.session and (flask.session['c_key'] == input_key or flask.session['c_key'] == 'email_pass'):
                 curs.execute(db_change('select data from other where name = "encode"'))
@@ -121,15 +121,15 @@ async def login_find_email_check(tool):
             sql_d = curs.fetchall()
             b_text = (sql_d[0][0] + '<hr class="main_hr">') if sql_d and sql_d[0][0] != '' else ''
         
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [get_lang(conn, 'check_key'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [await get_lang('check_key'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
                 data = '''
                     <form method="post">
                         ''' + b_text + '''
-                        <input placeholder="''' + get_lang(conn, 'key') + '''" name="key" type="password">
+                        <input placeholder="''' + await get_lang('key') + '''" name="key" type="password">
                         <hr class="main_hr">
-                        <button type="submit">''' + get_lang(conn, 'save') + '''</button>
+                        <button type="submit">''' + await get_lang('save') + '''</button>
                     </form>
                 ''',
-                menu = [['user', get_lang(conn, 'return')]]
+                menu = [['user', await get_lang('return')]]
             ))

+ 10 - 10
route/login_find_key.py

@@ -29,26 +29,26 @@ async def login_find_key():
             sql_d = curs.fetchall()
             b_text = (sql_d[0][0] + '<hr class="main_hr">') if sql_d and sql_d[0][0] != '' else ''
             
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                    imp = [get_lang(conn, 'reset_user_ok'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+            return easy_minify(flask.render_template(await skin_check(),
+                    imp = [await get_lang('reset_user_ok'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
                     data = '' + \
                         b_text + \
-                        get_lang(conn, 'id') + ' : ' + user_id + \
+                        await get_lang('id') + ' : ' + user_id + \
                         '<hr class="main_hr">' + \
-                        get_lang(conn, 'password') + ' : ' + key + \
+                        await get_lang('password') + ' : ' + key + \
                     '',
-                    menu = [['user', get_lang(conn, 'return')]]
+                    menu = [['user', await get_lang('return')]]
                 ))
         else:
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [get_lang(conn, 'password_search'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [await get_lang('password_search'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
                 data = '''
                     <form method="post">
-                        <input placeholder="''' + get_lang(conn, 'key') + '''" name="key" type="password">
+                        <input placeholder="''' + await get_lang('key') + '''" name="key" type="password">
                         <hr class="main_hr">
                         ''' + await captcha_get(conn) + '''
-                        <button type="submit">''' + get_lang(conn, 'send') + '''</button>
+                        <button type="submit">''' + await get_lang('send') + '''</button>
                     </form>
                 ''',
-                menu = [['user', get_lang(conn, 'return')]]
+                menu = [['user', await get_lang('return')]]
             ))

+ 8 - 8
route/login_login.py

@@ -49,20 +49,20 @@ async def login_login():
 
                 return redirect(conn, '/user')
         else:
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [get_lang(conn, 'login'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [await get_lang('login'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
                 data =  '''
                         <form method="post">
-                            <input placeholder="''' + get_lang(conn, 'id') + '''" name="id" type="text">
+                            <input placeholder="''' + await get_lang('id') + '''" name="id" type="text">
                             <hr class="main_hr">
-                            <input placeholder="''' + get_lang(conn, 'password') + '''" name="pw" type="password">
+                            <input placeholder="''' + await get_lang('password') + '''" name="pw" type="password">
                             <hr class="main_hr">
-                            <!-- <label><input type="checkbox" name="auto_login"> ''' + get_lang(conn, 'auto_login') + ''' (''' + get_lang(conn, 'not_working') + ''')</label>
+                            <!-- <label><input type="checkbox" name="auto_login"> ''' + await get_lang('auto_login') + ''' (''' + await get_lang('not_working') + ''')</label>
                             <hr class="main_hr"> -->
                             ''' + await captcha_get(conn) + '''
-                            <button type="submit">''' + get_lang(conn, 'login') + '''</button>
-                            ''' + http_warning(conn) + '''
+                            <button type="submit">''' + await get_lang('login') + '''</button>
+                            ''' + await http_warning() + '''
                         </form>
                         ''',
-                menu = [['user', get_lang(conn, 'return')]]
+                menu = [['user', await get_lang('return')]]
             ))

+ 6 - 6
route/login_login_2fa.py

@@ -49,16 +49,16 @@ async def login_login_2fa():
 
             return redirect(conn, '/user')
         else:
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [get_lang(conn, 'login'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [await get_lang('login'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
                 data =  '''
                         <form method="post">
-                            <input placeholder="''' + get_lang(conn, '2fa_password') + '''" name="pw" type="password">
+                            <input placeholder="''' + await get_lang('2fa_password') + '''" name="pw" type="password">
                             <hr class="main_hr">
                             ''' + await captcha_get(conn) + '''
-                            <button type="submit">''' + get_lang(conn, 'login') + '''</button>
-                            ''' + http_warning(conn) + '''
+                            <button type="submit">''' + await get_lang('login') + '''</button>
+                            ''' + await http_warning() + '''
                         </form>
                         ''',
-                menu = [['user', get_lang(conn, 'return')]]
+                menu = [['user', await get_lang('return')]]
             ))

+ 6 - 6
route/login_login_2fa_email.py

@@ -44,16 +44,16 @@ async def login_login_2fa_email():
 
             return redirect(conn, '/user')
         else:
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [get_lang(conn, 'login'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [await get_lang('login'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
                 data =  '''
                         <form method="post">
-                            <input placeholder="''' + get_lang(conn, '2fa_password') + '''" name="pw" type="password">
+                            <input placeholder="''' + await get_lang('2fa_password') + '''" name="pw" type="password">
                             <hr class=\"main_hr\">
                             ''' + await captcha_get(conn) + '''
-                            <button type="submit">''' + get_lang(conn, 'login') + '''</button>
-                            ''' + http_warning(conn) + '''
+                            <button type="submit">''' + await get_lang('login') + '''</button>
+                            ''' + await http_warning() + '''
                         </form>
                         ''',
-                menu = [['user', get_lang(conn, 'return')]]
+                menu = [['user', await get_lang('return')]]
             ))

+ 9 - 9
route/login_register.py

@@ -83,31 +83,31 @@ async def login_register():
             curs.execute(db_change("select data from other where name = 'password_min_length'"))
             db_data = curs.fetchall()
             if db_data and db_data[0][0] != '':
-                password_min_length = ' (' + get_lang(conn, 'password_min_length') + ' : ' + db_data[0][0] + ')'
+                password_min_length = ' (' + await get_lang('password_min_length') + ' : ' + db_data[0][0] + ')'
             else:
                 password_min_length = ''
 
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [get_lang(conn, 'register'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [await get_lang('register'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
                 data = '''
                     <form method="post">
                         ''' + contract + '''
 
-                        <input placeholder="''' + get_lang(conn, 'id') + '''" name="id" type="text">
+                        <input placeholder="''' + await get_lang('id') + '''" name="id" type="text">
                         <hr class="main_hr">
 
-                        <input placeholder="''' + get_lang(conn, 'password') + password_min_length + '''" name="pw" type="password">
+                        <input placeholder="''' + await get_lang('password') + password_min_length + '''" name="pw" type="password">
                         <hr class="main_hr">
 
-                        <input placeholder="''' + get_lang(conn, 'password_confirm') + '''" name="pw2" type="password">
+                        <input placeholder="''' + await get_lang('password_confirm') + '''" name="pw2" type="password">
                         <hr class="main_hr">
 
                         ''' + await captcha_get(conn) + '''
 
-                        <button type="submit">''' + get_lang(conn, 'save') + '''</button>
+                        <button type="submit">''' + await get_lang('save') + '''</button>
 
-                        ''' + http_warning(conn) + '''
+                        ''' + await http_warning() + '''
                     </form>
                 ''',
-                menu = [['user', get_lang(conn, 'return')]]
+                menu = [['user', await get_lang('return')]]
             ))

+ 6 - 7
route/login_register_email.py

@@ -35,7 +35,6 @@ async def login_register_email():
             else:
                 i_text = 'Key : ' + str(flask.session.get('reg_key'))
 
-
             curs.execute(db_change('select id from user_set where name = "email" and data = ?'), [user_email])
             if curs.fetchall():
                 return await re_error(conn, 35)
@@ -51,17 +50,17 @@ async def login_register_email():
             sql_d = curs.fetchall()
             b_text = (sql_d[0][0] + '<hr class="main_hr">') if sql_d and sql_d[0][0] != '' else ''
 
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [get_lang(conn, 'email'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [await get_lang('email'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
                 data = '''
-                    <a href="/filter/email_filter">(''' + get_lang(conn, 'email_filter_list') + ''')</a>
+                    <a href="/filter/email_filter">(''' + await get_lang('email_filter_list') + ''')</a>
                     <hr class="main_hr">
                     ''' + b_text + '''
                     <form method="post">
-                        <input placeholder="''' + get_lang(conn, 'email') + '''" name="email" type="text">
+                        <input placeholder="''' + await get_lang('email') + '''" name="email" type="text">
                         <hr class="main_hr">
-                        <button type="submit">''' + get_lang(conn, 'save') + '''</button>
+                        <button type="submit">''' + await get_lang('save') + '''</button>
                     </form>
                 ''',
-                menu = [['user', get_lang(conn, 'return')]]
+                menu = [['user', await get_lang('return')]]
             ))

+ 5 - 5
route/login_register_email_check.py

@@ -34,15 +34,15 @@ async def login_register_email_check():
             sql_d = curs.fetchall()
             b_text = (sql_d[0][0] + '<hr class="main_hr">') if sql_d and sql_d[0][0] != '' else ''
 
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [get_lang(conn, 'check_key'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [await get_lang('check_key'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
                 data = '''
                     <form method="post">
                         ''' + b_text + '''
-                        <input placeholder="''' + get_lang(conn, 'key') + '''" name="key" type="text">
+                        <input placeholder="''' + await get_lang('key') + '''" name="key" type="text">
                         <hr class="main_hr">
-                        <button type="submit">''' + get_lang(conn, 'save') + '''</button>
+                        <button type="submit">''' + await get_lang('save') + '''</button>
                     </form>
                 ''',
-                menu = [['user', get_lang(conn, 'return')]]
+                menu = [['user', await get_lang('return')]]
             ))

+ 6 - 6
route/login_register_submit.py

@@ -52,16 +52,16 @@ async def login_register_submit():
 
             return await re_error(conn, 43)
         else:
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [get_lang(conn, 'approval_question'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [await get_lang('approval_question'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
                 data = '''
                     <form method="post">
-                        ''' + get_lang(conn, 'approval_question') + ' : ' + data_que + '''
+                        ''' + await get_lang('approval_question') + ' : ' + data_que + '''
                         <hr class="main_hr">
-                        <input placeholder="''' + get_lang(conn, 'approval_question') + '''" name="answer">
+                        <input placeholder="''' + await get_lang('approval_question') + '''" name="answer">
                         <hr class="main_hr">
-                        <button type="submit">''' + get_lang(conn, 'save') + '''</button>
+                        <button type="submit">''' + await get_lang('save') + '''</button>
                     </form>
                 ''',
-                menu = [['user', get_lang(conn, 'return')]]
+                menu = [['user', await get_lang('return')]]
             ))

+ 2 - 2
route/main_func_error_404.py

@@ -23,8 +23,8 @@ async def main_func_error_404(e = ''):
                 db_data = db_data[0][0] if db_data and db_data[0][0] != '' else ''
 
                 if db_data != '':
-                    return easy_minify(conn, flask.render_template(skin_check(conn),
-                        imp = ['404', await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+                    return easy_minify(flask.render_template(await skin_check(),
+                        imp = ['404', await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
                         data = db_data,
                         menu = 0
                     )), 404

+ 8 - 8
route/main_search_deep.py

@@ -18,15 +18,15 @@ async def main_search_deep(name = 'Test', search_type = 'title', num = 1):
             div = '''
                 <form method="post">
                     <input class="opennamu_width_200" name="search" value="''' + html.escape(name) + '''">
-                    <button type="submit">''' + get_lang(conn, 'search') + '''</button>
+                    <button type="submit">''' + await get_lang('search') + '''</button>
                 </form>
                 <hr class="main_hr">
             '''
 
             if search_type == 'title':
-                div += '<a href="/search_data_page/1/' + url_pas(name) + '">(' + get_lang(conn, 'search_document_data') + ')</a>'
+                div += '<a href="/search_data_page/1/' + url_pas(name) + '">(' + await get_lang('search_document_data') + ')</a>'
             else:
-                div += '<a href="/search_page/1/' + url_pas(name) + '">(' + get_lang(conn, 'search_document_name') + ')</a>'
+                div += '<a href="/search_page/1/' + url_pas(name) + '">(' + await get_lang('search_document_name') + ')</a>'
 
             name_new = ''
             if re.search(r'^분류:', name):
@@ -45,7 +45,7 @@ async def main_search_deep(name = 'Test', search_type = 'title', num = 1):
             div += '''
                 <ul>
                     <li>
-                        ''' + get_lang(conn, 'go') + ''' : <a ''' + link_id + ' href="/w/' + url_pas(name) + '">' + html.escape(name) + '''</a>
+                        ''' + await get_lang('go') + ''' : <a ''' + link_id + ' href="/w/' + url_pas(name) + '">' + html.escape(name) + '''</a>
                     </li>
                 </ul>
                 <ul>
@@ -58,12 +58,12 @@ async def main_search_deep(name = 'Test', search_type = 'title', num = 1):
             div += '</ul>'
             
             if search_type == 'title':
-                div += get_next_page_bottom(conn, '/search_page/{}/' + url_pas(name), num, all_list)
+                div += await get_next_page_bottom('/search_page/{}/' + url_pas(name), num, all_list)
             else:
-                div += get_next_page_bottom(conn, '/search_data_page/{}/' + url_pas(name), num, all_list)
+                div += await get_next_page_bottom('/search_data_page/{}/' + url_pas(name), num, all_list)
 
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [name, await wiki_set(), await wiki_custom(conn), wiki_css(['(' + get_lang(conn, 'search') + ')', 0])],
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [name, await wiki_set(), await wiki_custom(), wiki_css(['(' + await get_lang('search') + ')', 0])],
                 data = div,
                 menu = 0
             ))

+ 14 - 14
route/main_setting.py

@@ -3,23 +3,23 @@ from .tool.func import *
 async def main_setting():
     with get_db_connect() as conn:
         li_list = [
-            ['main', get_lang(conn, 'main_setting')],
-            ['phrase', get_lang(conn, 'text_setting')],
+            ['main', await get_lang('main_setting')],
+            ['phrase', await get_lang('text_setting')],
             ['robot', 'robots.txt'],
-            ['external', get_lang(conn, 'ext_api_req_set')],
-            ['head', get_lang(conn, 'main_head')],
-            ['body/top', get_lang(conn, 'main_body')],
-            ['body/bottom', get_lang(conn, 'main_bottom_body')],
-            ['sitemap_set', get_lang(conn, 'sitemap_management')],
-            ['top_menu', get_lang(conn, 'top_menu_setting')],
-            ['skin_set', get_lang(conn, 'main_skin_set_default')],
-            ['404_page', get_lang(conn, '404_page_setting')]
+            ['external', await get_lang('ext_api_req_set')],
+            ['head', await get_lang('main_head')],
+            ['body/top', await get_lang('main_body')],
+            ['body/bottom', await get_lang('main_bottom_body')],
+            ['sitemap_set', await get_lang('sitemap_management')],
+            ['top_menu', await get_lang('top_menu_setting')],
+            ['skin_set', await get_lang('main_skin_set_default')],
+            ['404_page', await get_lang('404_page_setting')]
         ]
 
         li_data = ''.join(['<li><a href="/setting/' + str(li[0]) + '">' + li[1] + '</a></li>' for li in li_list])
 
-        return easy_minify(conn, flask.render_template(skin_check(conn),
-            imp = [get_lang(conn, 'setting'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
-            data = '<h2>' + get_lang(conn, 'list') + '</h2><ul>' + li_data + '</ul>',
-            menu = [['manager', get_lang(conn, 'return')]]
+        return easy_minify(flask.render_template(await skin_check(),
+            imp = [await get_lang('setting'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
+            data = '<h2>' + await get_lang('list') + '</h2><ul>' + li_data + '</ul>',
+            menu = [['manager', await get_lang('return')]]
         ))

+ 60 - 0
route/main_setting_404_page.py

@@ -0,0 +1,60 @@
+from .tool.func import *
+
+from .go_api_func_language import api_func_language
+from .go_api_setting import api_setting
+
+async def main_setting_404_page():
+    with get_db_connect() as conn:
+        if await acl_check('', 'owner_auth', '', '') == 1:
+            return await re_error(conn, 0)
+            
+        if flask.request.method == 'POST':
+            select_data = flask.request.form.get('select', '404_page')
+            form_data = flask.request.form.get('data', 'Test')
+
+            await api_setting('manage_404_page', 'PUT', select_data)
+            await api_setting('manage_404_page_content', 'PUT', form_data)
+
+            await acl_check(tool = 'owner_auth', memo = 'edit_set (404_page)')
+
+            return redirect(conn, '/setting/404_page')
+        else:
+            lang = await api_func_language('', 'enter_html save 404_file 404_page preview')
+
+            set_type = await api_setting('manage_404_page')
+            set_data = await api_setting('manage_404_page_content')
+
+            data_html = ''
+            select_list = [
+                ['404_page', lang['data']['404_page']],
+                ['404_file', lang['data']['404_file']]
+            ]
+
+            data_html += '<select name="select">'
+            for for_a in select_list:
+                selected = ''
+                if set_type['data'] == for_a[0]:
+                    selected = 'selected'
+                    
+                data_html += '<option value="' + for_a[0] + '" ' + selected + '>' + for_a[1] + '</option>'
+
+            data_html += '</select>'
+            data_html += '<hr class="main_hr">'
+
+            form_data = ''
+            if len(set_data['data']) != 0:
+                form_data = set_data['data'][0][0]
+
+            data_html += (
+                '<form method="post">' +
+                    '<textarea class="opennamu_textarea_500" name="data" placeholder="' + lang['data']['enter_html'] + '">' + html.escape(form_data) + '</textarea>' +
+                    '<hr class="main_hr">' +
+                    '<button id="opennamu_save_button" type="submit">' + lang['data']['save'] + '</button>' +
+                '</form>'
+            )
+
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [await get_lang('404_page_setting'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
+                data = data_html,
+                menu = [['setting', await get_lang('return')]]
+            ))

+ 12 - 12
route/main_setting_email_test.py

@@ -10,28 +10,28 @@ async def main_setting_email_test():
         if flask.request.method == 'POST':
             render_data = await api_func_email()
             if render_data["response"] == "ok":
-                data = get_lang(conn, "ok")
+                data = await get_lang("ok")
             else:
-                data = get_lang(conn, "error")
+                data = await get_lang("error")
 
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [get_lang(conn, "email_test"), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [await get_lang("email_test"), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
                 data = data,
-                menu = [["setting/external", get_lang(conn, 'return')]]
+                menu = [["setting/external", await get_lang('return')]]
             ))
         else:
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [get_lang(conn, "email_test"), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [await get_lang("email_test"), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
                 data = '''
                     <form method="post">
-                        <input name="title" placeholder="''' + get_lang(conn, "title") + '''">
+                        <input name="title" placeholder="''' + await get_lang("title") + '''">
                         <hr class="main_hr">
-                        <input name="email" placeholder="''' + get_lang(conn, "email") + '''">
+                        <input name="email" placeholder="''' + await get_lang("email") + '''">
                         <hr class="main_hr">
-                        <textarea  name="data" class="opennamu_textarea_500" placeholder="''' + get_lang(conn, "content") + '''"></textarea>
+                        <textarea  name="data" class="opennamu_textarea_500" placeholder="''' + await get_lang("content") + '''"></textarea>
                         <hr class="main_hr">
-                        <button type="submit">''' + get_lang(conn, "send") + '''</button>
+                        <button type="submit">''' + await get_lang("send") + '''</button>
                     </form>
                 ''',
-                menu = [["setting/external", get_lang(conn, 'return')]]
+                menu = [["setting/external", await get_lang('return')]]
             ))

+ 22 - 22
route/main_setting_external.py

@@ -65,80 +65,80 @@ async def main_setting_external():
                 else:
                     re_ver += '<option value="' + i + '">' + re_ver_list[i] + '</option>'
 
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [get_lang(conn, 'ext_api_req_set'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
-                data = render_simple_set(conn, '''
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [await get_lang('ext_api_req_set'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
+                data = await render_simple_set('''
                     <form method="post">
-                        <h2>''' + get_lang(conn, 'captcha') + '''</h2>
-                        <a href="https://www.google.com/recaptcha/">(''' + get_lang(conn, 'recaptcha') + ''')</a> <a href="https://www.hcaptcha.com/">(''' + get_lang(conn, 'hcaptcha') + ''')</a>
+                        <h2>''' + await get_lang('captcha') + '''</h2>
+                        <a href="https://www.google.com/recaptcha/">(''' + await get_lang('recaptcha') + ''')</a> <a href="https://www.hcaptcha.com/">(''' + await get_lang('hcaptcha') + ''')</a>
                         <hr class="main_hr">
 
-                        <span>''' + get_lang(conn, 'public_key') + '''</span>
+                        <span>''' + await get_lang('public_key') + '''</span>
                         <hr class="main_hr">
                         <input name="recaptcha" value="''' + html.escape(d_list[0]) + '''">
                         <hr class="main_hr">
 
-                        <span>''' + get_lang(conn, 'secret_key') + '''</span>
+                        <span>''' + await get_lang('secret_key') + '''</span>
                         <hr class="main_hr">
                         <input name="sec_re" value="''' + html.escape(d_list[1]) + '''">
                         <hr class="main_hr">
 
-                        <span>''' + get_lang(conn, 'version') + '''</span>
+                        <span>''' + await get_lang('version') + '''</span>
                         <hr class="main_hr">
                         <select name="recaptcha_ver">
                             ''' + re_ver + '''
                         </select>
 
-                        <h2>''' + get_lang(conn, 'email_setting') + '''</h2>
-                        <a href="/setting/phrase#s-6">(''' + get_lang(conn, 'text_setting') + ''')</a>
+                        <h2>''' + await get_lang('email_setting') + '''</h2>
+                        <a href="/setting/phrase#s-6">(''' + await get_lang('text_setting') + ''')</a>
                         <hr class="main_hr">
 
-                        <label><input type="checkbox" name="email_have" ''' + ('checked' if d_list[9] != '' else '')  + '''> ''' + get_lang(conn, 'email_required') + '''</label>
+                        <label><input type="checkbox" name="email_have" ''' + ('checked' if d_list[9] != '' else '')  + '''> ''' + await get_lang('email_required') + '''</label>
 
-                        <h3>''' + get_lang(conn, 'smtp_setting') + '''</h3>
+                        <h3>''' + await get_lang('smtp_setting') + '''</h3>
                         <a href="https://support.google.com/mail/answer/7126229">(Google)</a>
                         <hr class="main_hr">
-                        <a href="/setting/email_test">(''' + get_lang(conn, 'test') + ''')</a>
+                        <a href="/setting/email_test">(''' + await get_lang('test') + ''')</a>
                         <hr class="main_hr">
 
-                        <span>''' + get_lang(conn, 'smtp_server') + '''</span>
+                        <span>''' + await get_lang('smtp_server') + '''</span>
                         <hr class="main_hr">
                         <input name="smtp_server" value="''' + html.escape(d_list[2]) + '''">
                         <hr class="main_hr">
 
-                        <span>''' + get_lang(conn, 'smtp_port') + '''</span>
+                        <span>''' + await get_lang('smtp_port') + '''</span>
                         <hr class="main_hr">
                         <input name="smtp_port" value="''' + html.escape(d_list[3]) + '''">
                         <hr class="main_hr">
 
-                        <span>''' + get_lang(conn, 'smtp_security') + '''</span>
+                        <span>''' + await get_lang('smtp_security') + '''</span>
                         <hr class="main_hr">
                         <select name="smtp_security">
                             ''' + security_radios + '''
                         </select>
                         <hr class="main_hr">
 
-                        <span>''' + get_lang(conn, 'smtp_username') + '''</span>
+                        <span>''' + await get_lang('smtp_username') + '''</span>
                         <hr class="main_hr">
                         <input name="smtp_email" value="''' + html.escape(d_list[5]) + '''">
                         <hr class="main_hr">
 
-                        <span>''' + get_lang(conn, 'smtp_password') + '''</span>
+                        <span>''' + await get_lang('smtp_password') + '''</span>
                         <hr class="main_hr">
                         <input type="password" name="smtp_pass" value="''' + html.escape(d_list[6]) + '''">
 
-                        <h2>''' + get_lang(conn, 'oauth') + ''' (''' + get_lang(conn, 'not_working') + ''')</h2>
+                        <h2>''' + await get_lang('oauth') + ''' (''' + await get_lang('not_working') + ''')</h2>
                         <a href="https://developers.google.com/identity/protocols/oauth2">(Google)</a>
                         <hr class="main_hr">
 
-                        <span>''' + get_lang(conn, 'oauth_client_id') + '''</span>
+                        <span>''' + await get_lang('oauth_client_id') + '''</span>
                         <hr class="main_hr">
                         <input name="oauth_client_id" value="''' + html.escape(d_list[8]) + '''">
                         <hr class="main_hr">
 
                         <hr class="main_hr">
-                        <button id="opennamu_save_button" type="submit">''' + get_lang(conn, 'save') + '''</button>
+                        <button id="opennamu_save_button" type="submit">''' + await get_lang('save') + '''</button>
                     </form>
                 '''),
-                menu = [['setting', get_lang(conn, 'return')]]
+                menu = [['setting', await get_lang('return')]]
             ))

+ 10 - 10
route/main_setting_head.py

@@ -49,7 +49,7 @@ async def main_setting_head(num, skin_name = '', set_preview = 0):
                 form_action = 'formaction="/setting/body/top"'
                 data_preview = flask.request.form.get('content', '') if set_preview == 1 else ''
                 plus = '''
-                    <button id="opennamu_preview_button" type="submit" formaction="/setting_preview/body/top">''' + get_lang(conn, 'preview') + '''</button>
+                    <button id="opennamu_preview_button" type="submit" formaction="/setting_preview/body/top">''' + await get_lang('preview') + '''</button>
                     <hr class="main_hr">
                     <div id="opennamu_preview_area">''' + data_preview + '''</div>
                 '''
@@ -59,20 +59,20 @@ async def main_setting_head(num, skin_name = '', set_preview = 0):
                 data_preview = flask.request.form.get('content', '') if set_preview == 1 else ''
                 form_action = 'formaction="/setting/body/bottom"'
                 plus = '''
-                    <button id="opennamu_preview_button" type="submit" formaction="/setting_preview/body/bottom">''' + get_lang(conn, 'preview') + '''</button>
+                    <button id="opennamu_preview_button" type="submit" formaction="/setting_preview/body/bottom">''' + await get_lang('preview') + '''</button>
                     <hr class="main_hr">
                     <div id="opennamu_preview_area">''' + data_preview + '''</div>
                 '''
             else:
                 skin_list = ''
-                for for_a in load_skin(conn, '', 1):
+                for for_a in await load_skin('', 1):
                     skin_list += '<a href="/setting/head/' + url_pas(for_a) + '">(' + html.escape(for_a) + ')</a> '
                     skin_list += '<a href="/setting/head/' + url_pas(for_a) + '-cssdark">(' + html.escape(for_a) + '-cssdark)</a> '
 
                 curs.execute(db_change("select data from other where name = 'head' and coverage = ?"), [skin_name])
                 title = '_head'
                 start = '' + \
-                    '<a href="/setting/head">(' + get_lang(conn, 'all') + ')</a> ' + \
+                    '<a href="/setting/head">(' + await get_lang('all') + ')</a> ' + \
                     skin_list + '''
                     <hr class="main_hr">
                     <span>
@@ -97,17 +97,17 @@ async def main_setting_head(num, skin_name = '', set_preview = 0):
             else:
                 sub_plus = ''
 
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [get_lang(conn, data = 'main' + title, safe = 1), await wiki_set(), await wiki_custom(conn), wiki_css(['(HTML)' + sub_plus, 0])],
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [await get_lang(data = 'main' + title, safe = 1), await wiki_set(), await wiki_custom(), wiki_css(['(HTML)' + sub_plus, 0])],
                 data = '''
                     <form method="post">
                         ''' + start + '''
-                        <textarea class="opennamu_textarea_500" placeholder="''' + get_lang(conn, 'enter_html') + '''" name="content" id="content">''' + html.escape(data) + '''</textarea>
+                        <textarea class="opennamu_textarea_500" placeholder="''' + await get_lang('enter_html') + '''" name="content" id="content">''' + html.escape(data) + '''</textarea>
                         <hr class="main_hr">
-                        ''' + (get_lang(conn, 'main_css_warning') + '<hr class="main_hr">' if title == '_head' else '') + '''
-                        <button id="opennamu_save_button" type="submit" ''' + form_action + '''>''' + get_lang(conn, 'save') + '''</button>
+                        ''' + (await get_lang('main_css_warning') + '<hr class="main_hr">' if title == '_head' else '') + '''
+                        <button id="opennamu_save_button" type="submit" ''' + form_action + '''>''' + await get_lang('save') + '''</button>
                         ''' + plus + '''
                     </form>
                 ''',
-                menu = [['setting', get_lang(conn, 'return')]]
+                menu = [['setting', await get_lang('return')]]
             ))

+ 59 - 59
route/main_setting_main.py

@@ -117,7 +117,7 @@ async def main_setting_main():
             for for_a in ip_load_option:
                 view_ip_option = for_a
                 if for_a == 'default':
-                    view_ip_option = get_lang(conn, 'default')
+                    view_ip_option = await get_lang('default')
 
                 if d_list[46] == for_a:
                     ip_load_select_data = '<option value="' + for_a + '">' + view_ip_option + '</option>' + ip_load_select_data
@@ -125,209 +125,209 @@ async def main_setting_main():
                     ip_load_select_data += '<option value="' + for_a + '">' + view_ip_option + '</option>'
 
             basic_set = '''
-                <h2>''' + get_lang(conn, 'basic_set') + '''</h2>
+                <h2>''' + await get_lang('basic_set') + '''</h2>
                             
-                <span>''' + get_lang(conn, 'wiki_name') + '''</span>
+                <span>''' + await get_lang('wiki_name') + '''</span>
                 <hr class="main_hr">
                 <input name="name" value="''' + html.escape(d_list[0]) + '''">
                 <hr class="main_hr">
 
-                <span><a href="/setting/main/logo">(''' + get_lang(conn, 'wiki_logo') + ''')</a></span>
+                <span><a href="/setting/main/logo">(''' + await get_lang('wiki_logo') + ''')</a></span>
                 <hr class="main_hr">
 
-                <span>''' + get_lang(conn, 'main_page') + '''</span>
+                <span>''' + await get_lang('main_page') + '''</span>
                 <hr class="main_hr">
                 <input name="frontpage" value="''' + html.escape(d_list[2]) + '''">
                 <hr class="main_hr">
 
-                <span>''' + get_lang(conn, 'tls_method') + '''</span>
+                <span>''' + await get_lang('tls_method') + '''</span>
                 <hr class="main_hr">
                 <select name="http_select">''' + tls_select + '''</select>
                 <hr class="main_hr">
 
-                <span>''' + get_lang(conn, 'domain') + '''</span> (EX : 2du.pythonanywhere.com) (''' + get_lang(conn, 'off') + ''' : ''' + get_lang(conn, 'empty') + ''')
+                <span>''' + await get_lang('domain') + '''</span> (EX : 2du.pythonanywhere.com) (''' + await get_lang('off') + ''' : ''' + await get_lang('empty') + ''')
                 <hr class="main_hr">
                 <input name="domain" value="''' + html.escape(d_list[22]) + '''">
                 <hr class="main_hr">
 
-                <span>''' + get_lang(conn, 'wiki_host') + '''</span>
+                <span>''' + await get_lang('wiki_host') + '''</span>
                 <hr class="main_hr">
                 <input name="host" value="''' + html.escape(d_list[16]) + '''">
                 <hr class="main_hr">
 
-                <span>''' + get_lang(conn, 'wiki_port') + '''</span>
+                <span>''' + await get_lang('wiki_port') + '''</span>
                 <hr class="main_hr">
                 <input name="port" value="''' + html.escape(d_list[10]) + '''">
                 <hr class="main_hr">
 
-                <span>''' + get_lang(conn, 'wiki_secret_key') + '''</span>
+                <span>''' + await get_lang('wiki_secret_key') + '''</span>
                 <hr class="main_hr">
                 <input type="password" name="key" value="''' + html.escape(d_list[11]) + '''">
                 <hr class="main_hr">
                 
-                <label><input type="checkbox" name="wiki_access_password_need" ''' + check_box_div[8] + '''> ''' + get_lang(conn, 'set_wiki_access_password_need') + ''' (''' + get_lang(conn, 'restart_required') + ''')</label>
+                <label><input type="checkbox" name="wiki_access_password_need" ''' + check_box_div[8] + '''> ''' + await get_lang('set_wiki_access_password_need') + ''' (''' + await get_lang('restart_required') + ''')</label>
                 <hr class="main_hr">
                 
-                <span>''' + get_lang(conn, 'set_wiki_access_password') + '''</span> (''' + get_lang(conn, 'restart_required') + ''')
+                <span>''' + await get_lang('set_wiki_access_password') + '''</span> (''' + await get_lang('restart_required') + ''')
                 <hr class="main_hr">
                 <input type="password" name="wiki_access_password" value="''' + html.escape(d_list[32]) + '''">
                 <hr class="main_hr">
 
-                <span>''' + get_lang(conn, 'wiki_load_ip_select') + '''</span> (''' + get_lang(conn, 'restart_required') + ''')
+                <span>''' + await get_lang('wiki_load_ip_select') + '''</span> (''' + await get_lang('restart_required') + ''')
                 <hr class="main_hr">
                 <select name="load_ip_select">''' + ip_load_select_data + '''</select>
                 
-                <h3>''' + get_lang(conn, 'authority_use_list') + '''</h3>
+                <h3>''' + await get_lang('authority_use_list') + '''</h3>
                 
-                <label><input type="checkbox" name="auth_history_off" ''' + check_box_div[14] + '''> ''' + get_lang(conn, 'authority_use_list_off') + '''</label>
+                <label><input type="checkbox" name="auth_history_off" ''' + check_box_div[14] + '''> ''' + await get_lang('authority_use_list_off') + '''</label>
                 <hr class="main_hr">
                 
-                <span>''' + get_lang(conn, 'authority_use_list_expiration_date') + '''</span> (''' + get_lang(conn, 'day') + ''') (''' + get_lang(conn, 'off') + ''' : ''' + get_lang(conn, 'empty') + ''')
+                <span>''' + await get_lang('authority_use_list_expiration_date') + '''</span> (''' + await get_lang('day') + ''') (''' + await get_lang('off') + ''' : ''' + await get_lang('empty') + ''')
                 <hr class="main_hr">
                 <input name="auth_history_expiration_date" value="''' + html.escape(d_list[43]) + '''">
                 <hr class="main_hr">
 
-                <h3>''' + get_lang(conn, 'communication_set') + '''</h3>
+                <h3>''' + await get_lang('communication_set') + '''</h3>
                 
-                <label><input type="checkbox" name="enable_comment" ''' + check_box_div[5] + '''> ''' + get_lang(conn, 'enable_comment_function') + '''</label>
+                <label><input type="checkbox" name="enable_comment" ''' + check_box_div[5] + '''> ''' + await get_lang('enable_comment_function') + '''</label>
                 <hr class="main_hr">
 
-                <label><input type="checkbox" name="user_name_level" ''' + check_box_div[15] + '''> ''' + get_lang(conn, 'display_level_in_user_name') + '''</label>
+                <label><input type="checkbox" name="user_name_level" ''' + check_box_div[15] + '''> ''' + await get_lang('display_level_in_user_name') + '''</label>
                 <hr class="main_hr">
 
-                <label><input type="checkbox" name="not_use_view_count" ''' + check_box_div[16] + '''> ''' + get_lang(conn, 'not_use_view_count') + '''</label>
+                <label><input type="checkbox" name="not_use_view_count" ''' + check_box_div[16] + '''> ''' + await get_lang('not_use_view_count') + '''</label>
                 <hr class="main_hr">
             '''
 
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [get_lang(conn, 'main_setting'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
-                data = render_simple_set(conn, '''
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [await get_lang('main_setting'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
+                data = await render_simple_set('''
                     <form method="post">
                         ''' + basic_set + '''
-                        <h2>''' + get_lang(conn, 'design_set') + '''</h2>
+                        <h2>''' + await get_lang('design_set') + '''</h2>
                         
-                        <span>''' + get_lang(conn, 'wiki_skin') + '''</span>
+                        <span>''' + await get_lang('wiki_skin') + '''</span>
                         <hr class="main_hr">
-                        <select name="skin">''' + load_skin(conn, d_list[5] if d_list[5] != '' else 'ringo') + '''</select>
+                        <select name="skin">''' + await load_skin(d_list[5] if d_list[5] != '' else 'ringo') + '''</select>
 
-                        <h2>''' + get_lang(conn, 'render_set') + '''</h2>
+                        <h2>''' + await get_lang('render_set') + '''</h2>
                         
-                        <label><input type="checkbox" name="namumark_compatible" ''' + check_box_div[10] + '''> ''' + get_lang(conn, 'namumark_fully_compatible_mode') + '''</label>
+                        <label><input type="checkbox" name="namumark_compatible" ''' + check_box_div[10] + '''> ''' + await get_lang('namumark_fully_compatible_mode') + '''</label>
                         <hr class="main_hr">
                         
-                        <label><input type="checkbox" name="link_case_insensitive" ''' + check_box_div[12] + '''> ''' + get_lang(conn, 'link_case_insensitive') + '''</label>
+                        <label><input type="checkbox" name="link_case_insensitive" ''' + check_box_div[12] + '''> ''' + await get_lang('link_case_insensitive') + '''</label>
                         <hr class="main_hr">
 
-                        <h2>''' + get_lang(conn, 'login_set') + '''</h2>
+                        <h2>''' + await get_lang('login_set') + '''</h2>
                         
-                        <label><input type="checkbox" name="reg" ''' + check_box_div[0] + '''> ''' + get_lang(conn, 'no_register') + '''</label>
+                        <label><input type="checkbox" name="reg" ''' + check_box_div[0] + '''> ''' + await get_lang('no_register') + '''</label>
                         <hr class="main_hr">
 
-                        <label><input type="checkbox" name="ip_view" ''' + check_box_div[1] + '''> ''' + get_lang(conn, 'hide_ip') + '''</label>
+                        <label><input type="checkbox" name="ip_view" ''' + check_box_div[1] + '''> ''' + await get_lang('hide_ip') + '''</label>
                         <hr class="main_hr">
 
-                        <label><input type="checkbox" name="user_name_view" ''' + check_box_div[11] + '''> ''' + get_lang(conn, 'hide_user_name') + '''</label>
+                        <label><input type="checkbox" name="user_name_view" ''' + check_box_div[11] + '''> ''' + await get_lang('hide_user_name') + '''</label>
                         <hr class="main_hr">
 
-                        <label><input type="checkbox" name="requires_approval" ''' + check_box_div[3] + '''> ''' + get_lang(conn, 'requires_approval') + '''</label>
+                        <label><input type="checkbox" name="requires_approval" ''' + check_box_div[3] + '''> ''' + await get_lang('requires_approval') + '''</label>
                         <hr class="main_hr">
 
-                        <span>''' + get_lang(conn, 'password_min_length') + '''</span> (''' + get_lang(conn, 'off') + ''' : ''' + get_lang(conn, 'empty') + ''')
+                        <span>''' + await get_lang('password_min_length') + '''</span> (''' + await get_lang('off') + ''' : ''' + await get_lang('empty') + ''')
                         <hr class="main_hr">
                         <input name="password_min_length" value="''' + html.escape(d_list[30]) + '''">
                         <hr class="main_hr">
 
-                        <span>''' + get_lang(conn, 'encryption_method') + '''</span>
+                        <span>''' + await get_lang('encryption_method') + '''</span>
                         <hr class="main_hr">
                         <select name="encode">''' + encode_select + '''</select>
 
-                        <h3>''' + get_lang(conn, 'ua') + '''</h3>
+                        <h3>''' + await get_lang('ua') + '''</h3>
                         
-                        <label><input type="checkbox" name="ua_get" ''' + check_box_div[4] + '''> ''' + get_lang(conn, 'ua_get_off') + '''</label>
+                        <label><input type="checkbox" name="ua_get" ''' + check_box_div[4] + '''> ''' + await get_lang('ua_get_off') + '''</label>
                         <hr class="main_hr">
                         
-                        <span>''' + get_lang(conn, 'ua_expiration_date') + '''</span> (''' + get_lang(conn, 'day') + ''') (''' + get_lang(conn, 'off') + ''' : ''' + get_lang(conn, 'empty') + ''')
+                        <span>''' + await get_lang('ua_expiration_date') + '''</span> (''' + await get_lang('day') + ''') (''' + await get_lang('off') + ''' : ''' + await get_lang('empty') + ''')
                         <hr class="main_hr">
                         <input name="ua_expiration_date" value="''' + html.escape(d_list[42]) + '''">
                         <hr class="main_hr">
                         
-                        <h2>''' + get_lang(conn, 'server_set') + '''</h2>
+                        <h2>''' + await get_lang('server_set') + '''</h2>
 
-                        <span>''' + get_lang(conn, 'update_branch') + '''</span>
+                        <span>''' + await get_lang('update_branch') + '''</span>
                         <hr class="main_hr">
                         <select name="update">''' + branch_div + '''</select>
 
                         <span ''' + sqlite_only + '''>
-                            <h3>''' + get_lang(conn, 'backup') + ''' (''' + get_lang(conn, 'sqlite_only') + ''')</h3>
+                            <h3>''' + await get_lang('backup') + ''' (''' + await get_lang('sqlite_only') + ''')</h3>
                             
-                            <span>''' + get_lang(conn, 'backup_warning') + ''' (EX : data_YYYYMMDDHHMMSS.db)</span>
+                            <span>''' + await get_lang('backup_warning') + ''' (EX : data_YYYYMMDDHHMMSS.db)</span>
                             <hr class="main_hr">
                             <hr class="main_hr">
                             
-                            <span>''' + get_lang(conn, 'backup_interval') + '''</span> (''' + get_lang(conn, 'hour') + ''') (''' + get_lang(conn, 'off') + ''' : ''' + get_lang(conn, 'empty') + ''')
+                            <span>''' + await get_lang('backup_interval') + '''</span> (''' + await get_lang('hour') + ''') (''' + await get_lang('off') + ''' : ''' + await get_lang('empty') + ''')
                             <hr class="main_hr">
                             <input name="back_up" value="''' + html.escape(d_list[9]) + '''">
                             <hr class="main_hr">
                             
-                            <span>''' + get_lang(conn, 'backup_where') + '''</span> (''' + get_lang(conn, 'default') + ''' : ''' + get_lang(conn, 'empty') + ''') (''' + get_lang(conn, 'example') + ''' : ./data/backup.db)
+                            <span>''' + await get_lang('backup_where') + '''</span> (''' + await get_lang('default') + ''' : ''' + await get_lang('empty') + ''') (''' + await get_lang('example') + ''' : ./data/backup.db)
                             <hr class="main_hr">
                             <input name="backup_where" value="''' + html.escape(d_list[21]) + '''">
                             <hr class="main_hr">
 
-                            <span>''' + get_lang(conn, 'backup_count') + '''</span> (''' + get_lang(conn, 'default') + ''' : ''' + get_lang(conn, 'empty') + ''')
+                            <span>''' + await get_lang('backup_count') + '''</span> (''' + await get_lang('default') + ''' : ''' + await get_lang('empty') + ''')
                             <hr class="main_hr">
                             <input name="backup_count" value="''' + html.escape(d_list[41]) + '''">
                             <hr class="main_hr">
                         </span>
 
-                        <h2>''' + get_lang(conn, 'edit_set') + '''</h2>
+                        <h2>''' + await get_lang('edit_set') + '''</h2>
                         
-                        <span>''' + get_lang(conn, 'slow_edit') + '''</span> (''' + get_lang(conn, 'second') + ''') (''' + get_lang(conn, 'off') + ''' : ''' + get_lang(conn, 'empty') + ''')
+                        <span>''' + await get_lang('slow_edit') + '''</span> (''' + await get_lang('second') + ''') (''' + await get_lang('off') + ''' : ''' + await get_lang('empty') + ''')
                         <hr class="main_hr">
                         <input name="slow_edit" value="''' + html.escape(d_list[19]) + '''">
                         <hr class="main_hr">
                         
-                        <label><input type="checkbox" name="edit_bottom_compulsion" ''' + check_box_div[7] + '''> ''' + get_lang(conn, 'edit_bottom_compulsion') + '''</label>
+                        <label><input type="checkbox" name="edit_bottom_compulsion" ''' + check_box_div[7] + '''> ''' + await get_lang('edit_bottom_compulsion') + '''</label>
                         <hr class="main_hr">
                         
-                        <span>''' + get_lang(conn, 'title_max_length') + '''</span> (''' + get_lang(conn, 'off') + ''' : ''' + get_lang(conn, 'empty') + ''')
+                        <span>''' + await get_lang('title_max_length') + '''</span> (''' + await get_lang('off') + ''' : ''' + await get_lang('empty') + ''')
                         <hr class="main_hr">
                         <input name="title_max_length" value="''' + html.escape(d_list[28]) + '''">
                         <hr class="main_hr">
                         
-                        <span>''' + get_lang(conn, 'title_topic_max_length') + '''</span> (''' + get_lang(conn, 'off') + ''' : ''' + get_lang(conn, 'empty') + ''')
+                        <span>''' + await get_lang('title_topic_max_length') + '''</span> (''' + await get_lang('off') + ''' : ''' + await get_lang('empty') + ''')
                         <hr class="main_hr">
                         <input name="title_topic_max_length" value="''' + html.escape(d_list[29]) + '''">
                         <hr class="main_hr">
                         
-                        <span>''' + get_lang(conn, 'max_file_size') + ''' (MB)</span>
+                        <span>''' + await get_lang('max_file_size') + ''' (MB)</span>
                         <hr class="main_hr">
                         <input name="upload" value="''' + html.escape(d_list[4]) + '''">
                         <hr class="main_hr">
                         
-                        <label><input type="checkbox" name="history_recording_off" ''' + check_box_div[9] + '''> ''' + get_lang(conn, 'set_history_recording_off') + '''</label>
+                        <label><input type="checkbox" name="history_recording_off" ''' + check_box_div[9] + '''> ''' + await get_lang('set_history_recording_off') + '''</label>
                         <hr class="main_hr">
 
-                        <label><input type="checkbox" name="move_with_redirect" ''' + check_box_div[13] + '''> ''' + get_lang(conn, 'move_with_redirect') + ''' (''' + get_lang(conn, 'not_working') + ''')</label>
+                        <label><input type="checkbox" name="move_with_redirect" ''' + check_box_div[13] + '''> ''' + await get_lang('move_with_redirect') + ''' (''' + await get_lang('not_working') + ''')</label>
                         <hr class="main_hr">
 
-                        <span>''' + get_lang(conn, 'slow_thread') + '''</span> (''' + get_lang(conn, 'second') + ''') (''' + get_lang(conn, 'off') + ''' : ''' + get_lang(conn, 'empty') + ''')
+                        <span>''' + await get_lang('slow_thread') + '''</span> (''' + await get_lang('second') + ''') (''' + await get_lang('off') + ''' : ''' + await get_lang('empty') + ''')
                         <hr class="main_hr">
                         <input name="slow_thread" value="''' + html.escape(d_list[38]) + '''">
                         <hr class="main_hr">
 
-                        <span>''' + get_lang(conn, 'edit_timeout') + '''</span> (''' + get_lang(conn, 'second') + ''') (''' + get_lang(conn, 'off') + ''' : ''' + get_lang(conn, 'empty') + ''') (''' + get_lang(conn, 'linux_only') + ''')
+                        <span>''' + await get_lang('edit_timeout') + '''</span> (''' + await get_lang('second') + ''') (''' + await get_lang('off') + ''' : ''' + await get_lang('empty') + ''') (''' + await get_lang('linux_only') + ''')
                         <hr class="main_hr">
                         <input name="edit_timeout" value="''' + html.escape(d_list[39]) + '''">
                         <hr class="main_hr">
 
-                        <span>''' + get_lang(conn, 'document_content_max_length') + '''</span> (''' + get_lang(conn, 'off') + ''' : ''' + get_lang(conn, 'empty') + ''')
+                        <span>''' + await get_lang('document_content_max_length') + '''</span> (''' + await get_lang('off') + ''' : ''' + await get_lang('empty') + ''')
                         <hr class="main_hr">
                         <input name="document_content_max_length" value="''' + html.escape(d_list[40]) + '''">
                         <hr class="main_hr">
 
-                        <button id="opennamu_save_button" type="submit">''' + get_lang(conn, 'save') + '''</button>
+                        <button id="opennamu_save_button" type="submit">''' + await get_lang('save') + '''</button>
                     </form>
                 '''),
-                menu = [['setting', get_lang(conn, 'return')]]
+                menu = [['setting', await get_lang('return')]]
             ))

+ 6 - 6
route/main_setting_main_logo.py

@@ -7,7 +7,7 @@ async def main_setting_main_logo():
         if await acl_check('', 'owner_auth', '', '') == 1:
             return await re_error(conn, 0)
 
-        skin_list = [0] + load_skin(conn, '', 1)
+        skin_list = [0] + await load_skin('', 1)
         i_list = []
         for i in skin_list:
             i_list += [['logo', '' if i == 0 else i]]
@@ -38,19 +38,19 @@ async def main_setting_main_logo():
             end_data = ''
             for i in range(0, len(skin_list)):
                 end_data += '' + \
-                    '<span>' + get_lang(conn, 'wiki_logo') + ' ' + ('(' + skin_list[i] + ')' if skin_list[i] != 0 else '') + ' (HTML)' + \
+                    '<span>' + await get_lang('wiki_logo') + ' ' + ('(' + skin_list[i] + ')' if skin_list[i] != 0 else '') + ' (HTML)' + \
                     '<hr class="main_hr">' + \
                     '<input name="' + (skin_list[i] if skin_list[i] != 0 else 'main_css') + '" value="' + html.escape(d_list[i]) + '">' + \
                     '<hr class="main_hr">' + \
                 ''
 
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [get_lang(conn, 'wiki_logo'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [await get_lang('wiki_logo'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
                 data = '''
                     <form method="post">
                         ''' + end_data + '''
-                        <button id="opennamu_save_button" type="submit">''' + get_lang(conn, 'save') + '''</button>
+                        <button id="opennamu_save_button" type="submit">''' + await get_lang('save') + '''</button>
                     </form>
                 ''',
-                menu = [['setting/main', get_lang(conn, 'return')]]
+                menu = [['setting/main', await get_lang('return')]]
             ))

+ 42 - 42
route/main_setting_phrase.py

@@ -60,121 +60,121 @@ async def main_setting_phrase():
                     curs.execute(db_change('insert into other (name, data, coverage) values (?, ?, "")'), [i, ''])
                     d_list += ['']
 
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [get_lang(conn, 'text_setting'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
-                data = render_simple_set(conn, '''
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [await get_lang('text_setting'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
+                data = await render_simple_set('''
                     <form method="post">
-                        <h2>''' + get_lang(conn, 'register_text') + ''' (HTML)</h2>
+                        <h2>''' + await get_lang('register_text') + ''' (HTML)</h2>
                         <textarea class="opennamu_textarea_100" name="''' + i_list[0] + '''">''' + html.escape(d_list[0]) + '''</textarea>
 
-                        <h2>''' + get_lang(conn, 'non_login_alert') + ''' (HTML)</h2>
+                        <h2>''' + await get_lang('non_login_alert') + ''' (HTML)</h2>
                         <textarea class="opennamu_textarea_100" name="''' + i_list[1] + '''">''' + html.escape(d_list[1]) + '''</textarea>
 
-                        <h2>''' + get_lang(conn, 'copyright_checkbox_text') + ''' (HTML)</h2>
+                        <h2>''' + await get_lang('copyright_checkbox_text') + ''' (HTML)</h2>
                         <textarea class="opennamu_textarea_100" name="''' + i_list[3] + '''">''' + html.escape(d_list[3]) + '''</textarea>
 
-                        <h2>''' + get_lang(conn, 'check_key_text') + ''' (HTML)</h2>
+                        <h2>''' + await get_lang('check_key_text') + ''' (HTML)</h2>
                         <textarea class="opennamu_textarea_100" name="''' + i_list[4] + '''">''' + html.escape(d_list[4]) + '''</textarea>
 
-                        <h2>''' + get_lang(conn, 'email_title') + '''</h2>
+                        <h2>''' + await get_lang('email_title') + '''</h2>
                         <textarea class="opennamu_textarea_100" name="''' + i_list[5] + '''">''' + html.escape(d_list[5]) + '''</textarea>
 
-                        <h2>''' + get_lang(conn, 'email_text') + '''</h2>
+                        <h2>''' + await get_lang('email_text') + '''</h2>
                         <textarea class="opennamu_textarea_100" name="''' + i_list[6] + '''">''' + html.escape(d_list[6]) + '''</textarea>
 
-                        <h2>''' + get_lang(conn, 'email_insert_text') + '''</h2>
+                        <h2>''' + await get_lang('email_insert_text') + '''</h2>
                         <textarea class="opennamu_textarea_100" name="''' + i_list[7] + '''">''' + html.escape(d_list[7]) + '''</textarea>
 
-                        <h2>''' + get_lang(conn, 'password_search_text') + '''</h2>
+                        <h2>''' + await get_lang('password_search_text') + '''</h2>
                         <textarea class="opennamu_textarea_100" name="''' + i_list[8] + '''">''' + html.escape(d_list[8]) + '''</textarea>
 
-                        <h2>''' + get_lang(conn, 'reset_user_text') + '''</h2>
+                        <h2>''' + await get_lang('reset_user_text') + '''</h2>
                         <textarea class="opennamu_textarea_100" name="''' + i_list[9] + '''">''' + html.escape(d_list[9]) + '''</textarea>
 
-                        <h2>''' + get_lang(conn, 'error_401') + '''</h2>
+                        <h2>''' + await get_lang('error_401') + '''</h2>
                         <textarea class="opennamu_textarea_100" name="''' + i_list[10] + '''">''' + html.escape(d_list[10]) + '''</textarea>
 
-                        <h2>''' + get_lang(conn, 'error_404') + '''</h2>
+                        <h2>''' + await get_lang('error_404') + '''</h2>
                         <textarea class="opennamu_textarea_100" name="''' + i_list[11] + '''">''' + html.escape(d_list[11]) + '''</textarea>
 
-                        <h2>''' + get_lang(conn, 'approval_question') + '''</h2>
-                        <sup><a href="/setting/main">''' + get_lang(conn, 'approval_question_visible_only_when_approval_on') + '''</a></sup>
+                        <h2>''' + await get_lang('approval_question') + '''</h2>
+                        <sup><a href="/setting/main">''' + await get_lang('approval_question_visible_only_when_approval_on') + '''</a></sup>
                         <hr class="main_hr">
                         <textarea class="opennamu_textarea_100" name="''' + i_list[12] + '''">''' + html.escape(d_list[12]) + '''</textarea>
 
-                        <h2>''' + get_lang(conn, 'edit_help') + '''</h2>
+                        <h2>''' + await get_lang('edit_help') + '''</h2>
                         <textarea class="opennamu_textarea_100" name="''' + i_list[13] + '''">''' + html.escape(d_list[13]) + '''</textarea>
 
-                        <h2>''' + get_lang(conn, 'upload_help') + ''' (HTML)</h2>
+                        <h2>''' + await get_lang('upload_help') + ''' (HTML)</h2>
                         <textarea class="opennamu_textarea_100" name="''' + i_list[14] + '''">''' + html.escape(d_list[14]) + '''</textarea>
 
-                        <h2>''' + get_lang(conn, 'upload_default') + '''</h2>
+                        <h2>''' + await get_lang('upload_default') + '''</h2>
                         <textarea class="opennamu_textarea_100" name="''' + i_list[15] + '''">''' + html.escape(d_list[15]) + '''</textarea>
 
-                        <h2>''' + get_lang(conn, 'bottom_text') + ''' (HTML)</h2>
+                        <h2>''' + await get_lang('bottom_text') + ''' (HTML)</h2>
                         <textarea class="opennamu_textarea_100" name="''' + i_list[16] + '''">''' + html.escape(d_list[16]) + '''</textarea>
 
-                        <h2>''' + get_lang(conn, 'topic_text') + '''</h2>
+                        <h2>''' + await get_lang('topic_text') + '''</h2>
                         <textarea class="opennamu_textarea_100" name="''' + i_list[17] + '''">''' + html.escape(d_list[17]) + '''</textarea>
                         
-                        <h2>''' + get_lang(conn, 'phrase_user_page_admin') + ''' (HTML)</h2>
+                        <h2>''' + await get_lang('phrase_user_page_admin') + ''' (HTML)</h2>
                         <textarea class="opennamu_textarea_100" name="''' + i_list[18] + '''">''' + html.escape(d_list[18]) + '''</textarea>
                         
-                        <h2>''' + get_lang(conn, 'phrase_user_page_owner') + ''' (HTML)</h2>
+                        <h2>''' + await get_lang('phrase_user_page_owner') + ''' (HTML)</h2>
                         <textarea class="opennamu_textarea_100" name="''' + i_list[19] + '''">''' + html.escape(d_list[19]) + '''</textarea>
 
-                        <h2>''' + get_lang(conn, 'phrase_old_page_warning') + ''' (''' + get_lang(conn, 'beta') + ''') (HTML)</h2>
+                        <h2>''' + await get_lang('phrase_old_page_warning') + ''' (''' + await get_lang('beta') + ''') (HTML)</h2>
                         <textarea class="opennamu_textarea_100" name="''' + i_list[20] + '''">''' + html.escape(d_list[20]) + '''</textarea>
                         
-                        <h2>''' + get_lang(conn, 'bbs_help') + '''</h2>
+                        <h2>''' + await get_lang('bbs_help') + '''</h2>
                         <textarea class="opennamu_textarea_100" name="''' + i_list[21] + '''">''' + html.escape(d_list[21]) + '''</textarea>
 
-                        <h2>''' + get_lang(conn, 'bbs_comment_help') + '''</h2>
+                        <h2>''' + await get_lang('bbs_comment_help') + '''</h2>
                         <textarea class="opennamu_textarea_100" name="''' + i_list[22] + '''">''' + html.escape(d_list[22]) + '''</textarea>
 
-                        <h2>''' + get_lang(conn, 'outdated_doc_warning') + '''  (HTML)</h2>
-                        <span>''' + get_lang(conn, 'period') + '''</span> (''' + get_lang(conn, 'day') + ''') (''' + get_lang(conn, 'off') + ''' : ''' + get_lang(conn, 'empty') + ''')
+                        <h2>''' + await get_lang('outdated_doc_warning') + '''  (HTML)</h2>
+                        <span>''' + await get_lang('period') + '''</span> (''' + await get_lang('day') + ''') (''' + await get_lang('off') + ''' : ''' + await get_lang('empty') + ''')
                         <hr class="main_hr">
                         <input name="''' + i_list[24] + '''" value="''' + html.escape(d_list[24]) + '''">
                         <hr class="main_hr">
-                        <textarea class="opennamu_textarea_100" name="''' + i_list[23] + '''" placeholder="''' + get_lang(conn, 'old_page_warning') + '''">''' + html.escape(d_list[23]) + '''</textarea>
+                        <textarea class="opennamu_textarea_100" name="''' + i_list[23] + '''" placeholder="''' + await get_lang('old_page_warning') + '''">''' + html.escape(d_list[23]) + '''</textarea>
 
-                        <h2>''' + get_lang(conn, 'category') + '''</h2>
+                        <h2>''' + await get_lang('category') + '''</h2>
                         <input name="''' + i_list[25] + '''" value="''' + html.escape(d_list[25]) + '''">
 
-                        <h2>''' + get_lang(conn, 'redirect') + '''</h2>
+                        <h2>''' + await get_lang('redirect') + '''</h2>
                         <span>EX : {0} ➤ {1}</span>
                         <hr class="main_hr">
                         <input name="''' + i_list[26] + '''" value="''' + html.escape(d_list[26]) + '''">
 
-                        <h2>''' + get_lang(conn, 'template_var') + '''</h2>
-                        <h3>''' + get_lang(conn, 'template_var_1') + ''' (''' + get_lang(conn, 'default') + ''' : ''' + get_lang(conn, 'top') + ''') (HTML)</h3>
+                        <h2>''' + await get_lang('template_var') + '''</h2>
+                        <h3>''' + await get_lang('template_var_1') + ''' (''' + await get_lang('default') + ''' : ''' + await get_lang('top') + ''') (HTML)</h3>
                         <textarea class="opennamu_textarea_100" name="''' + i_list[27] + '''">''' + html.escape(d_list[27]) + '''</textarea>
 
-                        <h3>''' + get_lang(conn, 'template_var_2') + ''' (''' + get_lang(conn, 'default') + ''' : ''' + get_lang(conn, 'sidebar') + ''') (HTML)</h3>
+                        <h3>''' + await get_lang('template_var_2') + ''' (''' + await get_lang('default') + ''' : ''' + await get_lang('sidebar') + ''') (HTML)</h3>
                         <textarea class="opennamu_textarea_100" name="''' + i_list[28] + '''">''' + html.escape(d_list[28]) + '''</textarea>
 
-                        <h3>''' + get_lang(conn, 'template_var_3') + ''' (''' + get_lang(conn, 'default') + ''' : ''' + get_lang(conn, 'bottom') + ''') (HTML)</h3>
+                        <h3>''' + await get_lang('template_var_3') + ''' (''' + await get_lang('default') + ''' : ''' + await get_lang('bottom') + ''') (HTML)</h3>
                         <textarea class="opennamu_textarea_100" name="''' + i_list[29] + '''">''' + html.escape(d_list[29]) + '''</textarea>
 
-                        <h2>''' + get_lang(conn, 'edit_bottom_text') + ''' (HTML)</h2>
+                        <h2>''' + await get_lang('edit_bottom_text') + ''' (HTML)</h2>
                         <textarea class="opennamu_textarea_100" name="''' + i_list[2] + '''">''' + html.escape(d_list[2]) + '''</textarea>
 
-                        <h3>''' + get_lang(conn, 'edit_only_bottom_text') + ''' (HTML)</h3>
+                        <h3>''' + await get_lang('edit_only_bottom_text') + ''' (HTML)</h3>
                         <textarea class="opennamu_textarea_100" name="''' + i_list[30] + '''">''' + html.escape(d_list[30]) + '''</textarea>
 
-                        <h3>''' + get_lang(conn, 'move_bottom_text') + ''' (HTML)</h3>
+                        <h3>''' + await get_lang('move_bottom_text') + ''' (HTML)</h3>
                         <textarea class="opennamu_textarea_100" name="''' + i_list[31] + '''">''' + html.escape(d_list[31]) + '''</textarea>
 
-                        <h3>''' + get_lang(conn, 'delete_bottom_text') + ''' (HTML)</h3>
+                        <h3>''' + await get_lang('delete_bottom_text') + ''' (HTML)</h3>
                         <textarea class="opennamu_textarea_100" name="''' + i_list[32] + '''">''' + html.escape(d_list[32]) + '''</textarea>
 
-                        <h3>''' + get_lang(conn, 'revert_bottom_text') + ''' (HTML)</h3>
+                        <h3>''' + await get_lang('revert_bottom_text') + ''' (HTML)</h3>
                         <textarea class="opennamu_textarea_100" name="''' + i_list[33] + '''">''' + html.escape(d_list[33]) + '''</textarea>
 
                         <hr class="main_hr">
-                        <button id="opennamu_save_button" type="submit">''' + get_lang(conn, 'save') + '''</button>
+                        <button id="opennamu_save_button" type="submit">''' + await get_lang('save') + '''</button>
                     </form>
                 '''),
-                menu = [['setting', get_lang(conn, 'return')]]
+                menu = [['setting', await get_lang('return')]]
             ))

+ 6 - 6
route/main_setting_robot.py

@@ -36,18 +36,18 @@ async def main_setting_robot():
 
             return redirect(conn, '/setting/robot')
         else:
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = ['robots.txt', await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = ['robots.txt', await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
                 data = '''
-                    <a href="/robots.txt">(''' + get_lang(conn, 'view') + ''')</a>
+                    <a href="/robots.txt">(''' + await get_lang('view') + ''')</a>
                     <hr class="main_hr">
                     <form method="post">
                         <textarea class="opennamu_textarea_500" name="content">''' + html.escape(data) + '''</textarea>
                         <hr class="main_hr">
-                        <label><input type="checkbox" name="default" ''' + default_data + '''> ''' + get_lang(conn, 'default') + '''</label>
+                        <label><input type="checkbox" name="default" ''' + default_data + '''> ''' + await get_lang('default') + '''</label>
                         <hr class="main_hr">
-                        <button id="opennamu_save_button" type="submit">''' + get_lang(conn, 'save') + '''</button>
+                        <button id="opennamu_save_button" type="submit">''' + await get_lang('save') + '''</button>
                     </form>
                 ''',
-                menu = [['setting', get_lang(conn, 'return')]]
+                menu = [['setting', await get_lang('return')]]
             ))

+ 4 - 4
route/main_setting_sitemap.py

@@ -94,12 +94,12 @@ async def main_setting_sitemap(do_type = 0):
             else:
                 return ''
         else:
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [get_lang(conn, 'sitemap_manual_create'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [await get_lang('sitemap_manual_create'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
                 data = '''
                     <form method="post">
-                        <button id="opennamu_save_button" type="submit">''' + get_lang(conn, 'create') + '''</button>
+                        <button id="opennamu_save_button" type="submit">''' + await get_lang('create') + '''</button>
                     </form>
                 ''',
-                menu = [['setting/sitemap_set', get_lang(conn, 'return')]]
+                menu = [['setting/sitemap_set', await get_lang('return')]]
             ))

+ 11 - 11
route/main_setting_sitemap_set.py

@@ -48,7 +48,7 @@ async def main_setting_sitemap_set():
 
             sitemap_list = ''
             if os.path.exists('sitemap.xml'):
-                sitemap_list += '<a href="/sitemap.xml">(' + get_lang(conn, 'view') + ')</a>'
+                sitemap_list += '<a href="/sitemap.xml">(' + await get_lang('view') + ')</a>'
 
                 for_a = 0
                 while os.path.exists('sitemap_' + str(for_a) + '.xml'):
@@ -56,32 +56,32 @@ async def main_setting_sitemap_set():
 
                     for_a += 1
 
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [get_lang(conn, 'sitemap_management'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [await get_lang('sitemap_management'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
                 data = '''
                     ''' + sitemap_list + '''
                     <hr class="main_hr">
                     <form method="post">
-                        <a href="/setting/sitemap">(''' + get_lang(conn, 'sitemap_manual_create') + ''')</a>
+                        <a href="/setting/sitemap">(''' + await get_lang('sitemap_manual_create') + ''')</a>
                         <hr class="main_hr">
 
-                        <label><input type="checkbox" ''' + check_box_div[4] + ''' name="sitemap_auto_make"> ''' + get_lang(conn, 'sitemap_auto_make') + '''</label>
+                        <label><input type="checkbox" ''' + check_box_div[4] + ''' name="sitemap_auto_make"> ''' + await get_lang('sitemap_auto_make') + '''</label>
                         <hr class="main_hr">
 
-                        <label><input type="checkbox" ''' + check_box_div[0] + ''' name="sitemap_auto_exclude_domain"> ''' + get_lang(conn, 'stiemap_exclude_domain') + '''</label>
+                        <label><input type="checkbox" ''' + check_box_div[0] + ''' name="sitemap_auto_exclude_domain"> ''' + await get_lang('stiemap_exclude_domain') + '''</label>
                         <hr class="main_hr">
 
-                        <label><input type="checkbox" ''' + check_box_div[1] + ''' name="sitemap_auto_exclude_user_page"> ''' + get_lang(conn, 'stiemap_exclude_user_page') + '''</label>
+                        <label><input type="checkbox" ''' + check_box_div[1] + ''' name="sitemap_auto_exclude_user_page"> ''' + await get_lang('stiemap_exclude_user_page') + '''</label>
                         <hr class="main_hr">
 
-                        <label><input type="checkbox" ''' + check_box_div[2] + ''' name="sitemap_auto_exclude_file_page"> ''' + get_lang(conn, 'stiemap_exclude_file_page') + '''</label>
+                        <label><input type="checkbox" ''' + check_box_div[2] + ''' name="sitemap_auto_exclude_file_page"> ''' + await get_lang('stiemap_exclude_file_page') + '''</label>
                         <hr class="main_hr">
 
-                        <label><input type="checkbox" ''' + check_box_div[3] + ''' name="sitemap_auto_exclude_category_page"> ''' + get_lang(conn, 'stiemap_exclude_category_page') + '''</label>
+                        <label><input type="checkbox" ''' + check_box_div[3] + ''' name="sitemap_auto_exclude_category_page"> ''' + await get_lang('stiemap_exclude_category_page') + '''</label>
                         <hr class="main_hr">
 
-                        <button id="opennamu_save_button" type="submit">''' + get_lang(conn, 'save') + '''</button>
+                        <button id="opennamu_save_button" type="submit">''' + await get_lang('save') + '''</button>
                     </form>
                 ''',
-                menu = [['setting', get_lang(conn, 'return')]]
+                menu = [['setting', await get_lang('return')]]
             ))

+ 32 - 32
route/main_setting_skin_set.py

@@ -9,7 +9,7 @@ async def main_setting_skin_set():
         if await acl_check('', 'owner_auth', '', '') == 1:
             return await re_error(conn, 0)
             
-        set_list = user_setting_skin_set_main_set_list(conn)
+        set_list = await user_setting_skin_set_main_set_list()
 
         if flask.request.method == 'POST':
             for for_b in set_list:
@@ -39,123 +39,123 @@ async def main_setting_skin_set():
 
             set_data_main = { for_b : '' for for_b in set_list }
 
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [get_lang(conn, 'main_skin_set_default'), await wiki_set(), await wiki_custom(conn), wiki_css(['(' + get_lang(conn, 'beta') + ')', 0])],
-                data = render_simple_set(conn, '''
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [await get_lang('main_skin_set_default'), await wiki_set(), await wiki_custom(), wiki_css(['(' + await get_lang('beta') + ')', 0])],
+                data = await render_simple_set('''
                     <form method="post">
-                        <h2>''' + get_lang(conn, "render") + '''</h2>
-                        <h3>''' + get_lang(conn, "strike") + '''</h3>
+                        <h2>''' + await get_lang("render") + '''</h2>
+                        <h3>''' + await get_lang("strike") + '''</h3>
                         ''' + set_data_main["main_css_strike"] + '''
                         <select name="main_css_strike">
                             ''' + set_data["main_css_strike"] + '''
                         </select>
-                        <h3>''' + get_lang(conn, "bold") + '''</h3>
+                        <h3>''' + await get_lang("bold") + '''</h3>
                         ''' + set_data_main["main_css_bold"] + '''
                         <select name="main_css_bold">
                             ''' + set_data["main_css_bold"] + '''
                         </select>
-                        <h3>''' + get_lang(conn, "category") + '''</h3>
-                        <h4>''' + get_lang(conn, "position") + '''</h4>
+                        <h3>''' + await get_lang("category") + '''</h3>
+                        <h4>''' + await get_lang("position") + '''</h4>
                         ''' + set_data_main["main_css_category_set"] + '''
                         <select name="main_css_category_set">
                             ''' + set_data["main_css_category_set"] + '''
                         </select>
-                        <h4>''' + get_lang(conn, "category_change_title") + '''</h4>
+                        <h4>''' + await get_lang("category_change_title") + '''</h4>
                         ''' + set_data_main["main_css_category_change_title"] + '''
                         <select name="main_css_category_change_title">
                             ''' + set_data["main_css_category_change_title"] + '''
                         </select>
-                        <h3>''' + get_lang(conn, "footnote") + ''' (''' + get_lang(conn, 'beta') + ''')</h3>
-                        <h4>''' + get_lang(conn, "footnote_render") + '''</h4>
+                        <h3>''' + await get_lang("footnote") + ''' (''' + await get_lang('beta') + ''')</h3>
+                        <h4>''' + await get_lang("footnote_render") + '''</h4>
                         ''' + set_data_main["main_css_footnote_set"] + '''
                         <select name="main_css_footnote_set">
                             ''' + set_data["main_css_footnote_set"] + '''
                         </select>
-                        <h4>''' + get_lang(conn, "footnote_number") + '''</h4>
+                        <h4>''' + await get_lang("footnote_number") + '''</h4>
                         ''' + set_data_main["main_css_footnote_number"] + '''
                         <select name="main_css_footnote_number">
                             ''' + set_data["main_css_footnote_number"] + '''
                         </select>
-                        <h4>''' + get_lang(conn, "footnote_real_num_view") + '''</h4>
+                        <h4>''' + await get_lang("footnote_real_num_view") + '''</h4>
                         ''' + set_data_main["main_css_view_real_footnote_num"] + '''
                         <select name="main_css_view_real_footnote_num">
                             ''' + set_data["main_css_view_real_footnote_num"] + '''
                         </select>
-                        <h3>''' + get_lang(conn, "include_link") + '''</h3>
+                        <h3>''' + await get_lang("include_link") + '''</h3>
                         ''' + set_data_main["main_css_include_link"] + '''
                         <select name="main_css_include_link">
                             ''' + set_data["main_css_include_link"] + '''
                         </select>
-                        <h3>''' + get_lang(conn, "image") + ''' (''' + get_lang(conn, 'beta') + ''')</h3>
+                        <h3>''' + await get_lang("image") + ''' (''' + await get_lang('beta') + ''')</h3>
                         ''' + set_data_main["main_css_image_set"] + '''
                         <select name="main_css_image_set">
                             ''' + set_data["main_css_image_set"] + '''
                         </select>
-                        <h3>''' + get_lang(conn, "toc") + '''</h3>
+                        <h3>''' + await get_lang("toc") + '''</h3>
                         ''' + set_data_main["main_css_toc_set"] + '''
                         <select name="main_css_toc_set">
                             ''' + set_data["main_css_toc_set"] + '''
                         </select>
-                        <h3>''' + get_lang(conn, "exter_link") + '''</h3>
+                        <h3>''' + await get_lang("exter_link") + '''</h3>
                         ''' + set_data_main["main_css_exter_link"] + '''
                         <select name="main_css_exter_link">
                             ''' + set_data["main_css_exter_link"] + '''
                         </select>
-                        <h3>''' + get_lang(conn, "link_delimiter") + '''</h3>
+                        <h3>''' + await get_lang("link_delimiter") + '''</h3>
                         ''' + set_data_main["main_css_link_delimiter"] + '''
                         <select name="main_css_link_delimiter">
                             ''' + set_data["main_css_link_delimiter"] + '''
                         </select>
-                        <h3>''' + get_lang(conn, "force_darkmode") + '''</h3>
+                        <h3>''' + await get_lang("force_darkmode") + '''</h3>
                         ''' + set_data_main["main_css_darkmode"] + '''
                         <select name="main_css_darkmode">
                             ''' + set_data["main_css_darkmode"] + '''
                         </select>
-                        <h3>''' + get_lang(conn, "table") + '''</h3>
-                        <h4>''' + get_lang(conn, "table_scroll") + '''</h4>
+                        <h3>''' + await get_lang("table") + '''</h3>
+                        <h4>''' + await get_lang("table_scroll") + '''</h4>
                         ''' + set_data_main["main_css_table_scroll"] + '''
                         <select name="main_css_table_scroll">
                             ''' + set_data["main_css_table_scroll"] + '''
                         </select>
-                        <h4>''' + get_lang(conn, "table_transparent") + '''</h4>
+                        <h4>''' + await get_lang("table_transparent") + '''</h4>
                         ''' + set_data_main["main_css_table_transparent"] + '''
                         <select name="main_css_table_transparent">
                             ''' + set_data["main_css_table_transparent"] + '''
                         </select>
-                        <h3>''' + get_lang(conn, "list_view_change") + '''</h3>
+                        <h3>''' + await get_lang("list_view_change") + '''</h3>
                         ''' + set_data_main["main_css_list_view_change"] + '''
                         <select name="main_css_list_view_change">
                             ''' + set_data["main_css_list_view_change"] + '''
                         </select>
-                        <h3>''' + get_lang(conn, "view_joke") + '''</h3>
+                        <h3>''' + await get_lang("view_joke") + '''</h3>
                         ''' + set_data_main["main_css_view_joke"] + '''
                         <select name="main_css_view_joke">
                             ''' + set_data["main_css_view_joke"] + '''
                         </select>
-                        <h3>''' + get_lang(conn, "math_scroll") + '''</h3>
+                        <h3>''' + await get_lang("math_scroll") + '''</h3>
                         ''' + set_data_main["main_css_math_scroll"] + '''
                         <select name="main_css_math_scroll">
                             ''' + set_data["main_css_math_scroll"] + '''
                         </select>
-                        <h3>''' + get_lang(conn, "view_history") + '''</h3>
+                        <h3>''' + await get_lang("view_history") + '''</h3>
                         ''' + set_data_main["main_css_view_history"] + '''
                         <select name="main_css_view_history">
                             ''' + set_data["main_css_view_history"] + '''
                         </select>
-                        <h3>''' + get_lang(conn, "font_size") + '''</h3>
+                        <h3>''' + await get_lang("font_size") + '''</h3>
                         ''' + set_data_main["main_css_font_size"] + '''
                         <select name="main_css_font_size">
                             ''' + set_data["main_css_font_size"] + '''
                         </select>
-                        <h2>''' + get_lang(conn, "edit") + '''</h2>
-                        <h3>''' + get_lang(conn, "monaco_editor") + '''</h3>
+                        <h2>''' + await get_lang("edit") + '''</h2>
+                        <h3>''' + await get_lang("monaco_editor") + '''</h3>
                         ''' + set_data_main["main_css_monaco"] + '''
                         <select name="main_css_monaco">
                             ''' + set_data["main_css_monaco"] + '''
                         </select>
                         <hr class="main_hr">
-                        <button type="submit">''' + get_lang(conn, 'save') + '''</button>
+                        <button type="submit">''' + await get_lang('save') + '''</button>
                     </form>
                 '''),
-                menu = [['setting', get_lang(conn, 'return')]]
+                menu = [['setting', await get_lang('return')]]
             ))

+ 6 - 6
route/main_setting_top_menu.py

@@ -22,8 +22,8 @@ async def main_setting_top_menu():
             db_data = curs.fetchall()
             db_data = db_data[0][0] if db_data else ''
             
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [get_lang(conn, 'top_menu_setting'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [await get_lang('top_menu_setting'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
                 data = '''
                     <span>
                         EX)
@@ -37,13 +37,13 @@ async def main_setting_top_menu():
                         /w/FrontPage
                     </span>
                     <hr class="main_hr">
-                    ''' + get_lang(conn, 'not_support_skin_warning') + '''
+                    ''' + await get_lang('not_support_skin_warning') + '''
                     <hr class="main_hr">
                     <form method="post">
-                        <textarea class="opennamu_textarea_500" placeholder="''' + get_lang(conn, 'enter_top_menu_setting') + '''" name="content" id="content">''' + html.escape(db_data) + '''</textarea>
+                        <textarea class="opennamu_textarea_500" placeholder="''' + await get_lang('enter_top_menu_setting') + '''" name="content" id="content">''' + html.escape(db_data) + '''</textarea>
                         <hr class="main_hr">
-                        <button id="opennamu_save_button" type="submit">''' + get_lang(conn, 'save') + '''</button>
+                        <button id="opennamu_save_button" type="submit">''' + await get_lang('save') + '''</button>
                     </form>
                 ''',
-                menu = [['setting', get_lang(conn, 'return')]]
+                menu = [['setting', await get_lang('return')]]
             ))

+ 5 - 5
route/main_sys_restart.py

@@ -45,14 +45,14 @@ async def main_sys_restart(golang_process):
                         print('Golang process not terminated properly.')
 
             threading.Thread(target = main_sys_restart_do).start()
-            return flask.Response(get_lang(conn, "warning_restart"), status = 200)
+            return flask.Response(await get_lang("warning_restart"), status = 200)
         else:
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [get_lang(conn, 'wiki_restart'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [await get_lang('wiki_restart'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
                 data = '''
                     <form method="post">
-                        <button type="submit">''' + get_lang(conn, 'restart') + '''</button>
+                        <button type="submit">''' + await get_lang('restart') + '''</button>
                     </form>
                 ''',
-                menu = [['manager', get_lang(conn, 'return')]]
+                menu = [['manager', await get_lang('return')]]
             ))

+ 4 - 4
route/main_sys_shutdown.py

@@ -12,12 +12,12 @@ async def main_sys_shutdown():
 
             sys.exit()
         else:
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [get_lang(conn, 'wiki_shutdown'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [await get_lang('wiki_shutdown'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
                 data = '''
                     <form method="post">
-                        <button type="submit">''' + get_lang(conn, 'shutdown') + '''</button>
+                        <button type="submit">''' + await get_lang('shutdown') + '''</button>
                     </form>
                 ''',
-                menu = [['manager', get_lang(conn, 'return')]]
+                menu = [['manager', await get_lang('return')]]
             ))

+ 9 - 9
route/main_sys_update.py

@@ -45,7 +45,7 @@ async def main_sys_update(golang_process):
                     linux_exe_chmod()
 
                     threading.Thread(target = main_sys_restart_do).start()
-                    return flask.Response(get_lang(conn, "warning_restart"), status = 200)
+                    return flask.Response(await get_lang("warning_restart"), status = 200)
                 
                 print('Error : update failed')
             elif platform.system() == 'Windows':
@@ -61,27 +61,27 @@ async def main_sys_update(golang_process):
                     os.system('del update.zip')
                     
                     threading.Thread(target = main_sys_restart_do).start()
-                    return flask.Response(get_lang(conn, "warning_restart"), status = 200)
+                    return flask.Response(await get_lang("warning_restart"), status = 200)
             
             print('Error : update failed')
 
             return await re_error(conn, 34)
         else:
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [get_lang(conn, 'update'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
-                data = get_lang(conn, 'update_warning') + '''
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [await get_lang('update'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
+                data = await get_lang('update_warning') + '''
                     <hr class="main_hr">
                     <ul>
-                        <li id="ver_send_2">''' + get_lang(conn, 'version') + ''' : </li>
-                        <li id="ver_send">''' + get_lang(conn, 'lastest') + ''' : </li>
+                        <li id="ver_send_2">''' + await get_lang('version') + ''' : </li>
+                        <li id="ver_send">''' + await get_lang('lastest') + ''' : </li>
                     </ul>
                     <a href="https://github.com/openNAMU/openNAMU">(Beta)</a> <a href="https://github.com/openNAMU/openNAMU/tree/stable">(Stable)</a>
                     <hr class="main_hr">
                     <form method="post">
-                        <button type="submit">''' + get_lang(conn, 'update') + '''</button>
+                        <button type="submit">''' + await get_lang('update') + '''</button>
                     </form>
                     <!-- JS : opennamu_do_insert_version -->
                 ''',
-                menu = [['manager', get_lang(conn, 'return')]]
+                menu = [['manager', await get_lang('return')]]
             ))
 

+ 58 - 59
route/main_tool_admin.py

@@ -1,62 +1,61 @@
 from .tool.func import *
 
 async def main_tool_admin():
-    with get_db_connect() as conn:
-        return easy_minify(conn, flask.render_template(skin_check(conn),
-            imp = [get_lang(conn, 'admin_tool'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
-            data = render_simple_set(conn, '''
-                <h2>''' + get_lang(conn, 'admin') + '''</h2>
-                <ul>
-                    <li><a href="/manager/2">''' + get_lang(conn, 'document_setting') + '''</a></li>
-                    <li><a href="/acl_multiple">''' + get_lang(conn, 'mutiple_document_setting') + '''</a></li>
-                    <li><a href="/manager/3">''' + get_lang(conn, 'check_user') + '''</a></li>
-                    <li><a href="/auth/ban">''' + get_lang(conn, 'ban') + '''</a></li>
-                    <li><a href="/auth/ban/multiple">''' + get_lang(conn, 'multiple_ban') + '''</a></li>
-                    <li><a href="/manager/5">''' + get_lang(conn, 'authorize') + '''</a></li>
-                    <li><a href="/auth/give">''' + get_lang(conn, 'multiple_authorize') + '''</a></li>
-                    <li><a href="/auth/give_total">''' + get_lang(conn, 'auth_to_auth') + '''</a></li>
-                    <li><a href="/delete_multiple">''' + get_lang(conn, 'many_delete') + '''</a></li>
-                    <li><a href="/app_submit">''' + get_lang(conn, 'application_list') + '''</a></li>
-                </ul>
-                <h2>''' + get_lang(conn, 'owner') + '''</h2>
-                <ul>
-                    <li><a href="/auth/list">''' + get_lang(conn, 'admin_group_list') + '''</a></li>
-                    <li><a href="/register">''' + get_lang(conn, 'add_user') + '''</a></li>
-                    <li><a href="/setting">''' + get_lang(conn, 'setting') + '''</a></li>
-                    <li><a href="/manager/18">''' + get_lang(conn, 'user_fix') + '''</a></li>
-                </ul>
-                <h3>''' + get_lang(conn, 'filter') + '''</h3>
-                <ul>
-                    <li><a href="/filter/edit_filter">''' + get_lang(conn, 'edit_filter_list') + '''</a></li>
-                    <li><a href="/filter/inter_wiki">''' + get_lang(conn, 'interwiki_list') + '''</a></li>
-                    <li><a href="/filter/edit_top">''' + get_lang(conn, 'edit_tool_list') + '''</a></li>
-                    <li><a href="/filter/image_license">''' + get_lang(conn, 'image_license_list') + '''</a></li>
-                    <li><a href="/filter/email_filter">''' + get_lang(conn, 'email_filter_list') + '''</a></li>
-                    <li><a href="/filter/name_filter">''' + get_lang(conn, 'id_filter_list') + '''</a></li>
-                    <li><a href="/filter/file_filter">''' + get_lang(conn, 'file_filter_list') + '''</a></li>
-                    <li><a href="/filter/extension_filter">''' + get_lang(conn, 'extension_filter_list') + '''</a></li>
-                    <li><a href="/filter/document">''' + get_lang(conn, 'document_filter_list') + '''</a></li>
-                    <li><a href="/filter/outer_link">''' + get_lang(conn, 'outer_link_filter_list') + '''</a> (''' + get_lang(conn, 'beta') + ''')
-                    <li><a href="/filter/template">''' + get_lang(conn, 'template_document_list') + '''</a> (''' + get_lang(conn, 'beta') + ''')
-                </ul>
-                <h3>''' + get_lang(conn, 'server') + '''</h2>
-                <ul>
-                    <li><a href="/restart">''' + get_lang(conn, 'wiki_restart') + '''</a></li>
-                    <li><a href="/shutdown">''' + get_lang(conn, 'wiki_shutdown') + '''</a></li>
-                    <li><a href="/update">''' + get_lang(conn, 'update') + '''</a></li>
-                </ul>
-                <h2>''' + get_lang(conn, 'version') + '''</h2>
-                <ul>
-                    <li id="ver_send_2">''' + get_lang(conn, 'version') + ''' : </li>
-                    <li id="ver_send">''' + get_lang(conn, 'lastest') + ''' : </li>
-                </ul>
-                <h3>''' + get_lang(conn, 'skin_info') + '''</h3>
-                <ul>
-                    <li><a href="/api/skin_info?all=true">''' + get_lang(conn, 'skin_info') + '''</a></li>
-                    <div id="ver_send_3"></div>
-                </ul>
-                <!-- JS : opennamu_do_insert_version -->
-                <!-- JS : opennamu_do_insert_version_skin -->
-            '''),
-            menu = [['other', get_lang(conn, 'return')]]
-        ))
+    return easy_minify(flask.render_template(await skin_check(),
+        imp = [await get_lang('admin_tool'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
+        data = await render_simple_set('''
+            <h2>''' + await get_lang('admin') + '''</h2>
+            <ul>
+                <li><a href="/manager/2">''' + await get_lang('document_setting') + '''</a></li>
+                <li><a href="/acl_multiple">''' + await get_lang('mutiple_document_setting') + '''</a></li>
+                <li><a href="/manager/3">''' + await get_lang('check_user') + '''</a></li>
+                <li><a href="/auth/ban">''' + await get_lang('ban') + '''</a></li>
+                <li><a href="/auth/ban/multiple">''' + await get_lang('multiple_ban') + '''</a></li>
+                <li><a href="/manager/5">''' + await get_lang('authorize') + '''</a></li>
+                <li><a href="/auth/give">''' + await get_lang('multiple_authorize') + '''</a></li>
+                <li><a href="/auth/give_total">''' + await get_lang('auth_to_auth') + '''</a></li>
+                <li><a href="/delete_multiple">''' + await get_lang('many_delete') + '''</a></li>
+                <li><a href="/app_submit">''' + await get_lang('application_list') + '''</a></li>
+            </ul>
+            <h2>''' + await get_lang('owner') + '''</h2>
+            <ul>
+                <li><a href="/auth/list">''' + await get_lang('admin_group_list') + '''</a></li>
+                <li><a href="/register">''' + await get_lang('add_user') + '''</a></li>
+                <li><a href="/setting">''' + await get_lang('setting') + '''</a></li>
+                <li><a href="/manager/18">''' + await get_lang('user_fix') + '''</a></li>
+            </ul>
+            <h3>''' + await get_lang('filter') + '''</h3>
+            <ul>
+                <li><a href="/filter/edit_filter">''' + await get_lang('edit_filter_list') + '''</a></li>
+                <li><a href="/filter/inter_wiki">''' + await get_lang('interwiki_list') + '''</a></li>
+                <li><a href="/filter/edit_top">''' + await get_lang('edit_tool_list') + '''</a></li>
+                <li><a href="/filter/image_license">''' + await get_lang('image_license_list') + '''</a></li>
+                <li><a href="/filter/email_filter">''' + await get_lang('email_filter_list') + '''</a></li>
+                <li><a href="/filter/name_filter">''' + await get_lang('id_filter_list') + '''</a></li>
+                <li><a href="/filter/file_filter">''' + await get_lang('file_filter_list') + '''</a></li>
+                <li><a href="/filter/extension_filter">''' + await get_lang('extension_filter_list') + '''</a></li>
+                <li><a href="/filter/document">''' + await get_lang('document_filter_list') + '''</a></li>
+                <li><a href="/filter/outer_link">''' + await get_lang('outer_link_filter_list') + '''</a> (''' + await get_lang('beta') + ''')
+                <li><a href="/filter/template">''' + await get_lang('template_document_list') + '''</a> (''' + await get_lang('beta') + ''')
+            </ul>
+            <h3>''' + await get_lang('server') + '''</h2>
+            <ul>
+                <li><a href="/restart">''' + await get_lang('wiki_restart') + '''</a></li>
+                <li><a href="/shutdown">''' + await get_lang('wiki_shutdown') + '''</a></li>
+                <li><a href="/update">''' + await get_lang('update') + '''</a></li>
+            </ul>
+            <h2>''' + await get_lang('version') + '''</h2>
+            <ul>
+                <li id="ver_send_2">''' + await get_lang('version') + ''' : </li>
+                <li id="ver_send">''' + await get_lang('lastest') + ''' : </li>
+            </ul>
+            <h3>''' + await get_lang('skin_info') + '''</h3>
+            <ul>
+                <li><a href="/api/skin_info?all=true">''' + await get_lang('skin_info') + '''</a></li>
+                <div id="ver_send_3"></div>
+            </ul>
+            <!-- JS : opennamu_do_insert_version -->
+            <!-- JS : opennamu_do_insert_version_skin -->
+        '''),
+        menu = [['other', await get_lang('return')]]
+    ))

+ 52 - 53
route/main_tool_other.py

@@ -1,56 +1,55 @@
 from .tool.func import *
 
 async def main_tool_other():
-    with get_db_connect() as conn:
-        return easy_minify(conn, flask.render_template(skin_check(conn),
-            imp = [get_lang(conn, 'other_tool'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
-            data = render_simple_set(conn, '''
-                <h2>''' + get_lang(conn, 'user_tool') + '''</h2>
-                <ul>
-                    <li><a href="/manager/6">''' + get_lang(conn, 'user_tool') + '''</a></li>
-                </ul>
-                <h2>''' + get_lang(conn, 'list') + '''</h2>
-                <h3>''' + get_lang(conn, 'admin') + '''</h3>
-                <ul>               
-                    <li><a href="/list/admin">''' + get_lang(conn, 'admin_list') + '''</a></li>
-                    <li><a href="/list/admin/auth_use">''' + get_lang(conn, 'authority_use_list') + '''</a></li>
-                </ul>
-                <h3>''' + get_lang(conn, 'discussion') + '''</h3>
-                <ul>
-                    <li><a href="/recent_discuss">''' + get_lang(conn, 'recent_discussion') + '''</a></li>
-                </ul>
-                <h3>''' + get_lang(conn, 'document') + '''</h3>
-                <ul>
-                    <li><a href="/recent_change">''' + get_lang(conn, 'recent_change') + '''</a></li>
-                    <li><a href="/list/document/all">''' + get_lang(conn, 'all_document_list') + '''</a></li>
-                    <li><a href="/list/document/acl">''' + get_lang(conn, 'acl_document_list') + '''</a></li>
-                    <li><a href="/list/document/need">''' + get_lang(conn, 'need_document') + '''</a></li>
-                    <li><a href="/list/document/long">''' + get_lang(conn, 'long_page') + '''</a></li>
-                    <li><a href="/list/document/short">''' + get_lang(conn, 'short_page') + '''</a></li>
-                    <li><a href="/list/document/old">''' + get_lang(conn, 'old_page') + '''</a></li>
-                    <li><a href="/list/document/new">''' + get_lang(conn, 'new_page') + '''</a></li>
-                    <li><a href="/list/document/no_link">''' + get_lang(conn, 'no_link_document_list') + '''</a></li>
-                </ul>
-                <h3>''' + get_lang(conn, 'user') + '''</h3>
-                <ul>
-                    <li><a href="/recent_block">''' + get_lang(conn, 'recent_ban') + '''</a></li>
-                    <li><a href="/list/user">''' + get_lang(conn, 'member_list') + '''</a></li>
-                </ul>
-                <h3>''' + get_lang(conn, 'other') + '''</h3>
-                <ul>
-                    <li><a href="/list/file">''' + get_lang(conn, 'image_file_list') + '''</a></li>
-                    <li><a href="/vote">''' + get_lang(conn, 'vote_list') + '''</a></li>
-                    <li><a href="/bbs/main">''' + get_lang(conn, 'bbs_main') + '''</a></li>
-                </ul>
-                <h2>''' + get_lang(conn, 'other') + '''</h2>
-                <ul>
-                    <li><a href="/upload">''' + get_lang(conn, 'upload') + '''</a></li>
-                    <li><a href="/manager/10">''' + get_lang(conn, 'search') + '''</a></li>
-                </ul>
-                <h2>''' + get_lang(conn, 'admin') + '''</h2>
-                <ul>
-                    <li><a href="/manager/1">''' + get_lang(conn, 'admin_tool') + '''</a></li>
-                </ul>
-            '''),
-            menu = 0
-        ))
+    return easy_minify(flask.render_template(await skin_check(),
+        imp = [await get_lang('other_tool'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
+        data = await render_simple_set('''
+            <h2>''' + await get_lang('user_tool') + '''</h2>
+            <ul>
+                <li><a href="/manager/6">''' + await get_lang('user_tool') + '''</a></li>
+            </ul>
+            <h2>''' + await get_lang('list') + '''</h2>
+            <h3>''' + await get_lang('admin') + '''</h3>
+            <ul>               
+                <li><a href="/list/admin">''' + await get_lang('admin_list') + '''</a></li>
+                <li><a href="/list/admin/auth_use">''' + await get_lang('authority_use_list') + '''</a></li>
+            </ul>
+            <h3>''' + await get_lang('discussion') + '''</h3>
+            <ul>
+                <li><a href="/recent_discuss">''' + await get_lang('recent_discussion') + '''</a></li>
+            </ul>
+            <h3>''' + await get_lang('document') + '''</h3>
+            <ul>
+                <li><a href="/recent_change">''' + await get_lang('recent_change') + '''</a></li>
+                <li><a href="/list/document/all">''' + await get_lang('all_document_list') + '''</a></li>
+                <li><a href="/list/document/acl">''' + await get_lang('acl_document_list') + '''</a></li>
+                <li><a href="/list/document/need">''' + await get_lang('need_document') + '''</a></li>
+                <li><a href="/list/document/long">''' + await get_lang('long_page') + '''</a></li>
+                <li><a href="/list/document/short">''' + await get_lang('short_page') + '''</a></li>
+                <li><a href="/list/document/old">''' + await get_lang('old_page') + '''</a></li>
+                <li><a href="/list/document/new">''' + await get_lang('new_page') + '''</a></li>
+                <li><a href="/list/document/no_link">''' + await get_lang('no_link_document_list') + '''</a></li>
+            </ul>
+            <h3>''' + await get_lang('user') + '''</h3>
+            <ul>
+                <li><a href="/recent_block">''' + await get_lang('recent_ban') + '''</a></li>
+                <li><a href="/list/user">''' + await get_lang('member_list') + '''</a></li>
+            </ul>
+            <h3>''' + await get_lang('other') + '''</h3>
+            <ul>
+                <li><a href="/list/file">''' + await get_lang('image_file_list') + '''</a></li>
+                <li><a href="/vote">''' + await get_lang('vote_list') + '''</a></li>
+                <li><a href="/bbs/main">''' + await get_lang('bbs_main') + '''</a></li>
+            </ul>
+            <h2>''' + await get_lang('other') + '''</h2>
+            <ul>
+                <li><a href="/upload">''' + await get_lang('upload') + '''</a></li>
+                <li><a href="/manager/10">''' + await get_lang('search') + '''</a></li>
+            </ul>
+            <h2>''' + await get_lang('admin') + '''</h2>
+            <ul>
+                <li><a href="/manager/1">''' + await get_lang('admin_tool') + '''</a></li>
+            </ul>
+        '''),
+        menu = 0
+    ))

+ 21 - 21
route/main_tool_redirect.py

@@ -5,22 +5,22 @@ async def main_tool_redirect(num = 1, add_2 = ''):
         curs = conn.cursor()
 
         title_list = {
-            0 : [get_lang(conn, 'document_name'), '/acl', get_lang(conn, 'document_setting')],
-            1 : [0, '/list/user/check', get_lang(conn, 'check')],
-            2 : [get_lang(conn, 'file_name'), '/filter/file_filter/add', get_lang(conn, 'file_filter_add')],
-            3 : [0, '/auth/give', get_lang(conn, 'authorize')],
-            4 : [0, '/user', get_lang(conn, 'user_tool')],
-            6 : [get_lang(conn, 'name'), '/auth/list/add', get_lang(conn, 'add_admin_group')],
-            7 : [get_lang(conn, 'name'), '/filter/edit_filter/add', get_lang(conn, 'edit_filter_add')],
-            8 : [get_lang(conn, 'document_name'), '/search', get_lang(conn, 'search')],
-            9 : [0, '/recent_block/user', get_lang(conn, 'blocked_user')],
-            10 : [0, '/recent_block/admin', get_lang(conn, 'blocked_admin')],
-            11 : [get_lang(conn, 'document_name'), '/watch_list', get_lang(conn, 'add_watchlist')],
-            12 : [get_lang(conn, 'compare_target'), '/list/user/check', get_lang(conn, 'compare_target')],
-            13 : [get_lang(conn, 'document_name'), '/edit', get_lang(conn, 'load')],
-            14 : [get_lang(conn, 'document_name'), '/star_doc', get_lang(conn, 'add_star_doc')],
-            16 : [0, '/auth/give/fix', get_lang(conn, 'user_fix')],
-            17 : [get_lang(conn, 'search'), '/recent_block/all/1', get_lang(conn, 'search')],
+            0 : [await get_lang('document_name'), '/acl', await get_lang('document_setting')],
+            1 : [0, '/list/user/check', await get_lang('check')],
+            2 : [await get_lang('file_name'), '/filter/file_filter/add', await get_lang('file_filter_add')],
+            3 : [0, '/auth/give', await get_lang('authorize')],
+            4 : [0, '/user', await get_lang('user_tool')],
+            6 : [await get_lang('name'), '/auth/list/add', await get_lang('add_admin_group')],
+            7 : [await get_lang('name'), '/filter/edit_filter/add', await get_lang('edit_filter_add')],
+            8 : [await get_lang('document_name'), '/search', await get_lang('search')],
+            9 : [0, '/recent_block/user', await get_lang('blocked_user')],
+            10 : [0, '/recent_block/admin', await get_lang('blocked_admin')],
+            11 : [await get_lang('document_name'), '/watch_list', await get_lang('add_watchlist')],
+            12 : [await get_lang('compare_target'), '/list/user/check', await get_lang('compare_target')],
+            13 : [await get_lang('document_name'), '/edit', await get_lang('load')],
+            14 : [await get_lang('document_name'), '/star_doc', await get_lang('add_star_doc')],
+            16 : [0, '/auth/give/fix', await get_lang('user_fix')],
+            17 : [await get_lang('search'), '/recent_block/all/1', await get_lang('search')],
         }
         
         if num == 1:
@@ -43,7 +43,7 @@ async def main_tool_redirect(num = 1, add_2 = ''):
                 return redirect(conn, title_list[num][1] + '/' + url_pas(add_1))
         else:
             if title_list[num][0] == 0:
-                placeholder = get_lang(conn, 'user_name')
+                placeholder = await get_lang('user_name')
             else:
                 placeholder = title_list[num][0]
 
@@ -57,15 +57,15 @@ async def main_tool_redirect(num = 1, add_2 = ''):
                         '<hr class="main_hr">' + \
                     ''
 
-            return easy_minify(conn, flask.render_template(skin_check(conn),
-                imp = [title_list[num][2], await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
+            return easy_minify(flask.render_template(await skin_check(),
+                imp = [title_list[num][2], await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
                 data = '''
                     <form method="post">
                         ''' + top_plus + '''
                         <input placeholder="''' + placeholder + '''" id="data_field" name="name" type="text">
                         <hr class="main_hr">
-                        <button type="submit">''' + get_lang(conn, 'go') + '''</button>
+                        <button type="submit">''' + await get_lang('go') + '''</button>
                     </form>
                 ''',
-                menu = [['manager', get_lang(conn, 'return')]]
+                menu = [['manager', await get_lang('return')]]
             ))

+ 23 - 24
route/main_view.py

@@ -1,32 +1,31 @@
 from .tool.func import *
 
 async def main_view(name = ''):
-    with get_db_connect() as conn:
-        file_name = re.search(r'([^/]+)$', name)
-        if not file_name:
-            return ''
-        else:
-            file_name = file_name.group(1)
-            dir_name = './views/' + re.sub(r'\.{2,}', '', name[:-len(file_name)])
+    file_name = re.search(r'([^/]+)$', name)
+    if not file_name:
+        return ''
+    else:
+        file_name = file_name.group(1)
+        dir_name = './views/' + re.sub(r'\.{2,}', '', name[:-len(file_name)])
 
-            file_name = re.sub(r'\.cache_v(?:[0-9]+)$', '', file_name)
+        file_name = re.sub(r'\.cache_v(?:[0-9]+)$', '', file_name)
 
-            mime_type = file_name.split('.')
-            if len(mime_type) < 2:
+        mime_type = file_name.split('.')
+        if len(mime_type) < 2:
+            mime_type = 'text/plain'
+        else:
+            mime_type = mime_type[len(mime_type) - 1].lower()
+            image_type = ['jpeg', 'jpg', 'gif', 'png', 'webp', 'ico', 'svg']
+            if mime_type in image_type:
+                if not mime_type == 'svg':
+                    mime_type = 'image/' + mime_type
+                else:
+                    mime_type = 'image/svg+xml'
+            elif mime_type == 'js':
+                mime_type = 'text/javascript'
+            elif mime_type == 'txt':
                 mime_type = 'text/plain'
             else:
-                mime_type = mime_type[len(mime_type) - 1].lower()
-                image_type = ['jpeg', 'jpg', 'gif', 'png', 'webp', 'ico', 'svg']
-                if mime_type in image_type:
-                    if not mime_type == 'svg':
-                        mime_type = 'image/' + mime_type
-                    else:
-                        mime_type = 'image/svg+xml'
-                elif mime_type == 'js':
-                    mime_type = 'text/javascript'
-                elif mime_type == 'txt':
-                    mime_type = 'text/plain'
-                else:
-                    mime_type = 'text/' + mime_type
+                mime_type = 'text/' + mime_type
 
-            return flask.send_from_directory(dir_name, file_name, mimetype = mime_type)
+        return flask.send_from_directory(dir_name, file_name, mimetype = mime_type)

+ 49 - 9
route/n_bbs_in.py

@@ -1,5 +1,31 @@
 from .tool.func import *
 
+from .go_api_bbs import api_bbs
+
+async def bbs_in(bbs_num = 1, page = 1):
+    with get_db_connect() as conn:
+        curs = conn.cursor()
+
+        bbs_num_str = str(bbs_num)
+
+        curs.execute(db_change('select set_data from bbs_set where set_id = ? and set_name = "bbs_name"'), [bbs_num])
+        db_data = curs.fetchall()
+        if not db_data:
+            return redirect(conn, '/bbs/main')
+    
+        bbs_name = db_data[0][0]
+
+    return easy_minify(flask.render_template(await skin_check(),
+        imp = [bbs_name, await wiki_set(), await wiki_custom(), wiki_css(['(' + await get_lang('bbs') + ') (' + str(page) + ')', 0])],
+        data = '' + \
+            '<div id="opennamu_bbs_in"></div>' + \
+            '<script defer src="/views/main_css/js/route/bbs_in.js' + cache_v() + '"></script>' + \
+            '<script>window.addEventListener("DOMContentLoaded", function() { opennamu_bbs_in(); });</script>' + \
+        '',
+        menu = [['bbs/main', await get_lang('return')], ['bbs/edit/' + bbs_num_str, await get_lang('add')], ['bbs/set/' + bbs_num_str, await get_lang('bbs_set')]]
+    ))
+
+'''
 async def bbs_in(bbs_num = 1, page = 1):
     with get_db_connect() as conn:
         curs = conn.cursor()
@@ -13,12 +39,26 @@ async def bbs_in(bbs_num = 1, page = 1):
     
         bbs_name = db_data[0][0]
 
-        return easy_minify(conn, flask.render_template(skin_check(conn),
-            imp = [bbs_name, await wiki_set(), await wiki_custom(conn), wiki_css(['(' + get_lang(conn, 'bbs') + ') (' + str(page) + ')', 0])],
-            data = '' + \
-                '<div id="opennamu_bbs_in"></div>' + \
-                '<script defer src="/views/main_css/js/route/bbs_in.js' + cache_v() + '"></script>' + \
-                '<script>window.addEventListener("DOMContentLoaded", function() { opennamu_bbs_in(); });</script>' + \
-            '',
-            menu = [['bbs/main', get_lang(conn, 'return')], ['bbs/edit/' + bbs_num_str, get_lang(conn, 'add')], ['bbs/set/' + bbs_num_str, get_lang(conn, 'bbs_set')]]
-        ))
+    data = await api_bbs(bbs_num, page)
+
+    data_html = ''
+    for for_a in range(len(data)):
+        data_html += '<div class="opennamu_recent_change">'
+        data_html += '<a href="/bbs/w/' + data[for_a]['set_id'] + '/' + data[for_a]['set_code'] + '">' + html.escape(data[for_a]['title']) + '</a>'
+        data_html += '<div style="float: right;">'
+        data_html += '<span id="opennamu_bbs_comment_' + str(for_a) + '"></span>'
+        data_html += data[for_a]['user_id_render'] + ' | '
+
+        if data[for_a]['pinned'] == '1':
+            data_html += '<span style="color: red;">' + data[for_a]['date'] + '</span>'
+        else:
+            data_html += data[for_a]['date']
+
+            data_html += '</div>'
+            data_html += '<div style="clear: both;"></div>'
+
+            data_html += '</div>'
+            data_html += '<hr class="main_hr">'
+
+        get_next_page_bottom()
+'''

+ 9 - 10
route/n_bbs_main.py

@@ -1,13 +1,12 @@
 from .tool.func import *
 
 async def bbs_main():
-    with get_db_connect() as conn:
-        return easy_minify(conn, flask.render_template(skin_check(conn),
-            imp = [get_lang(conn, 'bbs_main'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
-            data = '' + \
-                '<div id="opennamu_bbs_main"></div>' + \
-                '<script defer src="/views/main_css/js/route/bbs_main.js' + cache_v() + '"></script>' + \
-                '<script>window.addEventListener("DOMContentLoaded", function() { opennamu_bbs_main(); });</script>' + \
-            '',
-            menu = [['other', get_lang(conn, 'other_tool')], ['bbs/make', get_lang(conn, 'add')]]
-        ))
+    return easy_minify(flask.render_template(await skin_check(),
+        imp = [await get_lang('bbs_main'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
+        data = '' + \
+            '<div id="opennamu_bbs_main"></div>' + \
+            '<script defer src="/views/main_css/js/route/bbs_main.js' + cache_v() + '"></script>' + \
+            '<script>window.addEventListener("DOMContentLoaded", function() { opennamu_bbs_main(); });</script>' + \
+        '',
+        menu = [['other', await get_lang('other_tool')], ['bbs/make', await get_lang('add')]]
+    ))

+ 3 - 3
route/n_bbs_w_set.py

@@ -13,12 +13,12 @@ async def bbs_w_set(bbs_num = ''):
 
         bbs_num_str = str(bbs_num)
 
-        return easy_minify(conn, flask.render_template(skin_check(conn),
-            imp = [get_lang(conn, 'bbs_set'), await wiki_set(), await wiki_custom(conn), wiki_css(['(' + bbs_name + ')', 0])],
+        return easy_minify(flask.render_template(await skin_check(),
+            imp = [await get_lang('bbs_set'), await wiki_set(), await wiki_custom(), wiki_css(['(' + bbs_name + ')', 0])],
             data = '' + \
                 '<div id="opennamu_bbs_w_set"></div>' + \
                 '<script defer src="/views/main_css/js/route/bbs_w_set.js' + cache_v() + '"></script>' + \
                 '<script>window.addEventListener("DOMContentLoaded", function() { opennamu_bbs_w_set(); });</script>' + \
             '',
-            menu = [['bbs/in/' + bbs_num_str, get_lang(conn, 'return')]]
+            menu = [['bbs/in/' + bbs_num_str, await get_lang('return')]]
         ))

+ 9 - 10
route/n_edit_move_all.py

@@ -1,13 +1,12 @@
 from .tool.func import *
 
 async def edit_move_all():
-    with get_db_connect() as conn:
-        return easy_minify(conn, flask.render_template(skin_check(conn),
-            imp = [get_lang(conn, 'multiple_move'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
-            data = '' + \
-                '<div id="opennamu_edit_move_all"></div>' + \
-                '<script defer src="/views/main_css/js/route/edit_move_all.js' + cache_v() + '"></script>' + \
-                '<script>window.addEventListener("DOMContentLoaded", function() { opennamu_edit_move_all(); });</script>' + \
-            '',
-            menu = [['other', get_lang(conn, 'return')]]
-        ))
+    return easy_minify(flask.render_template(await skin_check(),
+        imp = [await get_lang('multiple_move'), await wiki_set(), await wiki_custom(), wiki_css([0, 0])],
+        data = '' + \
+            '<div id="opennamu_edit_move_all"></div>' + \
+            '<script defer src="/views/main_css/js/route/edit_move_all.js' + cache_v() + '"></script>' + \
+            '<script>window.addEventListener("DOMContentLoaded", function() { opennamu_edit_move_all(); });</script>' + \
+        '',
+        menu = [['other', await get_lang('return')]]
+    ))

Alguns ficheiros não foram mostrados porque muitos ficheiros mudaram neste diff