Ver Fonte

fix css, fix bug, apply namumark

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

+ 1 - 1
route/api_user_info.py

@@ -7,7 +7,7 @@ def api_user_info(name = ''):
         if flask.request.method == 'POST':
             try:
                 data_list = json.loads(flask.request.form.get('title_list', ''))
-                data_list = list(set(title_list))
+                data_list = list(set(data_list))
             except:
                 data_list = [name]
 

+ 1 - 1
route/list_please.py

@@ -18,7 +18,7 @@ def list_please_2():
         for data in data_list:
             div += '' + \
                 '<li>' + \
-                    '<a id="not_thing" href="/w/' + url_pas(data[0]) + '">' + html.escape(data[0]) + '</a> ' + \
+                    '<a class="opennamu_not_exist_link" href="/w/' + url_pas(data[0]) + '">' + html.escape(data[0]) + '</a> ' + \
                     '<a href="/w/' + url_pas(data[1]) + '">(' + html.escape(data[1]) + ')</a>' + \
                 '</li>' + \
             ''

+ 1 - 1
route/main_search_deep.py

@@ -27,7 +27,7 @@ def main_search_deep(name = 'Test', search_type = 'title', num = 1):
             div += ' <a href="/search/1/' + url_pas(name_new) + '">(' + name_new + ')</a>'
 
         curs.execute(db_change("select title from data where title = ?"), [name])
