2du 4 лет назад
Родитель
Сommit
624b7bb88e

+ 3 - 2
route/edit.py

@@ -136,7 +136,8 @@ def edit_2(conn, name):
 
 
         data = re.sub(r'\n+$', '', data)
         data = re.sub(r'\n+$', '', data)
 
 
-        if flask.request.cookies.get('main_css_monaco', '0') == '1':
+        monaco_on = flask.request.cookies.get('main_css_monaco', '0')
+        if monaco_on == '1':
             editor_display = 'style="display: none;"'
             editor_display = 'style="display: none;"'
             monaco_display = ''
             monaco_display = ''
             add_get_file = '''
             add_get_file = '''
@@ -181,7 +182,7 @@ def edit_2(conn, name):
                 <span   id="server_set"
                 <span   id="server_set"
                         style="display: none;">''' + json.dumps(server_set) + '''</span>
                         style="display: none;">''' + json.dumps(server_set) + '''</span>
                 <form method="post">
                 <form method="post">
-                    <div ''' + editor_display + '''>''' + edit_button() + '''</div>
+                    <div>''' + edit_button(monaco_on) + '''</div>
                     <div    id="monaco_editor"
                     <div    id="monaco_editor"
                             class="content" 
                             class="content" 
                             ''' + monaco_display + '''></div>
                             ''' + monaco_display + '''></div>

+ 3 - 3
route/tool/func.py

@@ -84,7 +84,7 @@ if sys.version_info < (3, 6):
 global_lang = {}
 global_lang = {}
 global_wiki_set = {}
 global_wiki_set = {}
 
 
-data_css_ver = '106'
+data_css_ver = '107'
 data_css = ''
 data_css = ''
 
 
 conn = ''
 conn = ''
@@ -503,7 +503,7 @@ def load_random_key(long = 64):
         ) for i in range(long)
         ) for i in range(long)
     )
     )
 
 
-def edit_button():
+def edit_button(editor_display = '0'):
     insert_list = []
     insert_list = []
 
 
     curs.execute(db_change("select html, plus from html_filter where kind = 'edit_top'"))
     curs.execute(db_change("select html, plus from html_filter where kind = 'edit_top'"))
@@ -515,7 +515,7 @@ def edit_button():
     for insert_data in insert_list:
     for insert_data in insert_list:
         data += '' + \
         data += '' + \
             '<a href="' + \
             '<a href="' + \
-                'javascript:do_insert_data(\'content\', \'' + insert_data[0] + '\')' + \
+                'javascript:do_insert_data(\'content\', \'' + insert_data[0] + '\', ' + editor_display + ')' + \
             '">(' + insert_data[1] + ')</a> ' + \
             '">(' + insert_data[1] + ')</a> ' + \
         ''
         ''
 
 

+ 3 - 5
route/tool/func_mark.py

@@ -15,7 +15,7 @@ def load_conn2(data):
 def backlink_generate(data_markup, doc_data, doc_name):
 def backlink_generate(data_markup, doc_data, doc_name):
     if data_markup == 'namumark':
     if data_markup == 'namumark':
         # Link
         # Link
-        link_re = re.compile(r'\[\[(?!https?:\/\/)((?:(?!\[\[|\]\]|\|).)+)(?:\]\]|\|)', re.I)
+        link_re = re.compile(r'\[\[(?!https?:\/\/|inter:|#)((?:(?!\[\[|\]\]|\|).)+)(?:\]\]|\|)', re.I)
         
         
         data_link = link_re.findall(doc_data)
         data_link = link_re.findall(doc_data)
         data_link = list(set(data_link))
         data_link = list(set(data_link))
@@ -29,9 +29,7 @@ def backlink_generate(data_markup, doc_data, doc_name):
         
         
         for i in data_link:
         for i in data_link:
             data_link_in = i
             data_link_in = i
-            if data_link_in[0] == '#':
-                continue
-            elif re.search(r'^(?:분류|category):', data_link_in):
+            if re.search(r'^(?:분류|category):', data_link_in):
                 data_link_in = re.sub(r'\\(.)', r'\1', data_link_in)
                 data_link_in = re.sub(r'\\(.)', r'\1', data_link_in)
                 data_link_end['cat'] += [re.sub(r'^분류:', 'category:', data_link_in)]
                 data_link_end['cat'] += [re.sub(r'^분류:', 'category:', data_link_in)]
             elif re.search(r'^(?:파일|file):', data_link_in):
             elif re.search(r'^(?:파일|file):', data_link_in):
@@ -153,7 +151,7 @@ def render_do(doc_name, doc_data, data_type, data_in):
     else:
     else:
         backlink = backlink_generate(
         backlink = backlink_generate(
             rep_data, 
             rep_data, 
-            html.escape(doc_data), 
+            doc_data, 
             doc_name
             doc_name
         )
         )
         
         

