Ver Fonte

Merge pull request #1622 from openNAMU/dev

Dev
잉여개발기 (SPDV) há 3 anos atrás
pai
commit
5a28901cb2

+ 7 - 8
route/main_func_setting_external.py

@@ -71,9 +71,9 @@ def main_func_setting_external():
 
             return easy_minify(flask.render_template(skin_check(),
                 imp = [load_lang('ext_api_req_set'), wiki_set(), wiki_custom(), wiki_css([0, 0])],
-                data = '''
-                    <form method="post" id="opennamu_simple_render">
-                        <h2>1. ''' + load_lang('captcha') + '''</h2>
+                data = render_simple_set('''
+                    <form method="post">
+                        <h2>''' + load_lang('captcha') + '''</h2>
                         <a href="https://www.google.com/recaptcha/">(''' + load_lang('recaptcha') + ''')</a> <a href="https://www.hcaptcha.com/">(''' + load_lang('hcaptcha') + ''')</a>
                         <hr class="main_hr">
 
@@ -93,11 +93,11 @@ def main_func_setting_external():
                             ''' + re_ver + '''
                         </select>
 
-                        <h2>2. ''' + load_lang('email_setting') + '''</h1>
+                        <h2>''' + load_lang('email_setting') + '''</h1>
                         <input type="checkbox" name="email_have" ''' + ('checked' if d_list[9] != '' else '')  + '''> ''' + \
                              load_lang('email_required') + '''
 
-                        <h2>2.1. ''' + load_lang('smtp_setting') + '''</h1>
+                        <h2>''' + load_lang('smtp_setting') + '''</h1>
                         <a href="https://support.google.com/mail/answer/7126229">(Google)</a>
                         <hr class="main_hr">
 
@@ -127,7 +127,7 @@ def main_func_setting_external():
                         <hr class="main_hr">
                         <input type="password" name="smtp_pass" value="''' + html.escape(d_list[6]) + '''">
 
-                        <h2>3. ''' + load_lang('oauth') + ''' (''' + load_lang('not_working') + ''')</h2>
+                        <h2>''' + load_lang('oauth') + ''' (''' + load_lang('not_working') + ''')</h2>
                         <a href="https://developers.google.com/identity/protocols/oauth2">(Google)</a>
                         <hr class="main_hr">
 
@@ -139,7 +139,6 @@ def main_func_setting_external():
                         <hr class="main_hr">
                         <button id="opennamu_save_button" type="submit">''' + load_lang('save') + '''</button>
                     </form>
-                    <!-- JS : opennamu_do_render_simple -->
-                ''',
+                '''),
                 menu = [['setting', load_lang('return')]]
             ))

+ 10 - 11
route/main_func_setting_main.py

@@ -120,9 +120,9 @@ def main_func_setting_main(db_set):
 
             return easy_minify(flask.render_template(skin_check(),
                 imp = [load_lang('main_setting'), wiki_set(), wiki_custom(), wiki_css([0, 0])],
-                data = '''
-                    <form method="post" id="opennamu_simple_render">
-                        <h2>1. ''' + load_lang('basic_set') + '''</h2>
+                data = render_simple_set('''
+                    <form method="post">
+                        <h2>''' + load_lang('basic_set') + '''</h2>
                         <span>''' + load_lang('wiki_name') + '''</span>
                         <hr class="main_hr">
                         <input name="name" value="''' + html.escape(d_list[0]) + '''">
@@ -172,14 +172,14 @@ def main_func_setting_main(db_set):
                         <hr class="main_hr">
                         <input type="password" name="wiki_access_password" value="''' + html.escape(d_list[32]) + '''">
 
-                        <h3>1.1. ''' + load_lang('communication_set') + '''</h3>
+                        <h3>''' + load_lang('communication_set') + '''</h3>
                         <input type="checkbox" name="enable_comment" ''' + check_box_div[5] + '''> ''' + load_lang('enable_comment_function') + ''' (''' + load_lang('not_working') + ''')
                         <hr class="main_hr">
 
                         <input type="checkbox" name="enable_challenge" ''' + check_box_div[6] + '''> ''' + load_lang('enable_challenge_function') + ''' (''' + load_lang('not_working') + ''')
                         <hr class="main_hr">
 
-                        <h2>2. ''' + load_lang('design_set') + '''</h2>
+                        <h2>''' + load_lang('design_set') + '''</h2>
                         <span>''' + load_lang('wiki_skin') + '''</span>
                         <hr class="main_hr">
                         <select name="skin">''' + load_skin(d_list[5] if d_list[5] != '' else 'ringo') + '''</select>
@@ -187,7 +187,7 @@ def main_func_setting_main(db_set):
                         <hr class="main_hr">
                         <input type="checkbox" name="namumark_compatible" ''' + check_box_div[10] + '''> ''' + load_lang('namumark_fully_compatible_mode') + '''
 
-                        <h2>3. ''' + load_lang('login_set') + '''</h2>
+                        <h2>''' + load_lang('login_set') + '''</h2>
                         <input type="checkbox" name="reg" ''' + check_box_div[0] + '''> ''' + load_lang('no_register') + '''
                         <hr class="main_hr">
 
@@ -204,14 +204,14 @@ def main_func_setting_main(db_set):
                         <hr class="main_hr">
                         <input name="password_min_length" value="''' + html.escape(d_list[30]) + '''">
                         
-                        <h2>4. ''' + load_lang('server_set') + '''</h2>
+                        <h2>''' + load_lang('server_set') + '''</h2>
 
                         <span>''' + load_lang('update_branch') + '''</span>
                         <hr class="main_hr">
                         <select name="update">''' + branch_div + '''</select>
 
                         <span ''' + sqlite_only + '''>
-                            <h3>4.1. ''' + load_lang('sqlite_only') + '''</h3>
+                            <h3>''' + load_lang('sqlite_only') + '''</h3>
                             <span>
                                 ''' + load_lang('backup_interval') + ''' (''' + load_lang('hour') + ''') (''' + load_lang('off') + ''' : ''' + load_lang('empty') + ''') ''' + \
                                 '''(''' + load_lang('restart_required') + ''')</span>
@@ -228,7 +228,7 @@ def main_func_setting_main(db_set):
                             <hr class="main_hr">
                         </span>
 
-                        <h2>5. ''' + load_lang('edit_set') + '''</h2>
+                        <h2>''' + load_lang('edit_set') + '''</h2>
                         <span><a href="/setting/acl">(''' + load_lang('main_acl_setting') + ''')</a></span>
                         <hr class="main_hr">
 
@@ -260,7 +260,6 @@ def main_func_setting_main(db_set):
 
                         <button id="opennamu_save_button" type="submit">''' + load_lang('save') + '''</button>
                     </form>
-                    <!-- JS : opennamu_do_render_simple -->
-                ''',
+                '''),
                 menu = [['setting', load_lang('return')]]
             ))

