Explorar o código

실험적인 시도

잉여개발기 (SPDV) %!s(int64=2) %!d(string=hai) anos
pai
achega
76e430b2ba

+ 105 - 121
route/tool/func.py

@@ -1314,140 +1314,124 @@ def load_skin(data = '', set_n = 0, default = 0):
     return skin_return_data
 
 # Func-markup
-def render_set(doc_name = '', doc_data = '', data_type = 'view', data_in = '', doc_acl = '', markup = ''):
+def render_set(doc_name = '', doc_data = '', data_type = 'view', data_in = '', markup = ''):
     with get_db_connect() as conn:
         curs = conn.cursor()
 
         # data_type in ['view', 'from', 'thread', 'raw', 'api_view', 'api_thread', 'backlink']
         # data_type을 list 형식으로 개편 필요할 듯
-        if doc_name != '':
-            doc_acl = acl_check(doc_name, 'render') if doc_acl == '' else doc_acl
-        else:
-            doc_acl = 0
 
         data_type = 'view' if data_type == '' else data_type
-        doc_data = 0 if doc_data == None else doc_data
+        doc_data = '' if doc_data == None else doc_data
 
         acl_dict = {}
-        acl_dict[doc_name] = doc_acl
-
         ip = ip_check()
-            
-        if doc_acl == 1:
-            return 'HTTP Request 401.3'
-        else:
-            if data_type == 'raw':
-                return doc_data
-            
-            if doc_data != 0:
-                render_lang_data = {
-                    'toc' : load_lang('toc'),
-                    'category' : load_lang('category')
-                }
+        render_lang_data = {
+            'toc' : load_lang('toc'),
+            'category' : load_lang('category')
+        }
 
-                curs.execute(db_change('select data from other where name = "category_text"'))
-                db_data = curs.fetchall()
-                if db_data and db_data[0][0] != '':
-                    render_lang_data['category'] = db_data[0][0]
+        curs.execute(db_change('select data from other where name = "category_text"'))
+        db_data = curs.fetchall()
+        if db_data and db_data[0][0] != '':
+            render_lang_data['category'] = db_data[0][0]
 
