Просмотр исходного кода

야밤에 또 너무 많은 구조 변경

잉여개발기 (SPDV) 2 лет назад
Родитель
Сommit
0b04e731a9

+ 1 - 3
app.py

@@ -670,10 +670,8 @@ app.route('/bbs/edit/<int:bbs_num>/<int:post_num>/<comment_num>', methods = ['PO
 app.route('/bbs/delete/<int:bbs_num>/<int:post_num>/<comment_num>', methods = ['POST', 'GET'])(bbs_w_delete)
 
 # Func-api
-app.route('/api/render_tool/<tool>/<data_in>', methods = ['POST'])(api_w_render)
-app.route('/api/render_tool/<tool>', methods = ['POST'])(api_w_render)
-app.route('/api/render/<everything:name>', methods = ['POST'])(api_w_render)
 app.route('/api/render', methods = ['POST'])(api_w_render)
+app.route('/api/render/<tool>', methods = ['POST'])(api_w_render)
 
 app.route('/api/raw_exist/<everything:name>', defaults = { 'exist_check' : 'on', 'db_set' : db_set_str })(api_w_raw)
 app.route('/api/raw_rev/<int(signed = True):rev>/<everything:name>', defaults = { 'db_set' : db_set_str })(api_w_raw)

+ 50 - 3
route/api_w_render.py

@@ -1,22 +1,69 @@
 from .tool.func import *
 
-def api_w_render(name = '', tool = '', data_in = ''):
+class api_w_render_include:
+    def __init__(self, data_option):
+        self.include_change_list = data_option
+
+    def __call__(self, match):
+        match_org = match.group(0)
+        match = match.groups()
+
+        if len(match) < 3:
+            match = list(match) + ['']
+
+        if match[2] == '\\':
+            return match_org
+        else:
+            slash_add = ''
+            if match[0]:
+                if len(match[0]) % 2 == 1:
+                    slash_add = '\\' * (len(match[0]) - 1)
+                else:
+                    slash_add = match[0]
+
+            if match[1] in self.include_change_list:
+                return slash_add + self.include_change_list[match[1]]
+            else:
+                return slash_add + match[2]
+
+def api_w_render(name = '', tool = ''):
     with get_db_connect() as conn:
         curs = conn.cursor()
 
         if flask.request.method == 'POST':
+            name = flask.request.form.get('name', '')
             data_org = flask.request.form.get('data', '')
+            
+            data_option = flask.request.form.get('option', '')
+            if data_option != '':
+                data_option = json.loads(data_option)
+
+                data_option_func = api_w_render_include(data_option)
+
+                # parameter replace
+                data_org = re.sub(r'(\\+)?@([ㄱ-힣a-zA-Z0-9]+)=((?:\\@|[^@\n])+)@', data_option_func, data_org)
+                data_org = re.sub(r'(\\+)?@([ㄱ-힣a-zA-Z0-9]+)@', data_option_func, data_org)
+
+                # remove end br
+                data_org = re.sub('^\n+', '', data_org)
+
             if tool == '':
                 data_pas = render_set(
                     doc_name = name, 
                     doc_data = data_org, 
                     data_type = 'api_view'
                 )
+            elif tool == 'include':
+                data_pas = render_set(
+                    doc_name = name, 
+                    doc_data = data_org, 
+                    data_type = 'api_include'
+                )
             else:
                 data_pas = render_set(
+                    doc_name = name,
                     doc_data = data_org, 
-                    data_type = 'api_thread',
-                    data_in = data_in
+                    data_type = 'api_thread'
                 )
 
             return flask.jsonify({

+ 4 - 18
route/bbs_w_post.py

@@ -36,10 +36,7 @@ def bbs_w_post_comment(user_id, sub_code, comment_num, bbs_num_str, post_num_str
             comment_data += api_topic_thread_make(
                 ip_pas(temp_dict['comment_user_id']),
                 date,
-                render_set(
-                    doc_data = temp_dict['comment'],
-                    data_in = 'bbs_comment_' + sub_code_check
-                ),
+                render_set(doc_data = temp_dict['comment']),
                 sub_code_check,
                 color = color,
                 add_style = 'width: calc(100% - ' + str(margin_count * 20) + 'px);'
@@ -132,11 +129,7 @@ def bbs_w_post(bbs_num = '', post_num = ''):
                 data += api_topic_thread_make(
                     ip_pas(temp_dict['user_id']),
                     date,
-                    render_set(
-                        doc_data = temp_dict['data'],
-                        data_type = 'thread',
-                        data_in = 'bbs'
-                    ),
+                    render_set(doc_data = temp_dict['data'], data_type = 'thread'),
                     '0',
                     color = 'green'
                 )
@@ -159,11 +152,7 @@ def bbs_w_post(bbs_num = '', post_num = ''):
                     data += api_topic_thread_make(
                         ip_pas(temp_dict['comment_user_id']),
                         date,
-                        render_set(
-                            doc_data = temp_dict['comment'],
-                            data_type = 'thread',
-                            data_in = 'bbs_comment_' + str(count)
-                        ),
+                        render_set(doc_data = temp_dict['comment'], data_type = 'thread'),
                         str(count),
                         color = color
                     )
@@ -262,10 +251,7 @@ def bbs_w_post(bbs_num = '', post_num = ''):
                 data += api_topic_thread_make(
                     ip_pas(temp_dict['user_id']),
                     date,
-                    render_set(
-                        doc_data = temp_dict['data'],
-                        data_in = 'bbs'
-                    ),
+                    render_set(doc_data = temp_dict['data']),
                     '0',
                     color = 'red'
                 )

+ 19 - 37
route/tool/func.py

@@ -1045,7 +1045,7 @@ def wiki_css(data):
     data_css = ''
     data_css_dark = ''
 
-    data_css_ver = '205'
+    data_css_ver = '206'
     data_css_ver = '.cache_v' + data_css_ver
 
     if 'main_css' in global_wiki_set:
@@ -1314,17 +1314,28 @@ def load_skin(data = '', set_n = 0, default = 0):
     return skin_return_data
 
 # Func-markup
-def render_set(doc_name = '', doc_data = '', data_type = 'view', data_in = '', markup = ''):
+def render_set(doc_name = '', doc_data = '', data_type = 'view', markup = ''):
     with get_db_connect() as conn:
         curs = conn.cursor()
 
-        # data_type in ['view', 'from', 'thread', 'raw', 'api_view', 'api_thread', 'backlink']
+        # data_type in ['view', 'from', 'thread', 'api_view', 'api_thread', 'api_include', 'backlink']
         # data_type을 list 형식으로 개편 필요할 듯
 
-        data_type = 'view' if data_type == '' else data_type
+        return_type = True
+        if data_type in ['api_view', 'api_thread', 'api_include']:
+            return_type = False
+
+        if data_type == '':
+            data_type = 'view'
+        elif data_type == 'api_view':
+            data_type = 'view'
+        elif data_type == 'api_thread':
+            data_type = 'thread'
+        elif data_type == 'api_include':
+            data_type = 'include'
+
         doc_data = '' if doc_data == None else doc_data
 
-        acl_dict = {}
         ip = ip_check()
         render_lang_data = {
             'toc' : load_lang('toc'),
@@ -1336,33 +1347,7 @@ def render_set(doc_name = '', doc_data = '', data_type = 'view', data_in = '', m
         if db_data and db_data[0][0] != '':
             render_lang_data['category'] = db_data[0][0]
 
-        get_class_render = class_do_render(conn, render_lang_data, markup).do_render(doc_name, doc_data, data_type, data_in)
-        
-        if 'include' in get_class_render[2]:
-            for_a = 0
-            while len(get_class_render[2]['include']) > for_a:
-                include_data = get_class_render[2]['include'][for_a]
-                if include_data[1] in acl_dict:
-                    acl_result = acl_dict[include_data[1]]
-                else:
-                    acl_result = acl_check(include_data[1], 'render')
-                    acl_dict[include_data[1]] = acl_result
-
-                if acl_result == 0:
-                    include_regex = re.compile('<div id="' + include_data[0] + '"><\\/div>')
-                    if re.search(include_regex, get_class_render[0]):
-                        include_data_render = class_do_render(conn, render_lang_data, markup).do_render(include_data[1], include_data[2], data_type, include_data[0] + data_in)
-                        if len(include_data) > 3:
-                            include_data_render[0] = '<div id="' + include_data[0] + '" ' + include_data[3] + '>' + include_data_render[0] + '</div>'
-                        else:
-                            include_data_render[0] = '<div id="' + include_data[0] + '">' + include_data_render[0] + '</div>'
-
-                        get_class_render[0] = re.sub(include_regex, include_data_render[0], get_class_render[0])
-                        get_class_render[1] += include_data_render[1]
-                        get_class_render[2]['include'] += include_data_render[2]['include']
-
-                for_a += 1
-
+        get_class_render = class_do_render(conn, render_lang_data, markup).do_render(doc_name, doc_data, data_type)
         if data_type == 'backlink':
             return ''
 
@@ -1424,11 +1409,8 @@ def render_set(doc_name = '', doc_data = '', data_type = 'view', data_in = '', m
                 </style>''' + \
             '' + get_class_render[0]
 
-        if data_type == 'api_view' or data_type == 'api_thread':
-            return [
-                get_class_render[0], 
-                get_class_render[1]
-            ]
+        if not return_type:
+            return [get_class_render[0], get_class_render[1]]
         else:
             return get_class_render[0] + '<script>' + get_class_render[1] + '</script>'
         

+ 12 - 6
route/tool/func_render.py

@@ -17,18 +17,24 @@ class class_do_render:
         self.lang_data = lang_data
         self.markup = markup
 
-    def do_render(self, doc_name, doc_data, data_type, data_in):
+    def do_render(self, doc_name, doc_data, data_type):
         curs = self.conn.cursor()
 
         doc_set = {}
         if data_type == 'from':
             doc_set['doc_from'] = 'O'
             data_type = 'view'
+        else:
+            doc_set['doc_from'] = ''
+
+        if data_type == 'backlink':
+            doc_set['doc_type'] = 'view'
+        else:
+            doc_set['doc_type'] = data_type
         
-        data_in = (data_in + '_') if data_in != '' else ''
-        doc_set['doc_include'] = data_in
+        doc_set['doc_include'] = str(time.time_ns()) + '_'
+    
         rep_data = self.markup
-
         if rep_data == '' and doc_name != '':
             curs.execute(db_change("select set_data from data_set where doc_name = ? and set_name = 'document_markup'"), [doc_name])
             db_data = curs.fetchall()
@@ -47,7 +53,7 @@ class class_do_render:
         else:
             data_end = [doc_data, '', {}]
 
-        if data_type == 'thread' or data_type == 'api_thread':
+        if data_type == 'thread':
             def do_thread_a_change(match):
                 data = match[2].replace('#', '')
                 data_split = data.split('-')
@@ -63,7 +69,7 @@ class class_do_render:
             data_end[0] = re.sub(r'&lt;(topic_a(?:_post|_thread)?)&gt;((?:(?!&lt;\/topic_a(?:_post|_thread)?&gt;).)+)&lt;\/topic_a(?:_post|_thread)?&gt;', do_thread_a_change, data_end[0])
             data_end[0] = re.sub(r'&lt;topic_call&gt;@(?P<in>(?:(?!&lt;\/topic_call&gt;).)+)&lt;\/topic_call&gt;', '<a href="/w/user:\\g<in>">@\\g<in></a>', data_end[0])
 
-        if data_type == 'backlink' and data_in == '':
+        if data_type == 'backlink':
             curs.execute(db_change("delete from back where link = ?"), [doc_name])
             curs.execute(db_change("delete from back where title = ? and type = 'no'"), [doc_name])
 

+ 31 - 65
route/tool/func_render_namumark.py

@@ -7,7 +7,7 @@ class class_do_render_namumark:
         self.doc_data = doc_data.replace('\r', '')
         self.doc_name = doc_name
         self.doc_set = doc_set
-        self.doc_include = self.doc_set['doc_include'] if 'doc_include' in self.doc_set else ''
+
         self.do_type = do_type
 
         self.lang_data = lang_data
@@ -35,7 +35,6 @@ class class_do_render_namumark:
         self.data_temp_storage_count = 0
 
         self.data_backlink = {}
-        self.data_include = []
 
         self.data_math_count = 0
         self.data_redirect = 0
@@ -78,13 +77,13 @@ class class_do_render_namumark:
     def get_tool_data_storage(self, data_A = '', data_B = '', data_C = '', do_type = 'render'):        
         self.data_temp_storage_count += 1
         if do_type == 'render':
-            data_name = 'render_' + str(self.data_temp_storage_count) + '_' + self.doc_include
+            data_name = 'render_' + str(self.data_temp_storage_count) + '_' + self.doc_set['doc_include']
 
             self.data_temp_storage[data_name] = data_A
             self.data_temp_storage['/' + data_name] = data_B
             self.data_temp_storage['revert_' + data_name] = data_C
         else:
-            data_name = 'slash_' + str(self.data_temp_storage_count) + '_' + self.doc_include
+            data_name = 'slash_' + str(self.data_temp_storage_count) + '_' + self.doc_set['doc_include']
 
             self.data_temp_storage[data_name] = data_A
 
@@ -167,11 +166,11 @@ class class_do_render_namumark:
                 data += '(' + for_a + ') '
 
                 for for_b in self.data_footnote[for_a]['list']:
-                    data += '<sup><a id="' + self.doc_include + 'fn_' + for_b + '" href="#' + self.doc_include + 'rfn_' + for_b + '">(' + for_b + ')</a></sup> '
+                    data += '<sup><a id="' + self.doc_set['doc_include'] + 'fn_' + for_b + '" href="#' + self.doc_set['doc_include'] + 'rfn_' + for_b + '">(' + for_b + ')</a></sup> '
             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 += '<a id="' + self.doc_set['doc_include'] + 'fn_' + self.data_footnote[for_a]['list'][0] + '" href="#' + self.doc_set['doc_include'] + 'rfn_' + self.data_footnote[for_a]['list'][0] + '">(' + for_a + ') </a> '
 
-            data += '<footnote_title id="' + self.doc_include + 'fn_' + self.data_footnote[for_a]['list'][0] + '_title">' + self.data_footnote[for_a]['data'] + '</footnote_title>'
+            data += '<footnote_title id="' + self.doc_set['doc_include'] + 'fn_' + self.data_footnote[for_a]['list'][0] + '_title">' + self.data_footnote[for_a]['data'] + '</footnote_title>'
 
         if data != '':
             data += '</div>'
@@ -231,7 +230,6 @@ class class_do_render_namumark:
         data_end = class_do_render_namumark(self.curs, self.doc_name, data, doc_set, self.lang_data, do_type = 'inter')()
 
         self.render_data_js += data_end[1]
-        self.data_include += data_end[2]['include']
         self.data_category_list += data_end[2]['category']
         self.data_backlink = dict(self.data_backlink, **data_end[2]['backlink_dict'])
         self.data_temp_storage = dict(self.data_temp_storage, **data_end[2]['temp_storage'][0])
@@ -385,10 +383,10 @@ class class_do_render_namumark:
                         heading_folding = ['⊕', 'none', '0.5']
 
                     data_name = self.get_tool_data_storage(
-                        '<h' + heading_level_str + '><span id="' + self.doc_include + 'opennamu_heading_' + str(heading_count) + '_sub" style="opacity: ' + heading_folding[2] + '">', 
+                        '<h' + heading_level_str + '><span id="' + self.doc_set['doc_include'] + 'opennamu_heading_' + str(heading_count) + '_sub" style="opacity: ' + heading_folding[2] + '">', 
                             ' <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);">' + \
+                                '<a id="' + self.doc_set['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_set['doc_include'] + 'opennamu_heading_' + str(heading_count) + '\', this);">' + \
                                     heading_folding[0] + \
                                 '</a>'
                             '</sub>' + \
@@ -405,7 +403,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: ' + heading_folding[1] + ';">' + \
+                        '<div id="' + self.doc_set['doc_include'] + 'opennamu_heading_' + str(heading_count) + '" style="display: ' + heading_folding[1] + ';">' + \
                         '<back_br>\n' + \
                     ''
 
@@ -794,7 +792,7 @@ class class_do_render_namumark:
             data = html.unescape(data)
             data = self.get_tool_js_safe(data)
 
-            name_ob = self.doc_include + 'opennamu_math_' + str(self.data_math_count)
+            name_ob = self.doc_set['doc_include'] + 'opennamu_math_' + str(self.data_math_count)
 
             data_name = self.get_tool_data_storage('<span id="' + name_ob + '">' + data_html, '</span>', match.group(0))
 
@@ -1258,33 +1256,10 @@ class class_do_render_namumark:
         self.render_data = re.sub(r'(\\+)?@([ㄱ-힣a-zA-Z0-9]+)@', do_render_include_default_sub, self.render_data)
 
     def do_render_include(self):
-        def do_render_include_default_sub(match):
-            match_org = match.group(0)
-            match = match.groups()
-
-            if len(match) < 3:
-                match = list(match) + ['']
-
-            if match[2] == '\\':
-                return match_org
-            else:
-                slash_add = ''
-                if match[0]:
-                    if len(match[0]) % 2 == 1:
-                        slash_add = '\\' * (len(match[0]) - 1)
-                    else:
-                        slash_add = match[0]
-
-                if match[1] in include_change_list:
-                    return slash_add + include_change_list[match[1]]
-                else:
-                    return slash_add + match[2]
-
         include_num = 0
         include_set_data = get_main_skin_set(self.curs, self.flask_session, 'main_css_include_link', self.ip)
         include_regex = re.compile(r'\[include\(((?:(?!\[include\(|\)\]|<\/div>).)+)\)\](\n?)', re.I)
         include_count_max = len(re.findall(include_regex, self.render_data)) * 2
-        include_change_list = {}
         while 1:
             include_num += 1
             include_change_list = {}
@@ -1295,7 +1270,7 @@ class class_do_render_namumark:
             elif not match:
                 break
             else:
-                if re.search('opennamu_include_', self.doc_include):
+                if self.doc_set['doc_type'] == "include":
                     self.render_data = re.sub(include_regex, '', self.render_data, 1)
                 else:
                     match_org = match.group(0)
@@ -1334,28 +1309,21 @@ class class_do_render_namumark:
                     self.data_backlink[include_name]['include'] = ''
 
                     # load include db data
-                    self.curs.execute(db_change("select data from data where title = ?"), [include_name])
+                    self.curs.execute(db_change("select title from data where title = ?"), [include_name])
                     db_data = self.curs.fetchall()
                     if db_data:
-                        include_data = db_data[0][0].replace('\r', '')
-
                         # include link func
                         include_link = ''
                         if include_set_data == 'use':
                             include_link = '<div><a href="/w/' + url_pas(include_name) + '">(' + include_name_org + ')</a></div>'
 
-                        # parameter replace
-                        include_data = re.sub(r'(\\+)?@([ㄱ-힣a-zA-Z0-9]+)=((?:\\@|[^@\n])+)@', do_render_include_default_sub, include_data)
-                        include_data = re.sub(r'(\\+)?@([ㄱ-힣a-zA-Z0-9]+)@', do_render_include_default_sub, include_data)
-
-                        # remove end br
-                        include_data = re.sub('^\n+', '', include_data)
-
-                        self.data_include += [[self.doc_include + 'opennamu_include_' + str(include_num), self.doc_name, include_data, 'style="display: inline;"']]
-
+                        include_sub_name = self.doc_set['doc_include'] + 'opennamu_include_' + str(include_num)
+                        self.render_data_js += '''
+                            opennamu_do_include("''' + self.get_tool_js_safe(include_name) + '''", "''' + self.get_tool_js_safe(self.doc_name) + '''", "''' + self.get_tool_js_safe(include_sub_name) + '''", "''' + self.get_tool_js_safe(include_sub_name) + '''");\n
+                        '''
                         data_name = self.get_tool_data_storage('' + \
                             include_link + \
-                            '<div id="' + self.doc_include + 'opennamu_include_' + str(include_num) + '"></div>' + \
+                            '<div id="' + include_sub_name + '" style="display: none;">' + urllib.parse.quote(json.dumps(include_change_list)) + '</div>' + \
                         '', '', match_org)
                     else:
                         self.data_backlink[include_name]['no'] = ''
@@ -1419,8 +1387,8 @@ class class_do_render_namumark:
                             self.data_footnote[footnote_name]['data'] = footnote_text_data
                             footnote_first = self.data_footnote_all[footnote_name]['list'][0]
 
-                        fn = self.doc_include + 'fn_' + footnote_first
-                        rfn = self.doc_include + 'rfn_' + footnote_num_str
+                        fn = self.doc_set['doc_include'] + 'fn_' + footnote_first
+                        rfn = self.doc_set['doc_include'] + 'rfn_' + footnote_num_str
 
                         if footnote_number_set == 'only_number':
                             foot_v_name += footnote_first
@@ -1434,8 +1402,8 @@ class class_do_render_namumark:
                         self.data_footnote[footnote_name]['list'] = [footnote_num_str]
                         self.data_footnote[footnote_name]['data'] = footnote_text_data
 
-                        fn = self.doc_include + 'fn_' + footnote_num_str
-                        rfn = self.doc_include + 'rfn_' + footnote_num_str
+                        fn = self.doc_set['doc_include'] + 'fn_' + footnote_num_str
+                        rfn = self.doc_set['doc_include'] + 'rfn_' + footnote_num_str
 
                         if footnote_number_set == 'only_number':
                             foot_v_name += footnote_num_str
@@ -1490,7 +1458,7 @@ class class_do_render_namumark:
 
     def do_render_redirect(self):
         match = re.search(r'^<back_br>\n#(?:redirect|넘겨주기) ([^\n]+)', self.render_data, flags = re.I)
-        if match and self.doc_include == '':
+        if match and self.doc_set['doc_type'] == 'view':
             link_data_full = match.group(0)
             link_main = match.group(1)
 
@@ -1548,7 +1516,7 @@ class class_do_render_namumark:
 
                 self.data_redirect = 1
                 if link_exist == 1:
-                    if 'doc_from' in self.doc_set:
+                    if self.doc_set['doc_from'] != '':
                         data_name = self.get_tool_data_storage('<a href="' + link_main + link_data_sharp + '">(GO)</a>', '', link_data_full)
                     else:
                         data_name = self.get_tool_data_storage('<meta http-equiv="refresh" content="0; url=' + link_main + link_data_sharp + '">', '', link_data_full)
@@ -1842,7 +1810,7 @@ class class_do_render_namumark:
                         wiki_data = self.get_tool_data_revert(wiki_data)
                         wiki_data = re.sub('(^\n|\n$)', '', wiki_data)
 
-                        middle_data_pass = self.do_inter_render(wiki_data, self.doc_include + 'opennamu_wiki_' + str(wiki_count))
+                        middle_data_pass = self.do_inter_render(wiki_data, self.doc_set['doc_include'] + 'opennamu_wiki_' + str(wiki_count))
 
                         data_name = self.get_tool_data_storage('<div ' + wiki_data_style + '>', '</div>', middle_data_org)
                         wiki_count += 1
@@ -1856,9 +1824,9 @@ class class_do_render_namumark:
                         data_revert = re.sub(r'\n$', '', data_revert)
                         data_revert = data_revert.replace('&amp;nbsp;', '&nbsp;')
 
-                        self.render_data_js += 'opennamu_do_render_html("' + self.doc_include + 'opennamu_wiki_' + str(html_count) + '");\n'
+                        self.render_data_js += 'opennamu_do_render_html("' + self.doc_set['doc_include'] + 'opennamu_wiki_' + str(html_count) + '");\n'
 
-                        data_name = self.get_tool_data_storage('<span id="' + self.doc_include + 'opennamu_wiki_' + str(html_count) + '">' + data_revert, '</span>', middle_data_org)
+                        data_name = self.get_tool_data_storage('<span id="' + self.doc_set['doc_include'] + 'opennamu_wiki_' + str(html_count) + '">' + data_revert, '</span>', middle_data_org)
                         html_count += 1
                     elif middle_name == '#!folding':
                         if middle_slash:
@@ -1879,7 +1847,7 @@ class class_do_render_namumark:
                         wiki_data = self.get_tool_data_revert(wiki_data)
                         wiki_data = re.sub('(^\n|\n$)', '', wiki_data)
 
-                        wiki_data_end = self.do_inter_render(wiki_data, self.doc_include + 'opennamu_folding_' + str(folding_count))
+                        wiki_data_end = self.do_inter_render(wiki_data, self.doc_set['doc_include'] + 'opennamu_folding_' + str(folding_count))
 
                         middle_data_pass = wiki_data_folding
                         data_name = self.get_tool_data_storage('<details><summary>', '</summary><div class="opennamu_folding">', middle_data_org)
@@ -2075,7 +2043,7 @@ class class_do_render_namumark:
                 quote_data = re.sub(r'\n$', '', quote_data)
                 quote_data = self.get_tool_data_revert(quote_data)
 
-                quote_data_end = self.do_inter_render(quote_data, self.doc_include + 'opennamu_quote_' + str(quote_count))
+                quote_data_end = self.do_inter_render(quote_data, self.doc_set['doc_include'] + 'opennamu_quote_' + str(quote_count))
                 data_name = self.get_tool_data_storage('<div>', '</div>', quote_data_org)
 
                 self.render_data = re.sub(quote_regex, lambda x : ('\n<blockquote><back_br>\n<' + data_name + '>' + quote_data_end + '</' + data_name + '><front_br></blockquote>\n'), self.render_data, 1)
@@ -2220,7 +2188,7 @@ class class_do_render_namumark:
         self.render_data = self.render_data.replace('<no_td>', '||')
 
         # add category
-        if self.doc_include == '':
+        if self.doc_set["doc_type"] == 'view':
             if self.data_category != '':
                 data_name = self.get_tool_data_storage(self.data_category, '</div>', '')
 
@@ -2321,7 +2289,7 @@ class class_do_render_namumark:
                 self.render_data = self.render_data.replace('<toc_need_part>', self.data_toc, 20)
                 self.render_data = self.render_data.replace('<toc_need_part>', '')
 
-            if self.doc_include != '' or re.search(r'<toc_no_auto>', self.render_data) or toc_set_data == 'half_off' or toc_set_data == 'off' or toc_data_on == 1:
+            if self.doc_set["doc_type"] != 'view' or re.search(r'<toc_no_auto>', self.render_data) or toc_set_data == 'half_off' or toc_set_data == 'off' or toc_data_on == 1:
                 self.render_data = self.render_data.replace('<toc_no_auto>', '')
             else:
                 self.render_data = re.sub(r'(?P<in><h[1-6] id="[^"]*">)', '<br>' + self.data_toc + '\\g<in>', self.render_data, 1)
@@ -2369,7 +2337,6 @@ class class_do_render_namumark:
             
         if self.do_type == 'exter':
             self.do_render_last()
-            self.data_include = list(reversed(self.data_include))
         else:
             self.render_data = self.render_data.replace(r'\|\|', '<no_td>')
             self.render_data = self.render_data.replace('\n', '<no_br>')
@@ -2384,7 +2351,6 @@ class class_do_render_namumark:
             {
                 'backlink' : self.data_backlink, # backlink
                 'backlink_dict' : data_backlink_dict,
-                'include' : self.data_include, # include data
                 'footnote' : self.data_footnote_all, # footnote
                 'category' : self.data_category_list,
                 'temp_storage' : [self.data_temp_storage, self.data_temp_storage_count],

+ 1 - 0
route/tool/func_tool.py

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

+ 10 - 0
route_go/route/tool/namumark.go

@@ -0,0 +1,10 @@
+package tool
+
+func Namumark() map[string]interface{} {
+	end_data := make(map[string]interface{})
+	end_data["data"] = ""
+	end_data["js_data"] = ""
+	end_data["backlink"] = []string{}
+
+	return end_data
+}

+ 73 - 0
route_go/route/tool/render.go

@@ -0,0 +1,73 @@
+package tool
+
+import (
+	"database/sql"
+	"strconv"
+	"time"
+)
+
+func Get_render(db_set map[string]string, doc_name string, data string, render_type string) []string {
+	db := DB_connect(db_set)
+	if db == nil {
+		return []string{"", ""}
+	}
+	defer db.Close()
+
+	var markup string
+
+	if render_type == "document" {
+		stmt, err := db.Prepare(DB_change(db_set, "select set_data from data_set where doc_name = ? and set_name = 'document_markup'"))
+		if err != nil {
+			return []string{"", ""}
+		}
+		defer stmt.Close()
+
+		err = stmt.QueryRow(doc_name).Scan(&markup)
+		if err != nil {
+			if err == sql.ErrNoRows {
+				markup = ""
+			} else {
+				return []string{"", ""}
+			}
+		}
+	}
+
+	err := db.QueryRow(DB_change(db_set, "select data from other where name = 'markup'")).Scan(&markup)
+	if err != nil {
+		if err == sql.ErrNoRows {
+			markup = ""
+		} else {
+			return []string{"", ""}
+		}
+	}
+
+	if markup == "" {
+		markup = "namumark"
+	}
+
+	now_time := time.Now().UnixNano()
+	render_name := strconv.Itoa(int(now_time))
+
+	render_data := Get_render_direct(db_set, doc_name, data, markup, render_name, render_type)
+
+	return render_data
+}
+
+func Get_render_direct(db_set map[string]string, doc_name string, data string, markup string, render_name string, render_type string) []string {
+	db := DB_connect(db_set)
+	if db == nil {
+		return []string{"", ""}
+	}
+	defer db.Close()
+
+	render_data := make(map[string]interface{})
+	if markup == "namumark" {
+		render_data = Namumark()
+	} else {
+		render_data["data"] = data
+		render_data["js_data"] = ""
+		render_data["backlink"] = []string{}
+	}
+
+	return []string{render_data["data"].(string), render_data["js_data"].(string)}
+}

+ 1 - 1
version.json

@@ -1,6 +1,6 @@
 {
     "beta" : {
-        "r_ver" : "v3.5.0-dev18",
+        "r_ver" : "v3.5.0-dev19",
         "c_ver" : "3500374",
         "s_ver" : "3500113"
     }

+ 5 - 3
views/main_css/js/func/func.js

@@ -132,19 +132,21 @@ function opennamu_do_trace_spread() {
     }
 }
 
-function opennamu_do_render(to_obj, name, data, do_type = '') {
+function opennamu_do_render(to_obj, data, name = '', do_type = '', option = '') {
     let url;
     if(do_type === '') {
-        url = "/api/render/" + opennamu_do_url_encode(name);
+        url = "/api/render";
     } else {
-        url = "/api/render_tool/thread/" + opennamu_do_url_encode(name);
+        url = "/api/render/" + do_type;
     }
 
     fetch(url, {
         method : 'POST',
         headers : { 'Content-Type': 'application/x-www-form-urlencoded' },
         body : new URLSearchParams({
+            'name' : name,
             'data': data,
+            'option' : option
         })
     }).then(function(res) {
         return res.json();

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

@@ -242,7 +242,7 @@ function opennamu_do_editor_preview() {
             doc_name = doc_name_input.value;
         }
 
-        opennamu_do_render('opennamu_preview_area', doc_name, input.value);
+        opennamu_do_render('opennamu_preview_area', input.value, doc_name);
     }
 }
 

+ 19 - 0
views/main_css/js/route/render.js

@@ -170,4 +170,23 @@ function opennamu_do_category_spread() {
             '<style>.opennamu_category_button { display: none; } .opennamu_category { white-space: pre-wrap; overflow-x: unset; text-overflow: unset; }</style>' +
         '' + document.getElementsByClassName('opennamu_render_complete')[0].innerHTML
     }
+}
+
+function opennamu_do_include(name, render_name, to_obj, option_obj) {
+    let option = {};
+    if(option_obj !== '') {
+        if(document.getElementById(option_obj)) {
+            option = document.getElementById(option_obj).innerHTML;
+            option = decodeURIComponent(option);
+        }
+    }
+
+    fetch("/api/raw/" + opennamu_do_url_encode(name)).then(function(res) {
+        return res.json();
+    }).then(function(data) {
+        if(data["data"]) {
+            opennamu_do_render(to_obj, data["data"], render_name, 'include', option);
+            document.getElementById(option_obj).style.display = "inline";
+        }
+    });
 }

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

@@ -135,9 +135,9 @@ function opennamu_get_thread(topic_num = "", do_type = "") {
         for(let for_a = 0; for_a < end_render.length; for_a++) {
             document.getElementById('opennamu_' + color + '_thread_render_' + end_render[for_a][1] + '_button').addEventListener("click", function() {
                 opennamu_do_render(
-                    'opennamu_' + color + '_thread_render_' + end_render[for_a][1], 
-                    "thread_" + topic_num + "_" + color + "_" + end_render[for_a][1], 
+                    'opennamu_' + color + '_thread_render_' + end_render[for_a][1],
                     end_render[for_a][0], 
+                    '',
                     'thread'
                 );
             });

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

@@ -44,7 +44,7 @@ function opennamu_view_w_raw_preview() {
         data = document.getElementById('opennamu_edit_textarea').value;
     }
 
-    opennamu_do_render('opennamu_preview_area', name, data);
+    opennamu_do_render('opennamu_preview_area', data, name);
 }
 
 function opennamu_view_w() {
@@ -57,7 +57,7 @@ function opennamu_view_w() {
         return res.json();
     }).then(function(data) {
         if(data["data"]) {
-            opennamu_do_render('opennamu_preview_area', name, data["data"]);
+            opennamu_do_render('opennamu_preview_area', data["data"], name);
         }
     });
 }