+ 25 - 32
route/main_func_setting_phrase.py

@@ -59,83 +59,76 @@ def main_func_setting_phrase():
 
             return easy_minify(flask.render_template(skin_check(),
                 imp = [load_lang('text_setting'), wiki_set(), wiki_custom(), wiki_css([0, 0])],
-                data = '''
-                    <form method="post" id="opennamu_simple_render">
-                        <h2>1. ''' + load_lang('register_text') + ''' (HTML)</h2>
+                data = render_simple_set('''
+                    <form method="post">
+                        <h2>''' + load_lang('register_text') + ''' (HTML)</h2>
                         <textarea class="opennamu_textarea_200" name="''' + i_list[0] + '''">''' + html.escape(d_list[0]) + '''</textarea>
 
-                        <h2>2. ''' + load_lang('non_login_alert') + ''' (HTML)</h2>
+                        <h2>''' + load_lang('non_login_alert') + ''' (HTML)</h2>
                         <textarea class="opennamu_textarea_200" name="''' + i_list[1] + '''">''' + html.escape(d_list[1]) + '''</textarea>
 
-                        <h2>3. ''' + load_lang('edit_bottom_text') + ''' (HTML)</h2>
+                        <h2>''' + load_lang('edit_bottom_text') + ''' (HTML)</h2>
                         <textarea class="opennamu_textarea_200" name="''' + i_list[2] + '''">''' + html.escape(d_list[2]) + '''</textarea>
 
-                        <h2>4. ''' + load_lang('copyright_checkbox_text') + ''' (HTML)</h2>
+                        <h2>''' + load_lang('copyright_checkbox_text') + ''' (HTML)</h2>
                         <textarea class="opennamu_textarea_200" name="''' + i_list[3] + '''">''' + html.escape(d_list[3]) + '''</textarea>
 
-                        <h2>5. ''' + load_lang('check_key_text') + ''' (HTML)</h2>
+                        <h2>''' + load_lang('check_key_text') + ''' (HTML)</h2>
                         <textarea class="opennamu_textarea_200" name="''' + i_list[4] + '''">''' + html.escape(d_list[4]) + '''</textarea>
 
-                        <h2>6. ''' + load_lang('email_title') + '''</h2>
+                        <h2>''' + load_lang('email_title') + '''</h2>
                         <textarea class="opennamu_textarea_200" name="''' + i_list[5] + '''">''' + html.escape(d_list[5]) + '''</textarea>
 
-                        <h2>7. ''' + load_lang('email_text') + '''</h2>
+                        <h2>''' + load_lang('email_text') + '''</h2>
                         <textarea class="opennamu_textarea_200" name="''' + i_list[6] + '''">''' + html.escape(d_list[6]) + '''</textarea>
 
-                        <h2>8. ''' + load_lang('email_insert_text') + '''</h2>
+                        <h2>''' + load_lang('email_insert_text') + '''</h2>
                         <textarea class="opennamu_textarea_200" name="''' + i_list[7] + '''">''' + html.escape(d_list[7]) + '''</textarea>
 
-                        <h2>9. ''' + load_lang('password_search_text') + '''</h2>
+                        <h2>''' + load_lang('password_search_text') + '''</h2>
                         <textarea class="opennamu_textarea_200" name="''' + i_list[8] + '''">''' + html.escape(d_list[8]) + '''</textarea>
 
-                        <h2>10. ''' + load_lang('reset_user_text') + '''</h2>
+                        <h2>''' + load_lang('reset_user_text') + '''</h2>
                         <textarea class="opennamu_textarea_200" name="''' + i_list[9] + '''">''' + html.escape(d_list[9]) + '''</textarea>
 
-                        <h2>11. ''' + load_lang('error_401') + '''</h2>
+                        <h2>''' + load_lang('error_401') + '''</h2>
                         <textarea class="opennamu_textarea_200" name="''' + i_list[10] + '''">''' + html.escape(d_list[10]) + '''</textarea>
 
-                        <h2>12. ''' + load_lang('error_404') + '''</h2>
+                        <h2>''' + load_lang('error_404') + '''</h2>
                         <textarea class="opennamu_textarea_200" name="''' + i_list[11] + '''">''' + html.escape(d_list[11]) + '''</textarea>
 
-                        <h2>13. ''' + load_lang('approval_question') + '''</h2>
-                        <sup>(1)</sup>
+                        <h2>''' + load_lang('approval_question') + '''</h2>
+                        <sup><a href="/setting/main">''' + load_lang('approval_question_visible_only_when_approval_on') + '''</a></sup>
                         <hr class="main_hr">
                         <textarea class="opennamu_textarea_200" name="''' + i_list[12] + '''">''' + html.escape(d_list[12]) + '''</textarea>
 
-                        <h2>14. ''' + load_lang('edit_help') + '''</h2>
+                        <h2>''' + load_lang('edit_help') + '''</h2>
                         <textarea class="opennamu_textarea_200" name="''' + i_list[13] + '''">''' + html.escape(d_list[13]) + '''</textarea>
 
-                        <h2>15. ''' + load_lang('upload_help') + ''' (HTML)</h2>
+                        <h2>''' + load_lang('upload_help') + ''' (HTML)</h2>
                         <textarea class="opennamu_textarea_200" name="''' + i_list[14] + '''">''' + html.escape(d_list[14]) + '''</textarea>
 
-                        <h2>16. ''' + load_lang('upload_default') + '''</h2>
+                        <h2>''' + load_lang('upload_default') + '''</h2>
                         <textarea class="opennamu_textarea_200" name="''' + i_list[15] + '''">''' + html.escape(d_list[15]) + '''</textarea>
 
-                        <h2>17. ''' + load_lang('bottom_text') + ''' (HTML)</h2>
+                        <h2>''' + load_lang('bottom_text') + ''' (HTML)</h2>
                         <textarea class="opennamu_textarea_200" name="''' + i_list[16] + '''">''' + html.escape(d_list[16]) + '''</textarea>
 
-                        <h2>18. ''' + load_lang('topic_text') + '''</h2>
+                        <h2>''' + load_lang('topic_text') + '''</h2>
                         <textarea class="opennamu_textarea_200" name="''' + i_list[17] + '''">''' + html.escape(d_list[17]) + '''</textarea>
                         
-                        <h2>19. ''' + load_lang('phrase_user_page_admin') + ''' (HTML)</h2>
+                        <h2>''' + load_lang('phrase_user_page_admin') + ''' (HTML)</h2>
                         <textarea class="opennamu_textarea_200" name="''' + i_list[18] + '''">''' + html.escape(d_list[18]) + '''</textarea>
                         
-                        <h2>20. ''' + load_lang('phrase_user_page_owner') + ''' (HTML)</h2>
+                        <h2>''' + load_lang('phrase_user_page_owner') + ''' (HTML)</h2>
                         <textarea class="opennamu_textarea_200" name="''' + i_list[19] + '''">''' + html.escape(d_list[19]) + '''</textarea>
 
-                        <h2>21. ''' + load_lang('phrase_old_page_warring') + ''' (''' + load_lang('beta') + ''') (HTML)</h2>
+                        <h2>''' + load_lang('phrase_old_page_warring') + ''' (''' + load_lang('beta') + ''') (HTML)</h2>
                         <textarea class="opennamu_textarea_200" name="''' + i_list[20] + '''">''' + html.escape(d_list[20]) + '''</textarea>
 
                         <hr class="main_hr">
                         <button id="opennamu_save_button" type="submit">''' + load_lang('save') + '''</button>
                     </form>
-                    <ul id="footnote_data">
-                        <li>
-                            <a href="#note_1" id="note_1_end">(1)</a>
-                            <a href="/setting/main">''' + load_lang('approval_question_visible_only_when_approval_on') + '''</a>
-                        </li>
-                    </ul>
-                    <!-- JS : opennamu_do_render_simple -->
-                ''',
+                '''),
                 menu = [['setting', load_lang('return')]]
             ))

