Browse Source

Merge pull request #816 from visuddhinanda/get-channel-progress-img

Get channel progress img
visuddhinanda 4 years ago
parent
commit
ab5a680090

+ 217 - 0
app/Http/Controllers/SentenceInfoController.php

@@ -0,0 +1,217 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Models\Sentence;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Cache;
+use Illuminate\Support\Facades\DB;
+
+class SentenceInfoController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function index()
+    {
+        //
+    }
+
+    /**
+     * Show the form for creating a new resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function create()
+    {
+        //
+    }
+
+    /**
+     * Store a newly created resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @return \Illuminate\Http\Response
+     */
+    public function store(Request $request)
+    {
+        //
+    }
+
+    /**
+     * Display the specified resource.
+     *
+     * @param  \App\Models\Sentence  $sentence
+     * @return \Illuminate\Http\Response
+     * http://127.0.0.1:8000/api/sentence/progress/image?channel=00ae2c48-c204-4082-ae79-79ba2740d506&&book=168&from=916&to=926&type=page
+     */
+    public function showprogress(Request $request)
+    {
+        ob_clean();
+        ob_start();
+        $channel = $request->get('channel');
+        $from = $request->get('from');
+        $to = $request->get('to');
+
+        $strlen = Sentence::where('channel_uid',$request->get('channel'))
+                ->where('book_id','>=',$request->get('book'))
+                ->where('paragraph','>=',$request->get('from'))
+                ->where('paragraph','<=',$request->get('to'))
+                ->sum('strlen');
+        if($request->get('type')==='page'){
+            if(empty($request->get('strlen'))){
+                $pageStrLen = 500;
+            }else{
+                $pageStrLen = $request->get('strlen');
+            }
+            $resulte = $strlen / $pageStrLen;
+        }else{
+            $resulte = $strlen;
+        }
+
+        $img = imagecreate(strlen($resulte)*10,22) or die('create image fail ');
+        imagecolorallocate($img,255,255,255);
+        $color = imagecolorallocate($img,0,0,0);
+        imagestring($img,5,0,0,$resulte,$color);
+        imagegif($img);
+        imagedestroy($img);
+
+        $content = ob_get_clean();
+        return response($content,200,[
+            'Content-Type'=>'image/gif'
+        ]);
+    }
+
+    //http://127.0.0.1:8000/api/sentence/progress/daily/image?channel=00ae2c48-c204-4082-ae79-79ba2740d506&&book=168&from=916&to=926&type=page
+    public function showprogressdaily(Request $request)
+    {
+        $imgWidth = 300;
+        $imgHeight = 100;
+        $xAxisOffset = 16;
+        $yAxisOffset = 16;
+        $maxDay = 10;
+        $maxPage = 20;
+        $yLineSpace = 5;
+
+        $pageStrLen = 500;
+
+        $pagePix = ($imgHeight-$xAxisOffset)/$maxPage;
+        $dayPix = ($imgWidth-$yAxisOffset)/$maxDay;
+
+        ob_clean();
+        ob_start();
+        $channel = $request->get('channel');
+        $from = $request->get('from');
+        $to = $request->get('to');
+
+        $img = imagecreate($imgWidth,$imgHeight) or die('create image fail ');
+
+        #颜色定义
+        //background color
+        imagecolorallocate($img,255,255,255);
+        $color = imagecolorallocate($img,0,0,0);
+        $gray = imagecolorallocate($img,180,180,180);
+        $dataLineColor = imagecolorallocate($img,50,50,255);
+
+        //绘制坐标轴
+        imageline($img,0,$imgHeight-$xAxisOffset,$imgWidth,$imgHeight-$xAxisOffset,$color);
+        imageline($img,$yAxisOffset,$imgHeight,$yAxisOffset,0,$color);
+        //绘制y轴网格线
+        for($i=1;$i<$maxPage/$yLineSpace;$i++){
+            $space= ($imgHeight-$xAxisOffset)/$maxPage*$yLineSpace;
+            $y=$imgHeight-$yAxisOffset-$i*$space;
+            imageline($img,$yAxisOffset,$y,$imgWidth,$y,$gray);
+            imagestring($img,5,0,$y-5,$i*$yLineSpace,$color);
+        }
+        //绘制x轴网格线
+        for($i=0; $i<$maxDay; $i++){
+            $space= ($imgWidth-$yAxisOffset)/$maxDay;
+            $x=$imgWidth-$yAxisOffset-$i*$space;
+            $dayOffset = $maxDay-$i;
+            $date = strtotime("today -{$i} day");
+            $day = date("d",$date);
+            imageline($img,$x,($imgHeight-$xAxisOffset),$x,($imgHeight-$xAxisOffset+5),$gray);
+            imagestring($img,5,$x,($imgHeight-$xAxisOffset),$day,$color);
+        }
+
+        $last=0;
+        for($i = 0; $i < $maxDay; $i++){
+            $day = strtotime("today -{$i} day");
+            $date = date("Y-m-d",$day);
+            $strlen = Sentence::where('channel_uid',$request->get('channel'))
+                    ->where('book_id','>=',$request->get('book'))
+                    ->where('paragraph','>=',$request->get('from'))
+                    ->where('paragraph','<=',$request->get('to'))
+                    ->whereDate('created_at','=',$date)
+                    ->sum('strlen');
+            if($request->get('type')==='page'){
+                if(!empty($request->get('strlen'))){
+                    $pageStrLen = $request->get('strlen');
+                }
+                $resulte = $strlen / $pageStrLen * $pagePix;
+            }else{
+                $resulte = $strlen / 50;
+            }
+            
+            if($i>0){
+                imageline($img,($imgWidth-$i*$dayPix),$imgHeight-$xAxisOffset-$resulte,($imgWidth-($i-1)*$dayPix),$imgHeight-$xAxisOffset-$last,$dataLineColor);
+            }
+            $last = $resulte;
+        }
+
+        imagegif($img);
+        imagedestroy($img);
+
+        $content = ob_get_clean();
+        return response($content,200,[
+            'Content-Type'=>'image/gif'
+        ]);
+    }
+
+    /**
+     * Display the specified resource.
+     *
+     * @param  \App\Models\Sentence  $sentence
+     * @return \Illuminate\Http\Response
+     */
+    public function show(Sentence $sentence)
+    {
+        //
+    }
+
+    /**
+     * Show the form for editing the specified resource.
+     *
+     * @param  \App\Models\Sentence  $sentence
+     * @return \Illuminate\Http\Response
+     */
+    public function edit(Sentence $sentence)
+    {
+        //
+    }
+
+    /**
+     * Update the specified resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \App\Models\Sentence  $sentence
+     * @return \Illuminate\Http\Response
+     */
+    public function update(Request $request, Sentence $sentence)
+    {
+        //
+    }
+
+    /**
+     * Remove the specified resource from storage.
+     *
+     * @param  \App\Models\Sentence  $sentence
+     * @return \Illuminate\Http\Response
+     */
+    public function destroy(Sentence $sentence)
+    {
+        //
+    }
+}

