Browse Source

사용자 기능 대거 추가

잉여개발기 (SPDV) 5 years ago
parent
commit
3e8c06d585
4 changed files with 187 additions and 66 deletions
  1. 6 1
      route/tool/set_mark/namumark.py
  2. 1 1
      version.json
  3. 49 23
      views/main_css/js/load_namumark.js
  4. 131 41
      views/main_css/js/load_skin_set.js

+ 6 - 1
route/tool/set_mark/namumark.py

@@ -707,8 +707,10 @@ def namumark(conn, data, title, include_num):
     toc_re = re.compile(r'\[(?:목차|toc)\]', re.I)
     if not no_toc_re.search(data) and not toc_re.search(data):
         data = re.sub(r'(?P<in>\n(={1,6})(#)? ?((?:(?!(?: #=| =)).)+) ?#?(?:=+)\n)', '\n[toc]\g<in>', data, 1)
+        auto_toc = 1
     else:
         data = no_toc_re.sub('', data)
+        auto_toc = 0
 
     data = '<div class="all_in_data" id="in_data_0">' + data
 
@@ -772,7 +774,10 @@ def namumark(conn, data, title, include_num):
             break
 
     toc_data += '</div>'
-    data = toc_re.sub(toc_data, data)
+    if auto_toc == 1:
+        data = toc_re.sub('<div id="auto_toc">' + toc_data + '</div>', data, 1)
+    else:
+        data = toc_re.sub(toc_data, data)
     
     macro_re = re.compile(r'\[([^[(]+)\(((?:(?!\[|\)]).)+)\)\]')
     macro_data = macro_re.findall(data)

+ 1 - 1
version.json

