Ver Fonte

Merge pull request #1070 from 2du/dev

Dev
잉여개발기 (SPDV) há 5 anos atrás
pai
commit
554e2faee2

+ 10 - 7
route/edit.py

@@ -184,25 +184,27 @@ def edit_2(conn, name):
                         href="https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.20.0/min/vs/editor/editor.main.min.css">
                 <script src="https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.20.0/min/vs/loader.min.js"></script>
             '''
+            
+            if flask.request.cookies.get('main_css_darkmode', '0') == '1':
+                monaco_thema = 'vs-dark'
+            else:
+                monaco_thema = ''
+            
             add_script = '''
                 require.config({ paths: { 'vs': 'https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.20.0/min/vs' }});
                 require(["vs/editor/editor.main"], function () {
                     window.editor = monaco.editor.create(document.getElementById('monaco_editor'), {
                         value: document.getElementById('content').value,
                         language: 'plaintext',
-                        theme: 'vs-dark'
+                        theme: \'''' + monaco_thema + '''\'
                     });
                 });
-
-                function monaco_to_content() {
-                    document.getElementById('content').innerHTML = window.editor.getValue();
-                }
             '''
         else:
             editor_display = ''
             monaco_display = 'style="display: none;"'
             add_get_file = ''
-            add_script = 'function monaco_to_content() {}'
+            add_script = ''
 
         return easy_minify(flask.render_template(skin_check(), 
             imp = [name, wiki_set(), custom(), other2(['(' + load_lang('edit') + ')', 0])],
@@ -224,7 +226,8 @@ def edit_2(conn, name):
                                 name="content">''' + html.escape(data) + '''</textarea>
                     <hr class="main_hr">
                     <input placeholder="''' + load_lang('why') + '''" name="send" type="text">
-                    <input id="origin" name="ver" value="''' + doc_ver + '''">
+                    <textarea style="display: none;" id="origin">''' + html.escape(data) + '''</textarea>
+                    <input style="display: none;" name="ver" value="''' + doc_ver + '''">
                     <hr class="main_hr">
                     ''' + captcha_get() + ip_warring() + cccb_text + '''
                     <button id="save"

+ 1 - 1
route/login_register.py

@@ -122,7 +122,7 @@ def login_register_2(conn):
                     ''' + approval_question + '''
                     ''' + captcha_get() + '''
                     <button type="submit">''' + load_lang('save') + '''</button>
-                    ''' + http_warrin() + '''
+                    ''' + http_warring() + '''
                 </form>
             ''',
             menu = [['user', load_lang('return')]]

+ 1 - 1
route/tool/func.py

@@ -578,7 +578,7 @@ def next_fix(link, num, page, end = 50):
 
 def other2(data):
     global req_list
-    main_css_ver = '59'
+    main_css_ver = '60'
     data += ['' for _ in range(0, 3 - len(data))]
 
     if req_list == '':

+ 1 - 1
route/tool/mark.py

@@ -60,7 +60,7 @@ def render_do(title, data, num, include):
         include = (include + '_') if include else ''
         data = [
             '<div id="' + include + 'render_contect">' + html.escape(data) + '</div>', 
-            'do_onmark_render("' + include + 'render_contect");',
+            'do_onmark_render(0, "' + include + 'render_contect");',
             []
         ]
     elif rep_data[0][0] == 'raw':

+ 30 - 25
route/user_setting.py

@@ -11,30 +11,32 @@ def user_setting_2(conn, server_init):
 
     if ip_or_user(ip) == 0:
         if flask.request.method == 'POST':
