Procházet zdrojové kódy

이미지 옵션 추가, JS 통폐합 2

Surplus_Up (2DU) před 6 roky
rodič
revize
9fd7869e58

+ 2 - 2
route/tool/func.py

@@ -224,7 +224,7 @@ def update(ver_num, set_data):
                 i[0]
             ])
             
-    if ver_num < 3183800:
+    if ver_num < 3183900:
         curs.execute(db_change('delete from cache_data'))
 
     conn.commit()
@@ -498,7 +498,7 @@ def other2(data):
         data += ['']
 
     req_list = ''
-    main_css_ver = 39
+    main_css_ver = 40
 
     if not 'main_css_load' in flask.session or not 'main_css_ver' in flask.session or flask.session['main_css_ver'] != main_css_ver:
         for i_data in os.listdir(os.path.join("views", "main_css", "css")):

+ 22 - 31
route/tool/set_mark/namumark.py

@@ -944,9 +944,10 @@ def namumark(conn, data, title, include_num):
     data = table_start(data)
 
     category = ''
+    link_re = re.compile('\[\[((?:(?!\[\[|\]\]|<\/td>).)+)\]\]')
     category_re = re.compile(r'^(?:category|분류):', re.I)
     while 1:
-        link = re.search(r'\[\[((?:(?!\[\[|\]\]|<\/td>).)+)\]\]', data)
+        link = link_re.search(data)
         if link:
             link = link.group(1)
 
@@ -1017,29 +1018,19 @@ def namumark(conn, data, title, include_num):
                     file_alt = 'file:' + file_name + '.' + file_end
                     exist = None
 
-                if exist:
-                    data = re.sub(
-                        '\[\[((?:(?!\[\[|\]\]|<\/td>).)+)\]\]',
-                        '<span style="' + file_align + '">' + \
-                            '<span style="' + file_color + '">' + \
-                                '<img style="' + file_style + '" alt="' + file_alt + '" src="' + file_src + '">' + \
-                            '</span>' + \
-                        '</span>',
-                        data,
-                        1
-                    )
-                else:
-                    data = re.sub(
-                        '\[\[((?:(?!\[\[|\]\]|<\/td>).)+)\]\]',
-                        '<span style="' + file_align + '">' + \
-                            '<span style="' + file_color + '">' + \
-                                '<img class="' + include_num + 'file_finder_1" style="' + file_style + '" alt="' + file_alt + '" src="' + file_src + '">' + \
-                                '<a class="' + include_num + 'file_finder_2" id="not_thing" href="/upload?name=' + tool.url_pas(file_name) + '">' + file_alt + '</a>' + \
-                            '</span>' + \
-                        '</span>',
-                        data,
-                        1
-                    )
+                data = link_re.sub(
+                    '<span style="' + file_align + '">' + \
+                        '<span  style="' + file_color + '"' + \
+                                'class="' + include_num + 'file_finder" ' + \
+                                'under_style="' + file_style + '" ' + \
+                                'under_alt="' + file_alt + '" ' + \
+                                'under_src="' + file_src + '" ' + \
+                                'under_href="' + ("out_link" if exist else '/upload?name=' + tool.url_pas(file_name)) + '">' + \
+                        '</span>' + \
+                    '</span>',
+                    data,
+                    1
+                )
             elif category_re.search(main_link):
                 if category == '':
                     category += '<div id="cate_all"><hr><div id="cate">Category : '
@@ -1056,7 +1047,7 @@ def namumark(conn, data, title, include_num):
                 backlink += [[title, main_link, 'cat']]
                 category += '<a class="' + include_num + 'link_finder' + link_id + '" href="/w/' + tool.url_pas(main_link) + '">' + category_re.sub('', see_link) + '</a> | '
 