-        link_id = '' if curs.fetchall() else 'id="not_thing"'
+        link_id = '' if curs.fetchall() else 'class="opennamu_not_exist_link"'
 
         div += '''
             <ul class="opennamu_ul">

+ 19 - 15
route/tool/func.py

@@ -1041,7 +1041,7 @@ def wiki_css(data):
     data += ['' for _ in range(0, 3 - len(data))]
     
     data_css = ''
-    data_css_ver = '163'
+    data_css_ver = '165'
     
     # Func JS + Defer
     data_css += '<script src="/views/main_css/js/func/func.js?ver=' + data_css_ver + '"></script>'
@@ -1054,13 +1054,8 @@ def wiki_css(data):
     data_css += '<script defer src="/views/main_css/js/func/ie_end_of_life.js?ver=' + data_css_ver + '"></script>'
     data_css += '<script defer src="/views/main_css/js/func/shortcut.js?ver=' + data_css_ver + '"></script>'
     
-    data_css += '<script defer src="/views/main_css/js/func/render_user_name.js?ver=' + data_css_ver + '"></script>'
     data_css += '<script defer src="/views/main_css/js/func/render_simple.js?ver=' + data_css_ver + '"></script>'
     
-    # Render JS
-    data_css += '<script src="/views/main_css/js/render/markdown.js?ver=' + data_css_ver + '"></script>'
-    data_css += '<script src="/views/main_css/js/render/wiki.js?ver=' + data_css_ver + '"></script>'
-    
     # Route JS + Defer
     data_css += '<script defer src="/views/main_css/js/route/thread.js?ver=' + data_css_ver + '"></script>'
     
@@ -1068,15 +1063,8 @@ def wiki_css(data):
     data_css += '<script src="/views/main_css/js/load_editor.js?ver=' + data_css_ver + '"></script>'
     data_css += '<script src="/views/main_css/js/load_skin_set.js?ver=' + data_css_ver + '"></script>'
     
-    # 레거시 렌더러 JS
-    data_css += '<script src="/views/main_css/js/render_html.js?ver=' + data_css_ver + '"></script>'
-    data_css += '<script src="/views/main_css/js/render_onmark.js?ver=' + data_css_ver + '"></script>'
-    data_css += '<script src="/views/main_css/js/render_wiki.js?ver=' + data_css_ver + '"></script>'
-    
     # Main CSS
     data_css += '<link rel="stylesheet" href="/views/main_css/css/main.css?ver=' + data_css_ver + '">'
-    if flask.request.cookies.get('main_css_darkmode', '') == '1':
-        data_css += '<link rel="stylesheet" href="/views/main_css/css/sub/dark.css?ver=' + data_css_ver + '">'
 
     # External
     data_css += '<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.5.0/build/styles/default.min.css">'
@@ -1837,7 +1825,6 @@ def ban_check(ip = None, tool = ''):
 def ip_pas(raw_ip, type_data = 0):
     curs = conn.cursor()
 
-    hide = 0
     end_ip = {}
 
     return_data = 0
@@ -1867,7 +1854,24 @@ def ip_pas(raw_ip, type_data = 0):
             ip = raw_ip
             
         if type_data == 0 and change_ip == 0:
-            ip = '<span class="opennamu_ip_render">' + raw_ip + '</span>'
+            if is_this_ip == 0:
+                ip = '<a href="/w/' + url_pas('user:' + raw_ip) + '">' + raw_ip + '</a>'
+                
+                if admin_check('all', None, raw_ip) == 1:
+                    ip = '<b>' + ip + '</b>'
+
+                curs.execute(db_change('select data from user_set where name = "user_title" and id = ?'), [raw_ip])
+                db_data = curs.fetchall()
+                if db_data:
+                    ip = db_data[0][0] + ip
+
+            if ban_check(raw_ip) == 1:
+                ip = '<s>' + ip + '</s>'
+
+                if ban_check(raw_ip, 'login') == 1:
+                    ip = '<i>' + ip + '</i>'
+
+            ip = ip + ' <a href="/tool/' + url_pas(raw_ip) + '">(' + load_lang('tool') + ')</a>'
 
         end_ip[raw_ip] = ip
     

+ 25 - 142
route/tool/func_render.py

@@ -7,103 +7,8 @@ class class_do_render:
         self.conn = conn
 
         self.lang_data = lang_data
-    
-    def do_backlink_generate(self, data_markup, doc_data, doc_name):
-        conn = self.conn
-        curs = self.conn.cursor()
-
-        if data_markup == 'namumark':
-            # Link
-            link_re = re.compile(r'\[\[(?!https?:\/\/|inter:|외부:|out:|#)((?:(?!\[\[|\]\]|\|).)+)(?:\]\]|\|)', re.I)
-
-            data_link = link_re.findall(doc_data)
-            data_link = list(set(data_link))
-
-            data_link_end = {}
-            data_link_end['cat'] = []
-            data_link_end['file'] = []
-            data_link_end['link'] = []
-
-            data_link_end_all = []
-
-            for i in data_link:
-                data_link_in = i
-                if  data_link_in.startswith('분류:') or \
-                    data_link_in.startswith('category:'):
-                    data_link_in = re.sub(r'\\(.)', r'\1', data_link_in)
-                    data_link_end['cat'] += [re.sub(r'^분류:', 'category:', data_link_in)]
-                elif data_link_in.startswith('파일:') or \
-                    data_link_in.startswith('file:'):
-                    data_link_in = re.sub(r'\\(.)', r'\1', data_link_in)
-                    data_link_end['file'] += [re.sub(r'^파일:', 'file:', data_link_in)]
-                else:
-                    data_link_in = re.sub(r'([^\\])#(?:[^#]*)$', r'\1', data_link_in)
-
-                    if data_link_in[0] == ':':
-                        data_link_in = re.sub(r'^:분류:', 'category:', data_link_in)
-                        data_link_in = re.sub(r'^:category:', 'category:', data_link_in)
-
-                        data_link_in = re.sub(r'^:file:', 'file:', data_link_in)
-                        data_link_in = re.sub(r'^:파일:', 'file:', data_link_in)
-                    elif data_link_in[0] == '/':
-                        data_link_in = doc_name + data_link_in
-                    elif len(data_link_in) >= 3 and data_link_in[0:3] == '../':
-                        data_link_in = data_link_in[3:len(data_link_in)]
-                        data_link_in = '' + \
-                            re.sub('\/[^/]+$', '', doc_name) + \
-                            (('/' + data_link_in) if data_link_in != '' else '') + \
-                        ''
-
-                    data_link_in = re.sub(r'\\(.)', r'\1', data_link_in)
-                    data_link_end['link'] += [data_link_in]
-
-            if data_link_end != {}:
-                data_link_end['cat'] = list(set(data_link_end['cat']))
-                data_link_end['file'] = list(set(data_link_end['file']))
-                data_link_end['link'] = list(set(data_link_end['link']))
-
-                data_link_end_all += [[doc_name, i, 'cat'] for i in data_link_end['cat']]
-                data_link_end_all += [[doc_name, i, 'file'] for i in data_link_end['file']]
-                data_link_end_all += [[doc_name, i, ''] for i in data_link_end['link']]
-
-                data_link_no = []
-                for i in data_link_end['link']:
-                    curs.execute(db_change("select title from data where title = ?"), [i])
-                    if not curs.fetchall():
-                        data_link_no += [[doc_name, i, 'no']]
-
-                data_link_end_all += data_link_no
-
-            # Include
-            include_re = re.compile(r'\[include\(((?:(?!\)\]).)+)\)\]', re.I)
-
-            data_include = include_re.findall(doc_data)
-            data_include = list(set(data_include))
-
-            for i in data_include:
-                data_include_in = i
-                data_include_in = re.sub(r'([^\\]),.*$', r'\1', data_include_in)
-
-                data_link_end_all += [[doc_name, data_include_in, 'include']]
-
-            # Redirect
-            redirect_re = re.compile(r'^#(?:redirect|넘겨주기) ([^\n]+)', re.I)
-
-            data_redirect = redirect_re.search(doc_data)
-            if data_redirect:
-                data_redirect = data_redirect.group(1)
-
-                data_redirect = re.sub(r'([^\\])#(?:[^#]*)$', r'\1', data_redirect)
-
-                data_link_end_all += [[doc_name, data_redirect, 'redirect']]
-        else:
-            # markup == null
-            data_link_end_all = []
-
-        return data_link_end_all
 
     def do_render(self, doc_name, doc_data, data_type, data_in):
-        conn = self.conn
         curs = self.conn.cursor()
 
         doc_set = {}
@@ -117,57 +22,35 @@ class class_do_render:
         curs.execute(db_change('select data from other where name = "markup"'))
         rep_data = curs.fetchall()
         rep_data = rep_data[0][0] if rep_data else 'namumark'
-
-        if data_type != 'backlink':
-            if rep_data == 'namumark':
-                doc_data = html.escape(doc_data)
-                doc_name = html.escape(doc_name)
-                
-                data_end = [
-                    '<pre class="render_content_load" id="' + data_in + 'render_content_load">' + doc_data + '</pre>' + \
-                    '<div class="render_content" id="' + data_in + 'render_content" style="display: none;"></div>', 
-                    '''
-                        do_onmark_render(
-                            test_mode = "normal", 
-                            name_id = "''' + data_in + '''render_content",
-                            name_include = "''' + data_in + '''",
-                            name_doc = "''' + doc_name + '''"
-                        );
-                    ''',
-                    {}
-                ]
-            elif rep_data == 'namumark_beta':
-                data_end = class_do_render_namumark(
-                    curs,
-                    doc_name,
-                    doc_data,
-                    doc_set,
-                    self.lang_data
-                )()
-            else:
-                data_end = [
-                    doc_data, 
-                    '', 
-                    {}
-                ]
-
-            return [
-                data_end[0], 
-                data_end[1],
-                data_end[2]
-            ]
+        if rep_data == 'namumark' or rep_data == 'namumark_beta':
+            data_end = class_do_render_namumark(
+                curs,
+                doc_name,
+                doc_data,
+                doc_set,
+                self.lang_data
+            )()
         else:
-            if rep_data == 'namumark':
-                backlink = self.do_backlink_generate(
-                    rep_data, 
-                    doc_data, 
-                    doc_name
-                )
+            data_end = [
+                doc_data, 
+                '', 
+                {}
+            ]
+
+        if data_type == 'backlink':
+            if 'backlink' in data_end[2]:
+                backlink = data_end[2]['backlink']
             else:
                 backlink = []
 
             if backlink != []:
-                curs.executemany(db_change("insert into back (link, title, type) values (?, ?, ?)"), backlink)
+                curs.executemany(db_change("insert into back (link, title, type) values (?, ?, ?)"), data_end[2]['backlink'])
                 curs.execute(db_change("delete from back where title = ? and type = 'no'"), [doc_name])
 
-            conn.commit()
+            self.conn.commit()
+        else:
+            return [
+                data_end[0], 
+                data_end[1],
+                data_end[2]
+            ]

+ 92 - 5
route/tool/func_render_namumark.py

@@ -263,6 +263,7 @@ class class_do_render_namumark:
                 break
             else:
                 heading_data = re.search(heading_regex, self.render_data)
+                heading_data_org = heading_data.group(0)
                 heading_data = heading_data.groups()
 
                 heading_data_last_regex = r' ?(#?={1,6}[^=]*)$'
@@ -302,11 +303,11 @@ class class_do_render_namumark:
                     toc_list += [['', heading_data_text]]
 
                     heading_data_text_fix = re.sub(r'<([^<>]*)>', '', heading_data_text)
-                    
+
                     data_name = self.get_tool_data_storage(
                         '<h' + heading_level_str + ' id="' + heading_data_text_fix + '">', 
                         ' <sub><a href="/edit_section/' + str(heading_count) + '/' + url_pas(self.doc_name) + '">✎</a></sub></h' + heading_level_str + '>', 
-                        ''
+                        heading_data_org
                     )
 
                     heading_data_complete = '' + \
@@ -376,6 +377,8 @@ class class_do_render_namumark:
         if toc_data != '':
             toc_data += '</div>'
 
+        self.data_toc = toc_data
+
         # toc replace
         self.render_data = re.sub(r'\[(목차|toc|tableofcontents)\]', lambda x : toc_data, self.render_data)
 
@@ -657,8 +660,11 @@ class class_do_render_namumark:
                         db_data = self.curs.fetchall()
                         if db_data:
                             link_exist = ''
+                            self.data_backlink += [[self.doc_name, 'file:' + link_main, 'file']]
                         else:
                             link_exist = 'opennamu_not_exist_link'
+                            self.data_backlink += [[self.doc_name, 'file:' + link_main, 'no']]
+                            self.data_backlink += [[self.doc_name, 'file:' + link_main, 'file']]
                         
                         link_extension_regex = r'\.([^.]+)$'
                         link_extension = re.search(link_extension_regex, link_main)
@@ -675,7 +681,7 @@ class class_do_render_namumark:
                     file_width = self.get_tool_css_safe(file_width)
                     file_height = self.get_tool_css_safe(file_height)
 
-                    file_end = '<image style="width:' + file_width + ';height:' + file_height + ';' + file_align + '" src="' + link_main + '">'
+                    file_end = '<image style="width:' + file_width + ';height:' + file_height + ';' + file_align + ';background:' + file_bgcolor + ';" src="' + link_main + '">'
                     if file_align == 'center':
                         file_end = '<div style="text-align:center;">' + file_end + '</div>'
 
@@ -714,8 +720,11 @@ class class_do_render_namumark:
                     db_data = self.curs.fetchall()
                     if db_data:
                         link_exist = ''
+                        self.data_backlink += [[self.doc_name, 'category:' + link_main, 'cat']]
                     else:
                         link_exist = 'opennamu_not_exist_link'
+                        self.data_backlink += [[self.doc_name, 'category:' + link_main, 'no']]
+                        self.data_backlink += [[self.doc_name, 'category:' + link_main, 'cat']]
 
                     link_main = url_pas(link_main)
 
@@ -818,7 +827,11 @@ class class_do_render_namumark:
                         self.curs.execute(db_change("select title from data where title = ?"), [link_main])
                         db_data = self.curs.fetchall()
                         if not db_data:
+                            self.data_backlink += [[self.doc_name, link_main, 'no']]
+                            self.data_backlink += [[self.doc_name, link_main, '']]
                             link_exist = 'opennamu_not_exist_link'
+                        else:
+                            self.data_backlink += [[self.doc_name, link_main, '']]
 
                     link_same = ''
                     if link_main == self.doc_name and self.doc_include == '':
@@ -949,6 +962,8 @@ class class_do_render_namumark:
                 self.curs.execute(db_change("select data from data where title = ?"), [include_name])
                 db_data = self.curs.fetchall()
                 if db_data:
+                    self.data_backlink += [[self.doc_name, include_name, 'include']]
+
                     # include link func
                     include_link = ''
                     if flask.request.cookies.get('main_css_include_link', '') == '1':
@@ -970,6 +985,8 @@ class class_do_render_namumark:
                         '<div id="' + self.doc_include + 'opennamu_include_' + str(include_num) + '"></div>' + \
                     '', '', match_org)
                 else:
+                    self.data_backlink += [[self.doc_name, include_name, 'no']]
+
                     include_link = '<div><a class="opennamu_not_exist_link" href="/w/' + url_pas(include_name) + '">(' + include_name_org + ')</a></div>'
 
                     data_name = self.get_tool_data_storage(include_link, '', match_org)
@@ -1063,6 +1080,9 @@ class class_do_render_namumark:
 
             link_main = self.get_tool_data_restore(link_main, do_type = 'slash')
             link_main = html.unescape(link_main)
+
+            self.data_backlink += [[self.doc_name, link_main, 'redirect']]
+
             link_main = url_pas(link_main)
 
             if link_main != '':
@@ -1228,7 +1248,7 @@ class class_do_render_namumark:
                     else:
                         table_tr_change = 0
                     
-                        table_data_end += '<td colspan="' + table_sub_parameter['colspan'] + '" rowspan="' + table_sub_parameter['rowspan'] + '" style="' + table_sub_parameter['td'] + table_parameter['col'][table_col_num] + '">' + table_sub_parameter['data'] + '</td>'
+                        table_data_end += '<td colspan="' + table_sub_parameter['colspan'] + '" rowspan="' + table_sub_parameter['rowspan'] + '" style="' + table_sub_parameter['td'] + table_parameter['col'][table_col_num] + '"><back_br>\n' + table_sub_parameter['data'] + '\n<front_br></td>'
                     
                     table_col_num += 1
 
@@ -1475,6 +1495,72 @@ class class_do_render_namumark:
 
         self.render_data = re.sub(r'<temp_(?P<in>(?:slash)_(?:[0-9]+))>', '<\g<in>>', self.render_data)
 
+    def do_render_hr(self):
+        hr_regex = r'\n-{4,9}\n'
+        hr_count_max = len(re.findall(hr_regex, self.render_data)) * 3
+        while 1:
+            hr_data = re.search(hr_regex, self.render_data)
+            if hr_count_max < 0:
+                break
+            elif not hr_data:
+                break
+            else:
+                self.render_data = re.sub(hr_regex, '\n<front_br><hr><back_br>\n', self.render_data, 1)
+
+            hr_count_max -= 1
+
+    def do_render_list(self):        
+        quote_regex = r'((?:\n&gt; *[^\n]+)+)\n'
+        quote_count_max = len(re.findall(quote_regex, self.render_data)) * 10
+        while 1:
+            quote_data = re.search(quote_regex, self.render_data)
+            if quote_count_max < 0:
+                break
+            elif not quote_data:
+                break
+            else:
+                quote_data = quote_data.group(1)
+                quote_data = re.sub(r'\n&gt; *(?P<in>[^\n]+)', '\g<in>\n', quote_data)
+
+                self.render_data = re.sub(quote_regex, lambda x : ('\n<front_br><blockquote><back_br>\n' + quote_data + '<front_br></blockquote><back_br>\n'), self.render_data, 1)
+
+            quote_count_max -= 1
+
+        def do_render_list_sub(match):
+            list_data = match.group(2)
+            list_len = len(match.group(1))
+            if list_len == 0:
+                list_len = 1
+
+            list_style = {
+                1 : 'list-style: unset;',
+                2 : 'list-style: circle;',
+                3 : 'list-style: square;',
+            }
+            list_style_data = 'list-style: square;'
+            if list_len in list_style:
+                list_style_data = list_style[list_len]
+
+            return '<li style="margin-left: ' + str(list_len * 20) + 'px;' + list_style_data + '">' + list_data + '</li>'
+
+        list_regex = r'((?:\n *\* [^\n]+)+)\n'
+        list_count_max = len(re.findall(list_regex, self.render_data)) * 3
+        while 1:
+            list_data = re.search(list_regex, self.render_data)
+            if list_count_max < 0:
+                break
+            elif not list_data:
+                break
+            else:
+                list_data = list_data.group(1)
+                list_sub_regex = r'\n( *)\* ([^\n]+)'
+
+                list_data = re.sub(list_sub_regex, do_render_list_sub, list_data)
+
+                self.render_data = re.sub(list_regex, lambda x : ('\n<front_br><ul class="opennamu_ul">' + list_data + '</ul><back_br>\n'), self.render_data, 1)
+
+            list_count_max -= 1
+
     def do_render_last(self):
         # add category
         if self.doc_include == '':
@@ -1513,12 +1599,13 @@ class class_do_render_namumark:
         self.do_render_include()
         self.do_render_middle()
         self.do_render_math()
-        # self.do_render_list()
         self.do_render_table()
+        self.do_render_list()
         self.do_render_macro()
         self.do_render_link()
         self.do_redner_footnote()
         self.do_render_text()
+        self.do_render_hr()
         self.do_render_heading()
         self.do_render_last()
 

+ 1 - 1
route/user_info.py

@@ -16,7 +16,7 @@ def user_info(name = ''):
             curs.execute(db_change("select count(*) from alarm where name = ?"), [ip])
             count = curs.fetchall()
             if count and count[0][0] != 0:
-                tool_menu += '<li><a id="not_thing" href="/alarm">' + load_lang('alarm') + ' (' + str(count[0][0]) + ')</a></li>'
+                tool_menu += '<li><a class="opennamu_not_exist_link" href="/alarm">' + load_lang('alarm') + ' (' + str(count[0][0]) + ')</a></li>'
             else:
                 tool_menu += '<li><a href="/alarm">' + load_lang('alarm') + '</a></li>'
     

+ 1 - 1
route/view_read.py

@@ -43,7 +43,7 @@ def view_read(name = 'Test', doc_rev = '', doc_from = '', do_type = ''):
                     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>' + \
+                            '<a class="opennamu_link_inter" href="/xref/' + url_pas(data[0]) + '">(' + load_lang('backlink') + ')</a>' + \
                         '</li>' + \
                     ''
 

+ 1 - 1
route/view_xref.py

@@ -41,7 +41,7 @@ def view_xref(name = 'Test', xref_type = 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 += ' <a class="opennamu_link_inter" href="/xref/' + url_pas(data[0]) + '">(' + load_lang('backlink') + ')</a>'
 
             div += '</li>'
 

+ 1 - 1
version.json

@@ -1,6 +1,6 @@
 {
     "beta" : {
-        "r_ver" : "v3.4.5-unstable (stable2) (beta5-74)",
+        "r_ver" : "v3.4.5-unstable (stable2) (beta5-75)",
         "c_ver" : "3500354",
         "s_ver" : "3500110"
     }

+ 2 - 4
views/main_css/css/main.css

@@ -36,9 +36,7 @@ td {
     padding: 8px 10px;
 }
 
-@supports (-webkit-text-size-adjust:none) and (not (-ms-accelerator:true))
-and (not (-moz-appearance:none))
-{
+@supports (-webkit-touch-callout: none) {
     td {
         border: 1px solid gainsboro;
         border-width: 1px;
@@ -108,7 +106,7 @@ a {
 }
 
 a:hover {
-    color: cornflowerblue;
+    color: darkblue;
 }
 
 .opennamu_not_exist_link {

+ 4 - 0
views/main_css/css/sub/dark.css

@@ -3,6 +3,10 @@ html, body {
     color: white;
 }
 
+a:hover {
+    color: cornflowerblue;
+}
+
 textarea, input, button, select {
     background: #1f2023;
     color: white;

+ 0 - 2
views/main_css/js/func/insert_user_info.js

@@ -102,8 +102,6 @@ function do_insert_user_info() {
                         '';
                         
                         document.getElementById('opennamu_get_user_info').innerHTML = data;
-                        
-                        opennamu_do_ip_parser();
                     }
                 }
             }

+ 0 - 95
views/main_css/js/func/render_user_name.js

@@ -1,95 +0,0 @@
-"use strict";
-
-function opennamu_do_user_document_check() {
-    let data_all = document.getElementsByClassName('opennamu_user_link');
-    for(let for_a = 0; for_a < data_all.length; for_a++) {
-        if(data_all && data_all[for_a]) {
-            if(data_all[for_a].getAttribute('complete') === '1') {
-                continue;
-            }
-        }
-        
-        let data = data_all[for_a].innerHTML;
-        
-        let xhr = new XMLHttpRequest();
-        xhr.open("POST", "/api/user_info/" + opennamu_do_url_encode(data));
-        xhr.send();
-        
-        document.getElementsByClassName('opennamu_user_link')[for_a].setAttribute('complete', '1');
-        xhr.onreadystatechange = function() {
-            if(this.readyState === 4 && this.status === 200) {
-                // start part
-                let xhr_data = JSON.parse(this.responseText);
-                
-                // user document part
-                if(xhr_data[data]['document'] === '0') {
-                    document.getElementsByClassName('opennamu_user_link')[for_a].id = "not_thing";
-                }
-                
-                // user auth part
-                let user_data = document.getElementsByClassName('opennamu_user_link')[for_a].innerHTML;
-                if(xhr_data[data]['auth'] === '0') {
-                    
-                } else if(xhr_data[data]['auth'] === '1') {
-                    
-                } else {
-                    user_data = '<b>' + user_data + '</b>';
-                }
-                
-                if(xhr_data[data]['ban'] != '0') {
-                    user_data = '<s>' + user_data + '</s>';
-                }
-                
-                // user title part
-                user_data = xhr_data[data]['user_title'] + user_data;
-                
-                // end part
-                document.getElementsByClassName('opennamu_user_link')[for_a].innerHTML = user_data;
-            }
-        }
-    }
-}
-
-function opennamu_do_ip_parser() {
-    let data_all = document.getElementsByClassName('opennamu_ip_render');
-    let data_list = {};
-    for(let for_a = 0; for_a < data_all.length; for_a++) {
-        if(data_all && data_all[for_a]) {
-            if(data_all[for_a].getAttribute('complete') === '1') {
-                continue;
-            }
-        }
-        
-        let data = data_all[for_a].innerHTML;
-        let data_raw = data;
-        
-        if(data_list[data_raw]) {
-            document.getElementsByClassName('opennamu_ip_render')[for_a].innerHTML = data_list[data_raw];
-            document.getElementsByClassName('opennamu_ip_render')[for_a].setAttribute('complete', '1');
-            
-            continue;
-        }
-        
-        if(opennamu_do_id_check(data_raw)) {
-            data = '' + 
-                '<a class="opennamu_user_link" ' + 
-                    'href="/w/user:' + opennamu_do_url_encode(data_raw) + '">' + 
-                    data_raw + 
-                '</a>' +
-            '';
-        } else {
-            
-        }
-        
-        data += ' <a href="/user/' + opennamu_do_url_encode(data_raw) + '">(🛠︎)</a>';
-
-        document.getElementsByClassName('opennamu_ip_render')[for_a].innerHTML = data;
-        document.getElementsByClassName('opennamu_ip_render')[for_a].setAttribute('complete', '1');
-
-        data_list[data_raw] = data;
-    }
-    
-    opennamu_do_user_document_check();
-}
-
-opennamu_do_ip_parser();

+ 1 - 23
views/main_css/js/load_skin_set.js

@@ -96,29 +96,6 @@ function main_css_get_post() {
 
 function main_css_skin_load() {    
     var head_data = document.querySelector('head');
-    if(document.cookie.match(opennamu_cookie_split_regex('main_css_del_strike'))) {
-        if(document.cookie.match(opennamu_cookie_split_regex('main_css_del_strike'))[1] === '1') {
-            head_data.innerHTML += '<style>s { text-decoration: none; } s:hover { background-color: transparent; }</style>';
-        } else if(document.cookie.match(opennamu_cookie_split_regex('main_css_del_strike'))[1] === '2') {
-            head_data.innerHTML += '<style>s { display: none; }</style>';
-        }
-    }
-
-    if(document.cookie.match(opennamu_cookie_split_regex('main_css_del_bold'))) {
-        if(document.cookie.match(opennamu_cookie_split_regex('main_css_del_bold'))[1] === '1') {
-            head_data.innerHTML += '<style>b { font-weight: normal; }</style>';
-        } else if(document.cookie.match(opennamu_cookie_split_regex('main_css_del_bold'))[1] === '2') {
-            head_data.innerHTML += '<style>b { display: none; }</style>';
-        }
-    }
-
-    if(
-        document.cookie.match(opennamu_cookie_split_regex('main_css_include_link')) &&
-        document.cookie.match(opennamu_cookie_split_regex('main_css_include_link'))[1] === '1'
-    ) {
-        head_data.innerHTML += '<style>#include_link { display: inline; }</style>';
-    }
-
     if(document.cookie.match(opennamu_cookie_split_regex('main_css_toc_set'))) {
         if(document.cookie.match(opennamu_cookie_split_regex('main_css_toc_set'))[1] === '2') {
             head_data.innerHTML += '<style>#auto_toc { display: none; }</style>';
@@ -134,6 +111,7 @@ function main_css_skin_load() {
         head_data.innerHTML += '<style>body, input, textarea { font-size: ' + document.cookie.match(opennamu_cookie_split_regex('main_css_font_size'))[1] + 'px; }</style>';
     }
     
+    /* 개편 필요 */
     if(
         document.cookie.match(opennamu_cookie_split_regex('main_css_link_delimiter')) &&
         document.cookie.match(opennamu_cookie_split_regex('main_css_link_delimiter'))[1] === '1'

+ 0 - 0
views/main_css/js/render/html.js


+ 0 - 687
views/main_css/js/render/markdown.js

@@ -1,687 +0,0 @@
-"use strict";
-
-class opennamu_render_markdown {
-    // Init Part
-    constructor(
-        render_part_id,
-        render_part_id_after,
-        render_part_id_add,
-        doc_name
-    ) {
-        this.doc_data = document.getElementById(render_part_id_add + render_part_id).innerHTML;
-            
-        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>';
-        this.doc_data.replace(/\r/g, '');
-
-        this.doc_name = doc_name;
-            
-        this.parser_data_temp = {};
-        this.parser_data_temp_other = {};
-        this.parser_data_temp_other['toc'] = '';
-        this.parser_data_temp_other['footnote'] = '';
-        this.parser_data_temp_other['category'] = '';
-
-        this.parser_data_js = [];
-        
-        this.parser_count = {};
-        this.parser_count['parser'] = 0;
-        this.parser_count['nowiki'] = 0;
-        
-        this.render_part_id = render_part_id;
-        this.render_part_id_add = render_part_id_add;
-        this.render_part_id_after = render_part_id_after;
-    }
-    
-    // Func Part
-    do_func_parser_to_text(data, parser_type = 'parser') {
-        let parser_data_temp = this.parser_data_temp;
-        let parser_match;
-        if(parser_type === 'nowiki' || parser_type === 'nowikiLink' || parser_type === 'nowikiEnd') {
-            parser_match = /<(\/?nowiki[0-9]+Span)>/;
-        } else {
-            parser_match = /<(\/?render[0-9]+Span)>/;
-        }
-        
-        while(data.match(parser_match)) {
-            data = data.replace(parser_match, function(match, x1) {
-                if(parser_type === 'nowikiEnd') {
-                    return parser_data_temp[x1 + 'End'];
-                } else if(parser_type === 'nowikiLink') {
-                    let nowiki_data = parser_data_temp[x1];
-                    nowiki_data = nowiki_data.replace(/\\(.)/g, '$1');
-                    
-                    return nowiki_data;
-                } else {
-                    return parser_data_temp[x1];
-                }
-            });
-        }
-        
-        return data;
-    }
-    
-    do_func_xss_encode(data) {
-        data = data.replace(/'/g, '&#x27;');
-        data = data.replace(/"/g, '&quot;');
-        data = data.replace(/</g, '&lt;');
-        data = data.replace(/</g, '&gt;');
-        data = data.replace(/&/g, '&amp;');
-        
-        return data;
-    }
-    
-    do_func_xss_decode(data) {
-        data = data.replace(/&#x27;/g, '\'');
-        data = data.replace(/&quot;/g, '"');
-        data = data.replace(/&lt;/g, '<');
-        data = data.replace(/&gt;/g, '>');
-        data = data.replace(/&amp;/g, '&');
-        
-        return data;
-    }
-    
-    // Render Part
-    do_part_text() {
-        let parser_count = this.parser_count['parser'];
-        let parser_data_temp = this.parser_data_temp;
-        
-        this.doc_data = this.doc_data.replace(/~~((?:(?!~~|\n).)+)~~/g, function(match, x1) {
-            parser_count += 1;
-            let parser_count_str = String(parser_count);
-            
-            parser_data_temp['render' + parser_count_str + 'Span'] = '<s>';
-            parser_data_temp['/render' + parser_count_str + 'Span'] = '</s>';
-            
-            return '<render' + parser_count_str + 'Span>' + x1 + '</render' + parser_count_str + 'Span>';
-        });
-        
-        this.doc_data = this.doc_data.replace(/\*\*((?:(?!\*\*|\n).)+)\*\*/g, function(match, x1) {
-            parser_count += 1;
-            let parser_count_str = String(parser_count);
-            
-            parser_data_temp['render' + parser_count_str + 'Span'] = '<b>';
-            parser_data_temp['/render' + parser_count_str + 'Span'] = '</b>';
-            
-            return '<render' + parser_count_str + 'Span>' + x1 + '</render' + parser_count_str + 'Span>';
-        });
-        
-        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);
-            
-            parser_data_temp['render' + parser_count_str + 'Span'] = '<b>';
-            parser_data_temp['/render' + parser_count_str + 'Span'] = '</b>';
-            
-            return '<render' + parser_count_str + 'Span>' + x1 + '</render' + parser_count_str + 'Span>';
-        });
-        
-        this.doc_data = this.doc_data.replace(/\*([^*\n]+)\*/g, function(match, x1) {
-            parser_count += 1;
-            let parser_count_str = String(parser_count);
-            
-            parser_data_temp['render' + parser_count_str + 'Span'] = '<i>';
-            parser_data_temp['/render' + parser_count_str + 'Span'] = '</i>';
-            
-            return '<render' + parser_count_str + 'Span>' + x1 + '</render' + parser_count_str + 'Span>';
-        });
-        
-        this.doc_data = this.doc_data.replace(/<uBar>(((?!<uBar>).)+)<uBar>/g, function(match, x1) {
-            parser_count += 1;
-            let parser_count_str = String(parser_count);
-            
-            parser_data_temp['render' + parser_count_str + 'Span'] = '<i>';
-            parser_data_temp['/render' + parser_count_str + 'Span'] = '</i>';
-            
-            return '<render' + parser_count_str + 'Span>' + x1 + '</render' + parser_count_str + 'Span>';
-        });
-        
-        this.doc_data = this.doc_data.replace(/&lt;ins&gt;((?:(?!&lt;ins&gt;|&lt;\/ins&gt;|\n).)+)&lt;\/ins&gt;/g, function(match, x1) {
-            parser_count += 1;
-            let parser_count_str = String(parser_count);
-            
-            parser_data_temp['render' + parser_count_str + 'Span'] = '<u>';
-            parser_data_temp['/render' + parser_count_str + 'Span'] = '</u>';
-            
-            return '<render' + parser_count_str + 'Span>' + x1 + '</render' + parser_count_str + 'Span>';
-        });
-        
-        this.doc_data = this.doc_data.replace(/&lt;sub&gt;((?:(?!&lt;sub&gt;|&lt;\/sub&gt;|\n).)+)&lt;\/sub&gt;/g, function(match, x1) {
-            parser_count += 1;
-            let parser_count_str = String(parser_count);
-            
-            parser_data_temp['render' + parser_count_str + 'Span'] = '<sub>';
-            parser_data_temp['/render' + parser_count_str + 'Span'] = '</sub>';
-            
-            return '<render' + parser_count_str + 'Span>' + x1 + '</render' + parser_count_str + 'Span>';
-        });
-        
-        this.doc_data = this.doc_data.replace(/&lt;sup&gt;((?:(?!&lt;sup&gt;|&lt;\/sup&gt;|\n).)+)&lt;\/sup&gt;/g, function(match, x1) {
-            parser_count += 1;
-            let parser_count_str = String(parser_count);
-            
-            parser_data_temp['render' + parser_count_str + 'Span'] = '<sup>';
-            parser_data_temp['/render' + parser_count_str + 'Span'] = '</sup>';
-            
-            return '<render' + parser_count_str + 'Span>' + x1 + '</render' + parser_count_str + 'Span>';
-        });
-        
-        this.parser_count['parser'] = parser_count;
-        this.parser_data_temp = parser_data_temp;
-    }
-    
-    do_part_heading() {
-        let parser_count = this.parser_count['parser'];
-        let parser_data_temp = this.parser_data_temp;
-        
-        let toc_data = '';
-        
-        let heading_n = 0;
-        let heading_list = [0, 0, 0, 0, 0, 0];
-        let heading_regex = /\n(#{1,6})([^#][^\n]*)\n/;
-        while(this.doc_data.match(heading_regex)) {
-            this.doc_data = this.doc_data.replace(heading_regex, function(match, x1, x2) {
-                let heading_level = x1.length - 1;
-                let heading_level_str = String(heading_level + 1);
-
-                heading_list[heading_level] += 1;
-                for(let for_a = heading_level + 1; for_a < 6; for_a++) {
-                    heading_list[for_a] = 0;
-                }
-
-                let heading_list_str = '';
-                for(let for_a = 0; for_a < 6; for_a++) {
-                    if(heading_list[for_a] !== 0) {
-                        heading_list_str += String(heading_list[for_a]) + '.'
-                    }
-                }
-                
-                let heading_list_str_2 = heading_list_str.replace(/\.$/, '');
-                
-                heading_n += 1;
-                let heading_n_str = String(heading_n);
-                
-                toc_data += '' +
-                    '<a href="#opennamu_heading_' + heading_list_str_2 + '">' + heading_list_str + '</a> ' +
-                    '<span id="opennamu_TOC_content_' + heading_n_str + '"></span>' +
-                    '<br>' +
-                ''
-                
-                let heading_data = x2;
-                heading_data = heading_data.replace(/^ /, '');
-
-                return '' + 
-                    '\n<brEnd>' + 
-                    '<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' +
-                '';
-            });
-        }
-        
-        this.parser_data_temp_other['toc'] = toc_data;
-    }
-    
-    do_part_image() {
-        let render_main = this;
-        let render_part_id_add = this.render_part_id_add;
-        
-        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, x2) {
-            if(x1 === '' && x2 === '') {
-                return '<imageBlink>';
-            } else {
-                if(x2 !== '' && x2.match(/^https?:\/\//)) {
-                    parser_count += 1;
-                    let parser_count_str = String(parser_count);
-                    
-                    let image_src = render_main.do_func_xss_encode(x2);
-                    let image_alt;
-                    if(x1 !== '') {
-                        image_alt = render_main.do_func_xss_encode(x1);
-                    } else {
-                        image_alt = image_src;
-                    }
-                    
-                    parser_data_temp['render' + parser_count_str + 'Span'] = '<img alt="' + image_alt + '" src="' + image_src + '">';
-                    parser_data_temp['/render' + parser_count_str + 'Span'] = '';
-
-                    return '<render' + parser_count_str + 'Span></render' + parser_count_str + 'Span>';
-                } else {
-                    parser_count += 1;
-                    let parser_count_str = String(parser_count);
-
-                    parser_data_temp['render' + parser_count_str + 'Span'] = '<img>';
-                    parser_data_temp['/render' + parser_count_str + 'Span'] = '';
-
-                    return '<render' + parser_count_str + 'Span></render' + parser_count_str + 'Span>';
-                }
-            }
-        });
-        
-        this.doc_data = this.doc_data.replace(/<imageBlink>/g, '![]()');
-        
-        this.parser_count['parser'] = parser_count;
-        this.parser_data_temp = parser_data_temp;
-    }
-    
-    do_part_link() {
-        let render_main = this;
-        let render_part_id_add = this.render_part_id_add;
-        
-        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, x2) {
-            if(x1 === '' && x2 === '') {
-                return '<linkBlink>';
-            } else {
-                if(x2 !== '' && x2.match(/^https?:\/\//)) {
-                    parser_count += 1;
-                    let parser_count_str = String(parser_count);
-                    
-                    let link_main = render_main.do_func_parser_to_text(x2, 'nowikiLink');
-                    link_main = render_main.do_func_xss_encode(link_main);
-                    
-                    let link_sub;
-                    if(x1 === '') {
-                        link_sub = x2;
-                    } else {
-                        link_sub = x1;
-                    }
-                    
-                    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>';
-                } else {
-                    parser_count += 1;
-                    let parser_count_str = String(parser_count);
-
-                    let link_main;
-                    let link_sub;
-                    let link_title;
-                    if(x2 === '') {
-                        link_main = x1;
-                        link_sub = x1;
-                    } else if(x1 === '') {
-                        link_main = x2;
-                        link_sub = x2;
-                    } else {
-                        link_main = x2;
-                        link_sub = x1;
-                    }
-                    
-                    link_main = render_main.do_func_parser_to_text(link_main, 'nowikiLink');
-                    link_main = render_main.do_func_xss_encode(link_main);
-                    
-                    link_title = link_main;
-
-                    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 + '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>';
-                }
-            }
-        });
-        
-        this.doc_data = this.doc_data.replace(/<linkBlink>/g, '[]()');
-        
-        this.doc_data = this.doc_data.replace(/&lt;(https?:\/\/(?:(?:(?!&lt;|&gt;).)+))&gt;/g, function(match, x1) {
-            parser_count += 1;
-            let parser_count_str = String(parser_count);
-            
-            let link_main = render_main.do_func_parser_to_text(x1, 'nowikiLink');
-            link_main = render_main.do_func_xss_encode(link_main);
-            
-            let link_sub = x1;
-
-            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>';
-        });
-        
-        this.parser_count['parser'] = parser_count;
-        this.parser_data_temp = parser_data_temp;
-    }
-    
-    do_part_footnote_list() {
-        if(this.parser_data_temp_other['footnote'] !== '') {
-            let footnote = '';
-            footnote += '<ul id="footnote_data">';
-            footnote += this.parser_data_temp_other['footnote'];
-            footnote += '</ul>';
-            
-            this.parser_data_temp_other['footnote'] = '';
-            
-            return footnote;
-        } else {
-            return '';
-        }
-    }
-    
-    do_part_footnote() {
-        let render_main = this;
-        
-        let parser_count = this.parser_count['parser'];
-        let parser_data_temp = this.parser_data_temp;
-        let parser_data_temp_other = this.parser_data_temp_other;
-        
-        let footnote_n = 0;
-        let footnote_name_all = {};
-        this.doc_data = this.doc_data.replace(/(?:\[\^((?:(?!\[\^| ).)*)(?: ((?:(?!\[\^|\]).)+))?\]|(\[fnote\(\)]))/g, function(match, x1, x2, x3) {
-            if(x3 === undefined) {
-                if(x1 === '' && x2 === undefined) {
-                    return '<footnoteBlink>';
-                } else {
-                    footnote_n += 1;
-
-                    let footnote_name;
-                    let footnote_id = String(footnote_n);
-                    if(x1 === '') {
-                        footnote_name = footnote_id;
-                    } else {
-                        footnote_name = x1;
-                    }
-                    
-                    let footnote_content;
-                    if(x2 === undefined) {
-                        if(footnote_name_all[footnote_name]) {
-                            footnote_content = footnote_name_all[footnote_name];
-                        } else {
-                            footnote_content = '';
-                            footnote_name_all[footnote_name] = footnote_content;
-                        }
-                    } else {
-                        footnote_content = x2;
-                        footnote_name_all[footnote_name] = footnote_content;
-                    }
-                    
-                    let footnote_list = '';
-                    footnote_list += '<li>';
-                    footnote_list += '<a id="opennamuFnGo' + footnote_id + '" href="#opennamuFnIn' + footnote_id + '">'
-                    footnote_list += '(' + footnote_name + ')';
-                    footnote_list += '</a>';
-                    footnote_list += ' ';
-                    footnote_list += footnote_content;
-                    footnote_list += '</li>';
-                    
-                    parser_data_temp_other['footnote'] += footnote_list;
-
-                    parser_count += 1;
-                    let parser_count_str = String(parser_count);
-                    
-                    let footnote_data = '';
-                    footnote_data += '<sup>'
-                    footnote_data += '<a id="opennamuFnIn' + footnote_id + '" href="#opennamuFnGo' + footnote_id + '">';
-                    footnote_data += '(' + footnote_name + ')';
-                    footnote_data += '</a>';
-                    footnote_data += '</sup>';
-
-                    parser_data_temp['render' + parser_count_str + 'Span'] = footnote_data;
-                    parser_data_temp['/render' + parser_count_str + 'Span'] = '';
-
-                    return '<render' + parser_count_str + 'Span></render' + parser_count_str + 'Span>';
-                }
-            } else {
-                return render_main.do_part_footnote_list();
-            }
-        });
-        
-        this.doc_data = this.doc_data.replace(/<footnoteBlink>/g, '[^]');
-        this.doc_data += this.do_part_footnote_list();
-        
-        this.parser_count['parser'] = parser_count;
-        this.parser_data_temp = parser_data_temp;
-        this.parser_data_temp_other = parser_data_temp_other;
-    }
-    
-    do_part_macro() {
-        let render_main = this;
-        let render_part_id_add = this.render_part_id_add;
-        
-        let parser_count = this.parser_count['parser'];
-        let parser_data_temp = this.parser_data_temp;
-        let parser_data_temp_other = this.parser_data_temp_other;
-        
-        this.doc_data = this.doc_data.replace(/\[([^\[\(<>\n]+)\(((?:(?!\(|\)\]|<|>|\n).)*)\)\]/g, function(match, x1, x2) {
-            if(x1 === 'anchor') {
-                parser_count += 1;
-                let parser_count_str = String(parser_count);
-                
-                let anchor_data = render_main.do_func_parser_to_text(x2, 'nowiki');
-                anchor_data = render_main.do_func_xss_encode(anchor_data);
-
-                parser_data_temp['render' + parser_count_str + 'Span'] = '<span id="' + anchor_data + '">';
-                parser_data_temp['/render' + parser_count_str + 'Span'] = '</span>';
-
-                return '<render' + parser_count_str + 'Span></render' + parser_count_str + 'Span>' 
-            } else if(x1 === 'category') {
-                let category = x2.split(',');
-
-                let category_data = render_main.do_func_parser_to_text(category[0], 'nowiki');
-                
-                let link_main = 'category:' + category_data;
-                let link_title = render_main.do_func_xss_encode(link_main);
-                
-                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 + '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'] += ' | ';
-                
-                return '';
-            } else if(x1 === 'toc') {
-                if(parser_data_temp_other['toc'] !== '') {
-                    return '' +
-                        '<div id="opennamu_TOC" class="opennamu_TOC">' + 
-                            '<span class="opennamu_TOC_title">' +
-                                'TOC' +
-                            '</span>' + 
-                            '<br>' + 
-                            '<br>' + 
-                            parser_data_temp_other['toc'] + 
-                        '</div>' +
-                    '';
-                } else {
-                    return '';
-                }
-            }
-            else {
-                return match;
-            }
-        });
-        
-        this.parser_count['parser'] = parser_count;
-        this.parser_data_temp = parser_data_temp;
-        this.parser_data_temp_other = parser_data_temp_other;
-    }
-    
-    do_part_nowiki() {
-        let render_main = this;
-        
-        let parser_count = this.parser_count['parser'];
-        let parser_data_temp = this.parser_data_temp;
-
-        this.doc_data = this.doc_data.replace(/\\\n/g, '\n');
-        this.doc_data = this.doc_data.replace(/\\(&#x27;|&quot;|&lt;|&gt;|&amp;|.)/g, function(match, x1) {
-            let nowiki_data = x1;
-            
-            parser_count += 1;
-            let parser_count_str = String(parser_count);
-
-            parser_data_temp['nowiki' + parser_count_str + 'Span'] = match;
-            parser_data_temp['/nowiki' + parser_count_str + 'Span'] = '';
-            
-            parser_data_temp['nowiki' + parser_count_str + 'SpanEnd'] = '<code>' + nowiki_data;
-            parser_data_temp['/nowiki' + parser_count_str + 'SpanEnd'] = '</code>';
-            
-            return '<nowiki' + parser_count_str + 'Span>' + '</nowiki' + parser_count_str + 'Span>';
-        });
-        
-        this.doc_data = this.doc_data.replace(/```((?:(?:(?!```).)|\n)+)```/g, function(match, x1) {
-            let nowiki_data = render_main.do_func_parser_to_text(x1, 'nowiki');
-            
-            parser_count += 1;
-            let parser_count_str = String(parser_count);
-            
-            if(nowiki_data.match(/\n/)) {
-                parser_data_temp['nowiki' + parser_count_str + 'Span'] = match;
-                parser_data_temp['/nowiki' + parser_count_str + 'Span'] = '';
-                
-                parser_data_temp['nowiki' + parser_count_str + 'SpanEnd'] = '<pre>' + nowiki_data;
-                parser_data_temp['/nowiki' + parser_count_str + 'SpanEnd'] = '</pre>';
-            } else {
-                parser_data_temp['nowiki' + parser_count_str + 'Span'] = match;
-                parser_data_temp['/nowiki' + parser_count_str + 'Span'] = '';
-                
-                parser_data_temp['nowiki' + parser_count_str + 'SpanEnd'] = '<code>' + nowiki_data;
-                parser_data_temp['/nowiki' + parser_count_str + 'SpanEnd'] = '</code>';
-            }
-            
-            return '<nowiki' + parser_count_str + 'Span>' + '</nowiki' + parser_count_str + 'Span>';
-        });
-        
-        this.doc_data = this.doc_data.replace(/`([^`\n]+)`/g, function(match, x1) {
-            let nowiki_data = render_main.do_func_parser_to_text(x1, 'nowiki');
-            
-            parser_count += 1;
-            let parser_count_str = String(parser_count);
-            
-            parser_data_temp['nowiki' + parser_count_str + 'Span'] = match;
-            parser_data_temp['/nowiki' + parser_count_str + 'Span'] = '';
-
-            parser_data_temp['nowiki' + parser_count_str + 'SpanEnd'] = '<code>' + nowiki_data;
-            parser_data_temp['/nowiki' + parser_count_str + 'SpanEnd'] = '</code>';
-            
-            return '<nowiki' + parser_count_str + 'Span>' + '</nowiki' + parser_count_str + 'Span>';
-        });
-        
-        this.parser_count['parser'] = parser_count;
-        this.parser_data_temp = parser_data_temp;
-    }
-    
-    do_part_horizon() {        
-        let horizone_regex = /\n((?:\*|\* |-|- ){3,})\n/;
-        while(this.doc_data.match(horizone_regex)) {
-            this.doc_data = this.doc_data.replace(horizone_regex, function(match, x1, x2) {
-                return '\n<brEnd><hr><brStart>\n';
-            });
-        }
-    }
-    
-    do_part_blockquote() {
-        let parser_count = this.parser_count['parser'];
-        let parser_data_temp = this.parser_data_temp;
-        
-        let blockquote_regex = /((?:\n&gt;(?:[^\n]+))+)/;
-        while(this.doc_data.match(blockquote_regex)) {
-            this.doc_data = this.doc_data.replace(blockquote_regex, function(match, x1) {
-                let blockquote_data = '<brStart>' + x1;
-                blockquote_data = blockquote_data.replace(/\n&gt;    ?/g, '\n');
-
-                parser_count += 1;
-                let parser_count_str = String(parser_count);
-
-                parser_data_temp['render' + parser_count_str + 'Span'] = '<blockquote>';
-                parser_data_temp['/render' + parser_count_str + 'Span'] = '</blockquote>';
-
-                return '\n<brEnd><render' + parser_count_str + 'Span>' + blockquote_data + '</render' + parser_count_str + 'Span>';
-            });
-        }
-        
-        this.parser_count['parser'] = parser_count;
-        this.parser_data_temp = parser_data_temp;
-    }
-    
-    do_part_list() {
-        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;
-            let list_depth = -1;
-            
-            list_data = list_data.replace(/\n( )*\* ?([^\n]+)/g, function(match, x1, x2) {
-                return '';
-            });
-
-            parser_count += 1;
-            let parser_count_str = String(parser_count);
-
-            parser_data_temp['render' + parser_count_str + 'Span'] = '<ul>';
-            parser_data_temp['/render' + parser_count_str + 'Span'] = '</ul>';
-
-            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;
-    }
-    
-    do_part_final() {
-        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(/<uBar>/g, '_');
-        
-        this.doc_data = this.doc_data.replace(/\n/g, '<br>');
-        
-        if(this.parser_data_temp_other['category'] !== '') {
-            let category = this.parser_data_temp_other['category'];
-            category = category.replace(/ \| $/, '');
-            
-            this.doc_data += '<hr class="main_hr">';
-            this.doc_data += '<div id="cate_all"><div id="cate">';
-            this.doc_data += 'Category : ';
-            this.doc_data += category;
-            this.doc_data += '</div></div>';
-        }
-    }
-    
-    // Main Part
-    do_main() {
-        this.do_part_nowiki();
-        this.do_part_list();
-        this.do_part_blockquote();
-        this.do_part_heading();
-        this.do_part_horizon();
-        this.do_part_footnote();
-        this.do_part_macro();
-        this.do_part_image();
-        this.do_part_link();
-        this.do_part_text();
-        this.do_part_final();
-        
-        this.doc_data = this.do_func_parser_to_text(this.doc_data);
-        this.doc_data = this.do_func_parser_to_text(this.doc_data, 'nowikiEnd');
-        
-        document.getElementById(this.render_part_id_add + this.render_part_id_after).innerHTML = this.doc_data;
-        
-        document.getElementById(this.render_part_id_add + this.render_part_id).style.display = "none";
-        document.getElementById(this.render_part_id_add + this.render_part_id_after).style.display = "";
-        
-        for(let x1 in this.parser_data_js) {
-            eval(this.parser_data_js[x1]);
-        }
-        
-        new opennamu_render_wiki(
-            render_part_id_add = this.render_part_id_add
-        ).do_main();
-    }
-}

+ 0 - 88
views/main_css/js/render/wiki.js

@@ -1,88 +0,0 @@
-"use strict";
-
-class opennamu_render_wiki {
-    constructor(
-        render_part_id_add
-    ) {
-        this.render_part_id_add = render_part_id_add;
-    }
-    
-    do_part_image() {
-        
-    }
-    
-    do_part_link() {
-        let render_part_id_add = this.render_part_id_add;
-        
-        let link_list = {};
-        let link_list_sub = [];
-        for(
-            let for_a = 0;
-            document.getElementsByClassName(this.render_part_id_add + 'opennamu_link')[for_a];
-            for_a++
-        ) {
-            let link_data = document.getElementsByClassName(this.render_part_id_add + 'opennamu_link')[for_a];
-            
-            link_list_sub.push(link_data.title);
-            
-            if(!link_list[link_data.title]) {
-                link_list[link_data.title] = [for_a];
-            } else {
-                link_list[link_data.title].push(for_a);
-            }
-        }
-        
-        let data_form = new FormData();
-        data_form.append('title_list', JSON.stringify(link_list_sub));
-        
-        let xhr = new XMLHttpRequest();
-        xhr.open("POST", "/api/w/test/doc_tool/exist");
-        xhr.send(data_form);
-        xhr.onreadystatechange = function() {
-            if(this.readyState === 4 && this.status === 200) {
-                let xhr_data = JSON.parse(this.responseText);
-                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 + 'opennamu_link')[link_list[for_a][for_b]].id = "not_thing";
-                        }
-                    }
-                }
-            }
-        }
-    }
-    
-    do_part_toc() {
-        if(document.getElementById('opennamu_TOC_content_1')) {
-            for(
-                let for_a = 1;
-                document.getElementById('opennamu_heading_content_' + String(for_a));
-                for_a++
-            ) {
-                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('opennamu_heading_content_' + String(for_a)).id = heading_data.innerText;
-            }
-
-            let toc_data_all = document.getElementsByClassName('opennamu_TOC');
-            let toc_data = '';
-            for(
-                let for_a = 0;
-                for_a < toc_data_all.length;
-                for_a++
-            ) {
-                if(toc_data === '') {
-                    toc_data = toc_data_all[0].innerHTML;
-                }
-
-                document.getElementsByClassName('opennamu_TOC')[for_a].innerHTML = toc_data;
-            }
-        }
-    }
-    
-    do_main() {
-        this.do_part_link();
-        this.do_part_toc();
-    }
-}

+ 0 - 1501
views/main_css/js/render_onmark.js

@@ -1,1501 +0,0 @@
-// 중괄호 문법 정리
-// Tool
-function do_url_change(data) {
-    return encodeURIComponent(data);
-}
-
-function do_nowiki_change(data, data_nowiki, type = 'normal') {
-    return data.replace(/<span id="((?:[^"]*)(?:nowiki_(?:[^"]+)))"><\/span>/g, function(x, x_1) {
-        if(type === 'normal') {
-            return data_nowiki[x_1];
-        } else {
-            return '\\' + data_nowiki[x_1];
-        }
-    });
-}
-
-function do_link_change(data, data_nowiki, no_change) {
-    data = data.replace(/^:/, '');
-    
-    if(no_change === 0) {
-        data = data.replace(/^사용자:/, 'user:');
-        data = data.replace(/^분류:/, 'category:');
-        data = data.replace(/^파일:/, 'file:');
-    }
-    
-    var data_var = data.split('#');
-    var link_main = data.replace(/#(.*)$/, '');
-    var link_sub = data_var.length !== 1 ? ('#' + data_var[data_var.length - 1]) : '';
-    
-    link_main = do_nowiki_change(link_main, data_nowiki);
-    link_main = do_xss_change(link_main);
-    
-    return [link_main, link_sub];
-}
-
-function do_darkmode_split(data) {
-    if(
-        document.cookie.match(opennamu_cookie_split_regex('main_css_darkmode')) &&
-        document.cookie.match(opennamu_cookie_split_regex('main_css_darkmode'))[1] === '1'
-    ) {
-        let data_split = data.split(',');
-        if(data_split.length > 1) {
-            return data.split(',')[1];
-        } else {
-            return data.split(',')[0];
-        }
-    } else {
-        return data.split(',')[0];
-    }
-}
-
-function do_js_safe_change(data, br_on = 1) {
-    data = data.replace(/\\/g, '\\\\');
-    data = data.replace(/"/g, '\\"');
-    if(br_on === 1) {
-        data = data.replace(/\n/g, '<br>');
-    } else {
-        data = data.replace(/\n/g, '\\n');
-    }
-    
-    return data;
-}
-
-function do_math_try_insert(name_ob, data) {
-    return '' + 
-        'try {\n' + 
-            'katex.render("' + data + '", document.getElementById(\"' + name_ob + '\"));\n' + 
-        '} catch {\n' + 
-            'document.getElementById(\"' + name_ob + '\").innerHTML = "<span style=\'color: red;\'>' + data + '</span>";\n' + 
-        '}\n' + 
-    ''
-}
-
-function do_data_try_insert(name_ob, data) {
-    return '' +
-        'if(document.getElementById("' + name_ob + '")) {\n' + 
-            'document.getElementById("' + name_ob + '").innerHTML = "' + data + '";\n' + 
-        '}\n' +
-    ''
-}
-
-function do_all_try(data) {
-    return '' +
-        'try {\n'
-            + data + 
-        '} catch {}\n' +
-    ''
-}
-
-function do_px_add(data) {
-    if(data) {
-        return data.match(/^[0-9]+$/) ? (data + 'px') : data;
-    } else {
-        return '';
-    }
-}
-
-function do_return_date() {
-    var today_data = new Date();
-
-    return '' +
-        String(today_data.getFullYear()) + '-' + 
-        ((today_data.getMonth() + 1) < 10 ? '0' : '') + String(today_data.getMonth() + 1) + '-' + 
-        (today_data.getDate() < 10 ? '0' : '') + String(today_data.getDate()) + ' ' + 
-        (today_data.getHours() < 10 ? '0' : '') + String(today_data.getHours()) + ':' + 
-        (today_data.getMinutes() < 10 ? '0' : '') + String(today_data.getMinutes()) + ':' + 
-        (today_data.getSeconds() < 10 ? '0' : '') + String(today_data.getSeconds()) +
-    '';
-}
-
-function do_xss_change(data) {
-    data = data.replace(/&lt;/g, '<');
-    data = data.replace(/&gt;/g, '>');
-    data = data.replace(/&amp;/g, '&');
-    data = data.replace(/&quot;/g, '"');
-    
-    return data;
-}
-
-function do_html_escape(data) {
-    data = data.replace(/</g, '&lt;');
-    data = data.replace(/>/g, '&gt;');
-    data = data.replace(/&/g, '&amp;');
-    data = data.replace(/"/g, '&quot;');
-    
-    return data
-}
-
-function do_end_br_replace(data) {
-    data = data.replace(/(\n| )+$/, '\n');
-    
-    return data;
-}
-
-// Sub
-function do_onmark_text_render(data) {    
-    data = data.replace(/'''((?:(?!''').)+)'''/g, '<b>$1</b>');
-    data = data.replace(/''((?:(?!'').)+)''/g, '<i>$1</i>');
-    data = data.replace(/__((?:(?!__).)+)__/g, '<u>$1</u>');
-    
-    data = data.replace(/\^\^\^((?:(?!\^\^\^).)+)\^\^\^/g, '<sup>$1</sup>');
-    data = data.replace(/\^\^((?:(?!\^\^).)+)\^\^/g, '<sup>$1</sup>');
-    
-    data = data.replace(/,,,((?:(?!,,,).)+),,,/g, '<sub>$1</sub>');
-    data = data.replace(/,,((?:(?!,,).)+),,/g, '<sub>$1</sub>');
-    
-    data = data.replace(/--((?:(?!--).)+)--/g, '<s>$1</s>');
-    data = data.replace(/~~((?:(?!~~).)+)~~/g, '<s>$1</s>');
-    
-    return data;
-}
-
-function do_onmark_set_toc_name(toc_name) {
-    let toc_data = document.getElementById("heading_text_" + toc_name).innerText;
-    
-    for(let for_a = 0; document.getElementsByClassName("toc_text_" + toc_name)[for_a]; for_a++) {
-        document.getElementsByClassName("toc_text_" + toc_name)[for_a].innerHTML = toc_data;
-    }
-}
-
-function do_onmark_heading_render(
-    data, 
-    data_js, 
-    name_doc, 
-    name_include
-) {
-    var heading_re = /\n(={1,6})(#)? ?([^\n]+) ?#?={1,6}\n/;
-    var heading_level_all = [0, 0, 0, 0, 0, 0];
-    var toc_data = '';
-    var toc_n = 0;
-    while(1) {        
-        toc_n += 1;
-        
-        var heading_data = data.match(heading_re);
-        if(!heading_data) {
-            break;
-        }
-        
-        if(toc_data === '') {
-            toc_data += '<div id="toc"><div id="toc_title">TOC</div>\n';
-        }
-          
-        var heading_level = heading_data[1].length;
-        heading_level_all[heading_level - 1] += 1;
-
-        var i = 6;
-        while(i > heading_level - 1) {
-            heading_level_all[i] = 0;
-
-            i -= 1;
-        }
-
-        heading_level = String(heading_level);
-        var heading_level_string = '';
-        i = 0;
-        while(i < 6) {
-            if(heading_level_all[i] !== 0) {
-                heading_level_string += String(heading_level_all[i]) + '.';
-            }
-
-            i += 1;
-        }
-        
-        var heading_level_string_no_end = heading_level_string.replace(/\.$/, '');
-        
-        var heading_data_text = heading_data[3].replace(/=+$/, '');
-        heading_data_text = heading_data_text.replace(/#$/, '');
-        heading_data_text = heading_data_text.replace(/ $/, '');
-        
-        toc_data += '' +
-            '<span style="margin-left: ' + String((heading_level_string.match(/\./g).length - 1) * 10) + 'px;">' +
-                '<a href="#s-' + heading_level_string_no_end + '">' + 
-                    heading_level_string + 
-                '</a> ' + 
-                '<span class="toc_text_' + heading_level_string_no_end + '"></span>' +
-            '</span>' +
-            '\n' +
-        ''
-        data_js += 'do_onmark_set_toc_name("' + heading_level_string_no_end + '");\n';
-        
-        data = data.replace(heading_re, function() {
-            return '' +
-                '\n' +
-                (toc_n === 1 ? '' : '</div>') +
-                '<h' + heading_level + ' class="render_heading_text">' + 
-                    '<a href="#toc" id="s-' + heading_level_string_no_end + '">' + heading_level_string + '</a> ' + 
-                    '<span id="heading_text_' + heading_level_string_no_end + '">' +
-                        heading_data_text + 
-                    '</span> ' +
-                    '<a id="edit_load_' + String(toc_n) + '" ' +
-                        'style="font-size: 70%;"' +
-                        'href="/edit_section/' + String(toc_n) + '/' + do_url_change(name_doc) + '">✎</a> ' +
-                    '<a href="javascript:void(0);" ' +
-                        'onclick="javascript:do_open_folding(\'' + name_include + 'in_data_' + String(toc_n) + '\', this);"' +
-                        'style="font-size: 70%;">' + (heading_data[2] ? '⊕' : '⊖') + '</a>' +
-                '</h' + heading_level + '>' +
-                '<div   id="' + name_include + 'in_data_' + String(toc_n) + '" ' +
-                        'style="display: ' + (heading_data[2] ? 'none' : 'block') + ';">' +
-                '<end_point>\n' +
-            ''
-        });
-    }
-    
-    if(toc_data !== '') {
-        toc_data += '</div>';
-
-        data = do_end_br_replace(data) + '</div>';
-    }
-    
-    var toc_auto_add = data.match(/\[(?:목차|toc)\(no\)\]/);
-    var toc_re = /\[(?:toc|목차)\]/g;
-    if(toc_auto_add) {
-        data = data.replace(/\[(?:목차|toc)\(no\)\]/g, '');
-    } else {
-        if(name_include === '' && !data.match(toc_re)) {
-            data = data.replace(/(<h[1-6] (?:[^>]+)>)/, '<div id="auto_toc">' + toc_data + '</div>$1');
-        }
-    }
-    
-    data = data.replace(toc_re, toc_data);
-    
-    return [data, data_js];
-}
-
-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)) {
-        data = data.replace(link_re, function(x, x_1) {
-            var link_split = x_1.split('|');
-            var link_real = link_split[0];
-            var link_out = link_split[1] ? link_split[1] : link_split[0];
-            var link_out_2 = link_split[1] ? link_split[1] : '';
-
-            num_link += 1;
-            var num_link_str = String(num_link - 1);
-            if(link_real.match(/<|>/)) {
-                return '<link_s>' + x_1 + '<link_e>';
-            } else if(link_real.match(file_re)) {
-                var file_load_type = link_real.match(file_re)[1];
-                var file_name = link_real.replace(file_re, '');
-
-                if(file_load_type === '파일' || file_load_type === 'file') {
-                    var file_type = file_name.split('.');
-                    file_name = file_type.slice(0, file_type.length - 1).join('.');
-                    file_type = file_type[file_type.length - 1];
-
-                    var file_src = do_url_change(do_xss_change(file_name)) + '.' + do_html_escape(file_type);
-                    var file_alt = do_html_escape(file_name + '.' + file_type);
-                    var file_exist = 1;
-                } else {
-                    var file_src = do_html_escape(file_name);
-                    var file_alt = do_html_escape(file_name);
-                    var file_exist = 0;
-                }
-
-                var file_style = '';
-                var file_bgcolor = '';
-                var file_align = '';
-
-                var file_set = link_out_2.split('&amp;');
-                for(let i = 0; file_set[i]; i++) {
-                    var file_set_name = file_set[i].split('=');
-                    var file_set_data = file_set_name[1];
-                    file_set_name = file_set_name[0];
-                    
-                    if(file_set_data) {
-                        if(file_set_name === 'width') {
-                            file_style += 'width:' + do_px_add(file_set_data) + ';';
-                        } else if(file_set_name === 'height') {
-                            file_style += 'height:' + do_px_add(file_set_data) + ';';
-                        } else if(file_set_name === 'bgcolor') {
-                            file_bgcolor += 'background:' + file_set_data + ';';
-                        } else if(file_set_name === 'alt') {
-                            file_alt += file_set_data;
-                        } else if(file_set_name === 'align') {
-                            if(file_set_data === 'center') {
-                                file_align = 'display: block; text-align: center;';
-                            } else {
-                                file_align = 'float: ' + file_set_data + ';';
-                            }
-                        }
-                    }
-                }
-
-                return '' +
-                    '<span style="' + file_align + '">' + 
-                        '<span  style="' + file_bgcolor + '" ' +
-                                'class="' + name_include + 'file_finder" ' +
-                                'under_style="' + file_style + '" ' +
-                                'under_alt="' + file_alt + '" ' +
-                                'under_src="' + file_src + '" ' +
-                                'under_href="' + (file_exist === 0 ? "out_link" : '/upload?name=' + file_src.replace(/\.[^.]+$/, '')) + '">' +
-                        '</span>' + 
-                    '</span>' +
-                ''
-            } else if(link_real.match(category_re)) {
-                var category_link = link_real.replace(category_re, '');
-
-                data_js += '' +
-                    'document.getElementsByName("' + name_include + 'set_link_' + num_link_str + '")[0].href = ' + 
-                        '"/w/category:' + do_url_change(category_link) + '";' +
-                    '\n' +
-                '';
-                data_js += '' +
-                    'document.getElementsByName("' + name_include + 'set_link_' + num_link_str + '")[0].title = ' + 
-                        '"' + do_js_safe_change(do_xss_change('category:' + category_link)) + '";' +
-                    '\n' +
-                '';
-
-                category_data += '' +
-                    '<a class="' + name_include + 'link_finder" ' +
-                        'name="' + name_include + 'set_link_' + num_link_str + '" ' +
-                        'href="" ' +
-                        'title="">' +
-                        category_link +
-                    '</a> | ' +
-                ''
-
-                return '';
-            } else if(link_real.match(out_link_re)) {
-                var i = 0;
-                while(i < 2) {
-                    if(i === 0) {
-                        var var_link_type = 'href';
-                    } else {
-                        var var_link_type = 'title';
-                    }
-
-                    data_js += '' +
-                        'document.getElementsByName("' + name_include + 'set_link_' + num_link_str + '")[0].' + var_link_type + ' = ' + 
-                            '"' + do_js_safe_change(do_xss_change(link_real)) + '";' +
-                        '\n' +
-                    '';
-
-                    i += 1;
-                }
-
-                return  '<a id="out_link" ' +
-                            'class="' + name_include + 'link_finder" ' +
-                            'target="_blank" ' +
-                            '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, 
-                            ''
-                        );
-                    }
-                    
-                    var data_inter_var = do_link_change(link_real, data_nowiki, 1);
-                    var data_inter_link_main = data_inter_var[0];
-                    var data_inter_link_sub = data_inter_var[1];
-                        
-                    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(data_inter_link_main) + data_inter_link_sub + '";' +
-                            '\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;
-                } else if(link_real.match(/^\.\.\//)) {
-                    link_real = link_real.replace(/^\.\.\//, '');
-                    link_real = name_doc.replace(/\/[^/]+$/, '') + (link_real !== '' ? '/' + link_real : '');
-                }
-                
-                var link_data_var = do_link_change(link_real, data_nowiki, 0);
-                var link_main = link_data_var[0];
-                var link_sub = link_data_var[1];
-                
-                let link_id = "real_normal_link"
-
-                var i = 0;
-                while(i < 2) {
-                    if(i === 0) {
-                        var var_link_type = 'href';
-                        if(link_main === '') {
-                            link_id = "in_doc_link"
-                            var var_link_data = link_sub;
-                        } else {
-                            var var_link_data = '/w/' + do_url_change(link_main) + link_sub;
-                        }
-                    } else {
-                        var var_link_type = 'title';
-                        var var_link_data = do_js_safe_change(link_main);
-                    }
-
-                    data_js += '' +
-                        'document.getElementsByName("' + name_include + 'set_link_' + num_link_str + '")[0].' + var_link_type + ' = ' + 
-                            '"' + var_link_data + '";' +
-                        '\n' +
-                    '';
-
-                    i += 1;
-                }
-
-                return  '<a class="' + name_include + 'link_finder" ' +
-                            'id="' + link_id + '"' +
-                            'name="' + name_include + 'set_link_' + num_link_str + '" ' +
-                            'title="" ' +
-                            'href="">' + link_out + '</a>';
-            }
-        });
-    }
-    
-    data = data.replace(/<link_s>/, '[[');
-    data = data.replace(/<link_e>/, ']]');
-
-    if(category_data !== '') {
-        if(name_include === '') {
-            category_data = '<div id="cate_all"><div id="cate">Category : ' + category_data;
-        } else {
-            category_data = '<div style="display: none;" id="cate_all"><div id="cate">Category : ' + category_data;
-        }
-        
-        category_data = category_data.replace(/\| $/, '') + '</div></div>';
-    }
-    
-    return [data, data_js, category_data];
-}
-
-function do_onmark_footnote_render(data, name_include) {
-    var footnote_end_data = '';
-    var footnote_all_data = {};
-    var footnote_re = /(?:\[\*([^ \]]*)(?: ((?:(?!\]).)+))?\]|\[(footnote|각주)\])/;
-    var i = 1;
-    while(1) {
-        var footnote_data = data.match(footnote_re);
-        if(!footnote_data) {
-            break;
-        }
-        
-        if(!footnote_data[3]) {
-            if(!footnote_data[2]) {
-                var footnote_line_data = '';
-            } else {
-                var footnote_line_data = footnote_data[2];
-            }
-            
-            if(!footnote_data[1]) {
-                var footnote_name = String(i);
-            } else {
-                var footnote_name = footnote_data[1];
-            }
-            
-            if(!footnote_all_data[footnote_name]) {
-                footnote_all_data[footnote_name] = footnote_line_data;
-            }
-
-            footnote_line_data = footnote_all_data[footnote_name];
-            
-            footnote_end_data += '' +
-                '<li>' +
-                    '<a href="javascript:do_open_foot(\'' + name_include + '\', \'fn-' + String(i) + '\', 1);" ' +
-                        'id="' + name_include + 'cfn-' + String(i) + '">' +
-                        '(' + footnote_name + ')' +
-                    '</a> <span id="' + name_include + 'fn-' + String(i) + '">' + footnote_line_data + '</span>' +
-                '</li>' +
-            '';
-            data = data.replace(footnote_re, function() {
-                return '' +
-                    '<sup>' +
-                        '<a href="javascript:do_open_foot(\'' + name_include + '\', \'fn-' + String(i) + '\', 0);" ' +
-                            'id="' + name_include + 'rfn-' + String(i) + '">' +
-                            '(' + footnote_name + ')' +
-                        '</a>' +
-                    '</sup><span id="' + name_include + 'dfn-' + String(i) + '"></span>' +
-               ''
-            });
-            
-            i += 1;
-        } else {
-            if(footnote_end_data !== '') {
-                footnote_end_data = '<ul id="footnote_data">' + footnote_end_data + '</ul>';   
-            }
-            
-            data = data.replace(footnote_re, function() { return footnote_end_data });    
-            footnote_end_data = '';
-        }
-    }
-    
-    if(footnote_end_data !== '') {
-        data = do_end_br_replace(data) + '<ul id="footnote_data">' + footnote_end_data + '</ul>';
-    }
-    
-    return data;
-}
-
-function do_onmark_macro_render(data, data_js) {
-    data = data.replace(/\[([^[\](]+)\(((?:(?!\)\]).)+)\)\]/g, function(x, x_1, x_2) {
-        x_1 = x_1.toLowerCase();
-        if(x_1 === 'youtube' || x_1 === 'kakaotv' || x_1 === 'nicovideo' || x_1 === 'navertv' || x_1 === 'vimeo') {
-            var video_code = x_2.match(/^([^,]+)/);
-            video_code = video_code ? video_code[1] : '';
-            
-            var video_width = x_2.match(/,(?: *)width=([0-9]+)/);
-            video_width = video_width ? (video_width[1] + 'px') : '640px';
-            
-            var video_height = x_2.match(/,(?: *)height=([0-9]+)/);
-            video_height = video_height ? (video_height[1] + 'px') : '360px';
-            
-            if(x_1 === 'youtube') {
-                var video_start = x_2.match(/,(?: *)start=([0-9]+)/);
-                video_start = video_start ? ('?start=' + video_start[1]) : '';
-                
-                video_code = video_code.replace(/^https:\/\/www\.youtube\.com\/watch\?v=/, '');
-                video_code = video_code.replace(/^https:\/\/youtu\.be\//, '');
-                
-                var video_src = 'https://www.youtube.com/embed/' + video_code + video_start
-            } else if(x_1 === 'kakaotv') {
-                video_code = video_code.replace(/^https:\/\/tv\.kakao\.com\/channel\/9262\/cliplink\//, '');
-                video_code = video_code.replace(/^http:\/\/tv\.kakao\.com\/v\//, '');
-                
-                var video_src = 'https://tv.kakao.com/embed/player/cliplink/' + video_code +'?service=kakao_tv'
-            } else if(x_1 === 'nicovideo') {
-                var video_src = 'https://embed.nicovideo.jp/watch/' + video_code
-            } else if(x_1 === 'navertv') {
-                var video_src = 'https://tv.naver.com/embed/' + video_code
-            } else {
-        var video_src = 'https://player.vimeo.com/video/' + video_code
-        }
-            
-            return '<iframe style="width: ' + video_width + '; height: ' + video_height + ';" src="' + video_src + '" frameborder="0" allowfullscreen></iframe>';
-        } else if(x_1 === 'anchor') {
-            return '<span id="' + x_2 + '"></span>';
-        } else if(x_1 === 'ruby') {
-            let ruby_main_data = x_2.match(/^([^,]+)/);
-            if(ruby_main_data) {
-                ruby_main_data = ruby_main_data[1];
-            } else {
-                ruby_main_data = 'Test';
-            }
-            
-            let ruby_sub_data = x_2.match(/,(?: *)ruby=([^,]+)/);
-            if(ruby_sub_data) {
-                ruby_sub_data = ruby_sub_data[1];
-            } else {
-                ruby_sub_data = 'Test';
-            }
-            
-            return '<ruby>' + ruby_main_data + '<rp>(</rp><rt>' + ruby_sub_data + '</rt><rp>)</rp></ruby>';
-        } else if(x_1 === 'dday') {
-            var date_old = new Date(x_2);
-            var date_now = new Date(do_return_date());
-            
-            var date_end = Math.floor((date_now - date_old) / (24 * 60 * 60 * 1000));
-            
-            return (date_end > 0 ? '+' : '') + date_end;
-        } else if(x_1 === 'age') {
-            var date_old = new Date(x_2);
-            var date_now = new Date(do_return_date());
-            
-            var date_end = Math.floor((date_now - date_old) / (365 * 24 * 60 * 60 * 1000));
-            
-            return date_end > 0 ? date_end : '';            
-        } else if(x_1 === 'pagecount') {
-            return '0';
-        } else {
-            return '<macro_start>' + x_1 + '(' + x_2 + ')<macro_end>';
-        }
-    });
-    
-    var pagecount_n = 0;
-    data = data.replace(/\[([^[*()\]]+)\]/g, function(x, x_1) {
-        x_1 = x_1.toLowerCase();
-        if(x_1 === 'date' || x_1 === 'datetime') {
-            return do_return_date();
-        } else if(x_1 === 'clearfix') {
-            return '<div style="clear:both"></div>';
-        } else if(x_1 === 'br') { 
-            return '<br>';
-        } else if(x_1 === 'pagecount') {
-            if(pagecount_n === 0) {
-                pagecount_n += 1;
-                
-                data_js += 'page_count();\n';
-            }
-            
-            return '<span class="all_page_count"></span>';
-        } else {
-            return '<macro_start>' + x_1 + '<macro_end>';
-        }
-    });
-    
-    data = data.replace(/<macro_start>/g, '[');
-    data = data.replace(/<macro_end>/g, ']');
-    
-    return [data, data_js];
-}
-
-function do_onmark_middle_render(data, data_js, name_include, data_nowiki, name_doc) {
-    // 이것도 nowiki 처럼 가야할 듯
-    
-    var middle_re = /{{{((?:(?!{{{|}}}).)+)}}}/s;
-    
-    var html_n = 0;
-    var syntax_n = 0;
-    var nowiki_n = 0;
-    var folding_n = 0;
-    
-    while(data.match(middle_re)) {        
-        data = data.replace(middle_re, function(x, x_1) {
-            var middle_data_before = x_1.match(/^({+)/);
-            middle_data_before = middle_data_before ? middle_data_before[1] : '';
-            var middle_data_x_1 = x_1.replace(/^({+)/, '');
-            
-            var middle_data = middle_data_x_1.match(/^([^ ]+) /);
-            middle_data = middle_data ? middle_data[1] : '';
-            if(middle_data) {
-                var middle_data_all = middle_data_x_1.replace(/^([^ ]+) /, '');    
-            }
-
-            var middle_type = middle_data.match(
-                /^(?:(?:(#|@)((?:[0-9a-f-A-F]{3}){1,2}|\w+))(?:,(?:(#|@)((?:[0-9a-f-A-F]{3}){1,2}|\w+)))?|(\+|-)([1-5])|#!(html|wiki|syntax|folding|html))$/i
-            );
-            if(middle_type) {
-                if(middle_data_x_1[middle_data_x_1.length - 1] === '\\') {
-                    return middle_data_before + '{{{' + middle_data_x_1 + '<mid_e>';
-                } else if(middle_type[1]) {
-                    let data_color = middle_type[2];
-                    if(middle_type[3]) {
-                        data_color = do_darkmode_split(middle_type[2] + ',' + middle_type[4])    
-                    }
-                    
-                    let data_sharp = '';
-                    if(data_color.match(/^(?:[0-9a-f-A-F]{3}){1,2}$/)) {
-                        data_sharp = '#';
-                    }
-                    
-                    if(middle_type[1] === '@') {
-                        return middle_data_before + '<span style="background: ' + data_sharp + data_color + '">' + middle_data_all + '</span>';
-                    } else {
-                        return middle_data_before + '<span style="color: ' + data_sharp + data_color + '">' + middle_data_all + '</span>';
-                    }
-                } else if(middle_type[5]) {
-                    if(middle_type[5] === '+') {
-                        return middle_data_before + '<span style="font-size: ' + String(100 + (Number(middle_type[6]) * 20)) + '%">' + middle_data_all + '</span>';
-                    } else {
-                        return middle_data_before + '<span style="font-size: ' + String(100 - (Number(middle_type[6]) * 10)) + '%">' + middle_data_all + '</span>';
-                    }
-                } else if(middle_type[7]) {
-                    var middle_type_sub = middle_type[7].toLowerCase();
-                    if(middle_type_sub === 'html') {
-                        html_n += 1;
-
-                        data_nowiki[name_include + 'nowiki_html_' + String(html_n)] = middle_data_all;
-                        data_js += do_data_try_insert(
-                            name_include + 'nowiki_html_' + String(html_n),
-                            do_js_safe_change(middle_data_all)
-                        );
-
-                        return middle_data_before + '<span id="' + name_include + 'nowiki_html_' + String(html_n) + '"></span>';
-                    } else if(middle_type_sub === 'wiki') {
-                        var middle_wiki_re = /^(?:[^ ]+)(?: style=['"]([^\n'"]*)['"])?[^\n]*\n?/;
-                        var middle_wiki = middle_data_x_1.match(middle_wiki_re);
-                        middle_wiki = middle_wiki[1] ? middle_wiki[1] : '';
-                        middle_wiki = middle_wiki.replace(/position/, '');
-
-                        middle_data_all = middle_data_x_1.replace(middle_wiki_re, '');
-                        
-                        return middle_data_before + '' +
-                            '<wiki_s style="' + middle_wiki + '">' +
-                                '<end_point>\n' + 
-                                middle_data_all + 
-                                '\n<start_point>' +
-                            '<wiki_e>' +
-                        '';
-                    } else if(middle_type_sub === 'folding') {
-                        folding_n += 1;
-                        
-                        var middle_folding_re = /^(?:[^ ]+)(?: ([^\n]*))?\n?/;
-                        var middle_folding = middle_data_x_1.match(middle_folding_re);
-                        middle_folding = middle_folding ? middle_folding[1] : 'open';
-                        
-                        middle_data_all = middle_data_x_1.replace(middle_folding_re, '');
-
-                        data_js += do_data_try_insert('get_' + name_include + 'folding_' + String(folding_n), do_js_safe_change(middle_folding));
-                        return middle_data_before + 
-                            '<div>' +
-                                '<b>' + 
-                                    '<a href="javascript:do_open_folding(\'' + name_include + 'folding_' + String(folding_n) + '\');" ' + 
-                                        'id="get_' + name_include + 'folding_' + String(folding_n) + '">' + 
-                                    '</a>' + 
-                                '</b>' + 
-                                '<div id="' + name_include + 'folding_' + String(folding_n) + '" style="display: none;">' +
-                                    '<wiki_s style="">' +
-                                        '\n' +
-                                        middle_data_all +
-                                        '\n<start_point>' +
-                                    '<wiki_e>' +
-                                '</div>' +
-                            '</div>' +
-                        ''
-                    } else if(middle_type_sub === 'syntax') {
-                        syntax_n += 1;
-
-                        let middle_syntax_re = /^(?:[^ ]+) ([^\n]+)\n?/;
-                        var middle_syntax = middle_data_x_1.match(middle_syntax_re);
-                        middle_syntax = middle_syntax ? middle_syntax[1] : 'python';
-
-                        middle_data_all = middle_data_x_1.replace(middle_syntax_re, '');
-
-                        data_nowiki[name_include + 'nowiki_syntax_' + String(syntax_n)] = middle_data_all;
-                        data_js += do_data_try_insert(
-                            name_include + 'nowiki_syntax_' + String(syntax_n),
-                            do_js_safe_change(do_xss_change(middle_data_all), 0)
-                        );
-
-                        return middle_data_before +
-                            '<pre id="syntax">' +
-                                '<code  id="' + name_include + 'nowiki_syntax_' + String(syntax_n) + '" ' +
-                                        'class="' + middle_syntax + '"></code>' +
-                            '</pre>' +
-                        ''
-                    }
-                }
-            }
-            
-            // 최대한 노력해봐야함
-            nowiki_n += 1;
-            
-            data_nowiki[name_include + 'nowiki_' + String(nowiki_n)] = middle_data_x_1;
-            data_js = do_data_try_insert(
-                name_include + 'nowiki_' + String(nowiki_n),
-                do_js_safe_change(middle_data_x_1)
-            ) + data_js;
-            
-            return middle_data_before + '<span id="' + name_include + 'nowiki_' + String(nowiki_n) + '"></span>';
-        });
-    }
-    
-    data = data.replace(/<mid_s>/g, '{{{');
-    data = data.replace(/<mid_e>/g, '}}}');
-    
-    if(syntax_n > 0) {
-        data_js += 'hljs.highlightAll();\n';
-    }
-    
-    return [data, data_js, data_nowiki];
-}
-
-function do_onmark_last_render(data, name_include, data_category) {       
-    // middle_render 마지막 처리
-    data = data.replace(/<wiki_s_[0-9] /g, '<div ');
-    data = data.replace(/<wiki_e_[0-9]>/g, '</div>');
-    
-    // heading_render 마지막 처리
-    data = data.replace(/\n?<start_point>/g, '');
-    data = data.replace(/<end_point>\n?/g, '');
-    
-    // br 마지막 처리
-    data = data.replace(/^(\n| )+/, '');
-    data = do_end_br_replace(data);
-    data = data.replace(/\n/g, '<br>');
-    
-    if(
-        document.cookie.match(opennamu_cookie_split_regex('main_css_category_set')) &&
-        document.cookie.match(opennamu_cookie_split_regex('main_css_category_set'))[1] === '1'
-    ) {
-        if(data_category !== '') {
-            data = data_category + '<hr class="main_hr">' + data;
-        }
-    } else {
-        data += data_category;
-    }
-
-    return data;
-}
-
-function do_onmark_include_render(data, data_js, name_include, data_nowiki) {
-    var include_re = /\[include\(((?:(?!\)\]).)+)\)\]/i;
-    
-    if(name_include === '') {
-        var i = 0;
-        while(1) {
-            i += 1;
-            
-            var include_data = data.match(include_re);
-            if(!include_data) {
-                break;
-            }
-            
-            var include_name = do_nowiki_change(
-                include_data[1].match(/^([^,]+)/)[1],
-                data_nowiki
-            );
-            var include_add_re = /, *([^=]+)=((?:(?:(?!\)]|,).)+)+)/;
-            var include_add_data = []
-            var include_data = include_data[1];
-            while(1) {
-                var include_add = include_data.match(include_add_re);
-                if(!include_add) {
-                    break;
-                }
-                
-                include_add_data.push([
-                    include_add[1], 
-                    do_nowiki_change(include_add[2], data_nowiki)
-                ]);
-                include_data = include_data.replace(include_add_re, '');
-            }
-            
-            data = data.replace(include_re, function() {
-                return '' + 
-                    '<a id="' + name_include + 'include_link" class="include_' + String(i) + '" href="">(' + include_name + ')</a>' +
-                    '<div id="' + name_include + 'include_' + String(i) + '"></div>' +
-                ''
-            });
-            
-            data_js += 'load_include("' + do_js_safe_change(include_name) + '", "' + name_include + 'include_' + String(i) + '", ' + JSON.stringify(include_add_data) + ');\n'
-        }
-    } else {
-        while(1) {
-            var include_data = data.match(include_re);
-            if(!include_data) {
-                break;
-            }
-            
-            data = data.replace(include_re, '');
-        }
-    }
-    
-    return [data, data_js];
-}
-
-function do_onmark_nowiki_before_render(data, data_js, name_include, data_nowiki) {   
-    var num_nowiki = 0;
-    data = data.replace(/\\(&gt;|&lt;|.)/g, function(x, x_1) {
-        num_nowiki += 1;
-        data_nowiki[name_include + 'nowiki_one_' + String(num_nowiki)] = x_1;
-        data_js += do_data_try_insert(name_include + 'nowiki_one_' + String(num_nowiki), do_js_safe_change(x_1));
-        return '<span id="' + name_include + 'nowiki_one_' + String(num_nowiki) + '"></span>';
-    });
-    
-    return [data, data_js, data_nowiki, num_nowiki];
-}
-
-function do_onmark_table_render_sub(data, data_col) {
-    var data_option_all = {
-        "div" : "",
-        "table" : "",
-        "tr" : "",
-        "td" : "",
-        "col" : data_col,
-        "colspan" : "",
-        "rowspan" : "",
-        "data" : ""
-    };
-    var align_auto = 1;
-    
-    var table_option_re = /&lt;((?:(?!&lt;|&gt;).)+)&gt;/;
-    while(1) {
-        var no_option = '';
-        var data_option = data.match(table_option_re);
-        if(!data_option) {
-            break;
-        }
-        
-        data_option = data_option[1];
-        var data_option_var = data_option.split('=');
-        if(data_option_var.length === 2) {
-            var table_option_name = data_option_var[0].replace(/ /g, '');
-            var table_option_data = data_option_var[1].replace(/"/g, '');
-            if(table_option_name === 'tablebgcolor') {
-                // table
-               data_option_all['table'] += 'background:' + do_darkmode_split(table_option_data) + ';';
-            } else if(table_option_name === 'tablewidth') {
-                data_option_all['table'] += 'width:' + do_px_add(table_option_data) + ';';
-            } else if(table_option_name === 'tableheight') {
-                data_option_all['table'] += 'height:' + do_px_add(table_option_data) + ';';
-            } else if(table_option_name === 'tablealign') {
-                if(table_option_data === 'right') {
-                    data_option_all['div'] += 'float:right;';
-                } else if(table_option_data === 'center') {
-                    data_option_all['div'] += 'margin:auto;';
-                    data_option_all['table'] += 'margin:auto;';
-                }
-            } else if(table_option_name === 'tabletextalign') {
-                data_option_all['table'] += 'text-align:' + table_option_data + ';';
-            } else if(table_option_name === 'tablecolor') {
-                data_option_all['table'] += 'color:' + do_darkmode_split(table_option_data) + ';';
-            } else if(table_option_name === 'tablebordercolor') {
-                data_option_all['table'] += 'border:2px solid ' + do_darkmode_split(table_option_data) + ';';
-            } else if(table_option_name === 'rowbgcolor') {
-                // tr
-                data_option_all['tr'] += 'background:' + do_darkmode_split(table_option_data) + ';';
-            } else if(table_option_name === 'rowtextalign') {
-                data_option_all['tr'] += 'text-align:' + table_option_data + ';';
-            } else if(table_option_name === 'rowcolor') {
-                data_option_all['tr'] += 'color:' + do_darkmode_split(table_option_data) + ';';
-            } else if(table_option_name === 'colcolor') {
-                // col
-                data_option_all['col'] += 'color:' + do_darkmode_split(table_option_data) + ';';
-            } else if(table_option_name === 'colbgcolor') {
-                data_option_all['col'] += 'background:' + do_darkmode_split(table_option_data) + ';';
-            } else if(table_option_name === 'bgcolor') {
-                // td
-                data_option_all['td'] += 'background:' + do_darkmode_split(table_option_data) + ';';
-            } else if(table_option_name === 'color') {
-                data_option_all['td'] += 'color:' + do_darkmode_split(table_option_data) + ';';
-            } else if(table_option_name === 'width') {
-                data_option_all['td'] += 'width:' + do_px_add(table_option_data) + ';';
-            } else if(table_option_name === 'height') {
-                data_option_all['td'] += 'height:' + do_px_add(table_option_data) + ';';
-            } else {
-                no_option = '<lt>' + data_option + '<gt>';
-            }
-        } else {
-            if(data_option.match(/^-[0-9]+$/)) {
-                // span
-                data_option_all['colspan'] = data_option.replace('-', '');
-            } else if(data_option.match(/^(\^|v)?\|[0-9]+$/)) {
-                if(data_option[0] === '^') {
-                    data_option_all['td'] += 'vertical-align: top;';
-                } else if(data_option[0] === 'v') {
-                    data_option_all['td'] += 'vertical-align: bottom;';
-                }
-                
-                data_option_all['rowspan'] = data_option.replace(/[^0-9]+/g, '');
-            } else if(
-                data_option === '(' ||
-                data_option === ':' ||
-                data_option === ')'
-            ) {
-                align_auto = 0;
-                
-                // align
-                if(data_option === '(') {
-                    data_option_all['td'] += 'text-align: left;';
-                } else if(data_option === ':') {
-                    data_option_all['td'] += 'text-align: center;';
-                } else {
-                    data_option_all['td'] += 'text-align: right;';
-                }
-                
-                
-            } else {
-                var table_option_data = data_option.replace(/"/g, '')
-                table_option_data = table_option_data.match(/^((?:(?:#(?:[a-zA-Z0-9]{3}){1,2})|\w+)(?:,(?:(?:#(?:[a-zA-Z0-9]{3}){1,2})|\w+))?)/);
-                if(table_option_data) {
-                    data_option_all['td'] += 'background:' + do_darkmode_split(table_option_data[1]) + ';';
-                } else {
-                    no_option = '<lt>' + data_option + '<gt>';
-                }
-            }
-        }
-        
-        data = data.replace(table_option_re, function() { return no_option });
-    }
-    
-    data = data.replace('<lt>', '&lt;');
-    data = data.replace('<gt>', '&gt;');
-    data_option_all['data'] = data;
-    
-    if(align_auto === 1) {
-        if(
-            data_option_all['data'][0] === ' ' &&
-            data_option_all['data'][data_option_all['data'].length - 1] === ' '
-        ) {
-            data_option_all['td'] += 'text-align:center;';
-        } else if(data_option_all['data'][0] === ' ') {
-            data_option_all['td'] += 'text-align:right;';
-        }
-    }
-    
-    data_option_all['data'] = data_option_all['data'].replace(/^ +| +$/g, '');
-    
-    return data_option_all;
-}
-
-function do_onmark_table_render_main(data) {
-    var table_re = /\n((?:(?:(?:(?:\|\|)+)|(?:\|[^|]+\|(?:\|\|)*))\n?(?:(?:(?!\|\|).)+))(?:(?:\|\||\|\|\n|(?:\|\|)+(?!\n)(?:(?:(?!\|\|).)+)\n*)*)\|\|)\n/gs;
-    data = data.replace(table_re, function(x, x_1) {
-        var table_cel_re = /((?:\|\|)+)((?:(?!\|\|).)*)/gs;
-        var table_data = '';
-        var table_data_org = x_1;
-        
-        var table_col = 0;
-        var table_col_data = {};
-        var table_col_count = {};
-        
-        let table_caption_re = /^\|([^|]+)\|/;
-        let table_caption = '';
-        let table_caption_get = table_data_org.match(table_caption_re);
-        if(table_caption_get) {
-            table_caption = '<caption>' + table_caption_get[1] + '</caption>';
-            table_data_org = table_data_org.replace(table_caption_re, '||');
-        }
-            
-        table_data_org = table_data_org.replace(table_cel_re, function(x, x_1, x_2) {
-            if(!table_col_data[table_col]) {
-                table_col_data[table_col] = '';
-            }
-            
-            if(!table_col_count[table_col]) {
-                table_col_count[table_col] = 0;
-            }
-            
-            if(table_col_count[table_col] !== 0) {
-                table_col_count[table_col] -= 1;
-                table_col += 1;
-            }
-
-            var table_data_option = do_onmark_table_render_sub(x_2, table_col_data[table_col]);
-            table_col_data[table_col] = table_data_option['col'];
-            if(table_data_option['colspan'] === '') {
-                table_data_option['colspan'] = String(x_1.length / 2);
-            }
-
-            if(table_data === '') {
-                table_data += '' + 
-                    '<div class="table_safe" style="' + table_data_option['div'] + '">' +
-                        '<table style="' + table_data_option['table'] + '">' +
-                            table_caption +
-                '';
-            }
-
-            if(x_1 === '||' && (x_2 === '\n' || x_2 === '')) {
-                table_data += '</tr>';
-                table_col = 0;
-            } else if(x_2 === '\n' || x_2 === '') {
-                table_data += '</tr><tr></tr>';
-                table_col = 0;
-            } else {
-                if(table_col === 0) {
-                    table_data += '' + 
-                        '<tr style="' + table_data_option['tr'] + '">' +
-                    ''
-                }
-
-                if(table_data_option['rowspan'] !== '') {
-                    table_col_count[table_col] += Number(table_data_option['rowspan']) - 1;
-                }
-                
-                table_data += '' +
-                    '<td     colspan="' + table_data_option['colspan'] + '" ' +
-                            'rowspan="' + table_data_option['rowspan'] + '" ' +
-                            'style="' + table_data_option['col'] + table_data_option['td'] + '">' + 
-                        table_data_option['data'] + 
-                    '</td>' +
-                '';
-                table_col += 1;
-            }
-
-            return '';
-        });
-        
-        if(table_col === 0) {
-            table_data += '</table></div>';
-        } else {
-            table_data += '</tr></table></div>';
-        }
-        
-        return '\n' + table_data + '\n';
-    });
-    
-    return data;
-}
-
-function do_onmark_table_render(data) {
-    data = data.replace(/\n +\|\|/g, '\n||');
-    
-    var wiki_re = /<wiki_s ([^>]+)>((?:(?!<wiki_s |<wiki_e>).)+)<wiki_e>/s;
-    while(1) {
-        if(!data.match(wiki_re)) {
-            break;
-        }
-        
-        data = data.replace(wiki_re, function(x, x_1, x_2) {
-            return '<wiki_s_2 ' + x_1 + '>' + do_onmark_table_render_main(x_2) + '<wiki_e_2>';
-        });
-    }
-    
-    data = do_onmark_table_render_main(data);
-    
-    return data;
-}
-
-function do_onmark_list_sub_render(data) {
-    var quote_re = /\n((?:(?:(?:&gt;)+) ?(?:(?:(?!\n).)*)\n)+)/;
-    var quote_short_re = /((?:&gt;)+) ?((?:(?!\n).)*)\n/g;
-    var quote_leng = 1;
-    while(1) {
-        var quote_data = data.match(quote_re);
-        if(!quote_data) {
-            break;
-        }
-        
-        var quote_end_data = quote_data[1].replace(quote_short_re, function(x, x_1, x_2) {
-            var quote_leng_now = (x_1.length / 4);
-            var quote_data_part_1 = '';
-            var quote_data_part_2 = '';
-            if(quote_leng < quote_leng_now) {
-                var quote_data_part_1 = ('<blockquote><end_point>\n'.repeat(quote_leng_now - quote_leng));
-            } else if(quote_leng > quote_leng_now) {
-                var quote_data_part_1 = ('\n<start_point></blockquote>'.repeat(quote_leng - quote_leng_now));
-            }
-            
-            quote_leng = quote_leng_now;
-            
-            return '' +
-                quote_data_part_1 + 
-                x_2 + '\n'
-                quote_data_part_2 +
-            '';
-        });
-
-        data = data.replace(quote_re, function() {
-            return '' +
-                '\n' +
-                '<blockquote>' + 
-                    '<end_point>\n' +
-                    quote_end_data + 
-                    '\n<start_point>' +
-                '</blockquote>' +
-                '<end_point>\n' +
-           ''
-        });
-    }
-    
-    var list_re = /\n((?:(?:(?: )*)\* ?(?:(?:(?!\n).)+)\n)+)/;
-    var list_short_re = /((?: )*)\* ?((?:(?!\n).)+)\n/g;
-    while(1) {
-        var list_data = data.match(list_re);
-        if(!list_data) {
-            break;
-        }
-        
-        var list_end_data = list_data[1].replace(list_short_re, function(x, x_1, x_2) {
-            var list_leng = x_1.length;
-            
-            list_leng = list_leng > 0 ? list_leng : 1;
-            
-            return '<li style="margin-left: ' + String(list_leng * 20) + 'px">' + x_2 + '</li>';
-        });
-
-        data = data.replace(list_re, function() { return '\n<ul>' + list_end_data + '</ul><end_point>\n' });
-    }
-    
-    return data;
-}
-
-function do_onmark_list_render(data) {    
-    var wiki_re = /<wiki_s_2 ([^>]+)>((?:(?!<wiki_s_2 |<wiki_e_2>).)+)<wiki_e_2>/s;
-    while(1) {
-        if(!data.match(wiki_re)) {
-            break;
-        }
-
-        data = data.replace(wiki_re, function(x, x_1, x_2) {
-            return '<wiki_s_3 ' + x_1 + '>' + x_2.replace(/\n/g, '<t_br>') + '<wiki_e_3>';
-        });
-    }
-    
-    data = do_onmark_list_sub_render(data);
-    
-    var wiki_re = /<wiki_s_3 ([^>]+)>((?:(?!<wiki_s_3 |<wiki_e_3>).)+)<wiki_e_3>/s;
-    while(1) {
-        if(!data.match(wiki_re)) {
-            break;
-        }
-
-        data = data.replace(wiki_re, function(x, x_1, x_2) {
-            return '<wiki_s_4 ' + x_1 + '>' + x_2.replace(/<t_br>/g, '\n') + '<wiki_e_4>';
-        });
-    }
-    
-    data = do_onmark_list_sub_render(data);
-    
-    return data;
-}
-
-function do_onmark_math_render(data, data_js, name_include, data_nowiki) {
-    data = data.replace(/&lt;math&gt;((?:(?!&lt;\/math&gt;).)+)&lt;\/math&gt;/g, '[math($1)]');
-    
-    var i = 0;
-    data = data.replace(/\[math\((((?!\)]).)+)\)]/g, function(x, x_1) {
-        i += 1;
-        
-        data_js += do_math_try_insert(
-            name_include + 'math_' + String(i), 
-            do_js_safe_change(do_xss_change(do_nowiki_change(x_1, data_nowiki, 'math')))
-        );
-        
-        return '<span id="' + name_include + 'math_' + String(i) + '"></span>';
-    });
-    
-    return [data, data_js];
-}
-
-function do_onmark_hr_render(data) {
-    var hr_re = /\n-{4,9}\n/;
-    while(1) {
-        if(!data.match(hr_re)) {
-            break;
-        }
-        
-        data = data.replace(hr_re, '\n<hr><end_point>\n');
-    }
-    
-    return data;
-}
-
-function do_onmark_redirect_render(data, data_js, name_doc) {
-    var redirect_re = /^\n#(?:redirect|넘겨주기) ([^\n]+)/i;
-    var data_redirect = data.match(redirect_re);
-    if(data_redirect) {
-        var link_data_var = do_link_change(data_redirect[1], {}, 1);
-        var link_main = link_data_var[0];
-        var link_sub = link_data_var[1];
-        
-        if(
-            name_include == '' &&
-            window.location.search === '' &&
-            window.location.pathname.match(/\/w\//)
-        ) {
-            window.location.href = '/w_from/' + do_url_change(link_main);
-        }
-        
-        return [
-            '/w_from/' + do_url_change(link_main), 
-            link_sub,
-            data_js, 
-            1
-        ];
-    } else {
-        return [data, data_js, 0];
-    }
-}
-
-function do_onmark_remark_render(data) {
-    data = data.replace(/\n##([^\n]+)/g, '');
-    
-    return data;
-}
-
-// Main
-// var 쓰인 부분 전부 let으로 변경하기 (호이스팅 혼용 방지)
-// 중첩 함수 구조로 개편하기
-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';
-    } else if(test_mode === 'manual') { 
-        var data = '\n' + 
-            doc_data.replace(/\r/g, '') + 
-        '\n';
-    } else {
-        var data = '\n' + (
-``
-        ).replace(/\r/g, '') + '\n';
-    }
-    var data_js = '';
-    var data_backlink = [];
-    var data_nowiki = {};
-        
-    name_doc = do_xss_change(name_doc);
-
-    let xhr = new XMLHttpRequest();
-    xhr.open("GET", "/api/setting/inter_wiki");
-    xhr.send();
-
-    xhr.onreadystatechange = function() {
-        if(this.readyState === 4 && this.status === 200) {
-            data_wiki_set = JSON.parse(this.responseText);
-            let data_wiki_set_inter_wiki = { "inter_wiki" : {}};
-            if(data_wiki_set["inter_wiki"]) {
-                for(let i = 0; i < data_wiki_set["inter_wiki"].length; i++) {
-                    data_wiki_set_inter_wiki["inter_wiki"][
-                        data_wiki_set["inter_wiki"][i][0]
-                    ] = {
-                        "link" : data_wiki_set["inter_wiki"][i][1],
-                        "logo" : data_wiki_set["inter_wiki"][i][2]
-                    }
-                }
-            }
-            
-            let data_var = do_onmark_redirect_render(
-                data, 
-                data_js, 
-                name_doc, 
-                name_include
-            );
-            data = data_var[0];
-            data_js = data_var[1];
-            let passing = data_var[2];
-            
-            if(passing === 1) {
-                if(test_mode === 'normal') {
-                    document.getElementById(name_id).innerHTML = data + '<script>' + data_js + '</script>';
-                    eval(data_js);
-                } else if(test_mode === 'manual') {
-                    return [data, data_js];
-                } else {
-                    console.log([data, data_js]);
-                }
-                
-                return 0;
-            }
-            
-            data = do_onmark_remark_render(data);
-            
-            data_var = do_onmark_nowiki_before_render(
-                data, 
-                data_js, 
-                name_include, 
-                data_nowiki
-            );
-            data = data_var[0];
-            data_js = data_var[1];
-            data_nowiki = data_var[2];
-            
-            data_var = do_onmark_math_render(
-                data, 
-                data_js, 
-                name_include, 
-                data_nowiki
-            );
-            data = data_var[0];
-            data_js = data_var[1];
-        
-            data_var = do_onmark_include_render(
-                data, 
-                data_js, 
-                name_include, 
-                data_nowiki
-            );
-            data = data_var[0];
-            data_js = data_var[1];
-        
-            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];
-        
-            data = do_onmark_text_render(data);
-            data_var = do_onmark_heading_render(
-                data, 
-                data_js, 
-                name_doc, 
-                name_include
-            );
-            data = data_var[0];
-            data_js = data_var[1];
-            
-            data = do_onmark_table_render(data);
-        
-            data_var = do_onmark_link_render(
-                data, 
-                data_js, 
-                name_doc, 
-                name_include,
-                data_nowiki,
-                data_wiki_set_inter_wiki
-            );
-            data = data_var[0];
-            data_js = data_var[1];
-            var data_category = data_var[2];
-        
-            data_var = do_onmark_macro_render(data, data_js);
-            data = data_var[0];
-            data_js = data_var[1];
-            
-            data = do_onmark_list_render(data);
-            data = do_onmark_hr_render(data);
-            data = do_onmark_footnote_render(data, name_include);
-            data = do_onmark_last_render(
-                data, 
-                name_include, 
-                data_category
-            );
-            
-            data_js += '' + 
-                'do_heading_move();\n' + 
-                'get_link_state("' + name_include + '");\n' + 
-                'get_file_state("' + name_include + '");\n' + 
-                'get_heading_name();\n' +
-                'render_html("' + name_include + 'nowiki_html");\n' +
-            ''
-            
-            if(test_mode === 'normal') {
-                document.getElementById(name_id).innerHTML = data + '<script>' + data_js + '</script>';
-                
-                document.getElementById(name_id).style.display = "";
-                document.getElementById(name_id + '_load').style.display = "none";
-                
-                eval(data_js);
-            } else if(test_mode === 'manual') {
-                return [data, data_js];
-            } else {
-                console.log([data, data_js]);
-            }
-        }
-    }
-}

+ 0 - 340
views/main_css/js/render_wiki.js

@@ -1,340 +0,0 @@
-function get_link_state(data) {
-    let data_exter_link = '0';
-    if(document.cookie.match(opennamu_cookie_split_regex('main_css_exter_link'))) {
-        data_exter_link = document.cookie.match(opennamu_cookie_split_regex('main_css_exter_link'))[1];
-    }
-    
-    var link_list = [];
-    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.id !== 'inside' && 
-            data_class.id !== 'in_doc_link'
-        ) {            
-            link_list.push(data_class.title);
-            
-            if(!link_list_2[data_class.title]) {
-                link_list_2[data_class.title] = [i];
-            } else {
-                link_list_2[data_class.title].push(i);
-            }
-        } else if(
-            data_exter_link === '1' && 
-            (
-                data_class.id === 'out_link' ||
-                data_class.id === 'inside'
-            )
-        ) {
-            document.getElementsByClassName(data + 'link_finder')[i].target = '_self';
-        }
-    }
-    
-    var data_form = new FormData();
-    data_form.append('title_list', JSON.stringify(link_list));
-    
-    var xhr = new XMLHttpRequest();
-    xhr.open("POST", "/api/w/test/doc_tool/exist");
-    xhr.send(data_form);
-
-    xhr.onreadystatechange = function() {
-        if(this.readyState === 4 && this.status === 200) {
-            var data_xhr = JSON.parse(this.responseText);
-            for(var key in link_list_2) {
-                if(!data_xhr[key]) {
-                    for(var key_2 in link_list_2[key]) {
-                        document.getElementsByClassName(data + 'link_finder')[link_list_2[key][key_2]].id = "not_thing";
-                    }
-                }
-            }
-        }
-    }
-}
-
-function get_heading_name() {
-    let heading_name = document.getElementsByClassName('render_heading_text');
-    for(let i = 0; i < heading_name.length; i++) {
-        heading_name[i].id = heading_name[i].innerText.replace(/^([0-9]+\.)+ /, '').replace(/ ✎ ⊖$/, '');
-    }
-}
-
-function do_heading_move() {
-    let data_url_v = window.location.hash.replace(/^#/, '');
-    if(data_url_v !== '') {
-        if(document.getElementById(data_url_v)) {
-            document.getElementById(data_url_v).focus();
-        }
-    }
-}
-
-function load_image_link(data, data_type = 0) {
-    let data_end = '';
-    data_end = '' +
-        '<img   style="' + data.getAttribute('under_style') + '" ' + 
-                'alt="' + data.getAttribute('under_alt') + '" ' + 
-                'src="' + data.getAttribute('under_src') + '">' +
-    '';
-    
-    if(data_type === 0) {
-        data.innerHTML = data_end;
-    } else {
-        return data_end;
-    }
-}
-
-function get_file_state_extermal(data, data_exter) {
-    if(document.cookie.match(opennamu_cookie_split_regex('main_css_image_set'))) {
-        var data_image_set = document.cookie.match(opennamu_cookie_split_regex('main_css_image_set'))[1];
-    } else {
-        var data_image_set = '0';
-    }
-    
-    var data_class = document.getElementsByClassName(data + 'file_finder');
-    for(var key in data_exter) {
-        var key = data_exter[key];
-        
-        if(data_image_set === '1') {
-            document.getElementsByClassName(data + 'file_finder')[key].innerHTML = '' +
-                '<a href="' + data_class[key].getAttribute('under_src') + '" ' +
-                    'title="' + data_class[key].getAttribute('under_src') + '">' + 
-                    '(External image link)' + 
-                '</a>' +
-            '';
-        } else if(data_image_set === '2') {
-            document.getElementsByClassName(data + 'file_finder')[key].innerHTML = '' +
-                '<a href="javascript:void(0);" ' +
-                    'onclick="load_image_link(this); this.onclick = \'\';" ' + 
-                    'under_style="' + data_class[key].getAttribute('under_style') + '" ' +
-                    'under_alt="' + data_class[key].getAttribute('under_alt') + '" ' +
-                    'under_src="' + data_class[key].getAttribute('under_src') + '" ' +
-                    'title="' + data_class[key].getAttribute('under_src') + '">' + 
-                    '(External image load)' + 
-                '</a>' +
-            '';
-        } else {
-            document.getElementsByClassName(data + 'file_finder')[key].innerHTML = '' +
-                load_image_link(data_class[key], 1) +
-            '';
-        }
-    }
-}
-
-function get_file_state_intermal(data, data_inter) {
-    var data_dict = {};
-    var data_list = [];
-    for(var key in data_inter) {
-        var data_class = document.getElementsByClassName(data + 'file_finder')[data_inter[key]];
-    
-        var file_org = data_class.getAttribute('under_alt');
-        var file_type = file_org.split('.');
-        var file_name = file_type.slice(0, file_type.length - 1).join('.');
-        file_type = file_type[file_type.length - 1];
-        
-        if(!data_dict[file_org]) {
-            data_dict[file_org] = {};
-        }
-        
-        data_dict[file_org]['file_name'] = file_name;
-        data_dict[file_org]['file_type'] = file_type;
-        
-        data_list.push(file_name);
-        
-        if(!data_dict[file_org]['list']) {
-            data_dict[file_org]['list'] = [data_inter[key]];
-        } else {
-            data_dict[file_org]['list'].push(data_inter[key]);
-        }
-    }
-    
-    if(document.cookie.match(opennamu_cookie_split_regex('main_css_image_set'))) {
-        var data_image_set = document.cookie.match(opennamu_cookie_split_regex('main_css_image_set'))[1];
-    } else {
-        var data_image_set = '0';
-    }
-    
-    var data_form = new FormData();
-    data_form.append('title_list', JSON.stringify(data_list));
-
-    var xhr = new XMLHttpRequest();
-    xhr.open("POST", '/api/sha224/test');
-    xhr.send(data_form);
-
-    xhr.onreadystatechange = function() {
-        if(this.readyState === 4 && this.status === 200) {
-            var file_sha224 = JSON.parse(this.responseText);
-            var data_list_2 = [];
-            for(var key in data_dict) {
-                data_dict[key]['file_sha224'] = file_sha224[data_dict[key]['file_name']]
-
-                data_list_2.push(data_dict[key]['file_sha224'] + '.' + data_dict[key]['file_type'])
-            }
-            
-            var data_form_2 = new FormData();
-            data_form_2.append('title_list', JSON.stringify(data_list_2));
-            
-            var xhr_2 = new XMLHttpRequest();
-            xhr_2.open("POST", '/api/image/test');
-            xhr_2.send(data_form_2);
-
-            xhr_2.onreadystatechange = function() {
-                if(this.readyState === 4 && this.status === 200) {
-                    var file_data = JSON.parse(this.responseText);
-                    var data_class = document.getElementsByClassName(data + 'file_finder');
-                    for(var key_3 in data_dict) {
-                        if(!file_data[data_dict[key_3]['file_sha224'] + '.' + data_dict[key_3]['file_type']]) {
-                            for(var key_4 in data_dict[key_3]['list']) {
-                                var key_4 = data_dict[key_3]['list'][key_4];
-                                document.getElementsByClassName(data + 'file_finder')[key_4].innerHTML = '' +
-                                    '<a href="' + data_class[key_4].getAttribute('under_href') + '" ' + 
-                                        'id="not_thing">' +
-                                        '(' + data_class[key_4].getAttribute('under_alt') + ')' +
-                                    '</a>' +
-                                '';
-                            }
-                        } else {
-                            if(data_image_set === '1') {
-                                for(var key_4 in data_dict[key_3]['list']) {
-                                    var key_4 = data_dict[key_3]['list'][key_4];
-                                    document.getElementsByClassName(data + 'file_finder')[key_4].innerHTML = '' +
-                                        '<a href="/image/' + data_dict[key_3]['file_sha224'] + '.' + data_dict[key_3]['file_type'] + '">' +
-                                            '(' + data_class[key_4].getAttribute('under_alt') + ')' +
-                                        '</a>' +
-                                    '';
-                                }
-                            } else if(data_image_set === '2') {
-                                for(var key_4 in data_dict[key_3]['list']) {
-                                    var key_4 = data_dict[key_3]['list'][key_4];
-                                    document.getElementsByClassName(data + 'file_finder')[key_4].innerHTML = '' +
-                                        '<a href="javascript:void(0);" ' +
-                                            'onclick="load_image_link(this); this.onclick = \'\';" ' + 
-                                            'under_style="' + data_class[key_4].getAttribute('under_style') + '" ' +
-                                            'under_alt="' + data_class[key_4].getAttribute('under_alt') + '" ' +
-                                            'under_src="/image/' + data_dict[key_3]['file_sha224'] + '.' + data_dict[key_3]['file_type'] + '">' + 
-                                            '(' + data_class[key_4].getAttribute('under_alt') + ' GET)' +
-                                        '</a>' +
-                                    '';
-                                }
-                            } else {
-                                for(var key_4 in data_dict[key_3]['list']) {
-                                    var key_4 = data_dict[key_3]['list'][key_4];
-                                    document.getElementsByClassName(data + 'file_finder')[key_4].innerHTML = '' +
-                                        '<img   style="' + data_class[key_4].getAttribute('under_style') + ';cursor: pointer;" ' + 
-                                                'onclick="window.location.href=\'/w/file:' + data_class[key_4].getAttribute('under_src') + '\';"' +
-                                                'alt="' + data_class[key_4].getAttribute('under_alt') + '" ' + 
-                                                'src="/image/' + data_dict[key_3]['file_sha224'] + '.' + data_dict[key_3]['file_type'] + '">' +
-                                    '';
-                                }
-                            }
-                        }   
-                    }
-                }
-            }
-        }
-    }
-}
-
-function get_file_state(data, i = 0) {
-    var data_exter = [];
-    var data_inter = [];
-    for(var i = 0; document.getElementsByClassName(data + 'file_finder')[i]; i++) {
-        var data_class = document.getElementsByClassName(data + 'file_finder')[i];
-        if(data_class.getAttribute('under_href') === 'out_link') {
-            data_exter.push(i);
-        } else {
-            data_inter.push(i);
-        }
-    }
-    
-    get_file_state_extermal(data, data_exter);
-    get_file_state_intermal(data, data_inter);
-}
-
-function load_include(name_doc, name_ob, data_include, name_org = '') {
-    var data_form = new FormData();
-    data_form.append('include_list', JSON.stringify(data_include));
-    data_form.append('name_include', name_ob);
-    data_form.append('name_org', name_org);
-    
-    var xhr = new XMLHttpRequest();
-    xhr.open("POST", "/api/w/" + encodeURI(name_doc) + "/doc_tool/include");
-    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].id = "not_thing";
-            } else {
-                var data_load = JSON.parse(this.responseText);
-                document.getElementById(name_ob).innerHTML = data_load['data'];
-                eval(data_load['js_data']);
-            }
-        }
-    }
-}
-
-function page_count() {
-    var url = "/api/title_index";
-
-    var xhr = new XMLHttpRequest();
-    xhr.open("GET", url);
-    xhr.send();
-
-    xhr.onreadystatechange = function() {
-        if(this.readyState === 4 && this.status === 200) {
-            var i = 0;
-            while(document.getElementsByClassName('all_page_count')[i]) {
-                document.getElementsByClassName('all_page_count')[i].innerHTML = JSON.parse(this.responseText)['count'];
-                
-                i += 1;
-            }
-        }
-    }
-}
-
-function do_open_folding(data, element = '') {
-    var fol = document.getElementById(data);
-    if(fol.style.display === '' || (fol.style.display === 'inline-block' || fol.style.display === 'block')) {
-        document.getElementById(data).style.display = 'none';
-    } else {
-        document.getElementById(data).style.display = 'block';
-    }
-    
-    if(element != '') {
-        var fol_data = element.innerHTML;
-        if(fol_data != '⊖') {
-            element.innerHTML = '⊖';
-        } else {
-            element.innerHTML = '⊕';
-        }
-    }
-}
-
-function do_open_foot(front_data, name, num = 0) {    
-    if(
-        document.cookie.match(opennamu_cookie_split_regex('main_css_footnote_set')) &&
-        document.cookie.match(opennamu_cookie_split_regex('main_css_footnote_set'))[1] === '1'
-    ) {
-        if(num === 1) {
-            document.getElementById(front_data + 'r' + name).focus();
-        } else {
-            var get_data = document.getElementById(front_data + name).innerHTML;
-            var org_data = document.getElementById(front_data + 'd' + name).innerHTML;
-            if(org_data === '') {
-                document.getElementById(front_data + 'd' + name).innerHTML = '' +
-                    '<a href="#' + front_data + 'c' + name + '">(Go)</a> ' + get_data +
-                '';
-                document.getElementById(front_data + 'd' + name).className = 'spead_footnote';
-            } else {
-                document.getElementById(front_data + 'd' + name).innerHTML = '';
-                document.getElementById(front_data + 'd' + name).className = '';
-            }
-        }
-    } else {
-        document.getElementById(front_data + 'r' + name).style.color = 'red';
-        document.getElementById(front_data + 'c' + name).style.color = (num === 1 ? 'inherit' : 'red');
-        document.getElementById(front_data + (num === 1 ? 'r' : 'c') + name).focus();
-    }
-}