-                get_class_render = class_do_render(conn, render_lang_data, markup).do_render(doc_name, doc_data, data_type, data_in)
-                
-                if 'include' in get_class_render[2]:
-                    for_a = 0
-                    while len(get_class_render[2]['include']) > for_a:
-                        include_data = get_class_render[2]['include'][for_a]
-                        if include_data[1] in acl_dict:
-                            acl_result = acl_dict[include_data[1]]
-                        else:
-                            acl_result = acl_check(include_data[1], 'render')
-                            acl_dict[include_data[1]] = acl_result
-
-                        if acl_result == 0:
-                            include_regex = re.compile('<div id="' + include_data[0] + '"><\\/div>')
-                            if re.search(include_regex, get_class_render[0]):
-                                include_data_render = class_do_render(conn, render_lang_data, markup).do_render(include_data[1], include_data[2], data_type, include_data[0] + data_in)
-                                if len(include_data) > 3:
-                                    include_data_render[0] = '<div id="' + include_data[0] + '" ' + include_data[3] + '>' + include_data_render[0] + '</div>'
-                                else:
-                                    include_data_render[0] = '<div id="' + include_data[0] + '">' + include_data_render[0] + '</div>'
-
-                                get_class_render[0] = re.sub(include_regex, include_data_render[0], get_class_render[0])
-                                get_class_render[1] += include_data_render[1]
-                                get_class_render[2]['include'] += include_data_render[2]['include']
-
-                        for_a += 1
-
-                if data_type == 'backlink':
-                    return ''
-
-                get_class_render[0] = '<div class="opennamu_render_complete">' + get_class_render[0] + '</div>'
-
-                font_size_set_data = get_main_skin_set(curs, flask.session, 'main_css_font_size', ip)
-                if font_size_set_data != 'default':
-                    font_size_set_data = number_check(font_size_set_data)
-
-                    get_class_render[0] = '''
-                        <style>
-                            .opennamu_render_complete {
-                                font-size: ''' + font_size_set_data + '''px !important;
-                            }
-                        </style>
-                    ''' + get_class_render[0]
-
-                curs.execute(db_change("select data from other where name = 'namumark_compatible'"))
-                db_data = curs.fetchall()
-                if db_data and db_data[0][0] != '':
-                    get_class_render[0] = '''
-                        <style>
-                            .opennamu_render_complete {
-                                font-size: 15px !important;
-                                line-height: 1.5;
-                            }
-
-                            .opennamu_render_complete td {
-                                padding: 5px 10px !important;
-                            }
-
-                            .opennamu_render_complete summary {
-                                list-style: none !important;
-                                font-weight: bold !important;
-                            }
-                        </style>
-                    ''' + get_class_render[0]
-
-                table_set_data = get_main_skin_set(curs, flask.session, 'main_css_table_scroll', ip)
-                if table_set_data == 'on':
-                    get_class_render[0] = '<style>.table_safe { overflow-x: scroll; white-space: nowrap; }</style>' + get_class_render[0]
-
-                joke_set_data = get_main_skin_set(curs, flask.session, 'main_css_view_joke', ip)
-                if joke_set_data == 'off':
-                    get_class_render[0] = '<style>.opennamu_joke { display: none; }</style>' + get_class_render[0]
-
-                math_set_data = get_main_skin_set(curs, flask.session, 'main_css_math_scroll', ip)
-                if math_set_data == 'on':
-                    get_class_render[0] = '<style>.katex .base { overflow-x: scroll; }</style>' + get_class_render[0]
-
-                transparent_set_data = get_main_skin_set(curs, flask.session, 'main_css_table_transparent', ip)
-                if transparent_set_data == 'on':
-                    get_class_render[0] = '''
-                        <style>
-                            .table_safe td {
-                                background: transparent !important;
-                                color: inherit !important;
-                            }
-                        </style>
-                    ''' + get_class_render[0]
-
-                if data_type == 'api_view' or data_type == 'api_thread':
-                    return [
-                        get_class_render[0], 
-                        get_class_render[1]
-                    ]
+        get_class_render = class_do_render(conn, render_lang_data, markup).do_render(doc_name, doc_data, data_type, data_in)
+        
+        if 'include' in get_class_render[2]:
+            for_a = 0
+            while len(get_class_render[2]['include']) > for_a:
+                include_data = get_class_render[2]['include'][for_a]
+                if include_data[1] in acl_dict:
+                    acl_result = acl_dict[include_data[1]]
                 else:
-                    return get_class_render[0] + '<script>' + get_class_render[1] + '</script>'
-            else:
-                return 'HTTP Request 404'
-            
+                    acl_result = acl_check(include_data[1], 'render')
+                    acl_dict[include_data[1]] = acl_result
+
+                if acl_result == 0:
+                    include_regex = re.compile('<div id="' + include_data[0] + '"><\\/div>')
+                    if re.search(include_regex, get_class_render[0]):
+                        include_data_render = class_do_render(conn, render_lang_data, markup).do_render(include_data[1], include_data[2], data_type, include_data[0] + data_in)
+                        if len(include_data) > 3:
+                            include_data_render[0] = '<div id="' + include_data[0] + '" ' + include_data[3] + '>' + include_data_render[0] + '</div>'
+                        else:
+                            include_data_render[0] = '<div id="' + include_data[0] + '">' + include_data_render[0] + '</div>'
+
+                        get_class_render[0] = re.sub(include_regex, include_data_render[0], get_class_render[0])
+                        get_class_render[1] += include_data_render[1]
+                        get_class_render[2]['include'] += include_data_render[2]['include']
+
+                for_a += 1
+
+        if data_type == 'backlink':
+            return ''
+
+        get_class_render[0] = '<div class="opennamu_render_complete">' + get_class_render[0] + '</div>'
+
+        font_size_set_data = get_main_skin_set(curs, flask.session, 'main_css_font_size', ip)
+        if font_size_set_data != 'default':
+            font_size_set_data = number_check(font_size_set_data)
+
+            get_class_render[0] = '''
+                <style>
+                    .opennamu_render_complete {
+                        font-size: ''' + font_size_set_data + '''px !important;
+                    }
+                </style>
+            ''' + get_class_render[0]
+
+        curs.execute(db_change("select data from other where name = 'namumark_compatible'"))
+        db_data = curs.fetchall()
+        if db_data and db_data[0][0] != '':
+            get_class_render[0] = '''
+                <style>
+                    .opennamu_render_complete {
+                        font-size: 15px !important;
+                        line-height: 1.5;
+                    }
+
+                    .opennamu_render_complete td {
+                        padding: 5px 10px !important;
+                    }
+
+                    .opennamu_render_complete summary {
+                        list-style: none !important;
+                        font-weight: bold !important;
+                    }
+                </style>
+            ''' + get_class_render[0]
+
+        table_set_data = get_main_skin_set(curs, flask.session, 'main_css_table_scroll', ip)
+        if table_set_data == 'on':
+            get_class_render[0] = '<style>.table_safe { overflow-x: scroll; white-space: nowrap; }</style>' + get_class_render[0]
+
+        joke_set_data = get_main_skin_set(curs, flask.session, 'main_css_view_joke', ip)
+        if joke_set_data == 'off':
+            get_class_render[0] = '<style>.opennamu_joke { display: none; }</style>' + get_class_render[0]
+
+        math_set_data = get_main_skin_set(curs, flask.session, 'main_css_math_scroll', ip)
+        if math_set_data == 'on':
+            get_class_render[0] = '<style>.katex .base { overflow-x: scroll; }</style>' + get_class_render[0]
+
+        transparent_set_data = get_main_skin_set(curs, flask.session, 'main_css_table_transparent', ip)
+        if transparent_set_data == 'on':
+            get_class_render[0] = '''
+                <style>
+                    .table_safe td {
+                        background: transparent !important;
+                        color: inherit !important;
+                    }
+                </style>
+            ''' + get_class_render[0]
+
+        if data_type == 'api_view' or data_type == 'api_thread':
+            return [
+                get_class_render[0], 
+                get_class_render[1]
+            ]
+        else:
+            return get_class_render[0] + '<script>' + get_class_render[1] + '</script>'
+        
 def render_simple_set(data):
     # without_DB
 