+ 1 - 1
version.json

@@ -1,6 +1,6 @@
 {
 {
     "beta" : {
     "beta" : {
-        "r_ver" : "v3.4.0 (stable-02b) (beta-03) (dev-15)",
+        "r_ver" : "v3.4.0-beta (stable2) (beta4) (dev16)",
         "c_ver" : "3400101",
         "c_ver" : "3400101",
         "s_ver" : "12"
         "s_ver" : "12"
     }
     }

+ 31 - 17
views/main_css/js/load_editor.js

@@ -1,21 +1,35 @@
-function do_insert_data(name, data) {
-    // https://stackoverflow.com/questions/11076975/insert-text-into-textarea-at-cursor-position-javascript
-    if(document.selection) {
-        document.getElementById(name).focus();
-
-        var sel = document.selection.createRange();
-        sel.text = data;
-    } else if(
-        document.getElementById(name).selectionStart || 
-        document.getElementById(name).selectionStart == '0'
-    ) {
-        var startPos = document.getElementById(name).selectionStart;
-        var endPos = document.getElementById(name).selectionEnd;
-        var myPos = document.getElementById(name).value;
-
-        document.getElementById(name).value = myPos.substring(0, startPos) + data + myPos.substring(endPos, myPos.length);
+function do_insert_data(name, data, monaco = 0) {
+    if(monaco === 0) {
+        // https://stackoverflow.com/questions/11076975/insert-text-into-textarea-at-cursor-position-javascript
+        if(document.selection) {
+            document.getElementById(name).focus();
+
+            var sel = document.selection.createRange();
+            sel.text = data;
+        } else if(
+            document.getElementById(name).selectionStart || 
+            document.getElementById(name).selectionStart == '0'
+        ) {
+            var startPos = document.getElementById(name).selectionStart;
+            var endPos = document.getElementById(name).selectionEnd;
+            var myPos = document.getElementById(name).value;
+
+            document.getElementById(name).value = myPos.substring(0, startPos) + data + myPos.substring(endPos, myPos.length);
+        } else {
+            document.getElementById(name).value += data;
+        }
     } else {
     } else {
-        document.getElementById(name).value += data;
+        var selection = editor.getSelection();
+        var id = { major: 1, minor: 1 };             
+        var text = data;
+        var op = {
+            identifier: id, 
+            range: selection, 
+            text: text, 
+            forceMoveMarkers: true
+        };
+        
+        editor.executeEdits("my-source", [op]);
     }
     }
 }
 }
 
 

+ 29 - 2
views/main_css/js/load_skin_set.js

@@ -88,6 +88,13 @@ function main_css_get_post() {
         document.cookie = 'main_css_exter_link=0;';
         document.cookie = 'main_css_exter_link=0;';
     }
     }
     
     
+    check = document.getElementById('main_css_link_delimiter');
+    if(check.checked) {
+        document.cookie = 'main_css_link_delimiter=1;';
+    } else {
+        document.cookie = 'main_css_link_delimiter=0;';
+    }
+    
     history.go(0);
     history.go(0);
 }
 }
 
 
@@ -153,6 +160,13 @@ function main_css_skin_load() {
             '<link rel="stylesheet" href="/views/main_css/css/sub/dark.css?ver=5">' +
             '<link rel="stylesheet" href="/views/main_css/css/sub/dark.css?ver=5">' +
         '';
         '';
     }
     }
+    
+    if(
+        document.cookie.match(main_css_regex_data('main_css_link_delimiter')) &&
+        document.cookie.match(main_css_regex_data('main_css_link_delimiter'))[1] === '1'
+    ) {
+        head_data.innerHTML += '<style>#real_normal_link::before, #not_thing::before, #inside::before { content: \'🅸\'; font-weight: lighter; background: transparent; }</style>';
+    }
 }
 }
 
 
 function main_css_load_lang(name) {
 function main_css_load_lang(name) {
@@ -187,7 +201,8 @@ function main_css_load_lang(name) {
             "except_ie" : "Not supported for Internet Explorer",
             "except_ie" : "Not supported for Internet Explorer",
             "use_monaco" : "Use monaco editor",
             "use_monaco" : "Use monaco editor",
             "self_tab" : "Current tab",
             "self_tab" : "Current tab",
-            "exter_link_open_method" : "External link"
+            "exter_link_open_method" : "External link",
+            "link_delimiter" : "Add link delimiter"
         }, "ko-KR" : {
         }, "ko-KR" : {
             "default" : "기본값",
             "default" : "기본값",
             "change_to_normal" : "일반 텍스트로 변경",
             "change_to_normal" : "일반 텍스트로 변경",
@@ -218,7 +233,8 @@ function main_css_load_lang(name) {
             "except_ie" : "인터넷 익스플로러에선 지원되지 않음",
             "except_ie" : "인터넷 익스플로러에선 지원되지 않음",
             "use_monaco" : "모나코 에디터 사용",
             "use_monaco" : "모나코 에디터 사용",
             "self_tab" : "현재 탭",
             "self_tab" : "현재 탭",
-            "exter_link_open_method" : "외부 링크"
+            "exter_link_open_method" : "외부 링크",
+            "link_delimiter" : "링크 구분자 추가"
         }
         }
     }
     }
 
 
