Browse Source

Merge pull request #1455 from openNAMU/dev

Dev
잉여개발기 (SPDV) 4 years ago
parent
commit
be8428ff29

+ 18 - 81
app.py

@@ -57,42 +57,7 @@ if setup_tool != 'init':
         setup_tool = 'init'
 
 if setup_tool != 'normal':
-    # Init-Create_DB
-    create_data = {}
-
-    # 폐지 예정 (data_set으로 통합)
-    create_data['data_set'] = ['doc_name', 'doc_rev', 'set_name', 'set_data']
-    
-    create_data['data'] = ['title', 'data', 'type']
-    create_data['history'] = ['id', 'title', 'data', 'date', 'ip', 'send', 'leng', 'hide', 'type']
-    create_data['rc'] = ['id', 'title', 'date', 'type']
-    create_data['acl'] = ['title', 'data', 'type']
-
-    # 개편 예정 (data_link로 변경)
-    create_data['back'] = ['title', 'link', 'type']
-
-    # 폐지 예정 (topic_set으로 통합) [가장 시급]
-    create_data['rd'] = ['title', 'sub', 'code', 'date', 'band', 'stop', 'agree', 'acl']
-    create_data['topic'] = ['id', 'data', 'date', 'ip', 'block', 'top', 'code']
-
-    # 폐지 예정 (user_set으로 통합)
-    create_data['rb'] = ['block', 'end', 'today', 'blocker', 'why', 'band', 'login', 'ongoing']
-    create_data['scan'] = ['user', 'title', 'type']
-
-    # 개편 예정 (wiki_set과 wiki_filter과 wiki_vote으로 변경)
-    create_data['other'] = ['name', 'data', 'coverage']
-    create_data['html_filter'] = ['html', 'kind', 'plus', 'plus_t']
-    create_data['vote'] = ['name', 'id', 'subject', 'data', 'user', 'type', 'acl']
-
-    # 개편 예정 (auth_list와 auth_log로 변경)
-    create_data['alist'] = ['name', 'acl']
-    create_data['re_admin'] = ['who', 'what', 'time']
-
-    # 개편 예정 (user_notice와 user_agent로 변경)
-    create_data['alarm'] = ['name', 'data', 'date']
-    create_data['ua_d'] = ['name', 'ip', 'ua', 'today', 'sub']
-
-    create_data['user_set'] = ['name', 'id', 'data']
+    create_data = get_db_table_list()
     for create_table in create_data:
         for create in ['test'] + create_data[create_table]:
             try:
@@ -375,50 +340,20 @@ def recent_block(name = 'Test', tool = 'all'):
     return recent_block_2(load_db.db_get(), name, tool)
 
 # Func-history
-@app.route('/recent_change')
-@app.route('/recent_changes')
-def recent_change(name = None):
-    return recent_change_2(load_db.db_get(), name, '')
-
-@app.route('/record/<name>')
-def recent_record(name = None):
-    return recent_change_2(load_db.db_get(), name, 'record')
-
-@app.route('/history/<everything:name>', methods = ['POST', 'GET'])
-def recent_history(name = None):
-    return recent_change_2(load_db.db_get(), name, 'history')
-
-@app.route('/history/tool/<int(signed = True):rev>/<everything:name>')
-def recent_history_tool(name = 'Test', rev = 1):
-    return recent_history_tool_2(load_db.db_get(), name, rev)
-
-@app.route('/history/delete/<int(signed = True):rev>/<everything:name>', methods = ['POST', 'GET'])
-def recent_history_delete(name = 'Test', rev = 1):
-    return recent_history_delete_2(load_db.db_get(), name, rev)
-
-@app.route('/history/hidden/<int(signed = True):rev>/<everything:name>')
-def recent_history_hidden(name = 'Test', rev = 1):
-    return recent_history_hidden_2(load_db.db_get(), name, rev)
-
-@app.route('/history/send/<int(signed = True):rev>/<everything:name>', methods = ['POST', 'GET'])
-def recent_history_send(name = 'Test', rev = 1):
-    return recent_history_send_2(load_db.db_get(), name, rev)
-
-@app.route('/history/reset/<everything:name>', methods = ['POST', 'GET'])
-def recent_history_reset(name = 'Test'):
-    return recent_history_reset_2(load_db.db_get(), name)
-
-@app.route('/history/add/<everything:name>', methods = ['POST', 'GET'])
-def recent_history_add(name = 'Test'):
-    return recent_history_add_2(load_db.db_get(), name)
+app.route('/recent_change')(recent_change)
+app.route('/recent_changes')(recent_change)
 
-@app.route('/record/reset/<name>', methods = ['POST', 'GET'])
-def recent_record_reset(name = 'Test'):
-    return recent_record_reset_2(load_db.db_get(), name)
+app.route('/record/<name>', defaults = { 'tool' : 'record' })(recent_change)
+app.route('/record/reset/<name>', methods = ['POST', 'GET'])(recent_record_reset)
+app.route('/record/topic/<name>')(recent_record_topic)
 
-@app.route('/record/topic/<name>')
-def recent_record_topic(name = 'Test'):
-    return recent_record_topic_2(load_db.db_get(), name)
+app.route('/history/<everything:name>', defaults = { 'tool' : 'history' }, methods = ['POST', 'GET'])(recent_change)
+app.route('/history_tool/<int(signed = True):rev>/<everything:name>')(recent_history_tool)
+app.route('/history_delete/<int(signed = True):rev>/<everything:name>', methods = ['POST', 'GET'])(recent_history_delete)
+app.route('/history_hidden/<int(signed = True):rev>/<everything:name>')(recent_history_hidden)
+app.route('/history_send/<int(signed = True):rev>/<everything:name>', methods = ['POST', 'GET'])(recent_history_send)
+app.route('/history_reset/<everything:name>', methods = ['POST', 'GET'])(recent_history_reset)
+app.route('/history_add/<everything:name>', methods = ['POST', 'GET'])(recent_history_add)
 
 # Func-view
 app.route('/xref/<everything:name>')(view_xref)
@@ -434,7 +369,7 @@ app.route('/down/<everything:name>')(view_down)
 
 # everything 다음에 추가 붙은 경우에 대해서 재검토 필요 (진행중)
 app.route('/w_rev/<int(signed = True):doc_rev>/<everything:name>')(view_read)
-app.route('/w_from/<everything:name>')(view_read)
+app.route('/w_from/<everything:name>', defaults = { 'do_type' : 'from' })(view_read)
 app.route('/w/<everything:name>')(view_read)
 
 app.route('/random')(main_func_random)
@@ -483,6 +418,8 @@ app.route('/change/key')(user_setting_key)
 app.route('/change/key/delete')(user_setting_key_delete)
 app.route('/change/pw', methods = ['POST', 'GET'])(user_setting_pw)
 app.route('/change/head', methods=['GET', 'POST'])(user_setting_head)
+app.route('/change/skin_set')(user_setting_skin_set)
+app.route('/change/skin_set/main')(user_setting_skin_set)
 
 app.route('/user')(user_info)
 app.route('/user/<name>')(user_info)
@@ -502,8 +439,8 @@ app.route('/star_doc', defaults = { 'tool' : 'star_doc' })(user_watch_list)
 app.route('/star_doc/<everything:name>', defaults = { 'tool' : 'star_doc' })(user_watch_list_name)
 
 # 하위 호환용 S
-app.route('/skin_set')(main_func_skin_set)
-app.route('/main_skin_set')(main_func_skin_set)
+# /change/skin_set
+app.route('/skin_set')(user_setting_skin_set)
 # 하위 호환용 E
 
 # 개편 보류중 S

+ 17 - 13
lang/en-US.json

@@ -22,8 +22,8 @@
         "port" : "Port",
         "restart" : "Restart",
         "shutdown" : "Shutdown",
-        "document_name" : "Document[s] name",
-        "discussion_name" : "Discussion[s] topic",
+        "document_name" : "Documents name",
+        "discussion_name" : "Discussions topic",
         "user_name" : "Username",
         "go" : "Go",
         "document" : "Document",
@@ -141,8 +141,8 @@
         "edit_filter_rule" : "Contents filter rule",
         "move_history" : "History of moveing",
         "other_tool" : "Other tools",
-        "admin_tool" : "Administrator[s] tools",
-        "check_user" : "Check user[s] login history",
+        "admin_tool" : "Administrators tools",
+        "check_user" : "Check users login history",
         "compare_target" : "Comparison target name",
         "authorize" : "Authorize",
         "indexing" : "Database Indexing",
@@ -175,8 +175,8 @@
         "edit_button_paragraph" : "Paragraph",
         "password_change" : "Change password",
         "email_change" : "Change email",
-        "acl_change" : "Change document[s] ACL",
-        "user_tool" : "User[s] tools",
+        "acl_change" : "Change documents ACL",
+        "user_tool" : "Users tools",
         "skin_info" : "Skin information",
         "closed_discussion" : "Closed discussions",
         "agreed_discussion" : "Agreed discussions",
@@ -218,7 +218,7 @@
         "2fa_password_change" : "Change 2FA password",
         "history_reset" : "Document history reset",
         "record_reset" : "User edit log reset",
-        "today_doc" : "Today[s] document",
+        "today_doc" : "Todays document",
         "send_edit" : "Modify reason",
         "password_instead_key" : "Authentication key",
         "key_change" : "Change key",
@@ -269,13 +269,13 @@
                 "edit_set" : "Edit-related settings",
                 "communication_set" : "Communication-related settings",
     
-                "wiki_name" : "Wiki[s] name",
-                "wiki_logo" : "Wiki[s] logo",
+                "wiki_name" : "Wikis name",
+                "wiki_logo" : "Wikis logo",
                 "main_page" : "Main page",
                 "bottom_text" : "License text",
                 "max_file_size" : "Max file size",
                 "backup_interval" : "Backup Cycles",
-                "wiki_skin" : "Wiki[s] default Skin",
+                "wiki_skin" : "Wikis default Skin",
                 "no_register" : "Disallow signing up",
                 "hide_ip" : "Hide IP address",
                 "wiki_host" : "Wiki host address",