+ 47 - 50
route/main_tool_admin.py

@@ -4,57 +4,54 @@ def main_tool_admin():
     with get_db_connect() as conn:
         return easy_minify(flask.render_template(skin_check(),
             imp = [load_lang('admin_tool'), wiki_set(), wiki_custom(), wiki_css([0, 0])],
-            data = '''
-                <div id="opennamu_simple_render">
-                    <h2>1. ''' + load_lang('admin') + '''</h2>
-                    <ul class="opennamu_ul">
-                        <li><a href="/manager/2">''' + load_lang('acl_change') + '''</a></li>
-                        <li><a href="/manager/3">''' + load_lang('check_user') + '''</a></li>
-                        <li><a href="/auth/give/ban">''' + load_lang('ban') + '''</a></li>
-                        <li><a href="/auth/give/ban_multiple">''' + load_lang('multiple_ban') + '''</a></li>
-                        <li><a href="/manager/17">''' + load_lang('release') + '''</a></li>
-                        <li><a href="/manager/5">''' + load_lang('authorize') + '''</a></li>
-                    </ul>
-                    <h2>2. ''' + load_lang('owner') + '''</h2>
-                    <ul class="opennamu_ul">
-                        <li><a href="/admin_group">''' + load_lang('admin_group_list') + '''</a></li>
-                        <li><a href="/delete_multiple">''' + load_lang('many_delete') + '''</a></li>
-                        <li><a href="/app_submit">''' + load_lang('application_list') + '''</a></li>
-                        <li><a href="/register">''' + load_lang('add_user') + '''</a></li>
-                        <li><a href="/setting">''' + load_lang('setting') + '''</a></li>
-                    </ul>
-                    <h3>2.1. ''' + load_lang('filter') + '''</h3>
-                    <ul class="opennamu_ul">
-                        <li><a href="/edit_filter">''' + load_lang('edit_filter_list') + '''</a></li>
-                        <li><a href="/inter_wiki">''' + load_lang('interwiki_list') + '''</a></li>
-                        <li><a href="/edit_top">''' + load_lang('edit_tool_list') + '''</a></li>
-                        <li><a href="/image_license">''' + load_lang('image_license_list') + '''</a></li>
-                        <li><a href="/email_filter">''' + load_lang('email_filter_list') + '''</a></li>
-                        <li><a href="/name_filter">''' + load_lang('id_filter_list') + '''</a></li>
-                        <li><a href="/file_filter">''' + load_lang('file_filter_list') + '''</a></li>
-                        <li><a href="/extension_filter">''' + load_lang('extension_filter_list') + '''</a></li>
-                        <li><a href="/filter/document/list">''' + load_lang('document_filter_list') + ''' (''' + load_lang('beta') + ''')</a></li>
-                    </ul>
-                    <h3>2.2. ''' + load_lang('server') + '''</h2>
-                    <ul class="opennamu_ul">
-                        <li><a href="/restart">''' + load_lang('wiki_restart') + '''</a></li>
-                        <li><a href="/shutdown">''' + load_lang('wiki_shutdown') + '''</a></li>
-                        <li><a href="/update">''' + load_lang('update') + '''</a></li>
-                    </ul>
-                    <h2>3. ''' + load_lang('version') + '''</h2>
-                    <ul class="opennamu_ul">
-                        <li id="ver_send_2">''' + load_lang('version') + ''' : </li>
-                        <li id="ver_send">''' + load_lang('lastest') + ''' : </li>
-                    </ul>
-                    <h3>3.1. ''' + load_lang('skin_info') + '''</h3>
-                    <ul class="opennamu_ul">
-                        <li><a href="/api/skin_info?all=true">''' + load_lang('skin_info') + '''</a></li>
-                        <div id="ver_send_3"></div>
-                    </ul>
-                </div>
+            data = render_simple_set('''
+                <h2>''' + load_lang('admin') + '''</h2>
+                <ul class="opennamu_ul">
+                    <li><a href="/manager/2">''' + load_lang('acl_change') + '''</a></li>
+                    <li><a href="/manager/3">''' + load_lang('check_user') + '''</a></li>
+                    <li><a href="/auth/give/ban">''' + load_lang('ban') + '''</a></li>
+                    <li><a href="/auth/give/ban_multiple">''' + load_lang('multiple_ban') + '''</a></li>
+                    <li><a href="/manager/17">''' + load_lang('release') + '''</a></li>
+                    <li><a href="/manager/5">''' + load_lang('authorize') + '''</a></li>
+                </ul>
+                <h2>''' + load_lang('owner') + '''</h2>
+                <ul class="opennamu_ul">
+                    <li><a href="/admin_group">''' + load_lang('admin_group_list') + '''</a></li>
+                    <li><a href="/delete_multiple">''' + load_lang('many_delete') + '''</a></li>
+                    <li><a href="/app_submit">''' + load_lang('application_list') + '''</a></li>
+                    <li><a href="/register">''' + load_lang('add_user') + '''</a></li>
+                    <li><a href="/setting">''' + load_lang('setting') + '''</a></li>
+                </ul>
+                <h3>''' + load_lang('filter') + '''</h3>
+                <ul class="opennamu_ul">
+                    <li><a href="/edit_filter">''' + load_lang('edit_filter_list') + '''</a></li>
+                    <li><a href="/inter_wiki">''' + load_lang('interwiki_list') + '''</a></li>
+                    <li><a href="/edit_top">''' + load_lang('edit_tool_list') + '''</a></li>
+                    <li><a href="/image_license">''' + load_lang('image_license_list') + '''</a></li>
+                    <li><a href="/email_filter">''' + load_lang('email_filter_list') + '''</a></li>
+                    <li><a href="/name_filter">''' + load_lang('id_filter_list') + '''</a></li>
+                    <li><a href="/file_filter">''' + load_lang('file_filter_list') + '''</a></li>
+                    <li><a href="/extension_filter">''' + load_lang('extension_filter_list') + '''</a></li>
+                    <li><a href="/filter/document/list">''' + load_lang('document_filter_list') + ''' (''' + load_lang('beta') + ''')</a></li>
+                </ul>
+                <h3>''' + load_lang('server') + '''</h2>
+                <ul class="opennamu_ul">
+                    <li><a href="/restart">''' + load_lang('wiki_restart') + '''</a></li>
+                    <li><a href="/shutdown">''' + load_lang('wiki_shutdown') + '''</a></li>
+                    <li><a href="/update">''' + load_lang('update') + '''</a></li>
+                </ul>
+                <h2>''' + load_lang('version') + '''</h2>
+                <ul class="opennamu_ul">
+                    <li id="ver_send_2">''' + load_lang('version') + ''' : </li>
+                    <li id="ver_send">''' + load_lang('lastest') + ''' : </li>
+                </ul>
+                <h3>''' + load_lang('skin_info') + '''</h3>
+                <ul class="opennamu_ul">
+                    <li><a href="/api/skin_info?all=true">''' + load_lang('skin_info') + '''</a></li>
+                    <div id="ver_send_3"></div>
+                </ul>
                 <!-- JS : opennamu_do_insert_version -->
                 <!-- JS : opennamu_do_insert_version_skin -->
-                <!-- JS : opennamu_do_render_simple -->
-            ''',
+            '''),
             menu = [['other', load_lang('return')]]
         ))