+ 9 - 0
public/app/channal/img.php

@@ -0,0 +1,9 @@
+<?php
+
+$img = imagecreate(120,30) or die('create image fail ');
+imagecolorallocate($img,255,255,255);
+$color = imagecolorallocate($img,0,0,0);
+imagestring($img,5,0,0,'300',$color);
+header('Content-type:image/gif');
+imagegif($img);
+imagedestroy($img);

+ 89 - 77
public/app/public/charcode/converter_tai_tham.js

@@ -1,5 +1,7 @@
 var char_roman_to_tai = [
 	//{ id: "n’</w>ti<w>", value: "nti" },
+	{ id: "ndr", value: "nrd" },
+	{ id: "ntr", value: "nrt" },
 	{ id: "bbho", value: "ᨻᩮ᩠ᨽᩣ" },
 	{ id: "ccho", value: "ᨧᩮ᩠ᨨᩣ" },
 	{ id: "ddho", value: "ᨴᩮ᩠ᨵᩣ" },
@@ -55,7 +57,7 @@ var char_roman_to_tai = [
 	{ id: "kko", value: "ᨠᩮ᩠ᨠᩣ" },
 	{ id: "kro", value: "ᨠᩮ᩠ᩕᩣ" },
 	{ id: "mbo", value: "ᨾᩮ᩠ᨻᩣ" },
-	{ id: "mmo", value: "ᨾᩮ᩠ᨾᩣ" },
+	{ id: "mmo", value: "ᨾᩮᩣ" },
 	{ id: "mpo", value: "ᨾᩮ᩠ᨷᩣ" },
 	{ id: "ndo", value: "ᨶᩮᩣ᩠ᨴ" },
 	{ id: "nno", value: "ᨶᩮᩣ᩠ᨶ" },
@@ -102,7 +104,7 @@ var char_roman_to_tai = [
 	{ id: "ñje", value: "ᨬᩮ᩠ᨩ" },
 	{ id: "kke", value: "ᨠᩮ᩠ᨠ" },
 	{ id: "ṅke", value: "ᩘᨠᩮ" },//  ᩘᩮ᩠ᨠ
-	{ id: "mme", value: "ᨾᩮ᩠ᨾ" },
+	{ id: "mme", value: "ᨾᩮ" },
 	{ id: "nne", value: "ᨶᩮ᩠ᨶ" },
 	{ id: "ññe", value: "ᨬᩮ᩠ᨬ" },
 	{ id: "ṇṇe", value: "ᨱᩮ᩠ᨱ" },
@@ -127,82 +129,85 @@ var char_roman_to_tai = [
 	{ id: "yye", value: "ᨿᩮ᩠ᨿ" },
 	//{ id: "mmā", value: "ᨾᩜᩣ" },
 	//{ id: "mma", value: "ᨾᩜ" },
+	{ id: "by", value: "ᨻ᩠ᨿ᩠" },
 	{ id: "ṭṭh", value: "ᨭᩛ᩠" },
-		
-	{ id: "ss", value: "ᩔ᩠" },
-	{ id: "vh", value: "ᩅ᩠ᩉ᩠" },
-	{ id: "vy", value: "ᩅ᩠ᨿ᩠" },
-	{ id: "vr", value: "ᩅᩕ᩠" },
-	{ id: "yh", value: "ᨿ᩠ᩉ᩠" },
-	{ id: "yy", value: "ᨿ᩠ᨿ᩠" },
-	{ id: "yr", value: "ᨿᩕ᩠" },
-	{ id: "yv", value: "ᨿ᩠ᩅ᩠" },
-	{ id: "hy", value: "ᩉ᩠ᨿ᩠" },
-	{ id: "hr", value: "ᩉᩕ᩠" },
-	{ id: "hv", value: "ᩉ᩠ᩅ᩠" },
-	{ id: "rv", value: "ᩁ᩠ᩅ᩠" },
-	{ id: "rh", value: "ᩁ᩠ᩉ᩠" },
-	{ id: "ry", value: "ᩁ᩠ᨿ᩠" },
-	{ id: "kh", value: "ᨡ᩠" },
-	{ id: "gh", value: "ᨥ᩠" },
-	{ id: "ch", value: "ᨨ᩠" },
-	{ id: "jh", value: "ᨫ᩠" },
-	{ id: "ññ", value: "ᨬ᩠ᨬ᩠" },
-	{ id: "ṭh", value: "ᨮ᩠" },
-	{ id: "ḍh", value: "ᨰ᩠" },
-	{ id: "th", value: "ᨳ᩠" },
-	{ id: "dh", value: "ᨵ᩠" },
-	{ id: "ph", value: "ᨹ᩠" },
-	{ id: "bh", value: "ᨽ᩠" },
-	{ id: "k", value: "ᨠ᩠" },
-	{ id: "g", value: "ᨣ᩠" },
-	{ id: "c", value: "ᨧ᩠" },
-	{ id: "j", value: "ᨩ᩠" },
-	{ id: "ñ", value: "ᨬ᩠" },
-	{ id: "ḷ", value: "ᩊ᩠" },
-	{ id: "ṭ", value: "ᨭ᩠" },
-	{ id: "ḍ", value: "ᨯ᩠" },
-	{ id: "ṇ", value: "ᨱ᩠" },
-	{ id: "t", value: "ᨲ᩠" },
-	{ id: "d", value: "ᨴ᩠" },
-	{ id: "n", value: "ᨶ᩠" },
-	{ id: "p", value: "ᨷ᩠" },
-	{ id: "b", value: "ᨻ᩠" },
-	{ id: "m", value: "ᨾ᩠" },
-	{ id: "l", value: "ᩃ᩠" },
-	{ id: "s", value: "ᩈ᩠" },
-	{ id: "ṅ", value: "ᩘ" },
-	{ id: "᩠h", value: "᩠ᩉ᩠" },
-	{ id: "h", value: "ᩉ᩠" },
-	{ id: "᩠y", value: "᩠ᨿ" },
-	{ id: "y", value: "ᨿ᩠" },
-	{ id: "᩠r", value: "ᩕ᩠" },
-	{ id: "r", value: "ᩁ᩠" },
-	{ id: "᩠v", value: "᩠ᩅ᩠" },
-	{ id: "v", value: "ᩅ᩠" },
-	{ id: "᩠aṃ", value: "ᩴ" },
-	{ id: "᩠iṃ", value: "ᩥᩴ" },
-	{ id: "᩠uṃ", value: "ᩩᩴ" },
-	{ id: "᩠ā", value: "ᩣ" },
-	{ id: "᩠i", value: "ᩥ" },
-	{ id: "᩠ī", value: "ᩦ" },
-	{ id: "᩠u", value: "ᩩ" },
-	{ id: "᩠ū", value: "ᩪ" },
-	{ id: "᩠e", value: "ᩮ" },
-	{ id: "᩠o", value: "ᩮᩣ" },
-	{ id: "aṃ", value: "ᩋᩴ" },
-	{ id: "iṃ", value: "ᨠ᩠ᨠᩴ" },
-	{ id: "uṃ", value: "ᩏᩴ" },
-	{ id: "a", value: "ᩋ" },
-	{ id: "ā", value: "ᩋᩣ" },
-	{ id: "i", value: "ᩍ" },
-	{ id: "ī", value: "ᩎ" },
-	{ id: "u", value: "ᩏ" },
-	{ id: "ū", value: "ᩐ" },
-	{ id: "e", value: "ᩑ" },
-	{ id: "o", value: "ᩒ" },
-	{ id: "᩠᩼ᩋ", value: "" },
-	{ id: "᩠ᩋ", value: "" },
+
+{ id: "ss", value: "ᩔ᩠" },
+{ id: "vh", value: "ᩅ᩠ᩉ᩠" },
+{ id: "vy", value: "ᩅ᩠ᨿ᩠" },
+{ id: "vr", value: "ᩅᩕ᩠" },
+{ id: "yh", value: "ᨿ᩠ᩉ᩠" },
+{ id: "yy", value: "ᨿ᩠ᨿ᩠" },
+{ id: "yr", value: "ᨿᩕ᩠" },
+{ id: "yv", value: "ᨿ᩠ᩅ᩠" },
+{ id: "hy", value: "ᩉ᩠ᨿ᩠" },
+{ id: "hr", value: "ᩉᩕ᩠" },
+{ id: "hv", value: "ᩉ᩠ᩅ᩠" },
+{ id: "rv", value: "ᩁ᩠ᩅ᩠" },
+{ id: "rh", value: "ᩁ᩠ᩉ᩠" },
+{ id: "ry", value: "ᩁ᩠ᨿ᩠" },
+{ id: "kh", value: "ᨡ᩠" },
+{ id: "gh", value: "ᨥ᩠" },
+{ id: "ch", value: "ᨨ᩠" },
+{ id: "jh", value: "ᨫ᩠" },
+{ id: "ññ", value: "ᨬ᩠ᨬ᩠" },
+{ id: "ṭh", value: "ᨮ᩠" },
+{ id: "ḍh", value: "ᨰ᩠" },
+{ id: "th", value: "ᨳ᩠" },
+{ id: "dh", value: "ᨵ᩠" },
+{ id: "ph", value: "ᨹ᩠" },
+{ id: "bh", value: "ᨽ᩠" },
+{ id: "k", value: "ᨠ᩠" },
+{ id: "g", value: "ᨣ᩠" },
+{ id: "c", value: "ᨧ᩠" },
+{ id: "j", value: "ᨩ᩠" },
+{ id: "ñ", value: "ᨬ᩠" },
+{ id: "ḷ", value: "ᩊ᩠" },
+{ id: "ṭ", value: "ᨭ᩠" },
+{ id: "ḍ", value: "ᨯ᩠" },
+{ id: "ṇ", value: "ᨱ᩠" },
+{ id: "t", value: "ᨲ᩠" },
+{ id: "d", value: "ᨴ᩠" },
+{ id: "n", value: "ᨶ᩠" },
+{ id: "p", value: "ᨷ᩠" },
+{ id: "b", value: "ᨻ᩠" },
+{ id: "m", value: "ᨾ᩠" },
+{ id: "l", value: "ᩃ᩠" },
+{ id: "s", value: "ᩈ᩠" },
+{ id: "ṅ", value: "ᩘ" },
+{ id: "᩠h", value: "᩠ᩉ᩠" },
+{ id: "h", value: "ᩉ᩠" },
+{ id: "᩠y", value: "᩠ᨿ" },
+{ id: "y", value: "ᨿ᩠" },
+{ id: "᩠r", value: "ᩕ᩠" },
+{ id: "r", value: "ᩁ᩠" },
+{ id: "᩠v", value: "᩠ᩅ᩠" },
+{ id: "v", value: "ᩅ᩠" },
+{ id: "᩠ᨾ", value: "ᩜ" },
+{ id: "᩠ai", value: "ᩱ" },
+{ id: "᩠aṃ", value: "ᩴ" },
+{ id: "᩠iṃ", value: "ᩥᩴ" },
+{ id: "᩠uṃ", value: "ᩩᩴ" },
+{ id: "᩠ā", value: "ᩣ" },
+{ id: "᩠i", value: "ᩥ" },
+{ id: "᩠ī", value: "ᩦ" },
+{ id: "᩠u", value: "ᩩ" },
+{ id: "᩠ū", value: "ᩪ" },
+{ id: "᩠e", value: "ᩮ" },
+{ id: "᩠o", value: "ᩮᩣ" },
+{ id: "aṃ", value: "ᩋᩴ" },
+{ id: "iṃ", value: "ᨠ᩠ᨠᩴ" },
+{ id: "uṃ", value: "ᩏᩴ" },
+{ id: "a", value: "ᩋ" },
+{ id: "ā", value: "ᩋᩣ" },
+{ id: "i", value: "ᩍ" },
+{ id: "ī", value: "ᩎ" },
+{ id: "u", value: "ᩏ" },
+{ id: "ū", value: "ᩐ" },
+{ id: "e", value: "ᩑ" },
+{ id: "o", value: "ᩒ" },
+{ id: "᩠᩼ᩋ", value: "" },
+{ id: "᩠ᩋ", value: "" },
 //{ id: "ᨡᩮᩣ", value: "ᨡᩮᩤ" },
 //{ id: "ᨡᩣ", value: "ᨡᩤ" },
 { id: "ᨠ᩠ᨡᩮᩤ", value: "ᨠᩮ᩠ᨡᩣ" },
@@ -222,6 +227,7 @@ var char_roman_to_tai = [
 { id: "ᩘ ", value: "ᩘ" },
 { id: "ᨷ᩠ᨷᩤ", value: "ᨷ᩠ᨷᩣ" },
 { id: "ᨲ᩠ᩅᩤ", value: "ᨲ᩠ᩅᩣ" },
+{ id: "ᩈ᩠ᩅᩤ", value: "ᩈ᩠ᩅᩣ" },
 { id: "ᩮ᩠ᨷᩤ", value: "ᩮ᩠ᨷᩣ" },
 		
 ];
@@ -285,6 +291,7 @@ var char_tai_to_roman = [
 	{ id: "ᨠᩮ᩠ᨠᩣ", value: "kko" },
 	{ id: "ᨠᩮ᩠ᩕᩣ", value: "kro" },
 	{ id: "ᨾᩮ᩠ᨻᩣ", value: "mbo" },
+	{ id: "ᨾᩮᩜᩣ", value: "mmo" },
 	{ id: "ᨾᩮ᩠ᨾᩣ", value: "mmo" },
 	{ id: "ᨾᩮ᩠ᨷᩣ", value: "mpo" },
 	{ id: "ᨶᩮᩣ᩠ᨴ", value: "ndo" },
@@ -332,6 +339,7 @@ var char_tai_to_roman = [
 	{ id: "ᨬᩮ᩠ᨩ", value: "ñje" },
 	{ id: "ᨠᩮ᩠ᨠ", value: "kke" },
 	{ id: "ᩘᨠᩮ", value: "ṅke" },
+	{ id: "ᨾᩮᩜ", value: "mmo" },
 	{ id: "ᨾᩮ᩠ᨾ", value: "mme" },
 	{ id: "ᨶᩮ᩠ᨶ", value: "nne" },
 	{ id: "ᨬᩮ᩠ᨬ", value: "ññe" },
@@ -357,6 +365,8 @@ var char_tai_to_roman = [
 	{ id: "ᨿᩮ᩠ᨿ", value: "yye" },
 	{ id: "ᨾᩜᩣ", value: "mmā" },
 
+	{ id: "ᩜ", value: "᩠ma" },
+	{ id: "ᩱ", value: "᩠ai" },
 	{ id: "ᩴ", value: "᩠aṃ" },
 	{ id: "ᩥᩴ", value: "᩠iṃ" },
 	{ id: "ᩩᩴ", value: "᩠uṃ" },
@@ -493,6 +503,8 @@ var char_tai_to_roman = [
 	{ id: "e᩠ā", value: "o" },
 	{ id: "a᩠", value: "" },
 	{ id: "᩠a", value: "" },
+	{ id: "nrd", value: "ndr" },
+	{ id: "nrt", value: "ntr" },
 
 ];
 

+ 13 - 2
public/app/public/charcode/tai_tham.js

@@ -1,4 +1,6 @@
 var char_roman_to_tai = [
+	{ id: "ndr", value: "nrd" },
+	{ id: "ntr", value: "nrt" },
 	{ id: "bbho", value: "ᨻᩮ᩠ᨽᩣ" },
 	{ id: "ccho", value: "ᨧᩮ᩠ᨨᩣ" },
 	{ id: "ddho", value: "ᨴᩮ᩠ᨵᩣ" },
@@ -54,7 +56,7 @@ var char_roman_to_tai = [
 	{ id: "kko", value: "ᨠᩮ᩠ᨠᩣ" },
 	{ id: "kro", value: "ᨠᩮ᩠ᩕᩣ" },
 	{ id: "mbo", value: "ᨾᩮ᩠ᨻᩣ" },
-	{ id: "mmo", value: "ᨾᩮ᩠ᨾᩣ" },
+	{ id: "mmo", value: "ᨾᩮᩣ" },
 	{ id: "mpo", value: "ᨾᩮ᩠ᨷᩣ" },
 	{ id: "ndo", value: "ᨶᩮᩣ᩠ᨴ" },
 	{ id: "nno", value: "ᨶᩮᩣ᩠ᨶ" },
@@ -101,7 +103,7 @@ var char_roman_to_tai = [
 	{ id: "ñje", value: "ᨬᩮ᩠ᨩ" },
 	{ id: "kke", value: "ᨠᩮ᩠ᨠ" },
 	{ id: "ṅke", value: "ᩘᨠᩮ" },//  ᩘᩮ᩠ᨠ
-	{ id: "mme", value: "ᨾᩮ᩠ᨾ" },
+	{ id: "mme", value: "ᨾᩮ" },
 	{ id: "nne", value: "ᨶᩮ᩠ᨶ" },
 	{ id: "ññe", value: "ᨬᩮ᩠ᨬ" },
 	{ id: "ṇṇe", value: "ᨱᩮ᩠ᨱ" },
@@ -180,6 +182,8 @@ var char_roman_to_tai = [
 { id: "r", value: "ᩁ᩠" },
 { id: "᩠v", value: "᩠ᩅ᩠" },
 { id: "v", value: "ᩅ᩠" },
+{ id: "᩠ᨾ", value: "ᩜ" },
+{ id: "᩠ai", value: "ᩱ" },
 { id: "᩠aṃ", value: "ᩴ" },
 { id: "᩠iṃ", value: "ᩥᩴ" },
 { id: "᩠uṃ", value: "ᩩᩴ" },
@@ -222,6 +226,7 @@ var char_roman_to_tai = [
 { id: "ᩘ ", value: "ᩘ" },
 { id: "ᨷ᩠ᨷᩤ", value: "ᨷ᩠ᨷᩣ" },
 { id: "ᨲ᩠ᩅᩤ", value: "ᨲ᩠ᩅᩣ" },
+{ id: "ᩈ᩠ᩅᩤ", value: "ᩈ᩠ᩅᩣ" },
 { id: "ᩮ᩠ᨷᩤ", value: "ᩮ᩠ᨷᩣ" },
 
 
@@ -287,6 +292,7 @@ var char_tai_to_roman = [
 	{ id: "ᨠᩮ᩠ᨠᩣ", value: "kko" },
 	{ id: "ᨠᩮ᩠ᩕᩣ", value: "kro" },
 	{ id: "ᨾᩮ᩠ᨻᩣ", value: "mbo" },
+	{ id: "ᨾᩮᩜᩣ", value: "mmo" },
 	{ id: "ᨾᩮ᩠ᨾᩣ", value: "mmo" },
 	{ id: "ᨾᩮ᩠ᨷᩣ", value: "mpo" },
 	{ id: "ᨶᩮᩣ᩠ᨴ", value: "ndo" },
@@ -334,6 +340,7 @@ var char_tai_to_roman = [
 	{ id: "ᨬᩮ᩠ᨩ", value: "ñje" },
 	{ id: "ᨠᩮ᩠ᨠ", value: "kke" },
 	{ id: "ᩘᨠᩮ", value: "ṅke" },
+	{ id: "ᨾᩮᩜ", value: "mmo" },
 	{ id: "ᨾᩮ᩠ᨾ", value: "mme" },
 	{ id: "ᨶᩮ᩠ᨶ", value: "nne" },
 	{ id: "ᨬᩮ᩠ᨬ", value: "ññe" },
@@ -359,6 +366,8 @@ var char_tai_to_roman = [
 	{ id: "ᨿᩮ᩠ᨿ", value: "yye" },
 	{ id: "ᨾᩜᩣ", value: "mmā" },
 
+	{ id: "ᩜ", value: "᩠ma" },
+	{ id: "ᩱ", value: "᩠ai" },
 	{ id: "ᩴ", value: "᩠aṃ" },
 	{ id: "ᩥᩴ", value: "᩠iṃ" },
 	{ id: "ᩩᩴ", value: "᩠uṃ" },
@@ -495,6 +504,8 @@ var char_tai_to_roman = [
 	{ id: "e᩠ā", value: "o" },
 	{ id: "a᩠", value: "" },
 	{ id: "᩠a", value: "" },
+	{ id: "nrd", value: "ndr" },
+	{ id: "nrt", value: "ntr" },
 
 ];
 

+ 3 - 3
public/app/studio/js/relation_list.js

@@ -1423,7 +1423,7 @@ var list_relation=[
     },
     {
         "id": "ENU",
-        "case": ".adv.",
+        "case": "",
         "note": "enumerative relation",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
@@ -1432,7 +1432,7 @@ var list_relation=[
     },
     {
         "id": "ENU",
-        "case": ".adv.",
+        "case": "",
         "note": "罗列 ➡ 破折号",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
@@ -1441,7 +1441,7 @@ var list_relation=[
     },
     {
         "id": "ENU",
-        "case": ".adv.",
+        "case": "",
         "note": "enumerative relation",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",

+ 1 - 1
public/app/studio/js/relation_list.json

@@ -1,4 +1,4 @@
-var list_relation=[
+[
     {
         "id": "IAD",
         "case": "",

+ 7 - 7
public/app/term/note.js

@@ -1339,27 +1339,27 @@ function myEndingTooltip(inStr){
         {
             id:"my_dat1",
             name:"အား",
-            tooltip:'为格/对象(间接宾语)',
+            tooltip:'目的格/对象(间接宾语),对……来说',
         },
         {
             id:"my_dat2",
             name:"ငှာ",
-            tooltip:'为格/目的(为了)',
+            tooltip:'目的格/表示目的,为了……',
         },
         {
             id:"my_abl1",
             name:"မှ",
-            tooltip:'从格/从',
+            tooltip:'从格/表示来源,……',
         },
         {
             id:"my_abl2",
             name:"အောက်",
-            tooltip:'从格/比……多',
+            tooltip:'从格/表达比较,比……多',
         },
         {
             id:"my_abl3",
             name:"ထက်",
-            tooltip:'从格/比……少',
+            tooltip:'从格/表达比较,比……少',
         },
         {
             id:"my_gen1",
@@ -1369,7 +1369,7 @@ function myEndingTooltip(inStr){
         {
             id:"my_gen2",
             name:"တွင်",
-            tooltip:'属格/处(范围)',
+            tooltip:'属格/表达范围,……中的',
         },
         {
             id:"my_loc1",
@@ -1379,7 +1379,7 @@ function myEndingTooltip(inStr){
         {
             id:"my_loc2",
             name:"ကြောင့်",
-            tooltip:'处格/因',
+            tooltip:'处格/表达动机,……,旨在……',
         },
         {
             id:"my_abs",

+ 3 - 3
public/app/users_guide/zh-cn/grammar_fut.md

@@ -12,6 +12,6 @@
 
 |将来时|单数|复数|
 | -- | -- | -- |
-|第三人称|~(i)ssati<br>TA**将**~|~(i)ssanti<br>TA们**将**~|
-|第二人称|~(i)ssasi<br>你**将**~|~(i)ssatha<br>你们**将**~|
-|第一人称|~(i)ssāmi<br>我**将**~|~(i)ssāma<br>我们**将**~|
+|第三人称|-(i)ssati<br>TA**将**…|-(i)ssanti<br>TA们**将**…|
+|第二人称|-(i)ssasi<br>你**将**…|-(i)ssatha<br>你们**将**…|
+|第一人称|-(i)ssāmi<br>我**将**…|-(i)ssāma<br>我们**将**…|

+ 1 - 1
public/app/users_guide/zh-cn/grammar_my_abl1.md

@@ -1,3 +1,3 @@
 # 缅文语尾
 
-- 从格/从
+- 来**源**格/表达来源,从……

+ 1 - 1
public/app/users_guide/zh-cn/grammar_my_abl2.md

@@ -1,3 +1,3 @@
 # 缅文语尾
 
-- 从格/比……多
+- 来**源**格/表达比较,比……多

+ 1 - 1
public/app/users_guide/zh-cn/grammar_my_abl3.md

@@ -1,3 +1,3 @@
 # 缅文语尾
 
-- 从格/比……少
+- 来**源**格/表达比较,比……少

+ 1 - 1
public/app/users_guide/zh-cn/grammar_my_acc1.md

@@ -1,3 +1,3 @@
 # 缅文语尾
 
-- 宾格/宾语
+- ****格/宾语

+ 1 - 1
public/app/users_guide/zh-cn/grammar_my_dat1.md

@@ -1,3 +1,3 @@
 # 缅文语尾
 
-- 为格/对象(间接宾语)
+- 目的格/表达动作对象(间接宾语),向……,对……来说

+ 1 - 1
public/app/users_guide/zh-cn/grammar_my_dat2.md

@@ -1,3 +1,3 @@
 # 缅文语尾
 
-- 为格/目的(为了)
+- 目的格/表达目的,为了……

+ 2 - 1
public/app/users_guide/zh-cn/grammar_my_gen1.md

@@ -1,3 +1,4 @@
 # 缅文语尾
 
-- 属格/的
+- 名词:属格/表达从属,……的
+- 句子结尾:放在首要动词之后

+ 2 - 2
public/app/users_guide/zh-cn/grammar_my_gen2.md

@@ -1,4 +1,4 @@
 # 缅文语尾
 
-- 处格/处(范围)
-- 属格/处(范围)
+- 处格/表达范围,……处
+- 属格/表达范围,……中的

+ 1 - 1
public/app/users_guide/zh-cn/grammar_my_inst1.md

@@ -1,3 +1,3 @@
 # 缅文语尾
 
-- 具格/用
+- 具格/表达方式,……,以……

+ 1 - 1
public/app/users_guide/zh-cn/grammar_my_inst2.md

@@ -1,3 +1,3 @@
 # 缅文语尾
 
-- 具格/与
+- 具格/表达连带,……

+ 8 - 2
public/app/users_guide/zh-cn/grammar_my_inst3.md

@@ -1,4 +1,10 @@
 # 缅文语尾
 
-- 具格/凭借
-- 从格/原因
+表示原因,有以下可能:
+
+|可能的情况|翻译建议|
+|-|-|
+|[工**具**格](https://assets-hk.wikipali.org/pali-handbook/zh-Hans/basic-relation/instr/instr-cau.html)|根据……|
+|[来**源**格](https://assets-hk.wikipali.org/pali-handbook/zh-Hans/basic-relation/abl/abl-cau.html)|由于……|
+|[引号**iti**](https://assets-hk.wikipali.org/pali-handbook/zh-Hans/basic-relation/other/iti.html#%E5%8E%9F%E5%9B%A0%E7%8A%B6%E8%AF%ADcausative-particle)|因为……|
+|[**连续**体](https://assets-hk.wikipali.org/pali-handbook/zh-Hans/basic-relation/verb/ger.html#%E4%BE%8B%E5%8F%A53)|基于……|

+ 1 - 1
public/app/users_guide/zh-cn/grammar_my_loc2.md

@@ -1,3 +1,3 @@
 # 缅文语尾
 
-- 处格/因
+- 处格/表达动机,……,旨在……

+ 3 - 3
public/app/users_guide/zh-cn/grammar_pres.md

@@ -13,7 +13,7 @@
 
 |现在时|单数|复数|
 | -- | -- | -- |
-|第三人称|~ti<br>TA**正在**~|~nti<br>TA们**正在**~|
-|第二人称|~si<br>你**正在**~|~tha<br>你们**正在**~|
-|第一人称|~āmi<br>我**正在**~|~āma<br>我们**正在**~|
+|第三人称|-ti<br>TA**正在**…|-nti<br>TA们**正在**…|
+|第二人称|-si<br>你**正在**…|-tha<br>你们**正在**…|
+|第一人称|-āmi<br>我**正在**…|-āma<br>我们**正在**…|
 

+ 2 - 0
routes/api.php

@@ -5,6 +5,8 @@ use Illuminate\Support\Facades\Route;
 use App\Http\Controllers\WbwTemplateController;
 use App\Http\Controllers\DhammaTermController;
 use App\Http\Controllers\SentenceController;
+use App\Http\Controllers\SentenceInfoController;
+
 /*
 |--------------------------------------------------------------------------
 | API Routes

+ 7 - 1
routes/web.php

@@ -1,7 +1,9 @@
 <?php
 
 use Illuminate\Support\Facades\Route;
+use App\Http\Controllers\SentenceInfoController;
 use App\Http\Controllers\WbwAnalysisController;
+
 /*
 |--------------------------------------------------------------------------
 | Web Routes
@@ -25,4 +27,8 @@ Route::get('/home/{name}', function ($name) {
     return view('home', ['name' => $name]);
 });
 
-Route::get('/wbwanalyses', [WbwAnalysisController::class,'index']);
+
+Route::get('/api/sentence/progress/image', [SentenceInfoController::class,'showprogress']);
+Route::get('/api/sentence/progress/daily/image', [SentenceInfoController::class,'showprogressdaily']);
+Route::get('/wbwanalyses', [WbwAnalysisController::class,'index']);
+