-            pass_list = ['2fa']
-            auto_list = ['skin', 'lang'] + pass_list + ['2fa_pw', '2fa_pw_encode']
-
+            auto_list = [
+                ['skin', flask.request.form.get('skin', '')], 
+                ['lang', flask.request.form.get('lang', '')]
+            ]
+                
+            twofa_turn_on = 0 
+            twofa_on = flask.request.form.get('2fa', '')
+            if twofa_on != '':
+                twofa_turn_on = 1
+                twofa_pw = flask.request.form.get('2fa_pw', '')
+                if twofa_pw != '':
+                    twofa_pw = pw_encode(twofa_pw)
+                    curs.execute(db_change("select encode from user where id = ?"), [ip])
+                    twofa_encode = curs.fetchall()[0][0]
+                    auto_list += [['2fa', 'on'], ['2fa_pw', twofa_pw], ['2fa_pw_encode', twofa_encode]]
+                else:
+                    auto_list += [['2fa', 'on']]
+            else:
+                auto_list += [['2fa', '']]
+                
             for auto_data in auto_list:
-                if auto_data == '2fa_pw':
-                    if flask.request.form.get('2fa_pw', '') != '':
-                        get_data = pw_encode(flask.request.form.get(auto_data, ''))
-                    else:
-                        get_data = ''
-                elif auto_data == '2fa_pw_encode':
-                    if flask.request.form.get('2fa_pw', '') != '':
-                        curs.execute(db_change("select encode from user where id = ?"), [ip])
-                        get_data = curs.fetchall()[0][0]
-                    else:
-                        get_data = ''
+                curs.execute(db_change('select data from user_set where name = ? and id = ?'), [auto_data[0], ip])
+                if curs.fetchall():
+                    curs.execute(db_change("update user_set set data = ? where name = ? and id = ?"), [auto_data[1], auto_data[0], ip])
                 else:
-                    get_data = flask.request.form.get(auto_data, '')
-
-                if auto_data in pass_list or get_data != '':
-                    curs.execute(db_change('select data from user_set where name = ? and id = ?'), [auto_data, ip])
-                    if curs.fetchall():
-                        curs.execute(db_change("update user_set set data = ? where name = ? and id = ?"), [get_data, auto_data, ip])
-                    else:
-                        curs.execute(db_change("insert into user_set (name, id, data) values (?, ?, ?)"), [auto_data, ip, get_data])
+                    curs.execute(db_change("insert into user_set (name, id, data) values (?, ?, ?)"), [auto_data[0], ip, auto_data[1]])
 
             conn.commit()
 
@@ -85,12 +87,15 @@ def user_setting_2(conn, server_init):
                         <hr class="main_hr">
                         <select name="lang">''' + div3 + '''</select>
                         <h2>''' + load_lang('2fa') + '''</h2>
-                        <input type="checkbox" name="2fa" value="on" ''' + fa_data + '''> ''' + load_lang('on') + '''
-                        <hr class="main_hr">
-                        <input type="password" name="2fa_pw" placeholder="''' + fa_data_pw + '''">
+                        <input type="checkbox" id="twofa_check_input" onclick="do_twofa_check(0);" name="2fa" value="on" ''' + fa_data + '''> ''' + load_lang('on') + '''
+                        <div id="fa_plus_content">
+                            <hr class="main_hr">
+                            <input type="password" name="2fa_pw" placeholder="''' + fa_data_pw + '''">
+                        </div>
                         <hr class="main_hr">
                         <button type="submit">''' + load_lang('save') + '''</button>
                         ''' + http_warring() + '''