@@ -293,6 +293,8 @@
                 "enable_comment_function" : "Using the comment function",
                 "enable_challenge_function" : "Using the challenge function",
                 "tls_method" : "TLS method",
+                "title_max_length" : "Documents title maximum length",
+                "title_topic_max_length" : "Discussions topic maximum length",
             "_comment_2.2.3_" : "Text",
                 "register_text" : "Terms of sign-up",
                 "non_login_alert" : "Non-login alert",
@@ -412,7 +414,7 @@
         "user_reset_sign" : "Your account information has changed like this.",
         "default_edit_help" : "Describe it here",
         "markup_enabled" : "Markup enabled",
-        "many_delete_help" : "Please write down the document[s] name one by one on the line.",
+        "many_delete_help" : "Please write down the documents name one by one on the line.",
         "sqlite_only" : "SQLite only",
         "approval_question_visible_only_when_approval_on" : "Approval questions are visible only when approval requirement is on",
         "msg_whatchlist_lmt": "You can add as many as",
@@ -427,7 +429,8 @@
             "no_login_error" : "You are not logged in.",
             "no_exist_user_error" : "The account does not exist.",
             "no_admin_block_error" : "You cannot block or check administrators.",
-            "skin_error" : "The skin you are using does not support individual settings.",
+            "error_skin_set" : "The skin you are using does not support individual settings.",
+            "error_skin_set_old" : "Some older skins may only work by using the old version link.",
             "same_id_exist_error" : "There are users using the same username.",
             "long_id_error" : "Username must be shorter than 20 characters.",
             "id_char_error" : "Only Korean letters and alphabets are allowed for Username.",
@@ -442,7 +445,7 @@
             "password_diffrent_error" : "Reconfirm password and input password are different.",
             "edit_filter_error" : "Censored by edit filter.",
             "file_name_error" : "Only English alphabets, Korean alphabets, spaces, underscore, and hyphens are allowed for the file name.",
-            "topic_long_error" : "The discussion[s] topic must not exceed 256 characters.",
+            "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.",
@@ -457,6 +460,7 @@
             "same_email_error" : "There are users using the same email.",
             "input_email_error" : "There is a problem with the input value.",
             "error_edit_send_request" : "Entering a reason is required.",
+            "error_title_length_too_long" : "Documents title or Discussion topic length is too long. Maximum number of characters : ",
         "_comment_3.2_" : "Warning",
             "http_warning" : "Warning: If you are not on HTTPS connection, your information can be leaked. The users themselves have responsibility to any problems that happen because of this.",
             "user_head_warning" : "User data will be deleted if you close the browser or when you sign in.",

+ 6 - 2
lang/ko-KR.json

@@ -159,7 +159,8 @@
     "wiki_skin": "위키 스킨",
     "admin_group": "관리자 그룹",
     "all": "전체",
-    "skin_error": "사용 중인 스킨은 스킨 설정 기능을 지원하지 않습니다.",
+    "error_skin_set": "사용 중인 스킨은 스킨 설정 기능을 지원하지 않습니다.",
+    "error_skin_set_old": "일부 오래된 스킨은 구버전 링크를 이용해야만 작동할 수도 있습니다.",
     "member": "가입자",
     "backlink": "역링크",
     "no_admin_block_error": "관리자를 검사하거나 차단할 수 없습니다.",
@@ -439,5 +440,8 @@
     "enable_comment_function": "댓글 기능 사용",
     "enable_challenge_function": "도전과제 기능 사용",
     "error_edit_send_request": "편집 사유가 필요합니다.",
-    "tls_method": "TLS 방식"
+    "tls_method": "TLS 방식",
+    "title_max_length": "문서 제목 최대 길이",
+    "title_topic_max_length": "토론 제목 최대 길이",
+    "error_title_length_too_long": "문서 제목이나 토론 제목의 길이가 너무 깁니다. 최대 글자 수 : "
 }

+ 3 - 0
route/edit.py

@@ -8,6 +8,9 @@ def edit(name = 'Test', name_load = 0, section = 0):
         if acl_check(name) == 1:
             return redirect('/raw_acl/' + url_pas(name))
         
+        if do_title_length_check(name) == 1:
+            return re_error('/error/38')
+        
         curs.execute(db_change("select id from history where title = ? order by id + 0 desc"), [name])
         doc_ver = curs.fetchall()
         doc_ver = doc_ver[0][0] if doc_ver else '0'

+ 3 - 0
route/edit_move.py

@@ -6,6 +6,9 @@ def edit_move(name):
 
         if acl_check(name) == 1:
             return re_error('/ban')
+        
+        if do_title_length_check(name) == 1:
+            return re_error('/error/38')
 
         if flask.request.method == 'POST':
             move_title = flask.request.form.get('title', 'test')

+ 15 - 2
route/main_func_setting_main.py

@@ -28,7 +28,9 @@ def main_func_setting_main(db_set):
             24 : ['enable_comment', ''],
             25 : ['enable_challenge', ''],
             26 : ['edit_bottom_compulsion', ''],
-            27 : ['http_select', 'http']
+            27 : ['http_select', 'http'],
+            28 : ['title_max_length', ''],
+            29 : ['title_topic_max_length', '']
         }
 
         if flask.request.method == 'POST':
@@ -207,9 +209,20 @@ def main_func_setting_main(db_set):
                         <span>''' + load_lang('slow_edit') + ' (' + load_lang('second') + ') (' + load_lang('off') + ''' : 0)</span>
                         <hr class="main_hr">
                         <input name="slow_edit" value="''' + html.escape(d_list[19]) + '''">
-                        
                         <hr class="main_hr">
+                        
                         <input type="checkbox" name="edit_bottom_compulsion" ''' + check_box_div[7] + '''> ''' + load_lang('edit_bottom_compulsion') + ''' (''' + load_lang('beta') + ''')
+                        <hr class="main_hr">
+                        
+                        <span>''' + load_lang('title_max_length') + ''' (''' + load_lang('beta') + ''')</span>
+                        <hr class="main_hr">
+                        <input name="title_max_length" value="''' + html.escape(d_list[28]) + '''">
+                        <hr class="main_hr">
+                        
+                        <span>''' + load_lang('title_topic_max_length') + ''' (''' + load_lang('not_working') + ''')</span>
+                        <hr class="main_hr">
+                        <input name="title_topic_max_length" value="''' + html.escape(d_list[29]) + '''">
+                        <hr class="main_hr">
 
                         <hr class="main_hr">
                         <button id="save" type="submit">''' + load_lang('save') + '''</button>

+ 170 - 169
route/recent_change.py

@@ -1,204 +1,205 @@
 from .tool.func import *
 
-def recent_change_2(conn, name, tool):
-    curs = conn.cursor()
-
-    if flask.request.method == 'POST':
-        return redirect(
-            '/diff' + 
-            '/' + flask.request.form.get('b', '1') +
-            '/' + flask.request.form.get('a', '1') +
-            '/' + url_pas(name)
-        )
-    else:
-        ban = ''
-        select = ''
-        sub = ''
-        admin_6 = admin_check(6)
-        admin = admin_check()
-        div = '''
-            <table id="main_table_set">
-                <tbody>
-                    <tr id="main_table_top_tr">
-        '''
-
-        num = int(number_check(flask.request.args.get('num', '1')))
-        sql_num = (num * 50 - 50) if num * 50 > 0 else 0
-
-        if name:
-            if tool == 'history':
-                sub += ' (' + load_lang('history') + ')'
-
-                div += '''
-                    <td id="main_table_width">''' + load_lang('version') + '''</td>
-                    <td id="main_table_width">''' + load_lang('editor') + '''</td>
-                    <td id="main_table_width">''' + load_lang('time') + '''</td>
-                '''
-
-                set_type = flask.request.args.get('set', 'normal')
-                set_type = '' if set_type == 'edit' else set_type
+def recent_change(name = None, tool = ''):
+    with get_db_connect() as conn:
+        curs = conn.cursor()
+
+        if flask.request.method == 'POST':
+            return redirect(
+                '/diff' + 
+                '/' + flask.request.form.get('b', '1') +
+                '/' + flask.request.form.get('a', '1') +
+                '/' + url_pas(name)
+            )
+        else:
+            ban = ''
+            select = ''
+            sub = ''
+            admin_6 = admin_check(6)
+            admin = admin_check()
+            div = '''
+                <table id="main_table_set">
+                    <tbody>
+                        <tr id="main_table_top_tr">
+            '''
 
-                if set_type != 'normal':
-                    curs.execute(db_change('' + \
-                        'select id, title, date, ip, send, leng, hide from history ' + \
-                        'where title = ? and type = ? ' + \
-                        'order by id + 0 desc ' + \
-                        "limit ?, 50" + \
-                    ''), [name, set_type, sql_num])
+            num = int(number_check(flask.request.args.get('num', '1')))
+            sql_num = (num * 50 - 50) if num * 50 > 0 else 0
+
+            if name:
+                if tool == 'history':
+                    sub += ' (' + load_lang('history') + ')'
+
+                    div += '''
+                        <td id="main_table_width">''' + load_lang('version') + '''</td>
+                        <td id="main_table_width">''' + load_lang('editor') + '''</td>
+                        <td id="main_table_width">''' + load_lang('time') + '''</td>
+                    '''
+
+                    set_type = flask.request.args.get('set', 'normal')
+                    set_type = '' if set_type == 'edit' else set_type
+
+                    if set_type != 'normal':
+                        curs.execute(db_change('' + \
+                            'select id, title, date, ip, send, leng, hide from history ' + \
+                            'where title = ? and type = ? ' + \
+                            'order by id + 0 desc ' + \
+                            "limit ?, 50" + \
+                        ''), [name, set_type, sql_num])
+                    else:
+                        curs.execute(db_change('' + \
+                            'select id, title, date, ip, send, leng, hide from history ' + \
+                            'where title = ? ' + \
+                            'order by id + 0 desc ' + \
+                            "limit ?, 50" + \
+                        ''), [name, sql_num])
+
+                    data_list = curs.fetchall()
                 else:
+                    div +=  '''
+                        <td id="main_table_width">''' + load_lang('document_name') + '''</td>
+                        <td id="main_table_width">''' + load_lang('editor') + '''</td>
+                        <td id="main_table_width">''' + load_lang('time') + '''</td>
+                    '''
+
                     curs.execute(db_change('' + \
                         'select id, title, date, ip, send, leng, hide from history ' + \
-                        'where title = ? ' + \
-                        'order by id + 0 desc ' + \
-                        "limit ?, 50" + \
+                        "where ip = ? order by date desc limit ?, 50" + \
                     ''), [name, sql_num])
-
-                data_list = curs.fetchall()
+                    data_list = curs.fetchall()
             else:
                 div +=  '''
                     <td id="main_table_width">''' + load_lang('document_name') + '''</td>
                     <td id="main_table_width">''' + load_lang('editor') + '''</td>
                     <td id="main_table_width">''' + load_lang('time') + '''</td>
                 '''
+                sub = ''
+                set_type = flask.request.args.get('set', 'normal')
+                set_type = '' if set_type == 'edit' else set_type
 
-                curs.execute(db_change('' + \
-                    'select id, title, date, ip, send, leng, hide from history ' + \
-                    "where ip = ? order by date desc limit ?, 50" + \
-                ''), [name, sql_num])
-                data_list = curs.fetchall()
-        else:
-            div +=  '''
-                <td id="main_table_width">''' + load_lang('document_name') + '''</td>
-                <td id="main_table_width">''' + load_lang('editor') + '''</td>
-                <td id="main_table_width">''' + load_lang('time') + '''</td>
-            '''
-            sub = ''
-            set_type = flask.request.args.get('set', 'normal')
-            set_type = '' if set_type == 'edit' else set_type
-
-            data_list = []
-            curs.execute(db_change('select id, title from rc where type = ? order by date desc'), [set_type])
-            for i in curs.fetchall():
-                curs.execute(db_change('select id, title, date, ip, send, leng, hide from history where id = ? and title = ?'), i)
-                data_list += curs.fetchall()
-
-        div += '</tr>'
-
-        all_ip = ip_pas([i[3] for i in data_list])
-        for data in data_list:
-            select += '<option value="' + data[0] + '">' + data[0] + '</option>'
-            send = data[4]
-
-            if re.search(r"\+", data[5]):
-                leng = '<span style="color:green;">(' + data[5] + ')</span>'
-            elif re.search(r"\-", data[5]):
-                leng = '<span style="color:red;">(' + data[5] + ')</span>'
-            else:
-                leng = '<span style="color:gray;">(' + data[5] + ')</span>'
+                data_list = []
+                curs.execute(db_change('select id, title from rc where type = ? order by date desc'), [set_type])
+                for i in curs.fetchall():
+                    curs.execute(db_change('select id, title, date, ip, send, leng, hide from history where id = ? and title = ?'), i)
+                    data_list += curs.fetchall()
 
-            ip = all_ip[data[3]]
-            m_tool = '<a href="/history/tool/' + data[0] + '/' + url_pas(data[1]) + '">(' + load_lang('tool') + ')</a>'
+            div += '</tr>'
 
-            style = ['', '']
-            date = data[2]
+            all_ip = ip_pas([i[3] for i in data_list])
+            for data in data_list:
+                select += '<option value="' + data[0] + '">' + data[0] + '</option>'
+                send = data[4]
 
-            if data[6] == 'O':
-                if admin == 1:
-                    style[0] = 'id="toron_color_grey"'
-                    style[1] = 'id="toron_color_grey"'
+                if re.search(r"\+", data[5]):
+                    leng = '<span style="color:green;">(' + data[5] + ')</span>'
+                elif re.search(r"\-", data[5]):
+                    leng = '<span style="color:red;">(' + data[5] + ')</span>'
                 else:
-                    ip = ''
-                    ban = ''
-                    date = ''
-                    send = ''
+                    leng = '<span style="color:gray;">(' + data[5] + ')</span>'
 
-                    style[0] = 'style="display: none;"'
-                    style[1] = 'id="toron_color_grey"'
+                ip = all_ip[data[3]]
+                m_tool = '<a href="/history_tool/' + data[0] + '/' + url_pas(data[1]) + '">(' + load_lang('tool') + ')</a>'
 
-            if tool == 'history':
-                title = '<a href="/w_rev/' + data[0] + '/' + url_pas(name) + '">r' + data[0] + '</a> '
-            else:
-                title = '<a href="/w/' + url_pas(data[1]) + '">' + html.escape(data[1]) + '</a> '
-                if int(data[0]) < 2:
-                    title += '<a href="/history/' + url_pas(data[1]) + '">(r' + data[0] + ')</a> '
+                style = ['', '']
+                date = data[2]
+
+                if data[6] == 'O':
+                    if admin == 1:
+                        style[0] = 'id="toron_color_grey"'
+                        style[1] = 'id="toron_color_grey"'
+                    else:
+                        ip = ''
+                        ban = ''
+                        date = ''
+                        send = ''
+
+                        style[0] = 'style="display: none;"'
+                        style[1] = 'id="toron_color_grey"'
+
+                if tool == 'history':
+                    title = '<a href="/w_rev/' + data[0] + '/' + url_pas(name) + '">r' + data[0] + '</a> '
                 else:
-                    title += '<a href="/diff/' + str(int(data[0]) - 1) + '/' + data[0] + '/' + url_pas(data[1]) + '">(r' + data[0] + ')</a> '
+                    title = '<a href="/w/' + url_pas(data[1]) + '">' + html.escape(data[1]) + '</a> '
+                    if int(data[0]) < 2:
+                        title += '<a href="/history/' + url_pas(data[1]) + '">(r' + data[0] + ')</a> '
+                    else:
+                        title += '<a href="/diff/' + str(int(data[0]) - 1) + '/' + data[0] + '/' + url_pas(data[1]) + '">(r' + data[0] + ')</a> '
+
+                div += '''
+                    <tr ''' + style[0] + '''>
+                        <td>''' + title + m_tool + ' ' + leng + '''</td>
+                        <td>''' + ip + ban + '''</td>
+                        <td>''' + date + '''</td>
+                    </tr>
+                    <tr ''' + style[1] + '''>
+                        <td class="send_content" colspan="3">
+                            ''' + (html.escape(send) if send != '' else '<br>') + '''
+                        </td>
+                    </tr>
+                '''
 
             div += '''
-                <tr ''' + style[0] + '''>
-                    <td>''' + title + m_tool + ' ' + leng + '''</td>
-                    <td>''' + ip + ban + '''</td>
-                    <td>''' + date + '''</td>
-                </tr>
-                <tr ''' + style[1] + '''>
-                    <td class="send_content" colspan="3">
-                        ''' + (html.escape(send) if send != '' else '<br>') + '''
-                    </td>
-                </tr>
+                    </tbody>
+                </table>
+                <script>send_render();</script>
             '''
 
-        div += '''
-                </tbody>
-            </table>
-            <script>send_render();</script>
-        '''
-
-        if name:
-            if tool == 'history':
+            if name:
+                if tool == 'history':
+                    div = '' + \
+                        '<a href="?set=normal">(' + load_lang('normal') + ')</a> ' + \
+                        '<a href="?set=edit">(' + load_lang('edit') + ')</a> ' + \
+                        '<a href="?set=move">(' + load_lang('move') + ')</a> ' + \
+                        '<a href="?set=delete">(' + load_lang('delete') + ')</a> ' + \
+                        '<a href="?set=revert">(' + load_lang('revert') + ')</a>' + \
+                        '<hr class="main_hr">' + div + \
+                    ''
+                    menu = [['w/' + url_pas(name), load_lang('return')]]
+
+                    if set_type == 'normal':
+                        div = '''
+                            <form method="post">
+                                <select name="a">''' + select + '''</select> <select name="b">''' + select + '''</select>
+                                <button type="submit">''' + load_lang('compare') + '''</button>
+                            </form>
+                            <hr class="main_hr">
+                        ''' + div
+
+                        if admin == 1:
+                            menu += [
+                                ['history_add/' + url_pas(name), load_lang('history_add')],
+                                ['history_reset/' + url_pas(name), load_lang('history_reset')]
+                            ]
+
+                    title = name
+                    div += next_fix('/history/' + url_pas(name) + '?tool=' + set_type + '&num=', num, data_list)
+                else:
+                    title = load_lang('edit_record')
+                    menu = [
+                        ['other', load_lang('other')], 
+                        ['user', load_lang('user')],
+                        ['record/reset/' + url_pas(name), load_lang('record_reset')]
+                    ]
+                    div += next_fix('/record/' + url_pas(name) + '?num=', num, data_list)
+            else:
                 div = '' + \
                     '<a href="?set=normal">(' + load_lang('normal') + ')</a> ' + \
                     '<a href="?set=edit">(' + load_lang('edit') + ')</a> ' + \
+                    '<a href="?set=user">(' + load_lang('user_document') + ')</a> ' + \
                     '<a href="?set=move">(' + load_lang('move') + ')</a> ' + \
                     '<a href="?set=delete">(' + load_lang('delete') + ')</a> ' + \
                     '<a href="?set=revert">(' + load_lang('revert') + ')</a>' + \
                     '<hr class="main_hr">' + div + \
                 ''
-                menu = [['w/' + url_pas(name), load_lang('return')]]
-                
-                if set_type == 'normal':
-                    div = '''
-                        <form method="post">
-                            <select name="a">''' + select + '''</select> <select name="b">''' + select + '''</select>
-                            <button type="submit">''' + load_lang('compare') + '''</button>
-                        </form>
-                        <hr class=\"main_hr\">
-                    ''' + div
 
-                    if admin == 1:
-                        menu += [
-                            ['history/add/' + url_pas(name), load_lang('history_add')],
-                            ['history/reset/' + url_pas(name), load_lang('history_reset')]
-                        ]
+                menu = 0
+                title = load_lang('recent_change')
 
