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

Merge pull request #1081 from 2du/dev

신규 토론 시스템 도입
잉여개발기 (SPDV) 5 лет назад
Родитель
Сommit
803bce3636

+ 9 - 9
route/api_skin_info.py

@@ -36,14 +36,12 @@ def api_skin_info_2(conn, name):
 
                 if "info_link" in json_data:
                     info_link = json_data["info_link"]
-                    get_num = 1
                 elif json_data["name"] in d_link_data:
                     info_link = d_link_data[json_data["name"]]
-                    get_num = 1
                 else:
-                    get_num = 0
+                    info_link = 0
 
-                if get_num == 1:
+                if info_link != 0:
                     try:
                         get_data = urllib.request.urlopen(info_link)
                     except:
@@ -52,12 +50,14 @@ def api_skin_info_2(conn, name):
                     if get_data and get_data.getcode() == 200:
                         try:
                             get_data = json.loads(get_data.read().decode())
-                            if "skin_ver" in get_data:
-                                json_data = {**json_data, **{ "lastest_version" : {
-                                    "skin_ver" : json_data["skin_ver"]
-                                }}}
                         except:
-                            pass
+                            get_data = {}
+                        
+                        if "skin_ver" in get_data:
+                            json_data = {**json_data, **{ "lastest_version" : {
+                                "skin_ver" : get_data["skin_ver"]
+                            }}}
+                        
 
                 a_data = {**a_data, **{ i : json_data }}
 

+ 24 - 96
route/api_topic_sub.py

@@ -18,103 +18,31 @@ def api_topic_sub_2(conn, topic_num):
 
     data = curs.fetchall()
     if data:
-        json_data = {}
+        data_a = {}
         admin = admin_check(3)
 
-        if flask.request.args.get('render', None):
-            all_ip = ip_pas([i[3] for i in data])
-            for i in data:
-                ip = all_ip[i[3]]
-
-                if i[4] != 'O':
-                    t_data_f = i[1]
-                    b_color = 'toron_color'
-                else:
-                    t_data_f = ''
-                    b_color = 'toron_color_not'
-
-                    ip += ' <a href="/admin_log?search=blind%20(code%20' + topic_num + '#' + i[0] + '">(B)</a>'
-
-                    if admin == 1:
-                        ip += ' <a href="/thread/' + topic_num + '/raw/' + i[0] + '">(R)</a>'
-
-                if i[0] == '1':
-                    s_user = i[3]
-                else:
-                    if flask.request.args.get('num', None):
-                        curs.execute(db_change("select ip from topic where code = ? order by id + 0 asc limit 1"), [topic_num])
-                        g_data = curs.fetchall()
-                        if g_data:
-                            s_user = g_data[0][0]
-                        else:
-                            s_user = ''
-
-                if flask.request.args.get('top', None):
-                    t_color = 'toron_color_red'
-                elif i[3] == s_user and i[5] != '1':
-                    t_color = 'toron_color_green'
-                elif i[5] == '1':
-                    t_color = 'toron_color_blue'
-                else:
-                    t_color = 'toron_color'
-
-                if admin == 1 or b_color != 'toron_color_not':
-                    ip += ' <a href="/thread/' + topic_num + '/admin/' + i[0] + '">(' + load_lang('discussion_tool') + ')</a>'
-
-                if t_data_f == '':
-                    t_data_f = '[br]'
-
-                t_data_f = render_set(data = t_data_f, num = 2, include = 'topic_' + i[0], acl = get_acl)
-                t_plus_data = t_data_f[1]
-                t_data_f = t_data_f[0]
-
-                t_data_f = re.sub(
-                    r'&lt;topic_a&gt;((?:(?!&lt;\/topic_a&gt;).)+)&lt;\/topic_a&gt;', 
-                    '<a href="\g<1>">\g<1></a>', 
-                    t_data_f
-                )
-                t_data_f = re.sub(
-                    r'&lt;topic_call&gt;@((?:(?!&lt;\/topic_call&gt;).)+)&lt;\/topic_call&gt;', 
-                    '<a href="/w/user:\g<1>">@\g<1></a>', 
-                    t_data_f
-                )
-
-                all_data = '' + \
-                    '<table id="toron">' + \
-                        '<tbody>' + \
-                            '<tr>' + \
-                               '<td id="' + t_color + '">' + \
-                                    '<a href="javascript:void(0);" id="' + i[0] + '">#' + i[0] + '</a> ' + ip + ' <span style="float: right;">' + i[2] + '</span>' + \
-                                '</td>' + \
-                            '</tr>' + \
-                            '<tr>' + \
-                                '<td id="' + b_color + '">' + \
-                                    '<div id="topic_scroll">' + t_data_f + '</div>' + \
-                                '</td>' + \
-                            '</tr>' + \
-                        '</tbody>' + \
-                    '</table>' + \
-                    '<hr class="main_hr">' + \
-                ''
-
-                json_data[i[0]] = {
-                    "data" : all_data,
-                    "plus_data" : t_plus_data
-                }
-        else:
-            for i in data:
-                if i[4] != 'O' or (i[4] == 'O' and admin == 1):
-                    t_data_f = i[1]
-                else:
-                    t_data_f = '(B)'
-
-                json_data[i[0]] = {
-                    "data" : t_data_f,
-                    "date" : i[2],
-                    "ip" : ip_pas(i[3], 1),
-                    "block" : i[4],
-                }
-
-        return flask.jsonify(json_data)
+        curs.execute(db_change("select ip from topic where code = ? order by id + 0 asc limit 1"), [topic_num])
+        data_f = curs.fetchall()
+        data_f = data_f[0][0] if data_f else ''
+        data_a['data_main'] = {
+            "ip_first" : ip_pas(data_f, 1),
+            "admin" : str(admin)
+        }
+            
+        ip_a = ip_pas([i[3] for i in data])
+        ip_a_2 = ip_pas([i[3] for i in data], 1)
+        for i in data:
+            data_v = i[1] if i[4] != 'O' or admin == 1 else ''
+            data_a[i[0]] = {
+                "data" : data_v,
+                "date" : i[2],
+                "ip" : ip_a_2[i[3]],
+                "blind" : i[4],
+                
+                "ip_pas" : ip_a[i[3]],
+                "data_pas" : render_set(data = data_v, num = 2, include = 'topic_' + i[0], acl = get_acl)
+            }
+
+        return flask.jsonify(data_a)
     else:
         return flask.jsonify({})

