فهرست منبع

긴급 수정

잉여개발기 6 ماه پیش
والد
کامیت
9fc85bb32f

+ 15 - 9
route/tool/func.py

@@ -1212,15 +1212,21 @@ def get_lang_name(conn, tool = ''):
     return lang_name
 
 async def get_lang(data, safe = 0):
-    other_set = {}
-    other_set["data"] = data
-    other_set["legacy"] = ""
-
-    res = await python_to_golang('api_func_language', other_set)
-    if res['response'] == 'ok':
-        return res['data'][data]
+    if data in global_lang_data:
+        return global_lang_data[data]
     else:
-        return data + ' (M)'
+        lang = json_loads(open(os.path.join('lang', 'en-US.json'), encoding = 'utf-8').read())
+
+        other_set = {}
+        other_set["data"] = ' '.join([title for title in lang if title[0] != '_'])
+        other_set["legacy"] = ""
+
+        res = await python_to_golang('api_func_language', other_set)
+        if res['response'] == 'ok':
+            for load_data in res['data']:
+                global_lang_data[load_data] = res['data'][load_data]
+        
+        return global_lang_data[data]
 
 # 하위 호환용
 def load_lang(data, safe = 0):
@@ -1252,7 +1258,7 @@ async def skin_check(set_n = 0):
     return data
     
 def cache_v():
-    return '.cache_v288'
+    return '.cache_v289'
 
 def wiki_css(data):
     # without_DB

+ 14 - 12
views/main_css/js/func/editor.js