-                title = name
-                div += next_fix('/history/' + url_pas(name) + '?tool=' + set_type + '&num=', num, data_list)
-            else:
-                title = load_lang('edit_record')
-                menu = [
-                    ['other', load_lang('other')], 
-                    ['user', load_lang('user')],
-                    ['record/reset/' + url_pas(name), load_lang('record_reset')]
-                ]
-                div += next_fix('/record/' + url_pas(name) + '?num=', num, data_list)
-        else:
-            div = '' + \
-                '<a href="?set=normal">(' + load_lang('normal') + ')</a> ' + \
-                '<a href="?set=edit">(' + load_lang('edit') + ')</a> ' + \
-                '<a href="?set=user">(' + load_lang('user_document') + ')</a> ' + \
-                '<a href="?set=move">(' + load_lang('move') + ')</a> ' + \
-                '<a href="?set=delete">(' + load_lang('delete') + ')</a> ' + \
-                '<a href="?set=revert">(' + load_lang('revert') + ')</a>' + \
-                '<hr class="main_hr">' + div + \
-            ''
-
-            menu = 0
-            title = load_lang('recent_change')
-
-        if sub == '':
-            sub = 0
-
-        return easy_minify(flask.render_template(skin_check(),
-            imp = [title, wiki_set(), wiki_custom(), wiki_css([sub, 0])],
-            data = div,
-            menu = menu
-        ))
+            if sub == '':
+                sub = 0
+
+            return easy_minify(flask.render_template(skin_check(),
+                imp = [title, wiki_set(), wiki_custom(), wiki_css([sub, 0])],
+                data = div,
+                menu = menu
+            ))

+ 43 - 42
route/recent_history_add.py

@@ -1,51 +1,52 @@
 from .tool.func import *
 
-def recent_history_add_2(conn, name):
-    curs = conn.cursor()
+def recent_history_add(name = 'Test'):
+    with get_db_connect() as conn:
+        curs = conn.cursor()
 
-    ip = ip_check()
-    if admin_check() != 1:
-        return re_error('/ban')
+        ip = ip_check()
+        if admin_check() != 1:
+            return re_error('/ban')
 
-    if flask.request.method == 'POST':
-        admin_check(None, 'history_add (' + name + ')')
+        if flask.request.method == 'POST':
+            admin_check(None, 'history_add (' + name + ')')
 
-        today = get_time()
-        content = flask.request.form.get('content', '')
-        leng = '+' + str(len(content))
+            today = get_time()
+            content = flask.request.form.get('content', '')
+            leng = '+' + str(len(content))
 
-        history_plus(
-            name,
-            content,
-            today,
-            'Add:' + flask.request.form.get('get_ip', ''),
-            flask.request.form.get('send', ''),
-            leng,
-            t_check = 'add',
-            mode = 'add'
-        )
+            history_plus(
+                name,
+                content,
+                today,
+                'Add:' + flask.request.form.get('get_ip', ''),
+                flask.request.form.get('send', ''),
+                leng,
+                t_check = 'add',
+                mode = 'add'
+            )
 
-        conn.commit()
+            conn.commit()
 
-        return redirect('/history/' + url_pas(name))
-    else:
-        return easy_minify(flask.render_template(skin_check(),
-            imp = [load_lang('history_add'), wiki_set(), wiki_custom(), wiki_css(['(' + name + ')', 0])],
-            data = '''
-                <form method="post">
-                    <script>do_stop_exit();</script>
-                    ''' + edit_button() + '''
-                    <textarea rows="25" id="content" name="content"></textarea>
+            return redirect('/history/' + url_pas(name))
+        else:
+            return easy_minify(flask.render_template(skin_check(),
+                imp = [load_lang('history_add'), wiki_set(), wiki_custom(), wiki_css(['(' + name + ')', 0])],
+                data = '''
+                    <form method="post">
+                        <script>do_stop_exit();</script>
+                        ''' + edit_button() + '''
+                        <textarea rows="25" id="content" name="content"></textarea>
+                        <hr class="main_hr">
+                        <input placeholder="''' + load_lang('why') + '''" name="send" type="text">
+                        <hr class="main_hr">
+                        <input placeholder="''' + load_lang('name') + '''" name="get_ip" type="text">
+                        <hr class="main_hr">
+                        <button id="save" type="submit" onclick="go_save_zone = 1;">''' + load_lang('save') + '''</button>
+                        <button id="preview" type="button" onclick="load_preview(\'''' + url_pas(name) + '\')">' + load_lang('preview') + '''</button>
+                    </form>
                     <hr class="main_hr">
-                    <input placeholder="''' + load_lang('why') + '''" name="send" type="text">
-                    <hr class="main_hr">
-                    <input placeholder="''' + load_lang('name') + '''" name="get_ip" type="text">
-                    <hr class="main_hr">
-                    <button id="save" type="submit" onclick="go_save_zone = 1;">''' + load_lang('save') + '''</button>
-                    <button id="preview" type="button" onclick="load_preview(\'''' + url_pas(name) + '\')">' + load_lang('preview') + '''</button>
-                </form>
-                <hr class="main_hr">
-                <div id="see_preview"></div>
-            ''',
-            menu = [['history/' + url_pas(name), load_lang('return')]]
-        ))
+                    <div id="see_preview"></div>
+                ''',
+                menu = [['history/' + url_pas(name), load_lang('return')]]
+            ))

+ 23 - 22
route/recent_history_delete.py

@@ -1,29 +1,30 @@
 from .tool.func import *
 
-def recent_history_delete_2(conn, name, rev):
-    curs = conn.cursor()
+def recent_history_delete(name = 'Test', rev = 1):
+    with get_db_connect() as conn:
+        curs = conn.cursor()
 
-    num = str(rev)
+        num = str(rev)
 
-    if admin_check() != 1:
-        return re_error('/error/3')
+        if admin_check() != 1:
+            return re_error('/error/3')
 
-    if flask.request.method == 'POST':
-        admin_check(None, 'history delete ' + name + ' r' + num)
+        if flask.request.method == 'POST':
+            admin_check(None, 'history delete ' + name + ' r' + num)
 
-        curs.execute(db_change("delete from history where id = ? and title = ?"), [num, name])
-        conn.commit()
+            curs.execute(db_change("delete from history where id = ? and title = ?"), [num, name])
+            conn.commit()
 
-        return redirect('/history/' + url_pas(name))
-    else:
-        return easy_minify(flask.render_template(skin_check(),
-            imp = [name, wiki_set(), wiki_custom(), wiki_css(['(' + load_lang('history_delete') + ') (r' + num + ')', 0])],
-            data = '''
-                <form method="post">
-                    <span>''' + load_lang('history_delete_warning') + '''</span>
-                    <hr class="main_hr">
-                    <button type="submit">''' + load_lang('delete') + '''</button>
-                </form>
-            ''',
-            menu = [['history/' + url_pas(name), load_lang('return')]]
-        ))
+            return redirect('/history/' + url_pas(name))
+        else:
+            return easy_minify(flask.render_template(skin_check(),
+                imp = [name, wiki_set(), wiki_custom(), wiki_css(['(' + load_lang('history_delete') + ') (r' + num + ')', 0])],
+                data = '''
+                    <form method="post">
+                        <span>''' + load_lang('history_delete_warning') + '''</span>
+                        <hr class="main_hr">
+                        <button type="submit">''' + load_lang('delete') + '''</button>
+                    </form>
+                ''',
+                menu = [['history/' + url_pas(name), load_lang('return')]]
+            ))

+ 13 - 12
route/recent_history_hidden.py

@@ -1,17 +1,18 @@
 from .tool.func import *
 
-def recent_history_hidden_2(conn, name, rev):
-    curs = conn.cursor()
-    
-    num = str(rev)
+def recent_history_hidden(name = 'Test', rev = 1):
+    with get_db_connect() as conn:
+        curs = conn.cursor()
 
-    if admin_check(6, 'history_hidden (' + name + '#' + num + ')') == 1:
-        curs.execute(db_change("select title from history where title = ? and id = ? and hide = 'O'"), [name, num])
-        if curs.fetchall():
-            curs.execute(db_change("update history set hide = '' where title = ? and id = ?"), [name, num])
-        else:
-            curs.execute(db_change("update history set hide = 'O' where title = ? and id = ?"), [name, num])
+        num = str(rev)
 
-        conn.commit()
+        if admin_check(6, 'history_hidden (' + name + '#' + num + ')') == 1:
+            curs.execute(db_change("select title from history where title = ? and id = ? and hide = 'O'"), [name, num])
+            if curs.fetchall():
+                curs.execute(db_change("update history set hide = '' where title = ? and id = ?"), [name, num])
+            else:
+                curs.execute(db_change("update history set hide = 'O' where title = ? and id = ?"), [name, num])
 
-    return redirect('/history/' + url_pas(name))
+            conn.commit()
+
+        return redirect('/history/' + url_pas(name))

+ 22 - 21
route/recent_history_reset.py

@@ -1,27 +1,28 @@
 from .tool.func import *
 
-def recent_history_reset_2(conn, name):
-    curs = conn.cursor()
+def recent_history_reset(name = 'Test'):
+    with get_db_connect() as conn:
+        curs = conn.cursor()
 
-    if admin_check() != 1:
-        return re_error('/error/3')
+        if admin_check() != 1:
+            return re_error('/error/3')
 
-    if flask.request.method == 'POST':
-        admin_check(None, 'history reset ' + name)
+        if flask.request.method == 'POST':
+            admin_check(None, 'history reset ' + name)
 
-        curs.execute(db_change("delete from history where title = ?"), [name])
-        conn.commit()
+            curs.execute(db_change("delete from history where title = ?"), [name])
+            conn.commit()
 