+ 46 - 49
route/main_tool_other.py

@@ -4,54 +4,51 @@ def main_tool_other():
     with get_db_connect() as conn:
         return easy_minify(flask.render_template(skin_check(),
             imp = [load_lang('other_tool'), wiki_set(), wiki_custom(), wiki_css([0, 0])],
-            data = '''
-                <div id="opennamu_simple_render">
-                    <h2>1. ''' + load_lang('record') + '''</h2>
-                    <ul class="opennamu_ul">
-                        <li><a href="/manager/6">''' + load_lang('edit_record') + '''</a></li>
-                        <li><a href="/manager/7">''' + load_lang('discussion_record') + '''</a></li>
-                    </ul>
-                    <h2>2. ''' + load_lang('list') + '''</h2>
-                    <h3>2.1. ''' + load_lang('admin') + '''</h3>
-                    <ul class="opennamu_ul">               
-                        <li><a href="/admin_list">''' + load_lang('admin_list') + '''</a></li>
-                        <li><a href="/list/admin/auth_use">''' + load_lang('authority_use_list') + '''</a></li>
-                    </ul>
-                    <h3>2.2. ''' + load_lang('discussion') + '''</h3>
-                    <ul class="opennamu_ul">
-                        <li><a href="/recent_discuss">''' + load_lang('recent_discussion') + '''</a></li>
-                    </ul>
-                    <h3>2.3. ''' + load_lang('document') + '''</h3>
-                    <ul class="opennamu_ul">
-                        <li><a href="/recent_changes">''' + load_lang('recent_change') + '''</a></li>
-                        <li><a href="/title_index">''' + load_lang('all_document_list') + '''</a></li>
-                        <li><a href="/acl_list">''' + load_lang('acl_document_list') + '''</a></li>
-                        <li><a href="/please">''' + load_lang('need_document') + '''</a></li>
-                        <li><a href="/long_page">''' + load_lang('long_page') + '''</a></li>
-                        <li><a href="/short_page">''' + load_lang('short_page') + '''</a></li>
-                        <li><a href="/old_page">''' + load_lang('old_page') + '''</a></li>
-                    </ul>
-                    <h3>2.4. ''' + load_lang('user') + '''</h3>
-                    <ul class="opennamu_ul">
-                        <li><a href="/block_log">''' + load_lang('recent_ban') + '''</a></li>
-                        <li><a href="/user_log">''' + load_lang('member_list') + '''</a></li>
-                    </ul>
-                    <h3>2.5. ''' + load_lang('other') + '''</h3>
-                    <ul class="opennamu_ul">
-                        <li><a href="/image_file_list">''' + load_lang('image_file_list') + '''</a></li>
-                        <li><a href="/vote">''' + load_lang('vote_list') + '''</a></li>
-                    </ul>
-                    <h2>3. ''' + load_lang('other') + '''</h2>
-                    <ul class="opennamu_ul">
-                        <li><a href="/upload">''' + load_lang('upload') + '''</a></li>
-                        <li><a href="/manager/10">''' + load_lang('search') + '''</a></li>
-                    </ul>
-                    <h2>4. ''' + load_lang('admin') + '''</h2>
-                    <ul class="opennamu_ul">
-                        <li><a href="/manager/1">''' + load_lang('admin_tool') + '''</a></li>
-                    </ul>
-                </div>
-                <!-- JS : opennamu_do_render_simple -->
-            ''',
+            data = render_simple_set('''
+                <h2>''' + load_lang('record') + '''</h2>
+                <ul class="opennamu_ul">
+                    <li><a href="/manager/6">''' + load_lang('edit_record') + '''</a></li>
+                    <li><a href="/manager/7">''' + load_lang('discussion_record') + '''</a></li>
+                </ul>
+                <h2>''' + load_lang('list') + '''</h2>
+                <h3>''' + load_lang('admin') + '''</h3>
+                <ul class="opennamu_ul">               
+                    <li><a href="/admin_list">''' + load_lang('admin_list') + '''</a></li>
+                    <li><a href="/list/admin/auth_use">''' + load_lang('authority_use_list') + '''</a></li>
+                </ul>
+                <h3>''' + load_lang('discussion') + '''</h3>
+                <ul class="opennamu_ul">
+                    <li><a href="/recent_discuss">''' + load_lang('recent_discussion') + '''</a></li>
+                </ul>
+                <h3>''' + load_lang('document') + '''</h3>
+                <ul class="opennamu_ul">
+                    <li><a href="/recent_changes">''' + load_lang('recent_change') + '''</a></li>
+                    <li><a href="/title_index">''' + load_lang('all_document_list') + '''</a></li>
+                    <li><a href="/acl_list">''' + load_lang('acl_document_list') + '''</a></li>
+                    <li><a href="/please">''' + load_lang('need_document') + '''</a></li>
+                    <li><a href="/long_page">''' + load_lang('long_page') + '''</a></li>
+                    <li><a href="/short_page">''' + load_lang('short_page') + '''</a></li>
+                    <li><a href="/old_page">''' + load_lang('old_page') + '''</a></li>
+                </ul>
+                <h3>''' + load_lang('user') + '''</h3>
+                <ul class="opennamu_ul">
+                    <li><a href="/block_log">''' + load_lang('recent_ban') + '''</a></li>
+                    <li><a href="/user_log">''' + load_lang('member_list') + '''</a></li>
+                </ul>
+                <h3>''' + load_lang('other') + '''</h3>
+                <ul class="opennamu_ul">
+                    <li><a href="/image_file_list">''' + load_lang('image_file_list') + '''</a></li>
+                    <li><a href="/vote">''' + load_lang('vote_list') + '''</a></li>
+                </ul>
+                <h2>''' + load_lang('other') + '''</h2>
+                <ul class="opennamu_ul">
+                    <li><a href="/upload">''' + load_lang('upload') + '''</a></li>
+                    <li><a href="/manager/10">''' + load_lang('search') + '''</a></li>
+                </ul>
+                <h2>''' + load_lang('admin') + '''</h2>
+                <ul class="opennamu_ul">
+                    <li><a href="/manager/1">''' + load_lang('admin_tool') + '''</a></li>
+                </ul>
+            '''),
             menu = 0
         ))

