2du il y a 4 ans
Parent
commit
d35db38e3c

+ 1 - 1
route/filter_inter_wiki.py

@@ -63,7 +63,7 @@ def filter_inter_wiki(tool):
             div += '</td>'
 
             if tool == 'inter_wiki':
-                div += '<td><a id="out_link" href="' + html.escape(data[1]) + '">' + html.escape(data[1]) + '</a></td>'
+                div += '<td><a class="opennamuLinkOut" href="' + html.escape(data[1]) + '">' + html.escape(data[1]) + '</a></td>'
             else:
                 div += '<td>' + html.escape(data[1]) + '</td>'
 

+ 1 - 1
version.json

@@ -1,6 +1,6 @@
 {
     "beta" : {
-        "r_ver" : "v3.4.4 (stable1) (beta3) (dev9)",
+        "r_ver" : "v3.4.4 (stable1) (beta3) (dev10)",
         "c_ver" : "3500105",
         "s_ver" : "3500110"
     }

+ 11 - 11
views/main_css/css/main.css

@@ -44,11 +44,11 @@ a {
     color: red;
 }
 
-#inside, #out_link, #out_link::before {
+#inside, #out_link, #out_link::before, .opennamuLinkOut {
     color: green;
 }
 
-#out_link::before {
+#out_link::before, .opennamuLinkOut::before {
     content: '🅴';
     
     font-weight: lighter;
@@ -74,35 +74,35 @@ a {
 }
 
 /* 토론 관련 */
-#toron {
+#toron, .opennamu_comment {
     width: 100%;
 }
 
-#toron_color_green {
+#toron_color_green, .opennamu_comment_color_green {
     background: palegreen;
 }
 
-#toron_color_blue {
+#toron_color_blue, .opennamu_comment_color_blue {
     background: paleturquoise;
 }
 
-#toron_color_red {
+#toron_color_red, .opennamu_comment_color_red {
     background: palevioletred;
 }
 
-#toron_color_normal {
+#toron_color_normal, .opennamu_comment_color_default {
     background: palegoldenrod;
 }
 
-#toron_color_grey {
+#toron_color_grey, .opennamu_comment_color_gray {
     background: gainsboro;
 }
 
-#toron_color_not {
+#toron_color_not, .opennamu_comment_blind {
     display: none;
 }
 
-#topic_scroll {
+#topic_scroll, .opennamu_comment_scroll {
     max-height: 500px;
     
     overflow: scroll;
@@ -111,7 +111,7 @@ a {
     scrollbar-width: none;
 }
 
-#topic_scroll::-webkit-scrollbar {
+#topic_scroll::-webkit-scrollbar, .opennamu_comment_scroll::-webkit-scrollbar {
     display: none;
 }
 

+ 70 - 28
views/main_css/js/render/markdown.js

@@ -296,7 +296,7 @@ class opennamu_render_markdown {
                         link_sub = x1;
                     }
                     
-                    parser_data_temp['render' + parser_count_str + 'Span'] = '<a href="' + link_main + '">';
+                    parser_data_temp['render' + parser_count_str + 'Span'] = '<a class="opennamuLinkOut" href="' + link_main + '">';
                     parser_data_temp['/render' + parser_count_str + 'Span'] = '</a>';
 
                     return '<render' + parser_count_str + 'Span>' + link_sub + '</render' + parser_count_str + 'Span>';
@@ -336,6 +336,21 @@ class opennamu_render_markdown {
         
         this.doc_data = this.doc_data.replace(/<linkBlink>/g, '[]()');
         
+        this.doc_data = this.doc_data.replace(/&lt;(https?:\/\/(?:(?:(?!&lt;|&gt;).)+))&gt;/g, function(match, x1) {
+            parser_count += 1;
+            let parser_count_str = String(parser_count);
+            
+            let link_main = render_main.do_func_parser_to_text(x1, 'nowikiLink');
+            link_main = render_main.do_func_xss_encode(link_main);
+            
+            let link_sub = x1;
+
+            parser_data_temp['render' + parser_count_str + 'Span'] = '<a class="opennamuLinkOut" href="' + link_main + '">';
+            parser_data_temp['/render' + parser_count_str + 'Span'] = '</a>';
+
+            return '<render' + parser_count_str + 'Span>' + link_sub + '</render' + parser_count_str + 'Span>';
+        });
+        
         this.parser_count['parser'] = parser_count;
         this.parser_data_temp = parser_data_temp;
     }