-                data = re.sub(r'\[\[((?:(?!\[\[|\]\]|<\/td>).)+)\]\]', '', data, 1)
+                data = link_re.sub('', data, 1)
             elif re.search(r'^wiki:', main_link):
                 data = re.sub(
                     '\[\[((?:(?!\[\[|\]\]|<\/td>).)+)\]\]',
@@ -1091,17 +1082,17 @@ def namumark(conn, data, title, include_num):
                             1
                         )
                 else:
-                    data = re.sub(r'\[\[((?:(?!\[\[|\]\]|<\/td>).)+)\]\]', 'Not exist', data, 1)
+                    data = link_re.sub('Not exist', data, 1)
             elif re.search(r'^(\/(?:.+))$', main_link):
                 under_title = re.search(r'^(\/(?:.+))$', main_link)
                 under_title = under_title.group(1)
 
                 if see_link != main_link:
-                    data = re.sub(r'\[\[((?:(?!\[\[|\]\]|<\/td>).)+)\]\]', '[[' + title + under_title + '|' + see_link + ']]', data, 1)
+                    data = link_re.sub('[[' + title + under_title + '|' + see_link + ']]', data, 1)
                 else:
-                    data = re.sub(r'\[\[((?:(?!\[\[|\]\]|<\/td>).)+)\]\]', '[[' + title + under_title + ']]', data, 1)
+                    data = link_re.sub('[[' + title + under_title + ']]', data, 1)
             elif re.search(r'^http(s)?:\/\/', main_link):
-                data = re.sub(r'\[\[((?:(?!\[\[|\]\]|<\/td>).)+)\]\]', '<a id="out_link" rel="nofollow" href="' + main_link + '">' + see_link + '</a>', data, 1)
+                data = link_re.sub('<a id="out_link" rel="nofollow" href="' + main_link + '">' + see_link + '</a>', data, 1)
             else:
                 return_link = link_fix(main_link)
                 main_link = html.unescape(return_link[0])
@@ -1148,9 +1139,9 @@ def namumark(conn, data, title, include_num):
                                 1
                             )
                         else:
-                            data = re.sub(r'\[\[((?:(?!\[\[|\]\]|<\/td>).)+)\]\]', '<b>' + see_link + '</b>', data, 1)
+                            data = link_re.sub('<b>' + see_link + '</b>', data, 1)
                 else:
-                    data = re.sub(r'\[\[((?:(?!\[\[|\]\]|<\/td>).)+)\]\]', '&#91;&#91;' + link + '&#93;&#93;', data, 1)
+                    data = link_re.sub('&#91;&#91;' + link + '&#93;&#93;', data, 1)
         else:
             break
 

+ 2 - 2
version.json

@@ -1,7 +1,7 @@
 {
     "master" : {
-        "r_ver" : "v3.1.8-master-38",
-        "c_ver" : "3183800",
+        "r_ver" : "v3.1.8-master-39",
+        "c_ver" : "3183900",
         "s_ver" : "8"
     }, "stable" : {
         "r_ver" : "v3.1.7-stable-04",

+ 35 - 1
views/main_css/js/do_upload_paste.js → views/main_css/js/do_editor.js

@@ -1,5 +1,39 @@
+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);
+    } else {
+        document.getElementById(name).value += data;
+    }
+}
+
+function do_not_out() {
+    window.onbeforeunload = function() {
+        data = document.getElementById('content').value;
+        origin = document.getElementById('origin').value;
+        if(data !== origin) {
+            return '';
+        }
+    }
+}
+
+function save_stop_exit() {
+    window.onbeforeunload = function () { }
+}
+
 function do_paste_image() {
     window.addEventListener('DOMContentLoaded', function() {
+        do_not_out();
+
         if(
             document.cookie.match(main_css_regex_data('main_css_image_paste')) &&
             document.cookie.match(main_css_regex_data('main_css_image_paste'))[1] === '1'
@@ -59,4 +93,4 @@ function pasteListener(e) {
             alert("클립보드의 이미지를 업로드하는데 실패했습니다. 파일 이름 중복일 수 있습니다.");
         });
     }
-}
+}