-        return redirect('/history/' + url_pas(name))
-    else:
-        return easy_minify(flask.render_template(skin_check(),
-            imp = [name, wiki_set(), wiki_custom(), wiki_css(['(' + load_lang('history_reset') + ')', 0])],
-            data = '''
-                <form method="post">
-                    <span>''' + load_lang('history_delete_warning') + '''</span>
-                    <hr class="main_hr">
-                    <button type="submit">''' + load_lang('reset') + '''</button>
-                </form>
-            ''',
-            menu = [['history/' + url_pas(name), load_lang('return')]]
-        ))
+            return redirect('/history/' + url_pas(name))
+        else:
+            return easy_minify(flask.render_template(skin_check(),
+                imp = [name, wiki_set(), wiki_custom(), wiki_css(['(' + load_lang('history_reset') + ')', 0])],
+                data = '''
+                    <form method="post">
+                        <span>''' + load_lang('history_delete_warning') + '''</span>
+                        <hr class="main_hr">
+                        <button type="submit">''' + load_lang('reset') + '''</button>
+                    </form>
+                ''',
+                menu = [['history/' + url_pas(name), load_lang('return')]]
+            ))

+ 43 - 42
route/recent_history_send.py

@@ -1,45 +1,46 @@
 from .tool.func import *
 
-def recent_history_send_2(conn, name, rev):
-    curs = conn.cursor()
-
-    num = str(rev)
-    
-    if admin_check() != 1:
-        return re_error('/error/3')
-
-    if flask.request.method == 'POST':
-        admin_check(None, 'send edit ' + name + ' r' + num)
-
-        curs.execute(db_change("select send from history where title = ? and id = ?"), [name, num])
-        if curs.fetchall():
-            curs.execute(db_change("update history set send = ? where title = ? and id = ?"), [
-                flask.request.form.get('send', ''),
-                name, 
-                num
-            ])
-
-        conn.commit()
-
-        return redirect('/history/' + url_pas(name))
-    else:
-        curs.execute(db_change("select send from history where title = ? and id = ?"), [name, num])
-        send = curs.fetchall()
-        if send:
-            send = send[0][0]
-        
-            return easy_minify(flask.render_template(skin_check(),
-                imp = [name, wiki_set(), wiki_custom(), wiki_css(['(' + load_lang('send_edit') + ') (r' + num + ')', 0])],
-                data = '''
-                    <form method="post">
-                        <span>''' + load_lang('history_delete_warning') + '''</span>
-                        <hr class="main_hr">
-                        <input value="''' + html.escape(send) + '''" name="send">
-                        <hr class="main_hr">
-                        <button type="submit">''' + load_lang('edit') + '''</button>
-                    </form>
-                ''',
-                menu = [['history/' + url_pas(name), load_lang('return')]]
-            ))
+def recent_history_send(name = 'Test', rev = 1):
+    with get_db_connect() as conn:
+        curs = conn.cursor()
+
+        num = str(rev)
+
+        if admin_check() != 1:
+            return re_error('/error/3')
+
+        if flask.request.method == 'POST':
+            admin_check(None, 'send edit ' + name + ' r' + num)
+
+            curs.execute(db_change("select send from history where title = ? and id = ?"), [name, num])
+            if curs.fetchall():
+                curs.execute(db_change("update history set send = ? where title = ? and id = ?"), [
+                    flask.request.form.get('send', ''),
+                    name, 
+                    num
+                ])
+
+            conn.commit()
+
+            return redirect('/history/' + url_pas(name))
         else:
-            return redirect('/history/' + url_pas(name))
+            curs.execute(db_change("select send from history where title = ? and id = ?"), [name, num])
+            send = curs.fetchall()
+            if send:
+                send = send[0][0]
+
+                return easy_minify(flask.render_template(skin_check(),
+                    imp = [name, wiki_set(), wiki_custom(), wiki_css(['(' + load_lang('send_edit') + ') (r' + num + ')', 0])],
+                    data = '''
+                        <form method="post">
+                            <span>''' + load_lang('history_delete_warning') + '''</span>
+                            <hr class="main_hr">
+                            <input value="''' + html.escape(send) + '''" name="send">
+                            <hr class="main_hr">
+                            <button type="submit">''' + load_lang('edit') + '''</button>
+                        </form>
+                    ''',
+                    menu = [['history/' + url_pas(name), load_lang('return')]]
+                ))
+            else:
+                return redirect('/history/' + url_pas(name))

+ 47 - 46
route/recent_history_tool.py

@@ -1,51 +1,52 @@
 from .tool.func import *
 
-def recent_history_tool_2(conn, name, rev):
-    curs = conn.cursor()
-
-    num = str(rev)
-
-    data = '' + \
-        '<h2>' + load_lang('tool') + '</h2>' + \
-        '<ul class="inside_ul">' + \
-            '<li><a href="/raw_rev/' + num + '/' + url_pas(name) + '">' + load_lang('raw') + '</a></li>' + \
-    ''
-
-    data += '<li><a href="/revert/' + num + '/' + url_pas(name) + '">' + load_lang('revert') + ' | r' + num + '</a></li>'
-    if rev - 1 > 0:
-        data += '<li><a href="/revert/' + str(rev - 1) + '/' + url_pas(name) + '">' + load_lang('revert') + ' | r' + str(rev - 1) + '</a></li>'
-    
-    if rev - 1 > 0:
-        data += '<li><a href="/diff/' + str(rev - 1) + '/' + num + '/' + url_pas(name) + '">' + load_lang('compare') + '</a></li>'
-
-    data += '<li><a href="/history/' + url_pas(name) + '">' + load_lang('history') + '</a></li>'
-    data += '</ul>'
-    
-    if admin_check(6) == 1:
-        data += '<h3>admin</h3>'
-        data += '<ul class="inside_ul">'
-        curs.execute(db_change('' + \
-            'select title from history ' + \
-            'where title = ? and id = ? and hide = "O"' + \
-        ''), [name, num])
-        data += '<li><a href="/history/hidden/' + num + '/' + url_pas(name) + '">'
-        if curs.fetchall():
-            data += load_lang('hide_release') 
-        else:
-            data += load_lang('hide')
-            
-        data += '</a></li>'
-        data += '</ul>'
+def recent_history_tool(name = 'Test', rev = 1):
+    with get_db_connect() as conn:
+        curs = conn.cursor()
+
+        num = str(rev)
+
+        data = '' + \
+            '<h2>' + load_lang('tool') + '</h2>' + \
+            '<ul class="inside_ul">' + \
+                '<li><a href="/raw_rev/' + num + '/' + url_pas(name) + '">' + load_lang('raw') + '</a></li>' + \
+        ''
+
+        data += '<li><a href="/revert/' + num + '/' + url_pas(name) + '">' + load_lang('revert') + ' | r' + num + '</a></li>'
+        if rev - 1 > 0:
+            data += '<li><a href="/revert/' + str(rev - 1) + '/' + url_pas(name) + '">' + load_lang('revert') + ' | r' + str(rev - 1) + '</a></li>'
 
-    if admin_check() == 1:
-        data += '<h3>owner</h3>'
-        data += '<ul class="inside_ul">'
-        data += '<li><a href="/history/delete/' + num + '/' + url_pas(name) + '">' + load_lang('history_delete') + '</li>'
-        data += '<li><a href="/history/send/' + num + '/' + url_pas(name) + '">' + load_lang('send_edit') + '</li>'
+        if rev - 1 > 0:
+            data += '<li><a href="/diff/' + str(rev - 1) + '/' + num + '/' + url_pas(name) + '">' + load_lang('compare') + '</a></li>'
+
+        data += '<li><a href="/history/' + url_pas(name) + '">' + load_lang('history') + '</a></li>'
         data += '</ul>'
 
-    return easy_minify(flask.render_template(skin_check(),
-        imp = [name, wiki_set(), wiki_custom(), wiki_css(['(r' + num + ')', 0])],
-        data = data,
-        menu = [['history/' + url_pas(name), load_lang('return')]]
-    ))
+        if admin_check(6) == 1:
+            data += '<h3>admin</h3>'
+            data += '<ul class="inside_ul">'
+            curs.execute(db_change('' + \
+                'select title from history ' + \
+                'where title = ? and id = ? and hide = "O"' + \
+            ''), [name, num])
+            data += '<li><a href="/history_hidden/' + num + '/' + url_pas(name) + '">'
+            if curs.fetchall():
+                data += load_lang('hide_release') 
+            else:
+                data += load_lang('hide')
+
+            data += '</a></li>'
+            data += '</ul>'
+
+        if admin_check() == 1:
+            data += '<h3>owner</h3>'
+            data += '<ul class="inside_ul">'
+            data += '<li><a href="/history_delete/' + num + '/' + url_pas(name) + '">' + load_lang('history_delete') + '</li>'
+            data += '<li><a href="/history_send/' + num + '/' + url_pas(name) + '">' + load_lang('send_edit') + '</li>'
+            data += '</ul>'
+
+        return easy_minify(flask.render_template(skin_check(),
+            imp = [name, wiki_set(), wiki_custom(), wiki_css(['(r' + num + ')', 0])],
+            data = data,
+            menu = [['history/' + url_pas(name), load_lang('return')]]
+        ))

+ 22 - 21
route/recent_record_reset.py

@@ -1,27 +1,28 @@
 from .tool.func import *
 
-def recent_record_reset_2(conn, name):
-    curs = conn.cursor()
+def recent_record_reset(name = 'Test'):
+    with get_db_connect() as conn:
+        curs = conn.cursor()
 
-    if admin_check() != 1:
-        return re_error('/error/3')
+        if admin_check() != 1:
+            return re_error('/error/3')
 
-    if flask.request.method == 'POST':
-        admin_check(None, 'record reset ' + name)
+        if flask.request.method == 'POST':
+            admin_check(None, 'record reset ' + name)
 
-        curs.execute(db_change("delete from history where ip = ?"), [name])
-        conn.commit()
+            curs.execute(db_change("delete from history where ip = ?"), [name])
+            conn.commit()
 
-        return redirect('/record/' + url_pas(name))
-    else:
-        return easy_minify(flask.render_template(skin_check(),
-            imp = [name, wiki_set(), wiki_custom(), wiki_css(['(' + load_lang('record_reset') + ')', 0])],
-            data = '''
-                <form method="post">
-                    <span>''' + load_lang('history_delete_warning') + '''</span>
-                    <hr class="main_hr">
-                    <button type="submit">''' + load_lang('reset') + '''</button>
-                </form>
-            ''',
-            menu = [['record/' + url_pas(name), load_lang('return')]]
-        ))
+            return redirect('/record/' + url_pas(name))
+        else:
+            return easy_minify(flask.render_template(skin_check(),
+                imp = [name, wiki_set(), wiki_custom(), wiki_css(['(' + load_lang('record_reset') + ')', 0])],
+                data = '''
+                    <form method="post">
+                        <span>''' + load_lang('history_delete_warning') + '''</span>
+                        <hr class="main_hr">
+                        <button type="submit">''' + load_lang('reset') + '''</button>
+                    </form>
+                ''',
+                menu = [['record/' + url_pas(name), load_lang('return')]]
+            ))

