Kaynağa Gözat

fix onmark bug

2du 5 yıl önce
ebeveyn
işleme
345c8fe6de
1 değiştirilmiş dosya ile 157 ekleme ve 141 silme
  1. 157 141
      views/main_css/js/render_onmark.js

+ 157 - 141
views/main_css/js/render_onmark.js

@@ -190,148 +190,152 @@ function do_onmark_link_render(data, data_js, name_doc, name_include, data_nowik
     var category_data = '';
     var category_re = /^(분류|category):/i;
     var file_re = /^(파일|file|외부|out):/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] : '';
-        
-        num_link += 1;
-        var num_link_str = String(num_link - 1);
-        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(file_name) + '.' + file_type;       
-                var file_alt = file_name + '.' + file_type;
-                var file_exist = 1;
-            } else {
-                var file_src = file_name;
-                var file_alt = file_name;
-                var file_exist = 0;
-            }
-            
-            var file_style = '';
-            var file_bgcolor = '';
-            var file_align = '';
-            
-            var file_set = link_out_2.split('&');
-            var i = 0;
-            while(file_set[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_name === 'width') {
-                    file_style += 'width:' + file_set_data + ';';
-                } else if(file_set_name === 'height') {
-                    file_style += 'height:' + 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;';
+    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(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(file_name) + '.' + file_type;       
+                    var file_alt = file_name + '.' + file_type;
+                    var file_exist = 1;
+                } else {
+                    var file_src = file_name;
+                    var file_alt = file_name;
+                    var file_exist = 0;
+                }
+
+                var file_style = '';
+                var file_bgcolor = '';
+                var file_align = '';
+
+                var file_set = link_out_2.split('&');
+                var i = 0;
+                while(file_set[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_name === 'width') {
+                        file_style += 'width:' + file_set_data + ';';
+                    } else if(file_set_name === 'height') {
+                        file_style += 'height:' + 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 + ';';
+                        }
+                    } 
+
+                    i += 1;
+                }
+
+                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=' + do_url_change(file_name)) + '">' +
+                        '</span>' + 
+                    '</span>' +
+                ''
+            } 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) {
+                        var var_link_type = 'href';
                     } else {
-                        file_align = 'float: ' + file_set_data + ';';
+                        var var_link_type = 'title';
                     }
-                } 
-                
-                i += 1;
-            }
-            
-            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=' + do_url_change(file_name)) + '">' +
-                    '</span>' + 
-                '</span>' +
-            ''
-        } 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) {
-                    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(link_real) + '";' +
+                        '\n' +
+                    '';
+
+                    i += 1;
                 }
-                
-                data_js += '' +
-                    'document.getElementsByName("' + name_include + 'set_link_' + num_link_str + '")[0].' + var_link_type + ' = ' + 
-                        '"' + do_js_safe_change(link_real) + '";' +
-                    '\n' +
-                '';
-                
-                i += 1;
-            }
-            
-            return  '<a id="out_link" ' +
-                        'name="' + name_include + 'set_link_' + num_link_str + '" ' + 
-                        'title=""' +
-                        'href="">' + link_out + '</a>';
-        } 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 i = 0;
-            while(i < 2) {
-                if(i === 0) {
-                    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];
-                    
-                    var var_link_type = 'href';
-                    if(link_main === '') {
-                        var var_link_data = link_sub;
+
+                return  '<a id="out_link" ' +
+                            'name="' + name_include + 'set_link_' + num_link_str + '" ' + 
+                            'title=""' +
+                            'href="">' + link_out + '</a>';
+            } 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 i = 0;
+                while(i < 2) {
+                    if(i === 0) {
+                        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];
+
+                        var var_link_type = 'href';
+                        if(link_main === '') {
+                            var var_link_data = link_sub;
+                        } else {
+                            var var_link_data = '/w/' + do_url_change(link_main) + link_sub;
+                        }
                     } else {
-                        var var_link_data = '/w/' + do_url_change(link_main) + link_sub;
+                        var var_link_type = 'title';
+                        var var_link_data = do_js_safe_change(link_main) + link_sub;
                     }
-                } else {
-                    var var_link_type = 'title';
-                    var var_link_data = do_js_safe_change(link_main) + link_sub;
+
+                    data_js += '' +
+                        'document.getElementsByName("' + name_include + 'set_link_' + num_link_str + '")[0].' + var_link_type + ' = ' + 
+                            '"' + var_link_data + '";' +
+                        '\n' +
+                    '';
+
+                    i += 1;
                 }
-                
-                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" ' +
+                            'name="' + name_include + 'set_link_' + num_link_str + '" ' +
+                            'title="" ' +
+                            'href="">' + link_out + '</a>';
             }
-            
-            return  '<a class="' + name_include + 'link_finder" ' +
-                        'name="' + name_include + 'set_link_' + num_link_str + '" ' +
-                        'title="" ' +
-                        'href="">' + link_out + '</a>';
-        }
-    });
+        });
+    }
     
     data += (category_data === '' ? '' : (category_data.replace(/\| $/, '') + '</div></div>'));
     
@@ -486,11 +490,7 @@ function do_onmark_middle_render(data, data_js, name_include, data_nowiki, name_
     var nowiki_n = 0;
     var folding_n = 0;
     
-    while(1) {
-        if(!data.match(middle_re)) {
-            break;
-        }
-        
+    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] : '';
@@ -503,9 +503,10 @@ function do_onmark_middle_render(data, data_js, name_include, data_nowiki, name_
             }
 
             var middle_type = middle_data.match(
-                /^(?:(?:(?:(#|@)([0-9a-f-A-F]{3}){1,2})|(#|@)([a-zA-Z]+))|(\+|-)([1-5])|#!(html|wiki|syntax|folding|html))$/i
+                /^(?:(?:(?:(#|@)((?:[0-9a-f-A-F]{3}){1,2}))(?:,(?:#|@)(?:(?:[0-9a-f-A-F]{3}){1,2}))?|(#|@)([a-zA-Z]+))|(\+|-)([1-5])|#!(html|wiki|syntax|folding|html))$/i
             );
             if(middle_type) {
+                console.log(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]) {
@@ -836,11 +837,22 @@ function do_onmark_table_render_main(data) {
         
         var table_col = 0;
         var table_col_data = {};
+        var table_col_count = {};
             
         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;
+            }
+            
+            console.log(table_col, table_col_count);
+            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'];
@@ -868,6 +880,10 @@ function do_onmark_table_render_main(data) {
                     ''
                 }
 
+                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'] + '" ' +