+                        <script>do_twofa_check(1);</script>
                     </form>
                 ''',
                 menu = [['user', load_lang('return')]]

+ 1 - 1
version.json

@@ -1,6 +1,6 @@
 {
     "beta" : {
-        "r_ver" : "v3.2.0-stable-13 (beta-50) (dev-2021-02-15-01)",
+        "r_ver" : "v3.2.0-stable-13 (beta-53) (dev-2021-03-01-01)",
         "c_ver" : "3203400",
         "s_ver" : "11"
     }

+ 5 - 8
views/main_css/css/main.css

@@ -173,14 +173,11 @@ body {
 
 @media (max-width: 768px) {
     table {
-    min-width: 100%;
-}
- .table_safe {
-    min-width: 100%;
-}
-}
-#origin {
-    display: none;
+        min-width: 100%;
+    }
+    .table_safe {
+        min-width: 100%;
+    }
 }
 
 .all_in_data {

+ 8 - 0
views/main_css/js/load_editor.js

@@ -16,9 +16,17 @@ function do_insert_data(name, data) {
     }
 }
 
+function monaco_to_content() {
+    try {
+        document.getElementById('content').innerHTML = window.editor.getValue();
+    } catch(e) {}
+}
+
 function do_not_out() {
     window.addEventListener('DOMContentLoaded', function() {
         window.onbeforeunload = function() {
+            monaco_to_content();
+            
             data = document.getElementById('content').value;
             origin = document.getElementById('origin').value;
             if(data !== origin) {

+ 2 - 0
views/main_css/js/load_namumark.js

@@ -127,10 +127,12 @@ function load_include(title, name, p_data) {
     xhr.open("GET", url);
     xhr.send();
 
+    console.log(url);
     xhr.onreadystatechange = function() {
         if(this.readyState === 4 && this.status === 200) {
             if(this.responseText === "{}\n") {
                 document.getElementById(name).innerHTML = "";
+                document.getElementsByClassName(name)[0].href = "/w/" + do_url_change(title); 
                 document.getElementsByClassName(name)[0].id = "not_thing";
             } else {
                 var o_p_data = JSON.parse(this.responseText);

+ 200 - 45
views/main_css/js/load_onmark_render.js

@@ -3,6 +3,47 @@ function do_url_change(data) {
     return encodeURIComponent(data);
 }
 
+function do_link_change(data, data_nowiki, no_change = 0) {
+    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]) : '';
+    
+    return [link_main, link_sub];
+}
+
+function do_js_safe_change(data) {
+    data = data.replace(/\\/g, '\\\\');
+    data = data.replace(/"/g, '\\"');
+    
+    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_return_date() {
     var today_data = new Date();
 
@@ -16,6 +57,14 @@ function do_return_date() {
     '';
 }
 
+function do_xss_change(data) {
+    data = data.replace(/&lt;/g, '<');
+    data = data.replace(/&gt;/g, '>');
+    data = data.replace(/&amp;/g, '&');
+    
+    return data;
+}
+
 // Sub
 function do_onmark_text_render(data) {    
     data = data.replace(/'''((?:(?!''').)+)'''/g, '<b>$1</b>');
@@ -30,9 +79,9 @@ function do_onmark_text_render(data) {
 }
 
 function do_onmark_heading_render(data) {
-    var heading_re = /<br>(={1,6}) ?([^=]+) ?={1,6}<br>/;
+    var heading_re = /\n(={1,6}) ?([^=]+) ?={1,6}\n/;
     var heading_level_all = [0, 0, 0, 0, 0, 0];
-    var toc_data = '<div id="toc"><div id="toc_title">TOC</div><br>';
+    var toc_data = '<div id="toc"><div id="toc_title">TOC</div>\n';
     while(1) {        
         var heading_data = data.match(heading_re);
         if(!heading_data) {
@@ -68,33 +117,52 @@ function do_onmark_heading_render(data) {
                     heading_level_string + ' ' +
                 '</a>' + heading_data[2] +
             '</span>' +
-            '<br>' +
+            '\n' +
         ''
         data = data.replace(heading_re, 
             '<h' + heading_level + ' id="s-' + heading_level_string_no_end + '">' + 
                 '<a href="#toc">' + heading_level_string + '</a> ' + heading_data[2] + 
             '</h' + heading_level + '>' +
-            '<br>'
+            '\n'
        );
     }
     
-    data = data.replace(/(<\/h[0-9]>)<br>/g, '$1');
     data = data.replace(/\[(?:toc|목차)\]/g, toc_data + '</div>');
     
     return data;
 }
 
-function do_onmark_link_render(data, data_js, name_doc, name_include) {
-    var link_num = 0;
+function do_onmark_link_render(data, data_js, name_doc, name_include, data_nowiki) {
+    var num_link = 0;
+    var category_data = '';
+    var category_re = /^(분류|category):/i;
+    var file_re = /^(파일|file):/i;
     data = data.replace(/\[\[(((?!\]\]).)+)\]\]/g, 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] : '';
         
-        link_num += 1;
-        var link_num_str = String(link_num - 1);
-        
-        if(link_real.match(/^http(s)?:\/\//)) {
+        num_link += 1;
+        var num_link_str = String(num_link - 1);
+        if(link_real.match(file_re)) {
+            var file_name = link_real.replace(file_re, '');
+            console.log(file_name);
+            
+            return '';
+        } else if(link_real.match(category_re)) {
+            var category_link = link_real.replace(category_re, '');
+            
+            category_data = (category_data === '' ? '<div id="cate_all"><div id="cate">Category : ' : category_data);
+            category_data += '' +
+                '<a class="' + name_include + 'link_finder" ' +
+                    'href="/w/category:' + do_url_change(category_link) + '">' +
+                    category_link +
+                '</a> | ' +
+            ''
+            
+            return '';
+        } else if(link_real.match(/^http(s)?:\/\//)) {
             var i = 0;
             while(i < 2) {
                 if(i === 0) {
@@ -104,8 +172,8 @@ function do_onmark_link_render(data, data_js, name_doc, name_include) {
                 }
                 
                 data_js += '' +
-                    'document.getElementsByName("' + name_include + 'set_link_' + link_num_str + '")[0].' + var_link_type + ' = ' + 
-                        '"' + link_real.replace(/"/g, '\\"') + '";' +
+                    'document.getElementsByName("' + name_include + 'set_link_' + num_link_str + '")[0].' + var_link_type + ' = ' + 
+                        '"' + do_js_safe_change(link_real) + '";' +
                     '\n' +
                 '';
                 
@@ -113,22 +181,26 @@ function do_onmark_link_render(data, data_js, name_doc, name_include) {
             }
             
             return  '<a id="out_link" ' +
-                        'name="' + name_include + 'set_link_' + link_num_str + '" ' + 
+                        'name="' + name_include + 'set_link_' + num_link_str + '" ' + 
                         'title=""' +
                         'href="">' + link_out + '</a>';
         } else {
             var i = 0;
             while(i < 2) {
                 if(i === 0) {
+                    var link_data_var = do_link_change(link_real, data_nowiki);
+                    var link_main = link_data_var[0];
+                    var link_sub = link_data_var[1];
+                    
                     var var_link_type = 'href';
-                    var var_link_data = '/w/' + do_url_change(link_real);
+                    var var_link_data = '/w/' + do_url_change(link_main) + link_sub;
                 } else {
                     var var_link_type = 'title';
-                    var var_link_data = link_real.replace(/"/g, '\\"');
+                    var var_link_data = do_js_safe_change(link_real);
                 }
                 
                 data_js += '' +
-                    'document.getElementsByName("' + name_include + 'set_link_' + link_num_str + '")[0].' + var_link_type + ' = ' + 
+                    'document.getElementsByName("' + name_include + 'set_link_' + num_link_str + '")[0].' + var_link_type + ' = ' + 
                         '"' + var_link_data + '";' +
                     '\n' +
                 '';
@@ -137,19 +209,21 @@ function do_onmark_link_render(data, data_js, name_doc, name_include) {
             }
             
             return  '<a class="' + name_include + 'link_finder" ' +
-                        'name="' + name_include + 'set_link_' + link_num_str + '" ' +
+                        'name="' + name_include + 'set_link_' + num_link_str + '" ' +
                         'title="" ' +
                         'href="">' + link_out + '</a>';
         }
     });
     
+    data += (category_data === '' ? '' : (category_data.replace(/\| $/, '') + '</div></div>'));
+    
     return [data, data_js];
 }
 
 function do_onmark_footnote_render(data, name_include) {
     var footnote_end_data = '';
     var footnote_all_data = {};
-    var footnote_re = /(?:\[\*([^ \]]*)(?: ((?:(?!<br>|\]).)+))?\]|\[(footnote|각주)\])/;
+    var footnote_re = /(?:\[\*([^ \]]*)(?: ((?:(?!\]).)+))?\]|\[(footnote|각주)\])/;
     var i = 1;
     while(1) {
         var footnote_data = data.match(footnote_re);
@@ -306,7 +380,7 @@ function do_onmark_middle_render(data, data_js, name_include) {
                 data = data.replace(middle_re, '<span style="font-size: ' + font_size + ';">');
                 middle_stack.push('</span>');
             } else if(middle_data[1] === '#!wiki') {
-                var wiki_re = /{{{#!wiki(?: style=["']([^"']*)["']<br>)?/;
+                var wiki_re = /{{{#!wiki(?: style=["']([^"']*)["']\n)?/;
                 
                 var wiki = data.match(wiki_re);
                 var wiki_style = wiki[1] ? wiki[1] : '';
@@ -318,6 +392,8 @@ function do_onmark_middle_render(data, data_js, name_include) {
                 
                 data = data.replace(middle_re, '<span id="' + name_include + 'render_contect_' + String(html_n) + '">');
                 middle_stack.push('</span>');
+            } else if(middle_data[1] === '#!folding') {
+                                
             } else {
                 data = data.replace(middle_re, '<middle_start>' + middle_data[1]);   
             }
@@ -329,7 +405,7 @@ function do_onmark_middle_render(data, data_js, name_include) {
         middle_stack.pop();
     }
     
-    data = data.replace(/<br><div_wiki_end>/g, '<div_wiki_end>');
+    data = data.replace(/\n<div_wiki_end>/g, '<div_wiki_end>');
     
     data = data.replace(/<middle_start>/g, '{{{');
     data = data.replace(/<middle_end>/g, '}}}');
@@ -342,58 +418,131 @@ function do_onmark_last_render(data) {
     data = data.replace(/<div_wiki_start /g, '<div ');
     data = data.replace(/<div_wiki_end>/g, '</div>');
     
+    // heading_render 마지막 처리
+    data = data.replace(/(<\/h[0-9]>)\n/g, '$1');
+    
+    // list_render 마지막 처리
+    data = data.replace(/(<\/ul>)\n/g, '$1');
+    
     // br 마지막 처리
-    data = data.replace(/^(<br>| )+/, '');
-    data = data.replace(/(<br>| )+$/, '');
+    data = data.replace(/^(\n| )+/, '');
+    data = data.replace(/(\n| )+$/, '');
+    data = data.replace(/\n/g, '<br>');
     
     return data;
 }
 
-function do_onmark_include_render(data, data_js) {
-    var include_re = /\[include\((((?!\)\]).)+)\)\]/;
+function do_onmark_include_render(data, data_js, name_include) {
+    var include_re = /\[include\(((?:(?!\)\]).)+)\)\]/;
+    var i = 0;
     while(1) {
+        i += 1;
+        
         var include_data = data.match(include_re);
         if(!include_data) {
             break;
         }
         
-        data = data.replace(include_re, '');
+        data = data.replace(include_re,
+            '<a id="' + name_include + 'include_link" class="include_' + String(i) + '" href="">(' + include_data[1] + ')</a>' +
+            '<div id="' + name_include + 'include_' + String(i) + '"></div>'
+        );
+        
+        data_js += 'load_include("' + do_js_safe_change(include_data[1]) + '", "' + name_include + 'include_' + String(i) + '", []);\n'
     }
     
     return [data, data_js];
 }
 
-function do_onmark_nowiki_before_render(data, data_js) {
-    return [data, data_js];
+function do_onmark_nowiki_before_render(data, data_js, name_include, data_nowiki, num_nowiki = 0) {
+    data = data.replace(/\\(.)/g, function(x, x_1) {
+        num_nowiki += 1;
+        data_nowiki[name_include + 'nowiki_' + String(num_nowiki)] = x_1;
+        data_js += do_data_try_insert(name_include + 'nowiki_' + String(num_nowiki), do_js_safe_change(x_1));
+        return '<span id="' + name_include + 'nowiki_' + String(num_nowiki) + '"></span>';
+    });
+    
+    return [data, data_js, data_nowiki, num_nowiki];
+}
+
+function do_onmark_table_render(data) {
+    return data;
 }
 
 function do_onmark_list_render(data) {
+    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 = '<ul>' + list_data[1].replace(list_short_re, function(x, x_1, x_2) {
+            return '<li style="margin-left: ' + String(x_1.length * 20) + 'px;">' + x_2 + '</li>';
+        }) + '</ul>';
+
+        data = data.replace(list_re, '\n' + list_end_data + '\n');
+    }
+    
     return data;
 }
 
+function do_onmark_math_render(data, data_js, name_include) {
+    data = data.replace(/<math>((?:(?!<\/math>).)+)<\/math>/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(x_1)));
+        return '<span id="' + name_include + 'math_' + String(i) + '"></span>';
+    });
+    
+    return [data, data_js];
+}
+
 // Main
-function do_onmark_render(name_id, name_include = '', name_doc = '') {
-    var data = '<br>' + document.getElementById(name_id).innerHTML.replace(/\n/g, '<br>') + '<br>';
+function do_onmark_render(test_mode = 1, name_id = '', name_include = '', name_doc = '') {    
+	if(test_mode === 0) {
+        var data = '\n' + document.getElementById(name_id).innerHTML.replace(/\r/g, '') + '\n';
+    } else {
+    	var data = '\n' + (
+            '== namu ==\n' +
+            'test'
+        ) + '\n';
+    }
     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];
+    data_js = data_var[1];
     
-    var var_data = do_onmark_nowiki_before_render(data, data_js, name_include);
-    data = var_data[0];
-    data_js = var_data[1];
+    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];
+    var num_nowiki = data_var[3];
+    console.log(data_js);
     
-    var_data = do_onmark_include_render(data, data_js, name_include);
-    data = var_data[0];
-    data_js = var_data[1];
+    data_var = do_onmark_include_render(data, data_js, name_include);
+    data = data_var[0];
+    data_js = data_var[1];
     
-    var_data = do_onmark_middle_render(data, data_js, name_include);
-    data = var_data[0];
-    data_js = var_data[1];
+    data_var = do_onmark_middle_render(data, data_js, name_include);
+    data = data_var[0];
+    data_js = data_var[1];
     
     data = do_onmark_text_render(data);
     data = do_onmark_heading_render(data);
+    data = do_onmark_table_render(data);
     
-    var_data = do_onmark_link_render(data, data_js, name_doc, name_include);
-    data = var_data[0];
-    data_js = var_data[1];
+    data_var = do_onmark_link_render(data, data_js, name_doc, name_include, data_nowiki);
+    data = data_var[0];
+    data_js = data_var[1];
     
     data = do_onmark_macro_render(data);
     data = do_onmark_list_render(data);
@@ -406,6 +555,12 @@ function do_onmark_render(name_id, name_include = '', name_doc = '') {
     ''
     data_js = 'render_html("' + name_include + 'render_contect");\n' + data_js
     
-    document.getElementById(name_id).innerHTML = data;
-    eval(data_js);
-}
+    if(test_mode === 0) {
+        document.getElementById(name_id).innerHTML = data;
+        eval(data_js);
+    } else {
+    	console.log([data, data_js]);
+    }
+}
+
+// do_onmark_render();

+ 5 - 0
views/main_css/js/load_something.js

@@ -23,4 +23,9 @@ function load_ver() {
             document.getElementById('ver_send').style.display = "list-item";
         }
     }
+}
+
+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";
 }