+ 47 - 46
route/recent_record_topic.py

@@ -1,48 +1,49 @@
 from .tool.func import *
 
-def recent_record_topic_2(conn, name):
-    curs = conn.cursor()
-
-    num = int(number_check(flask.request.args.get('num', '1')))
-    sql_num = (num * 50 - 50) if num * 50 > 0 else 0
-
-    div = '''
-        <table id="main_table_set">
-            <tr id="main_table_top_tr">
-                <td id="main_table_width">''' + load_lang('discussion_name') + '''</td>
-                <td id="main_table_width">''' + load_lang('writer') + '''</td>
-                <td id="main_table_width">''' + load_lang('time') + '''</td>
-            </tr>
-    '''
-    sub = '(' + html.escape(name) + ')'
-    pas_name = ip_pas(name)
-
-    curs.execute(db_change("select code, id, date from topic where ip = ? order by date desc limit ?, 50"), [name, sql_num])
-    data_list = curs.fetchall()
-    for data in data_list:
-        title = html.escape(data[0])
-
-        curs.execute(db_change("select title, sub from rd where code = ?"), [data[0]])
-        other_data = curs.fetchall()
-        
-        div += '' + \
-            '<tr>' + \
-                '<td>' + \
-                    '<a href="/thread/' + data[0] + '#' + data[1] + '">' + other_data[0][1] + '#' + data[1] + '</a> (' + other_data[0][0] + ')' + \
-                '</td>' + \
-                '<td>' + pas_name + '</td>' + \
-                '<td>' + data[2] + '</td>' + \
-            '</tr>' + \
-        ''
-
-    div += '</table>'
-    div += next_fix('/record/topic/' + url_pas(name) + '?num=', num, data_list)
-    
-    return easy_minify(flask.render_template(skin_check(),
-        imp = [load_lang('discussion_record'), wiki_set(), wiki_custom(), wiki_css([sub, 0])],
-        data = div,
-        menu = [
-            ['other', load_lang('other')], 
-            ['user', load_lang('user')]
-        ]
-    ))
+def recent_record_topic(name = 'Test'):
+    with get_db_connect() as conn:
+        curs = conn.cursor()
+
+        num = int(number_check(flask.request.args.get('num', '1')))
+        sql_num = (num * 50 - 50) if num * 50 > 0 else 0
+
+        div = '''
+            <table id="main_table_set">
+                <tr id="main_table_top_tr">
+                    <td id="main_table_width">''' + load_lang('discussion_name') + '''</td>
+                    <td id="main_table_width">''' + load_lang('writer') + '''</td>
+                    <td id="main_table_width">''' + load_lang('time') + '''</td>
+                </tr>
+        '''
+        sub = '(' + html.escape(name) + ')'
+        pas_name = ip_pas(name)
+
+        curs.execute(db_change("select code, id, date from topic where ip = ? order by date desc limit ?, 50"), [name, sql_num])
+        data_list = curs.fetchall()
+        for data in data_list:
+            title = html.escape(data[0])
+
+            curs.execute(db_change("select title, sub from rd where code = ?"), [data[0]])
+            other_data = curs.fetchall()
+
+            div += '' + \
+                '<tr>' + \
+                    '<td>' + \
+                        '<a href="/thread/' + data[0] + '#' + data[1] + '">' + other_data[0][1] + '#' + data[1] + '</a> (' + other_data[0][0] + ')' + \
+                    '</td>' + \
+                    '<td>' + pas_name + '</td>' + \
+                    '<td>' + data[2] + '</td>' + \
+                '</tr>' + \
+            ''
+
+        div += '</table>'
+        div += next_fix('/record/topic/' + url_pas(name) + '?num=', num, data_list)
+
+        return easy_minify(flask.render_template(skin_check(),
+            imp = [load_lang('discussion_record'), wiki_set(), wiki_custom(), wiki_css([sub, 0])],
+            data = div,
+            menu = [
+                ['other', load_lang('other')], 
+                ['user', load_lang('user')]
+            ]
+        ))

+ 92 - 23
route/tool/func.py

@@ -66,7 +66,7 @@ else:
 print('----')
 
 # Init-Load
-from .func_mark import *
+from .func_render import *
 
 from diff_match_patch import diff_match_patch
 
@@ -130,7 +130,7 @@ def get_init_set_list(need = 'all'):
             'display' : 'Encryption method',
             'require' : 'select',
             'default' : 'sha3',
-            'list' : ['sha3', 'sha256']
+            'list' : ['sha3', 'sha3-512']
         }
     }
     
@@ -353,6 +353,46 @@ class class_check_json:
         
         return self.data_db_set
 
+def get_db_table_list():
+    # Init-Create_DB
+    create_data = {}
+
+    # 폐지 예정 (data_set으로 통합)
+    create_data['data_set'] = ['doc_name', 'doc_rev', 'set_name', 'set_data']
+    
+    create_data['data'] = ['title', 'data', 'type']
+    create_data['history'] = ['id', 'title', 'data', 'date', 'ip', 'send', 'leng', 'hide', 'type']
+    create_data['rc'] = ['id', 'title', 'date', 'type']
+    create_data['acl'] = ['title', 'data', 'type']
+
+    # 개편 예정 (data_link로 변경)
+    create_data['back'] = ['title', 'link', 'type']
+
+    # 폐지 예정 (topic_set으로 통합) [가장 시급]
+    create_data['rd'] = ['title', 'sub', 'code', 'date', 'band', 'stop', 'agree', 'acl']
+    create_data['topic'] = ['id', 'data', 'date', 'ip', 'block', 'top', 'code']
+
+    # 폐지 예정 (user_set으로 통합)
+    create_data['rb'] = ['block', 'end', 'today', 'blocker', 'why', 'band', 'login', 'ongoing']
+    create_data['scan'] = ['user', 'title', 'type']
+
+    # 개편 예정 (wiki_set과 wiki_filter과 wiki_vote으로 변경)
+    create_data['other'] = ['name', 'data', 'coverage']
+    create_data['html_filter'] = ['html', 'kind', 'plus', 'plus_t']
+    create_data['vote'] = ['name', 'id', 'subject', 'data', 'user', 'type', 'acl']
+
+    # 개편 예정 (auth_list와 auth_log로 변경)
+    create_data['alist'] = ['name', 'acl']
+    create_data['re_admin'] = ['who', 'what', 'time']
+
+    # 개편 예정 (user_notice와 user_agent로 변경)
+    create_data['alarm'] = ['name', 'data', 'date']
+    create_data['ua_d'] = ['name', 'ip', 'ua', 'today', 'sub']
+
+    create_data['user_set'] = ['name', 'id', 'data']
+    
+    return create_data
+
 def update(ver_num, set_data):
     curs = conn.cursor()
 
@@ -588,7 +628,13 @@ def update(ver_num, set_data):
                 curs.execute(db_change(
                     "update other set data = '' where name = 'domain'"
                 ))
-    
+
+    if ver_num < 3500107:
+        db_table_list = get_db_table_list()
+        for for_a in db_table_list:
+            for for_b in db_table_list[for_a]:
+                curs.execute(db_change("update " + for_a + " set " + for_b + " = '' where " + for_b + " is null"))
+
     conn.commit()
     
     # 아이피 상태인 이메일 제거 예정
@@ -811,22 +857,20 @@ def ip_warning():
     return text_data
     
 # Func-login    
-def pw_encode(data, type_d = ''):
+def pw_encode(data, db_data = ''):
     curs = conn.cursor()
 
-    if type_d == '':
+    if db_data == '':
         curs.execute(db_change('select data from other where name = "encode"'))
-        set_data = curs.fetchall()
-
-        type_d = set_data[0][0]
+        db_data = curs.fetchall()
+        db_data = db_data[0][0] if db_data else 'sha3'
 
-    if type_d == 'sha256':
+    if db_data == 'sha256':
         return hashlib.sha256(bytes(data, 'utf-8')).hexdigest()
-    else:
-        if sys.version_info < (3, 6):
-            return sha3.sha3_256(bytes(data, 'utf-8')).hexdigest()
-        else:
-            return hashlib.sha3_256(bytes(data, 'utf-8')).hexdigest()
+    elif db_data == 'sha3-512':
+        return hashlib.sha3_512(bytes(data, 'utf-8')).hexdigest()
+    else: # type_d == 'sha3'
+        return hashlib.sha3_256(bytes(data, 'utf-8')).hexdigest()
 
 def pw_check(data, data2, type_d = 'no', id_d = ''):
     curs = conn.cursor()
@@ -1788,6 +1832,18 @@ def do_edit_filter(data):
 
     return 0
 
+def do_title_length_check(name):
+    curs = conn.cursor()
+    
+    curs.execute(db_change('select data from other where name = "title_max_length"'))
+    db_data = curs.fetchall()
+    if db_data and db_data[0][0] != '':
+        db_data = int(number_check(db_data[0][0]))
+        if len(name) > db_data:        
+            return 1
+    
+    return 0
+
 # Func-insert
 def add_alarm(who, context):
     curs = conn.cursor()
@@ -1921,7 +1977,7 @@ def rd_plus(topic_num, date, name = None, sub = None):
         curs.execute(db_change("update rd set date = ? where code = ?"), [date, topic_num])
     else:
         curs.execute(db_change(
-            "insert into rd (title, sub, code, date) values (?, ?, ?, ?)"
+            "insert into rd (title, sub, code, date, band, stop, agree, acl) values (?, ?, ?, ?, '', '', '', '')"
         ), [name, sub, topic_num, date])
 
     conn.commit()
