Browse Source

Merge pull request #1161 from openNAMU/dev

버그 수정
잉여개발기 (SPDV) 4 năm trước cách đây
mục cha
commit
d53358fbcc

+ 0 - 15
route/api_topic_sub.py

@@ -33,21 +33,6 @@ def api_topic_sub_2(conn, topic_num):
         for i in data:
             data_v = i[1] if i[4] != 'O' or admin == 1 else ''
             
-            data_r = render_set(data = data_v, num = 2, include = 'topic_' + i[0], acl = get_acl)
-            data_r_html = data_r[0]
-            data_r_js = data_r[1]
-            
-            data_r_html = re.sub(
-                r'<topic_a>((?:(?!<\/topic_a>).)+)<\/topic_a>', 
-                '<a href="\g<1>">\g<1></a>', 
-                data_r_html
-            )
-            data_r_html = re.sub(
-                r'&lt;topic_call&gt;@((?:(?!&lt;\/topic_call&gt;).)+)&lt;\/topic_call&gt;', 
-                '<a href="/w/user:\g<1>">@\g<1></a>', 
-                data_r_html
-            )
-            
             data_a[i[0]] = {
                 "data" : data_v,
                 "date" : i[2],

+ 1 - 3
route/api_w.py

@@ -5,7 +5,6 @@ def api_w_2(conn, name):
 
     data_arg_v = flask.request.args.get('v', '')
     if flask.request.method == 'POST':
-        print(data_arg_v)
         if data_arg_v == '' or data_arg_v == 'preview':
             data_org = flask.request.form.get('data', '')
             data_pas = render_set(
@@ -40,14 +39,13 @@ def api_w_2(conn, name):
                 find_replace_moment = re.findall(r'(@([^=@]+)=([^=@]+)@|@([^=@]+)@)', json_data)
                 for i in find_replace_moment:
                     if i[1] != '':
-                        get_all_change_1 += [['@' + i[1] + '@', i[2]]]
+                        get_all_change_1 += [[i[1], i[2]]]
 
                         json_data = json_data.replace(i[0], '@' + i[1] + '@', 1)
                     else:
                         json_data = json_data.replace(i[0], '@' + i[3] + '@', 1)
 
                 get_all_change_2 = include_list + get_all_change_1
-                print(get_all_change_2)
                 for i in get_all_change_2:
                     json_data = json_data.replace('@' + i[0] + '@', i[1])
 

+ 11 - 14
route/inter_wiki.py

@@ -29,7 +29,7 @@ def inter_wiki_2(conn, tools):
         curs.execute(db_change("select html from html_filter where kind = 'name'"))
     elif tools == 'edit_filter':
         del_link = 'del_edit_filter'
-        plus_link = 'manager/9'
+        plus_link = 'plus_edit_filter'
         title = load_lang('edit_filter_list')
         div = ''
 
@@ -75,29 +75,26 @@ def inter_wiki_2(conn, tools):
         div += '<ul class="inside_ul">'
 
         for data in db_data:
-            if tools == 'inter_wiki':
-                div += '<li>' + data[0] + ' : <a id="out_link" href="' + data[1] + '">' + data[1] + '</a>'
-            elif tools == 'edit_filter':
-                div += '<li><a href="/plus_edit_filter/' + url_pas(data[0]) + '">' + data[0] + '</a>'
-            else:
-                div += '<li>' + data[0]
+            div += '<li>' + data[0]
 
-                if tools == 'edit_top':
-                    div += ' : ' + data[1]
+            if tools == 'edit_top':
+                div += ' : ' + data[1]
+            elif tools == 'inter_wiki':
+                div += ' : <a id="out_link" href="' + data[1] + '">' + data[1] + '</a>'
 
             if admin == 1:
                 div += ' <a href="/' + plus_link + '/' + url_pas(data[0]) + '">(' + load_lang('edit') + ')</a>'
                 div += ' <a href="/' + del_link + '/' + url_pas(data[0]) + '">(' + load_lang('delete') + ')</a>'
-
+                
             div += '</li>'
 
         div += '</ul>'
 
         if admin == 1:
-            div += '<hr class=\"main_hr\"><a href="/' + plus_link + '">(' + load_lang('add') + ')</a>'
-    else:
-        if admin == 1:
-            div += '<a href="/' + plus_link + '">(' + load_lang('add') + ')</a>'
+            div += '<hr class="main_hr">'
+            
+    if admin == 1:    
+        div += '<a href="/' + plus_link + '">(' + load_lang('add') + ')</a>'
 
     return easy_minify(flask.render_template(skin_check(),
         imp = [title, wiki_set(), wiki_custom(), wiki_css([0, 0])],

+ 5 - 4
route/inter_wiki_plus.py

@@ -2,6 +2,10 @@ from .tool.func import *
 
 def inter_wiki_plus_2(conn, tools, name):
     curs = conn.cursor()
+    
+    if not name:
+        if tools == 'plus_edit_filter':
+            return redirect('/manager/9')
 
     if flask.request.method == 'POST':
         if tools == 'plus_inter_wiki':
@@ -124,10 +128,7 @@ def inter_wiki_plus_2(conn, tools, name):
                 <hr class="main_hr">
                 <input value="''' + html.escape(value[2]) + '''" type="text" name="icon">
             '''
-        elif tools == 'plus_edit_filter':
-            if not name:
-                name = 'test'
-            
+        elif tools == 'plus_edit_filter':            
             curs.execute(db_change("select plus, plus_t from html_filter where html = ? and kind = 'regex_filter'"), [name])
             exist = curs.fetchall()
             if exist:

+ 13 - 8
route/tool/func.py

@@ -84,7 +84,7 @@ if sys.version_info < (3, 6):
 global_lang = {}
 global_wiki_set = {}
 
-data_css_ver = '103'
+data_css_ver = '105'
 data_css = ''
 
 conn = ''
@@ -1050,6 +1050,7 @@ def ip_or_user(data = ''):
 def admin_check(num = None, what = None, name = ''):
     ip = ip_check() if name == '' else name
     time_data = get_time()
+    pass_ok = 0
 
     if ip_or_user(ip) == 0:
         curs.execute(db_change(
@@ -1080,7 +1081,7 @@ def admin_check(num = None, what = None, name = ''):
                 'select name from alist where name = ? and acl = "owner"'
             ), [user_auth])
             if curs.fetchall():
-                return 1
+                pass_ok = 1
             else:
                 if num == 'all':                    
                     curs.execute(db_change(
@@ -1092,13 +1093,17 @@ def admin_check(num = None, what = None, name = ''):
                     ), [user_auth, check])
                     
                 if curs.fetchall():
-                    if what:
-                        curs.execute(db_change(
-                            "insert into re_admin (who, what, time) values (?, ?, ?)"
-                        ), [ip, what, time_data])
-                        conn.commit()
+                    pass_ok = 1
 
-                    return 1
+                
+            if pass_ok == 1:
+                if what:
+                    curs.execute(db_change(
+                        "insert into re_admin (who, what, time) values (?, ?, ?)"
+                    ), [ip, what, time_data])
+                    conn.commit()
+
+                return 1
 
     return 0
 

+ 15 - 1
route/tool/func_mark.py

@@ -106,11 +106,25 @@ def render_do(doc_name, doc_data, data_type, data_in):
     rep_data = curs.fetchall()
     rep_data = rep_data[0][0] if rep_data else 'namumark'
     
+    curs.execute(db_change('select html, plus, plus_t from html_filter where kind = "inter_wiki"'))
+    inter_wiki_data = curs.fetchall()
+    wiki_set_data = {
+        "inter_wiki" : {}
+    }
+    for i in inter_wiki_data:
+        wiki_set_data['inter_wiki'][i[0]] = {
+            "logo" : i[2],
+            "link" : i[1]
+        }
+        
+    wiki_set_data = json.dumps(wiki_set_data, ensure_ascii = False)
+    
     if data_type != 'backlink':
         if rep_data == 'namumark':
             data_in = (data_in + '_') if data_in else ''
             data_end = [
-                '<pre style="display: none;" id="' + data_in + 'render_content_load">' + html.escape(doc_data) + '</pre>'
+                '<pre style="display: none;" id="' + data_in + 'render_content_set">' + html.escape(wiki_set_data) + '</pre>' + \
+                '<pre style="display: none;" id="' + data_in + 'render_content_load">' + html.escape(doc_data) + '</pre>' + \
                 '<div class="render_content" id="' + data_in + 'render_content"></div>', 
                 '''
                     do_onmark_render(

+ 1 - 0
route/tool/func_tool.py

@@ -6,6 +6,7 @@ import re
 
 import os
 import html
+import json
 import sqlite3
 import threading
 

+ 1 - 1
version.json

@@ -1,6 +1,6 @@
 {
     "beta" : {
-        "r_ver" : "v3.4.0 (stable-01b) (beta-01) (dev-10)",
+        "r_ver" : "v3.4.0 (stable-01b) (beta-02) (dev-13)",
         "c_ver" : "3400101",
         "s_ver" : "12"
     }

+ 1 - 1
views/main_css/js/load_topic.js

@@ -48,7 +48,7 @@ function new_topic_load(topic_num, type_do = 'top', some = '', where = 'top_topi
                         '<a href="$1">$1</a>'
                     );
                     data_i_pas = data_i_pas.replace(
-                        /&lt;topic_call&gt;((?:(?!&lt;\/topic_call&gt;).)+)&lt;\/topic_call&gt;/g,
+                        /&lt;topic_call&gt;@((?:(?!&lt;\/topic_call&gt;).)+)&lt;\/topic_call&gt;/g,
                         '<a href="/w/user:$1">@$1</a>', 
                     );
                 }

+ 13 - 3
views/main_css/js/render_namumark.js

@@ -8,7 +8,11 @@ function get_link_state(data) {
     var link_list_2 = {}
     for(var i = 0; document.getElementsByClassName(data + 'link_finder')[i]; i++) {
         var data_class = document.getElementsByClassName(data + 'link_finder')[i];
-        if(data_class.id !== 'out_link' && !data_class.href.match(/^#/)) {            
+        if(
+            data_class.id !== 'out_link' && 
+            data_class.id !== 'inside' && 
+            !data_class.href.match(/^#/)
+        ) {            
             link_list.push(data_class.title);
             
             if(!link_list_2[data_class.title]) {
@@ -16,7 +20,13 @@ function get_link_state(data) {
             } else {
                 link_list_2[data_class.title].push(i);
             }
-        } else if(data_exter_link === '1' && data_class.id === 'out_link') {
+        } else if(
+            data_exter_link === '1' && 
+            (
+                data_class.id === 'out_link' ||
+                data_class.id === 'inside'
+            )
+        ) {
             document.getElementsByClassName(data + 'link_finder')[i].target = '_self';
         }
     }
@@ -227,11 +237,11 @@ function load_include(name_doc, name_ob, data_include, name_org = '') {
     xhr.open("POST", "/api/w/" + encodeURI(name_doc) + "?v=include&include=" + name_ob + "&name_org=" + name_org);
     xhr.send(data_form);
 
+    document.getElementsByClassName(name_ob)[0].href = "/w/" + do_url_change(name_doc);
     xhr.onreadystatechange = function() {
         if(this.readyState === 4 && this.status === 200) {
             if(this.responseText === "{}\n") {
                 document.getElementById(name_ob).innerHTML = "";
-                document.getElementsByClassName(name_ob)[0].href = "/w/" + do_url_change(name_doc); 
                 document.getElementsByClassName(name_ob)[0].id = "not_thing";
             } else {
                 var data_load = JSON.parse(this.responseText);

+ 78 - 21
views/main_css/js/render_onmark.js

@@ -1,5 +1,5 @@
-// 인터위키
 // 표 캡션
+// 중괄호 문법 정리
 // Tool
 function do_url_change(data) {
     return encodeURIComponent(data);
@@ -203,11 +203,16 @@ function do_onmark_heading_render(data, name_doc, name_include) {
     return data;
 }
 
-function do_onmark_link_render(data, data_js, name_doc, name_include, data_nowiki) {
+function do_onmark_link_render(data, data_js, name_doc, name_include, data_nowiki, data_wiki_set) {
     var num_link = 0;
+    
     var category_data = '';
+    
     var category_re = /^(분류|category):/i;
+    let inter_re = /^inter:([^:]+):/i;
+    let out_link_re = /^http(s)?:\/\//i;
     var file_re = /^(파일|file|외부|out):/i;
+    
     var link_re = /\[\[(((?!\[\[|\]\]).)+)\]\]/;
     
     while(data.match(link_re)) {
@@ -302,7 +307,7 @@ function do_onmark_link_render(data, data_js, name_doc, name_include, data_nowik
                 ''
 
                 return '';
-            } else if(link_real.match(/^http(s)?:\/\//)) {
+            } else if(link_real.match(out_link_re)) {
                 var i = 0;
                 while(i < 2) {
                     if(i === 0) {
@@ -326,6 +331,58 @@ function do_onmark_link_render(data, data_js, name_doc, name_include, data_nowik
                             'name="' + name_include + 'set_link_' + num_link_str + '" ' + 
                             'title=""' +
                             'href="">' + link_out + '</a>';
+            } else if(link_real.match(inter_re)) {
+                let data_inter = link_real.match(inter_re);
+                let data_inter_link = '';
+                let data_inter_logo = '';
+                if(data_inter) {
+                    if(link_real === link_out) {
+                        link_real = link_real.replace(
+                            inter_re, 
+                            ''
+                        );
+                        
+                        link_out = link_real;
+                    } else {
+                        link_real = link_real.replace(
+                            inter_re, 
+                            ''
+                        );
+                    }
+                        
+                    let data_inter_get = data_wiki_set['inter_wiki'][data_inter[1]];
+                    if(data_inter_get) {
+                        data_inter_link = data_inter_get['link'];
+                        if(data_inter_get['logo'] !== '') {
+                            data_inter_logo = data_inter_get['logo'];
+                            data_inter_logo = data_inter_logo.replace(/&lt;/g, '<').replace(/&gt;/g, '>');
+                        } else {
+                            data_inter_logo = data_inter[1] + ':';
+                        }
+                    } else {
+                        return '';
+                    }
+                    
+                    data_js += '' +
+                        'document.getElementsByName("' + name_include + 'set_link_' + num_link_str + '")[0].title = ' + 
+                        '"' + do_js_safe_change(do_xss_change(data_inter[1] + ':' + link_real)) + '";' +
+                            '\n' +
+                    '';
+                    data_js += '' +
+                        'document.getElementsByName("' + name_include + 'set_link_' + num_link_str + '")[0].href = ' + 
+                        '"' + data_inter_link + do_url_change(link_real) + '";' +
+                            '\n' +
+                    '';
+
+                    return  '<a id="inside" ' +
+                            'class="' + name_include + 'link_finder" ' +
+                            'target="_blank" ' +
+                            'name="' + name_include + 'set_link_' + num_link_str + '" ' + 
+                            'title=""' +
+                            'href="">' + data_inter_logo + link_out + '</a>'; 
+                } else {
+                    return '';
+                }
             } else {
                 if(link_real.match(/^\//)) {
                     link_real = name_doc + link_real;
@@ -1138,9 +1195,17 @@ function do_onmark_remark_render(data) {
 }
 
 // Main
-function do_onmark_render(test_mode = 'test', name_id = '', name_include = '', name_doc = '', doc_data = '') {    
+function do_onmark_render(
+    test_mode = 'test', 
+    name_id = '', 
+    name_include = '', 
+    name_doc = '', 
+    doc_data = ''
+) {
+    let data_wiki_set = {};
 	if(test_mode === 'normal') {
         var data = '\n' + document.getElementById(name_id + '_load').innerHTML.replace(/\r/g, '') + '\n';
+        data_wiki_set = JSON.parse(document.getElementById(name_id + '_set').innerHTML);
     } else if(test_mode === 'manual') { 
         var data = '\n' + doc_data.replace(/\r/g, '') + '\n';
     } else {
@@ -1156,7 +1221,7 @@ function do_onmark_render(test_mode = 'test', name_id = '', name_include = '', n
     data = data_var[0];
     data_js = data_var[1];
     var passing = data_var[2];
-    
+
     if(passing === 0) {
         data = do_onmark_remark_render(data);
         
@@ -1164,51 +1229,43 @@ function do_onmark_render(test_mode = 'test', name_id = '', name_include = '', n
         data = data_var[0];
         data_js = data_var[1];
         data_nowiki = data_var[2];
-        console.log('nowiki');
-        
-        console.log(data);
         
         data_var = do_onmark_math_render(data, data_js, name_include);
         data = data_var[0];
         data_js = data_var[1];
-        console.log('math');
 
         data_var = do_onmark_include_render(data, data_js, name_include, data_nowiki);
         data = data_var[0];
         data_js = data_var[1];
-        console.log('include');
 
         data_var = do_onmark_middle_render(data, data_js, name_include, data_nowiki, name_doc);
         data = data_var[0];
         data_js = data_var[1];
         data_nowiki = data_var[2];
-        console.log('middle');
 
         data = do_onmark_text_render(data);
-        console.log('text');
         data = do_onmark_heading_render(data, name_doc, name_include);
-        console.log('heading');
         data = do_onmark_table_render(data);
-        console.log('table');
 
-        data_var = do_onmark_link_render(data, data_js, name_doc, name_include, data_nowiki);
+        data_var = do_onmark_link_render(
+            data, 
+            data_js, 
+            name_doc, 
+            name_include,
+            data_nowiki,
+            data_wiki_set
+        );
         data = data_var[0];
         data_js = data_var[1];
-        console.log('link');
 
         data_var = do_onmark_macro_render(data, data_js);
         data = data_var[0];
         data_js = data_var[1];
-        console.log('macro');
         
         data = do_onmark_list_render(data);
-        console.log('list');
         data = do_onmark_hr_render(data);
-        console.log('hr');
         data = do_onmark_footnote_render(data, name_include);
-        console.log('footnote');
         data = do_onmark_last_render(data, name_include);
-        console.log('all')
     }
     
     data_js += '' +