+ 0 - 18
views/main_css/js/do_insert_data.js

@@ -1,18 +0,0 @@
-// https://stackoverflow.com/questions/11076975/insert-text-into-textarea-at-cursor-position-javascript
-
-function do_insert_data(name, data) {
-    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;
-    }
-}

+ 0 - 10
views/main_css/js/do_open_folding.js

@@ -1,10 +0,0 @@
-function do_open_folding(data, element) {
-    var fol = document.getElementById(data);
-    if(fol.style.display === '' || (fol.style.display === 'inline-block' || fol.style.display === 'block')) {
-        document.getElementById(data).style.display = 'none';
-        element.innerHTML = '(+)'
-    } else {
-        document.getElementById(data).style.display = 'block';
-        element.innerHTML = '(-)'
-    }
-}

+ 0 - 35
views/main_css/js/do_open_foot.js

@@ -1,35 +0,0 @@
-function do_open_foot(name, num = 0) {
-    var found_include = name.match(/^(include_(?:[0-9]+)\-)/);
-    if(found_include) {
-        var include_name = name.replace(/^(?:include_(?:[0-9]+)\-)/, '');
-        var front_data = found_include[1];
-    } else {
-        var include_name = name;
-        var front_data = '';
-    }
-
-    if(
-        document.cookie.match(main_css_regex_data('main_css_footnote_set')) &&
-        document.cookie.match(main_css_regex_data('main_css_footnote_set'))[1] === '1'
-    ) {
-        if(num === 1) {
-            document.getElementById(front_data + 'r' + include_name).focus();
-        } else {
-            var get_data = document.getElementById(front_data + include_name).innerHTML;
-            var org_data = document.getElementById(front_data + 'd' + include_name).innerHTML;
-            if(org_data === '') {
-                document.getElementById(front_data + 'd' + include_name).innerHTML = '' +
-                    '<a href="#' + front_data + 'c' + include_name + '">(Go)</a> ' + get_data +
-                '';
-                document.getElementById(front_data + 'd' + include_name).className = 'spead_footnote';
-            } else {
-                document.getElementById(front_data + 'd' + include_name).innerHTML = '';
-                document.getElementById(front_data + 'd' + include_name).className = '';
-            }
-        }
-    } else {
-        document.getElementById(front_data + 'r' + include_name).style.color = 'red';
-        document.getElementById(front_data + 'c' + include_name).style.color = (num === 1 ? 'inherit' : 'red');
-        document.getElementById(front_data + (num === 1 ? 'r' : 'c') + include_name).focus();
-    }
-}

+ 0 - 15
views/main_css/js/do_stop_exit.js

