2du 5 lat temu
rodzic
commit
afbbbfad43

+ 8 - 1
emergency_tool.py

@@ -142,6 +142,7 @@ print('13. Cache data reset')
 print('14. Delete Main <HEAD>')
 print('15. Give owner')
 print('16. Delete 2FA password')
+print('17. Change markup')
 
 print('----')
 print('Select : ', end = '')
@@ -298,7 +299,7 @@ elif what_i_do == '15':
     user_name = input()
 
     curs.execute(db_change("update user set acl = 'owner' where id = ?"), [user_name])
-else:
+elif what_i_do == '16':
     print('----')
     print('User name : ', end = '')
     user_name = input()
@@ -306,6 +307,12 @@ else:
     curs.execute(db_change('select data from user_set where name = "2fa" and id = ?'), [user_name])
     if curs.fetchall():
         curs.execute(db_change("update user_set set data = '' where name = '2fa' and id = ?"), [user_name])
+else:
+    print('----')
+    print('Markup name : ', end = '')
+    markup = input()
+
+    curs.execute(db_change("update other set data = ? where name = 'markup'"), [markup])
 
 if data_db_load == 'Y':
     conn.commit()

+ 1 - 1
route/tool/init.py

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

+ 1 - 1
route/tool/mark.py

@@ -46,7 +46,7 @@ def render_do(doc_name, doc_data, data_type, data_in):
     data_in = None if data_in == '' else data_in
     curs.execute(db_change('select data from other where name = "markup"'))
     rep_data = curs.fetchall()