+ 1 - 1
route/view_raw_document.py

@@ -19,7 +19,7 @@ def view_raw_document(name = '', rev = '', doc_acl = ''):
             <div id="opennamu_preview_area">
                 <textarea id="opennamu_editor_doc_name" style="display: none;">''' + html.escape(name) + '''</textarea>
                 <textarea id="opennamu_editor_rev" style="display: none;">''' + rev_str + '''</textarea>
-                <button id="opennamu_preview_button" type="button" onclick="opennamu_do_editor_preview('raw');">''' + load_lang('preview') + '''</button>
+                <button id="opennamu_preview_button" type="button" onclick="opennamu_view_raw_document_preview();">''' + load_lang('preview') + '''</button>
                 <hr class="main_hr">
                 <textarea readonly id="opennamu_edit_textarea" class="opennamu_textarea_500"></textarea>
                 <script>opennamu_view_raw_document();</script>

+ 12 - 13
route/view_read.py

@@ -160,16 +160,18 @@ def view_read(name = 'Test', do_type = ''):
         else:
             name_view = name
 
-        curs.execute(db_change("select data from data where title = ?"), [name])
-
+        end_data = '''
+            <div id="opennamu_preview_area">
+                <textarea id="opennamu_editor_doc_name" style="display: none;">''' + html.escape(name) + '''</textarea>
+                <textarea readonly id="opennamu_edit_textarea" class="opennamu_textarea_500"></textarea>
+                <script>opennamu_view_raw_document(render = 'do');</script>
+            </div>
+        '''
+
+        curs.execute(db_change("select title from data where title = ?"), [name])
         data = curs.fetchall()
-        end_data = render_set(
-            doc_name = name,
-            doc_data = data[0][0] if data else None,
-            data_type = 'from' if do_type == 'from' else 'view'
-        )
 
-        if end_data == 'HTTP Request 401.3':
+        if acl_check(name, 'render') == 1:
             response_data = 401
 
             curs.execute(db_change('select data from other where name = "error_401"'))
@@ -178,7 +180,7 @@ def view_read(name = 'Test', do_type = ''):
                 end_data = '<h2>' + load_lang('error') + '</h2><ul class="opennamu_ul"><li>' + sql_d[0][0] + '</li></ul>'
             else:
                 end_data = '<h2>' + load_lang('error') + '</h2><ul class="opennamu_ul"><li>' + load_lang('authority_error') + '</li></ul>'
-        elif end_data == 'HTTP Request 404':
+        elif not data:
             response_data = 404
 
             curs.execute(db_change('select data from other where name = "error_404"'))
