2du 4 năm trước cách đây
mục cha
commit
6ff4874701

+ 13 - 21
app.py

@@ -112,7 +112,7 @@ set_init_always(version_list['beta']['c_ver'])
 
 # Init-Route
 class EverythingConverter(werkzeug.routing.PathConverter):
-    regex = '.*?'
+    regex = r'.*?'
 
 class RegexConverter(werkzeug.routing.BaseConverter):
     def __init__(self, url_map, *items):
@@ -461,32 +461,21 @@ def search_deep(name = 'test'):
     return search_deep_2(load_db.db_get(), name)
 
 # Func-view
-@app.route('/xref/<everything:name>')
-def view_xref(name = 'Test'):
-    return view_xref_2(load_db.db_get(), name)
-
-@app.route('/xref/this/<everything:name>')
-def view_xref_this(name = 'Test'):
-    return view_xref_2(load_db.db_get(), name, xref_type = '2')
+app.route('/xref/<everything:name>')(view_xref)
+app.route('/xref_this/<everything:name>', defaults = { 'xref_type' : 2 })(view_xref)
 
 app.route('/raw/<everything:name>')(view_raw_2)
-app.route('/raw/<everything:name>/doc_acl', defaults = { 'doc_acl' : 1 })(view_raw_2)
-app.route('/raw/<everything:name>/doc_rev/<int:num>')(view_raw_2)
+app.route('/raw_acl/<everything:name>', defaults = { 'doc_acl' : 1 })(view_raw_2)
+app.route('/raw_rev/<int:num>/<everything:name>')(view_raw_2)
 
-@app.route('/diff/<int(signed = True):num_a>/<int(signed = True):num_b>/<everything:name>')
-def view_diff(name = 'Test', num_a = 1, num_b = 1):
-    return view_diff_2(load_db.db_get(), name, num_a, num_b)
+app.route('/diff/<int(signed = True):num_a>/<int(signed = True):num_b>/<everything:name>')(view_diff)
 
-@app.route('/down/<everything:name>')
-def view_down(name = None):
-    return view_down_2(load_db.db_get(), name)
+app.route('/down/<everything:name>')(view_down)
 
 # everything 다음에 추가 붙은 경우에 대해서 재검토 필요
-@app.route('/w/<everything:name>/doc_rev/<int(signed = True):doc_rev>')
-@app.route('/w/<everything:name>/doc_from/<everything:doc_from>')
-@app.route('/w/<everything:name>')
-def view_read(name = 'Test', doc_rev = 0, doc_from = ''):
-    return view_read_2(load_db.db_get(), name, doc_rev, doc_from)
+app.route('/w_rev/<int(signed = True):doc_rev>/<everything:name>')(view_read)
+app.route('/w_from/<everything:name>')(view_read)
+app.route('/w/<everything:name>')(view_read)
 
 # Func-edit
 app.route('/edit/<everything:name>', methods = ['POST', 'GET'])(edit)