@@ -1,6 +1,6 @@
 {
     "beta" : {
-        "r_ver" : "v3.2.0-stable-13 (beta-35) (dev-2020-09-18-01)",
+        "r_ver" : "v3.2.0-stable-13 (beta-36) (dev-2020-09-20-01)",
         "c_ver" : "3203400",
         "s_ver" : "10"
     }

+ 49 - 23
views/main_css/js/load_namumark.js

@@ -2,12 +2,8 @@ function get_link_state(data, i = 0) {
     var get_class = document.getElementsByClassName(data + 'link_finder')[i];
     if(get_class) {
         var xhr = new XMLHttpRequest();
-        xhr.open(
-            "GET", 
-            get_class.href.replace('/w/', '/api/w/').replace(/#([^#]*)/, '') + "?exist=1", 
-            true
-        );
-        xhr.send(null);
+        xhr.open("GET", get_class.href.replace('/w/', '/api/w/').replace(/#([^#]*)/, '') + "?exist=1");
+        xhr.send();
 
         xhr.onreadystatechange = function() {
             if(this.readyState === 4 && this.status === 200) {
@@ -23,6 +19,14 @@ function get_link_state(data, i = 0) {
     }
 }
 
+function load_image_link(data) {
+    data.innerHTML = '' +
+        '<img   style="' + data.getAttribute('under_style') + '" ' + 
+                'alt="' + data.getAttribute('under_alt') + '" ' + 
+                'src="' + data.getAttribute('under_src') + '">' +
+    '';
+}
+
 function get_file_state(data, i = 0) {       
     var get_class = document.getElementsByClassName(data + 'file_finder')[i];
     if(get_class) {            
@@ -34,7 +38,21 @@ function get_file_state(data, i = 0) {
                 document.getElementsByClassName(data + 'file_finder')[i].innerHTML = '' +
                     '<a href="' + get_class.getAttribute('under_src') + '" ' +
                         'title="' + get_class.getAttribute('under_src') + '">' + 
-                        '(External image)' + 
+                        '(External image link)' + 
+                    '</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] === '2'
+            ) {
+                document.getElementsByClassName(data + 'file_finder')[i].innerHTML = '' +
+                    '<a href="javascript:void(0);" ' +
+                        'onclick="load_image_link(this); this.onclick = \'\';" ' + 
+                        'under_style="' + get_class.getAttribute('under_style') + '" ' +
+                        'under_alt="' + get_class.getAttribute('under_alt') + '" ' +
+                        'under_src="' + get_class.getAttribute('under_src') + '" ' +
+                        'title="' + get_class.getAttribute('under_src') + '">' + 
+                        '(External image load)' + 
                     '</a>' +
                 '';
             } else {
@@ -46,12 +64,8 @@ function get_file_state(data, i = 0) {
             }
         } else {
             var xhr = new XMLHttpRequest();
-            xhr.open(
-                "GET", 
-                get_class.getAttribute('under_src').replace('/image/', '/api/image/'), 
-                true
-            );
-            xhr.send(null);
+            xhr.open("GET", get_class.getAttribute('under_src').replace('/image/', '/api/image/'));
+            xhr.send();
             
             xhr.onreadystatechange = function() {
                 if(this.readyState === 4 && this.status === 200) {
@@ -59,7 +73,7 @@ function get_file_state(data, i = 0) {
                         document.getElementsByClassName(data + 'file_finder')[i].innerHTML = '' +
                             '<a href="' + get_class.getAttribute('under_href') + '" ' + 
                                 'id="not_thing">' +
-                                get_class.getAttribute('under_alt') +
+                                + '(' + get_class.getAttribute('under_alt') + ')' +
                             '</a>' +
                         '';
                     } else {
@@ -68,9 +82,23 @@ function get_file_state(data, i = 0) {
                             document.cookie.match(main_css_regex_data('main_css_image_set'))[1] === '1'
                         ) {
                             document.getElementsByClassName(data + 'file_finder')[i].innerHTML = '' +
-                                '<a href="' + get_class.getAttribute('under_src') + '">(' +
-                                    get_class.getAttribute('under_alt') +
-                                ')</a>' +
+                                '<a href="' + get_class.getAttribute('under_src') + '">' +
+                                    '(' + 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] === '2'
+                        ) {
+                            document.getElementsByClassName(data + 'file_finder')[i].innerHTML = '' +
+                                '<a href="javascript:void(0);" ' +
+                                    'onclick="load_image_link(this); this.onclick = \'\';" ' + 
+                                    'under_style="' + get_class.getAttribute('under_style') + '" ' +
+                                    'under_alt="' + get_class.getAttribute('under_alt') + '" ' +
+                                    'under_src="' + get_class.getAttribute('under_src') + '" ' +
+                                    'title="' + get_class.getAttribute('under_src') + '">' + 
+                                    '(' + get_class.getAttribute('under_alt') + ' load)' +
+                                '</a>' +
                             '';
                         } else {
                             document.getElementsByClassName(data + 'file_finder')[i].innerHTML = '' +
@@ -97,8 +125,8 @@ function load_include(title, name, p_data) {
     var url = "/api/w/" + encodeURI(title) + "?include=" + name + "&change=" + change;
 
     var xhr = new XMLHttpRequest();
-    xhr.open("GET", url, true);
-    xhr.send(null);
+    xhr.open("GET", url);
+    xhr.send();
 
     xhr.onreadystatechange = function() {
         if(this.readyState === 4 && this.status === 200) {
@@ -107,9 +135,7 @@ function load_include(title, name, p_data) {
                 document.getElementsByClassName(name)[0].id = "not_thing";
             } else {
                 var o_p_data = JSON.parse(this.responseText);
-                
                 document.getElementById(name).innerHTML = o_p_data['data'];
-                
                 eval(o_p_data['js_data']);
             }
         }
@@ -120,8 +146,8 @@ function page_count() {
     var url = "/api/title_index";
 
     var xhr = new XMLHttpRequest();
-    xhr.open("GET", url, true);
-    xhr.send(null);
+    xhr.open("GET", url);
+    xhr.send();
 
     xhr.onreadystatechange = function() {
         if(this.readyState === 4 && this.status === 200) {

+ 131 - 41
views/main_css/js/load_skin_set.js

@@ -3,7 +3,7 @@ function main_css_regex_data(data) {
 }
 
 function main_css_get_post() {    
-    var check = document.getElementById('strike');
+    var check = document.getElementById('main_css_strike');
     if(check.value === 'normal') {
         document.cookie = 'main_css_del_strike=0;';
     } else if(check.value === 'change') {
@@ -12,7 +12,7 @@ function main_css_get_post() {
         document.cookie = 'main_css_del_strike=2;';
     }
 
-    check = document.getElementById('bold');
+    check = document.getElementById('main_css_bold');
     if(check.value === 'normal') {
         document.cookie = 'main_css_del_bold=0;';
     } else if(check.value === 'change') {
@@ -21,41 +21,59 @@ function main_css_get_post() {
         document.cookie = 'main_css_del_bold=2;';
     }
 
-    check = document.getElementById('include');
+    check = document.getElementById('main_css_include');
     if(check.checked) {
         document.cookie = 'main_css_include_link=1;';
     } else {
         document.cookie = 'main_css_include_link=0;';
     }
 
-    check = document.getElementById('category');
+    check = document.getElementById('main_css_category');
     if(check.value === 'bottom') {
         document.cookie = 'main_css_category_set=0;';
     } else {
         document.cookie = 'main_css_category_set=1;';
     }
 
-    check = document.getElementById('footnote');
+    check = document.getElementById('main_css_footnote');
     if(check.value === 'spread') {
         document.cookie = 'main_css_footnote_set=1;';
     } else {
         document.cookie = 'main_css_footnote_set=0;';
     }
 
-    check = document.getElementById('image');
-    if(check.value === 'click') {
+    check = document.getElementById('main_css_image');
+    if(check.value === 'new_click') {
+        document.cookie = 'main_css_image_set=2;';
+    } else if(check.value === 'click') {
         document.cookie = 'main_css_image_set=1;';
     } else {
         document.cookie = 'main_css_image_set=0;';
     }
 
-    check = document.getElementById('image_paste');
+    check = document.getElementById('main_css_image_paste');
     if(check.checked) {
         document.cookie = 'main_css_image_paste=1;';
     } else {
         document.cookie = 'main_css_image_paste=0;';
     }
 
+    check = document.getElementById('main_css_toc');
+    if(check.value === 'on') {
+        document.cookie = 'main_css_toc_set=2;';
+    } else if(check.value === 'off') {
+        document.cookie = 'main_css_toc_set=1;';
+    } else {
+        document.cookie = 'main_css_toc_set=0;';
+    }
+
+    check = document.getElementById('main_css_font_size');
+    if(check.value.match(/^[0-9]+$/)) {
+        document.cookie = 'main_css_font_size=' + check.value + ';';
+    } else {
+        document.cookie = 'main_css_font_size=;';
+    }
+
     history.go(0);
 }
 
@@ -97,9 +115,24 @@ function main_css_skin_load() {
             head_data.innerHTML += '<style>#cate { margin-top: 0px; margin-bottom: 20px; }</style>';
         }
     }
+
+    if(
+        document.cookie.match(main_css_regex_data('main_css_font_size')) &&
+        document.cookie.match(main_css_regex_data('main_css_font_size'))[1] !== ''
+    ) {
+        head_data.innerHTML += '<style>.all_in_data { font-size: ' + document.cookie.match(main_css_regex_data('main_css_font_size'))[1] + 'px; }</style>';
+    }
+
+    if(document.cookie.match(main_css_regex_data('main_css_toc_set'))) {
+        if(document.cookie.match(main_css_regex_data('main_css_toc_set'))[1] === '2') {
+            head_data.innerHTML += '<style>#auto_toc { display: none; }</style>';
+        } else if(document.cookie.match(main_css_regex_data('main_css_toc_set'))[1] === '1') {
+            head_data.innerHTML += '<style>#toc { display: none; }</style>';
+        }
+    }
 }
 
-function main_css_skin_set() {    
+function main_css_load_lang(name) {
     var set_language = {
         "en-US" : {
             "default" : "Default",
@@ -116,7 +149,14 @@ function main_css_skin_set() {
             "set_footnote" : "Set footnote",
             "renderer" : "Renderer",
             "spread" : "Spread",
-            "set_image" : "Set image"
+            "set_image" : "Set image",
+            "set_toc" : "Set TOC",
+            "click_load" : "Load on click",
+            "in_content" : "Only when TOC is in the document",
+            "all_off" : "Always off",
+            "set_font_size" : "Set font size",
+            "change_to_link" : "Change to link",
+            "font_size" : "font size"
         }, "ko-KR" : {
             "default" : "기본값",
             "change_to_normal" : "일반 텍스트로 변경",
@@ -132,25 +172,42 @@ function main_css_skin_set() {
             "set_footnote" : "각주 설정",
             "renderer" : "렌더러",
             "spread" : "펼치기",
-            "set_image" : "이미지 설정"
+            "set_image" : "이미지 설정",
+            "set_toc" : "목차 설정",
+            "click_load" : "클릭시 불러오기",
+            "in_content" : "문서 안에 있을 때만",
+            "all_off" : "항상 끔",
+            "set_font_size" : "글자 크기 설정",
+            "change_to_link" : "링크로 변경",
+            "font_size" : "글자 크기"
         }
     }
 
-    var language = document.cookie.match(main_css_regex_data('language'))[1];
+    var server_language = document.cookie.match(main_css_regex_data('language'))[1];
     var user_language = document.cookie.match(main_css_regex_data('user_language'))[1];
     if(user_language in set_language) {
         language = user_language;
+    } else {
+        if(server_language in set_language) {
+            language = language;
+        } else {
+            language = 'en-US';
+        }
     }
 
-    if(!language in set_language) {
-        language = "en-US";
+    if(name in set_language[language]) {
+        return set_language[language][name];
+    } else {
+        return name + ' (' + language + ')';
     }
+}
 
+function main_css_skin_set() {    
     var set_data = {};
     var strike_list = [
-        ['0', 'normal', set_language[language]['default']],
-        ['1', 'change', set_language[language]['change_to_normal']],
-        ['2', 'delete', set_language[language]['delete']]
+        ['0', 'normal', main_css_load_lang('default')],
+        ['1', 'change', main_css_load_lang('change_to_normal')],
+        ['2', 'delete', main_css_load_lang('delete')]
     ];
     set_data["strike"] = '';
     var i = 0;
@@ -168,9 +225,9 @@ function main_css_skin_set() {
     }
 
     var bold_list = [
-        ['0', 'normal', set_language[language]['default']],
-        ['1', 'change', set_language[language]['change_to_normal']],
-        ['2', 'delete', set_language[language]['delete']]
+        ['0', 'normal', main_css_load_lang('default')],
+        ['1', 'change', main_css_load_lang('change_to_normal')],
+        ['2', 'delete', main_css_load_lang('delete')]
     ];
     set_data["bold"] = '';
     i = 0;
@@ -206,8 +263,8 @@ function main_css_skin_set() {
     }
 
     var category_list = [
-        ['0', 'bottom', set_language[language]['bottom']],
-        ['1', 'top', set_language[language]['top']],
+        ['0', 'bottom', main_css_load_lang('bottom')],
+        ['1', 'top', main_css_load_lang('top')],
     ];
     set_data["category"] = '';
     i = 0;
@@ -225,8 +282,8 @@ function main_css_skin_set() {
     }
 
     var footnote_list = [
-        ['0', 'normal', set_language[language]['default']],
-        ['1', 'spread', set_language[language]['spread']]
+        ['0', 'normal', main_css_load_lang('default')],
+        ['1', 'spread', main_css_load_lang('spread')]
     ];
     set_data["footnote"] = '';
     i = 0;
@@ -244,8 +301,9 @@ function main_css_skin_set() {
     }
 
     var image_list = [
-        ['0', 'normal', set_language[language]['default']],
-        ['1', 'click', 'click (beta)']
+        ['0', 'normal', main_css_load_lang('default')],
+        ['1', 'click', main_css_load_lang('change_to_link')],
+        ['2', 'new_click', main_css_load_lang('click_load')]
     ];
     set_data["image"] = '';
     i = 0;
@@ -262,33 +320,65 @@ function main_css_skin_set() {
         i += 1;
     }
 
+    var toc_list = [
+        ['0', 'normal', main_css_load_lang('default')],
+        ['1', 'off', main_css_load_lang('all_off')],
+        ['2', 'on', main_css_load_lang('in_content')]
+    ];
+    set_data["toc"] = '';
+    i = 0;
+    while(toc_list[i]) {
+        if(
+            document.cookie.match(main_css_regex_data('main_css_toc_set')) && 
+            document.cookie.match(main_css_regex_data('main_css_toc_set'))[1] === toc_list[i][0]
+        ) {
+            set_data["toc"] = '<option value="' + toc_list[i][1] + '">' + toc_list[i][2] + '</option>' + set_data["toc"];
+        } else {
+            set_data["toc"] += '<option value="' + toc_list[i][1] + '">' + toc_list[i][2] + '</option>';
+        }
+
+        i += 1;
+    }
+
+    if(document.cookie.match(main_css_regex_data('main_css_font_size'))) {
+        set_data["font_size"] = document.cookie.match(main_css_regex_data('main_css_font_size'))[1];
+    } else {
+        set_data["font_size"] = '';
+    }
+
     document.getElementById("main_skin_set").innerHTML = ' \
-        <h2>1. ' + set_language[language]['renderer'] + '</h2> \
-        <h3>1.1. ' + set_language[language]['strike'] + '</h3> \
-        <select id="strike" name="strike"> \
+        <h2>1. ' + main_css_load_lang('renderer') + '</h2> \
+        <h3>1.1. ' + main_css_load_lang('strike') + '</h3> \
+        <select id="main_css_strike"> \
             ' + set_data["strike"] + ' \
         </select> \
-        <h3>1.2. ' + set_language[language]['bold'] + '</h3> \
-        <select id="bold" name="bold"> \
+        <h3>1.2. ' + main_css_load_lang('bold') + '</h3> \
+        <select id="main_css_bold"> \
             ' + set_data["bold"] + ' \
         </select> \
-        <h3>1.3. ' + set_language[language]['where_category'] + '</h3> \
-        <select id="category" name="category"> \
+        <h3>1.3. ' + main_css_load_lang('where_category') + '</h3> \
+        <select id="main_css_category"> \
             ' + set_data["category"] + ' \
         </select> \
-        <h3>1.4. ' + set_language[language]['set_footnote'] + '</h3> \
-        <select id="footnote" name="footnote"> \
+        <h3>1.4. ' + main_css_load_lang('set_footnote') + '</h3> \
+        <select id="main_css_footnote"> \
             ' + set_data["footnote"] + ' \
         </select> \
-        <h3>1.5. ' + set_language[language]['set_image'] + '</h3> \
-        <select id="image" name="image"> \
+        <h3>1.5. ' + main_css_load_lang('set_image') + '</h3> \
+        <select id="main_css_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'] + ' \
+        <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') + ' \
         <hr class="main_hr"> \
-        <input ' + set_data["image_paste"] + ' type="checkbox" id="image_paste" name="image_paste" value="image_paste"> 클립보드 이미지 업로드 (ko-KR) \
+        <input ' + set_data["image_paste"] + ' type="checkbox" id="main_css_image_paste" value="image_paste"> 클립보드 이미지 업로드 (ko-KR) \
+        <h3>1.7. ' + main_css_load_lang('set_toc') + '</h3> \
+        <select id="main_css_toc"> \
+            ' + set_data["toc"] + ' \
+        </select> \
+        <h3>1.8. ' + main_css_load_lang('set_font_size') + '</h3> \
+        <input id="main_css_font_size" placeholder="' + main_css_load_lang('font_size') + '" value="' + set_data["font_size"] + '"> \
         <hr class="main_hr"> \
-        <button onclick="main_css_get_post();">' + set_language[language]['save'] + '</button> \
+        <button onclick="main_css_get_post();">' + main_css_load_lang('save') + '</button> \
     ';
 }