+ 5 - 2
route/main_manager.py

@@ -64,11 +64,14 @@ def main_manager_2(conn, num, r_ver):
                 <br>
                 <h2>''' + load_lang('version') + '''</h2>
                 <ul class="inside_ul">
-                    <li><a href="/api/skin_info?all=true">''' + load_lang('skin_info') + '''</a></li>
+                    <li>
+                        <a href="/api/skin_info?all=true">''' + load_lang('skin_info') + '''</a>
+                        <span id="need_skin_update"></span>
+                    </li>
                     <li>''' + load_lang('version') + ' : ' + r_ver + '''</li>
                     <li id="ver_send" style="display: none;">''' + load_lang('lastest') + ''' : </li>
                 </ul>
-                <script>load_ver();</script>
+                <script>load_ver(); do_skin_ver_check();</script>
             ''',
             menu = [['other', load_lang('return')]]
         ))

+ 3 - 3
route/tool/func.py

@@ -586,7 +586,7 @@ def next_fix(link, num, page, end = 50):
 
 def other2(data):
     global req_list
-    main_css_ver = '61'
+    main_css_ver = '77'
     data += ['' for _ in range(0, 3 - len(data))]
 
     if req_list == '':
@@ -1236,8 +1236,8 @@ def edit_filter_do(data):
     return 0
 
 def redirect(data = '/'):
-    return '<script>window.location.href = "' + data.replace('"', '\\"') + '";</script>'
-
+    return flask.redirect(flask.request.host_url[:-1] + data)
+    
 def get_acl_list(type_d = 'normal'):
     if type_d == 'user':
         return ['', 'user', 'all']

+ 1 - 1
route/tool/init.py

@@ -29,7 +29,7 @@ server_set_var = {
         'display' : 'Markup',
         'require' : 'select',
         'default' : 'namumark',
-        'list' : ['namumark', 'markdown', 'custom', 'js_onmark', 'raw']
+        'list' : ['namumark', 'custom', 'js_onmark']
     },
     'encode' : {
         'display' : 'Encryption method',

+ 3 - 8
route/tool/mark.py

@@ -1,5 +1,4 @@
 from .set_mark.namumark import namumark
-from .set_mark.markdown import markdown
 
 from .set_mark.tool import *
 
@@ -52,21 +51,17 @@ def render_do(title, data, num, include):
     rep_data = curs.fetchall()
     if rep_data[0][0] == 'namumark':
         data = namumark(conn, data, title, include)
-    elif rep_data[0][0] == 'markdown':
-        data = markdown(conn, data, title, include)
     elif rep_data[0][0] == 'custom':
         data = custom_mark(conn, data, title, include)
     elif rep_data[0][0] == 'js_onmark':
         include = (include + '_') if include else ''
         data = [
-            '<div id="' + include + 'render_contect">' + html.escape(data) + '</div>', 
-            'do_onmark_render(0, "' + include + 'render_contect");',
+            '<div id="' + include + 'render_content">' + html.escape(data) + '</div>', 
+            'do_onmark_render(0, "' + include + 'render_content");',
             []
         ]
-    elif rep_data[0][0] == 'raw':
-        data = [data, '', []]
     else:
-        data = ['', '', []]
+        data = [data, '', []]
 
     if num == 1:
         if data[2] == []:

+ 0 - 159
route/tool/set_mark/markdown.py

@@ -1,159 +0,0 @@
-from . import tool
-
-import datetime
-import html
-import re
-
-class head_render:
-    def __init__(self):
-        self.head_level = [0, 0, 0, 0, 0, 0]
-        self.toc_data = '' + \
-            '<div id="toc">' + \
-                '<span id="toc_title">TOC</span>' + \
-                '<br>' + \
-                '<br>' + \
-        ''
-        self.toc_num = 0
-
-    def __call__(self, match):
-        head_len_num = len(match[1])
-        head_len = str(head_len_num)
-        head_len_num -= 1
-        head_data = match[2]
-        self.head_level[head_len_num] += 1
-        for i in range(head_len_num + 1, 6):
-            self.head_level[i] = 0
-            
-        self.toc_num += 1
-        toc_num_str = str(self.toc_num)
-        head_level_str_2 = '.'.join([str(i) for i in self.head_level if i != 0])
-        head_level_str = head_level_str_2 + '.'
-
-        self.toc_data += '<a href="#s-' + head_level_str_2 + '">' + head_level_str + '</a> ' + head_data + '<br>'
-        return '<h' + head_len + ' id="s-' + head_level_str_2 + '"><a href="#toc">' + head_level_str + '</a> ' + head_data + '</h' + head_len + '>'
-
-    def get_toc(self):
-        return self.toc_data + '</div>'
-
-class link_render:
-    def __init__(self, plus_data, include_name):
-        self.str_e_link_id = 0
-        self.plus_data = ''
-        self.include_name = include_name
-
-    def __call__(self, match):
-        str_e_link_id = str(self.str_e_link_id)
-        self.str_e_link_id += 1
-
-        if match[1] == '!':    
-            file_name = ''
-            if re.search(r'^http(s)?:\/\/', match[3], flags = re.I):
-                file_src = match[3]
-                file_alt = match[3]
-                exist = '1'
-            else:
-                file_name = re.search(r'^([^.]+)\.([^.]+)$', match[3])
-                if file_name:
-                    file_end = file_name.group(2)
-                    file_name = file_name.group(1)
-                else:
-                    file_name = 'Test'
-                    file_end = 'jpg'
-
-                file_src = '/image/' + tool.sha224_replace(file_name) + '.' + file_end
-                file_alt = 'file:' + file_name + '.' + file_end
-                exist = None
-
-            return '' + \
-                '<span  class="' + self.include_name + 'file_finder" ' + \
-                        'under_alt="' + file_alt + '" ' + \
-                        'under_src="' + file_src + '" ' + \
-                        'under_style="" ' + \
-                        'under_href="' + ("out_link" if exist else '/upload?name=' + tool.url_pas(file_name)) + '">' + \
-                '</span>' + \
-            ''
-        else:
-            if re.search(r'^http(s)?:\/\/', match[3], flags = re.I):
-                self.plus_data += '' + \
-                    'document.getElementsByName("' + self.include_name + 'set_link_' + str_e_link_id + '")[0].href = ' + \
-                        '"' + match[3] + '";' + \
-                    '\n' + \
-                ''
-
-                return '<a  id="out_link" ' + \
-                            'href="" ' + \
-                            'name="' + self.include_name + 'set_link_' + str_e_link_id + '">' + match[2] + '</a>'
-            else:
-                self.plus_data += '' + \
-                    'document.getElementsByName("' + self.include_name + 'set_link_' + str_e_link_id + '")[0].href = ' + \
-                        '"/w/' + tool.url_pas(match[3]) + '";' + \
-                    '\n' + \
-                ''
-                self.plus_data += '' + \
-                    'document.getElementsByName("' + self.include_name + 'set_link_' + str_e_link_id + '")[0].title = ' + \
-                        '"' + match[3] + '";' + \
-                    '\n' + \
-                ''
-
-                return '<a  class="' + self.include_name + 'link_finder" ' + \
-                            'title="" ' + \
-                            'href="" ' + \
-                            'name="' + self.include_name + 'set_link_' + str_e_link_id + '">' + match[2] + '</a>'
-
-    def get_plus_data(self):
-        return self.plus_data
-
-class list_sub_render:
-    def __init__(self):
-        pass
-
-    def __call__(self, match):
-        return '<li style="margin-left: ' + str(len(match[1]) * 20) + 'px;">' + match[2] + '</li>'
-
-class list_render:
-    def __init__(self):
-        pass
-
-    def __call__(self, match):
-        list_sub_r = r'(?:\n( +)\* ([^\n]+))'
-        list_sub_do = list_sub_render()
-        list_data = re.sub(list_sub_r, list_sub_do, match[1])
-
-        return '\n' + list_data
-
-def markdown(conn, data, title, include_name):
-    backlink = []
-    include_name = include_name + '_' if include_name else ''
-    plus_data = '' + \
-        'get_link_state("' + include_name + '");\n' + \
-        'get_file_state("' + include_name + '");\n' + \
-    ''
-
-    data = html.escape(data)
-    data = data.replace('\r\n', '\n')
-    data = '\n' + data
-
-    head_r = r'\n(#{1,6}) ?([^\n]+)'
-    head_do = head_render()
-    data = re.sub(head_r, head_do, data)
-    data = head_do.get_toc() + data
-
-    list_r = r'((?:\n(?: +)\* (?:[^\n]+))+)'
-    list_do = list_render()
-    data = re.sub(list_r, list_do, data)
-
-    link_r = r'(!)?\[((?:(?!\]\().)+)\]\(([^\]]+)\)'
-    link_do = link_render(plus_data, include_name)
-    data = re.sub(link_r, link_do, data)
-    plus_data = link_do.get_plus_data() + plus_data
-
-    data = re.sub(r'\*\*(?P<A>(?:(?!\*\*).)+)\*\*', '<b>\g<A></b>', data)
-    data = re.sub(r'__(?P<A>(?:(?!__).)+)__', '<i>\g<A></i>', data)
-
-    data = re.sub('^(\n| )+', '', data)
-    data = re.sub('(\n| )+$', '', data)
-    data = data.replace('\n', '<br>')
-
-    data = re.sub(r'(?P<A><\/h[0-6]>)<br>', '\g<A>', data)
-    
-    return [data, plus_data, backlink]

+ 1 - 1
route/topic.py

@@ -102,7 +102,7 @@ def topic_2(conn, topic_num):
                 <div id="top_topic"></div>
                 <div id="main_topic"></div>
                 <div id="plus_topic"></div>
-                <script>topic_top_load("''' + topic_num + '''");</script>
+                <script>new_topic_load("''' + topic_num + '''");</script>
                 <a href="/thread/''' + topic_num + '/tool">(' + load_lang('topic_tool') + ''')</a>
                 <hr class="main_hr">
                 <form style="''' + display + '''" method="post">

+ 10 - 14
route/topic_close_list.py

@@ -35,39 +35,35 @@ def topic_close_list_2(conn, name):
 
         plus = '''
             <a href="/topic/''' + url_pas(name) + '?tool=close">(' + load_lang('closed_discussion') + ')</a> <a href="/topic/' + url_pas(name) + '?tool=agree">(' + load_lang('agreed_discussion') + ''')</a>
