فهرست منبع

Merge branch 'master' of https://github.com/visuddhinanda/mint

Bhikkhu-Kosalla 5 سال پیش
والد
کامیت
8551941035
55فایلهای تغییر یافته به همراه2655 افزوده شده و 1260 حذف شده
  1. 10 3
      app/article/add_to_collect_dlg.js
  2. 93 50
      app/article/article.js
  3. 2 2
      app/article/collect_get.php
  4. 78 61
      app/article/index.php
  5. 58 14
      app/article/my_article.js
  6. 26 15
      app/article/my_article_edit.php
  7. 1 1
      app/article/my_collect.js
  8. 1 1
      app/article/my_collect_edit.php
  9. 56 0
      app/collect/index.js
  10. 94 0
      app/collect/index.php
  11. 61 0
      app/collect/list.php
  12. 19 0
      app/pcdl/css/font.css
  13. 1 1
      app/pcdl/css/style.css
  14. 1 0
      app/pcdl/head_bar.php
  15. 14 2
      app/pcdl/html_head.php
  16. 81 0
      app/pcdl/index.js
  17. 15 34
      app/pcdl/index.php
  18. 549 0
      app/public/js/term-.js
  19. 0 500
      app/public/js/term.js
  20. 1 0
      app/public/lang/default.json
  21. 1 0
      app/public/lang/en.json
  22. 1 0
      app/public/lang/my.json
  23. 1 0
      app/public/lang/si.json
  24. 1 0
      app/public/lang/zh-cn.json
  25. 1 0
      app/public/lang/zh-tw.json
  26. 251 241
      app/studio/css/font.css
  27. 7 6
      app/studio/css/style.css
  28. 6 4
      app/studio/editor.php
  29. 7 0
      app/studio/index_head.php
  30. 1 1
      app/studio/js/message.js
  31. 123 76
      app/studio/js/render.js
  32. 0 0
      app/studio/note-/note.js
  33. 0 0
      app/studio/note-/note.php
  34. 0 0
      app/studio/term-.php
  35. 45 5
      app/term/channal_list.php
  36. 22 18
      app/term/my_dict_list.php
  37. 3 0
      app/term/my_term.js
  38. 123 28
      app/term/note.js
  39. 25 7
      app/term/note.php
  40. 147 0
      app/term/term.css
  41. 177 133
      app/term/term.js
  42. 56 42
      app/term/term.php
  43. 0 0
      app/term/term_edit_dlg.css
  44. 100 0
      app/term/term_edit_dlg.js
  45. 97 0
      app/term/term_get.php
  46. 26 0
      app/term/term_get_id.php
  47. 45 3
      app/term/term_popup.js
  48. 33 0
      app/term/term_post.php
  49. 56 0
      app/term/term_put.php
  50. 19 12
      app/usent/sent_post.php
  51. 16 0
      app/widget/click_dropdown.css
  52. 9 0
      app/widget/click_dropdown.js
  53. 95 0
      font/Padauk/OFL.txt
  54. BIN
      font/Padauk/Padauk-Bold.ttf
  55. BIN
      font/Padauk/Padauk-Regular.ttf

+ 10 - 3
app/article/add_to_collect_dlg.js