@@ -1,15 +0,0 @@
-window.addEventListener('DOMContentLoaded', function() {
-    if(window.location.pathname.match(/^\/edit\//i)) {
-        window.onbeforeunload = function() {
-            data = document.getElementById('content').value;
-            origin = document.getElementById('origin').value;
-            if(data !== origin) {
-                return '';
-            }
-        }
-    }
-});
-
-function save_stop_exit() {
-    window.onbeforeunload = function () { }
-}

+ 106 - 18
views/main_css/js/load_namumark.js

@@ -1,11 +1,12 @@
 function get_link_state(data, i = 0) { 
-    if(document.getElementsByClassName(data + 'link_finder')[i]) {
+    var get_class = document.getElementsByClassName(data + 'link_finder')[i];
+    if(get_class) {
         get_link_state(data, i + 1);
 
         var xhr = new XMLHttpRequest();
         xhr.open(
             "GET", 
-            document.getElementsByClassName(data + 'link_finder')[i].href.replace('/w/', '/api/w/').replace(/#([^#]*)/, '') + "?exist=1", 
+            get_class.href.replace('/w/', '/api/w/').replace(/#([^#]*)/, '') + "?exist=1", 
             true
         );
         xhr.send(null);
@@ -23,23 +24,63 @@ function get_link_state(data, i = 0) {
 }
 
 function get_file_state(data, i = 0) {       
-    if(document.getElementsByClassName(data + 'file_finder_1')[i]) {        
+    var get_class = document.getElementsByClassName(data + 'file_finder')[i];
+    if(get_class) {        
         get_file_state(data, i + 1);
-
-        var xhr = new XMLHttpRequest();
-        xhr.open(
-            "GET", 
-            document.getElementsByClassName(data + 'file_finder_1')[i].src.replace('/image/', '/api/image/'), 
-            true
-        );
-        xhr.send(null);
-        
-        xhr.onreadystatechange = function() {
-            if(this.readyState === 4 && this.status === 200) {
-                if(JSON.parse(this.responseText)['exist'] !== '1') {
-                    document.getElementsByClassName(data + 'file_finder_1')[i].style = "display: none;";
-                } else {
-                    document.getElementsByClassName(data + 'file_finder_2')[i].innerHTML = "";
+    
+        if(get_class.getAttribute('under_href') === 'out_link') {
+            if(
+                document.cookie.match(main_css_regex_data('main_css_image_set')) &&
+                document.cookie.match(main_css_regex_data('main_css_image_set'))[1] === '0'
+            ) {
+                document.getElementsByClassName(data + 'file_finder')[i].innerHTML = '' +
+                    '<img   style="' + get_class.getAttribute('under_style') + '" ' + 
+                            'alt="' + get_class.getAttribute('under_alt') + '" ' + 
+                            'src="' + get_class.getAttribute('under_src') + '">' +
+                '';
+            } else {
+                document.getElementsByClassName(data + 'file_finder')[i].innerHTML = '' +
+                    '<a href="' + get_class.getAttribute('under_src') + '">(' +
+                        get_class.getAttribute('under_src') +
+                    ')</a>' +
+                '';
+            }
+        } else {
+            var xhr = new XMLHttpRequest();
+            xhr.open(
+                "GET", 
+                get_class.getAttribute('under_src').replace('/image/', '/api/image/'), 
+                true
+            );
+            xhr.send(null);
+            
+            xhr.onreadystatechange = function() {
+                if(this.readyState === 4 && this.status === 200) {
+                    if(JSON.parse(this.responseText)['exist'] !== '1') {
+                        document.getElementsByClassName(data + 'file_finder')[i].innerHTML = '' +
+                            '<a href="' + get_class.getAttribute('under_href') + '" ' + 
+                                'id="not_thing">' +
+                                get_class.getAttribute('under_alt') +
+                            '</a>' +
+                        '';
+                    } else {
+                        if(
+                            document.cookie.match(main_css_regex_data('main_css_image_set')) &&
+                            document.cookie.match(main_css_regex_data('main_css_image_set'))[1] === '0'
+                        ) {
+                            document.getElementsByClassName(data + 'file_finder')[i].innerHTML = '' +
+                                '<img   style="' + get_class.getAttribute('under_style') + '" ' + 
+                                        'alt="' + get_class.getAttribute('under_alt') + '" ' + 
+                                        'src="' + get_class.getAttribute('under_src') + '">' +
+                            '';
+                        } else {
+                            document.getElementsByClassName(data + 'file_finder')[i].innerHTML = '' +
+                                '<a href="' + get_class.getAttribute('under_src') + '">(' +
+                                    get_class.getAttribute('under_alt') +
+                                ')</a>' +
+                            '';
+                        }
+                    }
                 }
             }
         }
@@ -100,4 +141,51 @@ function not_from_exist() {
             window.location.href = document.getElementById('go_redirect_link').href + '?from=' + location.pathname.replace(/^\/w\//, '');
         }
     });
+}
+
+function do_open_folding(data, element) {
+    var fol = document.getElementById(data);
+    if(fol.style.display === '' || (fol.style.display === 'inline-block' || fol.style.display === 'block')) {
+        document.getElementById(data).style.display = 'none';
+        element.innerHTML = '(+)'
+    } else {
+        document.getElementById(data).style.display = 'block';
+        element.innerHTML = '(-)'
+    }
+}
+
+function do_open_foot(name, num = 0) {
+    var found_include = name.match(/^(include_(?:[0-9]+)\-)/);
+    if(found_include) {
+        var include_name = name.replace(/^(?:include_(?:[0-9]+)\-)/, '');
+        var front_data = found_include[1];
+    } else {
+        var include_name = name;
+        var front_data = '';
+    }
+
+    if(
+        document.cookie.match(main_css_regex_data('main_css_footnote_set')) &&
+        document.cookie.match(main_css_regex_data('main_css_footnote_set'))[1] === '1'
+    ) {
+        if(num === 1) {
+            document.getElementById(front_data + 'r' + include_name).focus();
+        } else {
+            var get_data = document.getElementById(front_data + include_name).innerHTML;
+            var org_data = document.getElementById(front_data + 'd' + include_name).innerHTML;
+            if(org_data === '') {
+                document.getElementById(front_data + 'd' + include_name).innerHTML = '' +
+                    '<a href="#' + front_data + 'c' + include_name + '">(Go)</a> ' + get_data +
+                '';
+                document.getElementById(front_data + 'd' + include_name).className = 'spead_footnote';
+            } else {
+                document.getElementById(front_data + 'd' + include_name).innerHTML = '';
+                document.getElementById(front_data + 'd' + include_name).className = '';
+            }
+        }
+    } else {
+        document.getElementById(front_data + 'r' + include_name).style.color = 'red';
+        document.getElementById(front_data + 'c' + include_name).style.color = (num === 1 ? 'inherit' : 'red');
+        document.getElementById(front_data + (num === 1 ? 'r' : 'c') + include_name).focus();
+    }
 }

+ 4 - 0
views/main_css/js/load_preview.js

@@ -20,4 +20,8 @@ function load_preview(name) {
             eval(o_p_data['js_data'])
         }
     }
+}
+
+function load_raw_preview(name_1, name_2) {
+    document.getElementById(name_2).innerHTML = document.getElementById(name_1).value;
 }

+ 0 - 3
views/main_css/js/load_raw_preview.js

@@ -1,3 +0,0 @@
-function load_raw_preview(name_1, name_2) {
-    document.getElementById(name_2).innerHTML = document.getElementById(name_1).value;
-}

+ 42 - 6
views/main_css/js/load_skin_set.js

@@ -42,6 +42,13 @@ function main_css_get_post() {
         document.cookie = 'main_css_footnote_set=0;';
     }
 
+    check = document.getElementById('image');
+    if(check.value === 'click') {
+        document.cookie = 'main_css_image_set=1;';
+    } else {
+        document.cookie = 'main_css_image_set=0;';
+    }
+
     check = document.getElementById('image_paste');
     if(check.checked) {
         document.cookie = 'main_css_image_paste=1;';
@@ -108,7 +115,10 @@ function main_css_skin_set() {
             "where_category" : "Set category location",
             "bottom" : "Bottom",
             "top" : "Top",
-            "set_footnote" : "Set footnote"
+            "set_footnote" : "Set footnote",
+            "renderer" : "Renderer",
+            "spread" : "Spread",
+            "set_image" : "Set image"
         }, "ko-KR" : {
             "default" : "기본값",
             "change_to_normal" : "일반 텍스트로 변경",
@@ -121,7 +131,10 @@ function main_css_skin_set() {
             "where_category" : "분류 위치 설정",
             "bottom" : "아래",
             "top" : "위",
-            "set_footnote" : "각주 설정"
+            "set_footnote" : "각주 설정",
+            "renderer" : "렌더러",
+            "spread" : "펼치기",
+            "set_image" : "이미지 설정"
         }
     }
 
@@ -215,7 +228,7 @@ function main_css_skin_set() {
 
     var footnote_list = [
         ['0', 'normal', set_language[language]['default']],
-        ['1', 'spread', 'spread (beta)']
+        ['1', 'spread', set_language[language]['spread']]
     ];
     set_data["footnote"] = '';
     i = 0;
@@ -232,8 +245,27 @@ function main_css_skin_set() {
         i += 1;
     }
 
+    var image_list = [
+        ['0', 'normal', set_language[language]['default']],
+        ['1', 'click', 'click (beta)']
+    ];
+    set_data["image"] = '';
+    i = 0;
+    while(image_list[i]) {
+        if(
+            document.cookie.match(main_css_regex_data('main_css_image_set')) && 
+            document.cookie.match(main_css_regex_data('main_css_image_set'))[1] === image_list[i][0]
+        ) {
+            set_data["image"] = '<option value="' + image_list[i][1] + '">' + image_list[i][2] + '</option>' + set_data["image"];
+        } else {
+            set_data["image"] += '<option value="' + image_list[i][1] + '">' + image_list[i][2] + '</option>';
+        }
+
+        i += 1;
+    }
+
     document.getElementById("main_skin_set").innerHTML = ' \
-        <h2>1. renderer</h2> \
+        <h2>1. ' + set_language[language]['renderer'] + '</h2> \
         <h3>1.1. ' + set_language[language]['strike'] + '</h3> \
         <select id="strike" name="strike"> \
             ' + set_data["strike"] + ' \
@@ -250,10 +282,14 @@ function main_css_skin_set() {
         <select id="footnote" name="footnote"> \
             ' + set_data["footnote"] + ' \
         </select> \
-        <h3>1.4. ' + set_language[language]['other'] + '</h3> \
+        <h3>1.5. ' + set_language[language]['set_image'] + '</h3> \
+        <select id="image" name="image"> \
+            ' + set_data["image"] + ' \
+        </select> \
+        <h3>1.6. ' + set_language[language]['other'] + '</h3> \
         <input ' + set_data["include"] + ' type="checkbox" id="include" name="include" value="include"> ' + set_language[language]['include_link'] + ' \
         <hr class="main_hr"> \
-        <input ' + set_data["image_paste"] + ' type="checkbox" id="image_paste" name="image_paste" value="image_paste"> image_paste (beta) \
+        <input ' + set_data["image_paste"] + ' type="checkbox" id="image_paste" name="image_paste" value="image_paste"> 클립보드 이미지 업로드 (ko-KR) \
         <hr class="main_hr"> \
         <button onclick="main_css_get_post();">' + set_language[language]['save'] + '</button> \
     ';

+ 13 - 0
views/main_css/js/load_ver.js → views/main_css/js/load_something.js

@@ -1,3 +1,16 @@
+function load_user_info(name) {
+    var url = "/api/user_info/" + encodeURI(name) + "?render=1";
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", url, true);
+    xhr.send(null);
+
+    xhr.onreadystatechange = function() {
+        if(this.readyState === 4 && this.status === 200) {
+            document.getElementById('get_user_info').innerHTML += JSON.parse(this.responseText)['data'];
+        }
+    }
+}
+
 function load_ver() {
     var url = "/api/version";
     var xhr = new XMLHttpRequest();

+ 0 - 12
views/main_css/js/load_user_info.js

@@ -1,12 +0,0 @@
-function load_user_info(name) {
-    var url = "/api/user_info/" + encodeURI(name) + "?render=1";
-    var xhr = new XMLHttpRequest();
-    xhr.open("GET", url, true);
-    xhr.send(null);
-
-    xhr.onreadystatechange = function() {
-        if(this.readyState === 4 && this.status === 200) {
-            document.getElementById('get_user_info').innerHTML += JSON.parse(this.responseText)['data'];
-        }
-    }
-}