-            <hr class=\"main_hr\">
+            <hr class="main_hr">
             <form style="''' + display + '" method="post" action="/thread/' + topic_num + '''">
                 <input placeholder="''' + load_lang('discussion_name') + '''" name="title">
-                <hr class=\"main_hr\">
+                <hr class="main_hr">
                 <textarea rows="10" id="content" placeholder="''' + load_lang('content') + '''" name="content"></textarea>
-                <hr class=\"main_hr\">
+                <hr class="main_hr">
                 ''' + captcha_get() + (ip_warring() if display == '' else '') + '''
                 <input style="display: none;" name="topic" value="''' + name + '''">
                 <button type="submit">''' + load_lang('send') + '''</button>
                 <button id="preview" type="button" onclick="load_preview(\'''' + url_pas(name) + '\')">' + load_lang('preview') + '''</button>
             </form>
-            <hr class=\"main_hr\">
+            <hr class="main_hr">
             <div id="see_preview"></div>
         '''
 
         curs.execute(db_change("select code, sub from rd where title = ? and stop != 'O' order by date desc"), [name])
 
-    t_num = 0
     for data in curs.fetchall():
-        t_num += 1
-        t_str_num = str(t_num)
-
-        curs.execute(db_change("select id from topic where code = ? order by date desc limit 1"), [data[0]])
+        curs.execute(db_change("select id from topic where code = ? order by id + 0 desc limit 1"), [data[0]])
         t_data = curs.fetchall()
 
         div += '''