@@ -43,9 +43,6 @@ function do_paste_image() {
 }
 
 function pasteListener(e) {
-    let lang_data = new FormData();
-    lang_data.append('data', 'file_name empty save authority_error same_file_error error');
-
     if(e.clipboardData && e.clipboardData.items) {
         const items = e.clipboardData.items;
         const formData = new FormData();
@@ -69,16 +66,21 @@ function pasteListener(e) {
             return;
         }
 
-        fetch('/api/lang', {
+        let lang_data = new FormData();
+        lang_data.append('data', 'file_name empty save authority_error same_file_error error');
+
+        fetch('/api/v2/lang', {
             method : 'POST',
             body : lang_data,
         }).then(function(res) {
             return res.json();
-        }).then(function(ajax_data) {
-            const customName = prompt(ajax_data['data'][0]);
+        }).then(function(lang) {
+            lang = lang["data"];
+
+            const customName = prompt(lang['file_name']);
                 
             if(!customName) {
-                return alert(ajax_data['data'][1]);
+                return alert(lang['empty']);
             }
             
             file_name = customName + ".png";
@@ -92,24 +94,24 @@ function pasteListener(e) {
             }).then((res) => {
                 if (res.status === 200 || res.status === 201) {
                     const url = res.url;
-                    alert(ajax_data['data'][2] + ' : [[file:' + file_name + ']]');
+                    alert(lang['save'] + ' : [[file:' + file_name + ']]');
 
                     do_insert_data('[[file:' + file_name + ']]');
                 } else {
                     console.error("[ERROR] PasteUpload Fail :", res.statusText);
 
                     if(res.status === 400) {
-                        alert(ajax_data['data'][4]);
+                        alert(lang['same_file_error']);
                     } else if(res.status === 401) {
-                        alert(ajax_data['data'][3]);    
+                        alert(lang['authority_error']);    
                     } else {
-                        alert(ajax_data['data'][5]);        
+                        alert(lang['error']);        
                     }
                 }
             }).catch((err) => {
                 console.error("[ERROR] PasteUpload Fail :", JSON.stringify(err), err);
 
-                alert(ajax_data['data'][5]);
+                alert(lang['error']);
             });
         });
     }

+ 63 - 53
views/main_css/js/func/insert_user_info.js

@@ -4,64 +4,74 @@ function do_insert_user_info() {
     if(document.getElementById('opennamu_get_user_info')) {
         let name = document.getElementById('opennamu_get_user_info').innerHTML;
 
-        fetch("/api/user_info/" + opennamu_do_url_encode(name)).then(function(res) {
-            return res.json();
-        }).then(function(data) {
-            let lang_data = data["language"];
+        let lang_data = new FormData();
+        lang_data.append('data', ['normal', 'ban', 'ban', 'ban', 'type', 'user_name', 'authority', 'state', 'level', ].join(' '));
 
-            let get_data_auth = data['data']['auth'];
-            let get_data_auth_date = data['data']['auth_date'];
-            if(get_data_auth_date !== '0') {
-                get_data_auth += ' (~' + get_data_auth_date + ')';
-            }
-            
-            let get_data_ban = data['data']['ban'];
-            let ban_state = '';
-            
-            if(get_data_ban === '0') {
-                ban_state = lang_data['normal'];
-            } else {
-                let get_ban_do_type = get_data_ban[1].replace(/[a-zA-Z]/g, '');
-                let get_ban_range_type = get_data_ban[1].replace(/[0-9]/g, '');
+        fetch('/api/v2/lang', {
+            method : 'POST',
+            body : lang_data,
+        }).then(function(res) {
+            return res.json();
+        }).then(function(lang) {
+            lang_data = lang["data"];
 
-                if(get_ban_range_type === 'a') {
-                    ban_state = '<a href="/recent_block/regex">' + lang_data['ban'] + '</a>';
-                } else if(get_ban_range_type === 'b') {
-                    ban_state = '<a href="/recent_block/cidr">' + lang_data['ban'] + '</a>';
-                } else if(get_ban_range_type === 'c') {
-                    ban_state = data['data']['auth'];
-                } else {
-                    ban_state = '<a href="/recent_block/user/' + opennamu_do_url_encode(name) + '">' + lang_data['ban'] + '</a>';
+            fetch("/api/user_info/" + opennamu_do_url_encode(name)).then(function(res) {
+                return res.json();
+            }).then(function(data) {
+                let get_data_auth = data['data']['auth'];
+                let get_data_auth_date = data['data']['auth_date'];
+                if(get_data_auth_date !== '0') {
+                    get_data_auth += ' (~' + get_data_auth_date + ')';
                 }
+                
+                let get_data_ban = data['data']['ban'];
+                let ban_state = '';
+                
+                if(get_data_ban === '0') {
+                    ban_state = lang_data['normal'];
+                } else {
+                    let get_ban_do_type = get_data_ban[1].replace(/[a-zA-Z]/g, '');
+                    let get_ban_range_type = get_data_ban[1].replace(/[0-9]/g, '');
+
+                    if(get_ban_range_type === 'a') {
+                        ban_state = '<a href="/recent_block/regex">' + lang_data['ban'] + '</a>';
+                    } else if(get_ban_range_type === 'b') {
+                        ban_state = '<a href="/recent_block/cidr">' + lang_data['ban'] + '</a>';
+                    } else if(get_ban_range_type === 'c') {
+                        ban_state = data['data']['auth'];
+                    } else {
+                        ban_state = '<a href="/recent_block/user/' + opennamu_do_url_encode(name) + '">' + lang_data['ban'] + '</a>';
+                    }
 
-                if(get_data_ban[1] !== '') {
-                    ban_state += '<br>'
-                    ban_state += lang_data['type'] + ' : ' + get_data_ban[1];
+                    if(get_data_ban[1] !== '') {
+                        ban_state += '<br>'
+                        ban_state += lang_data['type'] + ' : ' + get_data_ban[1];
+                    }
                 }
-            }
-            
-            let end_data = '' +
-                '<table class="user_info_table">' +
-                    '<tr>' +
-                        '<td>' + lang_data['user_name'] + '</td>' +
-                        '<td>' + data['data']['render'] + '</td>' +
-                    '</tr>' +
-                    '<tr>' +
-                        '<td>' + lang_data['authority'] + '</td>' +
-                        '<td>' + get_data_auth + '</td>' +
-                    '</tr>' +
-                    '<tr>' +
-                        '<td>' + lang_data['state'] + '</td>' +
-                        '<td>' + ban_state + '</td>' +
-                    '</tr>' +
-                    '<tr>' +
-                        '<td>' + lang_data['level'] + '</td>' +
-                        '<td>' + data['data']['level'] + ' (' + data['data']['exp'] + ' / ' + data['data']['max_exp'] + ')</td>' +
-                    '</tr>' +
-                '</table>' +
-            '';
-            
-            document.getElementById('opennamu_get_user_info').innerHTML = end_data;
+                
+                let end_data = '' +
+                    '<table class="user_info_table">' +
+                        '<tr>' +
+                            '<td>' + lang_data['user_name'] + '</td>' +
+                            '<td>' + data['data']['render'] + '</td>' +
+                        '</tr>' +
+                        '<tr>' +
+                            '<td>' + lang_data['authority'] + '</td>' +
+                            '<td>' + get_data_auth + '</td>' +
+                        '</tr>' +
+                        '<tr>' +
+                            '<td>' + lang_data['state'] + '</td>' +
+                            '<td>' + ban_state + '</td>' +
+                        '</tr>' +
+                        '<tr>' +
+                            '<td>' + lang_data['level'] + '</td>' +
+                            '<td>' + data['data']['level'] + ' (' + data['data']['exp'] + ' / ' + data['data']['max_exp'] + ')</td>' +
+                        '</tr>' +
+                    '</table>' +
+                '';
+                
+                document.getElementById('opennamu_get_user_info').innerHTML = end_data;
+            });
         });
     }
 }

+ 68 - 57
views/main_css/js/route/bbs_main.js

@@ -1,82 +1,93 @@
 "use strict";
 
 function opennamu_bbs_main() {
-    fetch('/api/v2/bbs').then(function(res) {
+    let lang_data = new FormData();
+    lang_data.append('data', ["data", 'comment_base', 'thread_base', ].join(' '));
+
+    fetch('/api/v2/lang', {
+        method : 'POST',
+        body : lang_data,
+    }).then(function(res) {
         return res.json();
-    }).then(function(bbs_list) {
-        let lang = bbs_list["language"];
-        bbs_list = bbs_list["data"];
+    }).then(function(lang) {
+        lang = lang["data"];
 
-        fetch('/api/v2/bbs/main').then(function(res) {
+        fetch('/api/v2/bbs').then(function(res) {
             return res.json();
-        }).then(function(data) {
-            data = data["data"];
+        }).then(function(bbs_list) {
+            bbs_list = bbs_list["data"];
 
-            let data_html = '<ul>';
-            let bbs_id_to_name = {};
+            fetch('/api/v2/bbs/main').then(function(res) {
+                return res.json();
+            }).then(function(data) {
+                data = data["data"];
 
-            for(let key in bbs_list) {
-                bbs_id_to_name[bbs_list[key][0]] = key;
+                let data_html = '<ul>';
+                let bbs_id_to_name = {};
 
-                data_html += '<li>';
+                for(let key in bbs_list) {
+                    bbs_id_to_name[bbs_list[key][0]] = key;
 
-                data_html += '<a href="/bbs/in/' + bbs_list[key][0] + '">';
-                data_html += opennamu_xss_filter(key);
-                data_html += '</a>';
+                    data_html += '<li>';
 
-                data_html += ' (';
-                if(bbs_list[key][1] === 'comment') {
-                    data_html += lang['comment_base'];
-                } else {
-                    data_html += lang['thread_base'];
-                }
-                data_html += ')';
+                    data_html += '<a href="/bbs/in/' + bbs_list[key][0] + '">';
+                    data_html += opennamu_xss_filter(key);
+                    data_html += '</a>';
+
+                    data_html += ' (';
+                    if(bbs_list[key][1] === 'comment') {
+                        data_html += lang['comment_base'];
+                    } else {
+                        data_html += lang['thread_base'];
+                    }
+                    data_html += ')';
 
-                if(bbs_list[key][2] !== '') {
-                    data_html += ' (' + bbs_list[key][2] + ')';
+                    if(bbs_list[key][2] !== '') {
+                        data_html += ' (' + bbs_list[key][2] + ')';
+                    }
+                    
+                    data_html += '</li>';
                 }
-                
-                data_html += '</li>';
-            }
 
-            data_html += '</ul>';
-            data_html += '<hr class="main_hr">';
+                data_html += '</ul>';
+                data_html += '<hr class="main_hr">';
 
-            for(let for_a = 0; for_a < data.length; for_a++) {
-                data_html += '<div class="opennamu_recent_change">';
+                for(let for_a = 0; for_a < data.length; for_a++) {
+                    data_html += '<div class="opennamu_recent_change">';
 
-                data_html += '<a href="/bbs/w/' + data[for_a]['set_id'] + '/' + data[for_a]['set_code'] + '">' + opennamu_xss_filter(data[for_a]['title']) + '</a>';
+                    data_html += '<a href="/bbs/w/' + data[for_a]['set_id'] + '/' + data[for_a]['set_code'] + '">' + opennamu_xss_filter(data[for_a]['title']) + '</a>';
 
-                data_html += '<div style="float: right;">';
+                    data_html += '<div style="float: right;">';
 
-                data_html += '<span id="opennamu_bbs_comment_' + String(for_a) + '"></span>';
+                    data_html += '<span id="opennamu_bbs_comment_' + String(for_a) + '"></span>';
 
-                data_html += '<a href="/bbs/in/' + data[for_a]['set_id'] + '">';
-                data_html += bbs_id_to_name[data[for_a]['set_id']]
-                data_html += '</a>';
-                data_html += ' | ';
+                    data_html += '<a href="/bbs/in/' + data[for_a]['set_id'] + '">';
+                    data_html += bbs_id_to_name[data[for_a]['set_id']]
+                    data_html += '</a>';
+                    data_html += ' | ';
 
-                data_html += data[for_a]['user_id_render'] + ' | ';
-                data_html += data[for_a]['date'];
+                    data_html += data[for_a]['user_id_render'] + ' | ';
+                    data_html += data[for_a]['date'];
 
-                data_html += '</div>'
-                data_html += '<div style="clear: both;"></div>';
+                    data_html += '</div>'
+                    data_html += '<div style="clear: both;"></div>';
 
-                data_html += '</div>';
-                data_html += '<hr class="main_hr">';
-            }
-            
-            document.getElementById('opennamu_bbs_main').innerHTML = data_html;
-
-            for(let for_a = 0; for_a < data.length; for_a++) {
-                fetch('/api/v2/bbs/w/comment/' + data[for_a]['set_id'] + '-' + data[for_a]['set_code'] + '/length').then(function(res) {
-                    return res.json();
-                }).then(function(comment_data) {
-                    if(comment_data) {
-                        document.getElementById('opennamu_bbs_comment_' + String(for_a)).innerText = comment_data['data'] + ' | ';
-                    }
-                });
-            }
+                    data_html += '</div>';
+                    data_html += '<hr class="main_hr">';
+                }
+                
+                document.getElementById('opennamu_bbs_main').innerHTML = data_html;
+
+                for(let for_a = 0; for_a < data.length; for_a++) {
+                    fetch('/api/v2/bbs/w/comment/' + data[for_a]['set_id'] + '-' + data[for_a]['set_code'] + '/length').then(function(res) {
+                        return res.json();
+                    }).then(function(comment_data) {
+                        if(comment_data) {
+                            document.getElementById('opennamu_bbs_comment_' + String(for_a)).innerText = comment_data['data'] + ' | ';
+                        }
+                    });
+                }
+            });
         });
     });
 }

+ 1 - 1
views/main_css/js/route/bbs_w_post.js

@@ -47,7 +47,7 @@ function opennamu_load_comment() {
     let lang_data = new FormData();
     lang_data.append('data', 'normal comment tool return upvote');
 
-    fetch('/api/lang', {
+    fetch('/api/v2/lang', {
         method : 'POST',
         body : lang_data,
     }).then(function(res) {

+ 7 - 7
views/main_css/js/route/edit_move_all.js

@@ -4,7 +4,7 @@ function opennamu_edit_move_all() {
     let lang_data = new FormData();
     lang_data.append('data', 'title_start_document title_end_document title_include_document move document_name');
 
-    fetch('/api/lang', {
+    fetch('/api/v2/lang', {
         method : 'POST',
         body : lang_data,
     }).then(function(res) {
@@ -13,17 +13,17 @@ function opennamu_edit_move_all() {
         lang = lang["data"];
     
         document.getElementById('opennamu_edit_move_all').innerHTML = '' +
-            '<input placeholder="' + lang[4] + '"></input>' +
+            '<input placeholder="' + lang['document_name'] + '"></input>' +
             '<hr class="main_hr"> ' +
-            '<input placeholder="' + lang[4] + '"></input>' +
+            '<input placeholder="' + lang['document_name'] + '"></input>' +
             '<hr class="main_hr">' +
             '<select>' +
-                '<option>' + lang[0] + '</option>' +
-                '<option>' + lang[1] + '</option>' +
-                '<option>' + lang[2] + '</option>' +
+                '<option>' + lang['title_start_document'] + '</option>' +
+                '<option>' + lang['title_end_document'] + '</option>' +
+                '<option>' + lang['title_include_document'] + '</option>' +
             '</select>' +
             '<hr class="main_hr">' +
-            '<button>' + lang[3] + '</button>' +
+            '<button>' + lang['move'] + '</button>' +
         '';
     });
 }

+ 43 - 32
views/main_css/js/route/give_auth.js

@@ -78,50 +78,61 @@ function opennamu_give_auth() {
     let html_data = '';
     let user_name = '';
 
-    fetch('/api/v2/list/auth').then(function(res) {
-        return res.json();
-    }).then(function(data) {
-        let lang = data["language"];
-        let data_list = data["data"];
+    let lang_data = new FormData();
+    lang_data.append('data', ["data", "many_delete_help", "send", ].join(' '));
 
-        if(mode === 0) {
-            if(url_split.length === 3) {
-                html_data += '<textarea id="opennamu_give_auth_user_name" class="opennamu_textarea_100" placeholder="' + lang["many_delete_help"] + '"></textarea>';
-                html_data += '<hr class="main_hr">';
+    fetch('/api/v2/lang', {
+        method : 'POST',
+        body : lang_data,
+    }).then(function(res) {
+        return res.json();
+    }).then(function(lang) {
+        lang = lang["data"];
+
+        fetch('/api/v2/list/auth').then(function(res) {
+            return res.json();
+        }).then(function(data) {
+            let data_list = data["data"];
+
+            if(mode === 0) {
+                if(url_split.length === 3) {
+                    html_data += '<textarea id="opennamu_give_auth_user_name" class="opennamu_textarea_100" placeholder="' + lang["many_delete_help"] + '"></textarea>';
+                    html_data += '<hr class="main_hr">';
+                } else {
+                    user_name = url_split[3];
+        
+                    html_data += '<div id="opennamu_get_user_info">' + opennamu_xss_filter(user_name) + '</div>';
+                    html_data += '<hr class="main_hr">';
+                }
             } else {
-                user_name = url_split[3];
-    
-                html_data += '<div id="opennamu_get_user_info">' + opennamu_xss_filter(user_name) + '</div>';
+                html_data += '<select id="opennamu_give_auth_select_org">';
+                for(let for_a = 0; for_a < data_list.length; for_a++) {
+                    html_data += '<option value="' + data_list[for_a] + '">' + data_list[for_a] + '</option>';
+                }
+                html_data += '</select>';
                 html_data += '<hr class="main_hr">';
             }
-        } else {
-            html_data += '<select id="opennamu_give_auth_select_org">';
+
+            html_data += '<select id="opennamu_give_auth_select">';
             for(let for_a = 0; for_a < data_list.length; for_a++) {
                 html_data += '<option value="' + data_list[for_a] + '">' + data_list[for_a] + '</option>';
             }
             html_data += '</select>';
             html_data += '<hr class="main_hr">';
-        }
 
-        html_data += '<select id="opennamu_give_auth_select">';
-        for(let for_a = 0; for_a < data_list.length; for_a++) {
-            html_data += '<option value="' + data_list[for_a] + '">' + data_list[for_a] + '</option>';
-        }
-        html_data += '</select>';
-        html_data += '<hr class="main_hr">';
-
-        html_data += '<button onclick="opennamu_give_auth_submit();">' + lang["send"] + '</button>';
+            html_data += '<button onclick="opennamu_give_auth_submit();">' + lang["send"] + '</button>';
 
-        document.getElementById('opennamu_give_auth').innerHTML = html_data;
+            document.getElementById('opennamu_give_auth').innerHTML = html_data;
 
-        if(user_name !== '') {
-            fetch('/api/v2/auth/' + opennamu_do_url_encode(user_name)).then(function(res) {
-                return res.json();
-            }).then(function(data) {
-                document.getElementById('opennamu_give_auth_select').value = data["name"];
-            });
-        }
+            if(user_name !== '') {
+                fetch('/api/v2/auth/' + opennamu_do_url_encode(user_name)).then(function(res) {
+                    return res.json();
+                }).then(function(data) {
+                    document.getElementById('opennamu_give_auth_select').value = data["name"];
+                });
+            }
 
-        do_insert_user_info();
+            do_insert_user_info();
+        });
     });
 }

+ 101 - 90
views/main_css/js/route/list_recent_block.js

@@ -33,112 +33,123 @@ function opennamu_list_recent_block() {
         }
     }
 
-    fetch('/api/v2/recent_block' + add_path + '/' + tool + '/' + page + user_name + why).then(function(res) {
-        return res.json();
-    }).then(function(data) {
-        let lang = data["language"];
-        let auth = data["auth"];
-        data = data["data"];
+    let lang_data = new FormData();
+    lang_data.append('data', ["data", 'private', 'cidr', 'regex', "release", "limitless"].join(' '));
 
-        let data_html = '';
+    fetch('/api/v2/lang', {
+        method : 'POST',
+        body : lang_data,
+    }).then(function(res) {
+        return res.json();
+    }).then(function(lang) {
+        lang = lang["data"];
 
-        let option_list = [['all', 'all'], ['regex', 'regex'], ['cidr', 'cidr'], ['private', 'private'], ['ongoing', 'in_progress']];
-        for(let for_a = 0; for_a < option_list.length; for_a++) {
-            data_html += '<a href="/recent_block/' + option_list[for_a][0] + '">(' + lang[option_list[for_a][1]] + ')</a> ';
-        }
+        fetch('/api/v2/recent_block' + add_path + '/' + tool + '/' + page + user_name + why).then(function(res) {
+            return res.json();
+        }).then(function(data) {
+            let auth = data["auth"];
+            data = data["data"];
 
-        option_list = [['/manager/11', 'blocked'], ['/manager/12', 'admin'], ['/manager/19', 'why']];
-        for(let for_a = 0; for_a < option_list.length; for_a++) {
-            data_html += '<a href="' + option_list[for_a][0] + '">(' + lang[option_list[for_a][1]] + ')</a> ';
-        }
+            let data_html = '';
 
-        data_html += '<hr class="main_hr">';
-
-        /*
-            data_list = append(data_list, []string{
-                why,
-                ip_pre_block,
-                ip_render_block,
-                ip_pre_blocker,
-                ip_render_blocker,
-                end,
-                today,
-                band,
-                ongoing,
-            })
-        */
-        for(let for_a = 0; for_a < data.length; for_a++) {
-            let left = '';
-
-            let ban_auth = (auth["owner"] === true || auth["ban"] === true);
-            let ip = data[for_a][1];
-            if(data[for_a][7] === '') {
-                if(ban_auth) {
-                    ip = '<a href="/auth/ban/' + opennamu_do_url_encode(data[for_a][1]) + '">' + ip + '</a>';
-                }
-                
-                if(data[for_a][8] === '1') {
-                    ip = '<s>' + ip + '</s>';
-                }
-            } else if(data[for_a][7] === 'private') {
-                if(ban_auth) {
-                    ip = '<a href="/auth/ban/' + opennamu_do_url_encode(data[for_a][1]) + '">' + ip + '</a>';
-                }
+            let option_list = [['all', 'all'], ['regex', 'regex'], ['cidr', 'cidr'], ['private', 'private'], ['ongoing', 'in_progress']];
+            for(let for_a = 0; for_a < option_list.length; for_a++) {
+                data_html += '<a href="/recent_block/' + option_list[for_a][0] + '">(' + lang[option_list[for_a][1]] + ')</a> ';
+            }
 
-                if(data[for_a][8] === '1') {
-                    ip = '<s>' + ip + '</s>';
-                }
+            option_list = [['/manager/11', 'blocked'], ['/manager/12', 'admin'], ['/manager/19', 'why']];
+            for(let for_a = 0; for_a < option_list.length; for_a++) {
+                data_html += '<a href="' + option_list[for_a][0] + '">(' + lang[option_list[for_a][1]] + ')</a> ';
+            }
 
-                ip += ' (' + lang['private'] + ')';
-            } else if(data[for_a][7] === 'cidr') {
-                if(ban_auth) {
-                    ip = '<a href="/auth/ban_cidr/' + opennamu_do_url_encode(data[for_a][1]) + '">' + ip + '</a>';
-                }
+            data_html += '<hr class="main_hr">';
+
+            /*
+                data_list = append(data_list, []string{
+                    why,
+                    ip_pre_block,
+                    ip_render_block,
+                    ip_pre_blocker,
+                    ip_render_blocker,
+                    end,
+                    today,
+                    band,
+                    ongoing,
+                })
+            */
+            for(let for_a = 0; for_a < data.length; for_a++) {
+                let left = '';
+
+                let ban_auth = (auth["owner"] === true || auth["ban"] === true);
+                let ip = data[for_a][1];
+                if(data[for_a][7] === '') {
+                    if(ban_auth) {
+                        ip = '<a href="/auth/ban/' + opennamu_do_url_encode(data[for_a][1]) + '">' + ip + '</a>';
+                    }
+                    
+                    if(data[for_a][8] === '1') {
+                        ip = '<s>' + ip + '</s>';
+                    }
+                } else if(data[for_a][7] === 'private') {
+                    if(ban_auth) {
+                        ip = '<a href="/auth/ban/' + opennamu_do_url_encode(data[for_a][1]) + '">' + ip + '</a>';
+                    }
+
+                    if(data[for_a][8] === '1') {
+                        ip = '<s>' + ip + '</s>';
+                    }
+
+                    ip += ' (' + lang['private'] + ')';
+                } else if(data[for_a][7] === 'cidr') {
+                    if(ban_auth) {
+                        ip = '<a href="/auth/ban_cidr/' + opennamu_do_url_encode(data[for_a][1]) + '">' + ip + '</a>';
+                    }
+
+                    if(data[for_a][8] === '1') {
+                        ip = '<s>' + ip + '</s>';
+                    }
+
+                    ip += ' (' + lang['cidr'] + ')';
+                } else {
+                    if(ban_auth) {
+                        ip = '<a href="/auth/ban_regex/' + opennamu_do_url_encode(data[for_a][1]) + '">' + ip + '</a>';
+                    }
 
-                if(data[for_a][8] === '1') {
-                    ip = '<s>' + ip + '</s>';
-                }
+                    if(data[for_a][8] === '1') {
+                        ip = '<s>' + ip + '</s>';
+                    }
 
-                ip += ' (' + lang['cidr'] + ')';
-            } else {
-                if(ban_auth) {
-                    ip = '<a href="/auth/ban_regex/' + opennamu_do_url_encode(data[for_a][1]) + '">' + ip + '</a>';
+                    ip += ' (' + lang['regex'] + ')';
                 }
+                
+                left += ip + ' ← ' + data[for_a][4];
 
-                if(data[for_a][8] === '1') {
-                    ip = '<s>' + ip + '</s>';
+                let end = "";
+                if(data[for_a][5] === "release") {
+                    end = lang["release"];
+                } else if(data[for_a][5] === "") {
+                    end = lang["limitless"];
+                } else {
+                    end = data[for_a][5];
                 }
 
-                ip += ' (' + lang['regex'] + ')';
-            }
-            
-            left += ip + ' ← ' + data[for_a][4];
-
-            let end = "";
-            if(data[for_a][5] === "release") {
-                end = lang["release"];
-            } else if(data[for_a][5] === "") {
-                end = lang["limitless"];
-            } else {
-                end = data[for_a][5];
-            }
+                let right = end + '<br>' + data[for_a][6];
 
-            let right = end + '<br>' + data[for_a][6];
-
-            let bottom = '';
-            if(data[for_a][0] !== "") {
-                if(data[for_a][0] === "edit filter") {
-                    bottom = '<a href="/edit_filter/' + opennamu_do_url_encode(data[for_a][1]) + '">edit filter</a>'
-                } else {
-                    bottom = opennamu_send_render(opennamu_xss_filter(data[for_a][0]));
+                let bottom = '';
+                if(data[for_a][0] !== "") {
+                    if(data[for_a][0] === "edit filter") {
+                        bottom = '<a href="/edit_filter/' + opennamu_do_url_encode(data[for_a][1]) + '">edit filter</a>'
+                    } else {
+                        bottom = opennamu_send_render(opennamu_xss_filter(data[for_a][0]));
+                    }
                 }
-            }
 
-            data_html += opennamu_make_list(left, right, bottom);
-        }
+                data_html += opennamu_make_list(left, right, bottom);
+            }
 
-        data_html += opennamu_page_control('/recent_block/' + tool + user_name + '/{}' + why, Number(page), data.length);
+            data_html += opennamu_page_control('/recent_block/' + tool + user_name + '/{}' + why, Number(page), data.length);
 
-        document.getElementById('opennamu_list_recent_block').innerHTML = data_html;
+            document.getElementById('opennamu_list_recent_block').innerHTML = data_html;
+        });
     });
 }

+ 1 - 1
views/main_css/js/route/list_recent_discuss.js

@@ -17,7 +17,7 @@ function opennamu_list_recent_discuss() {
     let lang_data = new FormData();
     lang_data.append('data', 'normal close_discussion open_discussion admin_tool closed stop agreed_discussion');
 
-    fetch('/api/lang', {
+    fetch('/api/v2/lang', {
         method : 'POST',
         body : lang_data,
     }).then(function(res) {

+ 2 - 2
views/main_css/js/route/list_user_check_submit.js

@@ -8,7 +8,7 @@ function opennamu_list_user_check_submit() {
     let lang_data = new FormData();
     lang_data.append('data', 'check');
     
-    fetch('/api/lang', {
+    fetch('/api/v2/lang', {
         method : 'POST',
         body : lang_data,
     }).then(function(res) {
@@ -16,6 +16,6 @@ function opennamu_list_user_check_submit() {
     }).then(function(lang) {
         lang = lang["data"];
 
-        document.getElementById('opennamu_list_user_check_submit').innerHTML = '<button onclick="opennamu_list_user_check_submit_post();">' + lang[0] + '</button>';
+        document.getElementById('opennamu_list_user_check_submit').innerHTML = '<button onclick="opennamu_list_user_check_submit_post();">' + lang['check'] + '</button>';
     });
 }

+ 5 - 5
views/main_css/js/route/setting_404_page.js

@@ -35,7 +35,7 @@ function opennamu_setting_404_page() {
     let lang_data = new FormData();
     lang_data.append('data', 'save 404_file 404_page preview');
 
-    fetch('/api/lang', {
+    fetch('/api/v2/lang', {
         method : 'POST',
         body : lang_data,
     }).then(function(res) {
@@ -55,8 +55,8 @@ function opennamu_setting_404_page() {
 
         let data_html = '';
         let select_list = [
-            ['404_page', data[0]['data'][1]],
-            ['404_file', data[0]['data'][2]],
+            ['404_page', data[0]['data']['404_file']],
+            ['404_file', data[0]['data']['404_page']],
         ];
 
         data_html += '<select id="opennamu_setting_404_page_select">';
@@ -79,8 +79,8 @@ function opennamu_setting_404_page() {
         data_html += '<textarea class="opennamu_textarea_500" id="opennamu_setting_404_page_textarea">' + set_data + '</textarea>';
         data_html += '<hr class="main_hr">';
 
-        data_html += '<button id="opennamu_save_button" onclick="opennamu_setting_404_page_post();">' + data[0]['data'][0] + '</button> ';
-        data_html += '<button onclick="opennamu_setting_404_page_preview();">' + data[0]['data'][3] + '</button>';
+        data_html += '<button id="opennamu_save_button" onclick="opennamu_setting_404_page_post();">' + data[0]['data']['save'] + '</button> ';
+        data_html += '<button onclick="opennamu_setting_404_page_preview();">' + data[0]['data']['preview'] + '</button>';
         data_html += '<hr class="main_hr">';
 
         data_html += '<div id="opennamu_setting_404_page_preview"></div>';

+ 75 - 64
views/main_css/js/route/topic.js

@@ -4,7 +4,7 @@ function opennamu_thread_delete() {
     let lang_data = new FormData();
     lang_data.append('data', 'delete');
 
-    fetch('/api/lang', {
+    fetch('/api/v2/lang', {
         method : 'POST',
         body : lang_data,
     }).then(function(res) {
@@ -26,7 +26,7 @@ function opennamu_thread_delete() {
             }
         }
 
-        let check = confirm(check_list_str + lang[0]);
+        let check = confirm(check_list_str + lang['delete']);
         if(check === true) {
             for(let for_a = 0; for_a < check_list.length; for_a++) {
                 fetch("/thread/" + check_list[for_a][0] + '/comment/' + check_list[for_a][1] + '/delete', { method : 'POST' });
@@ -123,77 +123,88 @@ function opennamu_get_thread(topic_num = "", do_type = "", thread_num = "") {
         color = 'default';
     }
 
-    fetch(url).then(function(res) {
+    let lang_data = new FormData();
+    lang_data.append('data', 'tool');
+
+    fetch('/api/v2/lang', {
+        method : 'POST',
+        body : lang_data,
+    }).then(function(res) {
         return res.json();
-    }).then(function(data) {
-        if(data["data"].length !== 0) {
-            let end_data = '';
-            let end_render = [];
-
-            let lang = data["language"];
-            data = data["data"];
-
-            let first = '';
-            for(let for_a = 0; for_a < data.length; for_a++) {
-                if(first === '') {
-                    first = data[for_a]["ip"];
-                }
+    }).then(function(lang) {
+        lang = lang["data"];
 
-                let real_color = color;
-                if(color !== 'red') {
-                    if(data[for_a]["blind"] === '1') {
-                        real_color = 'blue';
-                    } else if(first === data[for_a]["ip"]) {
-                        real_color = 'green';
-                    } else {
-                        real_color = 'default';
-                    }
-                }
+        fetch(url).then(function(res) {
+            return res.json();
+        }).then(function(data) {
+            if(data["data"].length !== 0) {
+                let end_data = '';
+                let end_render = [];
 
-                let date = '<a href="/thread/' + topic_num + '/comment/' + data[for_a]["id"] + '/tool">(' + lang["tool"] + ')</a> ' + data[for_a]["date"];
-                let render_data = data[for_a]["data"] !== "" ? data[for_a]["data"] : "[br]";
-
-                end_data += opennamu_get_thread_ui(
-                    data[for_a]["ip_render"], 
-                    date, 
-                    '<div class="opennamu_comment_scroll" id="opennamu_' + color + '_thread_render_' + data[for_a]["id"] + '">' + opennamu_xss_filter(render_data) + '</div>',
-                    data[for_a]["id"],
-                    real_color,
-                    data[for_a]["blind"],
-                    '',
-                    topic_num
-                )
-
-                end_render.push([
-                    render_data,
-                    data[for_a]["id"]
-                ]);
-            }
+                data = data["data"];
 
-            if(do_type === "" && thread_num === "") {
-                opennamu_get_new_thread(topic_num, String(Number(data[data.length - 1]["id"]) + 1));
-            }
+                let first = '';
+                for(let for_a = 0; for_a < data.length; for_a++) {
+                    if(first === '') {
+                        first = data[for_a]["ip"];
+                    }
+
+                    let real_color = color;
+                    if(color !== 'red') {
+                        if(data[for_a]["blind"] === '1') {
+                            real_color = 'blue';
+                        } else if(first === data[for_a]["ip"]) {
+                            real_color = 'green';
+                        } else {
+                            real_color = 'default';
+                        }
+                    }
 
-            document.getElementById(to_obj).innerHTML += end_data;
+                    let date = '<a href="/thread/' + topic_num + '/comment/' + data[for_a]["id"] + '/tool">(' + lang["tool"] + ')</a> ' + data[for_a]["date"];
+                    let render_data = data[for_a]["data"] !== "" ? data[for_a]["data"] : "[br]";
+
+                    end_data += opennamu_get_thread_ui(
+                        data[for_a]["ip_render"], 
+                        date, 
+                        '<div class="opennamu_comment_scroll" id="opennamu_' + color + '_thread_render_' + data[for_a]["id"] + '">' + opennamu_xss_filter(render_data) + '</div>',
+                        data[for_a]["id"],
+                        real_color,
+                        data[for_a]["blind"],
+                        '',
+                        topic_num
+                    )
+
+                    end_render.push([
+                        render_data,
+                        data[for_a]["id"]
+                    ]);
+                }
 
-            for(let for_a = 0; for_a < end_render.length; for_a++) {
-                let observer = new IntersectionObserver(entries => {
-                    entries.forEach(entry => {
-                        if(entry.isIntersecting) {
-                            opennamu_do_render(
-                                'opennamu_' + color + '_thread_render_' + end_render[for_a][1],
-                                end_render[for_a][0], 
-                                '',
-                                'thread'
-                            );
+                if(do_type === "" && thread_num === "") {
+                    opennamu_get_new_thread(topic_num, String(Number(data[data.length - 1]["id"]) + 1));
+                }
 
-                            observer.unobserve(entry.target);
-                        }
+                document.getElementById(to_obj).innerHTML += end_data;
+
+                for(let for_a = 0; for_a < end_render.length; for_a++) {
+                    let observer = new IntersectionObserver(entries => {
+                        entries.forEach(entry => {
+                            if(entry.isIntersecting) {
+                                opennamu_do_render(
+                                    'opennamu_' + color + '_thread_render_' + end_render[for_a][1],
+                                    end_render[for_a][0], 
+                                    '',
+                                    'thread'
+                                );
+
+                                observer.unobserve(entry.target);
+                            }
+                        });
                     });
-                });
 
-                observer.observe(document.getElementById('opennamu_' + color + '_thread_render_' + end_render[for_a][1]));
+                    observer.observe(document.getElementById('opennamu_' + color + '_thread_render_' + end_render[for_a][1]));
+                }
             }
-        }
+        });
     });
 }

+ 41 - 30
views/main_css/js/route/topic_list.js

@@ -18,43 +18,54 @@ function opennamu_topic_list() {
         doc_name = url_split.slice(3, undefined).join('/');
     }
 
-    fetch('/api/v2/topic/' + num + '/normal/' + doc_name).then(function(res) {
+    let lang_data = new FormData();
+    lang_data.append('data', 'closed stop agreed_discussion make_new_topic');
+
+    fetch('/api/v2/lang', {
+        method : 'POST',
+        body : lang_data,
+    }).then(function(res) {
         return res.json();
-    }).then(function(data) {
-        let lang = data['language'];
-        data = data['data'];
-
-        let data_html = '';
-
-        for(let for_a = 0; for_a < data.length; for_a++) {
-            let left = '<a href="/thread/' + data[for_a][0] + '">' + opennamu_xss_filter(data[for_a][1]) + '</a>';
-            
-            let right = '';
-            if(data[for_a][2] === 'O') {
-                right += lang['closed'] + ' | ';
-            } else if(data[for_a][2] === 'S') {
-                right += lang['stop'] + ' | ';
-            }
+    }).then(function(lang) {
+        lang = lang["data"];
 
-            if(data[for_a][3] !== '') {
-                right += lang['agreed_discussion'] + ' | ';
-            }
+        fetch('/api/v2/topic/' + num + '/normal/' + doc_name).then(function(res) {
+            return res.json();
+        }).then(function(data) {
+            data = data['data'];
+
+            let data_html = '';
 
-            right += '<a href="/thread/' + data[for_a][0] + '#' + data[for_a][7] + '">#' + data[for_a][7] + '</a> | ';
-            right += data[for_a][5] + ' | ';
-            right += data[for_a][6];
+            for(let for_a = 0; for_a < data.length; for_a++) {
+                let left = '<a href="/thread/' + data[for_a][0] + '">' + opennamu_xss_filter(data[for_a][1]) + '</a>';
+                
+                let right = '';
+                if(data[for_a][2] === 'O') {
+                    right += lang['closed'] + ' | ';
+                } else if(data[for_a][2] === 'S') {
+                    right += lang['stop'] + ' | ';
+                }
 
-            data_html += opennamu_make_list(left, right);
-        }
+                if(data[for_a][3] !== '') {
+                    right += lang['agreed_discussion'] + ' | ';
+                }
 
-        if(data_html !== '') {
-            data_html += '<hr class="main_hr">';
-        }
+                right += '<a href="/thread/' + data[for_a][0] + '#' + data[for_a][7] + '">#' + data[for_a][7] + '</a> | ';
+                right += data[for_a][5] + ' | ';
+                right += data[for_a][6];
+
+                data_html += opennamu_make_list(left, right);
+            }
+
+            if(data_html !== '') {
+                data_html += '<hr class="main_hr">';
+            }
 
-        data_html += '<a href="/thread/0/' + doc_name + '">(' + lang['make_new_topic'] + ')</a>';
+            data_html += '<a href="/thread/0/' + doc_name + '">(' + lang['make_new_topic'] + ')</a>';
 
-        data_html += opennamu_page_control('/topic_page/{}/normal/' + doc_name, Number(num), data.length);
+            data_html += opennamu_page_control('/topic_page/{}/normal/' + doc_name, Number(num), data.length);
 
-        document.getElementById('opennamu_topic_list').innerHTML = data_html;
+            document.getElementById('opennamu_topic_list').innerHTML = data_html;
+        });
     });
 }

+ 5 - 5
views/main_css/js/route/w_set.js

@@ -2,9 +2,9 @@
 
 function w_set_reset() {
     let lang_data = new FormData();
-    lang_data.append('data', 'reset end');
+    lang_data.append('data', 'reset end authority_error');
 
-    fetch('/api/lang', {
+    fetch('/api/v2/lang', {
         method : 'POST',
         body : lang_data,
     }).then(function(res) {
@@ -12,7 +12,7 @@ function w_set_reset() {
     }).then(function(lang) {
         lang = lang["data"];
         
-        let check = confirm(lang[0]);
+        let check = confirm(lang['reset']);
         if(check === true) {
             const url = window.location.pathname;
             const url_split = url.split('/');
@@ -24,9 +24,9 @@ function w_set_reset() {
             }).then(function(data) {
                 if(data) {
                     if(data["response"] === "require auth") {
-                        alert(data["language"]["authority_error"]);
+                        alert(lang["authority_error"]);
                     } else {
-                        alert(lang[1]);
+                        alert(lang['end']);
                     }
 
                     history.go(0);