@@ -188,10 +190,7 @@ def view_read(name = 'Test', do_type = ''):
             else:
                 end_data = '<h2>' + load_lang('error') + '</h2><ul class="opennamu_ul"><li>' + load_lang('decument_404_error') + '</li></ul>'
 
-            curs.execute(db_change('' + \
-                'select ip, date, leng, send, id from history ' + \
-                'where title = ? and hide != "O" order by id + 0 desc limit 3' + \
-            ''), [name])
+            curs.execute(db_change('select ip, date, leng, send, id from history where title = ? and hide != "O" order by id + 0 desc limit 3'), [name])
             sql_d = curs.fetchall()
             if sql_d:
                 end_data += '<h2>' + load_lang('history') + '</h2><ul class="opennamu_ul">'

+ 21 - 0
views/main_css/js/func/func.js

@@ -130,4 +130,25 @@ function opennamu_do_trace_spread() {
             '<style>.opennamu_trace_button { display: none; } .opennamu_trace { white-space: pre-wrap; overflow-x: unset; text-overflow: unset; }</style>' +
         '' + document.getElementsByClassName('opennamu_trace')[0].innerHTML
     }
+}
+
+function opennamu_do_render(to_obj, name, data, do_type = '') {
+    fetch("/api/render/" + (opennamu_do_url_encode(name)), {
+        method : 'POST',
+        headers : { 'Content-Type': 'application/x-www-form-urlencoded' },
+        body : new URLSearchParams({
+            'data': data,
+        })
+    }).then(function(res) {
+        return res.json();
+    }).then(function(text) {
+        if(document.getElementById(to_obj)) {
+            if(text["data"]) {
+                document.getElementById(to_obj).innerHTML = text.data;
+                eval(text.js_data);
+            } else {
+                document.getElementById(to_obj).innerHTML = '';
+            }
+        }
+    });
 }

+ 3 - 19
views/main_css/js/route/editor.js

@@ -230,10 +230,8 @@ function do_monaco_init(monaco_thema) {
     });
 }
 
-function opennamu_do_editor_preview(do_type = 'preview') {
-    if(do_type === 'preview') {
-        do_sync_monaco_and_textarea();
-    }
+function opennamu_do_editor_preview() {
+    do_sync_monaco_and_textarea();
 
     const input = document.querySelector('#opennamu_edit_textarea');
     if(input !== null) {
@@ -244,21 +242,7 @@ function opennamu_do_editor_preview(do_type = 'preview') {
             doc_name = doc_name_input.value;
         }
 
-        fetch("/api/render/" + (opennamu_do_url_encode(doc_name)), {
-            method : 'POST',
-            headers : { 'Content-Type': 'application/x-www-form-urlencoded' },
-            body : new URLSearchParams({
-                'data': input.value,
-            })
-        }).then(function(res) {
-            return res.json();
-        }).then(function(text) {
-            const preview = document.querySelector('#opennamu_preview_area');
-            if(preview !== null) {
-                preview.innerHTML = text.data;
-                eval(text.js_data);
-            }
-        });
+        opennamu_do_render('opennamu_preview_area', doc_name, input.value);
     }
 }
 

+ 19 - 1
views/main_css/js/route/view_raw_document.js

@@ -1,6 +1,6 @@
 "use strict";
 
-function opennamu_view_raw_document() {
+function opennamu_view_raw_document(render = '') {
     let name = "test";
     if(document.getElementById('opennamu_editor_doc_name')) {
         name = document.getElementById('opennamu_editor_doc_name').innerHTML;
@@ -25,6 +25,24 @@ function opennamu_view_raw_document() {
             if(data["data"]) {
                 document.getElementById("opennamu_edit_textarea").value = data["data"];
             }
+
+            if(render === 'do') {
+                opennamu_view_raw_document_preview();
+            }
         }
     });
+}
+
+function opennamu_view_raw_document_preview() {
+    let name = "test";
+    if(document.getElementById('opennamu_editor_doc_name')) {
+        name = document.getElementById('opennamu_editor_doc_name').innerHTML;
+    }
+
+    let data = "";
+    if(document.getElementById('opennamu_edit_textarea')) {
+        data = document.getElementById('opennamu_edit_textarea').value;
+    }
+
+    opennamu_do_render('opennamu_preview_area', name, data);
 }