@@ -2038,7 +2094,7 @@ def re_error(data):
         elif num == 4:
             data = load_lang('no_admin_block_error')
         elif num == 5:
-            data = load_lang('skin_error')
+            data = load_lang('error_skin_set')
         elif num == 6:
             data = load_lang('same_id_exist_error')
         elif num == 7:
@@ -2077,9 +2133,9 @@ def re_error(data):
             data = load_lang('regex_error')
         elif num == 24:
             curs.execute(db_change("select data from other where name = 'slow_edit'"))
-            slow_edit = curs.fetchall()
-            slow_edit = '' if not slow_edit else slow_edit[0][0]
-            data = load_lang('fast_edit_error') + slow_edit
+            db_data = curs.fetchall()
+            db_data = '' if not db_data else db_data[0][0]
+            data = load_lang('fast_edit_error') + db_data
         elif num == 25:
             data = load_lang('too_many_dec_error')
         elif num == 26:
@@ -2102,17 +2158,30 @@ def re_error(data):
             data = load_lang('input_email_error')
         elif num == 37:
             data = load_lang('error_edit_send_request')
+        elif num == 38:
+            curs.execute(db_change("select data from other where name = 'title_max_length'"))
+            db_data = curs.fetchall()
+            db_data = '' if not db_data else db_data[0][0]
+            data = load_lang('error_title_length_too_long') + db_data
+        elif num == 39:
+            curs.execute(db_change("select data from other where name = 'title_topic_max_length'"))
+            db_data = curs.fetchall()
+            db_data = '' if not db_data else db_data[0][0]
+            data = load_lang('error_title_length_too_long') + db_data
         else:
             data = '???'
 
         if num == 5:
-            if flask.request.path != '/main_skin_set':
+            if not flask.request.path in ('/main_skin_set', '/change/skin_set/main'):
+                if flask.request.path != '/skin_set':
+                    data += '<br>' + load_lang('error_skin_set_old') + ' <a href="/skin_set">(' + load_lang('go') + ')</a>'
+
                 title = load_lang('skin_set')
-                tool = [['main_skin_set', load_lang('main_skin_set')]]
+                tool = [['change', load_lang('user_setting')]]
                 load_skin_set = ''
             else:
                 title = load_lang('main_skin_set')
