잉여개발기 (SPDV) пре 2 година
родитељ
комит
9c09af28b1
2 измењених фајлова са 89 додато и 11 уклоњено
  1. 82 0
      views/main_css/js/func/func.js
  2. 7 11
      views/main_css/js/route/bbs_set.js

+ 82 - 0
views/main_css/js/func/func.js

@@ -34,6 +34,88 @@ function opennamu_xss_filter_decode(str) {
     });
 }
 
+function renderSimpleSet(data) {
+    let tocData = '';
+    const tocRegexAll = /<h([1-6])>([^<>]+)<\/h[1-6]>/g;
+    const tocRegex = /<h([1-6])>([^<>]+)<\/h[1-6]>/;
+    const tocSearchData = [...data.matchAll(tocRegexAll)];
+    let headingStack = [0, 0, 0, 0, 0, 0];
+
+    if (tocSearchData.length > 0) {
+        tocData += `
+            <div class="opennamu_TOC" id="toc">
+                <span class="opennamu_TOC_title">TOC</span>
+                <br>
+        `;
+    }
+
+    tocSearchData.forEach((tocSearchIn) => {
+        const headingLevel = parseInt(tocSearchIn[1]);
+        const headingLevelStr = headingLevel.toString();
+
+        headingStack[headingLevel - 1] += 1;
+        for (let i = headingLevel; i < 6; i++) {
+            headingStack[i] = 0;
+        }
+
+        const headingStackStr = headingStack
+            .map((val) => (val !== 0 ? val + '.' : ''))
+            .join('')
+            .replace(/\.$/, '');
+
+        tocData += `
+            <br>
+            <span class="opennamu_TOC_list">
+                ${'<span style="margin-left: 10px;"></span>'.repeat(headingStackStr.split('.').length - 1)}
+                <a href="#s-${headingStackStr}">${headingStackStr}.</a>
+                ${tocSearchIn[2]}
+            </span>
+        `;
+
+        data = data.replace(
+            tocRegex,
+            `<h${tocSearchIn[1]} id="s-${headingStackStr}"><a href="#toc">${headingStackStr}.</a> ${tocSearchIn[2]}</h${tocSearchIn[1]}>`
+        );
+    });
+
+    if (tocData !== '') {
+        tocData += '</div><hr class="main_hr">';
+    }
+
+    let footnoteData = '';
+    const footnoteRegex = /<sup>((?:(?!<sup>|<\/sup>).)+)<\/sup>/g;
+    const footnoteSearchData = [...data.matchAll(footnoteRegex)];
+    let footnoteCount = 1;
+
+    if (footnoteSearchData.length > 0) {
+        footnoteData += '<div class="opennamu_footnote">';
+    }
+
+    footnoteSearchData.forEach((footnoteSearch) => {
+        const footnoteCountStr = footnoteCount.toString();
+
+        if (footnoteCount !== 1) {
+            footnoteData += '<br>';
+        }
+
+        footnoteData += `<a id="fn-${footnoteCountStr}" href="#rfn-${footnoteCountStr}">(${footnoteCountStr})</a> ${footnoteSearch[1]}`;
+        data = data.replace(
+            footnoteRegex,
+            `<sup id="rfn-${footnoteCountStr}"><a href="#fn-${footnoteCountStr}">(${footnoteCountStr})</a></sup>`
+        );
+
+        footnoteCount += 1;
+    });
+
+    if (footnoteData !== '') {
+        footnoteData += '</div>';
+    }
+
+    data = tocData + data + footnoteData;
+
+    return data;
+}
+
 function opennamu_do_id_check(data) {
     if(data.match(/\.|\:/)) {
         return 0;

+ 7 - 11
views/main_css/js/route/bbs_set.js

@@ -24,14 +24,10 @@ function opennamu_bbs_set_post() {
 }
 
 function opennamu_bbs_set() {
-    let acl_set_list = [
-        "bbs_view_acl_all",
-        "bbs_acl_all",
-        "bbs_edit_acl_all",
-        "bbs_comment_acl_all"
-    ];
+    let acl_set_list = ["bbs_view_acl_all", "bbs_acl_all", "bbs_edit_acl_all", "bbs_comment_acl_all"];
+    let acl_set_list_h = [2, 3, 4, 4];
     
-    let lang_str = 'save';
+    let lang_str = 'save reference';
     for(let for_a = 0; for_a < acl_set_list.length; for_a++) {
         lang_str += ' ' + acl_set_list[for_a];
     }
@@ -52,10 +48,10 @@ function opennamu_bbs_set() {
         }).then(function(acl_list) {
             acl_list = acl_list["data"];
 
-            let acl_set_html = '';
+            let acl_set_html = '<a href="/acl/TEST#exp">(' + lang['reference'] + ')</a>';
 
             for(let for_b = 0; for_b < acl_set_list.length; for_b++) {
-                acl_set_html += '<h2>' + lang[acl_set_list[for_b]] + '</h2>';
+                acl_set_html += '<h' + acl_set_list_h[for_b] + '>' + lang[acl_set_list[for_b]] + '</h' + acl_set_list_h[for_b] + '>';
                 acl_set_html += '<select id="opennamu_' + acl_set_list[for_b] + '">';
                 
                 let select = '';
@@ -70,11 +66,11 @@ function opennamu_bbs_set() {
                 acl_set_html += '</select>';
             }
 
-            document.getElementById('opennamu_bbs_set').innerHTML = '' +
+            document.getElementById('opennamu_bbs_set').innerHTML = renderSimpleSet('' +
                 acl_set_html +
                 '<hr class="main_hr">' + 
                 '<button onclick="opennamu_bbs_set_post();">' + lang['save'] + '</button>' +
-            '';
+            '');
 
             for(let for_a = 0; for_a < acl_set_list.length; for_a++) {
                 fetch('/api/v2/setting/' + acl_set_list[for_a]).then(function(res) {