@@ -409,6 +425,15 @@ function main_css_skin_set() {
             set_data["exter_link"] += '<option value="' + exter_link_list[i][1] + '">' + exter_link_list[i][2] + '</option>';
             set_data["exter_link"] += '<option value="' + exter_link_list[i][1] + '">' + exter_link_list[i][2] + '</option>';
         }
         }
     }
     }
+    
+    if(
+        document.cookie.match(main_css_regex_data('main_css_link_delimiter')) &&
+        document.cookie.match(main_css_regex_data('main_css_link_delimiter'))[1] === '1'
+    ) {
+        set_data["link_delimiter"] = "checked";
+    } else {
+        set_data["link_delimiter"] = "";
+    }
 
 
     document.getElementById("main_skin_set").innerHTML = ' \
     document.getElementById("main_skin_set").innerHTML = ' \
         <h2>1. ' + main_css_load_lang('renderer') + '</h2> \
         <h2>1. ' + main_css_load_lang('renderer') + '</h2> \
@@ -434,6 +459,8 @@ function main_css_skin_set() {
         </select> \
         </select> \
         <h3>1.6. ' + main_css_load_lang('other') + '</h3> \
         <h3>1.6. ' + main_css_load_lang('other') + '</h3> \
         <input ' + set_data["include"] + ' type="checkbox" id="main_css_include" value="include"> ' + main_css_load_lang('include_link') + ' \
         <input ' + set_data["include"] + ' type="checkbox" id="main_css_include" value="include"> ' + main_css_load_lang('include_link') + ' \
+        <hr class="main_hr"> \
+        <input ' + set_data["link_delimiter"] + ' type="checkbox" id="main_css_link_delimiter" value="link_delimiter"> ' + main_css_load_lang('link_delimiter') + '<sup>(1)</sup> \
         <h3>1.7. ' + main_css_load_lang('set_toc') + '</h3> \
         <h3>1.7. ' + main_css_load_lang('set_toc') + '</h3> \
         <select id="main_css_toc"> \
         <select id="main_css_toc"> \
             ' + set_data["toc"] + ' \
             ' + set_data["toc"] + ' \

+ 7 - 6
views/main_css/js/render_onmark.js

@@ -112,7 +112,7 @@ function do_xss_change(data) {
 }
 }
 
 
 function do_end_br_replace(data) {
 function do_end_br_replace(data) {
-    data = data.replace(/(\n| )+$/, '');
+    data = data.replace(/(\n| )+$/, '\n');
     
     
     return data;
     return data;
 }
 }
@@ -395,11 +395,11 @@ function do_onmark_link_render(data, data_js, name_doc, name_include, data_nowik
                     '';
                     '';
 
 
                     return  '<a id="inside" ' +
                     return  '<a id="inside" ' +
-                            'class="' + name_include + 'link_finder" ' +
-                            'target="_blank" ' +
-                            'name="' + name_include + 'set_link_' + num_link_str + '" ' + 
-                            'title=""' +
-                            'href="">' + data_inter_logo + link_out + '</a>'; 
+                                'class="' + name_include + 'link_finder" ' +
+                                'target="_blank" ' +
+                                'name="' + name_include + 'set_link_' + num_link_str + '" ' + 
+                                'title=""' +
+                                'href="">' + data_inter_logo + link_out + '</a>'; 
                 } else {
                 } else {
                     return '';
                     return '';
                 }
                 }
@@ -439,6 +439,7 @@ function do_onmark_link_render(data, data_js, name_doc, name_include, data_nowik
                 }
                 }
 
 
                 return  '<a class="' + name_include + 'link_finder" ' +
                 return  '<a class="' + name_include + 'link_finder" ' +
+                            'id="real_normal_link"' +
                             'name="' + name_include + 'set_link_' + num_link_str + '" ' +
                             'name="' + name_include + 'set_link_' + num_link_str + '" ' +
                             'title="" ' +
                             'title="" ' +
                             'href="">' + link_out + '</a>';
                             'href="">' + link_out + '</a>';