-    if rep_data[0][0] in ('namumark', 'js_onmark'):
+    if rep_data[0][0] == 'namumark':
         data_in = (data_in + '_') if data_in else ''
         data_end = [
             '<div class="render_content" id="' + data_in + 'render_content">' + html.escape(doc_data) + '</div>', 

+ 3 - 3
views/main_css/js/render_namumark.js

@@ -198,10 +198,10 @@ function do_open_folding(data, element = '') {
     
     if(element != '') {
         var fol_data = element.innerHTML;
-        if(fol_data != '(-)') {
-            element.innerHTML = '(-)';
+        if(fol_data != '') {
+            element.innerHTML = '';
         } else {
-            element.innerHTML = '(+)';
+            element.innerHTML = '';
         }
     }
 }

+ 83 - 22
views/main_css/js/render_onmark.js

@@ -1,3 +1,4 @@
+// 인터위키
 // Tool
 function do_url_change(data) {
     return encodeURIComponent(data);
@@ -31,6 +32,7 @@ function do_link_change(data, data_nowiki, no_change, data_nowiki) {
 function do_js_safe_change(data) {
     data = data.replace(/\\/g, '\\\\');
     data = data.replace(/"/g, '\\"');
+    data = data.replace(/\n/g, '<br>');
     
     return data;
 }
@@ -87,11 +89,14 @@ function do_onmark_text_render(data) {
     return data;
 }
 
-function do_onmark_heading_render(data) {
-    var heading_re = /\n(={1,6}) ?([^=]+) ?={1,6}\n/;
+function do_onmark_heading_render(data, name_doc, name_include) {
+    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>\n';
-    while(1) {        
+    var toc_n = 0;
+    while(1) {
+        toc_n += 1;
+        
         var heading_data = data.match(heading_re);
         if(!heading_data) {
             break;
@@ -119,20 +124,30 @@ function do_onmark_heading_render(data) {
         }
         
         var heading_level_string_no_end = heading_level_string.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>' + heading_data[2] +
+                '</a>' + heading_data[3] +
             '</span>' +
             '\n' +
         ''
         data = data.replace(heading_re, 
             '\n' +
+            (toc_n === 1 ? '' : '</div>') +
             '<h' + heading_level + ' id="s-' + heading_level_string_no_end + '">' + 
-                '<a href="#toc">' + heading_level_string + '</a> ' + heading_data[2] + 
+                '<a href="#toc">' + heading_level_string + '</a> ' + 
+                heading_data[3] + 
+                '<a id="edit_load_' + String(toc_n) + '" ' +
+                    'style="font-size: 70%;"' +
+                    'href="/edit/' + do_url_change(name_doc) + '?section=' + String(toc_n) + '">✎</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') + ';"><toc_end_point>' +
             '\n'
        );
     }
@@ -140,6 +155,7 @@ function do_onmark_heading_render(data) {
     toc_data += '</div>';
     
     data = data.replace(/\[(?:toc|목차)\]/g, toc_data);
+    data += '</div>';
     
     var toc_auto_add = data.match(/\[(?:목차|toc)\(no\)\]/);
     if(toc_auto_add) {
@@ -485,8 +501,8 @@ function do_onmark_middle_render(data, data_js, name_include, data_nowiki, name_
                     data = data.replace(middle_re, '<span id="' + name_include + 'render_contect_' + String(html_n) + '">');
                     middle_stack.push('</span>');
                 } else if(middle_data[1] === '#!folding') {
-                    data = data.replace(middle_re, '<div>');
-                    middle_stack.push('</div>');
+                    data = data.replace(middle_re, '<wiki_start style="">');
+                    middle_stack.push('<wiki_end>');
                 } else {
                     data = data.replace(middle_re, '<nowiki_start>' + middle_data[1]);
                     middle_stack.push('<nowiki_end>');
@@ -533,6 +549,7 @@ function do_onmark_middle_render(data, data_js, name_include, data_nowiki, name_
         wiki_data = do_nowiki_change(wiki_data[1]);
         wiki_data = do_onmark_render('manual', '', name_include + 'wiki_' + String(wiki_n) + '_', name_doc, wiki_data);
         
+        console.log(wiki_n);
         data_js += wiki_data[1];
         data = data.replace(wiki_re, wiki_data[0]);
     }
@@ -546,7 +563,7 @@ function do_onmark_last_render(data) {
     data = data.replace(/<wiki_end>/g, '</div>');
     
     // heading_render 마지막 처리
-    data = data.replace(/(<\/h[0-9]>)\n/g, '$1');
+    data = data.replace(/<toc_end_point>\n?/g, '');
     
     // list_render 마지막 처리
     data = data.replace(/(<\/ul>)\n/g, '$1');
@@ -628,6 +645,7 @@ function do_onmark_table_render_sub(data, data_col) {
     var table_option_re = /&lt;((?:(?!&lt;|&gt;).)+)&gt;/;
     while(1) {
         var no_option = '';
+        var align_auto = 1;
         var data_option = data.match(table_option_re);
         if(!data_option) {
             break;
@@ -637,7 +655,7 @@ function do_onmark_table_render_sub(data, data_col) {
         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(/[^a-zA-Z0-9]/g, '');
+            var table_option_data = data_option_var[1].replace(/"/g, '');
             if(table_option_name === 'tablebgcolor') {
                 // table
                data_option_all['table'] += 'background:' + table_option_data + ';';
@@ -680,23 +698,42 @@ function do_onmark_table_render_sub(data, data_col) {
             } else if(table_option_name === 'height') {
                 data_option_all['td'] += 'height:' + table_option_data + ';';
             } else {
-                data_option_all['td'] += 'background:' + table_option_data + ';';
+                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(/^\|[0-9]+$/)) {
-                data_option_all['rowspan'] = data_option.replace('|', '');
-            } else if(data_option === '(') {
+            } else if(data_option.match(/^(\^|v)?\|[0-9]+$/)) {
+                // 이 부분 다듬어야함
+                var rowspan_vertical = data_option.match(/^(\^|v)/);
+                if(rowspan_vertical) {
+                    data_option_all['td'] += rowspan_vertical[1] === '^' ? 'vertical-align: top;' : 'vertical-align: bottom;';
+                }
+                
+                data_option_all['rowspan'] = data_option.replace(/^(\^|v)?\|/, '');
+            } else if(
+                data_option === '(' ||
+                data_option === ':' ||
+                data_option === ')'
+            ) {
                 // align
-                data_option_all['td'] += 'text-align:right;';
-            } else if(data_option === ':') {
-                data_option_all['td'] += 'text-align:center;';
-            } else if(data_option === ')') {
-                data_option_all['td'] += 'text-align:left;';
+                if(data_option === '(') {
+                    data_option_all['td'] += 'text-align:right;';
+                } else if(data_option === ':') {
+                    data_option_all['td'] += 'text-align:center;';
+                } else {
+                    data_option_all['td'] += 'text-align:left;';
+                }
+                
+                align_auto = 0;
             } else {
-                no_option = '<lt>' + data_option + '<gt>';
+                var table_option_data = data_option.replace(/"/g, '');
+                if(table_option_data.match(/^[a-zA-Z0-9]{6}|[a-zA-Z0-9]{3}$/)) {
+                    data_option_all['td'] += 'background:#' + table_option_data + ';';
+                } else {
+                    data_option_all['td'] += 'background:' + table_option_data + ';';    
+                }
             }
         }
         
@@ -707,6 +744,17 @@ function do_onmark_table_render_sub(data, data_col) {
     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;';
+        }
+    }
+    
     return data_option_all;
 }
 
@@ -781,7 +829,7 @@ function do_onmark_table_render(data) {
         }
         table_data_real += '</tr></table></div>';
         
-        return table_data_real;
+        return '\n' + table_data_real + '\n';
     });
     
     data = data.replace(/<t_br>/g, '\n');
@@ -840,36 +888,49 @@ asdf || asdf`
     var data_backlink = [];
     var data_nowiki = {};
     
+    console.log(name_include);
     var data_var = do_onmark_math_render(data, data_js, name_include);
     data = data_var[0];
     data_js = data_var[1];
+    console.log('math pass');
     
     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];
+    console.log('nowiki before pass');
     
     data_var = do_onmark_include_render(data, data_js, name_include, data_nowiki);
     data = data_var[0];
     data_js = data_var[1];
+    console.log('include pass');
     
     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];
+    console.log('middle pass');
     
     data = do_onmark_text_render(data);
-    data = do_onmark_heading_render(data);
+    console.log('text pass');
+    data = do_onmark_heading_render(data, name_doc, name_include);
+    console.log('heading pass');
     data = do_onmark_table_render(data);
+    console.log('table pass');
     
     data_var = do_onmark_link_render(data, data_js, name_doc, name_include, data_nowiki);
     data = data_var[0];
     data_js = data_var[1];
+    console.log('link pass');
     
     data = do_onmark_macro_render(data);
+    console.log('macro pass');
     data = do_onmark_list_render(data);
+    console.log('list pass');
     data = do_onmark_footnote_render(data, name_include);
+    console.log('footnote pass');
     data = do_onmark_last_render(data, name_include);
+    console.log('last pass');
     
     data_js += '' + 
         'get_link_state("' + name_include + '");\n' +