@@ -485,7 +500,7 @@ class opennamu_render_markdown {
                 }
             }
             else {
-                return '';
+                return match;
             }
         });
         
@@ -554,36 +569,11 @@ class opennamu_render_markdown {
             return '<nowiki' + parser_count_str + 'Span>' + '</nowiki' + parser_count_str + 'Span>';
         });
         
-        this.doc_data = this.doc_data.replace(
-            /&lt;pre&gt;(?:\n| )*&lt;code&gt;((?:(?:(?!&lt;pre&gt;(?:\n| )*&lt;code&gt;|&lt;\/code&gt;(?:\n| )*&lt;\/pre&gt;).)|\n)+)&lt;\/code&gt;(?:\n| )*&lt;\/pre&gt;/g,
-            function(match, x1) {
-            let nowiki_data = render_main.do_func_parser_to_text(x1, 'nowiki');
-            
-            parser_count += 1;
-            let parser_count_str = String(parser_count);
-            
-            if(nowiki_data.match(/\n/)) {
-                parser_data_temp['nowiki' + parser_count_str + 'Span'] = match;
-                parser_data_temp['/nowiki' + parser_count_str + 'Span'] = '';
-                
-                parser_data_temp['nowiki' + parser_count_str + 'SpanEnd'] = '<pre>' + nowiki_data;
-                parser_data_temp['/nowiki' + parser_count_str + 'SpanEnd'] = '</pre>';
-            } else {
-                parser_data_temp['nowiki' + parser_count_str + 'Span'] = match;
-                parser_data_temp['/nowiki' + parser_count_str + 'Span'] = '';
-                
-                parser_data_temp['nowiki' + parser_count_str + 'SpanEnd'] = '<code>' + nowiki_data;
-                parser_data_temp['/nowiki' + parser_count_str + 'SpanEnd'] = '</code>';
-            }
-            
-            return '<nowiki' + parser_count_str + 'Span>' + '</nowiki' + parser_count_str + 'Span>';
-        });
-        
         this.parser_count['parser'] = parser_count;
         this.parser_data_temp = parser_data_temp;
     }
     