+ 63 - 0
route/tool/func.py

@@ -1329,6 +1329,69 @@ def render_set(doc_name = '', doc_data = '', data_type = 'view', data_in = '', d
                 return get_class_render[0] + '<script>' + get_class_render[1] + '</script>'
         else:
             return 'HTTP Request 404'
+            
+def render_simple_set(data):
+    toc_data = ''
+    toc_regex = r'<h([1-6])>([^<>]+)<\/h[1-6]>'
+    toc_search_data = re.findall(toc_regex,  data)
+    heading_stack = [0, 0, 0, 0, 0, 0]
+
+    if toc_search_data:
+        toc_data += '''
+            <div class="opennamu_TOC" id="toc">
+                <span class="opennamu_TOC_title">''' + load_lang('toc') + '''</span>
+                <br>
+        '''
+    
+    for toc_search_in in toc_search_data:
+        heading_level = int(toc_search_in[0])
+        heading_level_str = str(heading_level)
+
+        heading_stack[heading_level - 1] += 1
+        for for_a in range(heading_level, 6):
+            heading_stack[for_a] = 0
+        
+        heading_stack_str = ''.join([str(for_a) + '.' if for_a != 0 else '' for for_a in heading_stack])
+        heading_stack_str = re.sub(r'\.$', '', heading_stack_str)
+    
+        toc_data += '''
+            <br>
+            <span class="opennamu_TOC_list">
+                ''' + ('<span style="margin-left: 10px;"></span>' * (heading_stack_str.count('.'))) + '''
+                <a href="#s-''' + heading_stack_str + '''">''' + heading_stack_str + '''.</a>
+                ''' + toc_search_in[1] + '''
+            </span>
+        '''
+        
+        data = re.sub(toc_regex, '<h' + toc_search_in[0] + ' id="s-' + heading_stack_str + '"><a href="#toc">' + heading_stack_str + '.</a> ' + toc_search_in[1] + '</h' + toc_search_in[0] + '>', data, 1)
+        
+    if toc_data != '':
+        toc_data += '</div>'
+        
+    footnote_data = ''
+    footnote_regex = r'<sup>((?:(?!<sup>|<\/sup>).)+)<\/sup>'
+    footnote_search_data = re.findall(footnote_regex, data)
+    footnote_count = 1
+    if footnote_search_data:
+        footnote_data += '<div class="opennamu_footnote">'
+    
+    for footnote_search in footnote_search_data:
+        footnote_count_str = str(footnote_count)
+        
+        if footnote_count != 1:
+            footnote_data += '<br>'
+    
+        footnote_data += '<a id="fn_' + footnote_count_str + '" href="#rfn_' + footnote_count_str + '">(' + footnote_count_str + ')</a> ' + footnote_search
+        data = re.sub(footnote_regex, '<sup id="rfn-' + footnote_count_str + '"><a href="#fn-' + footnote_count_str + '">(' + footnote_count_str + ')</sup>', data, 1)
+        
+        footnote_count += 1
+        
+    if footnote_data != '':
+        footnote_data += '</div>'
+        
+    data = toc_data + data + footnote_data
+
+    return data
 
 # Func-request
 def send_email(who, title, data):

+ 95 - 43
route/tool/func_render_namumark.py

@@ -23,6 +23,7 @@ class class_do_render_namumark:
         self.data_toc = ''
         self.data_footnote = {}
         self.data_category = ''
+        self.data_category_list = []
 
         self.render_data = self.doc_data
         self.render_data = html.escape(self.render_data)
@@ -141,7 +142,7 @@ class class_do_render_namumark:
             else:
                 data += '<a id="' + self.doc_include + 'fn_' + self.data_footnote[for_a]['list'][0] + '" href="#' + self.doc_include + 'rfn_' + self.data_footnote[for_a]['list'][0] + '">(' + for_a + ') </a> '
 
-            data += self.data_footnote[for_a]['data']
+            data += '<footnote_title target="' + self.doc_include + 'fn_' + self.data_footnote[for_a]['list'][0] + '">' + self.data_footnote[for_a]['data'] + '</footnote_title>'
 
         if data != '':
             data += '</div>'
@@ -303,11 +304,38 @@ class class_do_render_namumark:
 
                     toc_list += [['', heading_data_text]]
 
+                    self.render_data_js += '''
+                        function opennamu_heading_folding(data, element = '') {
+                            let fol = document.getElementById(data);
+                            if(fol.style.display === '' || fol.style.display === 'inline-block' || fol.style.display === 'block') {
+                                document.getElementById(data).style.display = 'none';
+                            } else {
+                                document.getElementById(data).style.display = 'block';
+                            }
+                            
+                            if(element !== '') {
+                                console.log(element.innerHTML);
+                                if(element.innerHTML !== '⊖') {
+                                    element.innerHTML = '⊖';
+                                } else {
+                                    element.innerHTML = '⊕';
+                                }
+                            }
+                        }\n
+                    '''
+
+                    heading_folding = ['⊖', 'block']
+                    if heading_data[2]:
+                        heading_folding = ['⊕', 'none']
+
                     data_name = self.get_tool_data_storage(
                         '<h' + heading_level_str + '>', 
                         '' + \
                             ' <sub>' + \
                                 '<a id="' + self.doc_include + 'edit_load_' + str(heading_count) + '" href="/edit_section/' + str(heading_count) + '/' + url_pas(self.doc_name) + '">✎</a> ' + \
+                                '<a href="javascript:void(0);" onclick="javascript:opennamu_heading_folding(\'' + self.doc_include + 'opennamu_heading_' + str(heading_count) + '\', this);">' + \
+                                    heading_folding[0] + \
+                                '</a>'
                             '</sub>' + \
                             '</h' + heading_level_str + '>' + \
                         '', 
@@ -323,7 +351,7 @@ class class_do_render_namumark:
                             '</heading_stack>' + \
                             ' ' + heading_data_text + \
                         '</' + data_name + '>' + \
-                        '<div id="' + self.doc_include + 'opennamu_heading_' + str(heading_count) + '" style="display: block;">' + \
+                        '<div id="' + self.doc_include + 'opennamu_heading_' + str(heading_count) + '" style="display: ' + heading_folding[1] + ';">' + \
                         '<back_br>\n' + \
                     ''
 
@@ -371,7 +399,7 @@ class class_do_render_namumark:
         for for_a in toc_list:
             toc_data += '' + \
                 '<br>' + \
-                ('<span style="margin-left: 10px;">' * for_a[0].count('.')) + \
+                ('<span style="margin-left: 10px;"></span>' * for_a[0].count('.')) + \
                 '<span class="opennamu_TOC_list">' + \
                     '<a href="#s-' + for_a[0] + '">' + \
                         for_a[0] + '. ' + \
@@ -620,13 +648,13 @@ class class_do_render_namumark:
         self.render_data = re.sub(r'\[math\(((?:(?!\[math\(|\)\]).|\n)+)\)\]', do_render_math_sub, self.render_data, re.I)
 
     def do_render_link(self):
-        link_regex = r'\[\[((?:(?!\[\[|\]\]|\||<|>).|<slash_[0-9]+>)+)(?:\|((?:(?!\[\[|\]\]|\|).)+))?\]\](\n)?'
+        link_regex = r'\[\[((?:(?!\[\[|\]\]|\||<|>).|<slash_[0-9]+>)+)(?:\|((?:(?!\[\[|\]\]|\|).)+))?\]\]'
         link_count_all = len(re.findall(link_regex, self.render_data)) * 4
         while 1:
             if not re.search(link_regex, self.render_data):
                 break
             elif link_count_all < 0:
-                print('Error : render heading count overflow')
+                print('Error : render link count overflow')
 
                 break
             else:
@@ -637,8 +665,6 @@ class class_do_render_namumark:
 
                 link_main = link_data[0]
                 link_main_org = link_main
-                
-                link_br = link_data[2]
 
                 # file link
                 if re.search(r'^(파일|file|외부|out):', link_main, re.I):
@@ -717,12 +743,12 @@ class class_do_render_namumark:
                     file_width = self.get_tool_css_safe(file_width)
                     file_height = self.get_tool_css_safe(file_height)
 
-                    file_end = '<image style="width:' + file_width + ';height:' + file_height + ';' + file_align + ';background:' + file_bgcolor + ';" src="' + link_main + '">'
+                    file_end = '<image style="width:' + file_width + ';height:' + file_height + ';' + file_align + ';background:' + file_bgcolor + ';" alt="' + link_sub + '" src="' + link_main + '">'
                     if file_align == 'center':
                         file_end = '<div style="text-align:center;">' + file_end + '</div>'
 
                     if link_exist != '':
-                        data_name = self.get_tool_data_storage('<a class="' + link_exist + '" href="/upload?name=' + url_pas(link_main_org) + '">', '</a>', link_data_full)
+                        data_name = self.get_tool_data_storage('<a class="' + link_exist + '" title="' + link_sub + '" href="/upload?name=' + url_pas(link_main_org) + '">', '</a>', link_data_full)
                         self.render_data = re.sub(link_regex, lambda x : ('<' + data_name + '>' + link_sub + '</' + data_name + '>'), self.render_data, 1)
                     else:
                         file_pass = 0
@@ -735,20 +761,15 @@ class class_do_render_namumark:
                             file_pass = 1
 
                         if file_pass == 1:
-                            data_name = self.get_tool_data_storage(file_end, '', link_data_full)
+                            data_name = self.get_tool_data_storage('<a title="' + link_sub + '" href="/w/file:' + url_pas(link_main_org) + '.' + url_pas(link_extension) + '">' + file_end, '</a>', link_data_full)
                         else:
                             data_name = self.get_tool_data_storage('', '', link_data_full)
                         
-                        self.render_data = re.sub(link_regex, '<' + data_name + '></' + data_name + '>' + ('\n' if link_br else ''), self.render_data, 1)
+                        self.render_data = re.sub(link_regex, '<' + data_name + '></' + data_name + '>', self.render_data, 1)
                 # category
                 elif re.search(r'^(분류|category):', link_main, re.I):
                     link_main = re.sub(r'^(분류|category):', '', link_main, re.I)
 
-                    if self.data_category == '':
-                        self.data_category = '<div class="opennamu_category">' + self.get_tool_lang('category') + ' : '
-                    else:
-                        self.data_category += ' | '
-
                     if link_data[1]:
                         link_main += link_data[1]
 
@@ -763,21 +784,32 @@ class class_do_render_namumark:
                     link_main = self.get_tool_data_restore(link_main, do_type = 'slash')
                     link_main = html.unescape(link_main)
 
-                    self.curs.execute(db_change("select title from data where title = ?"), ['category:' + link_main])
-                    db_data = self.curs.fetchall()
-                    if db_data:
-                        link_exist = ''
-                        self.data_backlink += [[self.doc_name, 'category:' + link_main, 'cat']]
-                    else:
-                        link_exist = 'opennamu_not_exist_link'
-                        self.data_backlink += [[self.doc_name, 'category:' + link_main, 'no']]
-                        self.data_backlink += [[self.doc_name, 'category:' + link_main, 'cat']]
+                    if not link_main in self.data_category_list:
+                        self.data_category_list += [link_main]
+                        
+                        self.curs.execute(db_change("select title from data where title = ?"), ['category:' + link_main])
+                        db_data = self.curs.fetchall()
+                        if db_data:
+                            link_exist = ''
+                            self.data_backlink += [[self.doc_name, 'category:' + link_main, 'cat']]
+                        else:
+                            link_exist = 'opennamu_not_exist_link'
+                            self.data_backlink += [[self.doc_name, 'category:' + link_main, 'no']]
+                            self.data_backlink += [[self.doc_name, 'category:' + link_main, 'cat']]
 
-                    link_main = url_pas(link_main)
+                        link_main = url_pas(link_main)
 
-                    self.data_category += '<a class="' + category_blur + ' ' + link_exist + '" href="/w/category:' + link_main + '">' + link_sub + '</a>'
+                        if self.data_category == '':
+                            self.data_category = '<div class="opennamu_category">' + self.get_tool_lang('category') + ' : '
+                        else:
+                            self.data_category += ' | '
 
-                    self.render_data = re.sub(link_regex, '', self.render_data, 1)
+                        self.data_category += '<a class="' + category_blur + ' ' + link_exist + '" title="' + link_sub + '" href="/w/category:' + link_main + '">' + link_sub + '</a>'
+
+                    if self.render_data.find('\n' + link_data_full + '\n') != -1:
+                        self.render_data = self.render_data.replace('\n' + link_data_full + '\n', '\n', 1)
+                    else:
+                        self.render_data = re.sub(link_regex, '', self.render_data, 1)
                 # inter link
                 elif re.search(r'^(?:inter|인터):([^:]+):', link_main, re.I):
                     link_inter_regex = re.compile('^(?:inter|인터):([^:]+):', re.I)
@@ -786,6 +818,7 @@ class class_do_render_namumark:
                     link_inter_name = link_inter_name.group(1)
 
                     link_main = re.sub(link_inter_regex, '', link_main)
+                    link_title = link_inter_name + ':' + link_main
 
                     link_main = self.get_tool_data_restore(link_main, do_type = 'slash')
                     link_main = html.unescape(link_main)
@@ -823,9 +856,9 @@ class class_do_render_namumark:
 
                         link_sub_storage = link_inter_icon + link_sub_storage
 
-                        data_name = self.get_tool_data_storage('<a class="opennamu_link_inter" href="' + link_main + link_data_sharp + '">' + link_sub_storage, '</a>', link_data_full)
+                        data_name = self.get_tool_data_storage('<a class="opennamu_link_inter" title="' + link_title + '" href="' + link_main + link_data_sharp + '">' + link_sub_storage, '</a>', link_data_full)
                     
-                        self.render_data = re.sub(link_regex, lambda x : ('<' + data_name + '>' + link_sub + '</' + data_name + '>' + ('\n' if link_br else '')), self.render_data, 1)
+                        self.render_data = re.sub(link_regex, lambda x : ('<' + data_name + '>' + link_sub + '</' + data_name + '>'), self.render_data, 1)
                     else:
                         self.render_data = re.sub(link_regex, '', self.render_data, 1)
                 # out link
@@ -842,9 +875,9 @@ class class_do_render_namumark:
                         link_sub = ''
                         link_sub_storage = link_main_org
 
-                    data_name = self.get_tool_data_storage('<a class="opennamu_link_out" href="' + link_main + '">' + link_sub_storage, '</a>', link_data_full)
+                    data_name = self.get_tool_data_storage('<a class="opennamu_link_out" title="" href="' + link_main + '">' + link_sub_storage, '</a>', link_data_full)
 
-                    self.render_data = re.sub(link_regex, lambda x : ('<' + data_name + '>' + link_sub + '</' + data_name + '>' + ('\n' if link_br else '')), self.render_data, 1)
+                    self.render_data = re.sub(link_regex, lambda x : ('<' + data_name + '>' + link_sub + '</' + data_name + '>'), self.render_data, 1)
                 # in link
                 else:
                     # under page & fix url
@@ -875,6 +908,8 @@ class class_do_render_namumark:
                     else:
                         link_data_sharp = ''
 
+                    link_title = html.escape(link_main + link_data_sharp)
+
                     link_exist = ''
                     if link_main != '':
                         self.curs.execute(db_change("select title from data where title = ?"), [link_main])
@@ -903,9 +938,9 @@ class class_do_render_namumark:
                         link_sub = ''
                         link_sub_storage = link_main_org
 
-                    data_name = self.get_tool_data_storage('<a class="' + link_exist + ' ' + link_same + '" href="' + link_main + link_data_sharp + '">' + link_sub_storage, '</a>', link_data_full)
+                    data_name = self.get_tool_data_storage('<a class="' + link_exist + ' ' + link_same + '" title="' + link_title + '" href="' + link_main + link_data_sharp + '">' + link_sub_storage, '</a>', link_data_full)
 
-                    self.render_data = re.sub(link_regex, lambda x : ('<' + data_name + '>' + link_sub + '</' + data_name + '>' + ('\n' if link_br else '')), self.render_data, 1)
+                    self.render_data = re.sub(link_regex, lambda x : ('<' + data_name + '>' + link_sub + '</' + data_name + '>'), self.render_data, 1)
 
             link_count_all -= 1
 
@@ -986,7 +1021,7 @@ class class_do_render_namumark:
                 match = match.groups()
 
                 macro_split_regex = r'(?:^|,) *([^,]+)'
-                macro_split_sub_regex = r'(^[^=]+) *= *([^=]*)'
+                macro_split_sub_regex = r'^([^=]+) *= *(.*)$'
 
                 include_name = ''
 
@@ -1070,12 +1105,14 @@ class class_do_render_namumark:
                 if footnote_data[2]:
                     self.render_data = re.sub(footnote_regex, lambda x : self.get_tool_footnote_make(), self.render_data, 1)
                 else:
+                    footnote_num_str = str(footnote_num)
+
                     if not footnote_data[0]:
-                        footnote_name = str(footnote_num)
+                        footnote_name = footnote_num_str
                         footnote_name_add = ''
                     else:
                         footnote_name = footnote_data[0]
-                        footnote_name_add = ' (' + str(footnote_num) + ')'
+                        footnote_name_add = ' (' + footnote_num_str + ')'
 
                     if not footnote_data[1]:
                         footnote_text_data = ''
@@ -1083,18 +1120,18 @@ class class_do_render_namumark:
                         footnote_text_data = footnote_data[1]
 
                     if footnote_name in self.data_footnote:
-                        self.data_footnote[footnote_name]['list'] += [str(footnote_num)]
+                        self.data_footnote[footnote_name]['list'] += [footnote_num_str]
                         footnote_first = self.data_footnote[footnote_name]['list'][0]
-                    
-                        data_name = self.get_tool_data_storage('<sup><a id="' + self.doc_include + 'rfn_' + str(footnote_num) + '" href="#' + self.doc_include + 'fn_' + footnote_first + '">(' + footnote_name + ' (' + str(footnote_num) + ')' + ')</a></sup>', '', footnote_data_org)
+
+                        data_name = self.get_tool_data_storage('<sup><a fn_target="' + self.doc_include + 'fn_' + footnote_first + '" id="' + self.doc_include + 'rfn_' + footnote_num_str + '" href="#' + self.doc_include + 'fn_' + footnote_first + '">(' + footnote_name + ' (' + footnote_num_str + ')' + ')</a></sup>', '', footnote_data_org)
 
                         self.render_data = re.sub(footnote_regex, '<' + data_name + '></' + data_name + '>', self.render_data, 1)
                     else:
                         self.data_footnote[footnote_name] = {}
-                        self.data_footnote[footnote_name]['list'] = [str(footnote_num)]
+                        self.data_footnote[footnote_name]['list'] = [footnote_num_str]
                         self.data_footnote[footnote_name]['data'] = footnote_text_data
 
-                        data_name = self.get_tool_data_storage('<sup><a id="' + self.doc_include + 'rfn_' + str(footnote_num) + '" href="#' + self.doc_include + 'fn_' + str(footnote_num) + '">(' + footnote_name + footnote_name_add + ')</a></sup>', '', footnote_data_org)
+                        data_name = self.get_tool_data_storage('<sup><a fn_target="' + self.doc_include + 'fn_' + footnote_num_str + '" id="' + self.doc_include + 'rfn_' + footnote_num_str + '" href="#' + self.doc_include + 'fn_' + footnote_num_str + '">(' + footnote_name + footnote_name_add + ')</a></sup>', '', footnote_data_org)
 
                         self.render_data = re.sub(footnote_regex, '<' + data_name + '></' + data_name + '>', self.render_data, 1)
 
@@ -1681,6 +1718,7 @@ class class_do_render_namumark:
         # <render_n> restore
         self.render_data = self.get_tool_data_restore(self.render_data)
 
+        # add toc
         def do_render_last_toc(match):
             data = match.group(1)
 
@@ -1689,7 +1727,6 @@ class class_do_render_namumark:
             
             return data
 
-        # add toc
         if self.data_toc != '':
             self.render_data += '</div>'
             toc_search_regex = r'<toc_data>((?:(?!<toc_data>|<\/toc_data>).)*)<\/toc_data>'
@@ -1722,6 +1759,21 @@ class class_do_render_namumark:
             self.render_data = re.sub(r'<toc_need_part>', '', self.render_data)
             self.render_data = re.sub(r'<toc_no_auto>', '', self.render_data)
 
+        def do_render_last_footnote(match):
+            match = match.group(1)
+
+            find_regex = re.compile('<footnote_title target="' + match + '">((?:(?!<footnote_title|<\/footnote_title>).)*)<\/footnote_title>')
+            find_data = re.search(find_regex, self.render_data)
+            if find_data:
+                find_data = find_data.group(1)
+                find_data = re.sub(r'<[^<>]*>', '', find_data)
+            else:
+                find_data = ''
+
+            return '<a title="' + find_data + '"'
+
+        self.render_data = re.sub(r'<a fn_target="([^"]+)"', do_render_last_footnote, self.render_data)
+
         self.render_data = '<div class="opennamu_render_complete">' + self.render_data + '</div>'
 
     def __call__(self):

+ 1 - 1
version.json

@@ -1,6 +1,6 @@
 {
     "beta" : {
-        "r_ver" : "v3.4.5-unstable (stable2) (beta6-102)",
+        "r_ver" : "v3.4.5-unstable (stable2) (beta6-104)",
         "c_ver" : "3500354",
         "s_ver" : "3500111"
     }

+ 0 - 6
views/main_css/js/func/render_simple.js

@@ -1,9 +1,3 @@
 let opennamu_do_render_simple_url = [
-    '/manager/1',
-    '/manager',
-    '/other',
-    '/setting/phrase',
-    '/setting/main',
-    '/setting/external',
     '/change/skin_set/main'
 ];