@@ -495,10 +484,13 @@ app.route('/edit/<everything:name>/doc_section/<int:section>', methods = ['POST'
 
 # 개편 예정
 app.route('/xref_reset/<everything:name>')(edit_backlink_reset)
+
 app.route('/delete/<everything:name>', methods = ['POST', 'GET'])(edit_delete)
 app.route('/delete_file/<everything:name>', methods = ['POST', 'GET'])(edit_delete_file)
 app.route('/delete_mutiple', methods = ['POST', 'GET'])(edit_delete_mutiple)
+
 app.route('/revert/<everything:name>', methods = ['POST', 'GET'])(edit_revert)
+
 app.route('/move/<everything:name>', methods = ['POST', 'GET'])(edit_move)
 
 # Func-topic

+ 1 - 1
route/edit.py

@@ -6,7 +6,7 @@ def edit(name = 'Test', name_load = 0, section = 0):
     
         ip = ip_check()
         if acl_check(name) == 1:
-            return redirect('/raw/' + url_pas(name) + '/doc_acl')
+            return redirect('/raw_acl/' + url_pas(name))
         
         curs.execute(db_change("select id from history where title = ? order by id + 0 desc"), [name])
         doc_ver = curs.fetchall()

+ 1 - 1
route/recent_change.py

@@ -116,7 +116,7 @@ def recent_change_2(conn, name, tool):
                     style[1] = 'id="toron_color_grey"'
 
             if tool == 'history':
-                title = '<a href="/w/' + url_pas(name) + '/doc_rev/' + data[0] + '">r' + data[0] + '</a> '
+                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:

+ 1 - 1
route/recent_history_tool.py

@@ -8,7 +8,7 @@ def recent_history_tool_2(conn, name, rev):
     data = '' + \
         '<h2>' + load_lang('tool') + '</h2>' + \
         '<ul class="inside_ul">' + \
-            '<li><a href="/raw/' + url_pas(name) + '/doc_rev/' + num + '">' + load_lang('raw') + '</a></li>' + \
+            '<li><a href="/raw_rev/' + num + '/' + url_pas(name) + '">' + load_lang('raw') + '</a></li>' + \
     ''
 
     data += '<li><a href="/revert/' + url_pas(name) + '?num=' + num + '">' + load_lang('revert') + ' | r' + num + '</a></li>'

+ 1 - 1
route/topic.py

@@ -130,7 +130,7 @@ def topic(topic_num = 0):
                     <hr class="main_hr">
                     <form style="''' + display + '''" method="post">
                         ''' + data_input_topic_name + '''
-                        <textarea id="textarea_edit_view" class="topic_content" placeholder="''' + topic_text + '''" name="content"></textarea>
+                        <textarea id="textarea_edit_view" class="opennamu_comment_textarea" placeholder="''' + topic_text + '''" name="content"></textarea>
                         <hr class="main_hr">
                         ''' + captcha_get() + (ip_warning() if display == '' else '') + '''
                         <input style="display: none;" name="topic" value="''' + name + '''">

+ 56 - 55
route/view_diff.py

@@ -1,58 +1,59 @@
 from .tool.func import *
 
-def view_diff_2(conn, name, num_a, num_b):
-    curs = conn.cursor()
-    
-    first = str(num_a)
-    second = str(num_b)
-
-    if acl_check(name, 'render') == 1:
-        return re_error('/ban')
-
-    curs.execute(db_change("select title from history where title = ? and (id = ? or id = ?) and hide = 'O'"), [name, first, second])
-    if curs.fetchall() and admin_check(6) != 1:
-        return re_error('/error/3')
-
-    curs.execute(db_change("select data from history where id = ? and title = ?"), [first, name])
-    first_raw_data = curs.fetchall()
-        
-    curs.execute(db_change("select data from history where id = ? and title = ?"), [second, name])
-    second_raw_data = curs.fetchall()
-    if first_raw_data and second_raw_data:
-        first_raw_data = first_raw_data[0][0].replace('\r', '')
-        second_raw_data = second_raw_data[0][0].replace('\r', '')
-
-        if first_raw_data == second_raw_data:
-            result = ''
+def view_diff(name = 'Test', num_a = 1, num_b = 1):
+    with get_db_connect() as conn:
+        curs = conn.cursor()
+
+        first = str(num_a)
+        second = str(num_b)
+
+        if acl_check(name, 'render') == 1:
+            return re_error('/ban')
+
+        curs.execute(db_change("select title from history where title = ? and (id = ? or id = ?) and hide = 'O'"), [name, first, second])
+        if curs.fetchall() and admin_check(6) != 1:
+            return re_error('/error/3')
+
+        curs.execute(db_change("select data from history where id = ? and title = ?"), [first, name])
+        first_raw_data = curs.fetchall()
+
+        curs.execute(db_change("select data from history where id = ? and title = ?"), [second, name])
+        second_raw_data = curs.fetchall()
+        if first_raw_data and second_raw_data:
+            first_raw_data = first_raw_data[0][0].replace('\r', '')
+            second_raw_data = second_raw_data[0][0].replace('\r', '')
+
+            if first_raw_data == second_raw_data:
+                result = ''
+            else:
+                i = 1
+                change_count = 0
+                diff_data = diff_match_patch().diff_prettyHtml(
+                    diff_match_patch().diff_main(first_raw_data, second_raw_data)
+                )
+                end_data = ''
+
+                diff_data = diff_data.replace('&para;<br>', '\n')
+                diff_data = diff_data.replace('<span>', '')
+                diff_data = diff_data.replace('</span>', '')
+
+                re_data = re.findall(r'(?:(?:(?:(?!\n).)*)(?:\n)|(?:(?:(?!\n).)+)$)', diff_data)
+                for re_in_data in re_data:
+                    change_find_start = len(re.findall(r'<(?:del|ins) ', re_in_data))
+                    change_find_end = len(re.findall(r'<\/(?:del|ins)>', re_in_data))
+
+                    change_count += (change_find_start - change_find_end)
+                    if change_count != 0 or change_find_start != 0 or change_find_end != 0:
+                        end_data += str(i) + ' : ' + re_in_data
+
+                    i += 1
+
+                result = '<pre>' + end_data + '</pre>'
+
+            return easy_minify(flask.render_template(skin_check(),
+                imp = [name, wiki_set(), wiki_custom(), wiki_css(['(' + load_lang('compare') + ')', 0])],
+                data = result,
+                menu = [['history/' + url_pas(name), load_lang('return')]]
+            ))
         else:
-            i = 1
-            change_count = 0
-            diff_data = diff_match_patch().diff_prettyHtml(
-                diff_match_patch().diff_main(first_raw_data, second_raw_data)
-            )
-            end_data = ''
-
-            diff_data = diff_data.replace('&para;<br>', '\n')
-            diff_data = diff_data.replace('<span>', '')
-            diff_data = diff_data.replace('</span>', '')
-            
-            re_data = re.findall(r'(?:(?:(?:(?!\n).)*)(?:\n)|(?:(?:(?!\n).)+)$)', diff_data)
-            for re_in_data in re_data:
-                change_find_start = len(re.findall(r'<(?:del|ins) ', re_in_data))
-                change_find_end = len(re.findall(r'<\/(?:del|ins)>', re_in_data))
-
-                change_count += (change_find_start - change_find_end)
-                if change_count != 0 or change_find_start != 0 or change_find_end != 0:
-                    end_data += str(i) + ' : ' + re_in_data
-                
-                i += 1
-                
-            result = '<pre>' + end_data + '</pre>'
-
-        return easy_minify(flask.render_template(skin_check(),
-            imp = [name, wiki_set(), wiki_custom(), wiki_css(['(' + load_lang('compare') + ')', 0])],
-            data = result,
-            menu = [['history/' + url_pas(name), load_lang('return')]]
-        ))
-    else:
-        return redirect('/history/' + url_pas(name))
+            return redirect('/history/' + url_pas(name))

+ 13 - 12
route/view_down.py

@@ -1,18 +1,19 @@
 from .tool.func import *
 
-def view_down_2(conn, name):
-    curs = conn.cursor()
+def view_down(name = 'Test'):
+    with get_db_connect() as conn:
+        curs = conn.cursor()
 
-    div = '<ul class="inside_ul">'
+        div = '<ul class="inside_ul">'
 
-    curs.execute(db_change("select title from data where title like ?"), [name + '/%'])
-    for data in curs.fetchall():
-        div += '<li><a href="/w/' + url_pas(data[0]) + '">' + html.escape(data[0]) + '</a></li>'
+        curs.execute(db_change("select title from data where title like ?"), [name + '/%'])
+        for data in curs.fetchall():
+            div += '<li><a href="/w/' + url_pas(data[0]) + '">' + html.escape(data[0]) + '</a></li>'
 
-    div += '</ul>'
+        div += '</ul>'
 
-    return easy_minify(flask.render_template(skin_check(),
-        imp = [name, wiki_set(), wiki_custom(), wiki_css(['(' + load_lang('sub') + ')', 0])],
-        data = div,
-        menu = [['w/' + url_pas(name), load_lang('return')]]
-    ))
+        return easy_minify(flask.render_template(skin_check(),
+            imp = [name, wiki_set(), wiki_custom(), wiki_css(['(' + load_lang('sub') + ')', 0])],
+            data = div,
+            menu = [['w/' + url_pas(name), load_lang('return')]]
+        ))

+ 190 - 187
route/view_read.py

@@ -1,196 +1,199 @@
 from .tool.func import *
 
-def view_read_2(conn, name, doc_rev, doc_from):
-    curs = conn.cursor()
-
-    sub = 0
-    menu = []
-    
-    user_doc = ''
-    category_doc = ''
-    file_data = ''
-    
-    ip = ip_check()
-    
-    name_doc_pass = doc_from
-    uppage = re.sub(r"/([^/]+)$", '', name)
-    uppage = 0 if uppage == name else uppage
-    num = str(doc_rev)        
-
-    curs.execute(db_change("select sub from rd where title = ? and not stop = 'O' order by date desc"), [name])
-    topic = 1 if curs.fetchall() else 0
-
-    curs.execute(db_change("select title from data where title like ?"), [name + '/%'])
-    down = 1 if curs.fetchall() else 0
-    
-    if re.search(r'^category:', name):
+def view_read(name = 'Test', doc_rev = 0, doc_from = ''):
+    with get_db_connect() as conn:
+        curs = conn.cursor()
+
+        sub = 0
+        menu = []
+
+        user_doc = ''
         category_doc = ''
-        category_sub = ''
-        
-        curs.execute(db_change("select link from back where title = ? and type = 'cat' order by link asc"), [name])
-        category_sql = curs.fetchall()
-        for data in category_sql:
-            if data[0].startswith('category:'):
-                category_sub += '<li><a href="/w/' + url_pas(data[0]) + '">' + html.escape(data[0]) + '</a></li>'
-            else:
-                category_doc += '<li><a href="/w/' + url_pas(data[0]) + '">' + html.escape(data[0]) + '</a> <a id="inside" href="/xref/' + url_pas(data[0]) + '">(' + load_lang('backlink') + ')</a></li>'
-
-        if category_doc != '':
-            category_doc = '<h2 id="cate_normal">' + load_lang('category_title') + '</h2><ul class="inside_ul">' + category_doc + '</ul>'
-
-        if category_sub != '':
-            category_doc += '<h2 id="cate_under">' + load_lang('under_category') + '</h2><ul class="inside_ul">' + category_sub + '</ul>'
-    elif re.search(r"^user:([^/]*)", name):
-        match = re.search(r"^user:([^/]*)", name)
-        user_name = html.escape(match.group(1))
-        user_doc = '''
-            <div id="get_user_info"></div>
-            <script>load_user_info("''' + user_name + '''");</script>
-            <hr class="main_hr">
-        '''
-        if name == 'user:' + user_name:
-            menu += [['w/' + url_pas(name) + '/' + url_pas(get_time().split()[0]), load_lang('today_doc')]]
-    elif re.search(r"^file:", name):
-        mime_type = re.search(r'([^.]+)$', name)
-        if mime_type:
-            mime_type = mime_type.group(1).lower()
-        else:
-            mime_type = 'jpg'
-            
-        file_name = re.sub(r'\.([^.]+)$', '', name)
-        file_name = re.sub(r'^file:', '', file_name)
-        
-        file_all_name = sha224_replace(file_name) + '.' + mime_type
-        file_path_name = os.path.join(load_image_url(), file_all_name)
-        if os.path.exists(file_path_name):
-            file_size = str(round(os.path.getsize(file_path_name) / 1000, 1))
-            file_data = '''
-                <img src="/image/''' + url_pas(file_all_name) + '''">
-                <h2>DATA</h2>
-                <table>
-                    <tr><td>URL</td><td><a href="/image/''' + url_pas(file_all_name) + '''">LINK</a></td></tr>
-                    <tr><td>VOLUME</td><td>''' + file_size + '''KB</td></tr>
-                </table>
-                <h2>CONTENT</h2>
+        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)        
+
+        curs.execute(db_change("select sub from rd where title = ? and not stop = 'O' order by date desc"), [name])
+        topic = 1 if curs.fetchall() else 0
+
+        curs.execute(db_change("select title from data where title like ?"), [name + '/%'])
+        down = 1 if curs.fetchall() else 0
+
+        if re.search(r'^category:', name):
+            category_doc = ''
+            category_sub = ''
+
+            curs.execute(db_change("select link from back where title = ? and type = 'cat' order by link asc"), [name])
+            category_sql = curs.fetchall()
+            for data in category_sql:
+                if data[0].startswith('category:'):
+                    category_sub += '<li><a href="/w/' + url_pas(data[0]) + '">' + html.escape(data[0]) + '</a></li>'
+                else:
+                    category_doc += '<li><a href="/w/' + url_pas(data[0]) + '">' + html.escape(data[0]) + '</a> <a id="inside" href="/xref/' + url_pas(data[0]) + '">(' + load_lang('backlink') + ')</a></li>'
+
+            if category_doc != '':
+                category_doc = '<h2 id="cate_normal">' + load_lang('category_title') + '</h2><ul class="inside_ul">' + category_doc + '</ul>'
+
+            if category_sub != '':
+                category_doc += '<h2 id="cate_under">' + load_lang('under_category') + '</h2><ul class="inside_ul">' + category_sub + '</ul>'
+        elif re.search(r"^user:([^/]*)", name):
+            match = re.search(r"^user:([^/]*)", name)
+            user_name = html.escape(match.group(1))
+            user_doc = '''
+                <div id="get_user_info"></div>
+                <script>load_user_info("''' + user_name + '''");</script>
+                <hr class="main_hr">
             '''
+            if name == 'user:' + user_name:
+                menu += [['w/' + url_pas(name) + '/' + url_pas(get_time().split()[0]), load_lang('today_doc')]]
+        elif re.search(r"^file:", name):
+            mime_type = re.search(r'([^.]+)$', name)
+            if mime_type:
+                mime_type = mime_type.group(1).lower()
+            else:
+                mime_type = 'jpg'
+
+            file_name = re.sub(r'\.([^.]+)$', '', name)
+            file_name = re.sub(r'^file:', '', file_name)
+
+            file_all_name = sha224_replace(file_name) + '.' + mime_type
+            file_path_name = os.path.join(load_image_url(), file_all_name)
+            if os.path.exists(file_path_name):
+                file_size = str(round(os.path.getsize(file_path_name) / 1000, 1))
+                file_data = '''
+                    <img src="/image/''' + url_pas(file_all_name) + '''">
+                    <h2>DATA</h2>
+                    <table>
+                        <tr><td>URL</td><td><a href="/image/''' + url_pas(file_all_name) + '''">LINK</a></td></tr>
+                        <tr><td>VOLUME</td><td>''' + file_size + '''KB</td></tr>
+                    </table>
+                    <h2>CONTENT</h2>
+                '''
+
+                menu += [['delete_file/' + url_pas(name), load_lang('file_delete')]]
+            else:
+                file_data = ''
+
+        if num != '0':
+            curs.execute(db_change("select title from history where title = ? and id = ? and hide = 'O'"), [name, num])
+            if curs.fetchall() and admin_check(6) != 1:
+                return redirect('/history/' + url_pas(name))
 
-            menu += [['delete_file/' + url_pas(name), load_lang('file_delete')]]
+            curs.execute(db_change("select data from history where title = ? and id = ?"), [name, num])
         else:
-            file_data = ''
-            
-    if num != '0':
-        curs.execute(db_change("select title from history where title = ? and id = ? and hide = 'O'"), [name, num])
-        if curs.fetchall() and admin_check(6) != 1:
-            return redirect('/history/' + url_pas(name))
-
-        curs.execute(db_change("select data from history where title = ? and id = ?"), [name, num])
-    else:
-        curs.execute(db_change("select data from data where title = ?"), [name])
-
-    data = curs.fetchall()
-    end_data = render_set(
-        doc_name = name,
-        doc_data = data[0][0] if data else None
-    )
-
-    if end_data == 'HTTP Request 401.3':
-        response_data = 401
-
-        curs.execute(db_change('select data from other where name = "error_401"'))
-        sql_d = curs.fetchall()
-        if sql_d and sql_d[0][0] != '':
-            end_data = '<h2>' + load_lang('error') + '</h2><ul class="inside_ul"><li>' + sql_d[0][0] + '</li></ul>'
+            curs.execute(db_change("select data from data where title = ?"), [name])
+
+        data = curs.fetchall()
+        end_data = render_set(
+            doc_name = name,
+            doc_data = data[0][0] if data else None
+        )
+
+        if end_data == 'HTTP Request 401.3':
+            response_data = 401
+
+            curs.execute(db_change('select data from other where name = "error_401"'))
+            sql_d = curs.fetchall()
+            if sql_d and sql_d[0][0] != '':
+                end_data = '<h2>' + load_lang('error') + '</h2><ul class="inside_ul"><li>' + sql_d[0][0] + '</li></ul>'
+            else:
+                end_data = '<h2>' + load_lang('error') + '</h2><ul class="inside_ul"><li>' + load_lang('authority_error') + '</li></ul>'
+        elif end_data == 'HTTP Request 404':
+            response_data = 404
+
+            curs.execute(db_change('select data from other where name = "error_404"'))
+            sql_d = curs.fetchall()
+            if sql_d and sql_d[0][0] != '':
+                end_data = '<h2>' + load_lang('error') + '</h2><ul class="inside_ul"><li>' + sql_d[0][0] + '</li></ul>'
+            else:
+                end_data = '<h2>' + load_lang('error') + '</h2><ul class="inside_ul"><li>' + load_lang('decument_404_error') + '</li></ul>'
+
+            curs.execute(db_change('' + \
+                'select ip, date, leng, send, id from history ' + \
+                'where title = ? and hide != "O" order by id + 0 desc limit 3' + \
+            ''), [name])
+            sql_d = curs.fetchall()
+            if sql_d:
+                end_data += '<h2>' + load_lang('history') + '</h2><ul class="inside_ul">'
+                for i in sql_d:
+                    if re.search(r"\+", i[2]):
+                        leng = '<span style="color:green;">(' + i[2] + ')</span>'
+                    elif re.search(r"\-", i[2]):
+                        leng = '<span style="color:red;">(' + i[2] + ')</span>'
+                    else:
+                        leng = '<span style="color:gray;">(' + i[2] + ')</span>'
+
+                    end_data += '<li>' + i[1] + ' | r' + i[4] + ' | ' + ip_pas(i[0]) + ' | ' + leng + (' | ' + i[3] if i[3] != '' else '') + '</li>'
+
+                end_data += '<li><a href="/history/' + url_pas(name) + '">(...)</a></li></ul>'
         else:
-            end_data = '<h2>' + load_lang('error') + '</h2><ul class="inside_ul"><li>' + load_lang('authority_error') + '</li></ul>'
-    elif end_data == 'HTTP Request 404':
-        response_data = 404
-
-        curs.execute(db_change('select data from other where name = "error_404"'))
-        sql_d = curs.fetchall()
-        if sql_d and sql_d[0][0] != '':
-            end_data = '<h2>' + load_lang('error') + '</h2><ul class="inside_ul"><li>' + sql_d[0][0] + '</li></ul>'
+            response_data = 200
+
+        if num != '0':
+            menu += [['history/' + url_pas(name), load_lang('history')]]
+            sub = ' (r' + str(num) + ')'
+            acl = 0
+            r_date = 0
         else:
-            end_data = '<h2>' + load_lang('error') + '</h2><ul class="inside_ul"><li>' + load_lang('decument_404_error') + '</li></ul>'
-
-        curs.execute(db_change('' + \
-            'select ip, date, leng, send, id from history ' + \
-            'where title = ? and hide != "O" order by id + 0 desc limit 3' + \
-        ''), [name])
-        sql_d = curs.fetchall()
-        if sql_d:
-            end_data += '<h2>' + load_lang('history') + '</h2><ul class="inside_ul">'
-            for i in sql_d:
-                if re.search(r"\+", i[2]):
-                    leng = '<span style="color:green;">(' + i[2] + ')</span>'
-                elif re.search(r"\-", i[2]):
-                    leng = '<span style="color:red;">(' + i[2] + ')</span>'
-                else:
-                    leng = '<span style="color:gray;">(' + i[2] + ')</span>'
-
-                end_data += '<li>' + i[1] + ' | r' + i[4] + ' | ' + ip_pas(i[0]) + ' | ' + leng + (' | ' + i[3] if i[3] != '' else '') + '</li>'
-
-            end_data += '<li><a href="/history/' + url_pas(name) + '">(...)</a></li></ul>'
-    else:
-        response_data = 200
-
-    if num != '0':
-        menu += [['history/' + url_pas(name), load_lang('history')]]
-        sub = ' (r' + str(num) + ')'
-        acl = 0
-        r_date = 0
-    else:
-        curs.execute(db_change("select title from acl where title = ?"), [name])
-        acl = 1 if curs.fetchall() else 0
-        menu_acl = 1 if acl_check(name) == 1 else 0
-        if response_data == 404:
-            menu += [['edit/' + url_pas(name), load_lang('create'), menu_acl]] 
+            curs.execute(db_change("select title from acl where title = ?"), [name])
+            acl = 1 if curs.fetchall() else 0
+            menu_acl = 1 if acl_check(name) == 1 else 0
+            if response_data == 404:
+                menu += [['edit/' + url_pas(name), load_lang('create'), menu_acl]] 
+            else:
+                menu += [['edit/' + url_pas(name), load_lang('edit'), menu_acl]]
+
+            menu += [
+                ['topic/' + url_pas(name), load_lang('discussion'), topic], 
+                ['history/' + url_pas(name), load_lang('history')], 
+                ['xref/' + url_pas(name), load_lang('backlink')], 
+                ['acl/' + url_pas(name), load_lang('acl'), acl],
+            ]
+
+            """
+            if name_doc_pass != '':
+                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 uppage != 0:
+                menu += [['w/' + url_pas(uppage), load_lang('upper')]]
+
+            if down:
+                menu += [['down/' + url_pas(name), load_lang('sub')]]
+
+            curs.execute(db_change("select date from history where title = ? order by date desc limit 1"), [name])
+            r_date = curs.fetchall()
+            r_date = r_date[0][0] if r_date else 0
+
+        div = file_data + user_doc + end_data + category_doc
+
+        curs.execute(db_change("select data from other where name = 'body'"))
+        body = curs.fetchall()
+        div = (body[0][0] + div) if body else div
+
+        curs.execute(db_change("select data from other where name = 'bottom_body'"))
+        body = curs.fetchall()
+        div += body[0][0] if body else ''
+
+        if ip_or_user(ip) == 0:
+            curs.execute(db_change("select title from scan where user = ? and title = ?"), [ip, name])
+            watch_list = 2 if curs.fetchall() else 1
         else:
-            menu += [['edit/' + url_pas(name), load_lang('edit'), menu_acl]]
-            
-        menu += [
-            ['topic/' + url_pas(name), load_lang('discussion'), topic], 
-            ['history/' + url_pas(name), load_lang('history')], 
-            ['xref/' + url_pas(name), load_lang('backlink')], 
-            ['acl/' + url_pas(name), load_lang('acl'), acl],
-        ]
-
-        if name_doc_pass != '':
-            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 uppage != 0:
-            menu += [['w/' + url_pas(uppage), load_lang('upper')]]
-
-        if down:
-            menu += [['down/' + url_pas(name), load_lang('sub')]]
-
-        curs.execute(db_change("select date from history where title = ? order by date desc limit 1"), [name])
-        r_date = curs.fetchall()
-        r_date = r_date[0][0] if r_date else 0
-
-    div = file_data + user_doc + end_data + category_doc
-
-    curs.execute(db_change("select data from other where name = 'body'"))
-    body = curs.fetchall()
-    div = (body[0][0] + div) if body else div
-
-    curs.execute(db_change("select data from other where name = 'bottom_body'"))
-    body = curs.fetchall()
-    div += body[0][0] if body else ''
-
-    if ip_or_user(ip) == 0:
-        curs.execute(db_change("select title from scan where user = ? and title = ?"), [ip, name])
-        watch_list = 2 if curs.fetchall() else 1
-    else:
-        watch_list = 0
-
-    return easy_minify(flask.render_template(skin_check(),
-        imp = [name, wiki_set(), wiki_custom(), wiki_css([sub, r_date, watch_list])],
-        data = div,
-        menu = menu
-    )), response_data
+            watch_list = 0
+
+        return easy_minify(flask.render_template(skin_check(),
+            imp = [name, wiki_set(), wiki_custom(), wiki_css([sub, r_date, watch_list])],
+            data = div,
+            menu = menu
+        )), response_data

+ 52 - 51
route/view_xref.py

@@ -1,53 +1,54 @@
 from .tool.func import *
 
-def view_xref_2(conn, name, xref_type = '1'):
-    curs = conn.cursor()
-
-    if acl_check(name, 'render') == 1:
-        return re_error('/ban')
-
-    num = int(number_check(flask.request.args.get('num', '1')))
-    sql_num = (num * 50 - 50) if num * 50 > 0 else 0
-    
-    if xref_type == '1':
-        div = '<a href="/xref/this/' + url_pas(name) + '">(' + load_lang('link_in_this') + ')</a><hr class="main_hr">'
-        
-        data_sub = '(' + load_lang('backlink') + ')'
-    else:
-        div = '<a href="/xref/' + url_pas(name) + '">(' + load_lang('normal') + ')</a><hr class="main_hr">'
-        
-        data_sub = '(' + load_lang('link_in_this') + ')'
-
-    div += '<ul class="inside_ul">'
-
-    sql_insert = ['link', 'title'] if xref_type == '1' else ['title', 'link']
-    curs.execute(db_change("" + \
-        "select distinct " + sql_insert[0] + ", type from back " + \
-        "where " + sql_insert[1] + " = ? and not type = 'no' and not type = 'nothing'" + \
-        "order by type asc, title asc limit ?, 50" + \
-    ""), [
-        name,
-        sql_num
-    ])
-
-    data_list = curs.fetchall()
-    for data in data_list:
-        div += '<li><a href="/w/' + url_pas(data[0]) + '">' + html.escape(data[0]) + '</a>'
-
-        if data[1]:
-            div += ' (' + data[1] + ')'
-
-        curs.execute(db_change("select title from back where title = ? and type = 'include'"), [data[0]])
-        db_data = curs.fetchall()
-        if db_data:
-            div += ' <a id="inside" href="/xref/' + url_pas(data[0]) + '">(' + load_lang('backlink') + ')</a>'
-
-        div += '</li>'
-
-    div += '</ul>' + next_fix('/xref/' + url_pas(name) + '?change=' + xref_type + '&num=', num, data_list)
-
-    return easy_minify(flask.render_template(skin_check(),
-        imp = [name, wiki_set(), wiki_custom(), wiki_css([data_sub, 0])],
-        data = div,
-        menu = [['w/' + url_pas(name), load_lang('return')], ['xref_reset/' + url_pas(name), load_lang('reset_backlink')]]
-    ))
+def view_xref(name = 'Test', xref_type = 1):
+    with get_db_connect() as conn:
+        curs = conn.cursor()
+
+        if acl_check(name, 'render') == 1:
+            return re_error('/ban')
+
+        num = int(number_check(flask.request.args.get('num', '1')))
+        sql_num = (num * 50 - 50) if num * 50 > 0 else 0
+
+        if xref_type == 1:
+            div = '<a href="/xref_this/' + url_pas(name) + '">(' + load_lang('link_in_this') + ')</a><hr class="main_hr">'
+
+            data_sub = '(' + load_lang('backlink') + ')'
+        else:
+            div = '<a href="/xref/' + url_pas(name) + '">(' + load_lang('normal') + ')</a><hr class="main_hr">'
+
+            data_sub = '(' + load_lang('link_in_this') + ')'
+
+        div += '<ul class="inside_ul">'
+
+        sql_insert = ['link', 'title'] if xref_type == 1 else ['title', 'link']
+        curs.execute(db_change("" + \
+            "select distinct " + sql_insert[0] + ", type from back " + \
+            "where " + sql_insert[1] + " = ? and not type = 'no' and not type = 'nothing'" + \
+            "order by type asc, title asc limit ?, 50" + \
+        ""), [
+            name,
+            sql_num
+        ])
+
+        data_list = curs.fetchall()
+        for data in data_list:
+            div += '<li><a href="/w/' + url_pas(data[0]) + '">' + html.escape(data[0]) + '</a>'
+
+            if data[1]:
+                div += ' (' + data[1] + ')'
+
+            curs.execute(db_change("select title from back where title = ? and type = 'include'"), [data[0]])
+            db_data = curs.fetchall()
+            if db_data:
+                div += ' <a id="inside" href="/xref/' + url_pas(data[0]) + '">(' + load_lang('backlink') + ')</a>'
+
+            div += '</li>'
+
+        div += '</ul>' + next_fix('/xref/' + url_pas(name) + '?change=' + str(xref_type) + '&num=', num, data_list)
+
+        return easy_minify(flask.render_template(skin_check(),
+            imp = [name, wiki_set(), wiki_custom(), wiki_css([data_sub, 0])],
+            data = div,
+            menu = [['w/' + url_pas(name), load_lang('return')], ['xref_reset/' + url_pas(name), load_lang('reset_backlink')]]
+        ))

+ 1 - 1
version.json

@@ -1,6 +1,6 @@
 {
     "beta" : {
-        "r_ver" : "v3.4.5 (stable1) (beta1) (dev6)",
+        "r_ver" : "v3.4.5 (stable1) (beta1) (dev7)",
         "c_ver" : "3500106",
         "s_ver" : "3500110"
     }

+ 12 - 12
views/main_css/css/main.css

@@ -44,11 +44,11 @@ a {
     color: red;
 }
 
-#inside, #out_link, #out_link::before, .opennamuLinkOut {
+#inside, #out_link, #out_link::before, .opennamu_link_out {
     color: green;
 }
 
-#out_link::before, .opennamuLinkOut::before {
+#out_link::before, .opennamu_link_out::before {
     content: '🅴';
     
     font-weight: lighter;
@@ -74,35 +74,35 @@ a {
 }
 
 /* 토론 관련 */
-#toron, .opennamu_comment {
+.opennamu_comment {
     width: 100%;
 }
 
-#toron_color_green, .opennamu_comment_color_green {
+.opennamu_comment_color_green {
     background: palegreen;
 }
 
-#toron_color_blue, .opennamu_comment_color_blue {
+.opennamu_comment_color_blue {
     background: paleturquoise;
 }
 
-#toron_color_red, .opennamu_comment_color_red {
+.opennamu_comment_color_red {
     background: palevioletred;
 }
 
-#toron_color_normal, .opennamu_comment_color_default {
+.opennamu_comment_color_default {
     background: palegoldenrod;
 }
 
-#toron_color_grey, .opennamu_comment_color_gray {
+.opennamu_comment_color_gray {
     background: gainsboro;
 }
 
-#toron_color_not, .opennamu_comment_blind {
+.opennamu_comment_blind {
     display: none;
 }
 
-#topic_scroll, .opennamu_comment_scroll {
+.opennamu_comment_scroll {
     max-height: 500px;
     
     overflow: scroll;
@@ -111,11 +111,11 @@ a {
     scrollbar-width: none;
 }
 
-#topic_scroll::-webkit-scrollbar, .opennamu_comment_scroll::-webkit-scrollbar {
+.opennamu_comment_scroll::-webkit-scrollbar {
     display: none;
 }
 
-.topic_content {
+.opennamu_comment_textarea {
     height: 200px;
 }
 

+ 1 - 2
views/main_css/js/func/shortcut.js

@@ -11,7 +11,7 @@ document.onkeypress = function(e) {
         shortcut_check !== 'input' &&
         shortcut_check !== 'textarea'
     ) {
-        let doc_shortcut = /^\/(w|history|edit|acl|topic|xref)\//i;
+        let doc_shortcut = /^\/(w|w_rev|w_from|history|edit|acl|topic|xref)\//i;
 
         shortcut_key_list[e.key] = 1;
         if(shortcut_key_list['f'] === 1) {
@@ -26,7 +26,6 @@ document.onkeypress = function(e) {
 
         if(window.location.pathname.match(doc_shortcut)) {
             let doc_href = window.location.pathname.replace(doc_shortcut, '');
-            doc_href = doc_href.replace(/(?:%2F|\/)(?:doc_from|doc_rev)(?:%2F|\/)(?:((?!%2F|\/).)+)$/, '');
             
             if(shortcut_key_list['w'] === 1) {
                 window.location.pathname = '/w/' + doc_href;

+ 18 - 17
views/main_css/js/render/markdown.js

@@ -10,8 +10,8 @@ class opennamu_render_markdown {
         doc_name
     ) {
         this.doc_data = document.getElementById(render_part_id_add + render_part_id).innerHTML;
-
-        render_part_id_add = render_part_id_add.replace(/_/g, '<underBar>');
+            
+        this.doc_data = this.doc_data.replace(/_/g, '<uBar>');
 
         this.doc_data = this.doc_data.replace(/&amp;/g, '&');
         this.doc_data = '<brStart>\n' + this.doc_data + '\n<brEnd>';
@@ -109,7 +109,7 @@ class opennamu_render_markdown {
             return '<render' + parser_count_str + 'Span>' + x1 + '</render' + parser_count_str + 'Span>';
         });
         
-        this.doc_data = this.doc_data.replace(/__((?:(?!__|\n).)+)__/g, function(match, x1) {
+        this.doc_data = this.doc_data.replace(/<uBar><uBar>((?:(?!<uBar><uBar>|\n).)+)<uBar><uBar>/g, function(match, x1) {
             parser_count += 1;
             let parser_count_str = String(parser_count);
             
@@ -129,7 +129,7 @@ class opennamu_render_markdown {
             return '<render' + parser_count_str + 'Span>' + x1 + '</render' + parser_count_str + 'Span>';
         });
         
-        this.doc_data = this.doc_data.replace(/_([^_\n]+)_/g, function(match, x1) {
+        this.doc_data = this.doc_data.replace(/<uBar>(((?!<uBar>).)+)<uBar>/g, function(match, x1) {
             parser_count += 1;
             let parser_count_str = String(parser_count);
             
@@ -205,8 +205,8 @@ class opennamu_render_markdown {
                 let heading_n_str = String(heading_n);
                 
                 toc_data += '' +
-                    '<a href="#opennamuHeading' + heading_list_str_2 + '">' + heading_list_str + '</a> ' +
-                    '<span id="opennamuTOCcontent' + heading_n_str + '"></span>' +
+                    '<a href="#opennamu_heading_' + heading_list_str_2 + '">' + heading_list_str + '</a> ' +
+                    '<span id="opennamu_TOC_content_' + heading_n_str + '"></span>' +
                     '<br>' +
                 ''
                 
@@ -215,9 +215,9 @@ class opennamu_render_markdown {
 
                 return '' + 
                     '\n<brEnd>' + 
-                    '<h' + heading_level_str + ' id="opennamuHeading' + heading_list_str_2 + '">' + 
-                        '<a href="#opennamuTOC">' + heading_list_str + '</a> ' + 
-                        '<span id="opennamuHeadingContent' + heading_n_str + '">' + heading_data + '</span>' + 
+                    '<h' + heading_level_str + ' id="opennamu_heading_' + heading_list_str_2 + '">' + 
+                        '<a href="#opennamu_TOC">' + heading_list_str + '</a> ' + 
+                        '<span id="opennamu_heading_content_' + heading_n_str + '">' + heading_data + '</span>' + 
                     '</h' + heading_level_str + '>' +
                     '<brStart>\n' +
                 '';
@@ -297,7 +297,7 @@ class opennamu_render_markdown {
                         link_sub = x1;
                     }
                     
-                    parser_data_temp['render' + parser_count_str + 'Span'] = '<a class="opennamuLinkOut" href="' + link_main + '">';
+                    parser_data_temp['render' + parser_count_str + 'Span'] = '<a class="opennamu_link_out" href="' + link_main + '">';
                     parser_data_temp['/render' + parser_count_str + 'Span'] = '</a>';
 
                     return '<render' + parser_count_str + 'Span>' + link_sub + '</render' + parser_count_str + 'Span>';
@@ -327,7 +327,7 @@ class opennamu_render_markdown {
                     link_main = render_main.do_func_xss_decode(link_main);
                     link_main = opennamu_do_url_encode(link_main);
 
-                    parser_data_temp['render' + parser_count_str + 'Span'] = '<a class="' + render_part_id_add + 'opennamuLink" title="' + link_title + '" href="/w/' + link_main + '">';
+                    parser_data_temp['render' + parser_count_str + 'Span'] = '<a class="' + render_part_id_add + 'opennamu_link" title="' + link_title + '" href="/w/' + link_main + '">';
                     parser_data_temp['/render' + parser_count_str + 'Span'] = '</a>';
 
                     return '<render' + parser_count_str + 'Span>' + link_sub + '</render' + parser_count_str + 'Span>';
@@ -346,7 +346,7 @@ class opennamu_render_markdown {
             
             let link_sub = x1;
 
-            parser_data_temp['render' + parser_count_str + 'Span'] = '<a class="opennamuLinkOut" href="' + link_main + '">';
+            parser_data_temp['render' + parser_count_str + 'Span'] = '<a class="opennamu_link_out" href="' + link_main + '">';
             parser_data_temp['/render' + parser_count_str + 'Span'] = '</a>';
 
             return '<render' + parser_count_str + 'Span>' + link_sub + '</render' + parser_count_str + 'Span>';
@@ -359,7 +359,7 @@ class opennamu_render_markdown {
     do_part_footnote_list() {
         if(this.parser_data_temp_other['footnote'] !== '') {
             let footnote = '';
-            footnote += '<ul id="footnote<underBar>data">';
+            footnote += '<ul id="footnote_data">';
             footnote += this.parser_data_temp_other['footnote'];
             footnote += '</ul>';
             
@@ -478,7 +478,7 @@ class opennamu_render_markdown {
                 link_main = render_main.do_func_xss_decode(link_main);
                 link_main = opennamu_do_url_encode(link_main);
                 
-                parser_data_temp_other['category'] += '<a class="' + render_part_id_add + 'opennamuLink" title="' + link_title + '" href="/w/' + link_main + '">';
+                parser_data_temp_other['category'] += '<a class="' + render_part_id_add + 'opennamu_link" title="' + link_title + '" href="/w/' + link_main + '">';
                 parser_data_temp_other['category'] += category_data;
                 parser_data_temp_other['category'] += '</a>';
                 parser_data_temp_other['category'] += ' | ';
@@ -487,7 +487,7 @@ class opennamu_render_markdown {
             } else if(x1 === 'toc') {
                 if(parser_data_temp_other['toc'] !== '') {
                     return '' +
-                        '<div class="opennamu_TOC">' + 
+                        '<div id="opennamu_TOC" class="opennamu_TOC">' + 
                             '<span class="opennamu_TOC_title">' +
                                 'TOC' +
                             '</span>' + 
@@ -611,6 +611,7 @@ class opennamu_render_markdown {
         let parser_count = this.parser_count['parser'];
         let parser_data_temp = this.parser_data_temp;
         
+        /*
         // 여기 파트 개선 필요
         this.doc_data = this.doc_data.replace(/((?:\n(?: )*\* ?(?:[^\n]+))+)/g, function(match, x1) {
             let list_data = x1;
@@ -628,6 +629,7 @@ class opennamu_render_markdown {
 
             return '\n<brEnd><render' + parser_count_str + 'Span>' + list_data + '</render' + parser_count_str + 'Span>';
         });
+        */
         
         this.parser_count['parser'] = parser_count;
         this.parser_data_temp = parser_data_temp;
@@ -637,8 +639,7 @@ class opennamu_render_markdown {
         this.doc_data = this.doc_data.replace(/<brStart>\n?/g, '');
         this.doc_data = this.doc_data.replace(/\n?<brEnd>/g, '');
         
-        this.doc_data = this.doc_data.replace(/<underBar>/g, '_');
-        this.render_part_id_add = this.render_part_id_add.replace(/<underBar>/g, '_');
+        this.doc_data = this.doc_data.replace(/<uBar>/g, '_');
         
         this.doc_data = this.doc_data.replace(/\n/g, '<br>');
         

+ 10 - 10
views/main_css/js/render/wiki.js

@@ -18,10 +18,10 @@ class opennamu_render_wiki {
         let link_list_sub = [];
         for(
             let for_a = 0;
-            document.getElementsByClassName(this.render_part_id_add + 'opennamuLink')[for_a];
+            document.getElementsByClassName(this.render_part_id_add + 'opennamu_link')[for_a];
             for_a++
         ) {
-            let link_data = document.getElementsByClassName(this.render_part_id_add + 'opennamuLink')[for_a];
+            let link_data = document.getElementsByClassName(this.render_part_id_add + 'opennamu_link')[for_a];
             
             link_list_sub.push(link_data.title);
             
@@ -44,7 +44,7 @@ class opennamu_render_wiki {
                 for(let for_a in link_list) {
                     if(!xhr_data[for_a]) {
                         for(let for_b in link_list[for_a]) {
-                            document.getElementsByClassName(render_part_id_add + 'opennamuLink')[link_list[for_a][for_b]].id = "not_thing";
+                            document.getElementsByClassName(render_part_id_add + 'opennamu_link')[link_list[for_a][for_b]].id = "not_thing";
                         }
                     }
                 }
@@ -53,19 +53,19 @@ class opennamu_render_wiki {
     }
     
     do_part_toc() {
-        if(document.getElementById('opennamuTOCcontent1')) {
+        if(document.getElementById('opennamu_TOC_content_1')) {
             for(
                 let for_a = 1;
-                document.getElementById('opennamuHeadingContent' + String(for_a));
+                document.getElementById('opennamu_heading_content_' + String(for_a));
                 for_a++
             ) {
-                let heading_data = document.getElementById('opennamuHeadingContent' + String(for_a));
-                document.getElementById('opennamuTOCcontent' + String(for_a)).innerHTML = heading_data.innerText;
+                let heading_data = document.getElementById('opennamu_heading_content_' + String(for_a));
+                document.getElementById('opennamu_TOC_content_' + String(for_a)).innerHTML = heading_data.innerText;
 
-                document.getElementById('opennamuHeadingContent' + String(for_a)).id = heading_data.innerText;
+                document.getElementById('opennamu_heading_content_' + String(for_a)).id = heading_data.innerText;
             }
 
-            let toc_data_all = document.getElementsByClassName('opennamuTOC');
+            let toc_data_all = document.getElementsByClassName('opennamu_TOC');
             let toc_data = '';
             for(
                 let for_a = 0;
@@ -76,7 +76,7 @@ class opennamu_render_wiki {
                     toc_data = toc_data_all[0].innerHTML;
                 }
 
-                document.getElementsByClassName('opennamuTOC')[for_a].innerHTML = toc_data;
+                document.getElementsByClassName('opennamu_TOC')[for_a].innerHTML = toc_data;
             }
         }
     }

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

@@ -1288,15 +1288,13 @@ function do_onmark_redirect_render(data, data_js, name_doc) {
         if(
             name_include == '' &&
             window.location.search === '' &&
-            window.location.pathname.match(/\/w\//) &&
-            !window.location.pathname.match(/\/doc_from\//)
+            window.location.pathname.match(/\/w\//)
         ) {
-            window.location.href = '/w/' + do_url_change(link_main) + '/doc_from/' + do_url_change(name_doc) + link_sub;
+            window.location.href = '/w_from/' + do_url_change(link_main);
         }
         
         return [
-            '/w/' + do_url_change(link_main) + 
-            '/doc_from/' + do_url_change(name_doc) + 
+            '/w_from/' + do_url_change(link_main), 
             link_sub,
             data_js, 
             1
@@ -1341,7 +1339,6 @@ function do_onmark_render(
     var data_nowiki = {};
         
     name_doc = do_xss_change(name_doc);
-    console.log(name_doc);
 
     let xhr = new XMLHttpRequest();
     xhr.open("GET", "/api/setting/inter_wiki");