@@ -1,9 +1,16 @@
 function add_to_collect_dlg_init() {
   $("[vui='collect-dlg']").each(function () {
     $(this).css("position", "relative");
-    $(this).html(
-      "<button class='button_add_to_collect icon_btn' title='" + gLocal.gui.add_to + gLocal.gui.anthology + "'><svg class='icon'><use xlink:href='../studio/svg/icon.svg#add_to_anthology'></use></svg></button><div class='float_dlg'></div>"
-    );
+    let html = "";
+    html +=
+      "<button class='button_add_to_collect icon_btn' title='" +
+      gLocal.gui.add_to +
+      gLocal.gui.anthology +
+      "'>";
+    html +=
+      "<svg class='icon'><use xlink:href='../studio/svg/icon.svg#add_to_anthology'></use></svg></button><div class='float_dlg'></div>";
+
+    $(this).html(html);
   });
 
   $(".button_add_to_collect").click(function () {

+ 93 - 50
app/article/article.js

@@ -3,7 +3,9 @@ var _channal = "";
 var _lang = "";
 var _author = "";
 var _display = "";
+var _collect_id = "";
 
+function article_onload() {}
 function articel_load(id) {
   if (id == "") {
     return;
@@ -37,11 +39,14 @@ function articel_load(id) {
   );
 }
 
-function articel_load_collect(article_id) {
+function collect_load(id) {
+  if (id == "") {
+    return;
+  }
   $.get(
     "../article/collect_get.php",
     {
-      article: article_id,
+      id: id,
       setting: "",
     },
     function (data, status) {
@@ -49,57 +54,43 @@ function articel_load_collect(article_id) {
         try {
           let result = JSON.parse(data);
           if (result) {
-            $("#collect_title").html(result[0].title);
-            let html = "";
-            html += "<ul>";
-            let article_list = JSON.parse(result[0].article_list);
-            let display = "";
-            if (_display == "para") {
-              display = "&display=para";
-            }
-            let prevArticle = "无";
-            let nextArticle = "无";
-            for (let index = 0; index < article_list.length; index++) {
-              const element = article_list[index];
-              if (element.article == _articel_id) {
-                if (index > 0) {
-                  const prev = article_list[index - 1];
-                  prevArticle =
-                    "<a href='../article/index.php?id=" +
-                    prev.article +
-                    display +
-                    "'>" +
-                    prev.title +
-                    "</a>";
-                }
-                if (index < article_list.length - 1) {
-                  const next = article_list[index + 1];
-                  nextArticle =
-                    "<a href='../article/index.php?id=" +
-                    next.article +
-                    display +
-                    "'>" +
-                    next.title +
-                    "</a>";
-                }
-                $("#contents_nav_left").html(prevArticle);
-                $("#contents_nav_right").html(nextArticle);
-              }
-              html +=
-                "<li class='level_" +
-                element.level +
-                "'>" +
-                "<a href='../article/index.php?id=" +
-                element.article +
-                display +
-                "'>" +
-                element.title +
-                "</a></li>";
+            $("#article_title").html(result.title);
+            if (result.subtitle) {
+              $("#article_subtitle").html(result.subtitle);
             }
+            $("#article_author").html(
+              result.username.nickname + "@" + result.username.username
+            );
+            $("#contents").html(marked(result.summary));
 
-            html += "</ul>";
+            let article_list = JSON.parse(result.article_list);
+            render_article_list(article_list);
+          }
+        } catch (e) {
+          console.error(e);
+        }
+      } else {
+        console.error("ajex error");
+      }
+    }
+  );
+}
 
-            $("#toc_content").html(html);
+function articel_load_collect(article_id) {
+  $.get(
+    "../article/collect_get.php",
+    {
+      article: article_id,
+      setting: "",
+    },
+    function (data, status) {
+      if (status == "success") {
+        try {
+          let result = JSON.parse(data);
+          if (result && result.length > 0) {
+            $("#collect_title").html(result[0].title);
+            let article_list = JSON.parse(result[0].article_list);
+            render_article_list(article_list);
           }
         } catch (e) {
           console.error(e);
@@ -111,6 +102,58 @@ function articel_load_collect(article_id) {
   );
 }
 
+function render_article_list(article_list) {
+  let html = "";
+  html += "<ul>";
+  let display = "";
+  if (_display == "para") {
+    display = "&display=para";
+  }
+  let prevArticle = "无";
+  let nextArticle = "无";
+  for (let index = 0; index < article_list.length; index++) {
+    const element = article_list[index];
+    if (element.article == _articel_id) {
+      if (index > 0) {
+        const prev = article_list[index - 1];
+        prevArticle =
+          "<a href='../article/index.php?id=" +
+          prev.article +
+          display +
+          "'>" +
+          prev.title +
+          "</a>";
+      }
+      if (index < article_list.length - 1) {
+        const next = article_list[index + 1];
+        nextArticle =
+          "<a href='../article/index.php?id=" +
+          next.article +
+          display +
+          "'>" +
+          next.title +
+          "</a>";
+      }
+      $("#contents_nav_left").html(prevArticle);
+      $("#contents_nav_right").html(nextArticle);
+    }
+    html +=
+      "<li class='level_" +
+      element.level +
+      "'>" +
+      "<a href='../article/index.php?id=" +
+      element.article +
+      display +
+      "'>" +
+      element.title +
+      "</a></li>";
+  }
+
+  html += "</ul>";
+
+  $("#toc_content").html(html);
+}
+
 function set_channal(channalid) {
   let url = "../article/index.php?id=" + _articel_id;
   if (channalid != "") {

+ 2 - 2
app/article/collect_get.php

@@ -10,8 +10,8 @@ require_once '../ucenter/function.php';
 if(isset($_GET["id"])){
     PDO_Connect("sqlite:"._FILE_DB_USER_ARTICLE_);
     $id=$_GET["id"];
-    $query = "select * from collect  where id = ".$PDO->quote($id);
-    $Fetch = PDO_FetchRow($query);
+    $query = "select * from collect  where id = ? ";
+    $Fetch = PDO_FetchRow($query,array($id));
     if($Fetch){
         $userinfo = new UserInfo();
         $user = $userinfo->getName($Fetch["owner"]);

+ 78 - 61
app/article/index.php

@@ -4,22 +4,26 @@ require_once "../path.php";
 require_once "../pcdl/html_head.php";
 ?>
 <body style="margin: 0;padding: 0;" class="reader_body" >
-	<script src="../term/term.js"></script>
-	<script src="../term/note.js"></script>
+
 	<script src="../channal/channal.js"></script>
 	<script src="./article.js"></script>
-	<script src="../public/js/jquery-ui-1.12.1/jquery-ui.js"></script>
-	<link type="text/css" rel="stylesheet" href="../term/term.css"/>
-	<link type="text/css" rel="stylesheet" href="../public/js/jquery-ui-1.12.1/jquery-ui.css"/>
+
+	<script src="../widget/click_dropdown.js"></script>
+	<link type="text/css" rel="stylesheet" href="../widget/click_dropdown.css"/>
+
 	<script>
 	<?php
 	$_id = "";
 	$_display = "";
 	$_channal  = "";
+	$_collect = "";
 
 	if(isset($_GET["id"])){
 		echo "_articel_id='".$_GET["id"]."';";
 	}
+	if(isset($_GET["collect"])){
+		echo "_collect_id='".$_GET["collect"]."';";
+	}
 	if(isset($_GET["display"])){
 		echo "_display='".$_GET["display"]."';";
 	}
@@ -52,34 +56,7 @@ require_once "../pcdl/html_head.php";
 		font-size: 120%;
 		font-weight: 700;		
 	}
-	.term_word_head_pali {
-		text-transform: capitalize;
-		font-size: 200%;
-		margin: 0.5em 0;
-	}
-	.term_word_head{
-		border-bottom: 1px solid #cecece;
-		padding: 5px 0;
-	}
-	.term_block{
-		border-bottom: 1px solid #cecece;
-		padding: 5px 0;
-	}
-	.term_word_head_authors a{
-		color: blue;
-		margin: 0 3px;
-	}
-	.term_word_head_authors a:hover{
-		text-decoration: underline;
-		cursor: pointer;
-	}
 
-	note .ref{
-		text-align: right;
-		padding: 5px;
-		font-size: 75%;
-		margin-top: 8px;
-	}
 	note{
 		padding: 0.5em 0.8em;
 		margin-bottom: 0.4em;
@@ -95,24 +72,7 @@ require_once "../pcdl/html_head.php";
 		}
 		?>
 	}
-	note>.tran{
-		color: #5c5c5c;
-		padding-left: 1em;
-	}
-	note>.palitext , .palitext{
-		font-family: Noto serif;
-		line-height: 1.5em;
-		color: #9f3a01;
-		font-weight: 500;
-	}
-	note>.palitext>note{
-		display:inline;
-		color:blue;
-		background-color: unset;
-		padding: unset;
-		margin-bottom: unset;
-		border-radius: unset;
-	}
+
 
 
 	.term_block_bar {
@@ -166,7 +126,7 @@ require_once "../pcdl/html_head.php";
 		margin-right: 10px;
 		margin-bottom: 10px;
 	}
-	.fun_frame>.title{
+	.fun_frame .title{
 		padding:6px;
 		font-weight: 700;
 	}
@@ -275,6 +235,11 @@ require_once "../pcdl/html_head.php";
 	.ui-dialog{
 		box-shadow:  8px 8px 20px var(--border-shadow);
 	}
+	.active{
+		background-color: var(--btn-hover-bg-color);
+	}
+
+
 	</style>
 
 <style media="screen and (max-width:767px)">
@@ -313,13 +278,39 @@ term_word_link_fun("wiki_goto_word");
 		<span>
 		<?php
 		echo "<button class='icon_btn'><a href='../article/my_article_edit.php?id=".$_GET["id"];
-		echo "'>{$_local->gui->edit_now}</a></button>";
-		echo "<button class='icon_btn'><a href='../article/?id=".$_GET["id"];
-		echo "&display=para";
-		echo "'>{$_local->gui->each_paragraph}</a></button>";
-		echo "<button class='icon_btn'><a href='../article/?id=".$_GET["id"];
-		echo "&display=sent";
-		echo "'>{$_local->gui->each_sentence}</a></button>";
+		echo "'>Open in Studio</a></button>";
+		
+		if(isset($_GET["display"]) && $_GET["display"]=="para"){
+			echo "<button class='icon_btn active'>";
+			echo $_local->gui->each_paragraph;
+			echo "</button>";
+		}
+		else{
+			echo "<button class='icon_btn'>";
+			echo "<a href='../article/?id=".$_GET["id"];
+			if(isset($_GET["channal"])){
+				echo "&channal=".$_GET["channal"];
+			}
+			echo "&display=para'>";		
+			echo $_local->gui->each_paragraph;
+			echo "</a>";
+			echo "</button>";
+		}
+
+		if(isset($_GET["display"]) && $_GET["display"]=="sent"){
+			echo "<button class='icon_btn active'>";
+			echo $_local->gui->each_sentence;
+			echo "</button>";
+		}
+		else{
+			echo "<button class='icon_btn'><a href='../article/?id=".$_GET["id"];
+			if(isset($_GET["channal"])){
+				echo "&channal=".$_GET["channal"];
+			}
+			echo "&display=sent";
+			echo "'>{$_local->gui->each_sentence}</a></button>";
+		}
+
 		?>
 			<button class='icon_btn'><a href="#"><?php echo $_local->gui->help; ?></a></button>
 		</span>
@@ -353,7 +344,21 @@ term_word_link_fun("wiki_goto_word");
 			</div>
 		</div>
 		<div class="fun_frame">
-			<div class="title"><?php echo $_local->gui->channels; ?></div>
+			<div style="display:flex;justify-content: space-between;">
+				<div class="title"><?php echo $_local->gui->channels; ?></div>
+				<div class="click_dropdown_div">
+					<div class="click_dropdown_button">more</div>
+					<div class="click_dropdown_content">
+						<div class="click_dropdown_content_inner" id="channal_select">
+						列表
+						</div>
+						<div>
+						<button class="icon_btn click_dropdown_ok">Ok</button>
+						<button class="icon_btn click_dropdown_cancel">Cancel</button>
+						</div>
+					</div>	
+				</div>
+			</div>
 			<div id="channal_list" class="content" style="max-height:20em;">
 			</div>
 		</div>
@@ -367,9 +372,21 @@ term_word_link_fun("wiki_goto_word");
 </div>
 
 <script>
+	$(document).ready(function(){
+	ntf_init();				
+	click_dropdown_init();
 	note_create();
-	articel_load(_articel_id);
-	articel_load_collect(_articel_id);
+	term_edit_dlg_init();
+	if(_collect_id==""){
+		articel_load(_articel_id);
+		articel_load_collect(_articel_id);
+	}
+	else{
+		collect_load(_collect_id);
+	}
+	});
+
+
 
 	 window.addEventListener('scroll',winScroll);
 	function winScroll(e){ 

+ 58 - 14
app/article/my_article.js

@@ -30,11 +30,15 @@ function my_article_list() {
             html +=
               "<div style='flex:1;'><a href='../article/my_article_edit.php?id=" +
               iterator.id +
-              "'>" + gLocal.gui.edit + "</a></div>";
+              "'>" +
+              gLocal.gui.edit +
+              "</a></div>";
             html +=
               "<div style='flex:1;'><a href='../article/?id=" +
               iterator.id +
-              "' target='_blank'>" + gLocal.gui.preview + "</a></div>";
+              "' target='_blank'>" +
+              gLocal.gui.preview +
+              "</a></div>";
             html += "<div style='flex:1;'>15</div>";
             html += "</div>";
           }
@@ -49,16 +53,36 @@ function my_article_list() {
   );
 }
 
-
 function render_status(status) {
   status = parseInt(status);
   let html = "";
   let objStatus = [
-    { id: 1, name: "<svg class='icon'><use xlink:href='../studio/svg/icon.svg#ic_lock'></use></svg>" + gLocal.gui.private, tip: gLocal.gui.private_note },
-    { id: 2, name: "<svg class='icon'><use xlink:href='../studio/svg/icon.svg#eye_disable'></use></svg>" + gLocal.gui.unlisted, tip: gLocal.gui.unlisted_note },
-    { id: 3, name: "<svg class='icon'><use xlink:href='../studio/svg/icon.svg#eye_enable'></use></svg>" + gLocal.gui.public, tip: gLocal.gui.public_note },
+    {
+      id: 1,
+      name:
+        "<svg class='icon'><use xlink:href='../studio/svg/icon.svg#ic_lock'></use></svg>" +
+        gLocal.gui.private,
+      tip: gLocal.gui.private_note,
+    },
+    {
+      id: 2,
+      name:
+        "<svg class='icon'><use xlink:href='../studio/svg/icon.svg#eye_disable'></use></svg>" +
+        gLocal.gui.unlisted,
+      tip: gLocal.gui.unlisted_note,
+    },
+    {
+      id: 3,
+      name:
+        "<svg class='icon'><use xlink:href='../studio/svg/icon.svg#eye_enable'></use></svg>" +
+        gLocal.gui.public,
+      tip: gLocal.gui.public_note,
+    },
   ];
-  html += "<span style='flex:3;margin:auto;'>" + gLocal.gui.privacy + '</span><div class="case_dropdown"  style="flex:7;">';
+  html +=
+    "<span style='flex:3;margin:auto;'>" +
+    gLocal.gui.privacy +
+    '</span><div class="case_dropdown"  style="flex:7;">';
   html += '<input type="hidden" name="status"  value ="' + status + '" />';
 
   for (const iterator of objStatus) {
@@ -66,7 +90,8 @@ function render_status(status) {
       html += "<div >" + iterator.name + "</div>";
     }
   }
-  html += '<div id="privacy_list" class="case_dropdown-content" style="background-color: var(--detail-color); color: var(--btn-color);">';
+  html +=
+    '<div id="privacy_list" class="case_dropdown-content" style="background-color: var(--detail-color); color: var(--btn-color);">';
 
   for (const iterator of objStatus) {
     let active = "";
@@ -82,6 +107,8 @@ function render_status(status) {
   return html;
 }
 
+function setStatus(obj) {}
+
 function my_article_edit(id) {
   $.get(
     "../article/get.php",
@@ -109,16 +136,30 @@ function my_article_edit(id) {
             result.status +
             "'/>";
 
-          html += "<input type='checkbox' name='import' />" + gLocal.gui.import + gLocal.gui.text;
+          html +=
+            "<input type='checkbox' name='import' />" +
+            gLocal.gui.import +
+            gLocal.gui.text;
           html += "<div>";
           html += "<div id='article_collect' vui='collect-dlg' ></div>"
           html += "<div style='display:flex;'>";
-          html += "<span style='flex:3;margin:auto;'>" + gLocal.gui.title + "</span>"
+          html +=
+            "<span style='flex:3;margin:auto;'>" + gLocal.gui.title + "</span>";
           html += '<span id="article_title" style="flex:7;"></span></div>';
-          html += "<div id='channal_selector' form_name='channal' style='display:flex;'></div>";
-          html += "<div id='aritcle_status' style='display: flex; width: 100 %;'></div>";
           html +=
-            '<div style="display:flex;width:100%;" ><span style="flex:3;margin: auto;">' + gLocal.gui.language_select + '</span>	<input id="article_lang_select"  style="flex:7;" type="input" onchange="article_lang_change()"  placeholder="' + gLocal.gui.input + " & " + gLocal.gui.language_select + ',' + gLocal.gui.example + ':Engilish" code="' +
+            "<div id='channal_selector' form_name='channal' style='display:flex;'></div>";
+          html +=
+            "<div id='aritcle_status' style='display: flex; width: 100 %;'></div>";
+          html +=
+            '<div style="display:flex;width:100%;" ><span style="flex:3;margin: auto;">' +
+            gLocal.gui.language_select +
+            '</span>	<input id="article_lang_select"  style="flex:7;" type="input" onchange="article_lang_change()"  placeholder="' +
+            gLocal.gui.input +
+            " & " +
+            gLocal.gui.language_select +
+            "," +
+            gLocal.gui.example +
+            ':Engilish" code="' +
             result.lang +
             '" value="' +
             result.lang +
@@ -223,7 +264,10 @@ function course_validate_required(field, alerttxt) {
 
 function course_validate_form(thisform) {
   with (thisform) {
-    if (course_validate_required(title, gLocal.gui.title_necessary + "!") == false) {
+    if (
+      course_validate_required(title, gLocal.gui.title_necessary + "!") ==
+      false
+    ) {
       title.focus();
       return false;
     }

+ 26 - 15
app/article/my_article_edit.php

@@ -64,18 +64,28 @@ require_once '../studio/index_head.php';
 	<div class="file_list_block">
 		<div class="tool_bar" style="width:50%;">
 			<div style="display:flex;">
-				<button class="icon_btn" title=<?php echo $_local->gui->back ;?>>
-					<a href="../article/my_article_index.php" >
-					<svg class="icon">
-						<use xlink:href="../studio/svg/icon.svg#return"></use>
-					</svg>
-				</a></button>
-				<button onclick='article_preview()'  class="icon_btn" title=<?php echo $_local->gui->preview ;?>>
-					<svg class="icon">
-						<use xlink:href="../studio/svg/icon.svg#preview"></use>
-					</svg>
-				</button>
-				
+
+				<span class="icon_btn_div">
+					<span class="icon_btn_tip"><?php echo $_local->gui->back ;?></span>
+					<button id="icon_btn" type="button" class="icon_btn"  onclick="my_article_save()">
+						<a href="../article/my_article_index.php" >
+							<svg class="icon">
+								<use xlink:href="../studio/svg/icon.svg#return"></use>
+							</svg>
+						</a>
+					</button>
+				</span>
+
+				<span class="icon_btn_div">
+					<span class="icon_btn_tip"><?php echo $_local->gui->preview ;?></span>
+					<button onclick='article_preview()'  class="icon_btn" >
+						<svg class="icon">
+							<use xlink:href="../studio/svg/icon.svg#preview"></use>
+						</svg>
+					</button>
+				</span>
+
+				<div id="article_collect" vui='collect-dlg' ></div>
 			</div>
 			<div style="display:flex;">
 				<div>
@@ -87,9 +97,10 @@ require_once '../studio/index_head.php';
 						</a>
 					</button>
 				</div>
-					<span class="icon_btn_div">
-					<span class="icon_btn_tip"></span>
-					<button id="edit_save" type="button" class="icon_btn" title=<?php echo $_local->gui->save ;?> onclick="my_article_save()">
+
+				<span class="icon_btn_div">
+					<span class="icon_btn_tip"><?php echo $_local->gui->save ;?></span>
+					<button id="edit_save" type="button" class="icon_btn"  onclick="my_article_save()">
 						<svg class="icon">
 							<use xlink:href="../studio/svg/icon.svg#ic_save"></use>
 						</svg>

+ 1 - 1
app/article/my_collect.js

@@ -31,7 +31,7 @@ function my_collect_list() {
               iterator.id +
               "'>Edit</a></div>";
             html +=
-              "<div style='flex:1;'><a href='../article/?id=" +
+              "<div style='flex:1;'><a href='../article/?collect=" +
               iterator.id +
               "' target='_blank'>Preview</a></div>";
             html += "<div style='flex:1;'>15</div>";

+ 1 - 1
app/article/my_collect_edit.php

@@ -64,7 +64,7 @@ require_once '../studio/index_head.php';
 			<div style="display:flex;">
 				<div id="aritcle_status"></div>
 				<span class="icon_btn_div">
-					<span class="icon_btn_tip">保存</span>
+					<span class="icon_btn_tip">Save</span>
 					<button id="edit_save" type="button" class="icon_btn" title=" " onclick="my_collect_save()">
 						<svg class="icon">
 							<use xlink:href="../studio/svg/icon.svg#ic_save"></use>

+ 56 - 0
app/collect/index.js

@@ -0,0 +1,56 @@
+function collect_load(begin = 0) {
+  $.get(
+    "list.php",
+    {
+      begin: begin,
+    },
+    function (data, status) {
+      let arrCollectList = JSON.parse(data);
+      let html = "";
+      for (const iterator of arrCollectList.data) {
+        html += "<div style='width:25%;padding:0.5em;'>";
+        html += "<div class='card' style='padding:10px;'>";
+        html +=
+          "<div class='' style='position: absolute;background-color: #862002;margin-top: -10px;margin-left: 12em;color: white;padding: 0 3px;display: inline-block;'>" +
+          "done</div>";
+        html += "<div style='font-weight:700'>";
+        html +=
+          "<a href='../article/?collect=" +
+          iterator.id +
+          "'>" +
+          iterator.title +
+          "</a>";
+        html += "</div>";
+
+        html += "<div style=''>" + iterator.subtitle + "</div>";
+
+        html += "<div style=''>" + iterator.username.nickname + "</div>";
+
+        html += "<div style=''>" + iterator.summary + "</div>";
+
+        html +=
+          "<div style='overflow-wrap: anywhere;'>" + iterator.tag + "</div>";
+        const article_limit = 4;
+        let article_count = 0;
+        let article_list = JSON.parse(iterator.article_list);
+        for (const article of article_list) {
+          html += "<div>";
+          html +=
+            "<a href='../article/?id=" +
+            article.article +
+            "' target='_blank'>" +
+            article.title +
+            "</a>";
+          html += "</div>";
+          article_count++;
+          if (article_count > article_limit) {
+            break;
+          }
+        }
+        html += "</div>";
+        html += "</div>";
+      }
+      $("#book_list").html(html);
+    }
+  );
+}

+ 94 - 0
app/collect/index.php

@@ -0,0 +1,94 @@
+<?PHP
+include "../pcdl/html_head.php";
+?>
+<body>
+
+<?php
+    require_once("../pcdl/head_bar.php");
+?>
+	<script language="javascript" src="../collect/index.js"></script>
+
+<style>
+    #main_tag span{
+        margin: 2px;
+        padding: 2px 12px;
+        font-weight: 500;
+        transition-duration: 0.2s;
+        cursor: pointer;
+        display: inline-flex;
+        align-items: center;
+        flex-wrap: nowrap;
+        justify-content: center;
+        font-size:110%;
+        border: unset;
+        border-radius: 0;
+        border-bottom: 2px solid var(--nocolor);
+    }
+    #main_tag span:hover{
+        background-color:unset;
+        color:unset;
+        border-color: var(--link-hover-color);
+    }
+    #main_tag .select{
+        border-bottom: 2px solid var(--link-color);
+    }
+    tag{
+    background-color: var(--btn-color);
+    margin: 0 0.5em;
+    padding: 3px 5px;
+    border-radius: 6px;
+    display:inline-flex;
+    border: 1.5px solid;
+    border-color: #70707036;
+    }
+    tag .icon:hover{
+        background-color: silver;
+    }
+</style>
+
+<?php
+//
+
+require_once "../path.php";
+require_once "../public/_pdo.php";
+require_once '../media/function.php';
+require_once '../public/function.php';
+?>
+<div id='course_head_bar' style='background-color:var(--tool-bg-color1);padding:1em 10px 10px 10px;'>
+    <div class='index_inner '>
+        <div style='font-size:140%'>
+            <span style="display:inline-block;width:20em;"><input type="input" placeholder='title or author' style="background-color:var(--btn-bg-color);" /></span>
+            <button>搜索</button>
+        </div>
+        <div id="main_tag"  style="">
+            <span tag="sutta">Sila</span>
+            <span tag="vinaya">Samathi</span>
+            <span tag="abhidhamma">Panna</span>
+            <span tag="mūla">Story</span>
+        </div>
+        <div id="tag_selected" class=""  style="padding-bottom:5px;margin:0.5em 0;"></div>
+        <div level="0" class="tag_others"  style="padding-bottom:5px;">Author:</div>
+        <div level="1" class="tag_others"  style="padding-bottom:5px;">Language:</div>
+        <div level="8" class="tag_others"  style="padding-bottom:5px;">
+            <select>
+                <option>时间</option>
+                <option>人气</option>
+            </select>
+        </div>
+    </div>
+</div>
+
+<div id ="book_list" class='index_inner' style='display: flex;flex-wrap: wrap;'>
+
+</div>
+<div id="page_bottom" style="height:10em;">
+loading
+</div>
+<script>
+$(document).ready(function(){
+    collect_load();
+});
+</script>
+<?php
+include "../pcdl/html_foot.php";
+?>

+ 61 - 0
app/collect/list.php

@@ -0,0 +1,61 @@
+<?php
+//查询term字典
+
+require_once "../path.php";
+require_once "../public/_pdo.php";
+require_once '../public/function.php';
+require_once '../ucenter/function.php';
+
+
+$onepage = 40;
+if(isset($_GET["page"])){
+    $onepage = $_GET["page"];
+}
+if(isset($_GET["begin"])){
+    if($_GET["begin"]>=0){
+        $begin=$_GET["begin"];
+    }
+    else{
+        echo json_encode(array("data"=>array(),"next"=>-1), JSON_UNESCAPED_UNICODE);
+        exit;
+    }
+}
+else{
+    $begin = 0;
+}
+    PDO_Connect("sqlite:"._FILE_DB_USER_ARTICLE_);
+    $query = "SELECT * FROM collect  where  1 ";
+    if(isset($_GET["orderby"])){
+        switch ($_GET["orderby"]) {
+            case 'like':
+                # code...
+                $query .="ORDER BY  DESC";
+                break;
+            
+            default:
+                # code...
+                break;
+        }
+    }
+    else{
+        $query .="ORDER BY modify_time DESC";
+    }
+    $query .=" LIMIT ? , ? ";
+    $Fetch = PDO_FetchAll($query,array($begin,$onepage));
+    foreach ($Fetch as $key => $value) {
+        # code...
+        $userinfo = new UserInfo();
+        $user = $userinfo->getName($value["owner"]);
+        $Fetch[$key]["username"] = $user;
+    }
+
+    $output = array();
+    $output["data"] =  $Fetch;
+    if(count($Fetch)==$onepage){
+        $output["next"] =  $begin+$onepage;
+    }
+    else{
+        $output["next"] = -1;
+    }
+
+    echo json_encode($output, JSON_UNESCAPED_UNICODE);

+ 19 - 0
app/pcdl/css/font.css

@@ -240,6 +240,25 @@
     url(../../../font/NotoSerif/NotoSerif-BlackItalic.ttf) format("truetype");
   font-display: fallback;
 }
+
+/*缅文*/
+@font-face {
+  font-family: "Padauk";
+  font-style: normal;
+  font-weight: 400;
+  src: local("Padauk"),
+    url(../../../font/Padauk/Padauk-Regular.ttf) format("truetype");
+  font-display: fallback;
+}
+
+@font-face {
+  font-family: "Padauk";
+  font-style: normal;
+  font-weight: 700;
+  src: local("Padauk Bold"),
+    url(../../../font/Padauk/Padauk-Bold.ttf) format("truetype");
+  font-display: fallback;
+}
 /*中文繁體*/
 
 @font-face {

+ 1 - 1
app/pcdl/css/style.css

@@ -18,7 +18,7 @@
 }
 
 body {
-    font-family: 'Noto Sans', 'Noto Sans SC', 'Noto Sans TC', Arial, Verdana;
+    font-family: 'Noto Sans', 'Noto Sans SC', 'Noto Sans TC','Padauk', Arial, Verdana;
     font-style: normal;
     color: var(--main-color);
     font-weight: 400;

+ 1 - 0
app/pcdl/head_bar.php

@@ -216,6 +216,7 @@
 					<li><a class="nav_link" href="../course"><?php echo $_local->gui->lesson; ?></a></li>
 					<li><a class="nav_link" href="../wiki"><?php echo $_local->gui->encyclopedia; ?></a></li>
 					<li><a class="nav_link" href="../dict"><?php echo $_local->gui->dictionary; ?></a></li>
+					<li><a class="nav_link" href="../collect"><?php echo 'Collect'; ?></a></li>
 					<li class="nav_link head_nav_dropdown" >
 						<div><?php echo $_local->gui->more; ?></div>
 						<ul class="head_nav_dropdown_content" style="margin-top: 0em;top: 2em;margin-left:-0.5em;padding-bottom: 0.5em;">

+ 14 - 2
app/pcdl/html_head.php

@@ -28,7 +28,7 @@ else{
     <link type="text/css" rel="stylesheet" href="../pcdl/css/style.css"/>
     <link type="text/css" rel="stylesheet" href="../pcdl/css/color_day.css" id="colorchange" />
     <link type="text/css" rel="stylesheet" href="../pcdl/css/style_mobile.css" media="screen and (max-width:767px)">
-
+	<link href="https://fonts.googleapis.com/css2?family=Padauk:wght@400;700&display=swap" rel="stylesheet">
 
     <title>wikipāḷi</title>
 
@@ -40,6 +40,19 @@ else{
 
 	<script src="../public/js/marked.js"></script>
 	<script src="../public/js/mermaid.min.js"></script>
+
+	<script src="../public/js/notify.js"></script>
+    <link type="text/css" rel="stylesheet" href="../public/css/notify.css"/>
+
+	<script src="../public/js/jquery-ui-1.12.1/jquery-ui.js"></script>
+	<link type="text/css" rel="stylesheet" href="../public/js/jquery-ui-1.12.1/jquery-ui.css"/>	
+
+	<script src="../term/term.js"></script>
+	<script src="../term/note.js"></script>
+	<script src="../term/term_popup.js"></script>
+	<link type="text/css" rel="stylesheet" href="../term/term.css"/>
+	<script src="../term/term_edit_dlg.js"></script>
+	<link type="text/css" rel="stylesheet" href="../term/term_edit_dlg.css"/>	
 	
 	<script >
 	<?php require_once '../public/load_lang_js.php';?>
@@ -86,6 +99,5 @@ else{
 	white-space: normal;
 }
 
-
 	</style>
 </head>

+ 81 - 0
app/pcdl/index.js

@@ -0,0 +1,81 @@
+function index_onload() {
+  index_load_term_new();
+  index_load_collect_new();
+  index_load_course_new();
+}
+
+function index_load_collect_new() {
+  $.get(
+    "../collect/list.php",
+    {
+      begin: 0,
+      page: 4,
+    },
+    function (data, status) {
+      let arrCollectList = JSON.parse(data);
+      let html = "";
+      for (const iterator of arrCollectList.data) {
+        html += "<div style='width:25%;padding:0.5em;'>";
+        html += "<div class='card' style='padding:10px;'>";
+        html +=
+          "<div class='' style='position: absolute;background-color: #862002;margin-top: -10px;margin-left: 12em;color: white;padding: 0 3px;display: inline-block;'>" +
+          "done</div>";
+        html += "<div style='font-weight:700'>";
+        html +=
+          "<a href='../article/?collect=" +
+          iterator.id +
+          "'>" +
+          iterator.title +
+          "</a>";
+        html += "</div>";
+
+        html += "<div style=''>" + iterator.subtitle + "</div>";
+
+        html += "<div style=''>" + iterator.username.nickname + "</div>";
+
+        html += "<div style=''>" + iterator.summary + "</div>";
+
+        html +=
+          "<div style='overflow-wrap: anywhere;'>" + iterator.tag + "</div>";
+        const article_limit = 4;
+        let article_count = 0;
+        let article_list = JSON.parse(iterator.article_list);
+        for (const article of article_list) {
+          html += "<div>";
+          html +=
+            "<a href='../article/?id=" +
+            article.article +
+            "' target='_blank'>" +
+            article.title +
+            "</a>";
+          html += "</div>";
+          article_count++;
+          if (article_count > article_limit) {
+            break;
+          }
+        }
+        html += "</div>";
+        html += "</div>";
+      }
+      $("#article_new").html(html);
+    }
+  );
+}
+
+function index_load_term_new() {
+  $.get("../term/new.php", function (data, status) {
+    let xDiv = document.getElementById("pali_pedia");
+    if (xDiv) {
+      xDiv.innerHTML = data;
+    }
+  });
+}
+
+function index_load_course_new() {
+  $.get("../course/list_new.php", function (data, status) {
+    let xDiv = document.getElementById("course_list_new");
+    if (xDiv) {
+      xDiv.innerHTML = data;
+    }
+  });
+}

+ 15 - 34
app/pcdl/index.php

@@ -2,6 +2,7 @@
 require_once '../pcdl/html_head.php';
 ?>
 <body >	
+<script language="javascript" src="../pcdl/index.js"></script>
 
 <style>
 	.content_block{
@@ -51,69 +52,49 @@ require_once '../pcdl/html_head.php';
 
 <div class="index_list_categories">
 		<div class="title_bar">
-			<span class="title h3">圣典</span>	
-			<span class="title_more"><a href="../palicanon">更多</a></span>
+			<span class="title h3">Collect</span>	
+			<span class="title_more"><a href="../collect">more</a></span>
 		</div>
 		<div class="content">
 			<div id="article_new" class="content_inner">
-
 			</div>
 		</div>
 	</div>
-	<script>
-	$.get("../article/list_new.php",function(data,status){
-		let xDiv = document.getElementById("article_new");
-		if(xDiv){
-			xDiv.innerHTML=data;
-		}
-	});
-	</script>	
 	
 	<div class="index_list_categories">
 		<div class="title_bar">
-			<span class="title h3">课程</span>	
-			<span class="title_more"><a href="../course">更多</a></span>
+			<span class="title h3">Course</span>	
+			<span class="title_more"><a href="../course">more</a></span>
 		</div>
 		<div class="content">
 			<div id="course_list_new" class="content_inner">
-
-
-
 			</div>
 		</div>
 	</div>
-	<script>
-	$.get("../course/list_new.php",function(data,status){
-		let xDiv = document.getElementById("course_list_new");
-		if(xDiv){
-			xDiv.innerHTML=data;
-		}
-	});
-	</script>	
+
 
     
 	<div class="index_list_categories">
 		<div class="title_bar">
-			<span class="title h3">百科</span>	
-			<span class="title_more"><a href="../wiki">更多</a></span>
+			<span class="title h3">Pali Term</span>	
+			<span class="title_more"><a href="../wiki">more</a></span>
 		</div>
 		<div class="content">
 			<div id="pali_pedia" class="content_inner">
 			</div>
 		</div>
 	</div>
-	<script>
-	$.get("../term/new.php",function(data,status){
-		let xDiv = document.getElementById("pali_pedia");
-		if(xDiv){
-			xDiv.innerHTML=data;
-		}
-	});
-	</script>	
+
 
     </div>
 
+	<script>
+	$(document).ready(function(){
+		index_onload();
+});
+
 
+	</script>	
 	
 
 <?php

+ 549 - 0
app/public/js/term-.js

@@ -0,0 +1,549 @@
+var arrTerm = new Array();
+var arrTerm2 = new Array();
+var arrMyTerm = new Array();
+var arrAllMean = new Array();
+var arrTermAllPali = new Array();
+var arrWordIdTermId = new Array();
+
+var strTermTanslationTmp = "[%mean%](%pali% %mean2% %mymean%)";
+var strTermTanslationTmp2 = "[%mean%]";
+var termCounter = new Array();
+var noteCounter = 0; //正文内注释计数器
+
+function note(noteId, strDef = "unkow") {
+  document.write("haha");
+}
+
+function note_replace(strIn) {
+  /*
+	
+	*/
+  var output = strIn.replace("/*", "<script>");
+  output = output.replace("*/", "</script>");
+  return output;
+}
+
+//将存储状态的字符串转换为预显示字符串
+//设置状态为 0:未处理的原始状态
+function term_std_str_to_tran(strIn) {
+  return strIn
+    .replace(/\[\[/g, "<term status='0'>")
+    .replace(/\]\]/g, "</term>");
+}
+
+function term_std_str_to_edit(strIn) {
+  var arrText = strIn.split("/");
+  for (var i in arrText) {
+    //头尾是*
+    if (
+      arrText[i].substring(0, 1) == "*" &&
+      arrText[i].substring(arrText[i].length - 1) == "*"
+    ) {
+      var arrOneTermWord = arrText[i].split("@");
+      if (arrOneTermWord.length == 2) {
+        arrText[i] = "*" + arrOneTermWord[1];
+      }
+    }
+  }
+
+  return arrText.join("/");
+}
+
+function term_tran_edit_replace(strIn) {
+  var strEdit = strIn;
+  for (var x = 0; x < arrTerm2.length; x++) {
+    var strReplace =
+      "strEdit=strEdit.replace(/" +
+      arrTerm2[x].meaning +
+      '/g,"/*' +
+      arrTerm2[x].meaning +
+      '*/")';
+    eval(strReplace);
+  }
+  //strEdit=strEdit.replace(/\/*\/*/g,"\/*");
+  //strEdit=strEdit.replace(/\*\/\*\//g,"*\/");
+  return strEdit;
+}
+
+function term_edit_to_std_str(strIn) {
+  var arrText = strIn.split("/");
+  for (var i in arrText) {
+    //头尾是*
+    if (
+      arrText[i].substring(0, 1) == "*" &&
+      arrText[i].substring(arrText[i].length - 1) == "*"
+    ) {
+      var wordMeaning = arrText[i].substring(1, arrText[i].length - 1);
+      arrText[i] = "*" + term_get_std_str(wordMeaning) + "*";
+    }
+  }
+  return arrText.join("/");
+}
+function term_get_std_str(strMean) {
+  for (var x = 0; x < arrTerm2.length; x++) {
+    if (arrTerm2[x].meaning == strMean) {
+      return arrTerm2[x].guid + "@" + strMean;
+    }
+  }
+  return "unkow@" + strMean;
+}
+function term_get_my_std_str(strMean) {
+  for (var x in arrMyTerm) {
+    if (arrMyTerm[x].meaning == strMean) {
+      return arrMyTerm[x].guid + "@" + strMean;
+    }
+  }
+  return "unkow@" + strMean;
+}
+
+function note_lookup(word, showto) {
+  $("#" + showto).load("term.php?op=search&word=" + word, function (
+    responseTxt,
+    statusTxt,
+    xhr
+  ) {
+    if (statusTxt == "success") {
+      $(".term_note").each(function (index, element) {
+        $(this).html(note_init($(this).html()));
+        $(this).attr("status", 1);
+        note_refresh_new();
+      });
+    } else if (statusTxt == "error") {
+      console.error("Error: " + xhr.status + ": " + xhr.statusText);
+    }
+  });
+}
+
+function term_apply(guid) {
+  if (g_eCurrWord) {
+    setNodeText(g_eCurrWord, "note", "=term(" + guid + ")");
+    term_array_updata();
+  }
+}
+
+function term_data_copy_to_me(guid) {
+  $("#term_dict").load("term.php?op=copy&wordid=" + guid);
+}
+
+//我的术语字典进入编辑模式
+function term_edit(guid) {
+  $("#term_edit_btn1_" + guid).hide();
+  $("#term_edit_btn2_" + guid).show();
+  document.getElementById("term_dict_my_" + guid).style.display = "none";
+  document.getElementById("term_dict_my_edit_" + guid).style.display = "block";
+}
+
+//我的术语字典退出编辑模式
+function term_data_esc_edit(guid) {
+  $("#term_edit_btn1_" + guid).show();
+  $("#term_edit_btn2_" + guid).hide();
+  document.getElementById("term_dict_my_" + guid).style.display = "block";
+  document.getElementById("term_dict_my_edit_" + guid).style.display = "none";
+}
+//我的术语字典 编辑模式 保存
+
+function term_data_save(guid) {
+  if (guid == "") {
+    var strWord = $("#term_new_word").val();
+    var strMean = $("#term_new_mean").val();
+    var strMean2 = $("#term_new_mean2").val();
+    var strTag = $("#term_new_tag").val();
+    var strChannal = $("#term_new_channal").val();
+    var strLanguage = $("#term_new_language").val();
+    var strNote = $("#term_new_note").val();
+    let newTerm = new Object();
+    newTerm.guid = com_guid();
+    newTerm.word = strWord;
+    newTerm.meaning = strMean;
+    newTerm.other_meaning = strMean2;
+    newTerm.tag = strTag;
+    newTerm.channal = strChannal;
+    newTerm.language = strLanguage;
+
+    arrMyTerm.push(newTerm);
+  } else {
+    var strWord = $("#term_edit_word_" + guid).val();
+    var strMean = $("#term_edit_mean_" + guid).val();
+    var strMean2 = $("#term_edit_mean2_" + guid).val();
+    var strTag = $("#term_edit_tag_" + guid).val();
+    var strChannal = $("#term_edit_channal_" + guid).val();
+    var strLanguage = $("#term_edit_language_" + guid).val();
+    var strNote = $("#term_edit_note_" + guid).val();
+  }
+  $.get(
+    "term.php",
+    {
+      op: "save",
+      guid: guid,
+      word: strWord,
+      mean: strMean,
+      mean2: strMean2,
+      tag: strTag,
+      channal: strChannal,
+      language: strLanguage,
+      note: strNote,
+    },
+    function (data, status) {
+      try {
+        let result = JSON.parse(data);
+        if (result.status == 0) {
+          note_lookup(result.message, "term_dict");
+        } else {
+          ntf_show("term error" + result.message);
+        }
+      } catch (e) {
+        console.error("term_get_all_pali:" + e + " data:" + data);
+        ntf_show("term error");
+      }
+    }
+  );
+}
+function term_get_all_pali() {
+  $.get(
+    "term.php",
+    {
+      op: "allpali",
+    },
+    function (data, status) {
+      if (data.length > 0) {
+        try {
+          arrTermAllPali = JSON.parse(data);
+        } catch (e) {
+          console.error("term_get_all_pali:" + e + " data:" + data);
+        }
+      }
+    }
+  );
+}
+function term_lookup_all(pali) {
+  for (var x in arrTermAllPali) {
+    if (arrTermAllPali[x].word == pali) {
+      return arrTermAllPali[x];
+    }
+  }
+  return null;
+}
+
+function term_get_my() {
+  $.get(
+    "term.php",
+    {
+      op: "my",
+    },
+    function (data, status) {
+      if (data.length > 0) {
+        try {
+          arrMyTerm = JSON.parse(data);
+        } catch (e) {
+          console.error(e.error + " data:" + data);
+        }
+      }
+    }
+  );
+}
+
+//在我的术语字典里查询
+function term_lookup_my(pali) {
+  for (var x in arrMyTerm) {
+    if (arrMyTerm[x].meaning == pali) {
+      return arrMyTerm[x];
+    }
+    if (arrMyTerm[x].word == pali) {
+      return arrMyTerm[x];
+    }
+  }
+  return null;
+}
+function term_lookup_my_id(id) {
+  for (var x in arrMyTerm) {
+    if (arrMyTerm[x].guid == id) {
+      return arrMyTerm[x];
+    }
+  }
+  return null;
+}
+
+function term_get_all_meaning(word) {
+  $.get(
+    "term.php",
+    {
+      op: "allmean",
+      word: word,
+    },
+    function (data, status) {
+      $("#term_win_other_mean").html(data);
+    }
+  );
+}
+
+//刷新文档正在使用的术语数据
+function term_array_updata() {
+  arrTerm2 = new Array();
+  var arrTermDownLoadList = new Array();
+  var arrWordIdTermId = new Array();
+  var xAllWord = gXmlBookDataBody.getElementsByTagName("word");
+  for (var x = 0; x < xAllWord.length; x++) {
+    var sNote = getNodeText(xAllWord[x], "note");
+    var wid = getNodeText(xAllWord[x], "id");
+    if (sNote.substring(0, 6) == "=term(") {
+      var termId = sNote.slice(6, -1);
+      if (!arrTerm[termId]) {
+        arrTermDownLoadList.push(termId);
+      }
+      //person={wid:wid,tid:termId};
+      arrWordIdTermId.push({ wid: wid, tid: termId });
+    }
+  }
+  if (arrTermDownLoadList.length > 0) {
+    var idlist = arrTermDownLoadList.join();
+    idlist = idlist.replace(/,/g, "','");
+    idlist = "'" + idlist + "'";
+    $.get(
+      "term.php",
+      {
+        op: "extract",
+        list: idlist,
+      },
+      function (data, status) {
+        var obj = JSON.parse(data);
+        for (var x in obj) {
+          arrTerm[obj[x].guid] = obj[x];
+          arrTerm2.push(obj[x]);
+        }
+        if (g_eCurrWord) {
+          updataWordHeadById(getNodeText(g_eCurrWord, "id"));
+          refreshWordNote(g_eCurrWord.parentNode.parentNode);
+        }
+        for (var i = 0; i < arrWordIdTermId.length; i++) {
+          var wid = arrWordIdTermId[i].wid;
+          var sMean = arrTerm[arrWordIdTermId[i].tid].meaning;
+          doc_setWordDataById(wid, "mean", sMean);
+          updateWordBodyById(wid);
+        }
+      }
+    );
+  }
+}
+
+function term_updata_translation() {
+  termCounter = new Array();
+  noteCounter = 1;
+  $("term").each(function () {
+    let status = $(this).attr("status");
+    let termText = $(this).text();
+
+    if (termText.slice(0, 1) == "#") {
+      if (status == 0) {
+        $(this).attr("status", "1");
+        $(this).attr("type", "1");
+        $(this).attr("text", termText.slice(1));
+      }
+      let noteText = $(this).attr("text");
+      $(this).html(
+        "<a onclick=\"alert('" + noteText + "')\">[" + noteCounter + "]</a>"
+      );
+      noteCounter++;
+    } else {
+      if (status == 0) {
+        let myterm = term_lookup_my(termText); //我的术语字典
+        if (myterm) {
+          $(this).attr("status", "1");
+          $(this).attr("type", "0");
+          $(this).attr("guid", myterm.guid);
+          $(this).attr("pali", myterm.word);
+          $(this).attr("mean", myterm.meaning);
+          $(this).attr("mean2", myterm.other_meaning);
+          $(this).attr("replace", myterm.meaning);
+        } else {
+          $(this).attr("status", "2");
+        }
+      }
+      let guid = $(this).attr("guid");
+      let pali = $(this).attr("pali");
+      let mean = $(this).attr("mean");
+      let mean2 = $(this).attr("mean2");
+      var renderTo = $(this).attr("pos");
+      var noteText = "";
+
+      if (termCounter[guid]) {
+        termCounter[guid] = 2;
+      } else {
+        termCounter[guid] = 1;
+      }
+      var myterm = term_lookup_my(pali); //我的术语字典
+      let linkclass = "";
+      if (myterm) {
+        linkclass = "term_link";
+      } else {
+        linkclass = "term_link_new";
+      }
+      if (guid) {
+        if (renderTo == "wbw") {
+          noteText = "%note%";
+        } else {
+          if (termCounter[guid] == 1) {
+            noteText = strTermTanslationTmp;
+          } else {
+            noteText = strTermTanslationTmp2;
+          }
+        }
+
+        noteText = noteText.replace(
+          "[",
+          "<span class='" +
+            linkclass +
+            "' onclick=\"term_show_win('" +
+            guid +
+            "')\">"
+        );
+        noteText = noteText.replace("]", "</span>");
+        noteText = noteText.replace(
+          "%mean%",
+          "<span class='term_mean'>" + mean + "</span>"
+        );
+        noteText = noteText.replace(
+          "%pali%",
+          "<span class='term_pali'>" + pali + "</span>"
+        );
+        noteText = noteText.replace(
+          "%mean2%",
+          "<span class='term_mean2'>" + mean2 + "</span>"
+        );
+        noteText = noteText.replace(
+          "%note%",
+          "<span class='term_note'>" + "" + "</span>"
+        );
+        if (myterm) {
+          if (myterm.meaning != mean) {
+            noteText = noteText.replace(
+              "%mymean%",
+              "<span class='term_mean_my'>" + myterm.meaning + "</span>"
+            );
+          } else {
+            noteText = noteText.replace("%mymean%", "");
+          }
+        } else {
+          noteText = noteText.replace("%mymean%", "");
+        }
+      } else {
+        noteText =
+          "<span class='" +
+          linkclass +
+          "'  onclick=\"term_show_win('','" +
+          termText +
+          "')\">" +
+          termText +
+          "</span>";
+      }
+      $(this).html(noteText);
+    }
+  });
+}
+
+function term_show_win(guid, keyWord = "") {
+  if (guid == "") {
+    $(term_body).html(
+      "当前词条未创建。<br /><a onclick=\"term_add_new('" +
+        keyWord +
+        "')\">现在创建</a>"
+    );
+  } else {
+    let currWord = term_lookup_my_id(guid);
+    if (currWord) {
+      let termString = "";
+      let pali = currWord.word;
+      let pali_1 = pali.substring(0, 1).toUpperCase();
+      pali = pali_1 + pali.substring(1);
+      let mean = currWord.meaning;
+      let myterm = term_lookup_my(currWord.word); //我的术语字典
+      termString += "<div class='term_win_mean'>" + pali + "</div>";
+      termString +=
+        "<div class='term_win_pali'>意思:" + currWord.meaning + "</div>";
+      termString +=
+        "<div class='term_win_mean2'>其他意思:" +
+        currWord.other_meaning +
+        "</div>";
+      termString += "<div class='term_win_mymean'>我的词库:";
+      if (myterm) {
+        termString += "<b>" + myterm.meaning + "</b> ";
+      } else {
+        termString += "<input type='input'  placeholder='我的释义'>";
+      }
+      termString += "<span>其他:</span><span id='term_win_other_mean'></span>";
+      termString += "</div>";
+
+      if (currWord.note) {
+        termString += "<div class='term_win_note'>" + currWord.note + "</div>";
+      } else {
+        termString += "<div class='term_win_note'>Loading</div>";
+      }
+      $(term_body).html(termString);
+      term_get_all_meaning(currWord.word);
+
+      if (!currWord.note) {
+        $.get(
+          "term.php",
+          {
+            op: "load_id",
+            id: currWord.guid,
+          },
+          function (data, status, xhr) {
+            switch (status) {
+              case "success":
+                try {
+                  let loadWord = JSON.parse(data);
+                  $("#term_win_note").html(loadWord[0].note);
+                  //修改内存数据
+                  for (let x in arrMyTerm) {
+                    if (arrMyTerm[x].guid == loadWord[0].guid) {
+                      arrMyTerm[x].note = loadWord[0].note;
+                      return;
+                    }
+                  }
+                } catch (e) {
+                  console.error(e + " data:" + data);
+                }
+                break;
+              case "error":
+                console.error("Error: " + xhr.status + ": " + xhr.statusText);
+                break;
+            }
+          }
+        );
+      }
+    } else {
+      $(term_body).html("undefined guid");
+    }
+  }
+  document.getElementById("term_win").style.display = "flex";
+}
+
+function term_tmp(type, tmp) {
+  if (tmp == "new") {
+    switch (type) {
+      case "a":
+        strTermTanslationTmp = $("#term_my_tmp").val();
+        break;
+      case "a2":
+        strTermTanslationTmp2 = $("#term_my_tmp").val();
+        break;
+    }
+  } else {
+    switch (type) {
+      case "a":
+        strTermTanslationTmp = tmp;
+        break;
+      case "a2":
+        strTermTanslationTmp2 = tmp;
+        break;
+    }
+  }
+  term_updata_translation();
+}
+
+function term_add_new(keyword) {
+  document.getElementById("term_win").style.display = "none";
+  editor_show_right_tool_bar(true);
+  tab_click_b("term_dict", "tab_rb_dict");
+  note_lookup(keyword, "term_dict");
+}

+ 0 - 500
app/public/js/term.js

@@ -1,500 +0,0 @@
-var arrTerm = new Array();
-var arrTerm2 = new Array();
-var arrMyTerm = new Array();
-var arrAllMean = new Array();
-var arrTermAllPali = new Array();
-var arrWordIdTermId = new Array();
-
-var strTermTanslationTmp="[%mean%](%pali% %mean2% %mymean%)";
-var strTermTanslationTmp2="[%mean%]";
-var termCounter=new Array();
-var noteCounter=0; //正文内注释计数器
-
-function note(noteId,strDef="unkow"){
-	document.write("haha");
-}
-
-function note_replace(strIn){
-	/*
-	
-	*/
-	var output = strIn.replace("/*","<script>");
-	output = output.replace("*/","</script>");
-	return(output);
-}
-
-//将存储状态的字符串转换为预显示字符串
-//设置状态为 0:未处理的原始状态
-function term_std_str_to_tran(strIn){
-	return(strIn.replace(/\[\[/g,"<term status='0'>").replace(/\]\]/g,"</term>"));	
-}
-
-function term_std_str_to_edit(strIn){
-	var arrText = strIn.split("/");
-	for(var i in arrText){
-		//头尾是*
-		if(arrText[i].substring(0,1)=="*" && arrText[i].substring(arrText[i].length-1)=="*"){
-			var arrOneTermWord=arrText[i].split("@");
-			if(arrOneTermWord.length==2){
-				arrText[i]="*"+arrOneTermWord[1];
-			}
-		}
-	}
-
-	return(arrText.join("/"));
-}
-
-function term_tran_edit_replace(strIn){
-	var strEdit=strIn;
-	for(var x=0;x<arrTerm2.length;x++){
-		var strReplace="strEdit=strEdit.replace(/"+arrTerm2[x].meaning+"/g,\"/*"+arrTerm2[x].meaning+"*/\")";
-		eval(strReplace);
-	}
-	//strEdit=strEdit.replace(/\/*\/*/g,"\/*");
-	//strEdit=strEdit.replace(/\*\/\*\//g,"*\/");
-	return(strEdit);
-}
-
-function term_edit_to_std_str(strIn){
-	var arrText = strIn.split("/");
-	for(var i in arrText){
-		//头尾是*
-		if(arrText[i].substring(0,1)=="*" && arrText[i].substring(arrText[i].length-1)=="*"){
-			var wordMeaning=arrText[i].substring(1,arrText[i].length-1);
-			arrText[i]="*"+term_get_std_str(wordMeaning)+"*";
-		}
-	}
-	return(arrText.join("/"));
-}
-function term_get_std_str(strMean){
-	for(var x=0;x<arrTerm2.length;x++){
-		if(arrTerm2[x].meaning==strMean){
-			return(arrTerm2[x].guid+"@"+strMean);
-		}
-	}
-	return("unkow@"+strMean);
-}
-function term_get_my_std_str(strMean){
-		for(var x in arrMyTerm){
-		if(arrMyTerm[x].meaning==strMean){
-			return(arrMyTerm[x].guid+"@"+strMean);
-		}
-	}
-	return("unkow@"+strMean);
-}
-
-function note_lookup(word,showto){
-	$("#"+showto).load("term.php?op=search&word="+word,function(responseTxt,statusTxt,xhr){
-    if(statusTxt=="success"){
-		$(".term_note").each(function(index,element){
-			$(this).html(note_init($(this).html()));
-			$(this).attr("status",1);
-			note_refresh_new();
-		});			
-	}
-	else if(statusTxt=="error"){
-      console.error("Error: "+xhr.status+": "+xhr.statusText);
-	}
-  });
-}
-
-function term_apply(guid){
-	if(g_eCurrWord){
-		setNodeText(g_eCurrWord,"note","=term("+guid+")");
-		term_array_updata();
-	}
-}
-
-function term_data_copy_to_me(guid){
-	$("#term_dict").load("term.php?op=copy&wordid="+guid);
-}
-
-//我的术语字典进入编辑模式
-function term_edit(guid){
-	$("#term_edit_btn1_"+guid).hide();
-	$("#term_edit_btn2_"+guid).show();
-	document.getElementById("term_dict_my_"+guid).style.display="none";
-	document.getElementById("term_dict_my_edit_"+guid).style.display="block";
-}
-
-//我的术语字典退出编辑模式
-function term_data_esc_edit(guid){
-	$("#term_edit_btn1_"+guid).show();
-	$("#term_edit_btn2_"+guid).hide();
-	document.getElementById("term_dict_my_"+guid).style.display="block";
-	document.getElementById("term_dict_my_edit_"+guid).style.display="none";
-	
-}
-//我的术语字典 编辑模式 保存
-
-function term_data_save(guid){
-	if(guid==""){
-		var strWord=$("#term_new_word").val();
-		var strMean=$("#term_new_mean").val();
-		var strMean2=$("#term_new_mean2").val();
-		var strNote=$("#term_new_note").val();
-		var strTag=$("#term_new_tag").val();
-		let newTerm = new Object();
-		newTerm.guid=com_guid();
-		newTerm.word=strWord;
-		newTerm.meaning = strMean;
-		newTerm.other_meaning = strMean2;
-		arrMyTerm.push(newTerm);
-	}
-	else{
-		var strWord=$("#term_edit_word_"+guid).val();
-		var strMean=$("#term_edit_mean_"+guid).val();
-		var strMean2=$("#term_edit_mean2_"+guid).val();
-		var strNote=$("#term_edit_note_"+guid).val();
-	}
-	$.get("term.php",
-	{
-		op:"save",
-		guid:guid,
-		word:strWord,
-		mean:strMean,
-		mean2:strMean2,
-		tag:strTag,
-		note:strNote
-	},
-	function(data,status){
-		try{
-			let result= JSON.parse(data);
-			if(result.status==0){
-				note_lookup(result.message,"term_dict");
-			}
-			else{
-				ntf_show("term error"+result.message);
-			}
-		}
-		catch(e){
-			console.error("term_get_all_pali:"+e+" data:"+data);
-			ntf_show("term error");
-		}
-		
-		
-	});
-}
-function term_get_all_pali(){
- 	$.get("term.php",
-	{
-		op:"allpali"
-	},
-	function(data,status){
-		if(data.length>0){
-			try{
-			arrTermAllPali = JSON.parse(data);
-			}
-			catch(e){
-				console.error("term_get_all_pali:"+e+" data:"+data);
-			}
-		}
-	});
-}
-function term_lookup_all(pali){
-	for(var x in arrTermAllPali){
-		if(arrTermAllPali[x].word==pali){
-			return(arrTermAllPali[x]);
-		}
-	}
-	return(null);
-}
-
-function term_get_my(){
- 	$.get("term.php",
-	{
-		op:"my"
-	},
-	function(data,status){
-		if(data.length>0){
-			try{
-				arrMyTerm = JSON.parse(data);
-			}
-			catch(e){
-				console.error(e.error+" data:"+data);
-			}
-		}
-	});
-}
-
-//在我的术语字典里查询
-function term_lookup_my(pali){
-	for(var x in arrMyTerm){
-		if(arrMyTerm[x].meaning==pali){
-			return(arrMyTerm[x]);
-		}		
-		if(arrMyTerm[x].word==pali){
-			return(arrMyTerm[x]);
-		}
-	}
-	return(null);
-}
-function term_lookup_my_id(id){
-	for(var x in arrMyTerm){
-		if(arrMyTerm[x].guid==id){
-			return(arrMyTerm[x]);
-		}		
-	}
-	return(null);
-}
-
-function term_get_all_meaning(word){
- 	$.get("term.php",
-	{
-		op:"allmean",
-		word:word
-	},
-	function(data,status){
-		$("#term_win_other_mean").html(data);
-	});
-}
-
-//刷新文档正在使用的术语数据
-function term_array_updata(){
-	arrTerm2=new Array();
-	var arrTermDownLoadList=new Array();
-	var arrWordIdTermId=new Array();
-	var xAllWord = gXmlBookDataBody.getElementsByTagName("word");
-	for(var x=0;x<xAllWord.length;x++){
-		var sNote = getNodeText(xAllWord[x],"note");
-		var wid=getNodeText(xAllWord[x],"id");
-		if(sNote.substring(0,6)=="=term("){
-			var termId=sNote.slice(6,-1);
-			if(!arrTerm[termId]){
-				arrTermDownLoadList.push(termId);
-			}
-			//person={wid:wid,tid:termId};
-			arrWordIdTermId.push({wid:wid,tid:termId});
-		}
-	}
-	if(arrTermDownLoadList.length>0){
-		var idlist=arrTermDownLoadList.join();
-		idlist = idlist.replace(/,/g,"','");
-		idlist = "'"+ idlist + "'";
- 		$.get("term.php",
-		{
-		op:"extract",
-		list:idlist
-		},
-		function(data,status){
-			var obj = JSON.parse(data);
-			for(var x in obj){
-				arrTerm[obj[x].guid]=obj[x];
-				arrTerm2.push(obj[x]);
-			}
-			if(g_eCurrWord){
-				updataWordHeadById(getNodeText(g_eCurrWord,"id"));
-				refreshWordNote(g_eCurrWord.parentNode.parentNode);
-			}
-			for(var i=0;i<arrWordIdTermId.length;i++){
-				var wid=arrWordIdTermId[i].wid;
-				var sMean=arrTerm[arrWordIdTermId[i].tid].meaning;
-				doc_setWordDataById(wid,"mean",sMean);
-				updateWordBodyById(wid);
-			}
-				
-		});
-		
-	}
-}
-
-function term_updata_translation(){
-	termCounter=new Array();
-	noteCounter=1;
-	$("term").each(function(){
-		let status=$(this).attr("status");
-		let termText = $(this).text();
-		
-		if(termText.slice(0,1)=="#"){
-			if(status==0){
-				$(this).attr("status","1");
-				$(this).attr("type","1");
-				$(this).attr("text",termText.slice(1));
-			}
-			let noteText=$(this).attr("text");
-			$(this).html("<a onclick=\"alert('"+noteText+"')\">["+noteCounter+"]</a>");
-			noteCounter++;
-		}
-		else{
-			if(status==0){
-				let myterm=term_lookup_my(termText);//我的术语字典
-				if(myterm){
-					$(this).attr("status","1");
-					$(this).attr("type","0");
-					$(this).attr("guid",myterm.guid);
-					$(this).attr("pali",myterm.word);
-					$(this).attr("mean",myterm.meaning);
-					$(this).attr("mean2",myterm.other_meaning);
-					$(this).attr("replace",myterm.meaning);
-				}
-				else{
-					$(this).attr("status","2");
-				}
-			}
-			let guid=$(this).attr("guid");
-			let pali=$(this).attr("pali");
-			let mean=$(this).attr("mean");
-			let mean2=$(this).attr("mean2");
-			var renderTo=$(this).attr("pos");
-			var noteText="";
-			
-			if(termCounter[guid]){
-				termCounter[guid]=2;
-			}
-			else{
-				termCounter[guid]=1;
-			}
-			var myterm=term_lookup_my(pali);//我的术语字典
-			let linkclass="";
-			if(myterm){
-				linkclass="term_link";
-			}
-			else{
-				linkclass="term_link_new";
-			}			
-			if(guid){
-				
-				if(renderTo=="wbw"){
-					noteText="%note%";
-				}
-				else{
-					if(termCounter[guid]==1){
-						noteText=strTermTanslationTmp;
-					}
-					else{
-						noteText=strTermTanslationTmp2;
-					}
-				}
-
-				noteText=noteText.replace("[","<span class='"+linkclass+"' onclick=\"term_show_win('"+guid+"')\">");
-				noteText=noteText.replace("]","</span>");
-				noteText=noteText.replace("%mean%","<span class='term_mean'>"+mean+"</span>");
-				noteText=noteText.replace("%pali%","<span class='term_pali'>"+pali+"</span>");
-				noteText=noteText.replace("%mean2%","<span class='term_mean2'>"+mean2+"</span>");
-				noteText=noteText.replace("%note%","<span class='term_note'>"+""+"</span>");
-				if(myterm){
-					if(myterm.meaning!=mean){
-						noteText=noteText.replace("%mymean%","<span class='term_mean_my'>"+myterm.meaning+"</span>");
-					}
-					else{
-						noteText=noteText.replace("%mymean%","");
-					}
-				}
-				else{
-					noteText=noteText.replace("%mymean%","");
-				}
-			}
-			else{
-				noteText="<span class='"+linkclass+"'  onclick=\"term_show_win('','"+termText+"')\">"+termText+"</span>";
-			}
-			$(this).html(noteText);
-		}
-	});
-}
-
-function term_show_win(guid,keyWord=""){
-	if(guid==""){
-		$(term_body).html("当前词条未创建。<br /><a onclick=\"term_add_new('"+keyWord+"')\">现在创建</a>");
-	}
-	else{
-		let currWord = term_lookup_my_id(guid);
-		if(currWord){
-			let termString="";
-			let pali=currWord.word;
-			let pali_1= pali.substring(0,1).toUpperCase();
-			pali=pali_1+pali.substring(1);
-			let mean=currWord.meaning;
-			let myterm=term_lookup_my(currWord.word);//我的术语字典
-			termString+="<div class='term_win_mean'>"+pali+"</div>";
-			termString+="<div class='term_win_pali'>意思:"+currWord.meaning+"</div>";
-			termString+="<div class='term_win_mean2'>其他意思:"+currWord.other_meaning+"</div>";
-			termString+="<div class='term_win_mymean'>我的词库:";
-			if(myterm){
-				termString+="<b>"+myterm.meaning+"</b> ";
-			}
-			else{
-				termString+="<input type='input'  placeholder='我的释义'>";
-			}
-			termString+="<span>其他:</span><span id='term_win_other_mean'></span>";
-			termString+="</div>";
-			
-			if(currWord.note){
-				termString+="<div class='term_win_note'>"+currWord.note+"</div>";
-			}
-			else{
-				termString+="<div class='term_win_note'>Loading</div>";
-			}
-			$(term_body).html(termString);
-			term_get_all_meaning(currWord.word);
-			
-			if(!currWord.note){
-				$.get("term.php",
-				{
-					op:"load_id",
-					id:currWord.guid
-				},
-				function(data,status,xhr){
-					switch(status){
-						case "success":
-							try{
-								let loadWord = JSON.parse(data);
-								$("#term_win_note").html(loadWord[0].note);
-								//修改内存数据
-								for(let x in arrMyTerm){
-									if(arrMyTerm[x].guid==loadWord[0].guid){
-										arrMyTerm[x].note=loadWord[0].note;
-										return;
-									}
-								}
-							}
-							catch(e){
-								console.error(e+" data:"+data);
-							}						
-						break;
-						case "error":
-							console.error("Error: "+xhr.status+": "+xhr.statusText);
-						break;
-					}
-				});
-
-			}
-		}
-		else{
-			$(term_body).html("undefined guid");
-		}
-	}
-	document.getElementById("term_win").style.display="flex";
-	
-}
-
-function term_tmp(type,tmp){
-	if(tmp=="new"){
-		switch(type){
-			case "a":
-				strTermTanslationTmp=$("#term_my_tmp").val();
-				break;
-			case "a2":
-				strTermTanslationTmp2=$("#term_my_tmp").val();
-			break;
-		}		
-		
-	}
-	else{
-		switch(type){
-			case "a":
-				strTermTanslationTmp=tmp;
-				break;
-			case "a2":
-				strTermTanslationTmp2=tmp;
-			break;
-		}
-	}
-	term_updata_translation();
-}
-
-function term_add_new(keyword){
-	document.getElementById("term_win").style.display="none";
-	editor_show_right_tool_bar(true);
-	tab_click_b('term_dict','tab_rb_dict');
-	note_lookup(keyword,"term_dict");
-}

+ 1 - 0
app/public/lang/default.json

@@ -536,6 +536,7 @@
 		"example": "for example ",
 		"privacy": "privacy",
 		"new_composition": "new composition",
+		"add": "add",
 		"": ""
 	},
 	"grammastr": [

+ 1 - 0
app/public/lang/en.json

@@ -535,6 +535,7 @@
 		"example": "for example ",
 		"privacy": "privacy",
 		"new_composition": "new composition",
+		"add": "add",
 		"": ""
 	},
 	"grammastr": [

+ 1 - 0
app/public/lang/my.json

@@ -535,6 +535,7 @@
 		"example": "for example ",
 		"privacy": "privacy",
 		"new_composition": "new composition",
+		"add": "add",
 		"": "",
 		"": ""
 	},

+ 1 - 0
app/public/lang/si.json

@@ -540,6 +540,7 @@
 		"example": "for example ",
 		"privacy": "privacy",
 		"new_composition": "new composition",
+		"add": "add",
 		"": "",
 		"": ""
 	},

+ 1 - 0
app/public/lang/zh-cn.json

@@ -537,6 +537,7 @@
 		"example": "例如",
 		"privacy": "隐私设置",
 		"new_composition": "新建作品",
+		"add": "添加",
 		"": ""
 	},
 	"grammastr": [

+ 1 - 0
app/public/lang/zh-tw.json

@@ -537,6 +537,7 @@
 		"example": "例如",
 		"privacy": "隱私設定",
 		"new_composition": "新建作品",
+		"add": "新增",
 		"": ""
 	},
 	"grammastr": [

+ 251 - 241
app/studio/css/font.css

@@ -4,374 +4,384 @@
 /*Pāli Roma*/
 
 @font-face {
-    font-family: 'Noto Sans';
-    font-style: normal;
-    font-weight: 100;
-    src: local('Noto Sans Thin'),
-    url(../../../font/NotoSans/NotoSans-Thin.ttf) format('truetype');
-    font-display: fallback;
+  font-family: "Noto Sans";
+  font-style: normal;
+  font-weight: 100;
+  src: local("Noto Sans Thin"),
+    url(../../../font/NotoSans/NotoSans-Thin.ttf) format("truetype");
+  font-display: fallback;
 }
 @font-face {
-    font-family: 'Myanmar1';
-    src: url(../../../font/mmrtext.ttf) format('truetype');
-    font-display: fallback;
+  font-family: "Myanmar1";
+  src: url(../../../font/mmrtext.ttf) format("truetype");
+  font-display: fallback;
 }
 
 @font-face {
-    font-family: 'Noto Sans';
-    font-style: normal;
-    font-weight: 300;
-    src: local('Noto Sans Light'),
-    url(../../../font/NotoSans/NotoSans-Light.ttf) format('truetype');
-    font-display: fallback;
+  font-family: "Noto Sans";
+  font-style: normal;
+  font-weight: 300;
+  src: local("Noto Sans Light"),
+    url(../../../font/NotoSans/NotoSans-Light.ttf) format("truetype");
+  font-display: fallback;
 }
 
 @font-face {
-    font-family: 'Noto Sans';
-    font-style: normal;
-    font-weight: 400;
-    src: local('Noto Sans Regular'),
-    url(../../../font/NotoSans/NotoSans-Regular.ttf) format('truetype');
-    font-display: fallback;
+  font-family: "Noto Sans";
+  font-style: normal;
+  font-weight: 400;
+  src: local("Noto Sans Regular"),
+    url(../../../font/NotoSans/NotoSans-Regular.ttf) format("truetype");
+  font-display: fallback;
 }
 
 @font-face {
-    font-family: 'Noto Sans';
-    font-style: normal;
-    font-weight: 500;
-    src: local('Noto Sans Medium'),
-    url(../../../font/NotoSans/NotoSans-Medium.ttf) format('truetype');
-    font-display: fallback;
+  font-family: "Noto Sans";
+  font-style: normal;
+  font-weight: 500;
+  src: local("Noto Sans Medium"),
+    url(../../../font/NotoSans/NotoSans-Medium.ttf) format("truetype");
+  font-display: fallback;
 }
 
 @font-face {
-    font-family: 'Noto Sans';
-    font-style: normal;
-    font-weight: 700;
-    src: local('Noto Sans Bold'),
-    url(../../../font/NotoSans/NotoSans-Bold.ttf) format('truetype');
-    font-display: fallback;
+  font-family: "Noto Sans";
+  font-style: normal;
+  font-weight: 700;
+  src: local("Noto Sans Bold"),
+    url(../../../font/NotoSans/NotoSans-Bold.ttf) format("truetype");
+  font-display: fallback;
 }
 
 @font-face {
-    font-family: 'Noto Sans';
-    font-style: normal;
-    font-weight: 900;
-    src: local('Noto Sans Black'),
-    url(../../../font/NotoSans/NotoSans-Black.ttf) format('truetype');
-    font-display: fallback;
+  font-family: "Noto Sans";
+  font-style: normal;
+  font-weight: 900;
+  src: local("Noto Sans Black"),
+    url(../../../font/NotoSans/NotoSans-Black.ttf) format("truetype");
+  font-display: fallback;
 }
 
 @font-face {
-    font-family: 'Noto Sans';
-    font-style: italic;
-    font-weight: 100;
-    src: local('Noto Sans Thin Italic'),
-    url(../../../font/NotoSans/NotoSans-ThinItalic.ttf) format('truetype');
-    font-display: fallback;
+  font-family: "Noto Sans";
+  font-style: italic;
+  font-weight: 100;
+  src: local("Noto Sans Thin Italic"),
+    url(../../../font/NotoSans/NotoSans-ThinItalic.ttf) format("truetype");
+  font-display: fallback;
 }
 
 @font-face {
-    font-family: 'Noto Sans';
-    font-style: italic;
-    font-weight: 300;
-    src: local('Noto Sans Light Italic'),
-    url(../../../font/NotoSans/NotoSans-LightItalic.ttf) format('truetype');
-    font-display: fallback;
+  font-family: "Noto Sans";
+  font-style: italic;
+  font-weight: 300;
+  src: local("Noto Sans Light Italic"),
+    url(../../../font/NotoSans/NotoSans-LightItalic.ttf) format("truetype");
+  font-display: fallback;
 }
 
 @font-face {
-    font-family: 'Noto Sans';
-    font-style: italic;
-    font-weight: 400;
-    src: local('Noto Sans Italic'),
-    url(../../../font/NotoSans/NotoSans-Italic.ttf) format('truetype');
-    font-display: fallback;
+  font-family: "Noto Sans";
+  font-style: italic;
+  font-weight: 400;
+  src: local("Noto Sans Italic"),
+    url(../../../font/NotoSans/NotoSans-Italic.ttf) format("truetype");
+  font-display: fallback;
 }
 
 @font-face {
-    font-family: 'Noto Sans';
-    font-style: italic;
-    font-weight: 500;
-    src: local('Noto Sans Medium Italic'),
-    url(../../../font/NotoSans/NotoSans-MediumItalic.ttf) format('truetype');
-    font-display: fallback;
+  font-family: "Noto Sans";
+  font-style: italic;
+  font-weight: 500;
+  src: local("Noto Sans Medium Italic"),
+    url(../../../font/NotoSans/NotoSans-MediumItalic.ttf) format("truetype");
+  font-display: fallback;
 }
 
 @font-face {
-    font-family: 'Noto Sans';
-    font-style: italic;
-    font-weight: 700;
-    src: local('Noto Sans Bold Italic'),
-    url(../../../font/NotoSans/NotoSans-BoldItalic.ttf) format('truetype');
-    font-display: fallback;
+  font-family: "Noto Sans";
+  font-style: italic;
+  font-weight: 700;
+  src: local("Noto Sans Bold Italic"),
+    url(../../../font/NotoSans/NotoSans-BoldItalic.ttf) format("truetype");
+  font-display: fallback;
 }
 
 @font-face {
-    font-family: 'Noto Sans';
-    font-style: italic;
-    font-weight: 900;
-    src: local('Noto Sans Black Italic'),
-    url(../../../font/NotoSans/NotoSans-BlackItalic.ttf) format('truetype');
-    font-display: fallback;
+  font-family: "Noto Sans";
+  font-style: italic;
+  font-weight: 900;
+  src: local("Noto Sans Black Italic"),
+    url(../../../font/NotoSans/NotoSans-BlackItalic.ttf) format("truetype");
+  font-display: fallback;
 }
 
 @font-face {
-    font-family: 'Noto Serif';
-    font-style: normal;
-    font-weight: 100;
-    src: local('Noto Serif Thin'),
-    url(../../../font/NotoSerif/NotoSerif-Thin.ttf) format('truetype');
-    font-display: fallback;
-    font-display: fallback;
+  font-family: "Noto Serif";
+  font-style: normal;
+  font-weight: 100;
+  src: local("Noto Serif Thin"),
+    url(../../../font/NotoSerif/NotoSerif-Thin.ttf) format("truetype");
+  font-display: fallback;
+  font-display: fallback;
 }
 
 @font-face {
-    font-family: 'Noto Serif';
-    font-style: normal;
-    font-weight: 300;
-    src: local('Noto Serif Light'),
-    url(../../../font/NotoSerif/NotoSerif-Light.ttf) format('truetype');
-    font-display: fallback;
-    font-display: fallback;
+  font-family: "Noto Serif";
+  font-style: normal;
+  font-weight: 300;
+  src: local("Noto Serif Light"),
+    url(../../../font/NotoSerif/NotoSerif-Light.ttf) format("truetype");
+  font-display: fallback;
+  font-display: fallback;
 }
 
 @font-face {
-    font-family: 'Noto Serif';
-    font-style: normal;
-    font-weight: 400;
-    src: local('Noto Serif Regular'),
-    url(../../../font/NotoSerif/NotoSerif-Regular.ttf) format('truetype');
-    font-display: fallback;
+  font-family: "Noto Serif";
+  font-style: normal;
+  font-weight: 400;
+  src: local("Noto Serif Regular"),
+    url(../../../font/NotoSerif/NotoSerif-Regular.ttf) format("truetype");
+  font-display: fallback;
 }
 
 @font-face {
-    font-family: 'Noto Serif';
-    font-style: normal;
-    font-weight: 500;
-    src: local('Noto Serif Medium'),
-    url(../../../font/NotoSerif/NotoSerif-Medium.ttf) format('truetype');
-    font-display: fallback;
+  font-family: "Noto Serif";
+  font-style: normal;
+  font-weight: 500;
+  src: local("Noto Serif Medium"),
+    url(../../../font/NotoSerif/NotoSerif-Medium.ttf) format("truetype");
+  font-display: fallback;
 }
 
 @font-face {
-    font-family: 'Noto Serif';
-    font-style: normal;
-    font-weight: 600;
-    src: local('Noto Serif SemiBold'),
-    url(../../../font/NotoSerif/NotoSerif-SemiBold.ttf) format('truetype');
-    font-display: fallback;
+  font-family: "Noto Serif";
+  font-style: normal;
+  font-weight: 600;
+  src: local("Noto Serif SemiBold"),
+    url(../../../font/NotoSerif/NotoSerif-SemiBold.ttf) format("truetype");
+  font-display: fallback;
 }
 
 @font-face {
-    font-family: 'Noto Serif';
-    font-style: normal;
-    font-weight: 700;
-    src: local('Noto Serif Bold'),
-    url(../../../font/NotoSerif/NotoSerif-Bold.ttf) format('truetype');
-    font-display: fallback;
+  font-family: "Noto Serif";
+  font-style: normal;
+  font-weight: 700;
+  src: local("Noto Serif Bold"),
+    url(../../../font/NotoSerif/NotoSerif-Bold.ttf) format("truetype");
+  font-display: fallback;
 }
 
 @font-face {
-    font-family: 'Noto Serif';
-    font-style: normal;
-    font-weight: 900;
-    src: local('Noto Serif Black'),
-    url(../../../font/NotoSerif/NotoSerif-Black.ttf) format('truetype');
-    font-display: fallback;
+  font-family: "Noto Serif";
+  font-style: normal;
+  font-weight: 900;
+  src: local("Noto Serif Black"),
+    url(../../../font/NotoSerif/NotoSerif-Black.ttf) format("truetype");
+  font-display: fallback;
 }
 
 @font-face {
-    font-family: 'Noto Serif';
-    font-style: italic;
-    font-weight: 100;
-    src: local('Noto Serif Thin Italic'),
-    url(../../../font/NotoSerif/NotoSerif-ThinItalic.ttf) format('truetype');
-    font-display: fallback;
+  font-family: "Noto Serif";
+  font-style: italic;
+  font-weight: 100;
+  src: local("Noto Serif Thin Italic"),
+    url(../../../font/NotoSerif/NotoSerif-ThinItalic.ttf) format("truetype");
+  font-display: fallback;
 }
 
 @font-face {
-    font-family: 'Noto Serif';
-    font-style: italic;
-    font-weight: 300;
-    src: local('Noto Serif Light Italic'),
-    url(../../../font/NotoSerif/NotoSerif-LightItalic.ttf) format('truetype');
-    font-display: fallback;
+  font-family: "Noto Serif";
+  font-style: italic;
+  font-weight: 300;
+  src: local("Noto Serif Light Italic"),
+    url(../../../font/NotoSerif/NotoSerif-LightItalic.ttf) format("truetype");
+  font-display: fallback;
 }
 
 @font-face {
-    font-family: 'Noto Serif';
-    font-style: italic;
-    font-weight: 400;
-    src: local('Noto Serif Italic'),
-    url(../../../font/NotoSerif/NotoSerif-Italic.ttf) format('truetype');
-    font-display: fallback;
+  font-family: "Noto Serif";
+  font-style: italic;
+  font-weight: 400;
+  src: local("Noto Serif Italic"),
+    url(../../../font/NotoSerif/NotoSerif-Italic.ttf) format("truetype");
+  font-display: fallback;
 }
 
 @font-face {
-    font-family: 'Noto Serif';
-    font-style: italic;
-    font-weight: 500;
-    src: local('Noto Serif Medium Italic'),
-    url(../../../font/NotoSerif/NotoSerif-MediumItalic.ttf) format('truetype');
-    font-display: fallback;
+  font-family: "Noto Serif";
+  font-style: italic;
+  font-weight: 500;
+  src: local("Noto Serif Medium Italic"),
+    url(../../../font/NotoSerif/NotoSerif-MediumItalic.ttf) format("truetype");
+  font-display: fallback;
 }
 
 @font-face {
-    font-family: 'Noto Serif';
-    font-style: italic;
-    font-weight: 600;
-    src: local('Noto Serif SemiBold Italic'),
-    url(../../../font/NotoSerif/NotoSerif-SemiBoldItalic.ttf) format('truetype');
-    font-display: fallback;
+  font-family: "Noto Serif";
+  font-style: italic;
+  font-weight: 600;
+  src: local("Noto Serif SemiBold Italic"),
+    url(../../../font/NotoSerif/NotoSerif-SemiBoldItalic.ttf) format("truetype");
+  font-display: fallback;
 }
 
 @font-face {
-    font-family: 'Noto Serif';
-    font-style: italic;
-    font-weight: 700;
-    src: local('Noto Serif Bold Italic'),
-    url(../../../font/NotoSerif/NotoSerif-BoldItalic.ttf) format('truetype');
-    font-display: fallback;
+  font-family: "Noto Serif";
+  font-style: italic;
+  font-weight: 700;
+  src: local("Noto Serif Bold Italic"),
+    url(../../../font/NotoSerif/NotoSerif-BoldItalic.ttf) format("truetype");
+  font-display: fallback;
 }
 
 @font-face {
-    font-family: 'Noto Serif';
-    font-style: italic;
-    font-weight: 900;
-    src: local('Noto Serif Black Italic'),
-    url(../../../font/NotoSerif/NotoSerif-BlackItalic.ttf) format('truetype');
-    font-display: fallback;
+  font-family: "Noto Serif";
+  font-style: italic;
+  font-weight: 900;
+  src: local("Noto Serif Black Italic"),
+    url(../../../font/NotoSerif/NotoSerif-BlackItalic.ttf) format("truetype");
+  font-display: fallback;
+}
+
+/*缅文*/
+@font-face {
+  font-family: "Padauk";
+  font-style: normal;
+  font-weight: 400;
+  src: local("Padauk"),
+    url(../../../font/Padauk/Padauk-Regular.ttf) format("truetype");
+  font-display: fallback;
+}
+
+@font-face {
+  font-family: "Padauk";
+  font-style: normal;
+  font-weight: 700;
+  src: local("Padauk Bold"),
+    url(../../../font/Padauk/Padauk-Bold.ttf) format("truetype");
+  font-display: fallback;
 }
 /*中文繁體*/
 
 @font-face {
-    font-family: 'Noto Sans TC';
-    font-style: normal;
-    font-weight: 300;
-    src: local('Noto Sans TC Light'),
-    local('Noto Sans CJK TC Light'),
-    local('Source Han Sans TWHK Light')
-    /*url(../../../font/NotoSansTC/NotoSansCJKtc-Light.otf) format('opentype'),
+  font-family: "Noto Sans TC";
+  font-style: normal;
+  font-weight: 300;
+  src: local("Noto Sans TC Light"), local("Noto Sans CJK TC Light"),
+    local("Source Han Sans TWHK Light");
+  /*url(../../../font/NotoSansTC/NotoSansCJKtc-Light.otf) format('opentype'),
     url(../../../font/NotoSansTC/NotoSansTC-Light.woff) format('woff')*/
 }
 
 @font-face {
-    font-family: 'Noto Sans TC';
-    font-style: normal;
-    font-weight: 400;
-    src: local('Noto Sans TC Regular'),
-    local('Noto Sans CJK TC Regular'),
-    local('Source Han Sans TWHK Regular');
-    /*url(../../../font/NotoSansTC/NotoSansCJKtc-Regular.otf) format('opentype'),
+  font-family: "Noto Sans TC";
+  font-style: normal;
+  font-weight: 400;
+  src: local("Noto Sans TC Regular"), local("Noto Sans CJK TC Regular"),
+    local("Source Han Sans TWHK Regular");
+  /*url(../../../font/NotoSansTC/NotoSansCJKtc-Regular.otf) format('opentype'),
     url(../../../font/NotoSansTC/NotoSansTC-Regular.woff) format('woff');*/
-    font-display: fallback;
+  font-display: fallback;
 }
 
 @font-face {
-    font-family: 'Noto Sans TC';
-    font-style: normal;
-    font-weight: 500;
-    src: local('Noto Sans TC Medium'),
-    local('Noto Sans CJK TC Medium'),
-    local('Source Han Sans TWHK Medium');
-    /*url(../../../font/NotoSansTC/NotoSansCJKtc-Medium.otf) format('opentype'),
+  font-family: "Noto Sans TC";
+  font-style: normal;
+  font-weight: 500;
+  src: local("Noto Sans TC Medium"), local("Noto Sans CJK TC Medium"),
+    local("Source Han Sans TWHK Medium");
+  /*url(../../../font/NotoSansTC/NotoSansCJKtc-Medium.otf) format('opentype'),
     url(../../../font/NotoSansTC/NotoSansTC-Medium.woff) format('woff');*/
-    font-display: fallback;
+  font-display: fallback;
 }
 
 @font-face {
-    font-family: 'Noto Sans TC';
-    font-style: normal;
-    font-weight: 700;
-    src: local('Noto Sans TC Bold'),
-    local('Noto Sans CJK TC Bold'),
-    local('Source Han Sans TWHK Bold');
-    /*url(../../../font/NotoSansTC/NotoSansCJKtc-Bold.otf) format('opentype'),
+  font-family: "Noto Sans TC";
+  font-style: normal;
+  font-weight: 700;
+  src: local("Noto Sans TC Bold"), local("Noto Sans CJK TC Bold"),
+    local("Source Han Sans TWHK Bold");
+  /*url(../../../font/NotoSansTC/NotoSansCJKtc-Bold.otf) format('opentype'),
     url(../../../font/NotoSansTC/NotoSansTC-Bold.woff) format('woff');*/
-    font-display: fallback;
+  font-display: fallback;
 }
 
-
 /*中文简体*/
 
 @font-face {
-    font-family: 'Noto Sans SC';
-    font-style: normal;
-    font-weight: 300;
-    src: local('Noto Sans SC Light'),
-    local('Noto Sans CJK SC Light'),
-    local('Source Han Sans CN Light');
-    /*url(../../../font/NotoSansSC/NotoSansCJKsc-Light.otf) format('opentype'),
+  font-family: "Noto Sans SC";
+  font-style: normal;
+  font-weight: 300;
+  src: local("Noto Sans SC Light"), local("Noto Sans CJK SC Light"),
+    local("Source Han Sans CN Light");
+  /*url(../../../font/NotoSansSC/NotoSansCJKsc-Light.otf) format('opentype'),
     url(../../../font/NotoSansSC/NotoSansSC-Light.woff) format('woff')*/
 }
 
 @font-face {
-    font-family: 'Noto Sans SC';
-    font-style: normal;
-    font-weight: 400;
-    src: local('Noto Sans SC Regular'),
-    local('Noto Sans CJK SC Regular'),
-    local('Source Han Sans CN Regular');
-    /*url(../../../font/NotoSansSC/NotoSansCJKsc-Regular.otf) format('opentype'),
+  font-family: "Noto Sans SC";
+  font-style: normal;
+  font-weight: 400;
+  src: local("Noto Sans SC Regular"), local("Noto Sans CJK SC Regular"),
+    local("Source Han Sans CN Regular");
+  /*url(../../../font/NotoSansSC/NotoSansCJKsc-Regular.otf) format('opentype'),
     url(../../../font/NotoSansSC/NotoSansSC-Regular.woff) format('woff');*/
-    font-display: fallback;
+  font-display: fallback;
 }
 
 @font-face {
-    font-family: 'Noto Sans SC';
-    font-style: normal;
-    font-weight: 500;
-    src: local('Noto Sans SC Medium'),
-    local('Noto Sans CJK SC Medium'),
-    local('Source Han Sans CN Medium');
-    /*url(../../../font/NotoSansSC/NotoSansCJKsc-Medium.otf) format('opentype'),
+  font-family: "Noto Sans SC";
+  font-style: normal;
+  font-weight: 500;
+  src: local("Noto Sans SC Medium"), local("Noto Sans CJK SC Medium"),
+    local("Source Han Sans CN Medium");
+  /*url(../../../font/NotoSansSC/NotoSansCJKsc-Medium.otf) format('opentype'),
     url(../../../font/NotoSansSC/NotoSansSC-Medium.woff) format('woff');*/
-    font-display: fallback;
+  font-display: fallback;
 }
 
 @font-face {
-    font-family: 'Noto Sans SC';
-    font-style: normal;
-    font-weight: 700;
-    src: local('Noto Sans SC Bold'),
-    local('Noto Sans CJK SC Bold'),
-    local('Source Han Sans CN Bold');
-    /*url(../../../font/NotoSansSC/NotoSansCJKsc-Bold.otf) format('opentype'),
+  font-family: "Noto Sans SC";
+  font-style: normal;
+  font-weight: 700;
+  src: local("Noto Sans SC Bold"), local("Noto Sans CJK SC Bold"),
+    local("Source Han Sans CN Bold");
+  /*url(../../../font/NotoSansSC/NotoSansCJKsc-Bold.otf) format('opentype'),
     url(../../../font/NotoSansSC/NotoSansSC-Bold.woff) format('woff');*/
-    font-display: fallback;
+  font-display: fallback;
 }
 
 .font_ch {
-    font-family: 'Noto Sans TC', 'Noto Sans SC', Arial, Verdana;
-    font-style: normal;
+  font-family: "Noto Sans TC", "Noto Sans SC", Arial, Verdana;
+  font-style: normal;
 }
 
 .font_pali {
-    font-family: 'Noto Sans', Arial, Verdana;
-    font-style: normal;
+  font-family: "Noto Sans", Arial, Verdana;
+  font-style: normal;
 }
 
 .font_m {
-    font-family: 'Noto Sans', 'Noto Sans TC', 'Noto Sans SC', Arial, Verdana;
-    font-weight: 500;
-    font-style: normal;
+  font-family: "Noto Sans", "Noto Sans TC", "Noto Sans SC", Arial, Verdana;
+  font-weight: 500;
+  font-style: normal;
 }
 
 .font_r {
-    font-family: 'Noto Sans', 'Noto Sans TC', 'Noto Sans SC', Arial, Verdana;
-    font-weight: 400;
-    font-style: normal;
+  font-family: "Noto Sans", "Noto Sans TC", "Noto Sans SC", Arial, Verdana;
+  font-weight: 400;
+  font-style: normal;
 }
 
 .font_l {
-    font-family: 'Noto Sans', 'Noto Sans TC', 'Noto Sans SC', Arial, Verdana;
-    font-weight: 300;
-    font-style: normal;
+  font-family: "Noto Sans", "Noto Sans TC", "Noto Sans SC", Arial, Verdana;
+  font-weight: 300;
+  font-style: normal;
 }
 
 .font_t {
-    font-family: 'Noto Sans', 'Noto Sans TC', 'Noto Sans SC', Arial, Verdana;
-    font-weight: 100;
-    font-style: normal;
-}
+  font-family: "Noto Sans", "Noto Sans TC", "Noto Sans SC", Arial, Verdana;
+  font-weight: 100;
+  font-style: normal;
+}

+ 7 - 6
app/studio/css/style.css

@@ -18,7 +18,8 @@
 }
 
 body {
-  font-family: "Noto Sans", "Noto Sans SC", "Noto Sans TC", Arial, Verdana;
+  font-family: "Noto Sans", "Noto Sans SC", "Noto Sans TC", "Padauk", Arial,
+    Verdana;
   font-style: normal;
   color: var(--main-color);
   font-weight: 400;
@@ -4416,22 +4417,22 @@ note {
 }
 @-webkit-keyframes spin {
   from {
-      -webkit-transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
   }
   to {
-      -webkit-transform: rotate(360deg);
+    -webkit-transform: rotate(360deg);
   }
 }
 
 @keyframes spin {
   from {
-      transform: rotate(0deg);
+    transform: rotate(0deg);
   }
   to {
-      transform: rotate(360deg);
+    transform: rotate(360deg);
   }
 }
 .icon_spin {
   -webkit-animation: spin 1.5s linear infinite;
   animation: spin 1.5s linear infinite;
-}
+}

+ 6 - 4
app/studio/editor.php

@@ -26,6 +26,7 @@ else{$currDevice="computer";}
 	<link type="text/css" rel="stylesheet" href="css/style.css"/>
 	<link type="text/css" rel="stylesheet" href="css/color_day.css" id="colorchange" />
 	<link type="text/css" rel="stylesheet" href="css/style_mobile.css" media="screen and (max-width:767px)">
+	<link href="https://fonts.googleapis.com/css2?family=Padauk:wght@400;700&display=swap" rel="stylesheet">
 	<link type="text/css" rel="stylesheet" href="../public/css/notify.css"/>
 	<?php
 		if(file_exists($dir_user_base.$userid.$dir_myApp."/style.css")){
@@ -51,8 +52,6 @@ else{$currDevice="computer";}
 	<script language="javascript" src="js/dict.js"></script>
 	<script language="javascript" src="js/relation.js"></script>
 
-
-
 	<script language="javascript" src="js/relation_list.json"></script>
 	
 	<script language="javascript" src="sent/sent.js"></script>
@@ -63,16 +62,19 @@ else{$currDevice="computer";}
 	<script src="../public/js/mermaid.min.js"></script>
 	
 	<script language="javascript" src="module/editor/language/default.js"></script>	
-	<script src="js/jquery-3.3.1.min.js"></script>
+	<script src="./js/jquery-3.3.1.min.js"></script>
 	<script src="../public/js/jquery-ui-1.12.1/jquery-ui.js"></script>
 
 	<script src="../term/term.js"></script>
 	<script src="../term/note.js"></script>
+	<script src="../term/term_popup.js"></script>
+	<link type="text/css" rel="stylesheet" href="../term/term.css"/>
+
 	<script src="./js/message.js"></script>
 	<script src="../uwbw/update.js"></script>
 	<script src="../usent/usent.js"></script>
 	<script src="../fileindex/file_info.js"></script>
-	<script language="javascript" src="../channal/channal.js"></script>
+	<script  src="../channal/channal.js"></script>
 	
 
 	<script language="javascript">

+ 7 - 0
app/studio/index_head.php

@@ -25,7 +25,14 @@ require_once '../public/load_lang.php';
 	<script src="../public/js/notify.js"></script>
 
 	<script src="../public/js/comm.js"></script>
+	
+	<script src="../public/js/jquery-ui-1.12.1/jquery-ui.js"></script>
+	<link type="text/css" rel="stylesheet" href="../public/js/jquery-ui-1.12.1/jquery-ui.css"/>	
 
+	<script src="../term/term.js"></script>
+	<script src="../term/note.js"></script>
+	<script src="../term/term_popup.js"></script>
+	<link type="text/css" rel="stylesheet" href="../term/term.css"/>
 
 	<script type="text/javascript">
 	<?php require_once '../public/load_lang_js.php';//加载js语言包?>

+ 1 - 1
app/studio/js/message.js

@@ -349,7 +349,7 @@ function msg_apply_data(obj) {
         let begin = obj.data.begin;
         let end = obj.data.end;
         $(
-          "[pcds='sent-net'][book='" +
+          "[pcds='sent-net-all'][book='" +
             book +
             "'][para='" +
             para +

+ 123 - 76
app/studio/js/render.js

@@ -450,7 +450,7 @@ function updataHeadingBlockInHtml(book, par) {
   }
 }
 
-function renderBlock() { }
+function renderBlock() {}
 /*
 重绘翻译数据块
 */
@@ -655,7 +655,7 @@ function renderTranslateParBlockInner(elementBlock) {
   return output;
 }
 
-function renderTranslateParBlockInnerPreview(strText) { }
+function renderTranslateParBlockInnerPreview(strText) {}
 function updateTranslationPreview_a(blockId, text) {
   var out = "";
   var newText = text;
@@ -1324,12 +1324,17 @@ function render_sent_tool_bar(elementBlock, begin) {
       iEnd;
   }
   output +=
-    "<span style='flex: 7;display: flex;'><div style='background-color: silver;'><span style='font-size: large; font-weight: bolder;' title=" + gLocal.gui.text_num + ">" +
+    "<span style='flex: 7;display: flex;'><div style='background-color: silver;'><span style='font-size: large; font-weight: bolder;' title=" +
+    gLocal.gui.text_num +
+    ">" +
     sentIdString +
     "</span><button class='icon_btn' onclick=\"copy_to_clipboard('" +
     sentIdStringLink +
-    "')\" title=" + gLocal.gui.copy_to_clipboard + ">";
-  output += '<svg style="fill: var(--link-color);" t="1601480724259" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4644"><path d="M791.272727 93.090909H139.636364v837.818182a93.090909 93.090909 0 0 1-93.090909-93.090909V93.090909a93.090909 93.090909 0 0 1 93.090909-93.090909h558.545454a93.090909 93.090909 0 0 1 93.090909 93.090909zM232.727273 186.181818h744.727272v837.818182H232.727273V186.181818z" p-id="4645"></path></svg>';
+    "')\" title=" +
+    gLocal.gui.copy_to_clipboard +
+    ">";
+  output +=
+    '<svg style="fill: var(--link-color);" t="1601480724259" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4644"><path d="M791.272727 93.090909H139.636364v837.818182a93.090909 93.090909 0 0 1-93.090909-93.090909V93.090909a93.090909 93.090909 0 0 1 93.090909-93.090909h558.545454a93.090909 93.090909 0 0 1 93.090909 93.090909zM232.727273 186.181818h744.727272v837.818182H232.727273V186.181818z" p-id="4645"></path></svg>';
   output += "</button>";
   //	output += "<span>"+abook+"-"+aparagraph+"-"+iBegin+"-"+iEnd+"</span>";
   if (_display_sbs == 0) {
@@ -1339,7 +1344,9 @@ function render_sent_tool_bar(elementBlock, begin) {
       abook +
       "&para=" +
       aparagraph +
-      "')\" target='_blank' title='" + gLocal.gui.scan_in_reader + "'>";
+      "')\" target='_blank' title='" +
+      gLocal.gui.scan_in_reader +
+      "'>";
   } else {
     //逐句模式
     output +=
@@ -1351,12 +1358,17 @@ function render_sent_tool_bar(elementBlock, begin) {
       iBegin +
       "&end=" +
       iEnd +
-      "')\" target='_blank' title='" + gLocal.gui.scan_in_reader + "'>";
+      "')\" target='_blank' title='" +
+      gLocal.gui.scan_in_reader +
+      "'>";
   }
-  output += '<svg style="fill: var(--link-color);" t="1601482753387" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="22291"><path d="M703.730499 544.578527a191.730499 191.730499 0 0 1 156.260356 302.806368l122.004508 122.004507a31.955083 31.955083 0 0 1-45.248398 45.184488l-121.940597-121.940598A191.730499 191.730499 0 1 1 703.730499 544.642437z m-6.391017-511.28133c38.857381 0 70.301183 30.67688 70.301183 68.511698v386.912146a255.640665 255.640665 0 1 0-69.022979 503.16474l-563.687667 0.06391c-38.857381 0-70.301183-30.67688-70.301183-68.447788V101.808895C64.628836 63.910166 96.072638 33.233286 134.930019 33.233286h562.409463z m6.391017 575.191496a127.820333 127.820333 0 1 0 0 255.640665 127.820333 127.820333 0 0 0 0-255.640665z m-351.505915 0h-127.820332a31.955083 31.955083 0 0 0-5.751915 63.398885l5.751915 0.511281h127.820332a31.955083 31.955083 0 0 0 0-63.910166z m0-191.730499h-127.820332a31.955083 31.955083 0 0 0-5.751915 63.398885l5.751915 0.511282h127.820332a31.955083 31.955083 0 0 0 0-63.910167z m191.730499-191.730499h-319.550831a31.955083 31.955083 0 0 0-5.751915 63.398885l5.751915 0.511282h319.550831a31.955083 31.955083 0 0 0 0-63.910167z" p-id="22292"></path></svg>';
+  output +=
+    '<svg style="fill: var(--link-color);" t="1601482753387" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="22291"><path d="M703.730499 544.578527a191.730499 191.730499 0 0 1 156.260356 302.806368l122.004508 122.004507a31.955083 31.955083 0 0 1-45.248398 45.184488l-121.940597-121.940598A191.730499 191.730499 0 1 1 703.730499 544.642437z m-6.391017-511.28133c38.857381 0 70.301183 30.67688 70.301183 68.511698v386.912146a255.640665 255.640665 0 1 0-69.022979 503.16474l-563.687667 0.06391c-38.857381 0-70.301183-30.67688-70.301183-68.447788V101.808895C64.628836 63.910166 96.072638 33.233286 134.930019 33.233286h562.409463z m6.391017 575.191496a127.820333 127.820333 0 1 0 0 255.640665 127.820333 127.820333 0 0 0 0-255.640665z m-351.505915 0h-127.820332a31.955083 31.955083 0 0 0-5.751915 63.398885l5.751915 0.511281h127.820332a31.955083 31.955083 0 0 0 0-63.910166z m0-191.730499h-127.820332a31.955083 31.955083 0 0 0-5.751915 63.398885l5.751915 0.511282h127.820332a31.955083 31.955083 0 0 0 0-63.910167z m191.730499-191.730499h-319.550831a31.955083 31.955083 0 0 0-5.751915 63.398885l5.751915 0.511282h319.550831a31.955083 31.955083 0 0 0 0-63.910167z" p-id="22292"></path></svg>';
   output += "</button>";
   output +=
-    "<button class='icon_btn' title='" + gLocal.gui.relational_map + "' class='rel_map' onclick=\"sent_show_rel_map('" +
+    "<button class='icon_btn' title='" +
+    gLocal.gui.relational_map +
+    "' class='rel_map' onclick=\"sent_show_rel_map('" +
     abook +
     "','" +
     aparagraph +
@@ -1364,7 +1376,9 @@ function render_sent_tool_bar(elementBlock, begin) {
     iBegin +
     "','" +
     iEnd +
-    "')\">" + '<svg style="transform: rotate(-90deg); fill: var(--link-color);" t="1601482033694" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="18290"><path d="M903.3 650.8H791.9V511.3H540.5V399.9h167.7c30.9 0 55.9-25.5 55.9-56.4V120.3c0-31.3-25.1-56.4-55.9-56.4H316.4c-30.9 0-55.5 25.1-55.5 56.4 0 0 0 222.8-0.4 223.2 0 31.3 25.1 56.4 55.9 56.4h168.2v111.4H232.8v139.6H120.9c-30.9-0.1-55.9 25-55.9 55.9v196.4c0 30.4 25.1 55.5 55.9 55.9h279.6c30.9 0 55.9-25.1 55.9-55.9V706.8c0-30.9-25.1-55.9-55.9-55.9H288.7v-83.7H736v83.7H624.2c-30.9 0-55.9 25.1-55.9 55.9v196.4c0 30.9 25.1 55.9 55.9 55.9h279.1c30.9 0 55.9-25.1 55.9-55.9V706.8c0-30.9-25-56-55.9-56z" p-id="18291"></path></svg>' + "</button>";
+    "')\">" +
+    '<svg style="transform: rotate(-90deg); fill: var(--link-color);" t="1601482033694" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="18290"><path d="M903.3 650.8H791.9V511.3H540.5V399.9h167.7c30.9 0 55.9-25.5 55.9-56.4V120.3c0-31.3-25.1-56.4-55.9-56.4H316.4c-30.9 0-55.5 25.1-55.5 56.4 0 0 0 222.8-0.4 223.2 0 31.3 25.1 56.4 55.9 56.4h168.2v111.4H232.8v139.6H120.9c-30.9-0.1-55.9 25-55.9 55.9v196.4c0 30.4 25.1 55.5 55.9 55.9h279.6c30.9 0 55.9-25.1 55.9-55.9V706.8c0-30.9-25.1-55.9-55.9-55.9H288.7v-83.7H736v83.7H624.2c-30.9 0-55.9 25.1-55.9 55.9v196.4c0 30.9 25.1 55.9 55.9 55.9h279.1c30.9 0 55.9-25.1 55.9-55.9V706.8c0-30.9-25-56-55.9-56z" p-id="18291"></path></svg>' +
+    "</button>";
   output += "</div>";
   output += "<guide gid='sent_func' style='margin:unset;'></guide>";
   output += "</span>";
@@ -1624,12 +1638,17 @@ function renderWordParBlockInner(elementBlock) {
           book + "-" + paragraph + "-" + nextBegin + "-" + nextEnd;
         let sentIdStringLink = "{{" + sentIdString + "}}";
         output +=
-          "<span style='flex: 7;display: flex;'><div style='background-color: silver;'><span style='font-size: large; font-weight: bolder;' title=" + gLocal.gui.text_num + ">" +
+          "<span style='flex: 7;display: flex;'><div style='background-color: silver;'><span style='font-size: large; font-weight: bolder;' title=" +
+          gLocal.gui.text_num +
+          ">" +
           sentIdString +
           "</span><button class='icon_btn' onclick=\"copy_to_clipboard('" +
           sentIdStringLink +
-          "')\" title=" + gLocal.gui.copy_to_clipboard + ">";
-        output += '<svg style="fill: var(--link-color);" t="1601480724259" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4644"><path d="M791.272727 93.090909H139.636364v837.818182a93.090909 93.090909 0 0 1-93.090909-93.090909V93.090909a93.090909 93.090909 0 0 1 93.090909-93.090909h558.545454a93.090909 93.090909 0 0 1 93.090909 93.090909zM232.727273 186.181818h744.727272v837.818182H232.727273V186.181818z" p-id="4645"></path></svg>';
+          "')\" title=" +
+          gLocal.gui.copy_to_clipboard +
+          ">";
+        output +=
+          '<svg style="fill: var(--link-color);" t="1601480724259" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4644"><path d="M791.272727 93.090909H139.636364v837.818182a93.090909 93.090909 0 0 1-93.090909-93.090909V93.090909a93.090909 93.090909 0 0 1 93.090909-93.090909h558.545454a93.090909 93.090909 0 0 1 93.090909 93.090909zM232.727273 186.181818h744.727272v837.818182H232.727273V186.181818z" p-id="4645"></path></svg>';
         output += "</button>";
         output +=
           "<button class='icon_btn'  onclick=\"window.open('../pcdl/reader.php?view=sent&book=" +
@@ -1640,12 +1659,17 @@ function renderWordParBlockInner(elementBlock) {
           nextBegin +
           "&end=" +
           nextEnd +
-          "')\" target='_blank' title='" + gLocal.gui.scan_in_reader + "'>";
+          "')\" target='_blank' title='" +
+          gLocal.gui.scan_in_reader +
+          "'>";
 
-        output += '<svg style="fill: var(--link-color);" t="1601482753387" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="22291"><path d="M703.730499 544.578527a191.730499 191.730499 0 0 1 156.260356 302.806368l122.004508 122.004507a31.955083 31.955083 0 0 1-45.248398 45.184488l-121.940597-121.940598A191.730499 191.730499 0 1 1 703.730499 544.642437z m-6.391017-511.28133c38.857381 0 70.301183 30.67688 70.301183 68.511698v386.912146a255.640665 255.640665 0 1 0-69.022979 503.16474l-563.687667 0.06391c-38.857381 0-70.301183-30.67688-70.301183-68.447788V101.808895C64.628836 63.910166 96.072638 33.233286 134.930019 33.233286h562.409463z m6.391017 575.191496a127.820333 127.820333 0 1 0 0 255.640665 127.820333 127.820333 0 0 0 0-255.640665z m-351.505915 0h-127.820332a31.955083 31.955083 0 0 0-5.751915 63.398885l5.751915 0.511281h127.820332a31.955083 31.955083 0 0 0 0-63.910166z m0-191.730499h-127.820332a31.955083 31.955083 0 0 0-5.751915 63.398885l5.751915 0.511282h127.820332a31.955083 31.955083 0 0 0 0-63.910167z m191.730499-191.730499h-319.550831a31.955083 31.955083 0 0 0-5.751915 63.398885l5.751915 0.511282h319.550831a31.955083 31.955083 0 0 0 0-63.910167z" p-id="22292"></path></svg>';
+        output +=
+          '<svg style="fill: var(--link-color);" t="1601482753387" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="22291"><path d="M703.730499 544.578527a191.730499 191.730499 0 0 1 156.260356 302.806368l122.004508 122.004507a31.955083 31.955083 0 0 1-45.248398 45.184488l-121.940597-121.940598A191.730499 191.730499 0 1 1 703.730499 544.642437z m-6.391017-511.28133c38.857381 0 70.301183 30.67688 70.301183 68.511698v386.912146a255.640665 255.640665 0 1 0-69.022979 503.16474l-563.687667 0.06391c-38.857381 0-70.301183-30.67688-70.301183-68.447788V101.808895C64.628836 63.910166 96.072638 33.233286 134.930019 33.233286h562.409463z m6.391017 575.191496a127.820333 127.820333 0 1 0 0 255.640665 127.820333 127.820333 0 0 0 0-255.640665z m-351.505915 0h-127.820332a31.955083 31.955083 0 0 0-5.751915 63.398885l5.751915 0.511281h127.820332a31.955083 31.955083 0 0 0 0-63.910166z m0-191.730499h-127.820332a31.955083 31.955083 0 0 0-5.751915 63.398885l5.751915 0.511282h127.820332a31.955083 31.955083 0 0 0 0-63.910167z m191.730499-191.730499h-319.550831a31.955083 31.955083 0 0 0-5.751915 63.398885l5.751915 0.511282h319.550831a31.955083 31.955083 0 0 0 0-63.910167z" p-id="22292"></path></svg>';
         output += "</button>";
         output +=
-          "<button class='icon_btn' title='" + gLocal.gui.relational_map + "' class='rel_map' onclick=\"sent_show_rel_map('" +
+          "<button class='icon_btn' title='" +
+          gLocal.gui.relational_map +
+          "' class='rel_map' onclick=\"sent_show_rel_map('" +
           book +
           "','" +
           paragraph +
@@ -1653,7 +1677,9 @@ function renderWordParBlockInner(elementBlock) {
           nextBegin +
           "','" +
           nextEnd +
-          "')\">" + '<svg style="transform: rotate(-90deg); fill: var(--link-color);" t="1601482033694" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="18290"><path d="M903.3 650.8H791.9V511.3H540.5V399.9h167.7c30.9 0 55.9-25.5 55.9-56.4V120.3c0-31.3-25.1-56.4-55.9-56.4H316.4c-30.9 0-55.5 25.1-55.5 56.4 0 0 0 222.8-0.4 223.2 0 31.3 25.1 56.4 55.9 56.4h168.2v111.4H232.8v139.6H120.9c-30.9-0.1-55.9 25-55.9 55.9v196.4c0 30.4 25.1 55.5 55.9 55.9h279.6c30.9 0 55.9-25.1 55.9-55.9V706.8c0-30.9-25.1-55.9-55.9-55.9H288.7v-83.7H736v83.7H624.2c-30.9 0-55.9 25.1-55.9 55.9v196.4c0 30.9 25.1 55.9 55.9 55.9h279.1c30.9 0 55.9-25.1 55.9-55.9V706.8c0-30.9-25-56-55.9-56z" p-id="18291"></path></svg>' + "</button>";
+          "')\">" +
+          '<svg style="transform: rotate(-90deg); fill: var(--link-color);" t="1601482033694" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="18290"><path d="M903.3 650.8H791.9V511.3H540.5V399.9h167.7c30.9 0 55.9-25.5 55.9-56.4V120.3c0-31.3-25.1-56.4-55.9-56.4H316.4c-30.9 0-55.5 25.1-55.5 56.4 0 0 0 222.8-0.4 223.2 0 31.3 25.1 56.4 55.9 56.4h168.2v111.4H232.8v139.6H120.9c-30.9-0.1-55.9 25-55.9 55.9v196.4c0 30.4 25.1 55.5 55.9 55.9h279.6c30.9 0 55.9-25.1 55.9-55.9V706.8c0-30.9-25.1-55.9-55.9-55.9H288.7v-83.7H736v83.7H624.2c-30.9 0-55.9 25.1-55.9 55.9v196.4c0 30.9 25.1 55.9 55.9 55.9h279.1c30.9 0 55.9-25.1 55.9-55.9V706.8c0-30.9-25-56-55.9-56z" p-id="18291"></path></svg>' +
+          "</button>";
         output += "</div>";
         output += "<guide gid='sent_func' style='margin:unset;'></guide>";
         output += "</span>";
@@ -1846,7 +1872,8 @@ function render_tran_sent_block(
       output += "未知的频道名";
     }
     output += "</span>";
-    output += "<span style='margin-left: auto;' class='send_status' id='send_" +
+    output +=
+      "<span style='margin-left: auto;' class='send_status' id='send_" +
       book +
       "_" +
       para +
@@ -1862,10 +1889,14 @@ function render_tran_sent_block(
   output += "</div>";
   let id =
     "tran_pre_" + book + "_" + para + "_" + begin + "_" + end + "_" + channal;
+  output += "<div class='trans_text_content' tid = '" + id;
+  if (channal == 0) {
+    output += "'  pcds='sent-net-all' ";
+  } else {
+    output += "'  pcds='sent-net' ";
+  }
+
   output +=
-    "<div class='trans_text_content' tid = '" +
-    id +
-    "'  pcds='sent-net' " +
     " book='" +
     book +
     "' para='" +
@@ -1950,7 +1981,8 @@ function render_tran_sent_block(
       "' >";
     output += objSent.text;
     output += "</textarea>";
-    output += "<div class='trans_text_info' style='justify-content: flex-end;'>";
+    output +=
+      "<div class='trans_text_info' style='justify-content: flex-end;'>";
     output += "<span></span>";
     output +=
       "<button class='icon_btn' onclick=\"trans_text_save('" +
@@ -1963,7 +1995,10 @@ function render_tran_sent_block(
       end +
       "','" +
       channal +
-      "')\" title=" + gLocal.gui.draft + ">" + '<svg class="icon" style="fill: var(--link-color); height: 2em; width: 2em;"><use xlink:href="svg/icon.svg#ic_save"></use></svg>'
+      "')\" title=" +
+      gLocal.gui.draft +
+      ">" +
+      '<svg class="icon" style="fill: var(--link-color); height: 2em; width: 2em;"><use xlink:href="svg/icon.svg#ic_save"></use></svg>';
     output += "</button>";
     output +=
       "<button class='icon_btn' onclick=\"trans_text_send('" +
@@ -1976,7 +2011,10 @@ function render_tran_sent_block(
       end +
       "','" +
       channal +
-      "')\" title=" + gLocal.gui.send + " disabled>" + '<svg class="icon" style="fill: var(--link-color); height: 2em; width: 2em;"><use xlink:href="svg/icon.svg#send_by_paper_plane"></use></svg>'
+      "')\" title=" +
+      gLocal.gui.send +
+      " disabled>" +
+      '<svg class="icon" style="fill: var(--link-color); height: 2em; width: 2em;"><use xlink:href="svg/icon.svg#send_by_paper_plane"></use></svg>';
     output += "</button>";
 
     output += "</div>";
@@ -1989,7 +2027,12 @@ function render_tran_sent_block(
       "<span></span>" +
       "<span><span class='tools'>";
 
-    output += "<button class='icon_btn' title=" + gLocal.gui.accept_copy + ">" + "<svg class='icon' style='fill: var(--link-color); height: 2em; width: 2em; '><use xlink='http://www.w3.org/1999/xlink' href='svg/icon.svg#ic_move_to_inbox'></use></svg>" + "</button>";
+    output +=
+      "<button class='icon_btn' title=" +
+      gLocal.gui.accept_copy +
+      ">" +
+      "<svg class='icon' style='fill: var(--link-color); height: 2em; width: 2em; '><use xlink='http://www.w3.org/1999/xlink' href='svg/icon.svg#ic_move_to_inbox'></use></svg>" +
+      "</button>";
 
     if (channal == 0) {
       //百家言 显示更多按钮
@@ -2002,7 +2045,11 @@ function render_tran_sent_block(
         begin +
         "','" +
         end +
-        "')\" title=" + gLocal.gui.message + ">" + '<svg class="icon" style="fill: var(--link-color); height: 2em; width: 2em;"><use xlink:href="plugin/system_message/icon.svg#icon_message"></use></svg>' + "</button>";
+        "')\" title=" +
+        gLocal.gui.message +
+        ">" +
+        '<svg class="icon" style="fill: var(--link-color); height: 2em; width: 2em;"><use xlink:href="plugin/system_message/icon.svg#icon_message"></use></svg>' +
+        "</button>";
     }
 
     output += "</span><span>" + usent_count + "</span></span>";
@@ -2015,15 +2062,15 @@ function render_tran_sent_block(
 function trans_text_save(book, para, begin, end, channal) {
   let textarea = $(
     "#trans_sent_edit_" +
-    book +
-    "_" +
-    para +
-    "_" +
-    begin +
-    "_" +
-    end +
-    "_" +
-    channal
+      book +
+      "_" +
+      para +
+      "_" +
+      begin +
+      "_" +
+      end +
+      "_" +
+      channal
   );
   if (textarea) {
     let objsent = new Object();
@@ -2044,16 +2091,16 @@ function sent_edit_click(book, para, begin, end, channal) {
   $(".trans_sent_edit").parent().hide(200);
   $(
     ".trans_sent_edit[book='" +
-    book +
-    "'][para='" +
-    para +
-    "'][begin='" +
-    begin +
-    "'][end='" +
-    end +
-    "'][channal='" +
-    channal +
-    "']"
+      book +
+      "'][para='" +
+      para +
+      "'][begin='" +
+      begin +
+      "'][end='" +
+      end +
+      "'][channal='" +
+      channal +
+      "']"
   )
     .parent()
     .show();
@@ -2146,7 +2193,7 @@ function renderWordHeadInner(element) {
     wStyle += " term_word_head";
   } else {
     if (sParent.length > 0) {
-      if (term_lookup_my(sParent) != null) {
+      if (term_lookup_my(sParent) != false) {
         wStyle += " term_my";
       } else {
         if (term_lookup_all(sParent) != null) {
@@ -2802,12 +2849,12 @@ function renderWordDetailByElement(xmlElement) {
             ) {
               arrMeaning.push(
                 g_DictWordList[iDict].dictID +
-                "$" +
-                arrMeaning.length +
-                "$$" +
-                arrMean[i] +
-                "$" +
-                g_DictWordList[iDict].Language
+                  "$" +
+                  arrMeaning.length +
+                  "$$" +
+                  arrMean[i] +
+                  "$" +
+                  g_DictWordList[iDict].Language
               );
             }
           }
@@ -2857,12 +2904,12 @@ function renderWordDetailByElement(xmlElement) {
               ) {
                 arrMeaning.push(
                   g_DictWordList[iDict].dictID +
-                  "$" +
-                  arrMeaning.length +
-                  "$*$" +
-                  getLocalParentFormulaStr(wordGramma0, arrMean[i]) +
-                  "$" +
-                  g_DictWordList[iDict].Language
+                    "$" +
+                    arrMeaning.length +
+                    "$*$" +
+                    getLocalParentFormulaStr(wordGramma0, arrMean[i]) +
+                    "$" +
+                    g_DictWordList[iDict].Language
                 );
               }
             }
@@ -2912,12 +2959,12 @@ function renderWordDetailByElement(xmlElement) {
               ) {
                 arrMeaning.push(
                   g_DictWordList[iDict].dictID +
-                  "$" +
-                  arrMeaning.length +
-                  "$**$" +
-                  getLocalParentFormulaStr(wordGramma1, arrMean[i]) +
-                  "$" +
-                  g_DictWordList[iDict].Language
+                    "$" +
+                    arrMeaning.length +
+                    "$**$" +
+                    getLocalParentFormulaStr(wordGramma1, arrMean[i]) +
+                    "$" +
+                    g_DictWordList[iDict].Language
                 );
               }
             }
@@ -3392,7 +3439,7 @@ function renderWordDetailByElement(xmlElement) {
   return _txtOutDetail;
 }
 
-function renderWordNoteDivByParaNo(book, paragraph) { }
+function renderWordNoteDivByParaNo(book, paragraph) {}
 /*
 paragraph word note
 */
@@ -3591,7 +3638,7 @@ function updateWordNote(element) {
   }
 }
 
-function updateWordCommentary(element) { }
+function updateWordCommentary(element) {}
 
 //根据xmlDocument 对象中的单词序号修改单词块的显示(不含Pali)
 //返回 无
@@ -3714,13 +3761,13 @@ function prev_page() {
   gVisibleParEndOld = gVisibleParEnd;
   if (
     g_allparlen_array[gVisibleParEnd - 1] -
-    g_allparlen_array[gVisibleParBegin - 1] <=
+      g_allparlen_array[gVisibleParBegin - 1] <=
     gDisplayCapacity
   ) {
     gVisibleParBegin -= 1;
   } else if (
     g_allparlen_array[gVisibleParEnd + 1] -
-    g_allparlen_array[gVisibleParBegin - 1] >
+      g_allparlen_array[gVisibleParBegin - 1] >
     gDisplayCapacity
   ) {
     gVisibleParBegin -= 1;
@@ -3747,13 +3794,13 @@ function next_page() {
 
   if (
     g_allparlen_array[gVisibleParEnd + 1] -
-    g_allparlen_array[gVisibleParBegin + 1] <=
+      g_allparlen_array[gVisibleParBegin + 1] <=
     gDisplayCapacity
   ) {
     gVisibleParEnd += 1;
   } else if (
     g_allparlen_array[gVisibleParEnd + 1] -
-    g_allparlen_array[gVisibleParBegin + 1] >
+      g_allparlen_array[gVisibleParBegin + 1] >
     gDisplayCapacity
   ) {
     gVisibleParBegin += 1;
@@ -4194,12 +4241,12 @@ function refreshNoteNumber() {
     let id = $(this).attr("wid");
     $(this).html(
       "<a href='#word_note_root_" +
-      id +
-      "' name=\"word_note_" +
-      id +
-      '">[' +
-      (index + 1) +
-      "]</a>"
+        id +
+        "' name=\"word_note_" +
+        id +
+        '">[' +
+        (index + 1) +
+        "]</a>"
     );
   });
 

+ 0 - 0
app/studio/note/note.js → app/studio/note-/note.js


+ 0 - 0
app/studio/note/note.php → app/studio/note-/note.php


+ 0 - 0
app/studio/term.php → app/studio/term-.php


+ 45 - 5
app/term/channal_list.php

@@ -23,10 +23,16 @@ $dns = "sqlite:"._FILE_DB_SENTENCE_;
 $db_trans_sent = new PDO($dns, "", "",array(PDO::ATTR_PERSISTENT=>true));
 $db_trans_sent->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);  
 
+$dns = "sqlite:"._FILE_DB_PALI_SENTENCE_;
+$db_pali_sent = new PDO($dns, "", "",array(PDO::ATTR_PERSISTENT=>true));
+$db_pali_sent->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);  
 
 $channal = array();
 
+$final = array();
+$article_len=0;
 foreach ($_data as $key => $value) {
+	$pali_letter = array();
 	# code...
 	$id = $value["id"];
 	$arrInfo = str_getcsv($value["data"],"@");
@@ -39,20 +45,37 @@ foreach ($_data as $key => $value) {
 	//find out translation
 	$tran="";
 	try{
+		# 查询句子长度
+		$pali_letter["id"]=$arrInfo[0];
+		$query="SELECT length FROM pali_sent WHERE book= ? AND paragraph= ? AND begin= ? AND end= ?  ";
+		$stmt = $db_pali_sent->prepare($query);
+		$stmt->execute(array($bookId,$para,$begin,$end));
+		$Fetch = $stmt->fetch(PDO::FETCH_ASSOC);
+		if($Fetch){
+			$pali_letter["len"]=$Fetch["length"];
+			$article_len+=$Fetch["length"];
+		}
+		else{
+			$pali_letter["len"]=0;
+		}
+
 		$query="SELECT channal FROM sentence WHERE book= ? AND paragraph= ? AND begin= ? AND end= ?  AND strlen >0  group by channal  limit 0 ,20 ";
 		$stmt = $db_trans_sent->prepare($query);
 		$stmt->execute(array($bookId,$para,$begin,$end));
 		$Fetch = $stmt->fetchAll(PDO::FETCH_ASSOC);
 		foreach ($Fetch as $key => $value) {
-            # code...
-            if(isset($value["channal"])){
-                $channal[$value["channal"]] ++;
+			# code...
+			$pali_letter[$value["channal"]]=1;
+            if(isset($channal[$value["channal"]])){
+				$channal[$value["channal"]] ++;
 			}
 			else{
 				$channal[$value["channal"]] = 1;
 			}
             
-        }
+		}
+		
+		$final[]=$pali_letter;
 	}
 	catch (Exception $e) {
 		$tran = $e->getMessage();
@@ -64,13 +87,30 @@ foreach ($_data as $key => $value) {
 }
 
 foreach ($channal as $key => $value) {
-    # code...
+	# 计算句子的完成分布
+	$arr_sent_final = array();
+	foreach ($final as  $final_value) {
+		# code...
+		$sent_final = array();
+		$sent_final["id"]=$final_value["id"];
+		$sent_final["len"]=$final_value["len"];
+		if(isset($final_value[$key]) && $final_value[$key]==1){
+			$sent_final["final"]=true;
+		}
+		else{
+			$sent_final["final"]=false;
+		}
+		$arr_sent_final[] = $sent_final;
+	}
     $channalInfo = $_channal->getChannal($key);
     $name = $_userinfo->getName($channalInfo["owner"]);
     $channalInfo["username"] = $name["username"];
 	$channalInfo["nickname"] = $name["nickname"];
 	$channalInfo["count"] = $value;
 	$channalInfo["all"] = count($_data);
+	$channalInfo["final"] =$arr_sent_final;
+	$channalInfo["article_len"] =$article_len;
+
     $output[]= $channalInfo;
 }
 

+ 22 - 18
app/term/my_dict_list.php

@@ -1,8 +1,10 @@
 <?php
 require_once '../studio/index_head.php';
 ?>
-<body id="file_list_body" onLoad="course_list()">
-
+<body id="file_list_body" onLoad="my_term_onload()">
+    <script src="../term/my_term.js"></script>
+    <script src="../term/term_edit_dlg.js"></script>
+	<link type="text/css" rel="stylesheet" href="../term/term_edit_dlg.css"/>	
 	<script >
 	var gCurrPage="term";
 	</script>
@@ -31,18 +33,16 @@ require_once '../studio/index_head.php';
 
 		<div class="tool_bar">
 	<div>
-	术语百科
+	Term
 	</div>
 
 	<div>
 		<span class="icon_btn_div">
 			<span class="icon_btn_tip"><?php echo $_local->gui->add;?></span>
-			<button id="file_add" type="button" class="icon_btn" title=" ">
-				<a href="../course/my_channal_new.php">
+			<button id="file_add" type="button" class="icon_btn" title=" " onclick="term_edit_dlg_open()">
 				<svg class="icon">
 					<use xlink:href="../studio/svg/icon.svg#ic_add_circle"></use>
 				</svg>
-				</a>
 			</button>
 		</span>
 		
@@ -78,9 +78,9 @@ $iOnePage=300;
 $dictFileName=_FILE_DB_TERM_;
 PDO_Connect("sqlite:$dictFileName");
 
-$query = "select count(*) as co  from term where owner= ".$PDO->quote($USER_NAME);
+$query = "select count(*) as co  from term where owner= ? ";
 
-$allWord = PDO_FetchOne($query);
+$allWord = PDO_FetchOne($query,array($_COOKIE["userid"]));
 $iCountWords=$allWord;
 
 if($iCountWords==0){
@@ -94,8 +94,8 @@ else{
     }
     $begin=$iCurrPage*$iOnePage;
 
-    $query = "select *  from term where owner= ".$PDO->quote($USER_NAME);
-    $allWords = PDO_FetchAll($query);
+    $query = "select *  from term where owner= ? ";
+    $allWords = PDO_FetchAll($query,array($_COOKIE["userid"]));
 
     echo '<div id="setting_user_dict_nav">';
 
@@ -125,12 +125,14 @@ else{
     <div>
         <div style="display:flex;">
             <div style='max-width:2em;flex:1;'></div>
-            <div style='flex:1;'>序号</div>
-            <div style='flex:2;'>拼写</div>
-            <div style='flex:2;'>意思</div>
-            <div style='flex:2;'>第二个意思</div>
-            <div style='flex:5;'>注解</div>
-            <div style='flex:1;'>语言</div>
+            <div style='flex:1;'>Sn</div>
+            <div style='flex:2;'>Spell</div>
+            <div style='flex:2;'>Meaning</div>
+            <div style='flex:2;'>Meaning2</div>
+            <div style='flex:4;'>Note</div>
+            <div style='flex:1;'>Language</div>
+            <div style='flex:1;'>Channal</div>
+            <div style='flex:1;'></div>
         </div>
     <?php
     
@@ -141,8 +143,10 @@ else{
         echo "<div style='flex:2;'>{$word["word"]}</div>";
         echo "<div style='flex:2;'>{$word["meaning"]}</div>";
         echo "<div style='flex:2;'>{$word["other_meaning"]}</div>";
-        echo "<div style='flex:5;'><textarea style='width:100%;'>{$word["note"]}</textarea></div>";
-        echo "<div style='flex:1;'></div>";
+        echo "<div style='flex:4;'><textarea style='width:100%;'>{$word["note"]}</textarea></div>";
+        echo "<div style='flex:1;'>{$word["language"]}</div>";
+        echo "<div style='flex:1;'>{$word["channal"]}</div>";
+        echo "<div style='flex:1;'><button onclick=\"term_edit_dlg_open('{$word["guid"]}')\">edit</button></div>";
         echo "</div>";
     }
 

+ 3 - 0
app/term/my_term.js

@@ -0,0 +1,3 @@
+function my_term_onload() {
+  term_edit_dlg_init();
+}

+ 123 - 28
app/term/note.js

@@ -134,6 +134,24 @@ function note_refresh_new() {
                   .parent()
                   .children(".palitext");
                 if (divPali.length == 0) {
+                  if (_channal != "") {
+                    let arrChannal = _channal.split(",");
+                    for (
+                      let index = arrChannal.length - 1;
+                      index >= 0;
+                      index--
+                    ) {
+                      const iChannal = arrChannal[index];
+                      $("#" + id)
+                        .parent()
+                        .prepend(
+                          "<div class='tran_div'  channal='" +
+                            iChannal +
+                            "'></div>"
+                        );
+                    }
+                  }
+
                   $("#" + id)
                     .parent()
                     .prepend("<div class='palitext'></div>");
@@ -145,12 +163,29 @@ function note_refresh_new() {
                   .append(strPalitext);
                 let htmlTran = "";
                 for (const oneTran of iterator.translation) {
-                  htmlTran +=
-                    "<span class='tran'>" +
-                    marked(term_std_str_to_tran(oneTran.text)) +
+                  let html =
+                    "<span class='tran' lang='" +
+                    oneTran.lang +
+                    "' channal='" +
+                    oneTran.channal +
+                    "'>" +
+                    marked(
+                      term_std_str_to_tran(
+                        oneTran.text,
+                        oneTran.channal,
+                        oneTran.editor,
+                        oneTran.lang
+                      )
+                    ) +
                     "</span>";
+                  if (_channal == "") {
+                    htmlTran += html;
+                  } else {
+                    $("#" + id)
+                      .siblings(".tran_div[channal='" + oneTran.channal + "']")
+                      .append(html);
+                  }
                 }
-
                 $("#" + id).html(htmlTran);
               } else {
                 //句子模式
@@ -197,7 +232,6 @@ function note_refresh_new() {
 
 function note_channal_list() {
   console.log("note_channal_list start");
-  let objNotes = document.querySelectorAll("note");
   let arrSentInfo = new Array();
   $("note").each(function () {
     let info = $(this).attr("info");
@@ -205,16 +239,7 @@ function note_channal_list() {
       arrSentInfo.push({ id: "", data: info });
     }
   });
-  /*
-  for (const iterator of objNotes) {
-    {
-      let info = iterator.getAttributeNode("info").value;
-      if (info && info != "") {
-        arrSentInfo.push({ id: "", data: info });
-      }
-    }
-  }
-*/
+
   if (arrSentInfo.length > 0) {
     $.post(
       "../term/channal_list.php",
@@ -314,20 +339,67 @@ function render_channal_list(channalinfo) {
   output += channalinfo["nickname"] + "/";
   output += "@" + channalinfo["username"];
   output += "</div>";
-  output += "<div style='background-color: #e0dfdffa;'>";
-  output +=
-    "<span  style='display: inline-block;background-color: #65ff65;width: " +
-    (channalinfo["count"] * 100) / channalinfo["all"] +
-    "%;'>";
-  output += channalinfo["count"] + "/" + channalinfo["all"];
-  output += "</span>";
 
-  output += "</div>";
+  if (channalinfo["final"]) {
+    //进度
+    output += "<div>";
+    let article_len = channalinfo["article_len"];
+    let svg_width = article_len;
+    let svg_height = parseInt(article_len / 10);
+    output +=
+      '<svg viewBox="0 0 ' + svg_width + " " + svg_height + '" width="100%" >';
+
+    let curr_x = 0;
+    let allFinal = 0;
+    for (const iterator of channalinfo["final"]) {
+      let stroke_width = parseInt(iterator.len);
+      output += "<rect ";
+      output += ' x="' + curr_x + '"';
+      output += ' y="0"';
+      output += ' height="' + svg_height + '"';
+      output += ' width="' + stroke_width + '"';
+
+      if (iterator.final == true) {
+        allFinal += stroke_width;
+        output += ' class="progress_bar_done" ';
+      } else {
+        output += ' class="progress_bar_undone" ';
+      }
+      output += "/>";
+
+      curr_x += stroke_width;
+    }
+    output +=
+      "<rect  x='0' y='0'  width='" +
+      svg_width +
+      "' height='" +
+      svg_height / 5 +
+      "' class='progress_bar_bg' />";
+    output +=
+      "<rect  x='0' y='0'  width='" +
+      allFinal +
+      "' height='" +
+      svg_height / 5 +
+      "' class='progress_bar_percent' style='stroke-width: 0; fill: rgb(100, 228, 100);'/>";
+    output +=
+      '<text x="0" y="' +
+      svg_height +
+      '" font-size="' +
+      svg_height * 0.8 +
+      '">';
+    output += channalinfo["count"] + "/" + channalinfo["all"];
+    output += "</text>";
+    output += "<svg>";
+    output += "</div>";
+    //进度结束
+  }
+
   output += "</div>";
   output += "</div>";
   return output;
 }
 
+//点击引用 需要响应的事件
 function note_ref_init() {
   $("chapter").click(function () {
     let bookid = $(this).attr("book");
@@ -357,7 +429,7 @@ function note_json_html(in_json) {
   let output = "";
   output += "<div class='palitext'>" + in_json.palitext + "</div>";
   for (const iterator of in_json.translation) {
-    output += "<div class='tran'>";
+    output += "<div class='tran' lang='" + iterator.lang + "'>";
     output +=
       "<span class='edit_button' onclick=\"note_edit_sentence('" +
       in_json.book +
@@ -385,9 +457,22 @@ function note_json_html(in_json) {
       "'>";
     if (iterator.text == "") {
       //let channal = find_channal(iterator.channal);
-      output += "<span style='color:var(--border-line-color);'>新建译文</span>";
+      output += "<span style='color:var(--border-line-color);'></span>";
+      output +=
+        "<span style='color:var(--border-line-color);'>" +
+        iterator.channalinfo.name +
+        "-" +
+        iterator.channalinfo.lang +
+        "</span>";
     } else {
-      output += marked(term_std_str_to_tran(iterator.text));
+      output += marked(
+        term_std_str_to_tran(
+          iterator.text,
+          iterator.channal,
+          iterator.editor,
+          iterator.lang
+        )
+      );
     }
     output += "</div>";
 
@@ -485,7 +570,7 @@ function note_sent_save() {
       if (result.status > 0) {
         alert("error" + result.message);
       } else {
-        alert("成功");
+        ntf_show("success");
         $(
           "#tran_text_" +
             result.book +
@@ -497,7 +582,17 @@ function note_sent_save() {
             result.end +
             "_" +
             result.channal
-        ).html(marked(result.text));
+        ).html(
+          marked(
+            term_std_str_to_tran(
+              result.text,
+              result.channal,
+              result.editor,
+              result.lang
+            )
+          )
+        );
+        term_updata_translation();
         for (const iterator of _arrData) {
           if (
             iterator.book == result.book &&

+ 25 - 7
app/term/note.php

@@ -1,8 +1,11 @@
 <?php
 require_once "../public/_pdo.php";
 require_once "../public/function.php";
+require_once "../channal/function.php";
 require_once "../path.php";
 
+$_channal = new Channal();
+
 $_data = array();
 if(isset($_POST["data"])){
 	$_data = json_decode($_POST["data"],true);
@@ -77,9 +80,10 @@ foreach ($_data as $key => $value) {
 		$palitext="";
 	}
 
-	//find out translation
+	//find out translation 查询译文
 	$tran="";
 	$translation = array();
+	$tran_channal = array();
 	try{
 		if(empty($_setting["channal"])){
 			if($sentChannal==""){
@@ -102,7 +106,10 @@ foreach ($_data as $key => $value) {
 				$Fetch = $stmt->fetch(PDO::FETCH_ASSOC);
 				if($Fetch){
 					$tran = $Fetch["text"];
-					$translation[]=array("id"=>$Fetch["id"],"text"=>$Fetch["text"],"channal"=>$Fetch["channal"]);
+					$translation[]=array("id"=>$Fetch["id"],"text"=>$Fetch["text"],"lang"=>$Fetch["language"],"channal"=>$Fetch["channal"],"editor"=>$Fetch["editor"]);
+					if(!empty($Fetch["channal"])){
+						$tran_channal[$Fetch["channal"]] = $Fetch["channal"];
+					}
 				}
 			}
 			else{
@@ -110,7 +117,8 @@ foreach ($_data as $key => $value) {
 				$Fetch = $stmt->fetch(PDO::FETCH_ASSOC);
 				if($Fetch){
 					$tran = $Fetch["text"];
-					$translation[]=array("id"=>$Fetch["id"],"text"=>$Fetch["text"],"channal"=>$Fetch["channal"]);
+					$translation[]=array("id"=>$Fetch["id"],"text"=>$Fetch["text"],"lang"=>$Fetch["language"],"channal"=>$Fetch["channal"],"editor"=>$Fetch["editor"]);
+					$tran_channal[$Fetch["channal"]] = $Fetch["channal"];
 				}
 			}
 		}
@@ -121,21 +129,31 @@ foreach ($_data as $key => $value) {
 				$stmt->execute(array($bookId,$para,$begin,$end,$value));
 				$Fetch = $stmt->fetch(PDO::FETCH_ASSOC);
 				if($Fetch){
-					$translation[]=array("id"=>$Fetch["id"],"text"=>$Fetch["text"],"channal"=>$value);
+					$translation[]=array("id"=>$Fetch["id"],"text"=>$Fetch["text"],"lang"=>$Fetch["language"],"channal"=>$value,"editor"=>$Fetch["editor"]);
+					
 				}
 				else{
-					$translation[]=array("id"=>"","text"=>"","channal"=>$value);
+					$translation[]=array("id"=>"","text"=>"","lang"=>"","channal"=>$value);
 				}
+				$tran_channal[$value] = $value;
 			}
 		}
-		
-
 		$tran_count = 1;
 	}
 	catch (Exception $e) {
 		$tran = $e->getMessage();
 		//echo 'Caught exception: ',  $e->getMessage(), "\n";
 	}
+
+	foreach ($tran_channal as $key => $value) {
+		# code...
+		$tran_channal[$key] = $_channal->getChannal($key);
+	}
+	foreach ($translation as $key => $value) {
+		# code...
+		$translation[$key]["channalinfo"]=$tran_channal[$value["channal"]];
+	}
+
 	
 	$para_path=_get_para_path($bookId,$para);
 

+ 147 - 0
app/term/term.css

@@ -63,3 +63,150 @@ commentary {
   border-left: 3px solid gray;
   padding-left: 5px;
 }
+
+note > .tran {
+  color: #5c5c5c;
+  padding-left: 1em;
+  padding: 3px;
+}
+note > .palitext,
+.palitext {
+  font-family: Noto serif;
+  line-height: 1.5em;
+  color: #9f3a01;
+  font-weight: 500;
+}
+note > .palitext > note {
+  display: inline;
+  color: blue;
+  background-color: unset;
+  padding: unset;
+  margin-bottom: unset;
+  border-radius: unset;
+}
+
+.term_word_head_pali {
+  text-transform: capitalize;
+  font-size: 200%;
+  margin: 0.5em 0;
+}
+.term_word_head {
+  border-bottom: 1px solid #cecece;
+  padding: 5px 0;
+}
+.term_block {
+  border-bottom: 1px solid #cecece;
+  padding: 5px 0;
+}
+.term_word_head_authors a {
+  color: blue;
+  margin: 0 3px;
+}
+.term_word_head_authors a:hover {
+  text-decoration: underline;
+  cursor: pointer;
+}
+
+note .ref {
+  text-align: right;
+  padding: 5px;
+  font-size: 75%;
+  margin-top: 8px;
+}
+
+.tran ul {
+  list-style-type: circle;
+  margin-left: 2em;
+}
+
+.tran li {
+  list-style: inherit;
+}
+
+.tran ol {
+  list-style-type: decimal;
+  margin: 0;
+  padding: 0;
+  margin-left: 2em;
+}
+
+.tran:lang(en) > ol {
+  list-style-type: decimal;
+}
+
+/*中文*/
+.tran:lang(zh) > ol {
+  list-style-type: cjk-ideographic;
+  margin-left: 2.5em;
+}
+
+/*简体中文*/
+.tran:lang(zh-cn) > ol {
+  list-style-type: trad-chinese-formal;
+  margin-left: 2.5em;
+}
+.tran:lang(zh-hans) > ol {
+  list-style-type: trad-chinese-formal;
+  margin-left: 2.5em;
+}
+/*繁体中文*/
+.tran:lang(zh-tw) > ol {
+  list-style-type: trad-chinese-formal;
+  margin-left: 2.5em;
+}
+.tran:lang(zh-hant) > ol {
+  list-style-type: trad-chinese-formal;
+  margin-left: 2.5em;
+}
+
+/*japanese*/
+.tran:lang(jp) > ol {
+  list-style-type: hiragana;
+  margin-left: 2.5em;
+}
+/*kora*/
+.tran:lang(ko) > ol {
+  list-style-type: korean-hangul-formal;
+  margin-left: 2.5em;
+}
+/*thai*/
+.tran:lang(ti) > ol {
+  list-style-type: thai;
+  margin-left: 2em;
+}
+/*myanmar*/
+.tran:lang(my) > ol {
+  list-style-type: myanmar;
+  margin-left: 2em;
+}
+
+.tran_div {
+  margin-bottom: 1em;
+  padding-bottom: 1em;
+  padding-top: 0.5em;
+  border-bottom: 1px solid var(--border-line-color);
+}
+
+.tran_div:last-child {
+  border-bottom: none;
+}
+
+.progress_bar_done {
+  stroke-width: 0;
+  fill: royalblue;
+}
+
+.progress_bar_undone {
+  stroke-width: 0;
+  fill: #c0c0c052;
+}
+
+.progress_bar_bg {
+  stroke-width: 0;
+  fill: #ffffff;
+}
+
+.progress_bar_percent {
+  stroke-width: 0;
+  fill: limegreen;
+}

+ 177 - 133
app/term/term.js

@@ -5,8 +5,10 @@ var arrAllMean = new Array();
 var arrTermAllPali = new Array();
 var arrWordIdTermId = new Array();
 
+//术语渲染模板
 var strTermTanslationTmp = "[%mean%](%pali% %mean2% %mymean%)";
 var strTermTanslationTmp2 = "[%mean%]";
+
 var termCounter = new Array();
 var noteCounter = 0; //正文内注释计数器
 
@@ -23,16 +25,25 @@ function note_replace(strIn) {
   return output;
 }
 
-function term_init() { }
+function term_init() {}
 var str_term_fun_word_link = "term_show_win";
 function term_word_link_fun(fun_name) {
   str_term_fun_word_link = fun_name;
 }
 //将存储状态的字符串转换为预显示字符串
 //设置状态为 0:未处理的原始状态
-function term_std_str_to_tran(strIn) {
+function term_std_str_to_tran(strIn, channal = "", editor = "", lang = "") {
   return strIn
-    .replace(/\[\[/g, "<term status='0'>")
+    .replace(
+      /\[\[/g,
+      "<term status='0' channal='" +
+        channal +
+        "' editor='" +
+        editor +
+        "' lang='" +
+        lang +
+        "'>"
+    )
     .replace(/\]\]/g, "</term>");
 }
 
@@ -93,9 +104,9 @@ function term_get_std_str(strMean) {
   return "unkow@" + strMean;
 }
 function term_get_my_std_str(strMean) {
-  for (var x in arrMyTerm) {
-    if (arrMyTerm[x].meaning == strMean) {
-      return arrMyTerm[x].guid + "@" + strMean;
+  for (const iterator of arrMyTerm) {
+    if (iterator.meaning == strMean) {
+      return iterator.guid + "@" + strMean;
     }
   }
   return "unkow@" + strMean;
@@ -104,9 +115,9 @@ function term_get_my_std_str(strMean) {
 function note_lookup(word, showto) {
   $("#" + showto).load(
     "../term/term.php?op=search&word=" +
-    word +
-    "&username=" +
-    getCookie("username"),
+      word +
+      "&username=" +
+      getCookie("username"),
     function (responseTxt, statusTxt, xhr) {
       if (statusTxt == "success") {
         $(".term_note").each(function (index, element) {
@@ -121,82 +132,15 @@ function note_lookup(word, showto) {
   );
 }
 
-function note_lookup_guid_json(guid, showto) {
-  $.get(
-    "../term/term.php",
-    {
-      op: "load_id",
-      id: guid,
-      format: "json",
-    },
-    function (data, status) {
-      let html = "";
-      if (status == "success") {
-        try {
-          let result = JSON.parse(data)[0];
-          html = "<div class='term_block'>";
-
-          html += "<h2>" + result.word + "</h2>";
-          html += "<div class='meaning'>" + result.meaning + "</div>";
-          html +=
-            "<div class='term_note' status='1'>" +
-            note_init(result.note) +
-            "</div>";
-          html += "</div>";
-          $("#" + showto).html(html);
-          note_refresh_new();
-        } catch (e) {
-          console.error("note_lookup_guid_json:" + e + " data:" + data);
-        }
-      }
-    }
-  );
-}
-
-function term_load_preview(guid, showto) {
-  $.get(
-    "../term/term.php",
-    {
-      op: "load_id",
-      id: guid,
-      format: "json",
-    },
-    function (data, status) {
-      let html = "";
-      if (status == "success") {
-        try {
-          let result = JSON.parse(data)[0];
-          html = "<div class='term_block'>";
-
-          html += "<h2>" + result.word + "</h2>";
-          html += "<div class='meaning'>" + result.meaning + "</div>";
-          html +=
-            "<div class='term_note' status='1'>" +
-            note_init(result.note) +
-            "</div>";
-          html +=
-            "<div ><a href='../wiki/wiki.php?word=" +
-            result.word +
-            "' target='_blank'>更多</a></div>";
-          html += "</div>";
-          $("#" + showto).html(html);
-        } catch (e) {
-          console.error("note_lookup_guid_json:" + e + " data:" + data);
-        }
-      }
-    }
-  );
-}
-
 var term_get_word_to_div_callback = null;
 function term_get_word_to_div(strWord, div, callback) {
   term_get_word_to_div_callback = callback;
-  $.get(
-    "../term/term.php",
+  let word = [{ pali: strWord, channal: "", editor: "", lang: "" }];
+
+  $.post(
+    "../term/term_get.php",
     {
-      op: "get",
-      word: strWord,
-      format: "json",
+      words: JSON.stringify(word),
     },
     function (data, status) {
       if (status == "success") {
@@ -214,7 +158,7 @@ function term_get_word_to_div(strWord, div, callback) {
                 type[iterator.tag] = new Array();
               }
               type[iterator.tag].push(iterator.meaning);
-              authors[iterator.owner] = 1;
+              authors[iterator.owner] = iterator.user;
             }
 
             html += "<div class='term_word_head'>";
@@ -231,9 +175,16 @@ function term_get_word_to_div(strWord, div, callback) {
               }
               html += "</div>";
             }
-            html += "<div class='term_word_head_authors'>" + gLocal.gui.contributor + ":";
+            html +=
+              "<div class='term_word_head_authors'>" +
+              gLocal.gui.contributor +
+              ":";
             for (y in authors) {
-              html += '<a onclick="">' + y + "</a> ";
+              if (authors[y].nickname != "") {
+                html += '<a onclick="">' + authors[y].nickname + "</a> ";
+              } else {
+                html += '<a onclick="">' + y + "</a> ";
+              }
             }
 
             html += "</div>";
@@ -266,9 +217,17 @@ function term_get_word_to_div(strWord, div, callback) {
 
               html += "<div class='term_block_bar_right'>";
               html +=
-                "<span><button class='icon_btn'><a href='#'>" + gLocal.gui.edit + "</a></button>";
-              html += "<button class='icon_btn'><a href='#'>" + gLocal.gui.like + "</a></button>";
-              html += "<button class='icon_btn'><a href='#'>" + gLocal.gui.favorite + "</a></button></span>";
+                "<span><button class='icon_btn'><a href='#'>" +
+                gLocal.gui.edit +
+                "</a></button>";
+              html +=
+                "<button class='icon_btn'><a href='#'>" +
+                gLocal.gui.like +
+                "</a></button>";
+              html +=
+                "<button class='icon_btn'><a href='#'>" +
+                gLocal.gui.favorite +
+                "</a></button></span>";
               html += "</div>";
 
               html += "</div>";
@@ -284,17 +243,17 @@ function term_get_word_to_div(strWord, div, callback) {
             html += "<div id='term_list_right' >";
 
             html += '<div class="fun_frame">';
-            html += '<div class="title">' + gLocal.gui.language + '</div>';
+            html += '<div class="title">' + gLocal.gui.language + "</div>";
             html += '<div class="content" style="max-height:10em;">';
-            html += '<div><a href="">' + gLocal.gui.all + '</a></div>';
+            html += '<div><a href="">' + gLocal.gui.all + "</a></div>";
             html += "</div>";
             html += "</div>";
 
             html += '<div class="fun_frame">';
-            html += '<div class="title">' + gLocal.gui.translation + '</div>';
+            html += '<div class="title">' + gLocal.gui.translation + "</div>";
             html +=
               '<div id="channal_list"  class="content" style="max-height:10em;">';
-            html += '<div><a href="">' + gLocal.gui.all + '</a></div>';
+            html += '<div><a href="">' + gLocal.gui.all + "</a></div>";
             html += "</div>";
             html += "</div>";
 
@@ -335,7 +294,7 @@ function term_get_word_to_div(strWord, div, callback) {
     }
   );
 }
-function term_get_guid_to_html(strGuid) { }
+function term_get_guid_to_html(strGuid) {}
 function term_apply(guid) {
   if (g_eCurrWord) {
     setNodeText(g_eCurrWord, "note", "=term(" + guid + ")");
@@ -344,7 +303,7 @@ function term_apply(guid) {
 }
 
 function term_data_copy_to_me(guid) {
-  $("#term_dict").load("term.php?op=copy&wordid=" + guid);
+  $("#term_dict").load("../term/term.php?op=copy&wordid=" + guid);
 }
 
 //我的术语字典进入编辑模式
@@ -369,19 +328,27 @@ function term_data_save(guid) {
     var strWord = $("#term_new_word").val();
     var strMean = $("#term_new_mean").val();
     var strMean2 = $("#term_new_mean2").val();
-    var strNote = $("#term_new_note").val();
     var strTag = $("#term_new_tag").val();
+    var strChannal = $("#term_new_channal").val();
+    var strLanguage = $("#term_new_language").val();
+    var strNote = $("#term_new_note").val();
     let newTerm = new Object();
     newTerm.guid = com_guid();
     newTerm.word = strWord;
     newTerm.meaning = strMean;
     newTerm.other_meaning = strMean2;
+    newTerm.tag = strTag;
+    newTerm.channal = strChannal;
+    newTerm.language = strLanguage;
+
     arrMyTerm.push(newTerm);
   } else {
     var strWord = $("#term_edit_word_" + guid).val();
     var strMean = $("#term_edit_mean_" + guid).val();
     var strMean2 = $("#term_edit_mean2_" + guid).val();
     var strTag = $("#term_edit_tag_" + guid).val();
+    var strChannal = $("#term_edit_channal_" + guid).val();
+    var strLanguage = $("#term_edit_language_" + guid).val();
     var strNote = $("#term_edit_note_" + guid).val();
   }
   $.get(
@@ -393,8 +360,9 @@ function term_data_save(guid) {
       mean: strMean,
       mean2: strMean2,
       tag: strTag,
+      channal: strChannal,
+      language: strLanguage,
       note: strNote,
-      username: getCookie("username"),
     },
     function (data, status) {
       try {
@@ -413,7 +381,7 @@ function term_data_save(guid) {
 }
 function term_get_all_pali() {
   $.get(
-    "term.php",
+    "../term/term.php",
     {
       op: "allpali",
     },
@@ -439,7 +407,7 @@ function term_lookup_all(pali) {
 
 function term_get_my() {
   $.get(
-    "term.php",
+    "../term/term.php",
     {
       op: "my",
     },
@@ -456,17 +424,28 @@ function term_get_my() {
 }
 
 //在我的术语字典里查询
-function term_lookup_my(pali) {
-  for (var x in arrMyTerm) {
-    if (arrMyTerm[x].meaning == pali) {
-      return arrMyTerm[x];
+function term_lookup_my(pali, channal = "", owner = "", lang = "") {
+  for (const iterator of arrMyTerm) {
+    if (channal != "") {
+      if (channal == iterator.channal && iterator.word == pali) {
+        return iterator;
+      }
     }
-    if (arrMyTerm[x].word == pali) {
-      return arrMyTerm[x];
+  }
+  for (const iterator of arrMyTerm) {
+    if (owner != "") {
+      if (
+        iterator.word == pali &&
+        owner == iterator.owner &&
+        iterator.language.indexOf(lang) >= 0
+      ) {
+        return iterator;
+      }
     }
   }
-  return null;
+  return false;
 }
+
 function term_lookup_my_id(id) {
   for (var x in arrMyTerm) {
     if (arrMyTerm[x].guid == id) {
@@ -478,7 +457,7 @@ function term_lookup_my_id(id) {
 
 function term_get_all_meaning(word) {
   $.get(
-    "term.php",
+    "../term/term.php",
     {
       op: "allmean",
       word: word,
@@ -512,7 +491,7 @@ function term_array_updata() {
     idlist = idlist.replace(/,/g, "','");
     idlist = "'" + idlist + "'";
     $.get(
-      "term.php",
+      "../term/term.php",
       {
         op: "extract",
         list: idlist,
@@ -558,7 +537,12 @@ function term_updata_translation() {
       noteCounter++;
     } else {
       if (status == 0 || status == 2) {
-        let myterm = term_lookup_my(termText); //我的术语字典
+        let myterm = term_lookup_my(
+          termText,
+          $(this).attr("channal"),
+          $(this).attr("editor"),
+          $(this).attr("lang")
+        ); //我的术语字典
         if (myterm) {
           $(this).attr("status", "1");
           $(this).attr("type", "0");
@@ -576,15 +560,20 @@ function term_updata_translation() {
       let pali = $(this).attr("pali");
       let mean = $(this).attr("mean");
       let mean2 = $(this).attr("mean2");
-      var renderTo = $(this).attr("pos");
-      var noteText = "";
+      let renderTo = $(this).attr("pos");
+      let noteText = "";
 
       if (termCounter[guid]) {
         termCounter[guid] = 2;
       } else {
         termCounter[guid] = 1;
       }
-      var myterm = term_lookup_my(pali); //我的术语字典
+      myterm = term_lookup_my(
+        pali,
+        $(this).attr("channal"),
+        $(this).attr("editor"),
+        $(this).attr("lang")
+      ); //我的术语字典
       let linkclass = "";
       if (myterm) {
         linkclass = "term_link";
@@ -605,18 +594,18 @@ function term_updata_translation() {
         noteText = noteText.replace(
           "[",
           "<span class='" +
-          linkclass +
-          "' id='term_link_" +
-          guid +
-          "' gid='" +
-          guid +
-          "' onclick=\"" +
-          str_term_fun_word_link +
-          "('" +
-          guid +
-          "','" +
-          pali +
-          "')\">"
+            linkclass +
+            "' id='term_link_" +
+            guid +
+            "' gid='" +
+            guid +
+            "' onclick=\"" +
+            str_term_fun_word_link +
+            "('" +
+            guid +
+            "','" +
+            pali +
+            "')\">"
         );
         noteText = noteText.replace("]", "</span>");
         noteText = noteText.replace(
@@ -669,8 +658,8 @@ function term_show_win(guid, keyWord = "") {
   if (guid == "") {
     $(term_body).html(
       "当前词条未创建。<br /><a onclick=\"term_add_new('" +
-      keyWord +
-      "')\">现在创建</a>"
+        keyWord +
+        "')\">现在创建</a>"
     );
   } else {
     let currWord = term_lookup_my_id(guid);
@@ -707,7 +696,7 @@ function term_show_win(guid, keyWord = "") {
 
       if (!currWord.note) {
         $.get(
-          "term.php",
+          "../term/term.php",
           {
             op: "load_id",
             id: currWord.guid,
@@ -787,6 +776,7 @@ function term_show_new() {
 
 function term_get_dict() {
   let termwordlist = new Array();
+  /*
   let objTerm = document.querySelectorAll("term");
   for (const iterator of objTerm) {
     if (iterator.getAttributeNode("status").value == 0) {
@@ -795,13 +785,29 @@ function term_get_dict() {
       termwordlist.push(iterator.getAttributeNode("pali").value);
     }
   }
+*/
+  $("term").each(function () {
+    if ($(this).attr("status") == 0) {
+      $(this).attr("pali", $(this).text());
+    }
+    let termword = new Object();
+    termword.pali = $(this).attr("pali");
+    termword.channal = $(this).attr("channal");
+    termword.editor = $(this).attr("editor");
+    termword.lang = $(this).attr("lang");
+    termwordlist.push(termword);
+  });
 
-  let wordquery = "('" + termwordlist.join("','") + "')";
+  let readonly = true;
+  if (_display == "sent") {
+    readonly = false;
+  }
   $.post(
-    "../term/term.php",
+    "../term/term_get.php",
     {
-      op: "extract",
-      words: wordquery,
+      words: JSON.stringify(termwordlist),
+      channal: _channal,
+      readonly: readonly,
     },
     function (data, status) {
       if (data.length > 0) {
@@ -816,6 +822,7 @@ function term_get_dict() {
   );
 }
 
+/*
 function term_popup_init() {
   $(".term_link").each(function () {
     if ($(this).attr("init") != "1") {
@@ -827,16 +834,16 @@ function term_popup_init() {
         //出现在左侧
         $(this).append(
           '<div id="gid_' +
-          gid +
-          '" class="guide_contence" style="left: -5px;"></div>'
+            gid +
+            '" class="guide_contence" style="left: -5px;"></div>'
         );
         $(".guide_contence:after").css("left", "0");
       } else {
         //出现在右侧
         $(this).append(
           '<div id="gid_' +
-          gid +
-          '" class="guide_contence" style="right: -5px;"></div>'
+            gid +
+            '" class="guide_contence" style="right: -5px;"></div>'
         );
         $(".guide_contence:after").css("right", "0");
       }
@@ -852,3 +859,40 @@ function term_popup_init() {
     term_load_preview(gid, "gid_" + gid);
   });
 }
+
+function term_load_preview(guid, showto) {
+  $.get(
+    "../term/term.php",
+    {
+      op: "load_id",
+      id: guid,
+      format: "json",
+    },
+    function (data, status) {
+      let html = "";
+      if (status == "success") {
+        try {
+          let result = JSON.parse(data)[0];
+          html = "<div class='term_block'>";
+
+          html += "<h2>" + result.word + "</h2>";
+          html += "<div class='meaning'>" + result.meaning + "</div>";
+          html +=
+            "<div class='term_note' status='1'>" +
+            note_init(result.note) +
+            "</div>";
+          html +=
+            "<div ><a href='../wiki/wiki.php?word=" +
+            result.word +
+            "' target='_blank'>更多</a></div>";
+          html += "</div>";
+          $("#" + showto).html(html);
+        } catch (e) {
+          console.error("note_lookup_guid_json:" + e + " data:" + data);
+        }
+      }
+    }
+  );
+}
+
+*/

+ 56 - 42
app/term/term.php

@@ -148,10 +148,9 @@ switch($op){
 		echo"<div class='pali'>{$word}</div>";
 		//查本人数据
 		echo "<div></div>";//My Term
-		$query = "select * from term  where \"word\" = ".$PDO->quote($word)." AND \"owner\"= ".$PDO->quote($username)." limit 0,30";
-		$Fetch = PDO_FetchAll($query);
+		$query = "select * from term  where word = ? AND  owner = ? limit 0,30";
+		$Fetch = PDO_FetchAll($query,array($word,$_COOKIE["userid"]));
 		$iFetch=count($Fetch);
-		$count_return+=$iFetch;
 		if($iFetch>0){
 			for($i=0;$i<$iFetch;$i++){
 				$mean=$Fetch[$i]["meaning"];
@@ -164,6 +163,8 @@ switch($op){
 				echo "<div class='mean'><span>".$mean."</span>";
 				echo "<span class='other_mean' style='margin-right: auto;'>(".$Fetch[$i]["other_meaning"].")</span></div>";
 				echo "<div class='tag'>{$Fetch[$i]["tag"]}</div>";
+				echo "<div class='mean'>{$Fetch[$i]["channal"]}</div>";				
+				echo "<div class='mean'>{$Fetch[$i]["language"]}</div>";
 				echo "<div class='term_note' status=0>".$Fetch[$i]["note"]."</div>";
 				echo "</div>";
 				//编辑词条表单
@@ -172,20 +173,22 @@ switch($op){
 				echo "<div class='mean' style='display:flex;'><span style='flex:1;'>{$_local->gui->first_choice_word}:</span>";
 				echo "<input type='input' style='flex:3;' placeholder='{$_local->gui->required}' id='term_edit_mean_{$guid}' value='$mean' /></div>";//'意思'
 		
-				//echo "<div class='mean'><input type='input' id='term_edit_mean_{$guid}'  placeholder='{$_local->gui->meaning}' value='$mean' /></div>";//'意思'
 				echo "<div class='mean' style='display:flex;'><span style='flex:1;'>{$_local->gui->other_meaning}:</span>";
 				echo "<input type='input' style='flex:3;' placeholder='{$_local->gui->optional}' id='term_edit_mean2_{$guid}' value='".$Fetch[$i]["other_meaning"]."'/></div>";//'备选意思(可选项)'
 
-				//echo "<div class='other_mean'><input type='input' id='term_edit_mean2_{$guid}'  placeholder='{$_local->gui->other_meaning}' value='".$Fetch[$i]["other_meaning"]."' /></div>";//'备选意思(可选项)'
 				echo "<div class='mean' style='display:flex;'><span style='flex:1;'>{$_local->gui->tag}:</span>";
 				echo "<input type='input' style='flex:3;' placeholder='{$_local->gui->optional}' id='term_edit_tag_{$guid}' value='".$Fetch[$i]["tag"]."'/></div>";//'标签'
 
-				//echo "<div class='tag'><input type='input' id='term_edit_tag_{$guid}'  placeholder='{$_local->gui->other_tag}' value='".$Fetch[$i]["tag"]."' /></div>";//'标签'
+				echo "<div class='mean' style='display:flex;'><span style='flex:1;'>{$_local->gui->channel}:</span>";
+				echo "<input type='input' style='flex:3;' placeholder='{$_local->gui->optional}' id='term_edit_channal_{$guid}' value='".$Fetch[$i]["channal"]."'/></div>";//'版风'
+				
+				echo "<div class='mean' style='display:flex;'><span style='flex:1;'>{$_local->gui->language}:</span>";
+				echo "<input type='input' style='flex:3;' placeholder='{$_local->gui->optional}' id='term_edit_language_{$guid}' value='".$Fetch[$i]["language"]."'/></div>";//'语言'
+
 				echo "<div class='note'><span style='display:flex;'><span>{$_local->gui->encyclopedia} & {$_local->gui->note}:</span>";
 				echo "<guide gid='term_pedia_sys' style='margin-left: auto;'></guide></span>";
 				echo "<textarea width='100%' height='3em'  placeholder='{$_local->gui->optional}' id='term_edit_note_$guid'>".$Fetch[$i]["note"]."</textarea></div>";//'注解'
 
-				//echo "<div class='note'><textarea  id='term_edit_note_$guid'  placeholder='".$module_gui_str['editor']['1043']."'>".$Fetch[$i]["note"]."</textarea></div>";//'注解'
 				echo "</div>";
 				echo "<div id='term_edit_btn1_$guid'>";
 				//echo "<button onclick=\"term_apply('$guid')\">{$_local->gui->apply}</button>";//Apply
@@ -203,28 +206,39 @@ switch($op){
 		echo "<button id='new_term_button' onclick=\"term_show_new()\">{$_local->gui->new}</button>";
 		echo "<div id='term_new_recorder' style='display:none;'>";
 		echo "<div class='dict'>".$_local->gui->new_technic_term."</div>";//New Techinc Term
+		
 		echo "<div class='mean' style='display:flex;'><span style='flex:1;'>{$_local->gui->pali_word}:</span>";
 		echo "<input type='input' style='flex:3;' placeholder='{$_local->gui->required}' id='term_new_word' value='{$word}' /></div>";//'拼写'
+		
 		echo "<div class='mean' style='display:flex;'><span style='flex:1;'>{$_local->gui->first_choice_word}:</span>";
 		echo "<input type='input' style='flex:3;' placeholder='{$_local->gui->required}' id='term_new_mean'/></div>";//'意思'
+		
 		echo "<div class='mean' style='display:flex;'><span style='flex:1;'>{$_local->gui->other_meaning}:</span>";
 		echo "<input type='input' style='flex:3;' placeholder='{$_local->gui->optional}' id='term_new_mean2'/></div>";//'备选意思(可选项)'
+		
 		echo "<div class='mean' style='display:flex;'><span style='flex:1;'>{$_local->gui->tag}:</span>";
 		echo "<input type='input' style='flex:3;' placeholder='{$_local->gui->optional}' id='term_new_tag'/></div>";//'标签'
+		
+		echo "<div class='mean' style='display:flex;'><span style='flex:1;'>{$_local->gui->channel}:</span>";
+		echo "<input type='input' style='flex:3;' placeholder='{$_local->gui->optional}' id='term_new_channal'/></div>";//'标签'
+		
+		echo "<div class='mean' style='display:flex;'><span style='flex:1;'>{$_local->gui->language}:</span>";
+		echo "<input type='input' style='flex:3;' placeholder='{$_local->gui->optional}' id='term_new_language'/></div>";//'标签'
+		
 		echo "<div class='note'><span style='display:flex;'><span>{$_local->gui->encyclopedia} & {$_local->gui->note}:</span>";
 		echo "<guide gid='term_pedia_sys' style='margin-left: auto;'></guide></span>";
 		echo "<textarea width='100%' height='3em'  placeholder='{$_local->gui->optional}' id='term_new_note'></textarea></div>";//'注解'
+		
 		echo "<button onclick=\"term_data_save('')\">{$_local->gui->save}</button>";//保存
 		echo "</div>";
 		echo "</div>";
 
 		
 		//查他人数据
-		$query = "select * from term  where \"word\" = ".$PDO->quote($word)."AND \"owner\" <> ".$PDO->quote($username)." limit 0,30";
+		$query = "SELECT * FROM term  WHERE word = ? AND owner <> ? LIMIT 0,30";
 		
-		$Fetch = PDO_FetchAll($query);
+		$Fetch = PDO_FetchAll($query,array($word,$_COOKIE["userid"]));
 		$iFetch=count($Fetch);
-		$count_return+=$iFetch;
 		if($iFetch>0){
 			for($i=0;$i<$iFetch;$i++){
 				$mean=$Fetch[$i]["meaning"];
@@ -253,43 +267,43 @@ switch($op){
 			$mTime=$_GET["modify_time"];
 		}
 		else{
-			$mTime=time();
+			$mTime=mTime();
 		}
 		if($_GET["guid"]!=""){
-			$mean=$_GET["mean"];
-			$query="UPDATE term SET meaning='$mean' ,
-									other_meaning='".$_GET["mean2"]."' ,
-									tag='".$_GET["tag"]."' ,
-									receive_time='".time()."' ,
-									modify_time='$mTime' ,
-									note='".$_GET["note"]."' 
-							where guid='".$_GET["guid"]."'";
+			$query="UPDATE term SET meaning= ? ,other_meaning = ? , tag= ? ,channal = ? ,  language = ? , note = ? , receive_time= ?, modify_time= ?   where guid= ? ";
+			$stmt = @PDO_Execute($query,array($_GET["mean"],
+																		$_GET["mean2"],
+																		$_GET["tag"],
+																		$_GET["channal"],
+																		$_GET["language"],
+																		$_GET["note"],
+																		mTime(),
+																		$mTime,
+																		$_GET["guid"]
+																	));
 		}
 		else{
-			$newGuid=UUID::v4();
-			$word=$_GET["word"];
-			$worden=pali2english($word);
-			$mean=$_GET["mean"];
-			$mean2=$_GET["mean2"];
-			$note=$_GET["note"];
-			$tag=$_GET["tag"];
-			$time=time();
-			$query="INSERT INTO term VALUES (NULL, 
-											'$newGuid', 
-											'$word', 
-											'$worden', 
-											'$mean', 
-											'$mean2', 
-											'$note', 
-											'$tag', 
-											'$time', 
-											'$username', 
-											'1',
-											'zh',
-											'$time',
-											'$time')";		
+			$parm = array();
+			$parm[]=UUID::v4();
+			$parm[]=$_GET["word"];
+			$parm[]=pali2english($word);
+			$parm[]=$_GET["mean"];
+			$parm[]=$_GET["mean2"];
+			$parm[]=$_GET["tag"];			
+			$parm[]=$_GET["channal"];			
+			$parm[]=$_GET["language"];			
+			$parm[]=$_GET["note"];
+			$parm[]=$_COOKIE["userid"];
+			$parm[]=0;
+			$parm[]=mTime();
+			$parm[]=mTime();
+			$parm[]=mTime();
+			$query="INSERT INTO term (id, guid, word, word_en, meaning, other_meaning, tag, channal, language,note,owner,hit,create_time,modify_time,receive_time ) 
+															VALUES (NULL, ? , ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) "; 
+
+			$stmt = @PDO_Execute($query,$parm);
 		}
-			$stmt = @PDO_Execute($query);
+			
 			$respond=array("status"=>0,"message"=>"");
 			if (!$stmt || ($stmt && $stmt->errorCode() != 0)) {
 				$error = PDO_ErrorInfo();

+ 0 - 0
app/term/term_edit_dlg.css


+ 100 - 0
app/term/term_edit_dlg.js

@@ -0,0 +1,100 @@
+function term_edit_dlg_init(title = "Trem") {
+  $("body").append(
+    '<div id="term_edit_dlg" title="' +
+      title +
+      '"><div id="term_edit_dlg_content"></div></div>'
+  );
+
+  $("#term_edit_dlg").dialog({
+    autoOpen: false,
+    width: 550,
+    buttons: [
+      {
+        text: "Save",
+        click: function () {
+          term_edit_dlg_save();
+          $(this).dialog("close");
+        },
+      },
+      {
+        text: "Cancel",
+        click: function () {
+          $(this).dialog("close");
+        },
+      },
+    ],
+  });
+}
+function term_edit_dlg_open(id = "") {
+  if (id == "") {
+    $("#term_edit_dlg").dialog("open");
+  } else {
+    $.post(
+      "../term/term_get_id.php",
+      {
+        id: id,
+      },
+      function (data) {
+        let word = JSON.parse(data);
+        let html = term_edit_dlg_render(word);
+        $("#term_edit_dlg_content").html(html);
+        $("#term_edit_dlg").dialog("open");
+      }
+    );
+  }
+}
+
+function term_edit_dlg_render(word = "") {
+  if (word == "") {
+    word = new Object();
+    word.pali = "";
+  }
+  let output = "";
+  output +=
+    "<input type='hidden' id='term_edit_form_id' value='" + word.guid + "'>";
+  output += "<fieldset>";
+  output += "<legend>Spell</legend>";
+  output +=
+    "<input type='input' id='term_edit_form_word' value='" + word.word + "'>";
+  output += "</fieldset>";
+
+  output += "<fieldset>";
+  output += "<legend>Meaning</legend>";
+  output +=
+    "<input type='input' id='term_edit_form_meaning' value='" +
+    word.meaning +
+    "'>";
+  output += "</fieldset>";
+
+  output += "<fieldset>";
+  output += "<legend>Meaning</legend>";
+  output +=
+    "<input type='input' id='term_edit_form_othermeaning value='" +
+    word.other_meaning +
+    "'>";
+  output += "</fieldset>";
+
+  output += "<fieldset>";
+  output += "<legend>Language</legend>";
+  output +=
+    "<input type='input' id='term_edit_form_language' value='" +
+    word.language +
+    "'>";
+  output += "</fieldset>";
+
+  output += "<fieldset>";
+  output += "<legend>Channal</legend>";
+  output +=
+    "<input type='input' id='term_edit_form_channal' value='" +
+    word.channal +
+    "'>";
+  output += "</fieldset>";
+
+  output += "<fieldset>";
+  output += "<legend>Note</legend>";
+  output += "<textarea id='term_edit_form_note'>" + word.note + "</textarea>";
+  output += "</fieldset>";
+
+  return output;
+}
+function term_edit_dlg_save() {}

+ 97 - 0
app/term/term_get.php

@@ -0,0 +1,97 @@
+<?php
+/*
+查询term字典
+输入单词列表
+输出查到的结果
+*/
+require_once "../path.php";
+require_once "../public/_pdo.php";
+require_once '../public/function.php';
+require_once '../ucenter/function.php';
+require_once '../channal/function.php';
+
+PDO_Connect("sqlite:"._FILE_DB_TERM_);
+
+$output = array();
+if(isset($_POST["words"])){
+    $wordlist = json_decode($_POST["words"]);
+    if($_POST["readonly"]=="false" && !empty($_POST["channal"])){
+        $channal = explode(",",$_POST["channal"]);
+        $channal_info = new Channal();
+        $channal_owner = array();
+        foreach ($channal as $key => $value) {
+            # code...
+            $info = $channal_info->getChannal($value);
+            if($info){
+                $channal_owner[$info["owner"]]=1;
+            }
+        }
+        /*  创建一个填充了和params相同数量占位符的字符串 */
+        $place_holders = implode(',', array_fill(0, count($channal), '?'));
+        $owner_holders = implode(',', array_fill(0, count($channal_owner), '?'));
+        $query = "SELECT guid,word,meaning,other_meaning,owner,channal,language,tag ,note  FROM term WHERE channal IN ($place_holders) OR owner IN ($owner_holders)";
+        foreach ($channal_owner as $key => $value) {
+            # code...
+            $channal[] = $key;
+        }
+        $fetch = PDO_FetchAll($query,$channal);
+        $userinfo = new UserInfo();
+        $user = array();
+        foreach ($channal_owner as $key => $value) {
+            # code...
+            $user[$key]=$userinfo->getName($key);
+        }
+        foreach ($fetch as $key => $value) {
+            # code...
+            $fetch[$key]["user"] = $user[$key];
+            $output[] =  $fetch[$key];
+        }
+    }
+    else{
+        foreach ($wordlist as $key => $value) {
+            # code...
+            $pali = $value->pali;
+            $parm = array();
+            $parm[] = $pali;       
+
+            $otherCase = "";
+            if($value->channal != ""){
+                $otherCase .= " channal = ? ";
+                $parm[] = $value->channal;
+            }
+
+            if($value->editor != ""){
+                if($otherCase != ""){
+                    $otherCase .= " OR ";
+                }
+                $otherCase .= " owner = ? ";
+                $parm[] = $value->editor;
+            }
+
+            if($value->lang != ""){
+                if($otherCase != ""){
+                    $otherCase .= " OR ";
+                }
+                $otherCase .= " language = ? ";
+                $parm[] = $value->lang;
+            }
+
+            if($otherCase==""){
+                $query = "SELECT guid,word,meaning,other_meaning,owner,channal,language,tag ,note FROM term WHERE word = ? ";
+            }
+            else{
+                $query = "SELECT guid,word,meaning,other_meaning,owner,channal,language,tag ,note FROM term WHERE word = ? AND ( $otherCase )";
+            }
+
+            $fetch = PDO_FetchAll($query,$parm);
+            $userinfo = new UserInfo();
+            foreach ($fetch as $key => $value) {
+                # code...
+                $fetch[$key]["user"]=$userinfo->getName($value["owner"]);
+                $output[] =  $fetch[$key];
+            }
+        }
+    }
+}
+echo json_encode($output, JSON_UNESCAPED_UNICODE);
+?>

+ 26 - 0
app/term/term_get_id.php

@@ -0,0 +1,26 @@
+<?php
+/*
+查询term字典
+输入单词列表
+输出查到的结果
+*/
+require_once "../path.php";
+require_once "../public/_pdo.php";
+require_once '../ucenter/function.php';
+
+PDO_Connect("sqlite:"._FILE_DB_TERM_);
+
+$fetch = array();
+if(isset($_POST["id"])){
+        $query = "SELECT * FROM term WHERE guid = ? ";
+
+        $fetch = PDO_FetchRow($query,array($_POST["id"]));
+        $userinfo = new UserInfo();
+        if($fetch){
+            # code...
+            $fetch["user"]=$userinfo->getName($fetch["owner"]);
+        }
+    }
+
+echo json_encode($fetch, JSON_UNESCAPED_UNICODE);
+?>

+ 45 - 3
app/term/term_popup.js

@@ -8,7 +8,7 @@ function term_popup_init() {
       if ($(this).offset().left < $(document.body).width() / 2) {
         //出现在左侧
         $(this).append(
-          '<div id="gid_' +
+          '<div term-popup="' +
             gid +
             '"  class="guide_contence" style="left: -5px;"></div>'
         );
@@ -16,7 +16,7 @@ function term_popup_init() {
       } else {
         //出现在右侧
         $(this).append(
-          '<div id="gid_' +
+          '<div term-popup="' +
             gid +
             '" class="guide_contence" style="right: -5px;"></div>'
         );
@@ -32,6 +32,48 @@ function term_popup_init() {
     }
     let gid = $(this).attr("gid");
     let id = "gid_" + gid;
-    note_lookup_guid_json(gid, id);
+    note_lookup_guid_json(gid);
   });
 }
+
+function note_lookup_guid_json(guid) {
+  $.get(
+    "../term/term.php",
+    {
+      op: "load_id",
+      id: guid,
+      format: "json",
+    },
+    function (data, status) {
+      let html = "";
+      if (status == "success") {
+        try {
+          let result = JSON.parse(data)[0];
+          html = "<div class='term_block'>";
+
+          html += "<h2>" + result.word + "</h2>";
+          html += "<div class='meaning'>" + result.meaning + "</div>";
+          html +=
+            "<div class='term_note' status='1'>" +
+            note_init(result.note) +
+            "</div>";
+          html += "<div >";
+          html +=
+            "<a href='../wiki/wiki.php?word=" +
+            result.word +
+            "' target='_blank'>更多</a>";
+          html +=
+            "<button onclick=\"term_edit_dlg_open('" +
+            result.guid +
+            "')\">修改</button>";
+          html += "</div>";
+          html += "</div>";
+          $("[term-popup='" + guid + "']").html(html);
+          //note_refresh_new();
+        } catch (e) {
+          console.error("note_lookup_guid_json:" + e + " data:" + data);
+        }
+      }
+    }
+  );
+}

+ 33 - 0
app/term/term_post.php

@@ -0,0 +1,33 @@
+<?php
+
+$respond=array("status"=>0,"message"=>"");
+if($_POST["id"]!=""){
+    $query="UPDATE term SET meaning= ? ,other_meaning = ? , tag= ? ,channal = ? ,  language = ? , note = ? , receive_time= ?, modify_time= ?   where guid= ? ";
+    $stmt = @PDO_Execute($query,array($_POST["mean"],
+                                                                $_POST["mean2"],
+                                                                $_POST["tag"],
+                                                                $_POST["channal"],
+                                                                $_POST["language"],
+                                                                $_POST["note"],
+                                                                mTime(),
+                                                                mTime(),
+                                                                $_POST["id"]
+                                                            ));
+    if (!$stmt || ($stmt && $stmt->errorCode() != 0)) {
+        $error = PDO_ErrorInfo();
+        $respond['status']=1;
+        $respond['message']=$error[2].$query;
+    }
+    else{
+        $respond['status']=0;
+        $respond['message']=$word;
+    }		
+}
+else{
+
+}
+    
+
+    echo json_encode($respond, JSON_UNESCAPED_UNICODE);
+
+?>

+ 56 - 0
app/term/term_put.php

@@ -0,0 +1,56 @@
+<?php
+		$currTime=sprintf("%d",microtime(true)*1000);
+		if(isset($_GET["modify_time"])){
+			$mTime=$_GET["modify_time"];
+		}
+		else{
+			$mTime=mTime();
+		}
+		if($_GET["guid"]!=""){
+			$query="UPDATE term SET meaning= ? ,other_meaning = ? , tag= ? ,channal = ? ,  language = ? , note = ? , receive_time= ?, modify_time= ?   where guid= ? ";
+			$stmt = @PDO_Execute($query,array($_GET["mean"],
+																		$_GET["mean2"],
+																		$_GET["tag"],
+																		$_GET["channal"],
+																		$_GET["language"],
+																		$_GET["note"],
+																		mTime(),
+																		$mTime,
+																		$_GET["guid"]
+																	));
+		}
+		else{
+			$parm = array();
+			$parm[]=UUID::v4();
+			$parm[]=$_GET["word"];
+			$parm[]=pali2english($word);
+			$parm[]=$_GET["mean"];
+			$parm[]=$_GET["mean2"];
+			$parm[]=$_GET["tag"];			
+			$parm[]=$_GET["channal"];			
+			$parm[]=$_GET["language"];			
+			$parm[]=$_GET["note"];
+			$parm[]=$_COOKIE["userid"];
+			$parm[]=0;
+			$parm[]=mTime();
+			$parm[]=mTime();
+			$parm[]=mTime();
+			$query="INSERT INTO term (id, guid, word, word_en, meaning, other_meaning, tag, channal, language,note,owner,hit,create_time,modify_time,receive_time ) 
+															VALUES (NULL, ? , ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) "; 
+
+			$stmt = @PDO_Execute($query,$parm);
+		}
+			
+			$respond=array("status"=>0,"message"=>"");
+			if (!$stmt || ($stmt && $stmt->errorCode() != 0)) {
+				$error = PDO_ErrorInfo();
+				$respond['status']=1;
+				$respond['message']=$error[2].$query;
+			}
+			else{
+				$respond['status']=0;
+				$respond['message']=$word;
+			}		
+			echo json_encode($respond, JSON_UNESCAPED_UNICODE);
+
+?>

+ 19 - 12
app/usent/sent_post.php

@@ -4,14 +4,6 @@ require_once "../path.php";
 require_once "../public/_pdo.php";
 require_once "../public/function.php";
 
-$respond=array("status"=>0,"message"=>"");
-$respond['book']=$_POST["book"];
-$respond['para']=$_POST["para"];
-$respond['begin']=$_POST["begin"];
-$respond['end']=$_POST["end"];
-$respond['channal']=$_POST["channal"];
-$respond['text']=$_POST["text"];
-
 #检查是否登陆
 if(!isset($_COOKIE["userid"])){
     $respond["status"] = 1;
@@ -20,13 +12,28 @@ if(!isset($_COOKIE["userid"])){
     exit;
 }
 
+$respond=array("status"=>0,"message"=>"");
+$respond['book']=$_POST["book"];
+$respond['para']=$_POST["para"];
+$respond['begin']=$_POST["begin"];
+$respond['end']=$_POST["end"];
+$respond['channal']=$_POST["channal"];
+$respond['text']=$_POST["text"];
+$respond['editor']=$_COOKIE["userid"];
+
 #先查询对此channal是否有权限修改
 $cooperation = 0;
+$text_lang = "en";
 if(isset($_POST["channal"])){
    PDO_Connect("sqlite:"._FILE_DB_CHANNAL_);
-    $query = "SELECT owner FROM channal WHERE id=?";
-    $fetch = PDO_FetchOne($query,array($_POST["channal"]));
-    if($fetch && $fetch==$_COOKIE["userid"]){
+    $query = "SELECT owner, lang FROM channal WHERE id=?";
+    $fetch = PDO_FetchRow($query,array($_POST["channal"]));
+    
+    if($fetch){
+        $text_lang = $fetch["lang"];
+    }
+    $respond['lang']=$text_lang;
+    if($fetch && $fetch["owner"]==$_COOKIE["userid"]){
         #自己的channal
         $cooperation = 1;
     }
@@ -89,7 +96,7 @@ if(isset($_POST["id"])){
 										  "[]", 
 										  $_COOKIE["userid"],
 										  $_POST["text"],
-										  $_POST["lang"],
+										  $text_lang ,
 										  1,
 										  7,
 										  mb_strlen($_POST["text"],"UTF-8"),

+ 16 - 0
app/widget/click_dropdown.css

@@ -0,0 +1,16 @@
+.click_dropdown_div {
+  position: relative;
+}
+.click_dropdown_content {
+  display: none;
+  position: absolute;
+  right: 0;
+  width: 19em;
+  border-radius: 4px;
+  background-color: var(--drop-bg-color);
+}
+
+.click_dropdown_content_inner {
+  max-height: 300px;
+  min-height: 10em;
+}

+ 9 - 0
app/widget/click_dropdown.js

@@ -0,0 +1,9 @@
+function click_dropdown_init() {
+  $(".click_dropdown_button").click(function () {
+    $(this).siblings(".click_dropdown_content").first().show();
+  });
+
+  $(".click_dropdown_cancel").click(function () {
+    $(this).parent().parent().hide();
+  });
+}

+ 95 - 0
font/Padauk/OFL.txt

@@ -0,0 +1,95 @@
+Copyright SIL International, all rights reserved
+Reserved names: "Padauk"
+
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded, 
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.

BIN
font/Padauk/Padauk-Bold.ttf


BIN
font/Padauk/Padauk-Regular.ttf