-    do_part_horizon() {
+    do_part_horizon() {        
         let horizone_regex = /\n((?:\*|\* |-|- ){3,})\n/;
         while(this.doc_data.match(horizone_regex)) {
             this.doc_data = this.doc_data.replace(horizone_regex, function(match, x1, x2) {
@@ -592,6 +582,56 @@ class opennamu_render_markdown {
         }
     }
     
+    do_part_blockquote() {
+        let parser_count = this.parser_count['parser'];
+        let parser_data_temp = this.parser_data_temp;
+        
+        let blockquote_regex = /((?:\n&gt;(?:[^\n]+))+)/;
+        while(this.doc_data.match(blockquote_regex)) {
+            this.doc_data = this.doc_data.replace(blockquote_regex, function(match, x1) {
+                let blockquote_data = '<brStart>' + x1;
+                blockquote_data = blockquote_data.replace(/\n&gt;	?/g, '\n');
+
+                parser_count += 1;
+                let parser_count_str = String(parser_count);
+
+                parser_data_temp['render' + parser_count_str + 'Span'] = '<blockquote>';
+                parser_data_temp['/render' + parser_count_str + 'Span'] = '</blockquote>';
+
+                return '\n<brEnd><render' + parser_count_str + 'Span>' + blockquote_data + '</render' + parser_count_str + 'Span>';
+            });
+        }
+        
+        this.parser_count['parser'] = parser_count;
+        this.parser_data_temp = parser_data_temp;
+    }
+    
+    do_part_list() {
+        let parser_count = this.parser_count['parser'];
+        let parser_data_temp = this.parser_data_temp;
+        
+        // 여기 파트 개선 필요
+        this.doc_data = this.doc_data.replace(/((?:\n(?: )*\* ?(?:[^\n]+))+)/g, function(match, x1) {
+            let list_data = x1;
+            let list_depth = -1;
+            
+            list_data = list_data.replace(/\n( )*\* ?([^\n]+)/g, function(match, x1, x2) {
+                return '';
+            });
+
+            parser_count += 1;
+            let parser_count_str = String(parser_count);
+
+            parser_data_temp['render' + parser_count_str + 'Span'] = '<ul>';
+            parser_data_temp['/render' + parser_count_str + 'Span'] = '</ul>';
+
+            return '\n<brEnd><render' + parser_count_str + 'Span>' + list_data + '</render' + parser_count_str + 'Span>';
+        });
+        
+        this.parser_count['parser'] = parser_count;
+        this.parser_data_temp = parser_data_temp;
+    }
+    
     do_part_final() {
         this.doc_data = this.doc_data.replace(/<brStart>\n?/g, '');
         this.doc_data = this.doc_data.replace(/\n?<brEnd>/g, '');
@@ -616,6 +656,8 @@ class opennamu_render_markdown {
     // Main Part
     do_main() {
         this.do_part_nowiki();
+        this.do_part_list();
+        this.do_part_blockquote();
         this.do_part_heading();
         this.do_part_horizon();
         this.do_part_footnote();

+ 1 - 1
views/main_css/js/render/wiki.js

@@ -43,7 +43,7 @@ class opennamu_render_wiki {
                 let xhr_data = JSON.parse(this.responseText);
                 for(let for_a in link_list) {
                     if(!xhr_data[for_a]) {
-                        for(var for_b in link_list[for_a]) {
+                        for(let for_b in link_list[for_a]) {
                             document.getElementsByClassName(render_part_id_add + 'opennamuLink')[link_list[for_a][for_b]].id = "not_thing";
                         }
                     }

+ 22 - 11
views/main_css/js/route/thread.js

@@ -65,16 +65,16 @@ function opennamu_do_thread_make(topic_num, type_do = 'top', some = '', where =
                 }
                 
                 if(blind === 'O') {
-                    color_b = 'toron_color_not';
+                    color_b = 'opennamu_comment_blind';
                 } else {
-                    color_b = 'toron_color';
+                    color_b = 'opennamu_comment_blind_not';
                 }
                 
                 if(blind === 'O') {
                     ip += ' <a href="/admin_log?search=blind%20(code%20' + topic_num + '#' + key + '">(B)</a>';
                     
                     if(admin === '1') {
-                        ip += ' <a href="/thread/' + topic_num + '/comment/' + key + '/raw">(R)</a>';
+                        ip += ' <a href="javascript:opennamu_do_open_comment(\'' + key + '\');">(O)</a>';
                     }
                 }
                 
@@ -83,27 +83,29 @@ function opennamu_do_thread_make(topic_num, type_do = 'top', some = '', where =
                 }
                 
                 if(type_do === 'top') {
-                    color_t = 'toron_color_red';
+                    color_t = 'opennamu_comment_color_red';
                 } else if(blind === '1') {
-                    color_t = 'toron_color_blue';
+                    color_t = 'opennamu_comment_color_blue';
+                } else if(blind === 'O') {
+                    color_t = 'opennamu_comment_color_gray';
                 } else if(ip_o === ip_first) {
-                    color_t = 'toron_color_green';
+                    color_t = 'opennamu_comment_color_green';
                 } else {
-                    color_t = 'toron_color_normal';
+                    color_t = 'opennamu_comment_color_default';
                 }
                 
                 data_a += '' + 
-                    '<table id="toron">' + 
+                    '<table class="opennamu_comment">' + 
                         '<tr>' + 
-                            '<td id="' + color_t + '">' + 
+                            '<td class="' + 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_i_pas + '</div>' + 
+                            '<td class="' + color_b + '" id="opennamu_comment_data_' + key + '">' + 
+                                '<div class="opennamu_comment_scroll">' + data_i_pas + '</div>' + 
                             '</td>' + 
                         '</tr>' +
                     '</table>' + 
@@ -149,4 +151,13 @@ function opennamu_do_thread_make(topic_num, type_do = 'top', some = '', where =
             }
         }
     }
+}
+
+function opennamu_do_open_comment(key) {
+    let elementState = document.getElementById('opennamu_comment_data_' + key).style.display;
+    if(!elementState || elementState === 'none') {
+        document.getElementById('opennamu_comment_data_' + key).style.display = 'block';
+    } else {
+        document.getElementById('opennamu_comment_data_' + key).style.display = 'none';
+    }
 }