-            <h2><a href="/thread/''' + data[0] + '">' + t_str_num + '. ' + data[1] + '''</a></h2>
-            <div id="topic_pre_''' + t_str_num + '''"></div>
-            <div id="topic_back_pre_''' + t_str_num + '''"></div>
+            <h2><a href="/thread/''' + data[0] + '">' + data[0] + '. ' + data[1] + '''</a></h2>
+            <div id="topic_pre_''' + data[0] + '''"></div>
+            <div id="topic_back_pre_''' + data[0] + '''"></div>
             <script>
-                topic_list_load(''' + data[0] + ', 1, "topic_pre_' + t_str_num + '''");
+                new_topic_load(''' + data[0] + ', "list", "?num=1", "topic_pre_' + data[0] + '''");
                 if(''' + t_data[0][0] + ''' !== 1) {
-                    topic_list_load(''' + data[0] + ', ' + t_data[0][0] + ', "topic_back_pre_' + t_str_num + '''");
+                    new_topic_load(''' + data[0] + ', "list", "?num=' + t_data[0][0] + '", "topic_back_pre_' + data[0] + '''");
                 }
             </script>
         '''

+ 1 - 1
version.json

@@ -1,6 +1,6 @@
 {
     "beta" : {
-        "r_ver" : "v3.2.0-stable-13 (beta-57) (dev-2021-03-16-01)",
+        "r_ver" : "v3.2.0-stable-13 (beta-60) (dev-2021-03-26-01)",
         "c_ver" : "3205500",
         "s_ver" : "11"
     }

+ 1 - 1
views/main_css/file/easter_egg.html

@@ -16,7 +16,7 @@
         'EsnW_hyI-V8', // 디자이어 드라이브
         'es9twrnfZ_Q', // 유심지의 유정천
     ];
-    var get_num = location.search.replace('[^0-9]+', '');
+    var get_num = location.search.replace(/[^0-9]+/g, '');
     if(get_num !== '' && Number(get_num) < random_code.length) {
         var random_num = Number(get_num);
     } else {

+ 40 - 1
views/main_css/js/load_something.js

@@ -25,7 +25,46 @@ function load_ver() {
     }
 }
 
+function do_skin_ver_check() {
+    var url = "/api/skin_info?all=true";
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", url, true);
+    xhr.send(null);
+
+    xhr.onreadystatechange = function() {
+        if(this.readyState === 4 && this.status === 200) {
+            var json_data = JSON.parse(this.responseText);
+            var all_need_update = [];
+            for(var key in json_data) {
+                if(json_data[key]['lastest_version']) {
+                    var new_skin_ver = json_data[key]['lastest_version']['skin_ver'];
+                    var old_skin_ver = json_data[key]['skin_ver'];
+                    var skin_name = json_data[key]['name'];
+                    if(new_skin_ver !== old_skin_ver) {
+                        all_need_update.push(skin_name);
+                    }
+                }
+            }
+            
+            if(all_need_update.length !== 0) {
+                document.getElementById('need_skin_update').innerHTML += ' (' + (all_need_update.join(', ')) + ')';
+            }
+        }
+    }
+}
+
 function do_twofa_check(init = 0) {
     var data_check = document.getElementById('twofa_check_input').checked;
     document.getElementById('fa_plus_content').style.display = data_check === true ? "block" : "none";
-}
+}
+
+function ie_end_support() {
+    if(document.currentScript === undefined) {
+        window.location = 'microsoft-edge:' + window.location;
+        setTimeout(function() {
+            window.location = 'https://go.microsoft.com/fwlink/?linkid=2135547';
+        }, 1);
+    }
+}
+
+ie_end_support();

+ 104 - 109
views/main_css/js/load_topic.js

@@ -1,67 +1,11 @@
-function topic_list_load(topic_num, s_num, where) {
-    var url = "/api/thread/" + String(topic_num) + "?render=1&num=" + String(s_num);
-    var n_data = "";
-
-    var xhr = new XMLHttpRequest();
-    xhr.open("GET", url, true);
-    xhr.send(null);
-
-    xhr.onreadystatechange = function() {
-        if(this.readyState === 4 && this.status === 200) {
-            var t_data = JSON.parse(this.responseText);
-            var t_plus_data = '';
-            
-            for(key in t_data) {
-                n_data += t_data[key]['data'];
-                t_plus_data += t_data[key]['plus_data'];
-            }
-
-            document.getElementById(where).innerHTML = n_data;
-            eval(t_plus_data);
-        }
-    }
-}
-
-function topic_plus_load(topic_num, num) {
-    var test = setInterval(function() {
-        var url = "/api/thread/" + String(topic_num) + "?num=" + num + "&render=1";
-        var n_data = '';
-        var n_num = 1;
-
-        var xhr = new XMLHttpRequest();
-        xhr.open("GET", url, true);
-        xhr.send(null);
-
-        xhr.onreadystatechange = function() {
-            if(this.readyState === 4 && this.status === 200 && this.responseText !== '{}\n') {
-                var t_data = JSON.parse(this.responseText);
-                var t_plus_data = '';
-
-                for(key in t_data) {
-                    n_data += t_data[key]['data'];
-                    n_num = key;
-
-                    t_plus_data += t_data[key]['plus_data'];
-                }
-
-                document.getElementById("plus_topic").innerHTML += n_data;
-                eval(t_plus_data);
-
-                topic_plus_load(topic_num, String(Number(num) + 1));
-                clearInterval(test);
-            }
-        }
-    }, 5000);
-}
-
-function topic_main_load(topic_num, s_num) {
-    if(s_num) {
-        var url = "/api/thread/" + String(topic_num) + "?render=1&num=" + s_num;
+function new_topic_load(topic_num, type_do = 'top', some = '', where = 'top_topic') {
+    if(type_do === 'top') {
+        var url = "/api/thread/" + topic_num + "?top=1";
+    } else if(type_do === 'main') {
+        var url = "/api/thread/" + topic_num;
     } else {
-        var url = "/api/thread/" + String(topic_num) + "?render=1";
+        var url = "/api/thread/" + topic_num + some;
     }
-    var n_data = "";
-    var num = 1;
 
     var xhr = new XMLHttpRequest();
     xhr.open("GET", url, true);
@@ -69,56 +13,107 @@ function topic_main_load(topic_num, s_num) {
 
     xhr.onreadystatechange = function() {
         if(this.readyState === 4 && this.status === 200) {
-            var t_data = JSON.parse(this.responseText);
-            var t_plus_data = '';
-
-            for(var key in t_data) {
-                n_data += t_data[key]['data'];
-                num = key;
-
-                t_plus_data += t_data[key]['plus_data'];
-            }
-
-            document.getElementById('main_topic').innerHTML = n_data;
-            eval(t_plus_data);
-
-            if(window.location.hash) {
-                document.getElementById(window.location.hash.replace(/^#/, '')).focus();
-            }
+            var data_t = JSON.parse(this.responseText);
+            var start = 0;
+            var key_v = '?num=1';
             
-            if(!s_num) {
-                topic_plus_load(topic_num, String(Number(num) + 1));
+            for(var key in data_t) {
+                var data_a = '';
+                if(start === 0) {
+                    var admin = data_t['data_main']['admin'];
+                    var ip_first = data_t['data_main']['ip_first'];
+                
+                    start = 1;
+                }
+                
+                if(key === 'data_main') {
+                    continue;
+                }
+                
+                key_v = '?num=' + String(Number(key) + 1);
+                
+                var color_b = '';
+                var color_t = '';
+                
+                var ip = data_t[key]['ip_pas'];
+                var ip_o = data_t[key]['ip'];
+                var blind = data_t[key]['blind'];
+                var data_i = data_t[key]['data'];
+                
+                if(data_i === '') {
+                    data_i = '<br>';
+                }
+                
+                if(blind === 'O') {
+                    color_b = 'toron_color_not';
+                } else {
+                    color_b = 'toron_color';
+                }
+                
+                if(blind === 'O') {
+                    ip += ' <a href="/admin_log?search=blind%20(code%20' + topic_num + '#' + i[0] + '">(B)</a>';
+                    
+                    if(admin === '1') {
+                        ip += ' <a href="/thread/' + topic_num + '/raw/' + key + '">(R)</a>';
+                    }
+                }
+                
+                if(admin === '1' || blind !== 'O') {
+                    ip += ' <a href="/thread/' + topic_num + '/admin/' + key + '">(T)</a>';
+                }
+                
+                if(type_do === 0) {
+                    color_t = 'toron_color_red';
+                } else if(blind === '1') {
+                    color_t = 'toron_color_blue';
+                } else if(ip_o === ip_first) {
+                    color_t = 'toron_color_green';
+                } else {
+                    color_t = 'toron_color';
+                }
+                
+                data_a += '' + 
+                    '<table id="toron">' + 
+                        '<tr>' + 
+                            '<td id="' + color_t + '">' + 
+                                '<a href="javascript:void(0);" id="' + key + '">#' + key + '</a> ' + 
+                                ip + 
+                                '<span style="float: right;">' + data_t[key]['date'] + '</span>' + 
+                            '</td>' + 
+                        '</tr>' + 
+                        '<tr>' + 
+                            '<td id="' + color_b + '">' + 
+                                '<div id="topic_scroll">' + data_t[key]['data_pas'][0] + '</div>' + 
+                            '</td>' + 
+                        '</tr>' +
+                    '</table>' + 
+                    '<hr class="main_hr">' + 
+                ''
+
+                document.getElementById(where).innerHTML += data_a;
+                eval(data_t[key]['data_pas'][1]);
             }
-        }
-    }
-}
-
-function topic_top_load(topic_num) {
-    var url = "/api/thread/" + String(topic_num) + "?top=1&render=1";
-    var n_data = "";
-    var num = 1;
-
-    var xhr = new XMLHttpRequest();
-    xhr.open("GET", url, true);
-    xhr.send(null);
-
-    xhr.onreadystatechange = function() {
-        if(this.readyState === 4 && this.status === 200) {
-            var t_data = JSON.parse(this.responseText);
-            var t_plus_data = '';
-
-            for(var key in t_data) {
-                n_data += t_data[key]['data'];
-                num = key;
-
-                t_plus_data += t_data[key]['plus_data'];
+            
+            if(type_do === 'top') {
+                new_topic_load(topic_num, 'main', '', 'main_topic');
+            } else if(type_do === 'main') {
+                data_url_v = window.location.href.split('#');
+                if(data_url_v.length !== 0) {
+                    if(document.getElementById(data_url_v[1])) {
+                        document.getElementById(data_url_v[1]).focus();
+                    }
+                }
+                
+                new_topic_load(topic_num, 're', key_v, where);
+            } else if(type_do === 're') {
+                setTimeout(function() {
+                    if(start === 0) {
+                        new_topic_load(topic_num, 're', some, where);
+                    } else {
+                        new_topic_load(topic_num, 're', key_v, where);
+                    }
+                }, 2000);
             }
-
-            document.getElementById('top_topic').innerHTML = n_data;
-            eval(t_plus_data);
-
-            topic_main_load(topic_num, null);
         }
     }
-
 }

+ 0 - 0
views/main_css/js/load_namumark.js → views/main_css/js/render_namumark.js


+ 0 - 2
views/main_css/js/load_onmark_render.js → views/main_css/js/render_onmark.js

@@ -515,7 +515,6 @@ function do_onmark_render(test_mode = 1, name_id = '', name_include = '', name_d
     var data_js = '';
     var data_backlink = [];
     var data_nowiki = {};
-    console.log(data);
     
     var data_var = do_onmark_math_render(data, data_js, name_include);
     data = data_var[0];
@@ -526,7 +525,6 @@ function do_onmark_render(test_mode = 1, name_id = '', name_include = '', name_d
     data_js = data_var[1];
     data_nowiki = data_var[2];
     var num_nowiki = data_var[3];
-    console.log(data_js);
     
     data_var = do_onmark_include_render(data, data_js, name_include);
     data = data_var[0];