Просмотр исходного кода

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

Bhikkhu-Kosalla 5 лет назад
Родитель
Сommit
3933c83688

+ 20 - 0
app/palicanon/desige/readme.md

@@ -0,0 +1,20 @@
+# 设计目标
+
+是整个三藏资源的列表。经文阅读器的入口。
+能够显示三藏翻译完成度。总进度,书及章节进度。
+能够以如下方式过滤结果:
+
+1. 标签
+2. 译文语言
+3. 作者
+
+结果范围仅包含书的最高章节。中部除外。
+
+结果集包含项目
+
+-   类型 (mula) 顶级标签(七个)
+-   标题 一种译文和巴利文
+-   完成度 每种语言单独计算
+-   热度 最近是否有更新
+
+点选结果集,以 studio 选经界面中多个列表方式显示下一个层级。

+ 40 - 0
app/reader/get_path.php

@@ -1,4 +1,44 @@
 <?php
 require_once "../public/function.php";
+
+$dns = "sqlite:"._FILE_DB_PALITEXT_;
+$dbh = new PDO($dns, "", "",array(PDO::ATTR_PERSISTENT=>true));
+$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);  
+
+  $path="";
+  $parent = $paragraph;
+  $deep=0;
+  $sFirstParentTitle="";
+  //循环查找父标题 得到整条路径
+  while($parent>-1){
+	  $query = "select * from pali_text where \"book\" = ? and \"paragraph\" = ? limit 0,1";
+  $stmt = $dbh->prepare($query);
+  $stmt->execute(array($book,$parent));
+  $FetParent = $stmt->fetch(PDO::FETCH_ASSOC);
+  
+	  $toc="<chapter book='{$book}' para='{$parent}' title='{$FetParent["toc"]}'>{$FetParent["toc"]}</chapter>";
+	  
+	  if($path==""){
+	if($FetParent["level"]<100){
+	  $path=$toc;
+	}
+	else{
+	  $path="<para book='{$book}' para='{$parent}' title='{$FetParent["toc"]}'>{$paragraph}</para>";
+	}
+	  }
+	  else{
+		  $path=$toc.$path;
+	  }
+	  if($sFirstParentTitle==""){
+		  $sFirstParentTitle = $FetParent["toc"];
+	  }	
+	  $parent = $FetParent["parent"];
+	  $deep++;
+	  if($deep>5){
+		  break;
+	  }
+  }
+  $dbh = null;
+  
 echo _get_para_path($_GET["book"],$_GET["para"]);
 ?>

+ 1 - 0
app/reader/index.php

@@ -397,6 +397,7 @@ require_once "../pcdl/html_head.php";
 	click_dropdown_init();
 	note_create();
 	reader_load();
+	historay_init();
 	});
 
 

+ 1 - 0
app/reader/reader.js