-                tool = [['skin_set', load_lang('skin_set')]]
+                tool = [['change', load_lang('user_setting')]]
                 load_skin_set = '<script>main_css_skin_set();</script>'
         
             return easy_minify(flask.render_template(skin_check(),
@@ -2121,7 +2190,7 @@ def re_error(data):
                     '<div id="main_skin_set">' + \
                         '<h2>' + load_lang('error') + '</h2>' + \
                         '<ul class="inside_ul">' + \
-                            '<li>' + data + ' <a href="/main_skin_set">(' + load_lang('main_skin_set') + ')</a></li>' + \
+                            '<li>' + data + '</a></li>' + \
                         '</ul>' + \
                     '</div>' + \
                     load_skin_set,

+ 17 - 6
route/tool/func_mark.py → route/tool/func_render.py

@@ -1,4 +1,4 @@
-from .func_tool import *
+from .func_render_namumark import *
 
 # 커스텀 마크 언젠간 다시 추가 예정
 
@@ -129,6 +129,14 @@ class class_do_render:
                     ''',
                     []
                 ]
+            elif rep_data == 'namumark_beta':
+                doc_include = (data_in + '_') if data_in else ''
+                data_end = class_do_render_namumark(
+                    curs,
+                    doc_name,
+                    doc_data,
+                    doc_include
+                )()
             elif rep_data == 'markdown':
                 data_in = (data_in + '_') if data_in else ''
                 doc_data = html.escape(doc_data)
@@ -160,11 +168,14 @@ class class_do_render:
             else:
                 return data_end[0] + '<script>' + data_end[1] + '</script>'
         else:
-            backlink = self.do_backlink_generate(
-                rep_data, 
-                doc_data, 
-                doc_name
-            )
+            if rep_data == 'namumark':
+                backlink = self.do_backlink_generate(
+                    rep_data, 
+                    doc_data, 
+                    doc_name
+                )
+            else:
+                backlink = []
 
             if backlink != []:
                 curs.executemany(db_change("insert into back (link, title, type) values (?, ?, ?)"), backlink)

+ 115 - 0
route/tool/func_render_namumark.py

@@ -0,0 +1,115 @@
+from .func_tool import *
+
+class class_do_render_namumark:
+    def __init__(
+        self,
+        curs,
+        doc_name, 
+        doc_data, 
+        doc_include
+    ):
+        self.curs = curs
+        
+        self.doc_data = doc_data
+        self.doc_name = doc_name
+        self.doc_include = doc_include
+        
+        self.data_nowiki = {}
+        self.data_backlink = []
+        
+        self.data_toc = ''
+        self.data_footnote = ''
+        self.data_category = ''
+
+    def do_render_text(self):
+        # <b>
+        self.render_data = re.sub(
+            r"&#x27;&#x27;&#x27;((?:(?!&#x27;&#x27;&#x27;).)+)&#x27;&#x27;&#x27;",
+            '<b>\g<1></b>',
+            self.render_data
+        )
+        # <i>
+        self.render_data = re.sub(
+            r"&#x27;&#x27;((?:(?!&#x27;&#x27;).)+)&#x27;&#x27;",
+            '<i>\g<1></i>',
+            self.render_data
+        )
+        # <u>
+        self.render_data = re.sub(
+            r"__((?:(?!__).)+)__",
+            '<u>\g<1></u>',
+            self.render_data
+        )
+        
+        # <sup>
+        self.render_data = re.sub(
+            r"\^\^\^((?:(?!\^\^\^).)+)\^\^\^",
+            '<sup>\g<1></sup>',
+            self.render_data
+        )
+        # <sup> 2
+        self.render_data = re.sub(
+            r"\^\^((?:(?!\^\^).)+)\^\^",
+            '<sup>\g<1></sup>',
+            self.render_data
+        )
+        
+        # <sub>
+        self.render_data = re.sub(
+            r",,,((?:(?!,,,).)+),,,",
+            '<sub>\g<1></sub>',
+            self.render_data
+        )
+        # <sub> 2
+        self.render_data = re.sub(
+            r",,((?:(?!,,).)+),,",
+            '<sub>\g<1></sub>',
+            self.render_data
+        )
+        
+        # <s>
+        self.render_data = re.sub(
+            r"--((?:(?!--).)+)--",
+            '<s>\g<1></s>',
+            self.render_data
+        )
+        # <s> 2
+        self.render_data = re.sub(
+            r"~~((?:(?!~~).)+)~~",
+            '<s>\g<1></s>',
+            self.render_data
+        )
+
+    def do_render_last(self):
+        # remove front_br and back_br
+        self.render_data = re.sub(
+            r'\n<front_br>',
+            '',
+            self.render_data
+        )
+        self.render_data = re.sub(
+            r'<back_br>\n',
+            '',
+            self.render_data
+        )
+        
+        # \n to <br>
+        self.render_data = re.sub(
+            r'\n',
+            '<br>',
+            self.render_data
+        )
+
+    def __call__(self):
+        self.render_data = html.escape(self.doc_data)
+        
+        self.render_data_js = ''
+
+        self.do_render_text()
+        self.do_render_last()
+        
+        return [
+            self.render_data, # HTML
+            self.render_data_js, # JS
+            [] # Other
+        ]

+ 0 - 0
route/tool/func_render_wiki.py


+ 1 - 1
route/topic_list.py

@@ -36,7 +36,7 @@ def topic_list(name = 'Test'):
             t_data = curs.fetchall()
 
             div += '''
-                <h2><a href="/thread/''' + data[0] + '">' + data[0] + '. ' + data[1] + '''</a></h2>
+                <h2><a href="/thread/''' + data[0] + '">' + html.escape(data[0] + '. ' + data[1]) + '''</a></h2>
                 <div id="topic_pre_''' + data[0] + '''"></div>
                 <div id="topic_back_pre_''' + data[0] + '''"></div>
                 <script>

+ 4 - 0
route/user_setting.py

@@ -113,6 +113,8 @@ def user_setting():
                             <hr class="main_hr">
                             <select name="skin">''' + div2 + '''</select>
                             <hr class="main_hr">
+                            <a href="/change/skin_set">(''' + load_lang('skin_set') + ''')</a> <a href="/change/skin_set/main">(''' + load_lang('main_skin_set') + ''')</a>
+                            <hr class="main_hr">
                             <span>''' + load_lang('language') + '''</span>
                             <hr class="main_hr">
                             <select name="lang">''' + div3 + '''</select>
@@ -171,6 +173,8 @@ def user_setting():
                             <hr class="main_hr">
                             <select name="skin">''' + div2 + '''</select>
                             <hr class="main_hr">
+                            <a href="/change/skin_set">(''' + load_lang('skin_set') + ''')</a> <a href="/change/skin_set/main">(''' + load_lang('main_skin_set') + ''')</a>
+                            <hr class="main_hr">
                             <span>''' + load_lang('language') + '''</span>
                             <hr class="main_hr">
                             <select name="lang">''' + div3 + '''</select>

+ 1 - 1
route/main_func_skin_set.py → route/user_setting_skin_set.py

@@ -1,6 +1,6 @@
 from .tool.func import *
 
-def main_func_skin_set():
+def user_setting_skin_set():
     with get_db_connect() as conn:
         curs = conn.cursor()
 

+ 25 - 0
route/user_setting_skin_set_main.py

@@ -0,0 +1,25 @@
+from .tool.func import *
+
+def user_setting_skin_set_main():
+    with get_db_connect() as conn:
+        curs = conn.cursor()
+
+        if ban_check() == 1:
+            return re_error('/ban')
+            
+        if flask.request.method == 'POST':
+
+            conn.commit()
+
+            return redirect('/change')
+        else:
+
+            return easy_minify(flask.render_template(skin_check(),
+                imp = [load_lang('user_setting'), wiki_set(), wiki_custom(), wiki_css([0, 0])],
+                data = '''
+                    <form method="post">
+
+                    </form>
+                ''',
+                menu = [['user', load_lang('return')]]
+            ))

+ 14 - 12
route/view_read.py

@@ -1,6 +1,6 @@
 from .tool.func import *
 
-def view_read(name = 'Test', doc_rev = 0, doc_from = ''):
+def view_read(name = 'Test', doc_rev = 0, doc_from = '', do_type = ''):
     with get_db_connect() as conn:
         curs = conn.cursor()
 
@@ -12,8 +12,7 @@ def view_read(name = 'Test', doc_rev = 0, doc_from = ''):
         file_data = ''
 
         ip = ip_check()
-
-        # name_doc_pass = flask.request.cookies.get('opennamu_redirect', '')
+            
         uppage = re.sub(r"/([^/]+)$", '', name)
         uppage = 0 if uppage == name else uppage
         num = str(doc_rev)        
@@ -155,16 +154,19 @@ def view_read(name = 'Test', doc_rev = 0, doc_from = ''):
                 ['acl/' + url_pas(name), load_lang('acl'), acl],
             ]
 
-            """
-            if name_doc_pass != '':
+            if do_type == 'from':
                 menu += [['w/' + url_pas(name), load_lang('pass')]]
-                end_data = '''
-                    <div id="redirect">
-                        <a href="/w/''' + url_pas(name_doc_pass) + '/doc_from/' + url_pas(name) + '">' + name_doc_pass + '</a> ⇨ <b>' + name + '''</b>
-                    </div>
-                    <br>
-                ''' + end_data
-            """
+                if flask.session and 'lastest_document' in flask.session:
+                    end_data = '''
+                        <div id="redirect">
+                            <a href="/w_from/''' + url_pas(flask.session['lastest_document']) + '''">''' + flask.session['lastest_document'] + '''</a> ⇨ <b>''' + name + '''</b>
+                        </div>
+                        <br>
+                    ''' + end_data
+                    
+                flask.session['lastest_document'] = name
+            else:
+                flask.session['lastest_document'] = name
 
             if uppage != 0:
                 menu += [['w/' + url_pas(uppage), load_lang('upper')]]

+ 2 - 2
version.json

@@ -1,7 +1,7 @@
 {
     "beta" : {
-        "r_ver" : "v3.4.5 (stable1) (beta3) (dev10)",
-        "c_ver" : "3500106",
+        "r_ver" : "v3.4.5 (stable1) (beta3) (dev14)",
+        "c_ver" : "3500107",
         "s_ver" : "3500110"
     }
 }

+ 28 - 42
views/main_css/js/load_skin_set.js

@@ -5,94 +5,94 @@ function main_css_regex_data(data) {
 function main_css_get_post() {    
     var check = document.getElementById('main_css_strike');
     if(check.value === 'normal') {
-        document.cookie = 'main_css_del_strike=0;';
+        document.cookie = 'main_css_del_strike=0; path=/;';
     } else if(check.value === 'change') {
-        document.cookie = 'main_css_del_strike=1;';
+        document.cookie = 'main_css_del_strike=1; path=/;';
     } else {
-        document.cookie = 'main_css_del_strike=2;';
+        document.cookie = 'main_css_del_strike=2; path=/;';
     }
 
     check = document.getElementById('main_css_bold');
     if(check.value === 'normal') {
-        document.cookie = 'main_css_del_bold=0;';
+        document.cookie = 'main_css_del_bold=0; path=/;';
     } else if(check.value === 'change') {
-        document.cookie = 'main_css_del_bold=1;';
+        document.cookie = 'main_css_del_bold=1; path=/;';
     } else {
-        document.cookie = 'main_css_del_bold=2;';
+        document.cookie = 'main_css_del_bold=2; path=/;';
     }
 
     check = document.getElementById('main_css_include');
     if(check.checked) {
-        document.cookie = 'main_css_include_link=1;';
+        document.cookie = 'main_css_include_link=1; path=/;';
     } else {
-        document.cookie = 'main_css_include_link=0;';
+        document.cookie = 'main_css_include_link=0; path=/;';
     }
 
     check = document.getElementById('main_css_category');
     if(check.value === 'bottom') {
-        document.cookie = 'main_css_category_set=0;';
+        document.cookie = 'main_css_category_set=0; path=/;';
     } else {
-        document.cookie = 'main_css_category_set=1;';
+        document.cookie = 'main_css_category_set=1; path=/;';
     }
 
     check = document.getElementById('main_css_footnote');
     if(check.value === 'spread') {
-        document.cookie = 'main_css_footnote_set=1;';
+        document.cookie = 'main_css_footnote_set=1; path=/;';
     } else {
-        document.cookie = 'main_css_footnote_set=0;';
+        document.cookie = 'main_css_footnote_set=0; path=/;';
     }
 
     check = document.getElementById('main_css_image');
     if(check.value === 'new_click') {
-        document.cookie = 'main_css_image_set=2;';
+        document.cookie = 'main_css_image_set=2; path=/;';
     } else if(check.value === 'click') {
-        document.cookie = 'main_css_image_set=1;';
+        document.cookie = 'main_css_image_set=1; path=/;';
     } else {
-        document.cookie = 'main_css_image_set=0;';
+        document.cookie = 'main_css_image_set=0; path=/;';
     }
 
     check = document.getElementById('main_css_image_paste');
     if(check.checked) {
-        document.cookie = 'main_css_image_paste=1;';
+        document.cookie = 'main_css_image_paste=1; path=/;';
     } else {
-        document.cookie = 'main_css_image_paste=0;';
+        document.cookie = 'main_css_image_paste=0; path=/;';
     }
 
     check = document.getElementById('main_css_toc');
     if(check.value === 'on') {
-        document.cookie = 'main_css_toc_set=2;';
+        document.cookie = 'main_css_toc_set=2; path=/;';
     } else if(check.value === 'off') {
-        document.cookie = 'main_css_toc_set=1;';
+        document.cookie = 'main_css_toc_set=1; path=/;';
     } else {
-        document.cookie = 'main_css_toc_set=0;';
+        document.cookie = 'main_css_toc_set=0; path=/;';
     }
     
     check = document.getElementById('main_css_font_size');
     if(check.value.match(/^[0-9]+$/)) {
-        document.cookie = 'main_css_font_size=' + check.value + ';';
+        document.cookie = 'main_css_font_size=' + check.value + '; path=/;';
     } else {
-        document.cookie = 'main_css_font_size=;';
+        document.cookie = 'main_css_font_size=; path=/;';
     }
 
     check = document.getElementById('main_css_monaco');
     if(check.checked) {
-        document.cookie = 'main_css_monaco=1;';
+        document.cookie = 'main_css_monaco=1; path=/;';
     } else {
-        document.cookie = 'main_css_monaco=0;';
+        document.cookie = 'main_css_monaco=0; path=/;';
     }
     
     check = document.getElementById('main_css_exter_link');
     if(check.value === 'self') {
-        document.cookie = 'main_css_exter_link=1;';
+        document.cookie = 'main_css_exter_link=1; path=/;';
     } else {
-        document.cookie = 'main_css_exter_link=0;';
+        document.cookie = 'main_css_exter_link=0; path=/;';
     }
     
     check = document.getElementById('main_css_link_delimiter');
     if(check.checked) {
-        document.cookie = 'main_css_link_delimiter=1;';
+        document.cookie = 'main_css_link_delimiter=1; path=/;';
     } else {
-        document.cookie = 'main_css_link_delimiter=0;';
+        document.cookie = 'main_css_link_delimiter=0; path=/;';
     }
     
     history.go(0);
@@ -123,20 +123,6 @@ function main_css_skin_load() {
         head_data.innerHTML += '<style>#include_link { display: inline; }</style>';
     }
 
-    if(
-        document.cookie.match(main_css_regex_data('main_css_category_set')) &&
-        document.cookie.match(main_css_regex_data('main_css_category_set'))[1] === '1'
-    ) {
-        var get_category = document.getElementById('cate_all');
-        if(get_category) {
-            var backup_category = get_category.innerHTML;
-            var in_data = document.getElementById('in_data_0').innerHTML;
-            get_category.innerHTML = '';
-            document.getElementById('in_data_0').innerHTML = backup_category + in_data;
-            head_data.innerHTML += '<style>#cate { margin-top: 0px; margin-bottom: 20px; }</style>';
-        }
-    }
-
     if(document.cookie.match(main_css_regex_data('main_css_toc_set'))) {
         if(document.cookie.match(main_css_regex_data('main_css_toc_set'))[1] === '2') {
             head_data.innerHTML += '<style>#auto_toc { display: none; }</style>';

+ 0 - 17
views/main_css/js/render/onmark.js

@@ -1,17 +0,0 @@
-"use strict";
-
-class opennamu_render_onmark {
-    constructor(
-        render_part_id,
-        render_part_id_after,
-        render_part_id_add,
-        doc_name
-    ) {
-        this.doc_data = doc_data;
-        this.doc_name = doc_name;
-    }
-    
-    text_part() {
-        return doc_data;
-    }
-}

+ 11 - 3
views/main_css/js/render_onmark.js

@@ -845,8 +845,17 @@ function do_onmark_last_render(data, name_include, data_category) {
     data = do_end_br_replace(data);
     data = data.replace(/\n/g, '<br>');
     
-    data += data_category;
-    
+    if(
+        document.cookie.match(main_css_regex_data('main_css_category_set')) &&
+        document.cookie.match(main_css_regex_data('main_css_category_set'))[1] === '1'
+    ) {
+        if(data_category !== '') {
+            data = data_category + '<hr class="main_hr">' + data;
+        }
+    } else {
+        data += data_category;
+    }
+
     return data;
 }
 
@@ -1292,7 +1301,6 @@ function do_onmark_redirect_render(data, data_js, name_doc) {
         var link_main = link_data_var[0];
         var link_sub = link_data_var[1];
         
-        // 임시 조치
         if(
             name_include == '' &&
             window.location.search === '' &&

+ 0 - 5
views/main_css/js/route/edit.js

@@ -1,5 +0,0 @@
-"use strict";
-
-function opennamu_route_edit() {
-    
-}