@@ -177,6 +177,7 @@ function reader_get_path() {
 		function (data) {
 			$("#para_path").html(data);
 			$("chapter").each(function () {
+				//替换为本地语言字符串
 				let title = $(this).text();
 				let strLocalTitle = "";
 				if (

+ 5 - 8
app/studio/js/render.js

@@ -1605,6 +1605,7 @@ function render_tran_sent_block(book, para, begin, end, channal = 0, readonly =
 	let sent_text = "";
 	let sent_lang = "en";
 	let objSent;
+	let thischannal;
 	if (channal == 0) {
 		//百家言
 		if (netSent.length > 0) {
@@ -1618,15 +1619,11 @@ function render_tran_sent_block(book, para, begin, end, channal = 0, readonly =
 	} else {
 		sender = "通道的名字";
 		objSent = _user_sent_buffer.getSentText(book, para, begin, end, channal);
-
+		thischannal = channal_getById(channal);
 		if (objSent == false) {
 			objSent = new Object();
 			objSent.text = "";
-			if (doc_head("lang") == "") {
-				objSent.language = "en";
-			} else {
-				objSent.language = doc_head("lang");
-			}
+			objSent.language = thischannal.lang;
 			objSent.id = "";
 			objSent.tag = "[]";
 			objSent.author = "{}";
@@ -1652,9 +1649,9 @@ function render_tran_sent_block(book, para, begin, end, channal = 0, readonly =
 	} else {
 		output += "<span style='width: 100%;display: contents;'>";
 		output += "<span>";
-		let thischannal = channal_getById(channal);
+
 		if (thischannal) {
-			output += thischannal.name;
+			output += thischannal.name + "-" + thischannal.lang;
 		} else {
 			output += "未知的频道名";
 		}

+ 46 - 2
app/term/term_edit_dlg.js

@@ -46,7 +46,8 @@ function term_edit_dlg_render(word = "") {
 		word.pali = "";
 	}
 	let output = "";
-	output += "<input type='hidden' id='term_edit_form_id' value='" + word.guid + "'>";
+	output += "<form action='##' id='form_term'>";
+	output += "<input type='hidden' id='term_edit_form_id' name='id' value='" + word.guid + "'>";
 	output += "<fieldset>";
 	output += "<legend>" + gLocal.gui.spell + "</legend>";
 	output +=
@@ -77,6 +78,16 @@ function term_edit_dlg_render(word = "") {
 		">";
 	output += "</fieldset>";
 
+	output += "<fieldset>";
+	output += "<legend>" + gLocal.gui.tag + "</legend>";
+	output +=
+		"<input type='input' id='term_edit_form_tag name='tag' value='" +
+		word.tag +
+		"' placeholder=" +
+		gLocal.gui.optional +
+		" >";
+	output += "</fieldset>";
+
 	output += "<fieldset>";
 	output += "<legend>" + gLocal.gui.language + "</legend>";
 	output +=
@@ -102,6 +113,39 @@ function term_edit_dlg_render(word = "") {
 	output += "<textarea id='term_edit_form_note' placeholder=" + gLocal.gui.optional + ">" + word.note + "</textarea>";
 	output += "</fieldset>";
 
+	output += "</form>";
+
 	return output;
 }
-function term_edit_dlg_save() {}
+function term_edit_dlg_save() {
+	$.ajax({
+		type: "POST", //方法类型
+		dataType: "json", //预期服务器返回的数据类型
+		url: "../term/term_post.php", //url
+		data: $("#form_term").serialize(),
+		success: function (result) {
+			console.log(result); //打印服务端返回的数据(调试用)
+
+			if (result.status == 0) {
+				alert(result.message + gLocal.gui.saved + gLocal.gui.successful);
+			} else {
+				alert("error:" + result.message);
+			}
+		},
+		error: function (data, status) {
+			alert("异常!" + data.responseText);
+			switch (status) {
+				case "timeout":
+					break;
+				case "error":
+					break;
+				case "notmodified":
+					break;
+				case "parsererror":
+					break;
+				default:
+					break;
+			}
+		},
+	});
+}

+ 14 - 9
app/term/term_post.php

@@ -1,17 +1,22 @@
 <?php
+require_once "../path.php";
+require_once "../public/_pdo.php";
+require_once '../public/function.php';
 
 $respond=array("status"=>0,"message"=>"");
+PDO_Connect("sqlite:"._FILE_DB_TERM_);
+
 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"]
+                                        $_POST["mean2"],
+                                        $_POST["tag"],
+                                        $_POST["channal"],
+                                        $_POST["language"],
+                                        $_POST["note"],
+                                        mTime(),
+                                        mTime(),
+                                        $_POST["id"]
                                                             ));
     if (!$stmt || ($stmt && $stmt->errorCode() != 0)) {
         $error = PDO_ErrorInfo();
@@ -20,7 +25,7 @@ if($_POST["id"]!=""){
     }
     else{
         $respond['status']=0;
-        $respond['message']=$word;
+        $respond['message']=$_POST["word"];
     }		
 }
 else{

+ 23 - 0
app/usent/function.php

@@ -0,0 +1,23 @@
+<?php
+function update_historay($sent_id,$user_id,$text,$landmark){
+    # 更新historay
+    PDO_Connect("sqlite:"._FILE_DB_USER_SENTENCE_HISTORAY_);
+    $query =  "INSERT INTO sent_historay (sent_id,  user_id,  text,  date, landmark) VALUES (? , ? , ? , ? , ? )";
+    $stmt  = PDO_Execute($query,
+						array($sent_id,
+							 $user_id, 
+							 $text ,
+							 mTime(),
+							 $landmark
+							));
+    if (!$stmt || ($stmt && $stmt->errorCode() != 0)) {
+    /*  识别错误  */
+    $error = PDO_ErrorInfo();
+        return $error[2];
+    }
+    else{
+    #没错误
+        return "";
+    }
+}
+?>

+ 0 - 1
app/usent/historay.js

@@ -62,7 +62,6 @@ function history_show(id) {
 
 					html += "<div class=''>" + strPassTime + "</div>";
 					html += "<div class=''>" + iterator.text + "</div>";
-					html += "<div class=''><button>restore</button></div>";
 				}
 				$("#sent_history_content").html(html);
 				$("#sent_history_dlg").dialog("open");

+ 38 - 57
app/usent/sent_post.php

@@ -3,6 +3,7 @@
 require_once "../path.php";
 require_once "../public/_pdo.php";
 require_once "../public/function.php";
+require_once "../usent/function.php";
 
 #检查是否登陆
 if(!isset($_COOKIE["userid"])){
@@ -83,46 +84,46 @@ else{
         if($cooperation == 1){
             #有权限
             $query = "INSERT INTO sentence (id, 
-														parent,
-														book,
-														paragraph,
-														begin,
-														end,
-														channal,
-														tag,
-														author,
-														editor,
-														text,
-														language,
-														ver,
-														status,
-														strlen,
-														modify_time,
-														receive_time,
-														create_time
-														) 
+                                            parent,
+                                            book,
+                                            paragraph,
+                                            begin,
+                                            end,
+                                            channal,
+                                            tag,
+                                            author,
+                                            editor,
+                                            text,
+                                            language,
+                                            ver,
+                                            status,
+                                            strlen,
+                                            modify_time,
+                                            receive_time,
+                                            create_time
+                                            ) 
 										VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )";
             $stmt = $PDO->prepare($query);
             $newId = UUID::v4();
             $stmt->execute(array($newId,
-										  "",
-										  $_POST["book"], 
-										  $_POST["para"], 
-										  $_POST["begin"], 
-										  $_POST["end"], 
-										  $_POST["channal"], 
-										  "", 
-										  "[]", 
-										  $_COOKIE["userid"],
-										  $_POST["text"],
-										  $text_lang ,
-										  1,
-										  7,
-										  mb_strlen($_POST["text"],"UTF-8"),
-										  mTime(),
-										  mTime(),
-										  mTime()
-                                        ));
+                                "",
+                                $_POST["book"], 
+                                $_POST["para"], 
+                                $_POST["begin"], 
+                                $_POST["end"], 
+                                $_POST["channal"], 
+                                "", 
+                                "[]", 
+                                $_COOKIE["userid"],
+                                $_POST["text"],
+                                $text_lang ,
+                                1,
+                                7,
+                                mb_strlen($_POST["text"],"UTF-8"),
+                                mTime(),
+                                mTime(),
+                                mTime()
+                            ));
             if (!$stmt || ($stmt && $stmt->errorCode() != 0)) {
                 /*  识别错误  */
                 $error = PDO_ErrorInfo();
@@ -192,25 +193,5 @@ else{
 echo json_encode($respond, JSON_UNESCAPED_UNICODE);
 
 
-function update_historay($sent_id,$user_id,$text,$landmark){
-    # 更新historay
-    PDO_Connect("sqlite:"._FILE_DB_USER_SENTENCE_HISTORAY_);
-    $query =  "INSERT INTO sent_historay (sent_id,  user_id,  text,  date, landmark) VALUES (? , ? , ? , ? , ? )";
-    $stmt  = PDO_Execute($query,
-                                        array($sent_id,
-                                                 $user_id, 
-                                                 $text ,
-                                                mTime(),
-                                                $landmark
-                                            ));
-    if (!$stmt || ($stmt && $stmt->errorCode() != 0)) {
-    /*  识别错误  */
-    $error = PDO_ErrorInfo();
-        return $error[2];
-    }
-    else{
-    #没错误
-        return "";
-    }
-}
+
 ?>

+ 98 - 70
app/usent/update.php

@@ -5,7 +5,21 @@
 require_once "../path.php";
 require_once "../public/_pdo.php";
 require_once "../public/function.php";
-
+require_once "../usent/function.php";
+
+#检查是否登陆
+if(!isset($_COOKIE["userid"])){
+    $respond["status"] = 1;
+    $respond["message"] = 'not login';
+    echo json_encode($respond, JSON_UNESCAPED_UNICODE);
+    exit;
+}
+if(isset($_POST["landmark"])){
+    $_landmark = $_POST["landmark"];
+}
+else{
+    $_landmark = "";
+}
 
 $aData=json_decode($_POST["data"],TRUE);
 
@@ -19,11 +33,11 @@ $query = "SELECT id FROM sentence WHERE book = ? and paragraph = ? and  begin =
 foreach ($aData as $data) {
 	if(!isset($data["id"]) || empty($data["id"])){
 		$id = PDO_FetchOne($query,array($data["book"],
-																	   $data["paragraph"],
-																	   $data["begin"],
-																	   $data["end"],
-																	   $data["channal"]
-																	   ));
+						$data["paragraph"],
+						$data["begin"],
+						$data["end"],
+						$data["channal"]
+						));
 		if(empty($id)){
 			$newList[] = $data;
 		}
@@ -68,6 +82,15 @@ if (!$sth || ($sth && $sth->errorCode() != 0)) {
 	$respond['message']=$error[2];
 }
 else{
+	#没错误 更新历史记录
+	foreach ($oldList as $data) {
+		$respond['message']=update_historay($data["id"],$_COOKIE["userid"] ,$data["text"],$_landmark);
+		if($respond['message']!==""){
+			$respond['status']=1;
+			echo json_encode($respond, JSON_UNESCAPED_UNICODE);
+			exit;
+		}
+	}
 	$respond['status']=0;
 	$respond['message']="成功";
 	foreach ($oldList as $key => $value) {
@@ -78,74 +101,79 @@ else{
 
 
 /* 插入新数据 */
-$PDO->beginTransaction();
-$query = "INSERT INTO sentence (id, 
-														parent,
-														book,
-														paragraph,
-														begin,
-														end,
-														channal,
-														tag,
-														author,
-														editor,
-														text,
-														language,
-														ver,
-														status,
-														strlen,
-														modify_time,
-														receive_time,
-														create_time
-														) 
-										VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )";
-$sth = $PDO->prepare($query);
-
-foreach ($newList as $data) {
-		$uuid = UUID::v4();
-		if($data["parent"]){
-			$parent = $data["parent"];
-		}
-		else{
-			$parent  = "";
-		}
-		$sth->execute(array($uuid,
-										  $parent,
-										  $data["book"], 
-										  $data["paragraph"], 
-										  $data["begin"], 
-										  $data["end"], 
-										  $data["channal"], 
-										  $data["tag"], 
-										  $data["author"], 
-										  $_COOKIE["userid"],
-										  $data["text"],
-										  $data["language"],
-										  1,
-										  7,
-										  mb_strlen($data["text"],"UTF-8"),
-										  mTime(),
-										  mTime(),
-										  mTime()
-										));
-		$new_id[] = array($uuid,$data["book"],$data["paragraph"],$data["begin"],$data["end"],$data["channal"],$data["text"]);
-}
-$PDO->commit();
+//查询channel语言
+
+if(count($newList)>0){
+	$PDO->beginTransaction();
+	$query = "INSERT INTO sentence (id, 
+									parent,
+									book,
+									paragraph,
+									begin,
+									end,
+									channal,
+									tag,
+									author,
+									editor,
+									text,
+									language,
+									ver,
+									status,
+									strlen,
+									modify_time,
+									receive_time,
+									create_time
+									) 
+						VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )";
+	$sth = $PDO->prepare($query);
+
+	foreach ($newList as $data) {
+			$uuid = UUID::v4();
+			if($data["parent"]){
+				$parent = $data["parent"];
+			}
+			else{
+				$parent  = "";
+			}
+			$sth->execute(array($uuid,
+						$parent,
+						$data["book"], 
+						$data["paragraph"], 
+						$data["begin"], 
+						$data["end"], 
+						$data["channal"], 
+						$data["tag"], 
+						$data["author"], 
+						$_COOKIE["userid"],
+						$data["text"],
+						$data["language"],
+						1,
+						7,
+						mb_strlen($data["text"],"UTF-8"),
+						mTime(),
+						mTime(),
+						mTime()
+					));
+			$new_id[] = array($uuid,$data["book"],$data["paragraph"],$data["begin"],$data["end"],$data["channal"],$data["text"]);
+	}
+	$PDO->commit();
 
 
-if (!$sth || ($sth && $sth->errorCode() != 0)) {
-	/*  识别错误且回滚更改  */
-	$PDO->rollBack();
-	$error = PDO_ErrorInfo();
-	$respond['insert_error']=$error[2];
-	$respond['new_list']=array();
-}
-else{
-	$respond['insert_error']=0;
-	foreach ($new_id as $key => $value) {
-		$update_list[] =  array("id" => $value[0],"book"=>$value[1],"paragraph"=>$value[2],"begin"=>$value[3],"end"=>$value[4],"channal"=>$value[5],"text" => $value[6]);
+	if (!$sth || ($sth && $sth->errorCode() != 0)) {
+		/*  识别错误且回滚更改  */
+		$PDO->rollBack();
+		$error = PDO_ErrorInfo();
+		$respond['insert_error']=$error[2];
+		$respond['new_list']=array();
 	}
+	else{
+		$respond['insert_error']=0;
+		foreach ($new_id as $key => $value) {
+			$update_list[] =  array("id" => $value[0],"book"=>$value[1],"paragraph"=>$value[2],"begin"=>$value[3],"end"=>$value[4],"channal"=>$value[5],"text" => $value[6]);
+		}
+	}	
 }
+
 $respond['update']=$update_list;
 
 echo json_encode($respond, JSON_UNESCAPED_UNICODE);

+ 159 - 157
app/usent/usent_ref.js

@@ -1,167 +1,169 @@
 var _usent_buffer = new Array();
 class USentResult {
-  constructor(filter = {}) {
-    this.filter = filter;
-    this.sentList = new Array();
-    this.buffer = new Array();
-  }
-  getSent() {
-    return this.sentList;
-  }
-  pushSent(book, para, start, end) {
-    for (const iterator of this.sentList) {
-      if (
-        iterator.book == book &&
-        iterator.para == para &&
-        iterator.start == start &&
-        iterator.end == end
-      ) {
-        return;
-      }
-    }
-    this.sentList.push({ book: book, para: para, start: start, end: end });
-  }
+	constructor(filter = {}) {
+		this.filter = filter;
+		this.sentList = new Array();
+		this.buffer = new Array();
+	}
+	getSent() {
+		return this.sentList;
+	}
+	pushSent(book, para, start, end) {
+		for (const iterator of this.sentList) {
+			if (iterator.book == book && iterator.para == para && iterator.start == start && iterator.end == end) {
+				return;
+			}
+		}
+		this.sentList.push({ book: book, para: para, start: start, end: end });
+	}
 
-  newSent(sent) {
-    this.buffer.push(sent);
-  }
+	newSent(sent) {
+		this.buffer.push(sent);
+	}
 
-  queryCallback(data, status) {
-    switch (status) {
-      case "success":
-        try {
-          let arrSent = JSON.parse(data);
-          _usent_buffer = arrSent;
-        } catch (e) { }
-        break;
-      case "":
-        break;
-    }
-  }
+	queryCallback(data, status) {
+		switch (status) {
+			case "success":
+				try {
+					let arrSent = JSON.parse(data);
+					_usent_buffer = arrSent;
+				} catch (e) {}
+				break;
+			case "":
+				break;
+		}
+	}
 
-  refresh() {
-    $.post(
-      "../usent/sent_query.php",
-      {
-        sent: JSON.stringify(this.sentList),
-        filter: JSON.stringify(this.filter),
-      },
-      this.queryCallback
-    );
-  }
-  getSentNum(book, para, start, end) {
-    for (const iterator of _usent_buffer) {
-      if (
-        iterator.info.book == book &&
-        iterator.info.para == para &&
-        iterator.info.start == start &&
-        iterator.info.end == end
-      ) {
-        return iterator.count;
-      }
-    }
-    return 0;
-  }
-  getSentText(book, para, start, end, channal = 0) {
-    for (const iterator of _usent_buffer) {
-      if (
-        iterator.info.book == book &&
-        iterator.info.para == para &&
-        iterator.info.start == start &&
-        iterator.info.end == end
-      ) {
-        if (channal == 0) {
-          return iterator.data;
-        } else {
-          for (const sent of iterator.data) {
-            if (sent.channal == channal) {
-              return sent;
-            }
-          }
-          return false;
-        }
-      }
-    }
-    return false;
-  }
+	refresh() {
+		$.post(
+			"../usent/sent_query.php",
+			{
+				sent: JSON.stringify(this.sentList),
+				filter: JSON.stringify(this.filter),
+			},
+			this.queryCallback
+		);
+	}
+	getSentNum(book, para, start, end) {
+		for (const iterator of _usent_buffer) {
+			if (
+				iterator.info.book == book &&
+				iterator.info.para == para &&
+				iterator.info.start == start &&
+				iterator.info.end == end
+			) {
+				return iterator.count;
+			}
+		}
+		return 0;
+	}
+	getSentText(book, para, start, end, channal = 0) {
+		for (const iterator of _usent_buffer) {
+			if (
+				iterator.info.book == book &&
+				iterator.info.para == para &&
+				iterator.info.start == start &&
+				iterator.info.end == end
+			) {
+				if (channal == 0) {
+					return iterator.data;
+				} else {
+					for (const sent of iterator.data) {
+						if (sent.channal == channal) {
+							return sent;
+						}
+					}
+					return false;
+				}
+			}
+		}
+		return false;
+	}
 
-  setSent(objSent) {
-    for (let iterator of _usent_buffer) {
-      if (
-        iterator.info.book == objSent.book &&
-        iterator.info.para == objSent.paragraph &&
-        iterator.info.start == objSent.begin &&
-        iterator.info.end == objSent.end
-      ) {
-        let sendSents = new Array();
+	setSent(objSent) {
+		for (let iterator of _usent_buffer) {
+			if (
+				iterator.info.book == objSent.book &&
+				iterator.info.para == objSent.paragraph &&
+				iterator.info.start == objSent.begin &&
+				iterator.info.end == objSent.end
+			) {
+				let sendSents = new Array();
 
-        if (objSent.id == "") {
-          //新建
-          objSent.sendId = com_uuid();
-          objSent.try = 1;
-          objSent.saveSuccess = false; //是否保存成功
-          iterator.data.push(objSent);
-          sendSents.push(objSent);
-        } else {
-          for (let sent of iterator.data) {
-            if (sent.id == objSent.id) {
-              sent = objSent;
-              sent.sendId = com_uuid();
-              sent.try = 1;
-              sent.saveSuccess = false; //是否保存成功
-              sendSents.push(sent);
-            }
-          }
-        }
-        if (sendSents.length > 0) {
-          for (const oneSent of sendSents) {
-            $(
-              "#send_" +
-              oneSent.book +
-              "_" +
-              oneSent.paragraph +
-              "_" +
-              oneSent.begin +
-              "_" +
-              oneSent.end +
-              "_" +
-              oneSent.channal
-            ).html("<svg class='icon icon_spin' style='fill: var(--detail-color); '><use xlink='http://www.w3.org/1999/xlink' href='svg/icon.svg#loading'>");
-          }
-          $.post(
-            "../usent/update.php",
-            {
-              data: JSON.stringify(sendSents),
-            },
-            function (data, status) {
-              if (status == "success") {
-                let result = JSON.parse(data);
-                let now_time = new Date()
-                console.log(result);
-                for (const iterator of result.update) {
-                  $(
-                    "#send_" +
-                    iterator.book +
-                    "_" +
-                    iterator.paragraph +
-                    "_" +
-                    iterator.begin +
-                    "_" +
-                    iterator.end +
-                    "_" +
-                    iterator.channal
-                  ).html(now_time.toLocaleTimeString() + "<svg class='icon' style='fill: var(--detail-color);'><use xlink='http://www.w3.org/1999/xlink' href='svg/icon.svg#ic_done'>");
-                }
-              }
-            }
-          );
-        } else {
-          return false;
-        }
-      }
-    }
-    return false;
-  }
+				if (objSent.id == "") {
+					//新建
+					objSent.sendId = com_uuid();
+					objSent.try = 1;
+					objSent.status = 1;
+					objSent.saveSuccess = false; //是否保存成功
+					iterator.data.push(objSent);
+					sendSents.push(objSent);
+				} else {
+					for (let sent of iterator.data) {
+						if (sent.id == objSent.id) {
+							sent = objSent;
+							sent.sendId = com_uuid();
+							sent.try = 1;
+							sent.status = 1;
+							sent.saveSuccess = false; //是否保存成功
+							sendSents.push(sent);
+						}
+					}
+				}
+				if (sendSents.length > 0) {
+					for (const oneSent of sendSents) {
+						$(
+							"#send_" +
+								oneSent.book +
+								"_" +
+								oneSent.paragraph +
+								"_" +
+								oneSent.begin +
+								"_" +
+								oneSent.end +
+								"_" +
+								oneSent.channal
+						).html(
+							"<svg class='icon icon_spin' style='fill: var(--detail-color); '><use xlink='http://www.w3.org/1999/xlink' href='svg/icon.svg#loading'>"
+						);
+					}
+					$.post(
+						"../usent/update.php",
+						{
+							data: JSON.stringify(sendSents),
+						},
+						function (data, status) {
+							if (status == "success") {
+								let result = JSON.parse(data);
+								let now_time = new Date();
+								console.log(result);
+								for (const iterator of result.update) {
+									$(
+										"#send_" +
+											iterator.book +
+											"_" +
+											iterator.paragraph +
+											"_" +
+											iterator.begin +
+											"_" +
+											iterator.end +
+											"_" +
+											iterator.channal
+									).html(
+										now_time.toLocaleTimeString() +
+											"<svg class='icon' style='fill: var(--detail-color);'><use xlink='http://www.w3.org/1999/xlink' href='svg/icon.svg#ic_done'>"
+									);
+								}
+							}
+						}
+					);
+				} else {
+					return false;
+				}
+			}
+		}
+		return false;
+	}
 }
 
 var _user_sent_buffer = new USentResult(); //数据库中的全部参考译文句子

+ 52 - 0
documents/development/introdution.md

@@ -0,0 +1,52 @@
+# wikipali
+
+#### 簡易・舒適・便利・多元
+
+#### 巴利聖典學習平台
+
+*什麼是巴利聖典?→*
+>巴利聖典乘載著佛陀的教導。從佛陀入滅後一個月開始,五百位阿拉漢僧人作了集結會議,將佛陀所宣說的法完整的背誦了下來,在這2600多年中一共經歷了六次的集結會議,將教法傳承至今。因主要分為三個部分律藏、經藏、論藏,因此一般也稱作巴利三藏。
+
+>Pāli 即是聖典的意思,是以古印度語言為基礎的文獻,目前這種語言已不在於日常被使用,只用於傳承佛法,因此也將此語言直接稱作巴利語(Pāli language),為了避免混淆,通常在語言翻譯上,會將「巴利」(表示語言)和「聖典」(表示典籍)分開,將它稱作巴利聖典。
+
+
+- 以往想閱讀巴利聖典都需要一些基本知識,才有辦法入門。這裡提供了低門檻的閱讀體驗,使更多人能夠輕鬆的開始教法的學習之路。
+
+- 除了聖典內容的整理,我們也思考如何在使用者體驗上給予學習者更舒適的條件。
+
+- 聖典以數位(數字)載體呈現有什麼好處?具備資訊的流動、互動的可能性,將使紙本文字載體的線性瀏覽模式有所突破,形成更為便捷的學習模式。
+
+- 無論你是剛開始學習佛法,或是專家,wikipāli都是最佳的選擇,
+
+### 巴利聖典原典
+拜科技發展所似,至今已有許多閱讀巴利原典的管道,而wikipali 提供了有別以往的聖典索引系統,能輕鬆且快速的找到欲閱讀的原典篇幅。
+
+### 課程學習
+在wikipāli創建的同時,也有項計畫正同步進行著,我們邀請了世界各地的聖典專家開課,針對不同的典籍進行翻譯解說。學生們利用此平台,將上課所學記錄下來,為此提供了第一手資源。
+同時,也邀請各方同好,不管是有意開課的專家,或是想一同上課的朋友,都誠摯歡迎您加入我們,一同參與世界性的聖典翻譯工作。
+
+### 基於聖典的著作
+佛陀的教法都是源自聖典,許多導師們也依據聖典的內容傳承教法,在各種佛法的著作中都標註著引用典籍之處。現在你可以更快速的摘取經典原文並進行翻譯及撰寫文章,並在平台上發表。教法的利益將更廣泛的被傳播、被吸收。
+
+**我們致力於建立多元的巴利聖典知識交流網路,不只提供資源,更希望多方專家及同好參與完善龐大的聖典翻譯工作。**
+
+---
+
+# **wikipāli** studio
+
+*巴利聖典的翻譯工具,巴利聖典的研究利器*
+
+#### More Wise
+#### More Efficient
+#### More Altruistic
+
+為了完成龐大的聖典翻譯工作,我們創建了一個半自動化的逐詞譯工作模式,提供翻譯者更快速有效的工作流程。
+
+### 內嵌字典
+這裡已將現有的幾個巴利字典隨附在此平台中,並能快速的點擊查詞,節省繁瑣的查字典工作。
+
+### 共享資源
+在眾多的翻譯者的貢獻下,將能提供珍貴的關鍵巴利知識,並給予其他翻譯者提供信息。使珍貴的巴利知識能夠更妥善的被擴散並加以利用在翻譯工作上。
+
+### 雲端化作業
+翻譯工作需要文書編輯工具、語言參考資料還有相關知識參考資料,有時還會尋求各方專家的協助。wikipāli將翻譯編輯工作雲端化,提高了工作者的可動性,在任何時候、任何地方都能快速的進行你的工作。