2
0
Эх сурвалжийг харах

Merge branch 'laravel' into chanpter_progress

visuddhinanda@gmail.com 3 жил өмнө
parent
commit
f6ae41ac33
100 өөрчлөгдсөн 4180 нэмэгдсэн , 971 устгасан
  1. 26 20
      app/Console/Commands/UpgradePaliText.php
  2. 146 0
      app/Console/Commands/UpgradeWbwAnalyses.php
  3. 92 0
      app/Http/Controllers/AnalysisController.php
  4. 307 0
      app/Http/Controllers/SentenceInfoController.php
  5. 71 0
      app/Http/Controllers/WbwAnalysisController.php
  6. 11 0
      app/Models/WbwAnalysis.php
  7. 59 0
      database/migrations/2022_02_07_012707_create_wbw_analyses_table.php
  8. 1 1
      deploy/roles/ubuntu/tasks/main.yml
  9. 13 0
      material-ui/.gitignore
  10. 13 0
      material-ui/README.md
  11. 77 0
      material-ui/package.json
  12. BIN
      material-ui/public/favicon.ico
  13. 43 0
      material-ui/public/index.html
  14. BIN
      material-ui/public/logo192.png
  15. BIN
      material-ui/public/logo512.png
  16. 25 0
      material-ui/public/manifest.json
  17. 3 0
      material-ui/public/robots.txt
  18. 10 0
      material-ui/src/404.tsx
  19. 22 0
      material-ui/src/components/form.tsx
  20. 5 0
      material-ui/src/hooks.ts
  21. 4 0
      material-ui/src/index.css
  22. 51 0
      material-ui/src/index.tsx
  23. 65 0
      material-ui/src/layouts/Copyright.tsx
  24. 40 0
      material-ui/src/layouts/application/index.tsx
  25. 5 0
      material-ui/src/layouts/dashboard/index.tsx
  26. 28 0
      material-ui/src/locales/en-US.ts
  27. 30 0
      material-ui/src/locales/index.ts
  28. 5 0
      material-ui/src/locales/zh-Hans.ts
  29. 5 0
      material-ui/src/locales/zh-Hant.ts
  30. 2 0
      material-ui/src/logo.svg
  31. 32 0
      material-ui/src/plugins/demo/index.tsx
  32. 6 0
      material-ui/src/plugins/demo/posts/edit.tsx
  33. 6 0
      material-ui/src/plugins/demo/posts/index.tsx
  34. 6 0
      material-ui/src/plugins/demo/posts/new.tsx
  35. 6 0
      material-ui/src/plugins/demo/topics/edit.tsx
  36. 6 0
      material-ui/src/plugins/demo/topics/index.tsx
  37. 6 0
      material-ui/src/plugins/demo/topics/new.tsx
  38. 16 0
      material-ui/src/plugins/index.tsx
  39. 25 0
      material-ui/src/plugins/nut/home.tsx
  40. 36 0
      material-ui/src/plugins/nut/index.tsx
  41. 130 0
      material-ui/src/plugins/nut/install.tsx
  42. 103 0
      material-ui/src/plugins/nut/users/NonSignInLayout.tsx
  43. 33 0
      material-ui/src/plugins/nut/users/confirm.tsx
  44. 33 0
      material-ui/src/plugins/nut/users/forgot-password.tsx
  45. 6 0
      material-ui/src/plugins/nut/users/logs.tsx
  46. 6 0
      material-ui/src/plugins/nut/users/reset-password.tsx
  47. 43 0
      material-ui/src/plugins/nut/users/sign-in.tsx
  48. 70 0
      material-ui/src/plugins/nut/users/sign-up.tsx
  49. 33 0
      material-ui/src/plugins/nut/users/unlock.tsx
  50. 6 0
      material-ui/src/plugins/nut/users/update-profile.tsx
  51. 1 0
      material-ui/src/react-app-env.d.ts
  52. 40 0
      material-ui/src/reducers/current-user.ts
  53. 35 0
      material-ui/src/reducers/site-info.ts
  54. 15 0
      material-ui/src/reportWebVitals.ts
  55. 1 0
      material-ui/src/request.ts
  56. 5 0
      material-ui/src/setupTests.ts
  57. 17 0
      material-ui/src/store.ts
  58. 26 0
      material-ui/tsconfig.json
  59. 46 16
      public/app/article/article.js
  60. 1 1
      public/app/article/index.php
  61. 7 3
      public/app/article/style.css
  62. 1 1
      public/app/channal/channal.js
  63. 9 0
      public/app/channal/img.php
  64. 29 9
      public/app/db/custom_book.php
  65. 5 2
      public/app/db/user.php
  66. 1 1
      public/app/dict/dict_lookup.php
  67. 0 16
      public/app/dict/grm_abbr.php
  68. 2 2
      public/app/install/db_insert_palitext_cli.php
  69. 22 10
      public/app/install/db_update_palitext_cli.php
  70. 265 0
      public/app/palicanon/category/cscd.json
  71. 258 0
      public/app/palicanon/category/defualt.json
  72. 10 0
      public/app/palicanon/category/index.json
  73. 211 0
      public/app/palicanon/index1.php
  74. 202 33
      public/app/palicanon/palicanon.js
  75. 81 0
      public/app/pcdl/css/font.css
  76. 1 1
      public/app/pcdl/css/style.css
  77. 9 1
      public/app/pcdl/head_bar.php
  78. 2 2
      public/app/public/book_index/a/default.json
  79. 2 2
      public/app/public/book_index/a/en.json
  80. 2 2
      public/app/public/book_index/a/my.json
  81. 3 3
      public/app/public/book_index/a/zh-cn.json
  82. 2 2
      public/app/public/book_index/a/zh-tw.json
  83. 89 77
      public/app/public/charcode/converter_tai_tham.js
  84. 14 23
      public/app/public/charcode/coverter_my.js
  85. 5 3
      public/app/public/charcode/myanmar.js
  86. 17 2
      public/app/public/charcode/tai_tham.js
  87. 1 0
      public/app/public/lang/default.json
  88. 2 1
      public/app/public/lang/en.json
  89. 411 425
      public/app/public/lang/my.json
  90. 2 1
      public/app/public/lang/si.json
  91. 2 1
      public/app/public/lang/zh-cn.json
  92. 2 1
      public/app/public/lang/zh-tw.json
  93. 28 10
      public/app/reader/get_para1.php
  94. 1 1
      public/app/reader/style.css
  95. 81 0
      public/app/studio/css/font.css
  96. 3 2
      public/app/studio/css/style.css
  97. 137 101
      public/app/studio/js/relation_list.js
  98. 97 97
      public/app/studio/js/relation_list.json
  99. 209 97
      public/app/term/note.js
  100. 1 1
      public/app/term/popup_note.css

+ 26 - 20
app/Console/Commands/UpgradePaliText.php

@@ -121,26 +121,32 @@ class UpgradePaliText extends Command
 						$length = $paragraph_count - $paragraph + 1;
 					}
 
-
-					$prev = -1;
-					if ($iPar > 0) {
-						for ($iPar1 = $iPar - 1; $iPar1 >= 0; $iPar1--) {
-							if ($title_data[$iPar1]["level"] == $curr_level) {
-								$prev = $title_data[$iPar1]["paragraph"];
-								break;
-							}
-						}
-					}
-
-					$next = -1;
-					if ($iPar < count($title_data) - 1) {
-						for ($iPar1 = $iPar + 1; $iPar1 < count($title_data); $iPar1++) {
-							if ($title_data[$iPar1]["level"] == $curr_level) {
-								$next = $title_data[$iPar1]["paragraph"];
-								break;
-							}
-						}
-					}
+                    /*
+                    上一个段落
+                    算法:查找上一个标题段落。而且该标题段落的下一个段落不是标题段落
+                    */
+                    $prev = -1;
+                    if ($iPar > 0) {
+                        for ($iPar1 = $iPar - 1; $iPar1 >= 0; $iPar1--) {
+                            if ($title_data[$iPar1]["level"] < 8 && $title_data[$iPar1+1]["level"]==100) {
+                                $prev = $title_data[$iPar1]["paragraph"];
+                                break;
+                            }
+                        }
+                    }
+                    /*
+                    下一个段落
+                    算法:查找下一个标题段落。而且该标题段落的下一个段落不是标题段落
+                    */
+                    $next = -1;
+                    if ($iPar < count($title_data) - 1) {
+                        for ($iPar1 = $iPar + 1; $iPar1 < count($title_data)-1; $iPar1++) {
+                            if ($title_data[$iPar1]["level"] <8 && $title_data[$iPar1+1]["level"]==100) {
+                                $next = $title_data[$iPar1]["paragraph"];
+                                break;
+                            }
+                        }
+                    }
 
 					$parent = -1;
 					if ($iPar > 0) {

+ 146 - 0
app/Console/Commands/UpgradeWbwAnalyses.php

@@ -0,0 +1,146 @@
+<?php
+
+namespace App\Console\Commands;
+
+use Illuminate\Console\Command;
+use App\Models\Wbw;
+use App\Models\WbwAnalysis;
+
+
+class UpgradeWbwAnalyses extends Command
+{
+    /**
+     * The name and signature of the console command.
+     *
+     * @var string
+     */
+    protected $signature = 'upgrade:wbwanalyses {id?}';
+
+    /**
+     * The console command description.
+     *
+     * @var string
+     */
+    protected $description = '用户逐词解析数据填充wbw analyses表';
+
+    /**
+     * Create a new command instance.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        parent::__construct();
+    }
+
+    /**
+     * Execute the console command.
+     *
+     * @return int
+     */
+    public function handle()
+    {
+        $bar = $this->output->createProgressBar(Wbw::count());
+        $counter =0;
+        if(empty($this->argument('id'))){
+            $it = Wbw::orderby('id')->cursor();
+        }else{
+            $it = Wbw::where('id',$this->argument('id'))->orderby('id')->cursor();
+        }
+        
+        foreach ($it as $wbwrow) {
+            $counter++;
+            WbwAnalysis::where('wbw_id',$wbwrow->id)->delete();
+            # code...
+            $data = str_replace("&nbsp;",' ',$wbwrow->data);
+            $data = str_replace("<br>",' ',$data);
+
+            $xmlString = "<root>" . $data . "</root>";
+            try{
+                $xmlWord = simplexml_load_string($xmlString);
+            }catch(Exception $e){
+                continue;
+            }
+            
+            $wordsList = $xmlWord->xpath('//word');
+            foreach ($wordsList as $word) {
+                $pali = $word->real->__toString();
+                foreach ($word as $key => $value) {
+                    $strValue = $value->__toString();
+                    if ($strValue !== "?" && $strValue !== "" && $strValue !== ".ctl." && $strValue !== ".a." && $strValue !== " " && mb_substr($strValue, 0, 3, "UTF-8") !== "[a]" && $strValue !== "_un_auto_factormean_" && $strValue !== "_un_auto_mean_") {
+                        $iType = 0;
+                        $lang = 'pali';
+                        $newData = [
+							'wbw_id'=>$wbwrow->id,
+							'wbw_word'=>$wbwrow->word,
+							'book_id'=>$wbwrow->book_id,
+							'paragraph'=>$wbwrow->paragraph,
+							'wid'=>$wbwrow->wid,
+                            'type'=>0,
+                            'data'=>$strValue,
+                            'confidence'=>100,
+                            'lang'=>'en',
+                            'editor_id'=>$wbwrow->editor_id,
+                            'created_at'=>$wbwrow->created_at,
+                            'updated_at'=>$wbwrow->updated_at
+						];
+                        #TODO 加虚词
+                        switch ($key) {
+                            case 'type':
+                                $newData['type']=1;
+                                WbwAnalysis::insert($newData);
+                                break;
+                            case 'gramma':
+                                $newData['type']=2;
+                                WbwAnalysis::insert($newData);
+                                break;
+                            case 'mean':
+                                $newData['type']=3;
+                                WbwAnalysis::insert($newData);
+                                break;
+                            case 'org':
+                                $newData['type']=4;
+                                WbwAnalysis::insert($newData);
+                                break;
+                            case 'om':
+                                $newData['type']=5;
+                                WbwAnalysis::insert($newData);
+                                break;
+                            case 'parent':
+                                $newData['type']=6;
+                                WbwAnalysis::insert($newData);
+                                break;
+                            case 'rela':
+                            /*
+                            <rela>[{"sour_id":"p199-764-6","sour_spell":"dhammacakkappavattanatthaṃ","dest_id":"p199-764-8","dest_spell":"āmantanā","relation":"ADV","note":""}]</rela>
+                            */
+                                $newData['type']=7;
+                                $rlt = json_decode($strValue);
+                                foreach ($rlt as $rltValue) {
+                                    # code...
+                                    if(!empty($rltValue->relation)){
+                                        $newData['data'] = $rltValue->relation;
+                                        if(isset($word->gramma) && !empty($word->gramma)){
+                                            $grm = explode('$',$word->gramma);
+                                            if(count($grm)>0){
+                                                $newData['d1'] = $grm[count($grm)-1];
+                                            }else{
+                                                $newData['d1'] = $word->type;
+                                            }
+                                        }
+                                        $newData['d2'] = (int)(explode('-',$rltValue->dest_id)[2]) - (int)(explode('-',$rltValue->sour_id)[2]) ;
+                                        WbwAnalysis::insert($newData);
+                                    }
+                                }
+                                break;
+                        }
+                    }
+                }
+            }
+            $bar->advance();
+        }
+        $bar->finish();
+        $this->info("wbw analyses finished");
+        return 0;
+    }
+}

+ 92 - 0
app/Http/Controllers/AnalysisController.php

@@ -0,0 +1,92 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Models\WbwAnalysis;
+use Illuminate\Http\Request;
+
+class AnalysisController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function index()
+    {
+        //
+        $result = WbwAnalysis::selectRaw('d1, data ,count(*) as ct')
+                             ->where('type',7)
+                             ->groupby('d1')
+                             ->groupby('data')
+                             ->orderbyRaw('d1,ct desc')
+                             ->get();
+        return view('wbwanalyses',['data'=>$result]);
+    }
+
+    /**
+     * 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\WbwAnalysis  $wbwAnalysis
+     * @return \Illuminate\Http\Response
+     */
+    public function show(WbwAnalysis $wbwAnalysis)
+    {
+        //
+    }
+
+    /**
+     * Show the form for editing the specified resource.
+     *
+     * @param  \App\Models\WbwAnalysis  $wbwAnalysis
+     * @return \Illuminate\Http\Response
+     */
+    public function edit(WbwAnalysis $wbwAnalysis)
+    {
+        //
+    }
+
+    /**
+     * Update the specified resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \App\Models\WbwAnalysis  $wbwAnalysis
+     * @return \Illuminate\Http\Response
+     */
+    public function update(Request $request, WbwAnalysis $wbwAnalysis)
+    {
+        //
+    }
+
+    /**
+     * Remove the specified resource from storage.
+     *
+     * @param  \App\Models\WbwAnalysis  $wbwAnalysis
+     * @return \Illuminate\Http\Response
+     */
+    public function destroy(WbwAnalysis $wbwAnalysis)
+    {
+        //
+    }
+}

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

@@ -0,0 +1,307 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Models\Sentence;
+use App\Models\PaliSentence;
+
+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)
+    {
+        //
+    }
+
+    private function getSentProgress(Request $request,$date=''){
+        $channel = $request->get('channel');
+        $from = $request->get('from');
+        $to = $request->get('to');
+
+        #默认完成度显示字符数
+        # strlen 
+        # page
+        # percent 
+        $view = 'strlen';
+        if(!empty($request->get('view'))){
+            $view =$request->get('view');
+        }
+        if(!empty($request->get('type'))){
+            $view =$request->get('type');
+        }
+        #一页书中的字符数
+        $pageStrLen = 2000;
+        if(!empty($request->get('strlen'))){
+            $pageStrLen =$request->get('strlen');
+        }
+        if(!empty($request->get('pagelen'))){
+            $pageStrLen =$request->get('pagelen');
+        }
+
+        # 页数
+        $pageNumber = 300;
+        if(!empty($request->get('pages'))){
+            $pageNumber =$request->get('pages');
+        }
+
+        $db = Sentence::where('channel_uid',$request->get('channel'))
+                ->where('book_id','>=',$request->get('book'))
+                ->where('paragraph','>=',$request->get('from'))
+                ->where('paragraph','<=',$request->get('to'));
+        if(!empty($date)){
+            $db = $db->whereDate('created_at','=',$date);
+        }
+        $strlen =$db->sum('strlen');
+
+        if(is_null($strlen) || $strlen===0){
+            return 0;
+        }
+        #计算已完成百分比
+        $percent = 0;
+        if(($view==='page' && !empty($request->get('pages'))) || $view==='percent' ){
+            #计算完成的句子在巴利语句子表中的字符串长度百分比
+            $db = Sentence::select(['book_id','paragraph','word_start','word_end'])
+                ->where('channel_uid',$request->get('channel'))
+                ->where('book_id','>=',$request->get('book'))
+                ->where('paragraph','>=',$request->get('from'))
+                ->where('paragraph','<=',$request->get('to'));
+            if(!empty($date)){
+                $db = $db->whereDate('created_at','=',$date);
+            }
+            $sentFinished = $db->get();
+            #查询这些句子的总共等效巴利语字符数
+            $allStrLen = PaliSentence::where('book',$request->get('book'))
+                            ->where('paragraph','>=',$request->get('from'))
+                            ->where('paragraph','<=',$request->get('to'))
+                            ->sum('length');            
+            $para_strlen = 0;
+            foreach ($sentFinished as $sent) {
+                # code...
+                /*
+                $para_strlen += PaliSentence::where('book',$request->get('book'))
+                            ->where('paragraph',$sent->paragraph)
+                            ->where('word_begin',$sent->word_start)
+                            ->where('word_end',$sent->word_end)
+                            ->value('length');
+                */
+                $key_sent_id = $sent->book_id.'-'.$sent->paragraph.'-'.$sent->word_start.'-'.$sent->word_end;
+                $para_strlen += Cache::get(env('REDIS_NAMESPACE').'pali-sent/strlen/'.$key_sent_id, function() use($sent) {
+                    return PaliSentence::where('book',$sent->book_id)
+                            ->where('paragraph',$sent->paragraph)
+                            ->where('word_begin',$sent->word_start)
+                            ->where('word_end',$sent->word_end)
+                            ->value('length');
+                });
+            }
+
+            $percent = $para_strlen / $allStrLen;
+        }
+        switch ($view) {
+            case 'page':
+                # 输出已经完成的页数
+                if(!empty($request->get('pages'))){
+                    #给了页码,用百分比计算
+                    $resulte = $percent * $request->get('pages');
+                }else{
+                    #没给页码,用每页字符数计算
+                    $resulte = $strlen / $pageStrLen;
+                }
+                break;
+            case 'percent':
+                $resulte = $percent;
+                break;
+            case 'strlen':
+            default:
+                # code...
+                $resulte = $strlen;
+                break;
+        }
+        #保留小数点后两位
+        $resulte = sprintf('%.2f',$resulte);
+        return $resulte;
+    }
+    /**
+    * 输出一张图片显示进度
+     * 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&view=page
+     */
+    public function showprogress(Request $request)
+    {
+        ob_clean();
+        ob_start();
+        $resulte = $this->getSentProgress($request);
+        $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&view=page
+    public function showprogressdaily(Request $request)
+    {
+        $imgWidth = 300;
+        $imgHeight = 100;
+        $xAxisOffset = 16;
+        $yAxisOffset = 16;
+        $maxDay = 10;
+        $maxPage = 20;
+        $yLineSpace = 5;
+
+        #默认完成度显示字符数
+        # strlen 
+        # page
+        # percent 
+        $view = 'strlen';
+        if(!empty($request->get('view'))){
+            $view =$request->get('view');
+        }
+        if(!empty($request->get('type'))){
+            $view =$request->get('type');
+        }
+
+
+
+        $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 = 1; $i <= $maxDay; $i++){
+            $day = strtotime("today -{$i} day");
+            $date = date("Y-m-d",$day);
+
+            $resulte = $this->getSentProgress($request,$date)*$pagePix;
+            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)
+    {
+        //
+    }
+}

+ 71 - 0
app/Http/Controllers/WbwAnalysisController.php

@@ -0,0 +1,71 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Models\WbwAnalysis;
+use Illuminate\Http\Request;
+
+class WbwAnalysisController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     *select d1, data ,count(*) as ct from wbw_analyses where type = 7  group by d1,data order by d1,ct desc 
+     * @return \Illuminate\Http\Response
+     */
+    public function index()
+    {
+        //
+        $result = WbwAnalysis::selectRaw('d1, data ,count(*) as ct')
+                             ->where('type',7)
+                             ->groupby('d1')
+                             ->groupby('data')
+                             ->orderbyRaw('d1,ct desc')
+                             ->get();
+        return view('wbwanalyses',['data'=>$result]);
+    }
+
+    /**
+     * 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\WbwAnalysis  $wbwAnalysis
+     * @return \Illuminate\Http\Response
+     */
+    public function show(WbwAnalysis $wbwAnalysis)
+    {
+        //
+    }
+
+    /**
+     * Update the specified resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \App\Models\WbwAnalysis  $wbwAnalysis
+     * @return \Illuminate\Http\Response
+     */
+    public function update(Request $request, WbwAnalysis $wbwAnalysis)
+    {
+        //
+    }
+
+    /**
+     * Remove the specified resource from storage.
+     *
+     * @param  \App\Models\WbwAnalysis  $wbwAnalysis
+     * @return \Illuminate\Http\Response
+     */
+    public function destroy(WbwAnalysis $wbwAnalysis)
+    {
+        //
+    }
+}

+ 11 - 0
app/Models/WbwAnalysis.php

@@ -0,0 +1,11 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+
+class WbwAnalysis extends Model
+{
+    use HasFactory;
+}

+ 59 - 0
database/migrations/2022_02_07_012707_create_wbw_analyses_table.php

@@ -0,0 +1,59 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class CreateWbwAnalysesTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     
+     * @return void
+     */
+     /*
+     'userid',
+                            'pali',
+                            'book',
+                            'paragraph',
+                            'wid',
+                            'type',
+                            'data',
+                            'confidence',
+                            'lang',
+                            'modify_time')
+     */
+    public function up()
+    {
+        Schema::create('wbw_analyses', function (Blueprint $table) {
+            $table->id();
+            $table->bigInteger('wbw_id')->index();
+            $table->string('wbw_word',1024);
+            $table->integer('book_id');
+            $table->integer('paragraph');
+            $table->integer('wid');
+            $table->integer('type');
+            $table->text('data')->index();
+            $table->integer('confidence');
+            $table->string('lang',16);
+            $table->text('d1')->nullable()->index();//备用数据
+            $table->text('d2')->nullable()->index();//备用数据
+            $table->text('d3')->nullable()->index();//备用数据
+            $table->bigInteger('editor_id');
+            $table->timestamps();
+
+            $table->index(['type','data']);
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('wbw_analyses');
+    }
+}

+ 1 - 1
deploy/roles/ubuntu/tasks/main.yml

@@ -130,7 +130,7 @@
 
 - name: Set timezone
   become: true
-  shell: timedatectl set-timezone Asia/Shanghai
+  shell: timedatectl set-timezone UTC
 
 - name: Set git rebase mode
   become: true

+ 13 - 0
material-ui/.gitignore

@@ -0,0 +1,13 @@
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# dependencies
+/node_modules/
+/yarn.lock
+
+# testing
+
+# production
+/build/
+
+# misc
+/.env.*.local

+ 13 - 0
material-ui/README.md

@@ -0,0 +1,13 @@
+# Dashboard
+
+## Install dependencies
+
+```bash
+yarn install
+```
+
+### `yarn start`
+
+Runs the app in the development mode. Open [http://localhost:3000/my/](http://localhost:3000/my/) to view it in the browser.
+
+The page will reload if you make edits. You will also see any lint errors in the console.

+ 77 - 0
material-ui/package.json

@@ -0,0 +1,77 @@
+{
+    "name": "iapt",
+    "version": "0.1.0",
+    "private": true,
+    "homepage": "/my/",
+    "dependencies": {
+        "@emotion/react": "^11.8.2",
+        "@emotion/styled": "^11.8.1",
+        "@fontsource/roboto": "^4.5.3",
+        "@loadable/component": "^5.15.2",
+        "@mui/icons-material": "^5.5.0",
+        "@mui/material": "^5.5.0",
+        "@reduxjs/toolkit": "^1.8.0",
+        "@testing-library/jest-dom": "^5.14.1",
+        "@testing-library/react": "^12.0.0",
+        "@testing-library/user-event": "^13.2.1",
+        "@types/jest": "^27.0.1",
+        "@types/loadable__component": "^5.13.4",
+        "@types/node": "^16.7.13",
+        "@types/react": "^17.0.20",
+        "@types/react-dom": "^17.0.9",
+        "@types/react-redux": "^7.1.23",
+        "dinero.js": "^2.0.0-alpha.8",
+        "emoji-mart": "^3.0.1",
+        "google-map-react": "^2.1.10",
+        "js-cookie": "^3.0.1",
+        "jwt-decode": "^3.1.2",
+        "material-design-icons": "^3.0.1",
+        "moment": "^2.29.1",
+        "moment-timezone": "^0.5.34",
+        "qrcode.react": "^2.0.0",
+        "react": "^17.0.2",
+        "react-color": "^2.19.3",
+        "react-copy-to-clipboard": "^5.0.4",
+        "react-dom": "^17.0.2",
+        "react-dropzone": "^12.0.4",
+        "react-helmet-async": "^1.2.3",
+        "react-highlight-words": "^0.17.0",
+        "react-hook-form": "^7.27.1",
+        "react-intl": "^5.24.6",
+        "react-json-view": "^1.21.3",
+        "react-markdown": "^8.0.0",
+        "react-quill": "^2.0.0-beta.4",
+        "react-redux": "^7.2.6",
+        "react-router-dom": "6",
+        "react-scripts": "5.0.0",
+        "react-sparklines": "^1.7.0",
+        "react-syntax-highlighter": "^15.4.5",
+        "typescript": "^4.4.2",
+        "video.js": "^7.17.0",
+        "web-vitals": "^2.1.0"
+    },
+    "scripts": {
+        "start": "react-scripts start",
+        "build": "react-scripts build",
+        "test": "react-scripts test",
+        "eject": "react-scripts eject"
+    },
+    "eslintConfig": {
+        "extends": [
+            "react-app",
+            "react-app/jest"
+        ]
+    },
+    "browserslist": {
+        "production": [
+            ">0.2%",
+            "not dead",
+            "not op_mini all"
+        ],
+        "development": [
+            "last 1 chrome version",
+            "last 1 firefox version",
+            "last 1 safari version"
+        ]
+    }
+}

BIN
material-ui/public/favicon.ico


+ 43 - 0
material-ui/public/index.html

@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8" />
+    <link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <meta name="theme-color" content="#000000" />
+    <meta
+      name="description"
+      content="Web site created using create-react-app"
+    />
+    <link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
+    <!--
+      manifest.json provides metadata used when your web app is installed on a
+      user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
+    -->
+    <link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
+    <!--
+      Notice the use of %PUBLIC_URL% in the tags above.
+      It will be replaced with the URL of the `public` folder during the build.
+      Only files inside the `public` folder can be referenced from the HTML.
+
+      Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
+      work correctly both with client-side routing and a non-root public URL.
+      Learn how to configure a non-root public URL by running `npm run build`.
+    -->
+    <title>React App</title>
+  </head>
+  <body>
+    <noscript>You need to enable JavaScript to run this app.</noscript>
+    <div id="root"></div>
+    <!--
+      This HTML file is a template.
+      If you open it directly in the browser, you will see an empty page.
+
+      You can add webfonts, meta tags, or analytics to this file.
+      The build step will place the bundled scripts into the <body> tag.
+
+      To begin the development, run `npm start` or `yarn start`.
+      To create a production bundle, use `npm run build` or `yarn build`.
+    -->
+  </body>
+</html>

BIN
material-ui/public/logo192.png


BIN
material-ui/public/logo512.png


+ 25 - 0
material-ui/public/manifest.json

@@ -0,0 +1,25 @@
+{
+  "short_name": "React App",
+  "name": "Create React App Sample",
+  "icons": [
+    {
+      "src": "favicon.ico",
+      "sizes": "64x64 32x32 24x24 16x16",
+      "type": "image/x-icon"
+    },
+    {
+      "src": "logo192.png",
+      "type": "image/png",
+      "sizes": "192x192"
+    },
+    {
+      "src": "logo512.png",
+      "type": "image/png",
+      "sizes": "512x512"
+    }
+  ],
+  "start_url": ".",
+  "display": "standalone",
+  "theme_color": "#000000",
+  "background_color": "#ffffff"
+}

+ 3 - 0
material-ui/public/robots.txt

@@ -0,0 +1,3 @@
+# https://www.robotstxt.org/robotstxt.html
+User-agent: *
+Disallow:

+ 10 - 0
material-ui/src/404.tsx

@@ -0,0 +1,10 @@
+import { useIntl } from "react-intl";
+
+import Layout from "./layouts/application";
+
+function Widget() {
+  const intl = useIntl();
+  return <Layout title={intl.formatMessage({ id: "404.title" })}>aaa</Layout>;
+}
+
+export default Widget;

+ 22 - 0
material-ui/src/components/form.tsx

@@ -0,0 +1,22 @@
+export const REAL_NAME_VALIDATOR = {
+  required: true,
+  minLength: 2,
+  maxLength: 32,
+};
+export const NICK_NAME_VALIDATOR = {
+  required: true,
+  minLength: 2,
+  maxLength: 32,
+  pattern: /[\\.\w-]{6,32}/,
+};
+export const EMAIL_VALIDATOR = {
+  required: true,
+  minLength: 6,
+  maxLength: 255,
+  pattern: /^[\\.a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/,
+};
+export const PASSWORD_VALIDATOR = {
+  required: true,
+  minLength: 6,
+  maxLength: 64,
+};

+ 5 - 0
material-ui/src/hooks.ts

@@ -0,0 +1,5 @@
+import { TypedUseSelectorHook, useDispatch, useSelector } from "react-redux";
+import type { RootState, AppDispatch } from "./store";
+
+export const useAppDispatch = () => useDispatch<AppDispatch>();
+export const useAppSelector: TypedUseSelectorHook<RootState> = useSelector;

+ 4 - 0
material-ui/src/index.css

@@ -0,0 +1,4 @@
+body {
+  margin: 0;
+  padding: 0;
+}

+ 51 - 0
material-ui/src/index.tsx

@@ -0,0 +1,51 @@
+import "@fontsource/roboto/300.css";
+import "@fontsource/roboto/400.css";
+import "@fontsource/roboto/500.css";
+import "@fontsource/roboto/700.css";
+import "material-design-icons/iconfont/material-icons.css";
+import "react-quill/dist/quill.snow.css";
+
+import "./index.css";
+
+import React from "react";
+import ReactDOM from "react-dom";
+import { IntlProvider } from "react-intl";
+import { BrowserRouter, Route, Routes } from "react-router-dom";
+import { Provider } from "react-redux";
+import CachedOutlinedIcon from "@mui/icons-material/CachedOutlined";
+import loadable from "@loadable/component";
+
+import plugins from "./plugins";
+import { get as getLocale, messages as getMessages } from "./locales";
+import NotFound from "./404";
+import reportWebVitals from "./reportWebVitals";
+import store from "./store";
+
+const lang = getLocale();
+const messages = getMessages(lang);
+
+ReactDOM.render(
+  <React.StrictMode>
+    <Provider store={store}>
+      <IntlProvider messages={messages} locale={lang}>
+        <BrowserRouter basename="/my/">
+          <Routes>
+            {plugins.routes.map((it) => {
+              const W = loadable(it.component, {
+                fallback: <CachedOutlinedIcon />,
+              });
+              return <Route key={it.path} path={it.path} element={<W />} />;
+            })}
+            <Route path="*" element={<NotFound />} />
+          </Routes>
+        </BrowserRouter>
+      </IntlProvider>
+    </Provider>
+  </React.StrictMode>,
+  document.getElementById("root")
+);
+
+// If you want to start measuring performance in your app, pass a function
+// to log results (for example: reportWebVitals(console.log))
+// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
+reportWebVitals();

+ 65 - 0
material-ui/src/layouts/Copyright.tsx

@@ -0,0 +1,65 @@
+import Typography from "@mui/material/Typography";
+import Link from "@mui/material/Link";
+import GitHubIcon from "@mui/icons-material/GitHub";
+import HomeIcon from "@mui/icons-material/Home";
+import { FormattedMessage } from "react-intl";
+import Stack from "@mui/material/Stack";
+import { Helmet } from "react-helmet-async";
+
+import { refresh, selectSiteInfo } from "../reducers/site-info";
+import { useAppSelector, useAppDispatch } from "../hooks";
+import { set as setLocale } from "../locales";
+
+interface IProps {
+    title: string;
+}
+
+const Widget = (props: IProps) => {
+    const site = useAppSelector(selectSiteInfo);
+    const dispatch = useAppDispatch();
+    if (site.languages.length === 0) {
+        dispatch(
+            refresh({
+                title: "demo",
+                subhead: "test",
+                copyright: `${new Date().getFullYear()}`,
+                languages: ["en-US"],
+            })
+        );
+    }
+    return (
+        <Stack spacing={2} direction="row">
+            <Helmet>
+                <title>
+                    {props.title} | {site.title}
+                </title>
+            </Helmet>
+            <Typography variant="body2" color="text.secondary" align="center">
+                ©{site.copyright}
+            </Typography>
+            <Link
+                color="inherit"
+                target="_blank"
+                href="https://github.com/iapt-platform/mint"
+            >
+                <GitHubIcon />
+            </Link>
+            <Link color="inherit" target="_blank" href="/">
+                <HomeIcon />
+            </Link>
+            {site.languages.map((it) => (
+                <Link
+                    onClick={() => {
+                        setLocale(it);
+                        window.location.reload();
+                    }}
+                    key={it}
+                >
+                    <FormattedMessage id={`languages.${it}`} />
+                </Link>
+            ))}
+        </Stack>
+    );
+};
+
+export default Widget;

+ 40 - 0
material-ui/src/layouts/application/index.tsx

@@ -0,0 +1,40 @@
+import { ReactNode } from "react";
+import CssBaseline from "@mui/material/CssBaseline";
+import Box from "@mui/material/Box";
+import Container from "@mui/material/Container";
+import { createTheme, ThemeProvider } from "@mui/material/styles";
+import { HelmetProvider } from "react-helmet-async";
+
+import Copyright from "../Copyright";
+
+const theme = createTheme();
+
+interface IProps {
+  title: string;
+  children: ReactNode;
+}
+
+function Widget({ title, children }: IProps) {
+  return (
+    <HelmetProvider>
+      <ThemeProvider theme={theme}>
+        <Container component="main" maxWidth="xs">
+          <CssBaseline />
+          <Box
+            sx={{
+              marginTop: 8,
+              display: "flex",
+              flexDirection: "column",
+              alignItems: "center",
+            }}
+          >
+            {children}
+          </Box>
+          <Copyright title={title} />
+        </Container>
+      </ThemeProvider>
+    </HelmetProvider>
+  );
+}
+
+export default Widget;

+ 5 - 0
material-ui/src/layouts/dashboard/index.tsx

@@ -0,0 +1,5 @@
+function Widget() {
+  return <div>dashboard layout</div>;
+}
+
+export default Widget;

+ 28 - 0
material-ui/src/locales/en-US.ts

@@ -0,0 +1,28 @@
+const items = {
+  "buttons.search": "Search",
+  "buttons.submit": "Submit",
+
+  "fields.email": "Email address",
+  "fields.real-name": "Real name",
+  "fields.nick-name": "Nick name",
+  "fields.password": "Password",
+  "fields.password-confirmation": "Password confirmation",
+  "fields.body": "Body",
+
+  "helpers.real-name": "Real-name's length should between 2~32",
+  "helpers.email": "Please entry a valid email address",
+  "helpers.password": "Password's length should between 6~64",
+  "helpers.password-confirmation": "Passwords not match",
+
+  "404.title": "Not found",
+
+  "nut.install.title": "Install",
+  "nut.users.sign-in.title": "Sign in",
+  "nut.users.sign-up.title": "Sign Up",
+  "nut.users.confirm.title": "Resend confirmation instructions",
+  "nut.users.unlock.title": "Resend unlock instructions",
+  "nut.users.forgot-password.title": "Forgot your password?",
+  "nut.leave-words.new.title": "Leave us a message",
+};
+
+export default items;

+ 30 - 0
material-ui/src/locales/index.ts

@@ -0,0 +1,30 @@
+import enUS from "./en-US";
+import zhHans from "./zh-Hans";
+import zhHant from "./zh-Hant";
+
+const KEY = "locale";
+
+export const get = (): string => {
+  return localStorage.getItem(KEY) || "en-US";
+};
+
+export const set = (lang: string) => {
+  localStorage.setItem(KEY, lang);
+};
+
+const languages = {
+  "languages.en-US": "English",
+  "languages.zh-Hans": "简体中文",
+  "languages.zh-Hant": "繁體中文",
+};
+
+export const messages = (lang: string): any => {
+  switch (lang) {
+    case "zh-Hans":
+      return { ...languages, ...zhHans };
+    case "zh-Hant":
+      return { ...languages, ...zhHant };
+    default:
+      return { ...languages, ...enUS };
+  }
+};

+ 5 - 0
material-ui/src/locales/zh-Hans.ts

@@ -0,0 +1,5 @@
+const items = {
+  "buttons.search": "搜索",
+};
+
+export default items;

+ 5 - 0
material-ui/src/locales/zh-Hant.ts

@@ -0,0 +1,5 @@
+const items = {
+  "buttons.search": "檢索",
+};
+
+export default items;

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 2 - 0
material-ui/src/logo.svg


+ 32 - 0
material-ui/src/plugins/demo/index.tsx

@@ -0,0 +1,32 @@
+import { IPlugin } from "..";
+
+export const plugin: IPlugin = {
+    routes: [
+        {
+            path: "/demo/topics/new",
+            component: () => import("./topics/new"),
+        },
+        {
+            path: "/demo/topics/edit",
+            component: () => import("./topics/edit"),
+        },
+        {
+            path: "/demo/topics",
+            component: () => import("./topics/index"),
+        },
+        {
+            path: "/demo/posts/new",
+            component: () => import("./posts/new"),
+        },
+        {
+            path: "/demo/posts/edit",
+            component: () => import("./posts/edit"),
+        },
+        {
+            path: "/demo/posts",
+            component: () => import("./posts/index"),
+        },
+    ],
+};
+
+export default plugin;

+ 6 - 0
material-ui/src/plugins/demo/posts/edit.tsx

@@ -0,0 +1,6 @@
+function Widget() {
+    // TODO
+    return <div>demo posts edit</div>;
+}
+
+export default Widget;

+ 6 - 0
material-ui/src/plugins/demo/posts/index.tsx

@@ -0,0 +1,6 @@
+function Widget() {
+    // TODO
+    return <div>demo posts index </div>;
+}
+
+export default Widget;

+ 6 - 0
material-ui/src/plugins/demo/posts/new.tsx

@@ -0,0 +1,6 @@
+function Widget() {
+    // TODO
+    return <div>demo posts new</div>;
+}
+
+export default Widget;

+ 6 - 0
material-ui/src/plugins/demo/topics/edit.tsx

@@ -0,0 +1,6 @@
+function Widget() {
+    // TODO
+    return <div>demo topics edit</div>;
+}
+
+export default Widget;

+ 6 - 0
material-ui/src/plugins/demo/topics/index.tsx

@@ -0,0 +1,6 @@
+function Widget() {
+    // TODO
+    return <div>demo topics index</div>;
+}
+
+export default Widget;

+ 6 - 0
material-ui/src/plugins/demo/topics/new.tsx

@@ -0,0 +1,6 @@
+function Widget() {
+    // TODO
+    return <div>demo topics new</div>;
+}
+
+export default Widget;

+ 16 - 0
material-ui/src/plugins/index.tsx

@@ -0,0 +1,16 @@
+import nut from "./nut";
+import demo from "./demo";
+
+export interface IRoute {
+    path: string;
+    component: any;
+}
+
+export interface IPlugin {
+    routes: IRoute[];
+}
+
+const plugin: IPlugin = {
+    routes: [...demo.routes, ...nut.routes],
+};
+export default plugin;

+ 25 - 0
material-ui/src/plugins/nut/home.tsx

@@ -0,0 +1,25 @@
+import { FormattedMessage } from "react-intl";
+import { Link } from "react-router-dom";
+
+function Widget() {
+  // TODO
+  return (
+    <div>
+      home of <FormattedMessage id="languages.zh-Hant" />
+      <ol>
+        <li>
+          <Link to="/users/sign-in">Sign In</Link>
+        </li>
+        <li>
+          <Link to="/users/sign-up">Sign up</Link>
+        </li>
+        <li>
+          <Link to="/install">install</Link>
+        </li>
+        <li></li>
+      </ol>
+    </div>
+  );
+}
+
+export default Widget;

+ 36 - 0
material-ui/src/plugins/nut/index.tsx

@@ -0,0 +1,36 @@
+import { IPlugin } from "..";
+
+const plugin: IPlugin = {
+    routes: [
+        {
+            path: "/users/forgot-password",
+            component: () => import("./users/forgot-password"),
+        },
+        {
+            path: "/users/unlock",
+            component: () => import("./users/unlock"),
+        },
+        {
+            path: "/users/confirm",
+            component: () => import("./users/confirm"),
+        },
+        {
+            path: "/users/sign-in",
+            component: () => import("./users/sign-in"),
+        },
+        {
+            path: "/users/sign-up",
+            component: () => import("./users/sign-up"),
+        },
+        {
+            path: "/install",
+            component: () => import("./install"),
+        },
+        {
+            path: "/",
+            component: () => import("./home"),
+        },
+    ],
+};
+
+export default plugin;

+ 130 - 0
material-ui/src/plugins/nut/install.tsx

@@ -0,0 +1,130 @@
+import TextField from "@mui/material/TextField";
+import Grid from "@mui/material/Grid";
+import LockOutlinedIcon from "@mui/icons-material/LockOutlined";
+import { useForm, Controller, SubmitHandler } from "react-hook-form";
+import { useIntl } from "react-intl";
+
+import Layout from "./users/NonSignInLayout";
+import {
+  REAL_NAME_VALIDATOR,
+  EMAIL_VALIDATOR,
+  PASSWORD_VALIDATOR,
+} from "../../components/form";
+
+interface IFormData {
+  realName: string;
+  email: string;
+  password: string;
+  passwordConfirmation: string;
+}
+
+const Widget = () => {
+  const intl = useIntl();
+  const {
+    control,
+    formState: { errors },
+    handleSubmit,
+  } = useForm<IFormData>({
+    defaultValues: {
+      realName: "",
+      email: "",
+      password: "",
+      passwordConfirmation: "",
+    },
+  });
+  const onSubmit: SubmitHandler<IFormData> = (data) => {
+    // TODO
+    console.log(data);
+  };
+  return (
+    <Layout
+      logo={<LockOutlinedIcon />}
+      title={intl.formatMessage({ id: "nut.install.title" })}
+      handleSubmit={handleSubmit(onSubmit)}
+    >
+      <Grid item xs={12}>
+        <Controller
+          name="realName"
+          control={control}
+          rules={REAL_NAME_VALIDATOR}
+          render={({ field }) => (
+            <TextField
+              required
+              fullWidth
+              label={intl.formatMessage({ id: "fields.real-name" })}
+              error={errors.realName !== undefined}
+              helperText={
+                errors.realName &&
+                intl.formatMessage({ id: "helpers.real-name" })
+              }
+              {...field}
+            />
+          )}
+        />
+      </Grid>
+      <Grid item xs={12}>
+        <Controller
+          name="email"
+          rules={EMAIL_VALIDATOR}
+          control={control}
+          render={({ field }) => (
+            <TextField
+              required
+              fullWidth
+              label={intl.formatMessage({ id: "fields.email" })}
+              type="email"
+              error={errors.email !== undefined}
+              helperText={
+                errors.email && intl.formatMessage({ id: "helpers.email" })
+              }
+              {...field}
+            />
+          )}
+        />
+      </Grid>
+      <Grid item xs={12}>
+        <Controller
+          name="password"
+          rules={PASSWORD_VALIDATOR}
+          control={control}
+          render={({ field }) => (
+            <TextField
+              required
+              fullWidth
+              label={intl.formatMessage({ id: "fields.password" })}
+              type="password"
+              error={errors.password !== undefined}
+              helperText={
+                errors.password &&
+                intl.formatMessage({ id: "helpers.password" })
+              }
+              {...field}
+            />
+          )}
+        />
+      </Grid>
+      <Grid item xs={12}>
+        <Controller
+          name="passwordConfirmation"
+          control={control}
+          render={({ field }) => (
+            <TextField
+              required
+              fullWidth
+              label={intl.formatMessage({ id: "fields.password-confirmation" })}
+              type="password"
+              error={errors.passwordConfirmation !== undefined}
+              helperText={
+                errors.passwordConfirmation &&
+                intl.formatMessage({ id: "helpers.password-confirmation" })
+              }
+              {...field}
+            />
+          )}
+        />
+      </Grid>
+    </Layout>
+  );
+};
+
+export default Widget;

+ 103 - 0
material-ui/src/plugins/nut/users/NonSignInLayout.tsx

@@ -0,0 +1,103 @@
+import { ReactNode } from "react";
+import Button from "@mui/material/Button";
+import Grid from "@mui/material/Grid";
+import Box from "@mui/material/Box";
+import Avatar from "@mui/material/Avatar";
+import Typography from "@mui/material/Typography";
+import LockOutlinedIcon from "@mui/icons-material/LockOutlined";
+import PersonPinOutlinedIcon from "@mui/icons-material/PersonPinOutlined";
+import PersonAddAltOutlinedIcon from "@mui/icons-material/PersonAddAltOutlined";
+import ConfirmationNumberOutlinedIcon from "@mui/icons-material/ConfirmationNumberOutlined";
+import PasswordOutlinedIcon from "@mui/icons-material/PasswordOutlined";
+import ListItemIcon from "@mui/material/ListItemIcon";
+import ListItemText from "@mui/material/ListItemText";
+import List from "@mui/material/List";
+import ListItem from "@mui/material/ListItem";
+import ListItemButton from "@mui/material/ListItemButton";
+import { useNavigate } from "react-router-dom";
+import { FormattedMessage } from "react-intl";
+
+import Layout from "../../../layouts/application";
+
+const shared_links = [
+    {
+        to: "/users/sign-in",
+        label: "nut.users.sign-in.title",
+        icon: <PersonPinOutlinedIcon />,
+    },
+    {
+        to: "/users/sign-up",
+        label: "nut.users.sign-up.title",
+        icon: <PersonAddAltOutlinedIcon />,
+    },
+    {
+        to: "/users/confirm",
+        label: "nut.users.confirm.title",
+        icon: <ConfirmationNumberOutlinedIcon />,
+    },
+    {
+        to: "/users/unlock",
+        label: "nut.users.unlock.title",
+        icon: <LockOutlinedIcon />,
+    },
+    {
+        to: "/users/forgot-password",
+        label: "nut.users.forgot-password.title",
+        icon: <PasswordOutlinedIcon />,
+    },
+];
+interface IProps {
+    title: string;
+    children: ReactNode;
+    logo: ReactNode;
+    handleSubmit: (event: React.FormEvent<HTMLFormElement>) => void;
+}
+
+function Widget({ title, logo, children, handleSubmit }: IProps) {
+    // const onSubmit = (event: React.FormEvent<HTMLFormElement>) => {
+    //   event.preventDefault();
+    //   const data = new FormData(event.currentTarget);
+    //   handleSubmit(data);
+    // };
+    const navigate = useNavigate();
+    return (
+        <Layout title={title}>
+            <Avatar sx={{ bgcolor: "secondary.main" }}>{logo}</Avatar>
+            <Typography component="h1" variant="h5">
+                {title}
+            </Typography>
+            <Box component="form" noValidate onSubmit={handleSubmit}>
+                <Grid container spacing={2}>
+                    {children}
+                    <Grid item>
+                        <Button type="submit" fullWidth variant="contained">
+                            <FormattedMessage id="buttons.submit" />
+                        </Button>
+                    </Grid>
+                    <Grid item>
+                        <List>
+                            {shared_links.map((it) => (
+                                <ListItem key={it.to} disablePadding>
+                                    <ListItemButton
+                                        onClick={() => navigate(it.to)}
+                                    >
+                                        <ListItemIcon>{it.icon}</ListItemIcon>
+                                        <ListItemText
+                                            primary={
+                                                <FormattedMessage
+                                                    id={it.label}
+                                                />
+                                            }
+                                        />
+                                    </ListItemButton>
+                                </ListItem>
+                            ))}
+                        </List>
+                    </Grid>
+                </Grid>
+            </Box>
+        </Layout>
+    );
+}
+
+export default Widget;

+ 33 - 0
material-ui/src/plugins/nut/users/confirm.tsx

@@ -0,0 +1,33 @@
+import TextField from "@mui/material/TextField";
+import Grid from "@mui/material/Grid";
+import LockOutlinedIcon from "@mui/icons-material/LockOutlined";
+
+import Layout from "./NonSignInLayout";
+import { useIntl } from "react-intl";
+
+const Widget = () => {
+  const handleSubmit = () => {
+    // TODO
+    // console.log(data.get("email"));
+  };
+  const intl = useIntl();
+  return (
+    <Layout
+      logo={<LockOutlinedIcon />}
+      title={intl.formatMessage({ id: "nut.users.confirm.title" })}
+      handleSubmit={handleSubmit}
+    >
+      <Grid item xs={12}>
+        <TextField
+          required
+          fullWidth
+          id="email"
+          label={intl.formatMessage({ id: "fields.email" })}
+          name="email"
+        />
+      </Grid>
+    </Layout>
+  );
+};
+
+export default Widget;

+ 33 - 0
material-ui/src/plugins/nut/users/forgot-password.tsx

@@ -0,0 +1,33 @@
+import TextField from "@mui/material/TextField";
+import Grid from "@mui/material/Grid";
+import LockOutlinedIcon from "@mui/icons-material/LockOutlined";
+
+import Layout from "./NonSignInLayout";
+import { useIntl } from "react-intl";
+
+const Widget = () => {
+  const handleSubmit = () => {
+    // TODO
+    // console.log(data.get("email"));
+  };
+  const intl = useIntl();
+  return (
+    <Layout
+      logo={<LockOutlinedIcon />}
+      title={intl.formatMessage({ id: "nut.users.forgot-password.title" })}
+      handleSubmit={handleSubmit}
+    >
+      <Grid item xs={12}>
+        <TextField
+          required
+          fullWidth
+          id="email"
+          label={intl.formatMessage({ id: "fields.email" })}
+          name="email"
+        />
+      </Grid>
+    </Layout>
+  );
+};
+
+export default Widget;

+ 6 - 0
material-ui/src/plugins/nut/users/logs.tsx

@@ -0,0 +1,6 @@
+function Widget() {
+  // TODO
+  return <div>logs</div>;
+}
+
+export default Widget;

+ 6 - 0
material-ui/src/plugins/nut/users/reset-password.tsx

@@ -0,0 +1,6 @@
+function Widget() {
+  // TODO
+  return <div>reset password</div>;
+}
+
+export default Widget;

+ 43 - 0
material-ui/src/plugins/nut/users/sign-in.tsx

@@ -0,0 +1,43 @@
+import TextField from "@mui/material/TextField";
+import Grid from "@mui/material/Grid";
+import LockOutlinedIcon from "@mui/icons-material/LockOutlined";
+
+import Layout from "./NonSignInLayout";
+import { useIntl } from "react-intl";
+
+const Widget = () => {
+  const handleSubmit = () => {
+    // TODO
+    // console.log(data.get("email"));
+  };
+  const intl = useIntl();
+  return (
+    <Layout
+      logo={<LockOutlinedIcon />}
+      title={intl.formatMessage({ id: "nut.users.sign-in.title" })}
+      handleSubmit={handleSubmit}
+    >
+      <Grid item xs={12}>
+        <TextField
+          required
+          fullWidth
+          id="email"
+          label={intl.formatMessage({ id: "fields.email" })}
+          name="email"
+        />
+      </Grid>
+      <Grid item xs={12}>
+        <TextField
+          required
+          fullWidth
+          name="password"
+          label={intl.formatMessage({ id: "fields.password" })}
+          type="password"
+          id="password"
+        />
+      </Grid>
+    </Layout>
+  );
+};
+
+export default Widget;

+ 70 - 0
material-ui/src/plugins/nut/users/sign-up.tsx

@@ -0,0 +1,70 @@
+import TextField from "@mui/material/TextField";
+import FormControlLabel from "@mui/material/FormControlLabel";
+import Checkbox from "@mui/material/Checkbox";
+import Grid from "@mui/material/Grid";
+import LockOutlinedIcon from "@mui/icons-material/LockOutlined";
+import { useIntl } from "react-intl";
+
+import Layout from "./NonSignInLayout";
+
+const Widget = () => {
+  const handleSubmit = () => {
+    // TODO
+    // console.log(data.get("email"));
+  };
+  const intl = useIntl();
+  return (
+    <Layout
+      logo={<LockOutlinedIcon />}
+      title={intl.formatMessage({ id: "nut.users.sign-up.title" })}
+      handleSubmit={handleSubmit}
+    >
+      <Grid item xs={12}>
+        <TextField
+          required
+          fullWidth
+          id="realName"
+          label={intl.formatMessage({ id: "fields.real-name" })}
+          name="lastName"
+        />
+      </Grid>
+      <Grid item xs={12}>
+        <TextField
+          required
+          fullWidth
+          id="email"
+          label={intl.formatMessage({ id: "fields.email" })}
+          name="email"
+        />
+      </Grid>
+      <Grid item xs={12}>
+        <TextField
+          required
+          fullWidth
+          name="password"
+          label={intl.formatMessage({ id: "fields.password" })}
+          type="password"
+          id="password"
+        />
+      </Grid>
+      <Grid item xs={12}>
+        <TextField
+          required
+          fullWidth
+          name="passwordConfirmation"
+          label={intl.formatMessage({ id: "fields.password-confirmation" })}
+          type="password"
+          id="passwordConfirmation"
+        />
+      </Grid>
+      <Grid item xs={12}>
+        <FormControlLabel
+          control={<Checkbox value="allowExtraEmails" color="primary" />}
+          label="I want to receive inspiration, marketing promotions and updates via email."
+        />
+      </Grid>
+    </Layout>
+  );
+};
+
+export default Widget;

+ 33 - 0
material-ui/src/plugins/nut/users/unlock.tsx

@@ -0,0 +1,33 @@
+import TextField from "@mui/material/TextField";
+import Grid from "@mui/material/Grid";
+import LockOutlinedIcon from "@mui/icons-material/LockOutlined";
+
+import Layout from "./NonSignInLayout";
+import { useIntl } from "react-intl";
+
+const Widget = () => {
+  const handleSubmit = () => {
+    // TODO
+    // console.log(data.get("email"));
+  };
+  const intl = useIntl();
+  return (
+    <Layout
+      logo={<LockOutlinedIcon />}
+      title={intl.formatMessage({ id: "nut.users.unlock.title" })}
+      handleSubmit={handleSubmit}
+    >
+      <Grid item xs={12}>
+        <TextField
+          required
+          fullWidth
+          id="email"
+          label={intl.formatMessage({ id: "fields.email" })}
+          name="email"
+        />
+      </Grid>
+    </Layout>
+  );
+};
+
+export default Widget;

+ 6 - 0
material-ui/src/plugins/nut/users/update-profile.tsx

@@ -0,0 +1,6 @@
+function Widget() {
+  // TODO
+  return <div>update profile</div>;
+}
+
+export default Widget;

+ 1 - 0
material-ui/src/react-app-env.d.ts

@@ -0,0 +1 @@
+/// <reference types="react-scripts" />

+ 40 - 0
material-ui/src/reducers/current-user.ts

@@ -0,0 +1,40 @@
+import { createSlice, PayloadAction } from "@reduxjs/toolkit";
+
+import type { RootState } from "../store";
+
+interface IState {
+  id?: string;
+  roles?: string[];
+}
+
+const initialState: IState = {};
+
+export const slice = createSlice({
+  name: "current-user",
+  initialState,
+  reducers: {
+    signIn: (state, action: PayloadAction<string>) => {
+      console.log(action.payload);
+      state.id = "todo";
+      state.roles = [];
+    },
+    signOut: (state) => {
+      state = {};
+    },
+  },
+});
+
+export const { signIn, signOut } = slice.actions;
+
+const ADMINISTRATOR = "administrator";
+
+export const isSignIn = (state: RootState): boolean =>
+  state.currentUser.id !== undefined;
+export const isAdministrtor = (state: RootState): boolean =>
+  hasRole(state, ADMINISTRATOR);
+
+export const hasRole = (state: RootState, role: string): boolean =>
+  state.currentUser.roles !== undefined &&
+  state.currentUser.roles.includes(role);
+
+export default slice.reducer;

+ 35 - 0
material-ui/src/reducers/site-info.ts

@@ -0,0 +1,35 @@
+import { createSlice, PayloadAction } from "@reduxjs/toolkit";
+
+import type { RootState } from "../store";
+
+interface IState {
+  title: string;
+  subhead: string;
+  copyright: string;
+  languages: string[];
+}
+
+const initialState: IState = {
+  title: "",
+  subhead: "",
+  copyright: "",
+  languages: [],
+};
+
+const slice = createSlice({
+  name: "site-info",
+  initialState,
+  reducers: {
+    refresh: (state, action: PayloadAction<IState>) => {
+      Object.assign(state, action.payload);
+    },
+  },
+});
+
+export const { refresh } = slice.actions;
+
+export const selectSiteInfo = (state: RootState): IState => {
+  return { ...state.siteInfo };
+};
+
+export default slice.reducer;

+ 15 - 0
material-ui/src/reportWebVitals.ts

@@ -0,0 +1,15 @@
+import { ReportHandler } from 'web-vitals';
+
+const reportWebVitals = (onPerfEntry?: ReportHandler) => {
+  if (onPerfEntry && onPerfEntry instanceof Function) {
+    import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
+      getCLS(onPerfEntry);
+      getFID(onPerfEntry);
+      getFCP(onPerfEntry);
+      getLCP(onPerfEntry);
+      getTTFB(onPerfEntry);
+    });
+  }
+};
+
+export default reportWebVitals;

+ 1 - 0
material-ui/src/request.ts

@@ -0,0 +1 @@
+export const graphql = () => {};

+ 5 - 0
material-ui/src/setupTests.ts

@@ -0,0 +1,5 @@
+// jest-dom adds custom jest matchers for asserting on DOM nodes.
+// allows you to do things like:
+// expect(element).toHaveTextContent(/react/i)
+// learn more: https://github.com/testing-library/jest-dom
+import '@testing-library/jest-dom';

+ 17 - 0
material-ui/src/store.ts

@@ -0,0 +1,17 @@
+import { configureStore } from "@reduxjs/toolkit";
+
+import currentUser from "./reducers/current-user";
+import siteInfo from "./reducers/site-info";
+
+const store = configureStore({
+  reducer: {
+    currentUser,
+    siteInfo,
+  },
+});
+
+export type RootState = ReturnType<typeof store.getState>;
+
+export type AppDispatch = typeof store.dispatch;
+
+export default store;

+ 26 - 0
material-ui/tsconfig.json

@@ -0,0 +1,26 @@
+{
+  "compilerOptions": {
+    "target": "es5",
+    "lib": [
+      "dom",
+      "dom.iterable",
+      "esnext"
+    ],
+    "allowJs": true,
+    "skipLibCheck": true,
+    "esModuleInterop": true,
+    "allowSyntheticDefaultImports": true,
+    "strict": true,
+    "forceConsistentCasingInFileNames": true,
+    "noFallthroughCasesInSwitch": true,
+    "module": "esnext",
+    "moduleResolution": "node",
+    "resolveJsonModule": true,
+    "isolatedModules": true,
+    "noEmit": true,
+    "jsx": "react-jsx"
+  },
+  "include": [
+    "src"
+  ]
+}

+ 46 - 16
public/app/article/article.js

@@ -162,7 +162,12 @@ function articleFillFootNavButton(article_list,curr_article){
 				$("#contents_nav_left_inner").html("无");
 			}
 			if(index!=article_list.length-1){
-				$("#contents_nav_right_inner").html(article_list[index+1].title);
+                if(article_list[index+1].title==""){
+                    $("#contents_nav_right_inner").html("[unnamed]");
+                }else{
+                    $("#contents_nav_right_inner").html(article_list[index+1].title);
+                }
+				
 				nextArticle = article_list[index+1].article;
 			}else{
 				$("#contents_nav_right_inner").html("无");
@@ -388,7 +393,11 @@ function palicanon_load() {
 					let result = JSON.parse(data);
 					if (result) {
 						_sent_data=result;
-						$("#article_title").html(result.title);
+                        if(result.title==""){
+                            $("#article_title").html("[unnamed]");
+                        }else{
+                            $("#article_title").html(result.title);
+                        }
 						$("#article_path_title").html(result.title);
 						$("#page_title").text(result.title);
 						$("#article_subtitle").html(result.subtitle);
@@ -435,8 +444,14 @@ function reader_get_path() {
 			let suttaTitle = $("chapter").last().html();
 
 			$("#pali_pedia").html(bookTitle);
-			$("#article_title").html(suttaTitle);
-			$("#page_title").text(suttaTitle);
+            if(suttaTitle==""){
+                $("#article_title").html("[unnamed]");
+                $("#page_title").text("[unnamed]");
+            }else{
+                $("#article_title").html(suttaTitle);
+                $("#page_title").text(suttaTitle);
+            }
+            note_ref_init('_self');
 		}
 	);
 }
@@ -523,17 +538,22 @@ function render_toc(){
 					prevChapter = it.prev_chapter;
 				}
                 let strTitle;
-                switch (getCookie('language')) {
-                    case 'my':
-                        strTitle = roman_to_my(it.toc);
-                        break;
-                    case 'si':
-                        strTitle = roman_to_si(it.toc);
-                        break;
-                    default:
-                        strTitle = it.toc;
-                        break;
+                if(it.toc==""){
+                    strTitle  = "[unnamed]";
+                }else{
+                    switch (getCookie('language')) {
+                        case 'my':
+                            strTitle = roman_to_my(it.toc);
+                            break;
+                        case 'si':
+                            strTitle = roman_to_si(it.toc);
+                            break;
+                        default:
+                            strTitle = it.toc;
+                            break;
+                    }                    
                 }
+
 				arrToc.push({article:it.paragraph,title:strTitle,title_roman:it.toc,level:it.level});
 			}
 			$("#toc_content").fancytree({
@@ -583,7 +603,12 @@ function fill_chapter_nav(){
 				par: prevChapter,
 			}
 		).done(function (data) {
-			$("#contents_nav_left_inner").html(data.data.toc);
+            if(data.data.toc==""){
+                $("#contents_nav_left_inner").html("[unnamed]");
+            }else{
+                $("#contents_nav_left_inner").html(data.data.toc);
+            }
+			
 		});		
 	}else{
 		$("#contents_nav_left_inner").html("无");
@@ -598,7 +623,12 @@ function fill_chapter_nav(){
 				par: nextChapter,
 			}
 		).done(function (data) {
-			$("#contents_nav_right_inner").html(data.data.toc);
+            if(data.data.toc==""){
+                $("#contents_nav_right_inner").html("[unnamed]");
+            }else{
+                $("#contents_nav_right_inner").html(data.data.toc);
+            }
+			
 		});		
 	}else{
 		$("#contents_nav_right_inner").html("无");

+ 1 - 1
public/app/article/index.php

@@ -203,7 +203,7 @@ span.fancytree-node{
 #contents ul, li {
     margin-block-start: 0.5em;
     margin-block-end: 0.5em;
-    margin-left: 7px;
+    margin-left: 18px;
 }
 .click_dropdown_div{
 	align-self: center;

+ 7 - 3
public/app/article/style.css

@@ -39,7 +39,7 @@
 
 .main_view {
 	padding: 0 1em;
-	padding-top: 7em;
+	padding-top: calc(50px + 36px + 1vh);
 	/*max-width: 1280px;*/
 	margin-left: 0;
 	margin-right: auto;
@@ -78,7 +78,7 @@
 	border-bottom: 1px solid gray;
 	margin-right: 10px;
 	margin-bottom: 10px;
-	width: 30vw
+	width: 30vw;
 	transition: all 0.5s ease;
 }
 .fun_frame .title {
@@ -212,7 +212,7 @@ img {
     position: absolute;
     margin-top: 0;
     margin-left: -30px;
-    font-family: "Noto Sans", "Noto Sans SC", "Noto Sans TC", "Padauk", Arial, Verdana;
+    font-family: "Noto Sans", "Noto Sans SC", "Noto Sans TC", "Noto Sans Myanmar", Arial, Verdana;
     color: var(--main-color1);
     font-size: 80%;
 }
@@ -329,4 +329,8 @@ table {
 }
 tr {
   border-bottom: 1px solid gray;
+}
+
+#article_title{
+    font-family: noto serif;
 }

+ 1 - 1
public/app/channal/channal.js

@@ -220,7 +220,7 @@ function my_channal_edit(id) {
 					html += "</div>";
 
 					html += '<div style="display:flex;line-height:32px;">';
-					html += '<div style="flex:2;">' + gLocal.gui.privacy + "</div>";
+					html += '<div style="flex:2;">' + gLocal.gui.channel_type + "</div>";
 					html += '<div style="flex:8;">';
                     html += "<select id = 'type'  name = 'type'>";
 					for (const iterator of enumChannelType) {

+ 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);

+ 29 - 9
public/app/db/custom_book.php

@@ -111,22 +111,42 @@ class CustomBookSentence extends Table
 		$isList=false;
 		$newSent="";		
 		foreach ($content as $data) {
-			$trimData = trim($data);
-			$newSent .= $trimData;
+            $listHead= "";
+            $isList = false;
 
-			/*
-			$left2 = mb_substr($trimData,0,2,"UTF-8");
-			if($left2 == "- " || $left2 == "* " || $left2 == "+ "){
-				$isList=true;
+			$trimData = trim($data);
+	
+            # 判断是否为list
+			$listLeft =strstr($data,"- ",true);
+			if($listLeft !== FALSE){
+                if(ctype_space($listLeft) || empty($listLeft)){
+                    # - 左侧是空,判定为list
+                    $isList=true;
+                    $iListPos = mb_strpos($data,'- ',0,"UTF-8");
+                    $listHead = mb_substr($data,0,$iListPos+2,"UTF-8");
+                    $listBody = mb_substr($data,$iListPos+2,mb_strlen($data,"UTF-8")-$iListPos+2,"UTF-8");
+                }
 			}
-			*/
+
+            # TODO 判断是否为标题
+            # [#]+\s
+			
 			if(mb_substr($trimData,0,1,"UTF-8")=="|"){
 				$isTable=true;
 			}
-			if($trimData!="" && ($isTable == true || $isList == true)){
+			if($trimData!="" && $isTable == true){
 				$newSent .= "\n";
 				continue;
 			}
+            if($isList == true){
+                $newSent .= $listBody;
+            }else{
+                $newSent .= $trimData;
+            }
+
+			
+
+		
 			#生成句子编号
 			if($trimData==""){
 				#空行
@@ -167,7 +187,7 @@ class CustomBookSentence extends Table
 				#已经有的句子链接不处理
 				$newText .=$trimData."\n";
 			}else{
-				
+                $newText .= $listHead;
 				$newText .='{{'."{$book}-{$para}-{$sentNum}-{$sentNum}"."}}\n";
 				$sth->execute(
 						array(

+ 5 - 2
public/app/db/user.php

@@ -5,7 +5,6 @@ require_once "../db/channel.php";
 require_once "../public/function.php";
 // Require Composer's autoloader.
 require_once '../../vendor/autoload.php';
-require_once '../config.php';
 
 // Using Medoo namespace.
 use Medoo\Medoo;
@@ -181,7 +180,11 @@ class User extends Table
 		$isExist = $this->medoo->has($this->table,["email"=>$email]);
 		if($isExist){
 			$resetToken = UUID::v4();
-			$ok = $this->_update(["reset_password_token"=>$resetToken],["reset_password_token"],["email"=>$email]);
+            $query = "UPDATE   ".$this->table." SET reset_password_token = ? WHERE email = ? ";
+            $stmt = $this->dbh->prepare($query);
+            $stmt->execute(array($resetToken,$email));
+            $ok = true;
+			//$ok = $this->_update(["reset_password_token"=>$resetToken],["reset_password_token"],["email"=>$email]);
 			if($ok){
 				#send email
 				$resetLink="https://".$_SERVER['SERVER_NAME']."/app/ucenter/reset.php?token=".$resetToken;

+ 1 - 1
public/app/dict/dict_lookup.php

@@ -46,7 +46,7 @@ $right_word_list = "";
         PDO_Connect("" . _FILE_DB_REF_);
         //直接查询
 
-        $query = "SELECT dict.dict_id,dict.mean,info.shortname from " . _TABLE_DICT_REF_ . " LEFT JOIN "._TABLE_DICT_REF_NAME_." as info ON dict.dict_id = info.id where word = ? limit 100";
+        $query = "SELECT dict.id, dict.dict_id,dict.mean,info.shortname from " . _TABLE_DICT_REF_ . " LEFT JOIN "._TABLE_DICT_REF_NAME_." as info ON dict.dict_id = info.id where word = ? limit 100";
 
         $Fetch = PDO_FetchAll($query, array($word));
         $iFetch = count($Fetch);

+ 0 - 16
public/app/dict/grm_abbr.php

@@ -342,22 +342,6 @@ define("GRM_ABBR",[
 	["dictid"=>18,"abbr"=>"Sk.","replace"=>"sk"],
 	["dictid"=>4,"abbr"=>"(梵","replace"=>"bsk"],
 	["dictid"=>6,"abbr"=>"(梵","replace"=>"bsk"],
-	["dictid"=>1,"abbr"=>" a.","replace"=>"adj"],
-	["dictid"=>1,"abbr"=>" a.","replace"=>"adj"],
-	["dictid"=>3,"abbr"=>" a.","replace"=>"adj"],
-	["dictid"=>3,"abbr"=>" a.","replace"=>"adj"],
-	["dictid"=>8,"abbr"=>" a.","replace"=>"adj"],
-	["dictid"=>8,"abbr"=>" a.","replace"=>"adj"],
-	["dictid"=>6,"abbr"=>" a.","replace"=>"adj"],
-	["dictid"=>6,"abbr"=>" a.","replace"=>"adj"],
-	["dictid"=>15,"abbr"=>" a.","replace"=>"adj"],
-	["dictid"=>15,"abbr"=>" a.","replace"=>"adj"],
-	["dictid"=>18,"abbr"=>" a.","replace"=>"adj"],
-	["dictid"=>18,"abbr"=>" a.","replace"=>"adj"],
-	["dictid"=>19,"abbr"=>" a.","replace"=>"adj"],
-	["dictid"=>19,"abbr"=>" a.","replace"=>"adj"],
-	["dictid"=>32,"abbr"=>" a.","replace"=>"adj"],
-	["dictid"=>32,"abbr"=>" a.","replace"=>"adj"],
 	["dictid"=>1,"abbr"=>"f.","replace"=>"f"],
 	["dictid"=>3,"abbr"=>"f.","replace"=>"f"],
 	["dictid"=>8,"abbr"=>"f.","replace"=>"f"],

+ 2 - 2
public/app/install/db_insert_palitext_cli.php

@@ -41,8 +41,8 @@ if (($handle = fopen(__DIR__."/filelist.csv", 'r')) !== false) {
         $fileNums++;
     }
 }
-if ($to == 0 || $to >= $fileNums) {
-    $to = $fileNums - 1;
+if ($to == 0 || $to > $fileNums) {
+    $to = $fileNums;
 }
 
 $dns = _DB_;

+ 22 - 10
public/app/install/db_update_palitext_cli.php

@@ -42,8 +42,8 @@ if (($handle = fopen(__DIR__."/filelist.csv", 'r')) !== false) {
         $fileNums++;
     }
 }
-if ($to == 0 || $to >= $fileNums) {
-    $to = $fileNums - 1;
+if ($to == 0 || $to > $fileNums) {
+    $to = $fileNums;
 }
 
 
@@ -92,7 +92,8 @@ if (($fpPaliText = fopen($dirPaliTextBase . $xmlfile, "r")) !== false) {
 
 // 打开csv文件并读取数据
 $inputRow = 0;
-if (($fp = fopen(_DIR_PALI_TITLE_ . "/" . ($from + 1) . "_pali.csv", "r")) !== false) {
+$tocFile = _DIR_PALI_TITLE_ . "/" . ($from + 1) . "_pali.csv";
+if (($fp = fopen($tocFile, "r")) !== false) {
     while (($data = fgetcsv($fp, 0, ',')) !== false) {
         if ($inputRow > 0) {
             $params = $data;
@@ -101,9 +102,9 @@ if (($fp = fopen(_DIR_PALI_TITLE_ . "/" . ($from + 1) . "_pali.csv", "r")) !== f
         $inputRow++;
     }
     fclose($fp);
-    fwrite(STDOUT, "单词表load:" . $dirXmlBase . $dirXml . $outputFileNameHead . ".csv". PHP_EOL);
+    fwrite(STDOUT, "Toc load:" . $tocFile. PHP_EOL);
 } else {
-    fwrite(STDERR, "can not open csv file. filename=" . $dirXmlBase . $dirXml . $outputFileNameHead . ".csv" . PHP_EOL);
+    fwrite(STDERR, "can not open csv file. filename=" . $tocFile . PHP_EOL);
 }
 
 if ((count($arrInserString)) != count($pali_text_array) - 2) {
@@ -138,7 +139,10 @@ for ($iPar = 0; $iPar < count($title_data); $iPar++) {
     $book = $from + 1;
     $paragraph = $title_data[$iPar]["paragraph"];
 
-    if ((int) $title_data[$iPar]["level"] == 8) {
+/*
+level 8 为 偈诵编号。不当作标题
+*/
+    if ((int)$title_data[$iPar]["level"] == 8) {
         $title_data[$iPar]["level"] = 100;
     }
 
@@ -159,21 +163,29 @@ for ($iPar = 0; $iPar < count($title_data); $iPar++) {
         $length = $paragraph_count - $paragraph + 1;
     }
 
-
+    
+    /*
+    上一个段落
+    算法:查找上一个标题段落。而且该标题段落的下一个段落不是标题段落
+    */
     $prev = -1;
     if ($iPar > 0) {
         for ($iPar1 = $iPar - 1; $iPar1 >= 0; $iPar1--) {
-            if ($title_data[$iPar1]["level"] == $curr_level) {
+            if ($title_data[$iPar1]["level"] < 8 && $title_data[$iPar1+1]["level"]==100) {
                 $prev = $title_data[$iPar1]["paragraph"];
                 break;
             }
         }
     }
 
+    /*
+    上一个段落
+    算法:查找上一个标题段落。而且该标题段落的下一个段落不是标题段落
+    */
     $next = -1;
     if ($iPar < count($title_data) - 1) {
-        for ($iPar1 = $iPar + 1; $iPar1 < count($title_data); $iPar1++) {
-            if ($title_data[$iPar1]["level"] == $curr_level) {
+        for ($iPar1 = $iPar + 1; $iPar1 < count($title_data)-1; $iPar1++) {
+            if ($title_data[$iPar1]["level"] <8 && $title_data[$iPar1+1]["level"]==100) {
                 $next = $title_data[$iPar1]["paragraph"];
                 break;
             }

+ 265 - 0
public/app/palicanon/category/cscd.json

@@ -0,0 +1,265 @@
+[
+    {
+        "name":"Tipiṭaka(Mūla)",
+        "tag":["mūla"],
+        "children":[
+            {
+                "name":"sutta piṭaka",
+                "tag":["mūla","sutta"],
+                "children":[
+                    {
+                        "name":"dīghanikāya",
+                        "tag":["mūla","sutta","dīghanikāya"],
+                        "children":[
+                            {
+                                "name":"Sīlakkhandhavaggapāḷi",
+                                "tag":["mūla","sutta","dīghanikāya","sīlakkhandhavagga"]
+                            },
+                            {
+                                "name":"Mahāvaggapāḷi",
+                                "tag":["mūla","sutta","dīghanikāya","mahāvagga"]
+                            },
+                            {
+                                "name":"Pāthikavaggapāḷi",
+                                "tag":["mūla","sutta","dīghanikāya","pāthikavagga"]
+                            }
+                        ]
+                    },
+                    {
+                        "name":"Majjhima Nikāya",
+                        "tag":["mūla","sutta","majjhimanikāya"],
+                        "children":[
+                            {
+                                "name":"Mūlapaṇṇāsapāḷi",
+                                "tag":["mūla","sutta","majjhimanikāya","Mūlapaṇṇāsa"]
+                            },
+                            {
+                                "name":"Majjhimapaṇṇāsapāḷi",
+                                "tag":["mūla","sutta","majjhimanikāya","majjhimapaṇṇāsa"]
+                            },
+                            {
+                                "name":"Uparipaṇṇāsapāḷi",
+                                "tag":["mūla","sutta","majjhimanikāya","uparipaṇṇāsa"]
+                            }
+                        ]
+                    },
+                    {
+                        "name":"saṃyuttanikāya",
+                        "tag":["mūla","sutta","saṃyuttanikāya"],
+                        "children":[
+                            {
+                                "name":"Sagāthāvagga",
+                                "tag":["mūla","sutta","saṃyuttanikāya","sagāthāvagga"]
+                            },
+                            {
+                                "name":"Nidānavagga",
+                                "tag":["mūla","sutta","saṃyuttanikāya","nidānavagga"]
+                            },
+                            {
+                                "name":"Khandhavagga",
+                                "tag":["mūla","sutta","saṃyuttanikāya","khandhavagga"]
+                            },
+                            {
+                                "name":"Saḷāyatanavagga",
+                                "tag":["mūla","sutta","saṃyuttanikāya","saḷāyatanavagga"]
+                            },
+                            {
+                                "name":"Mahāvagga",
+                                "tag":["mūla","sutta","saṃyuttanikāya","mahāvagga"]
+                            }
+                        ]
+                    },
+                    {
+                        "name":"aṅguttaranikāya",
+                        "tag":["mūla","sutta","aṅguttaranikāya"],
+                        "children":[
+                            {
+                                "name":"Ekakanipātapāḷi",
+                                "tag":["mūla","sutta","aṅguttaranikāya","ekakanipāta"]
+                            },
+                            {
+                                "name":"Dukanipātapāḷi",
+                                "tag":["mūla","sutta","aṅguttaranikāya","dukanipāta"]
+                            },
+                            {
+                                "name":"Tikanipātapāḷi",
+                                "tag":["mūla","sutta","aṅguttaranikāya","tikanipāta"]
+                            },
+                            {
+                                "name":"Catukkanipātapāḷi",
+                                "tag":["mūla","sutta","aṅguttaranikāya","catukkanipāta"]
+                            },
+                            {
+                                "name":"Pañcakanipātapāḷi",
+                                "tag":["mūla","sutta","aṅguttaranikāya","pañcakanipāta"]
+                            },
+                            {
+                                "name":"Chakkanipātapāḷi",
+                                "tag":["mūla","sutta","aṅguttaranikāya","chakkanipāta"]
+                            },
+                            {
+                                "name":"Sattakanipātapāḷi",
+                                "tag":["mūla","sutta","aṅguttaranikāya","sattakanipāta"]
+                            },
+                            {
+                                "name":"Aṭṭhakanipātapāḷi",
+                                "tag":["mūla","sutta","aṅguttaranikāya","aṭṭhakanipāta"]
+                            },
+                            {
+                                "name":"Navakanipātapāḷi",
+                                "tag":["mūla","sutta","aṅguttaranikāya","navakanipāta"]
+                            },
+                            {
+                                "name":"Dasakanipātapāḷi",
+                                "tag":["mūla","sutta","aṅguttaranikāya","dasakanipāta"]
+                            },
+                            {
+                                "name":"Ekādasakanipātapāḷi",
+                                "tag":["mūla","sutta","aṅguttaranikāya","ekādasakanipāta"]
+                            }
+                        ]
+                    },
+                    {
+                        "name":"khuddakanikāya",
+                        "tag":["mūla","sutta","khuddakanikāya"],
+                        "children":[
+                            {
+                                "name":"Khuddakapāṭhapāḷi",
+                                "tag":["mūla","sutta","khuddakanikāya","khuddakapāṭha"]
+                            },
+                            {
+                                "name":"Dhammapadapāḷi",
+                                "tag":["mūla","sutta","khuddakanikāya","dhammapada"]
+                            },
+                            {
+                                "name":"Udānapāḷi",
+                                "tag":["mūla","sutta","khuddakanikāya","udāna"]
+                            },
+                            {
+                                "name":"Itivuttakapāḷi",
+                                "tag":["mūla","sutta","khuddakanikāya","itivuttaka"]
+                            },
+                            {
+                                "name":"Suttanipātapāḷi",
+                                "tag":["mūla","sutta","khuddakanikāya","suttanipāta"]
+                            },
+                            {
+                                "name":"Vimānavatthupāḷi",
+                                "tag":["mūla","sutta","khuddakanikāya","vimānavatthu"]
+                            },
+                            {
+                                "name":"Petavatthupāḷi",
+                                "tag":["mūla","sutta","khuddakanikāya","petavatthu"]
+                            },
+                            {
+                                "name":"Theragāthāpāḷi",
+                                "tag":["mūla","sutta","khuddakanikāya","theragāthā"]
+                            },
+                            {
+                                "name":"Therāpadānapāḷi",
+                                "tag":["mūla","sutta","khuddakanikāya","therāpadāna"]
+                            },
+                            {
+                                "name":"Buddhavaṃsapāḷi",
+                                "tag":["mūla","sutta","khuddakanikāya","buddhavaṃsa"]
+                            },
+                            {
+                                "name":"Cariyāpiṭakapāḷi",
+                                "tag":["mūla","sutta","khuddakanikāya","cariyāpiṭaka"]
+                            },
+                            {
+                                "name":"Jātakapāḷi",
+                                "tag":["mūla","sutta","khuddakanikāya","jātaka"]
+                            },
+                            {
+                                "name":"Mahāniddesapāḷi",
+                                "tag":["mūla","sutta","khuddakanikāya","mahāniddesa"]
+                            },
+                            {
+                                "name":"Cūḷaniddesapāḷi",
+                                "tag":["mūla","sutta","khuddakanikāya","cūḷaniddesa"]
+                            },
+                            {
+                                "name":"Paṭisambhidāmaggapāḷi",
+                                "tag":["mūla","sutta","khuddakanikāya","paṭisambhidāmagga"]
+                            },
+                            {
+                                "name":"Nettippakaraṇapāḷi",
+                                "tag":["mūla","sutta","khuddakanikāya","nettippakaraṇa"]
+                            },
+                            {
+                                "name":"Milindapañhapāḷi",
+                                "tag":["mūla","sutta","khuddakanikāya","milindapañha"]
+                            },
+                            {
+                                "name":"Peṭakopadesapāḷi",
+                                "tag":["mūla","sutta","khuddakanikāya","peṭakopadesa"]
+                            }
+                        ]
+                    }
+                ]
+            },
+            {
+                "name":"vinaya piṭaka",
+                "tag":["mūla","vinaya"],
+                "children":[
+                    {
+                        "name":"pārājikapāḷi",
+                        "tag":["mūla","vinaya","pārājika"]
+                    },
+                    {
+                        "name":"pācittiyapāḷi",
+                        "tag":["mūla","vinaya","pācittiya"]
+                    },
+                    {
+                        "name":"mahāvaggapāḷi",
+                        "tag":["mūla","vinaya","mahāvagga"]
+                    },
+                    {
+                        "name":"cūḷavaggapāḷi",
+                        "tag":["mūla","vinaya","cūḷavagga"]
+                    },
+                    {
+                        "name":"parivārapāḷi",
+                        "tag":["mūla","vinaya","parivāra"]
+                    }
+                ]
+            },
+            {
+                "name":"abhidhamma piṭaka",
+                "tag":["mūla","abhidhamma"],
+                "children":[
+                    {
+                        "name":"dhammasaṅgaṇī",
+                        "tag":["mūla","abhidhamma","dhammasaṅgaṇī"]
+                    },
+                    {
+                        "name":"vibhaṅga",
+                        "tag":["mūla","abhidhamma","vibhaṅga"]
+                    },
+                    {
+                        "name":"dhātukathā",
+                        "tag":["mūla","abhidhamma","dhātukathā"]
+                    },
+                                {
+                        "name":"puggalapaññatti",
+                        "tag":["mūla","abhidhamma","puggalapaññatti"]
+                    },
+                                {
+                        "name":"kathāvatthu",
+                        "tag":["mūla","abhidhamma","kathāvatthu"]
+                    },
+                    {
+                        "name":"yamaka",
+                        "tag":["mūla","abhidhamma","yamaka"]
+                    },
+                    {
+                        "name":"paṭṭhāna",
+                        "tag":["mūla","abhidhamma","paṭṭhāna"]
+                    }
+                ]
+            }
+
+        ]
+    }
+]

+ 258 - 0
public/app/palicanon/category/defualt.json

@@ -0,0 +1,258 @@
+[
+           {
+                "name":"sutta",
+                "tag":["sutta"],
+                "children":[
+                    {
+                        "name":"dīghanikāya",
+                        "tag":["sutta","dīghanikāya"],
+                        "children":[
+                            {
+                                "name":"Sīlakkhandhavagga",
+                                "tag":["sutta","dīghanikāya","sīlakkhandhavagga"]
+                            },
+                            {
+                                "name":"Mahāvagga",
+                                "tag":["sutta","dīghanikāya","mahāvagga"]
+                            },
+                            {
+                                "name":"Pāthikavagga",
+                                "tag":["sutta","dīghanikāya","pāthikavagga"]
+                            }
+                        ]
+                    },
+                    {
+                        "name":"Majjhima Nikāya",
+                        "tag":["sutta","majjhimanikāya"],
+                        "children":[
+                            {
+                                "name":"Mūlapaṇṇāsa",
+                                "tag":["sutta","majjhimanikāya","mūlapaṇṇāsa"]
+                            },
+                            {
+                                "name":"Majjhimapaṇṇāsa",
+                                "tag":["sutta","majjhimanikāya","majjhimapaṇṇāsa"]
+                            },
+                            {
+                                "name":"Uparipaṇṇāsa",
+                                "tag":["sutta","majjhimanikāya","uparipaṇṇāsa"]
+                            }
+                        ]
+                    },
+                    {
+                        "name":"saṃyuttanikāya",
+                        "tag":["sutta","saṃyuttanikāya"],
+                        "children":[
+                            {
+                                "name":"Sagāthāvagga",
+                                "tag":["sutta","saṃyuttanikāya","sagāthāvagga"]
+                            },
+                            {
+                                "name":"Nidānavagga",
+                                "tag":["sutta","saṃyuttanikāya","nidānavagga"]
+                            },
+                            {
+                                "name":"Khandhavagga",
+                                "tag":["sutta","saṃyuttanikāya","khandhavagga"]
+                            },
+                            {
+                                "name":"Saḷāyatanavagga",
+                                "tag":["sutta","saṃyuttanikāya","saḷāyatanavagga"]
+                            },
+                            {
+                                "name":"Mahāvagga",
+                                "tag":["sutta","saṃyuttanikāya","mahāvagga"]
+                            }
+                        ]
+                    },
+                    {
+                        "name":"aṅguttaranikāya",
+                        "tag":["sutta","aṅguttaranikāya"],
+                        "children":[
+                            {
+                                "name":"Ekakanipāta",
+                                "tag":["sutta","aṅguttaranikāya","ekakanipāta"]
+                            },
+                            {
+                                "name":"Dukanipāta",
+                                "tag":["sutta","aṅguttaranikāya","dukanipāta"]
+                            },
+                            {
+                                "name":"Tikanipāta",
+                                "tag":["sutta","aṅguttaranikāya","tikanipāta"]
+                            },
+                            {
+                                "name":"Catukkanipāta",
+                                "tag":["sutta","aṅguttaranikāya","catukkanipāta"]
+                            },
+                            {
+                                "name":"Pañcakanipāta",
+                                "tag":["sutta","aṅguttaranikāya","pañcakanipāta"]
+                            },
+                            {
+                                "name":"Chakkanipāta",
+                                "tag":["sutta","aṅguttaranikāya","chakkanipāta"]
+                            },
+                            {
+                                "name":"Sattakanipāta",
+                                "tag":["sutta","aṅguttaranikāya","sattakanipāta"]
+                            },
+                            {
+                                "name":"Aṭṭhakanipāta",
+                                "tag":["sutta","aṅguttaranikāya","aṭṭhakanipāta"]
+                            },
+                            {
+                                "name":"Navakanipāta",
+                                "tag":["sutta","aṅguttaranikāya","navakanipāta"]
+                            },
+                            {
+                                "name":"Dasakanipāta",
+                                "tag":["sutta","aṅguttaranikāya","dasakanipāta"]
+                            },
+                            {
+                                "name":"Ekādasakanipāta",
+                                "tag":["sutta","aṅguttaranikāya","ekādasakanipāta"]
+                            }
+                        ]
+                    },
+                    {
+                        "name":"khuddakanikāya",
+                        "tag":["sutta","khuddakanikāya"],
+                        "children":[
+                            {
+                                "name":"Khuddakapāṭha",
+                                "tag":["sutta","khuddakanikāya","khuddakapāṭha"]
+                            },
+                            {
+                                "name":"Dhammapada",
+                                "tag":["sutta","khuddakanikāya","dhammapada"]
+                            },
+                            {
+                                "name":"Udāna",
+                                "tag":["sutta","khuddakanikāya","udāna"]
+                            },
+                            {
+                                "name":"Itivuttaka",
+                                "tag":["sutta","khuddakanikāya","itivuttaka"]
+                            },
+                            {
+                                "name":"Suttanipāta",
+                                "tag":["sutta","khuddakanikāya","suttanipāta"]
+                            },
+                            {
+                                "name":"Vimānavatthu",
+                                "tag":["sutta","khuddakanikāya","vimānavatthu"]
+                            },
+                            {
+                                "name":"Petavatthu",
+                                "tag":["sutta","khuddakanikāya","petavatthu"]
+                            },
+                            {
+                                "name":"Theragāthā",
+                                "tag":["sutta","khuddakanikāya","theragāthā"]
+                            },
+                            {
+                                "name":"Therāpadāna",
+                                "tag":["sutta","khuddakanikāya","therāpadāna"]
+                            },
+                            {
+                                "name":"Buddhavaṃsa",
+                                "tag":["sutta","khuddakanikāya","buddhavaṃsa"]
+                            },
+                            {
+                                "name":"Cariyāpiṭaka",
+                                "tag":["sutta","khuddakanikāya","cariyāpiṭaka"]
+                            },
+                            {
+                                "name":"Jātaka",
+                                "tag":["sutta","khuddakanikāya","jātaka"]
+                            },
+                            {
+                                "name":"Mahāniddesa",
+                                "tag":["sutta","khuddakanikāya","mahāniddesa"]
+                            },
+                            {
+                                "name":"Cūḷaniddesa",
+                                "tag":["sutta","khuddakanikāya","cūḷaniddesa"]
+                            },
+                            {
+                                "name":"Paṭisambhidāmagga",
+                                "tag":["sutta","khuddakanikāya","paṭisambhidāmagga"]
+                            },
+                            {
+                                "name":"Nettippakaraṇa",
+                                "tag":["sutta","khuddakanikāya","nettippakaraṇa"]
+                            },
+                            {
+                                "name":"Milindapañha",
+                                "tag":["sutta","khuddakanikāya","milindapañha"]
+                            },
+                            {
+                                "name":"Peṭakopadesa",
+                                "tag":["sutta","khuddakanikāya","peṭakopadesa"]
+                            }
+                        ]
+                    }
+                ]
+            },
+            {
+                "name":"vinaya piṭaka",
+                "tag":["vinaya"],
+                "children":[
+                    {
+                        "name":"Mahāvibhaṅga",
+                        "tag":["vinaya","mahāvibhaṅga"]
+                    },
+                    {
+                        "name":"Bhikkhunīvibhaṅga",
+                        "tag":["vinaya","bhikkhunīvibhaṅga"]
+                    },
+                    {
+                        "name":"mahāvagga",
+                        "tag":["vinaya","mahāvagga"]
+                    },
+                    {
+                        "name":"cūḷavagga",
+                        "tag":["vinaya","cūḷavagga"]
+                    },
+                    {
+                        "name":"parivāra",
+                        "tag":["vinaya","parivāra"]
+                    }
+                ]
+            },
+            {
+                "name":"abhidhamma piṭaka",
+                "tag":["abhidhamma"],
+                "children":[
+                    {
+                        "name":"dhammasaṅgaṇī",
+                        "tag":["abhidhamma","dhammasaṅgaṇī"]
+                    },
+                    {
+                        "name":"vibhaṅga",
+                        "tag":["abhidhamma","vibhaṅga"]
+                    },
+                    {
+                        "name":"dhātukathā",
+                        "tag":["abhidhamma","dhātukathā"]
+                    },
+                                {
+                        "name":"puggalapaññatti",
+                        "tag":["abhidhamma","puggalapaññatti"]
+                    },
+                                {
+                        "name":"kathāvatthu",
+                        "tag":["abhidhamma","kathāvatthu"]
+                    },
+                    {
+                        "name":"yamaka",
+                        "tag":["abhidhamma","yamaka"]
+                    },
+                    {
+                        "name":"paṭṭhāna",
+                        "tag":["abhidhamma","paṭṭhāna"]
+                    }
+                ]
+            }
+]

+ 10 - 0
public/app/palicanon/category/index.json

@@ -0,0 +1,10 @@
+[
+    {
+        "name":"defualt",
+        "file":"defualt"
+    },    
+    {
+        "name":"cscd",
+        "file":"cscd"
+    }
+]

+ 211 - 0
public/app/palicanon/index1.php

@@ -0,0 +1,211 @@
+<?PHP
+require_once "../pcdl/html_head.php";
+?>
+
+<body>
+    <script src="../palicanon/palicanon.js"></script>
+    <script src="../term/term.js"></script>
+
+<?php
+    require_once "../pcdl/head_bar.php";
+?>
+
+	<link type="text/css" rel="stylesheet" href="../palicanon/style.css" />
+	<link type="text/css" rel="stylesheet" href="../palicanon/style_mobile.css" media="screen and (max-width:800px)">
+
+
+    <script>
+        var tag_level = <?php echo file_get_contents("../public/book_tag/tag_list.json"); ?>;
+    </script>
+<?php
+//
+
+require_once "../config.php";
+require_once "../public/_pdo.php";
+require_once '../media/function.php';
+require_once '../public/function.php';
+?>
+
+<link href="../../node_modules/jquery.fancytree/dist/skin-win7/ui.fancytree.css" rel="stylesheet" type="text/css" class="skinswitcher">
+<script src="../tree/jquery.fancytree.js" type="text/javascript"></script>
+
+<style>
+.head_bar{
+    display:flex;
+}
+.more_info{
+    font-size:80%;
+    color: var(--main-color1);
+}
+.more_info>.item{
+    margin-right:1em;
+}
+.chapter_list ul li{
+    display:flex;
+}
+.book_view  ul li{
+    display:block;
+}
+.book_view .level_1{
+    background:unset;
+}
+
+.book_view ul li{
+    border:unset;
+    width: 30%;
+    height:90px;
+}
+.chapter_list .list {
+    width: 0;
+}
+.chapter_list .show {
+    display: block;
+    width: 100%;
+}
+.chapter_list .grid {
+    width: 100%;
+}
+</style>
+
+<div style="display:flex;">
+    <div id='left-bar' style="flex:2;">
+        <div id='left-bar-inner'>
+            <div style="width:100%">
+                <select id="tag_category_index" onchange="TagCategoryIndexchange(this)">
+                </select>
+            </div>
+            <div id='tag-category' >
+            
+            </div>
+        </div>
+    </div>
+    <div id='course_head_bar' style='flex:6;background-color:var(--tool-bg-color1);padding:1em 10px 10px 10px;'>
+        <div class='index_inner '>
+            <div style='display:flex;justify-content: space-between;'>
+                <div style=''>
+                    <a href='index1.php?view=community'>社区</a>
+                    <a href='index1.php?view=category'>分类</a>
+                    <a href='index1.php?view=my'>我的</a>
+                </div>
+                <div style=''>
+                    <select onchange='viewChanged(this)'>
+                        <option value='card'>卡片</option>
+                        <option value='list'>列表</option>
+                    </select>
+                </div>
+            </div>
+            <div id="main_tag"  style="display:none;">
+                <span tag="sutta" title="sutta"></span>
+                <span tag="vinaya"  title="vinaya"></span>
+                <span tag="abhidhamma" title="abhidhamma"></span>
+                <span tag="mūla" title="mūla"></span>
+                <span tag="aṭṭhakathā" title="aṭṭhakathā"></span>
+                <span tag="ṭīkā" title="ṭīkā"></span>
+                <span tag="añña" title="añña"></span>
+            </div>
+
+            <div id="select_bar" >
+                <div id="tag_selected"></div>
+                <div>
+                    <button onclick="tag_list_slide_toggle(this)">
+                        ⮝
+                    </button>
+                </div>
+            </div>
+            <div>
+                <div id="tag_list">
+                    <div level="0" class="tag_others"></div>
+                    <div level="1" class="tag_others"></div>
+                    <div level="2" class="tag_others"></div>
+                    <div level="3" class="tag_others"></div>
+                    <div level="4" class="tag_others"></div>
+                    <div level="5" class="tag_others"></div>
+                    <div level="100" class="tag_others"></div>
+                    <div level="8" class="tag_others"></div>
+                </div>
+            </div>
+            <div id='bread-crumbs'></div>
+            <div class='index_inner'>
+                <div id="chapter_shell" class="chapter_list" >
+                    <div id="list_shell_1" class="show book_view" level="1">
+                        <ul id="list-1" class="grid" level="1" >
+                        </ul>
+                    </div>
+
+                    <div id="list_shell_2" level="2">
+                        <ul id="list-2" class="hidden" level="2"  >
+                        </ul>
+                    </div>
+
+                    <div id="list_shell_3" level="3">
+                        <ul id="list-3" class="hidden" level="3" >
+                        </ul>
+                    </div>
+
+                    <div id="list_shell_4" level="4">
+                        <ul id="list-4" class="hidden" level="4" >
+                        </ul>
+                    </div>
+
+                    <div id="list_shell_5" level="5">
+                        <ul id="list-5" class="hidden" level="5" >
+                        </ul>
+                    </div>
+
+                    <div id="list_shell_6" level="6">
+                        <ul id="list-6" class="hidden" level="6" >
+                        </ul>
+                    </div>
+
+                    <div id="list_shell_7" level="7">
+                        <ul id="list-7" class="hidden" level="7" >
+                        </ul>
+                    </div>
+
+                    <div id="list_shell_8" level="8">
+                        <ul id="list-8" class="hidden" level="8" >
+                        </ul>
+                    </div>
+
+                </div>
+            </div>
+        </div>
+    </div>
+    <div style="flex:2;">
+    right pannal
+    </div>
+</div>
+
+
+
+    <script>
+        $(document).ready(function() {
+            let indexFilename = localStorage.getItem('palicanon_tag_category');
+            if(!indexFilename){
+                indexFilename = "defualt";
+            }
+            loadTagCategory(indexFilename);
+            loadTagCategoryIndex();
+            <?php
+            if(isset($_GET["view"])){
+                $_view = $_GET["view"];
+            }else{
+                $_view = "category";
+            }
+            switch ($_view) {
+                case 'category':
+                    echo "palicanon_onload();";
+                    break;
+                
+                default:
+                    # code...
+                    break;
+            }
+            ?>
+            
+            updateFirstListView();
+        });
+    </script>
+    <?php
+include "../pcdl/html_foot.php";
+?>

+ 202 - 33
public/app/palicanon/palicanon.js

@@ -3,6 +3,8 @@ var list_tag = new Array();
 var currTagLevel0 = new Array();
 var allTags = new Array();
 var arrMyTerm = new Array();
+var _listView="card";
+var gBreadCrumbs=['','','','','','','','',''];
 
 palicanon_load_term();
 
@@ -118,7 +120,7 @@ function tag_changed() {
 					}
 				}
 
-				if (arrBookList.length < 50 || (arrBookList.length > 50 && iterator.level == 1)) {
+				if (arrBookList.length < 20 || (arrBookList.length > 20 && iterator.level == 1)) {
 					arrChapter.push(iterator);
 				}
 			}
@@ -134,14 +136,25 @@ function tag_changed() {
 			tag_render_others();
 			palicanon_chapter_list_apply(0);
 			$("#list-1").html(render_chapter_list(arrChapter));
-			if (arrBookList.length < 50) {
-				$("#list_shell_1").removeClass("book_view");
-			} else {
-				$("#list_shell_1").addClass("book_view");
-			}
+
 		}
 	);
 }
+function viewChanged(obj){
+
+    _listView = $(obj).val();
+    updateFirstListView();
+}
+
+function updateFirstListView(){
+    if(_listView == "list"){
+        $("#list_shell_1").removeClass("book_view");
+        $("#list_shell_1").addClass("list_view");
+    }else{
+        $("#list_shell_1").addClass("book_view");
+        $("#list_shell_1").removeClass("list_view");
+    }
+}
 
 function palicanon_load_chapter(book, para, div_index = 1) {
 	let lang = getCookie("language");
@@ -210,27 +223,32 @@ function render_chapter_head(chapter_info, parent) {
 	html += "</div>";
 	let link = "../reader/?view=chapter&book=" + chapter_info.book + "&par=" + chapter_info.paragraph;
 	html += "<div class='title'>";
+    let sToc = chapter_info.toc;
+    html += "	<div class='title_1'>";
 	if (typeof chapter_info.trans_title == "undefined") {
-		html += "	<div class='title_1'>";
         html += "<a href='" + link + "' target='_blank'>" ;
-        switch (getCookie('language')) {
-            case 'my':
-                html += roman_to_my(chapter_info.text);
-                break;
-            case 'si':
-                html += roman_to_si(chapter_info.text);
-                break;        
-            default:
-                html += chapter_info.text ;
-                break;
+        if(sToc == ""){
+            html += "[unnamed]" ;
+        }else{
+            switch (getCookie('language')) {
+                case 'my':
+                    html += roman_to_my(sToc);
+                    break;
+                case 'si':
+                    html += roman_to_si(sToc);
+                    break;        
+                default:
+                    html += sToc ;
+                    break;
+            }            
         }
+
         html += "</a>";
-        html += "</div>";
 	} else {
-		html +=
-			"	<div class='title_1'><a href='" + link + "' target='_blank'>" + chapter_info.trans_title + "</a></div>";
+        html += "<a href='" + link + "' target='_blank'>" + chapter_info.trans_title + "</a>";
 	}
-	html += "<div class='title_2'>" + chapter_info.text + "</div>";
+    html += "</div>";
+	html += "<div class='title_2'>" + sToc + "</div>";
 	html += "</div>";
 	html += "<div class='res res_more'>";
 	html += "<h2>译文</h2>";
@@ -289,6 +307,8 @@ function palicanon_chapter_list_apply(div_index) {
 	$("#list_shell_" + (iDiv + 1)).html(html);
 	$("#list_shell_" + (iDiv + 1)).removeClass();
 	$("#list_shell_" + (iDiv + 1)).addClass("show");
+	
+
 	//隐藏之后的列表
 	for (let index = iDiv + 2; index <= 8; index++) {
 		$("#list_shell_" + index).removeClass();
@@ -300,12 +320,17 @@ function palicanon_chapter_list_apply(div_index) {
 
 	$("#list_shell_" + iDiv).removeClass();
 	$("#list_shell_" + iDiv).addClass("list");
+
+    updateFirstListView();
 }
 
 function chapter_onclick(obj) {
 	let book = $(obj).attr("book");
 	let para = $(obj).attr("para");
-	let level = $(obj).parent().attr("level");
+	let level =  parseInt($(obj).parent().attr("level"));
+    let title1 = $(obj).find(".title_1").first().text();
+    gBreadCrumbs[level] = {title1:title1,book:book,para:para,level:level};
+    RenderBreadCrumbs();
 	$(obj).siblings().removeClass("selected");
 	$(obj).addClass("selected");
 	$("#tag_list").slideUp();
@@ -316,7 +341,7 @@ function palicanon_render_chapter_row(chapter) {
 	let html = "";
 	let levelClass = "";
 	if (chapter.level == 1) {
-		levelClass = " level_1";
+		//levelClass = " level_1";
 	}
 	html +=
 		'<li class="' +
@@ -326,19 +351,37 @@ function palicanon_render_chapter_row(chapter) {
 		'" para="' +
 		chapter.para +
 		'" onclick="chapter_onclick(this)">';
+    
+	html += '<div class="head_bar">';
+
+    html += '<span class="" style="margin-right: 1em;padding: 4px 0;">';
+    html += "<svg class='icon' style='fill: var(--box-bg-color1)'>";
+    if (chapter.level == 1) {
+	    html += "<use xlink:href='../../node_modules/bootstrap-icons/bootstrap-icons.svg#journal'>";
+    }else{
+        html += "<use xlink:href='../../node_modules/bootstrap-icons/bootstrap-icons.svg#folder2-open'>";
+    }
+	html += "</svg>" ;
+	html += "</span>";   
+
 	html += '<div class="title">';
 
-	if (typeof chapter.trans_title == "undefined") {
+    
+    let sPaliTitle = chapter.title;
+    if(chapter.title==""){
+        sPaliTitle = "unnamed";
+    }
+	if (typeof chapter.trans_title == "undefined" ||  chapter.trans_title == "") {
 		html += "	<div class='title_1'>" ;
         switch (getCookie('language')) {
             case 'my':
-                html += roman_to_my(chapter.title);
+                html += roman_to_my(sPaliTitle);
                 break;
             case 'si':
-                html += roman_to_si(chapter.title);
+                html += roman_to_si(sPaliTitle);
                 break;
             default:
-                html += chapter.title ;
+                html += sPaliTitle ;
                 break;
         }
         
@@ -347,9 +390,11 @@ function palicanon_render_chapter_row(chapter) {
 		html += "	<div class='title_1'>" + chapter.trans_title + "</div>";
 	}
 
-	html += '	<div class="title_2" lang="pali">' + chapter.title + "</div>";
+	html += '	<div class="title_2" lang="pali">' + sPaliTitle + "</div>";
 	html += "</div>";
 	html += '<div class="resource">';
+    //绘制进度圈
+    /*
 	if (chapter.progress) {
 		let r = 12;
 		let perimeter = 2 * Math.PI * r;
@@ -365,9 +410,41 @@ function palicanon_render_chapter_row(chapter) {
 			'"></circle>';
 		html += "</svg>";
 	}
-	html += '<div class="res_more">';
-	html += " ";
-	html += "	</div>";
+    */
+	html += "</div>";
+	html += "</div>";//end of head bar
+
+
+    html += '<div class="more_info">';
+
+    html += "<span class='item'>";
+    html += "<svg class='small_icon' style='fill: var(--box-bg-color1)'>";
+	html += "<use xlink:href='../../node_modules/bootstrap-icons/bootstrap-icons.svg#journals'>";
+	html += "</svg>" ;
+    html += "Saratadipani";
+    html += "</span>"
+    
+	html += "<span class='item'>";
+    html += "<svg class='small_icon' style='fill: var(--box-bg-color1)'>";
+	html += "<use xlink:href='../../node_modules/bootstrap-icons/bootstrap-icons.svg#translate'>";
+	html += "</svg>" ;
+    if(chapter.progress){
+        html += parseInt(chapter.progress.all_trans*100+1)+"%";
+    }else{
+         html += "无";
+    }
+    
+    html += "</span>";
+
+	html += "<span class='item'>";
+    html += "<svg class='small_icon' style='fill: var(--box-bg-color1)'>";
+	html += "<use xlink:href='../../node_modules/bootstrap-icons/bootstrap-icons.svg#person'>";
+	html += "</svg>" ;
+    html += "简体中文(3)";
+    html += "</span>";
+
+
+
 	html += "</div>";
 	html += "</li>";
 	return html;
@@ -434,6 +511,12 @@ function tag_click(tag) {
 	tag_changed();
 }
 
+function tag_set(tag) {
+	list_tag = tag;
+	render_tag_list();
+	tag_changed();
+}
+
 function render_tag_list() {
 	$("#tag_list").slideDown();
 
@@ -475,8 +558,11 @@ function chapter_back(parent) {
 	let curr = parseInt(parent) + 1;
 	let prt = parseInt(parent);
 	//隐藏当前的
-	$("#list_shell_" + curr).removeClass();
-	$("#list_shell_" + curr).addClass("hidden");
+    for (let index = curr; index < 8; index++) {
+	    $("#list_shell_" + index).removeClass();
+	    $("#list_shell_" + index).addClass("hidden");        
+        gBreadCrumbs[index-1]='';
+    }
 
 	//展开上一个
 	$("#list-" + prt).removeClass();
@@ -484,4 +570,87 @@ function chapter_back(parent) {
 
 	$("#list_shell_" + prt).removeClass();
 	$("#list_shell_" + prt).addClass("show");
+
+    RenderBreadCrumbs();
+}
+
+
+function loadTagCategory(name="defualt"){
+    $.getJSON("./category/"+name+".json",function(result){
+        console.log(tocGetTagCategory(result));
+        $("#tag-category").html("");
+        $("#tag-category").fancytree({
+            autoScroll: true,
+            selectMode: 1, // 1:single, 2:multi, 3:multi-hier
+            checkbox: false, // Show checkboxes.
+            source: tocGetTagCategory(result),
+            click: function(e, data) {
+                    //tag_set([data.node.title]);
+                },
+            activate: function(e, data) {
+//				alert("activate " + );
+                //currSelectNode = data.node;
+                tag_set(arrTagCategory[data.node.key]);
+            },
+            select: function(e, data) {
+                // Display list of selected nodes
+                currSelectNode = data.tree.getSelectedNodes();
+                }
+        });
+
+  });
+
 }
+
+var arrTagCategory = new Array();
+function tocGetTagCategory(data){
+    let output = new Array();
+    for (const iterator of data) {
+        let item = {key:com_uuid(),title:iterator.name,tag:iterator.tag};
+        arrTagCategory[item.key] = iterator.tag;
+        if(typeof iterator.children !== "undefined"){
+            item.children = tocGetTagCategory(iterator.children);
+        }
+        output.push(item);
+    }
+    return output;
+}
+
+function loadTagCategoryIndex(){
+    $.getJSON("./category/index.json",function(result){
+            let indexFilename = localStorage.getItem('palicanon_tag_category');
+            if(!indexFilename){
+                indexFilename = "defualt";
+            }
+        let html="";
+        for (const iterator of result) {
+            html += "<option ";
+            if(indexFilename==iterator.file){
+                html += " selected ";
+            }
+            html += " value='"+iterator.file+"'>"+iterator.name+"</option>";
+        }
+        $("#tag_category_index").html(html);
+    });
+}
+
+function TagCategoryIndexchange(obj){
+    localStorage.setItem('palicanon_tag_category',$(obj).val());
+    //loadTagCategory($(obj).val());
+     location.reload();
+}
+
+function RenderBreadCrumbs(){
+    let html = "";
+    html += '<a onclick="chapter_back(1)">home</a>';
+    for (const iterator of gBreadCrumbs) {
+        if(iterator.title1){
+            html += " > ";
+            html += '<a onclick="chapter_back('+(iterator.level+1)+')">';
+            html += iterator.title1;
+            html += '</a>';
+        }
+    }
+
+    $("#bread-crumbs").html(html);
+}

+ 81 - 0
public/app/pcdl/css/font.css

@@ -231,6 +231,87 @@
 	src: local("Padauk Bold"), url(../../../font/Padauk/Padauk-Bold.ttf) format("truetype");
 	font-display: fallback;
 }
+/*Noto Sans Myanmar*/
+@font-face {
+  font-family: "Noto Sans Myanmar";
+  font-style: normal;
+  font-weight: 100;
+  src: local("Noto Sans Myanmar Thin"),
+    url(../../../font/Noto_Sans_Myanmar/NotoSansMyanmar-Thin.ttf) format("truetype");
+  font-display: fallback;
+}
+
+@font-face {
+  font-family: "Noto Sans Myanmar";
+  font-style: normal;
+  font-weight: 200;
+  src: local("Noto Sans Myanmar ExtraLight"),
+    url(../../../font/Noto_Sans_Myanmar/NotoSansMyanmar-ExtraLight.ttf) format("truetype");
+  font-display: fallback;
+}
+
+@font-face {
+  font-family: "Noto Sans Myanmar";
+  font-style: normal;
+  font-weight: 300;
+  src: local("Noto Sans Myanmar Light"),
+    url(../../../font/Noto_Sans_Myanmar/NotoSansMyanmar-Light.ttf) format("truetype");
+  font-display: fallback;
+}
+
+@font-face {
+  font-family: "Noto Sans Myanmar";
+  font-style: normal;
+  font-weight: 400;
+  src: local("Noto Sans Myanmar Regular"),
+    url(../../../font/Noto_Sans_Myanmar/NotoSansMyanmar-Regular.ttf) format("truetype");
+  font-display: fallback;
+}
+
+@font-face {
+  font-family: "Noto Sans Myanmar";
+  font-style: normal;
+  font-weight: 500;
+  src: local("Noto Sans Myanmar Medium"),
+    url(../../../font/Noto_Sans_Myanmar/NotoSansMyanmar-Medium.ttf) format("truetype");
+  font-display: fallback;
+}
+
+@font-face {
+  font-family: "Noto Sans Myanmar";
+  font-style: normal;
+  font-weight: 600;
+  src: local("Noto Sans Myanmar SemiBold"),
+    url(../../../font/Noto_Sans_Myanmar/NotoSansMyanmar-SemiBold.ttf) format("truetype");
+  font-display: fallback;
+}
+
+@font-face {
+  font-family: "Noto Sans Myanmar";
+  font-style: normal;
+  font-weight: 700;
+  src: local("Noto Sans Myanmar Bold"),
+    url(../../../font/Noto_Sans_Myanmar/NotoSansMyanmar-Bold.ttf) format("truetype");
+  font-display: fallback;
+}
+
+@font-face {
+  font-family: "Noto Sans Myanmar";
+  font-style: normal;
+  font-weight: 800;
+  src: local("Noto Sans Myanmar ExtraBold"),
+    url(../../../font/Noto_Sans_Myanmar/NotoSansMyanmar-ExtraBold.ttf) format("truetype");
+  font-display: fallback;
+}
+
+@font-face {
+  font-family: "Noto Sans Myanmar";
+  font-style: normal;
+  font-weight: 900;
+  src: local("Noto Sans Myanmar Black"),
+    url(../../../font/Noto_Sans_Myanmar/NotoSansMyanmar-Black.ttf) format("truetype");
+  font-display: fallback;
+}
 /*傣仂文*/
 @font-face {
 	font-family: "ATaiThamKHNewV3-Normal";

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

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

+ 9 - 1
public/app/pcdl/head_bar.php

@@ -499,7 +499,7 @@ switch($_COOKIE['language']){
 							</a>
 						</li>
 						<li>
-							<a href="../calendar/" target="_blank">
+							<a href="../calendar/index.html" target="_blank">
 								<div class="nav_link"><?php echo $_local->gui->buddhist_calendar; ?></div>
 							</a>
 						</li>
@@ -518,6 +518,11 @@ switch($_COOKIE['language']){
 								<div class="nav_link"><?php echo $_local->gui->history; ?></div>
 							</a>
 						</li>
+						<li>
+							<a href="../tools/kammavaca.html" target="_blank">
+								<div class="nav_link"><?php echo "作持语"; ?></div>
+							</a>
+						</li>
 					</ul>
 			</li>
 			<li class="nav_link nav-mobile"><a href="../calendar/">
@@ -529,6 +534,9 @@ switch($_COOKIE['language']){
 			<li class="nav_link nav-mobile"><a href="../statistics/">
 					<?php echo $_local->gui->corpus_statistics; ?>
 				</a></li>
+			<li class="nav_link nav-mobile"><a href="../tools/kammavaca.html">
+			<?php echo "作持语"; ?>
+		</a></li>
 			<div>
 		</ul>
 	</nav>

+ 2 - 2
public/app/public/book_index/a/default.json

@@ -39,8 +39,8 @@
 { "name":"kn15" , "row":"149" , "id":"p149" , "folder":"s0515m.mul" , "title":"Mahāniddesapāḷi" , "c1":"sutta" , "c2":"khuddaka" , "c3":"Mahāniddesa" , "c4":"" },
 { "name":"kn16" , "row":"150" , "id":"p150" , "folder":"s0516m.mul" , "title":"Cūḷaniddesapāḷi" , "c1":"sutta" , "c2":"khuddaka" , "c3":"Cūḷaniddesa" , "c4":"" },
 { "name":"kn17" , "row":"151" , "id":"p151" , "folder":"s0517m.mul" , "title":"Paṭisambhidāmaggapāḷi" , "c1":"sutta" , "c2":"khuddaka" , "c3":"Paṭisambhidāmagga" , "c4":"" },
-{ "name":"kn18" , "row":"152" , "id":"p153" , "folder":"s0518m.nrf" , "title":"Nettippakaraṇapāḷi" , "c1":"sutta" , "c2":"khuddaka" , "c3":"Nettippakaraṇa" , "c4":"" },
-{ "name":"kn19" , "row":"153" , "id":"p152" , "folder":"s0519m.mul" , "title":"Milindapañhapāḷi" , "c1":"sutta" , "c2":"khuddaka" , "c3":"Milindapañha" , "c4":"" },
+{ "name":"kn19" , "row":"153" , "id":"p153" , "folder":"s0518m.nrf" , "title":"Nettippakaraṇapāḷi" , "c1":"sutta" , "c2":"khuddaka" , "c3":"Nettippakaraṇa" , "c4":"" },
+{ "name":"kn18" , "row":"152" , "id":"p152" , "folder":"s0519m.mul" , "title":"Milindapañhapāḷi" , "c1":"sutta" , "c2":"khuddaka" , "c3":"Milindapañha" , "c4":"" },
 { "name":"kn20" , "row":"155" , "id":"p155" , "folder":"s0520m.nrf" , "title":"Peṭakopadesapāḷi" , "c1":"sutta" , "c2":"khuddaka" , "c3":"Peṭakopadesa" , "c4":"" },
 { "name":"vin1" , "row":"213" , "id":"p213" , "folder":"vin01m.mul" , "title":"Pārājikapāḷi" , "c1":"vinaya" , "c2":"Pārājika" , "c3":"" , "c4":"" },
 { "name":"vin2" , "row":"214" , "id":"p214" , "folder":"vin02m1.mul" , "title":"Pācittiyapāḷi" , "c1":"vinaya" , "c2":"Pācittiya" , "c3":"" , "c4":"" },

+ 2 - 2
public/app/public/book_index/a/en.json

@@ -39,8 +39,8 @@
 { "name":"kn15" , "row":"149" , "id":"p149" , "folder":"s0515m.mul" , "title":"Mahāniddesapāḷi" , "c1":"sutta" , "c2":"khuddaka" , "c3":"Mahāniddesa" , "c4":"" },
 { "name":"kn16" , "row":"150" , "id":"p150" , "folder":"s0516m.mul" , "title":"Cūḷaniddesapāḷi" , "c1":"sutta" , "c2":"khuddaka" , "c3":"Cūḷaniddesa" , "c4":"" },
 { "name":"kn17" , "row":"151" , "id":"p151" , "folder":"s0517m.mul" , "title":"Paṭisambhidāmaggapāḷi" , "c1":"sutta" , "c2":"khuddaka" , "c3":"Paṭisambhidāmagga" , "c4":"" },
-{ "name":"kn18" , "row":"152" , "id":"p153" , "folder":"s0518m.nrf" , "title":"Nettippakaraṇapāḷi" , "c1":"sutta" , "c2":"khuddaka" , "c3":"Nettippakaraṇa" , "c4":"" },
-{ "name":"kn19" , "row":"153" , "id":"p152" , "folder":"s0519m.mul" , "title":"Milindapañhapāḷi" , "c1":"sutta" , "c2":"khuddaka" , "c3":"Milindapañha" , "c4":"" },
+{ "name":"kn19" , "row":"153" , "id":"p153" , "folder":"s0518m.nrf" , "title":"Nettippakaraṇapāḷi" , "c1":"sutta" , "c2":"khuddaka" , "c3":"Nettippakaraṇa" , "c4":"" },
+{ "name":"kn18" , "row":"152" , "id":"p152" , "folder":"s0519m.mul" , "title":"Milindapañhapāḷi" , "c1":"sutta" , "c2":"khuddaka" , "c3":"Milindapañha" , "c4":"" },
 { "name":"kn20" , "row":"155" , "id":"p155" , "folder":"s0520m.nrf" , "title":"Peṭakopadesapāḷi" , "c1":"sutta" , "c2":"khuddaka" , "c3":"Peṭakopadesa" , "c4":"" },
 { "name":"vin1" , "row":"213" , "id":"p213" , "folder":"vin01m.mul" , "title":"Pārājikapāḷi" , "c1":"vinaya" , "c2":"Pārājika" , "c3":"" , "c4":"" },
 { "name":"vin2" , "row":"214" , "id":"p214" , "folder":"vin02m1.mul" , "title":"Pācittiyapāḷi" , "c1":"vinaya" , "c2":"Pācittiya" , "c3":"" , "c4":"" },

+ 2 - 2
public/app/public/book_index/a/my.json

@@ -94,11 +94,11 @@
 { "name":"k-kn22" , "row":"119" , "id":"p119" , "folder":"s0516a.att" , "title":"စူဠနိဒ္ဒေသ-အဋ္ဌကထာ" , "c1":"သုတ္တ" , "c2":"ခုဒ္ဒက" , "c3":"စူဠနိဒ္ဒေသ" , "c4":"" },
 { "name":"kn17" , "row":"151" , "id":"p151" , "folder":"s0517m.mul" , "title":"ပဋိသမ္ဘိဒာမဂ္ဂပာဠိ" , "c1":"သုတ္တ" , "c2":"ခုဒ္ဒက" , "c3":"ပဋိသမ္ဘိဒာမဂ္ဂ" , "c4":"" },
 { "name":"k-kn23" , "row":"120" , "id":"p120" , "folder":"s0517a.att" , "title":"ပဋိသမ္ဘိဒာမဂ္ဂ-အဋ္ဌကထာ(ပဌမော ဘာဂော)" , "c1":"သုတ္တ" , "c2":"ခုဒ္ဒက" , "c3":"ပဋိသမ္ဘိဒာမဂ္ဂ" , "c4":"" },
-{ "name":"kn18" , "row":"152" , "id":"p153" , "folder":"s0518m.nrf" , "title":"နေတ္တိပ္ပကရဏပာဠိ" , "c1":"သုတ္တ" , "c2":"ခုဒ္ဒက" , "c3":"နေတ္တိပ္ပကရဏ" , "c4":"" },
+{ "name":"kn19" , "row":"153" , "id":"p153" , "folder":"s0518m.nrf" , "title":"နေတ္တိပ္ပကရဏပာဠိ" , "c1":"သုတ္တ" , "c2":"ခုဒ္ဒက" , "c3":"နေတ္တိပ္ပကရဏ" , "c4":"" },
 { "name":"k-kn24" , "row":"121" , "id":"p121" , "folder":"s0519a.att" , "title":"နေတ္တိပ္ပကရဏ-အဋ္ဌကထာ" , "c1":"သုတ္တ" , "c2":"ခုဒ္ဒက" , "c3":"နေတ္တိပ္ပကရဏ" , "c4":"" },
 { "name":"t-kn1" , "row":"190" , "id":"p190" , "folder":"s0519t.tik" , "title":"နေတ္တိပ္ပကရဏ-ဋီကာ" , "c1":"သုတ္တ" , "c2":"ခုဒ္ဒက" , "c3":"နေတ္တိပ္ပကရဏ" , "c4":"" },
 { "name":"t-kn2" , "row":"191" , "id":"p191" , "folder":"s0501t.nrf" , "title":"နေတ္တိဝိဘာဝိနီ" , "c1":"သုတ္တ" , "c2":"ခုဒ္ဒက" , "c3":"နေတ္တိပ္ပကရဏ" , "c4":"" },
-{ "name":"kn19" , "row":"153" , "id":"p152" , "folder":"s0519m.mul" , "title":"မိလိန္ဒပဉ္ဟပာဠိ" , "c1":"သုတ္တ" , "c2":"ခုဒ္ဒက" , "c3":"မိလိန္ဒပဉ္ဟ" , "c4":"" },
+{ "name":"kn18" , "row":"152" , "id":"p152" , "folder":"s0519m.mul" , "title":"မိလိန္ဒပဉ္ဟပာဠိ" , "c1":"သုတ္တ" , "c2":"ခုဒ္ဒက" , "c3":"မိလိန္ဒပဉ္ဟ" , "c4":"" },
 { "name":"a-sih10" , "row":"46" , "id":"p46" , "folder":"e1210n.nrf" , "title":"မိလိဒဋီကာ" , "c1":"သုတ္တ" , "c2":"ခုဒ္ဒက" , "c3":"မိလိန္ဒပဉ္ဟ" , "c4":"" },
 { "name":"kn20" , "row":"155" , "id":"p155" , "folder":"s0520m.nrf" , "title":"ပေဋကောပဒေသပာဠိ" , "c1":"သုတ္တ" , "c2":"ခုဒ္ဒက" , "c3":"ပေဋကောပဒေသ" , "c4":"" },
 { "name":"vin1" , "row":"213" , "id":"p213" , "folder":"vin01m.mul" , "title":"ပာရာဇိကပာဠိ" , "c1":"ဝိနယ" , "c2":"ပာရာဇိက" , "c3":"" , "c4":"" },

+ 3 - 3
public/app/public/book_index/a/zh-cn.json

@@ -38,9 +38,9 @@
 	{ "name":"kn14b" , "row":"147" , "id":"p147" , "folder":"s0514m.mul" , "title":"本生卷二(17-22集)" , "c1":"经藏" , "c2":"小部" , "c3":"本生" , "c4":"" },
 	{ "name":"kn15" , "row":"149" , "id":"p149" , "folder":"s0515m.mul" , "title":"大义释-根本" , "c1":"经藏" , "c2":"小部" , "c3":"大义释" , "c4":"" },
 	{ "name":"kn16" , "row":"150" , "id":"p150" , "folder":"s0516m.mul" , "title":"小义释-根本" , "c1":"经藏" , "c2":"小部" , "c3":"小义释" , "c4":"" },
-	{ "name":"kn17" , "row":"151" , "id":"p151" , "folder":"s0517m.mul" , "title":"无碍解道-根本" , "c1":"经藏" , "c2":"小部" , "c3":"无碍解道" , "c4":"" },
-	{ "name":"kn18" , "row":"152" , "id":"p153" , "folder":"s0518m.nrf" , "title":"导论-根本" , "c1":"经藏" , "c2":"小部" , "c3":"导论" , "c4":"" },
-	{ "name":"kn19" , "row":"153" , "id":"p152" , "folder":"s0519m.mul" , "title":"弥林达问经-根本" , "c1":"经藏" , "c2":"小部" , "c3":"弥林达问经" , "c4":"" },
+	{ "name":"kn17" , "row":"153" , "id":"p153" , "folder":"s0518m.nrf" , "title":"导论-根本" , "c1":"经藏" , "c2":"小部" , "c3":"导论" , "c4":"" },
+	{ "name":"kn18" , "row":"151" , "id":"p151" , "folder":"s0517m.mul" , "title":"无碍解道-根本" , "c1":"经藏" , "c2":"小部" , "c3":"无碍解道" , "c4":"" },
+	{ "name":"kn19" , "row":"152" , "id":"p152" , "folder":"s0519m.mul" , "title":"弥林达问经-根本" , "c1":"经藏" , "c2":"小部" , "c3":"弥林达问经" , "c4":"" },
 	{ "name":"kn20" , "row":"155" , "id":"p155" , "folder":"s0520m.nrf" , "title":"藏释-根本" , "c1":"经藏" , "c2":"小部" , "c3":"藏释" , "c4":"" },
 	{ "name":"vin1" , "row":"213" , "id":"p213" , "folder":"vin01m.mul" , "title":"律藏·巴拉基咖-根本" , "c1":"律藏" , "c2":"经分别" , "c3":"巴拉基咖" , "c4":"" },
 	{ "name":"vin2" , "row":"214" , "id":"p214" , "folder":"vin02m1.mul" , "title":"律藏·巴吉蒂亚-根本" , "c1":"律藏" , "c2":"经分别" , "c3":"巴吉蒂亚" , "c4":"" },

+ 2 - 2
public/app/public/book_index/a/zh-tw.json

@@ -39,8 +39,8 @@
 	{ "name":"kn15" , "row":"149" , "id":"p149" , "folder":"s0515m.mul" , "title":"大義釋-根本" , "c1":"經藏" , "c2":"小部" , "c3":"大義釋" , "c4":"" },
 	{ "name":"kn16" , "row":"150" , "id":"p150" , "folder":"s0516m.mul" , "title":"小義釋-根本" , "c1":"經藏" , "c2":"小部" , "c3":"小義釋" , "c4":"" },
 	{ "name":"kn17" , "row":"151" , "id":"p151" , "folder":"s0517m.mul" , "title":"無礙解道-根本" , "c1":"經藏" , "c2":"小部" , "c3":"無礙解道" , "c4":"" },
-	{ "name":"kn18" , "row":"152" , "id":"p153" , "folder":"s0518m.nrf" , "title":"導論-根本" , "c1":"經藏" , "c2":"小部" , "c3":"導論" , "c4":"" },
-	{ "name":"kn19" , "row":"153" , "id":"p152" , "folder":"s0519m.mul" , "title":"彌林達問經-根本" , "c1":"經藏" , "c2":"小部" , "c3":"彌林達問經" , "c4":"" },
+	{ "name":"kn19" , "row":"153" , "id":"p153" , "folder":"s0518m.nrf" , "title":"導論-根本" , "c1":"經藏" , "c2":"小部" , "c3":"導論" , "c4":"" },
+	{ "name":"kn18" , "row":"152" , "id":"p152" , "folder":"s0519m.mul" , "title":"彌林達問經-根本" , "c1":"經藏" , "c2":"小部" , "c3":"彌林達問經" , "c4":"" },
 	{ "name":"kn20" , "row":"155" , "id":"p155" , "folder":"s0520m.nrf" , "title":"藏釋-根本" , "c1":"經藏" , "c2":"小部" , "c3":"藏釋" , "c4":"" },
 	{ "name":"vin1" , "row":"213" , "id":"p213" , "folder":"vin01m.mul" , "title":"律藏·巴拉基咖-根本" , "c1":"律藏" , "c2":"經分別" , "c3":"巴拉基咖" , "c4":"" },
 	{ "name":"vin2" , "row":"214" , "id":"p214" , "folder":"vin02m1.mul" , "title":"律藏·巴吉蒂亞-根本" , "c1":"律藏" , "c2":"經分別" , "c3":"巴吉蒂亞" , "c4":"" },

+ 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" },
 
 ];
 

+ 14 - 23
public/app/public/charcode/coverter_my.js

@@ -96,28 +96,16 @@ var char_roman_to_myn = [
 	{ id: "ငော", value: "ငေါ" },
 	{ id: "ဒော", value: "ဒေါ" },
 	{ id: "ပော", value: "ပေါ" },
-	{ id: "ဝော", value: "ဝေါ" },
-	{ id: "ဂာ", value: "ဂါ" }, //g
-	{ id: "ငာ", value: "ငါ" }, //ṅ
-	{ id: "ဒာ", value: "ဒါ" }, //d
-	{ id: "ပာ", value: "ပါ" }, //p
-	{ id: "ဝာ", value: "ဝါ" }, //v
+	{ id: "ဝော", value: "ဝေါ" },//vo
+	{ id: "ဂာ", value: "ဂါ" }, //gā
+	{ id: "ငာ", value: "ငါ" }, //ṅā
+	{ id: "ဒာ", value: "ဒါ" }, //dā
+	{ id: "ပာ", value: "ပါ" }, //pā
+	{ id: "ဝာ", value: "ဝါ" }, //vā
 	{ id: "ဒွာ", value: "ဒွါ" }, //dvā
-	{ id: "1", value: "၁" },
-	{ id: "2", value: "၂" },
-	{ id: "3", value: "၃" },
-	{ id: "4", value: "၄" },
-	{ id: "5", value: "၅" },
-	{ id: "6", value: "၆" },
-	{ id: "7", value: "၇" },
-	{ id: "8", value: "၈" },
-	{ id: "9", value: "၉" },
-	{ id: "0", value: "၀" },
-	{ id: ".", value: "။" },
-	{ id: ";", value: "။" },
-	{ id: ",", value: "၊" },
-	{ id: ",", value: "၊" },
+	
 ];
+
 var char_myn_to_roman_1 = [
 	{ id: "ႁႏၵ", value: "ndra" }, //後加
 
@@ -192,6 +180,7 @@ var char_myn_to_roman_1 = [
 	{ id: "aျ္", value: "ya" },
 	{ id: "aွ္", value: "va" },
 	{ id: "aြ္", value: "ra" },
+	{ id: "aြ", value: "ra" },
 
 	{ id: "ၱ", value: "္ta" }, //后加
 	{ id: "ၳ", value: "္tha" }, //后加
@@ -220,7 +209,8 @@ var char_myn_to_roman_1 = [
 	{ id: "ျ", value: "္ya" }, //后加
 	{ id: "ႅ", value: "္la" }, //后加
 	{ id: "ၼ", value: "္ma" }, //后加
-	{ id: "ွ", value: "္ha" }, //后加
+	{ id: "ွ", value: "္va" }, //后加
+	{ id: "ႇ", value: "္ha" }, //后加
 	{ id: "ႆ", value: "ssa" }, //后加
 	{ id: "ၷ", value: "na" }, //后加
 	{ id: "ၲ", value: "ta" }, //后加
@@ -266,6 +256,7 @@ var char_myn_to_roman_1 = [
 	{ id: "ၪ", value: "ñ" }, //後加
 	{ id: "a္", value: "" }, //後加
 	{ id: "္", value: "" }, //後加
+	{ id: "aံ", value: "aṃ" },
 
 	{ id: "ေss", value: "sse" }, //后加
 	{ id: "ေkh", value: "khe" }, //后加
@@ -462,7 +453,7 @@ var char_myn_to_roman_2 = [
 	{ id: "ိႇ", value: "ႇိ" }, //后加
 
 	{ id: "ျ", value: "္ra" }, //后加
-	{ id: "ွ", value: "္ha" }, //后加
+	{ id: "ွ", value: "္va" }, //后加
 	{ id: "ှ", value: "္ha" }, //后加
 	{ id: "ႇ", value: "္ha" }, //后加
 	{ id: "ြ", value: "္va" }, //后加
@@ -493,7 +484,7 @@ var char_myn_to_roman_2 = [
 	{ id: "်", value: "္ya" }, //后加
 	{ id: "ႅ", value: "္la" }, //后加
 	{ id: "ၼ", value: "္ma" }, //后加
-	{ id: "ွ", value: "္ha" }, //后加
+	{ id: "ွ", value: "္va" }, //后加
 	{ id: "ၲ", value: "ta" }, //后加
 
 	{ id: "ႆ", value: "ssa" }, //后加

+ 5 - 3
public/app/public/charcode/myanmar.js

@@ -180,6 +180,7 @@ var char_myn_to_roman_1 = [
 	{ id: "aျ္", value: "ya" },
 	{ id: "aွ္", value: "va" },
 	{ id: "aြ္", value: "ra" },
+	{ id: "aြ", value: "ra" },
 
 	{ id: "ၱ", value: "္ta" }, //后加
 	{ id: "ၳ", value: "္tha" }, //后加
@@ -208,7 +209,8 @@ var char_myn_to_roman_1 = [
 	{ id: "ျ", value: "္ya" }, //后加
 	{ id: "ႅ", value: "္la" }, //后加
 	{ id: "ၼ", value: "္ma" }, //后加
-	{ id: "ွ", value: "္ha" }, //后加
+	{ id: "ွ", value: "္va" }, //后加
+	{ id: "ႇ", value: "္ha" }, //后加
 	{ id: "ႆ", value: "ssa" }, //后加
 	{ id: "ၷ", value: "na" }, //后加
 	{ id: "ၲ", value: "ta" }, //后加
@@ -451,7 +453,7 @@ var char_myn_to_roman_2 = [
 	{ id: "ိႇ", value: "ႇိ" }, //后加
 
 	{ id: "ျ", value: "္ra" }, //后加
-	{ id: "ွ", value: "္ha" }, //后加
+	{ id: "ွ", value: "္va" }, //后加
 	{ id: "ှ", value: "္ha" }, //后加
 	{ id: "ႇ", value: "္ha" }, //后加
 	{ id: "ြ", value: "္va" }, //后加
@@ -482,7 +484,7 @@ var char_myn_to_roman_2 = [
 	{ id: "်", value: "္ya" }, //后加
 	{ id: "ႅ", value: "္la" }, //后加
 	{ id: "ၼ", value: "္ma" }, //后加
-	{ id: "ွ", value: "္ha" }, //后加
+	{ id: "ွ", value: "္va" }, //后加
 	{ id: "ၲ", value: "ta" }, //后加
 
 	{ id: "ႆ", value: "ssa" }, //后加

+ 17 - 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: "ᨶᩮᩣ᩠ᨶ" },
@@ -81,6 +83,7 @@ var char_roman_to_tai = [
 	{ id: "vro", value: "ᩅᩮ᩠ᩕᩣ" },
 	{ id: "vyo", value: "ᩅᩮ᩠ᨿᩣ" },
 	{ id: "yho", value: "ᨿᩮ᩠ᩉᩣ" },
+	{ id: "mho", value: "ᨾᩮ᩠ᩉᩣ" },
 	{ id: "yro", value: "ᨿᩮ᩠ᩕᩣ" },
 	{ id: "yvo", value: "ᨿᩮ᩠ᩅᩣ" },
 	{ id: "yyo", value: "ᨿᩮ᩠ᨿᩣ" },
@@ -97,11 +100,12 @@ var char_roman_to_tai = [
 	{ id: "rhe", value: "ᩁᩮ᩠ᩉ" },
 	{ id: "vhe", value: "ᩅᩮ᩠ᩉ" },
 	{ id: "yhe", value: "ᨿᩮ᩠ᩉ" },
+	{ id: "mhe", value: "ᨾᩮ᩠ᩉ" },
 	{ id: "jje", value: "ᨩᩮ᩠ᨩ" },
 	{ 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 +184,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 +228,7 @@ var char_roman_to_tai = [
 { id: "ᩘ ", value: "ᩘ" },
 { id: "ᨷ᩠ᨷᩤ", value: "ᨷ᩠ᨷᩣ" },
 { id: "ᨲ᩠ᩅᩤ", value: "ᨲ᩠ᩅᩣ" },
+{ id: "ᩈ᩠ᩅᩤ", value: "ᩈ᩠ᩅᩣ" },
 { id: "ᩮ᩠ᨷᩤ", value: "ᩮ᩠ᨷᩣ" },
 
 
@@ -287,6 +294,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" },
@@ -314,6 +322,7 @@ var char_tai_to_roman = [
 	{ id: "ᩅᩮ᩠ᩕᩣ", value: "vro" },
 	{ id: "ᩅᩮ᩠ᨿᩣ", value: "vyo" },
 	{ id: "ᨿᩮ᩠ᩉᩣ", value: "yho" },
+	{ id: "ᨾᩮ᩠ᩉᩣ", value: "mho" },
 	{ id: "ᨿᩮ᩠ᩕᩣ", value: "yro" },
 	{ id: "ᨿᩮ᩠ᩅᩣ", value: "yvo" },
 	{ id: "ᨿᩮ᩠ᨿᩣ", value: "yyo" },
@@ -330,10 +339,12 @@ var char_tai_to_roman = [
 	{ id: "ᩁᩮ᩠ᩉ", value: "rhe" },
 	{ id: "ᩅᩮ᩠ᩉ", value: "vhe" },
 	{ id: "ᨿᩮ᩠ᩉ", value: "yhe" },
+	{ id: "ᨾᩮ᩠ᩉ", value: "mhe" },
 	{ id: "ᨩᩮ᩠ᨩ", value: "jje" },
 	{ id: "ᨬᩮ᩠ᨩ", value: "ñje" },
 	{ id: "ᨠᩮ᩠ᨠ", value: "kke" },
 	{ id: "ᩘᨠᩮ", value: "ṅke" },
+	{ id: "ᨾᩮᩜ", value: "mmo" },
 	{ id: "ᨾᩮ᩠ᨾ", value: "mme" },
 	{ id: "ᨶᩮ᩠ᨶ", value: "nne" },
 	{ id: "ᨬᩮ᩠ᨬ", value: "ññe" },
@@ -359,6 +370,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 +508,8 @@ var char_tai_to_roman = [
 	{ id: "e᩠ā", value: "o" },
 	{ id: "a᩠", value: "" },
 	{ id: "᩠a", value: "" },
+	{ id: "nrd", value: "ndr" },
+	{ id: "nrt", value: "ntr" },
 
 ];
 

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

@@ -655,6 +655,7 @@
 		"caus": "caus.",
 		"pass": "pass.",
 		"space": "&nbsp;",
+		"channel_type": "channel type",
 		"": ""
 	},
 	"grammastr": [

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

@@ -230,7 +230,7 @@
 		"part": "Factors",
 		"partmeaning": "Factor-Meaning",
 		"password": "Password",
-		"password_again": "Password again",
+		"password_again": "Confirm Password",
 		"past": "Passed ",
 		"pcd_studio": "PCD Studio&nbsp;",
 		"piṭaka": "Piṭaka",
@@ -654,6 +654,7 @@
 		"caus": "caus.",
 		"pass": "pass.",
 		"space": "&nbsp;",
+		"channel_type": "channel type",
 		"": ""
 	},
 	"grammastr": [

+ 411 - 425
public/app/public/lang/my.json

@@ -5,116 +5,105 @@
 		"accessed": "Accessed",
 		"add_to_edit_list": "Add to Edit List",
 		"adhivacana": "Adhivacana",
-		"all": "All",
-		"all_select": "All",
+		"all": "အားလုံး",
 		"all_data!": "All Data!",
 		"all_done": "Looking up accomplished",
 		"allsplit": "Words Splited Successfully ^-^",
-		"and_another": "&nbsp;and ",
 		"append": "Append",
 		"apply": "Apply",
-		"applyto": "Apply to",
-		"arrival_in_detail": "arrival in detail",
+		"applyto": "လျှောက်သည်။တောင်းခံသည်။ကျင့်သုံးသည်။",
 		"asc": "ASC",
-		"atitude": "Atitude",
 		"audio": "Audio",
-		"author": "Author",
+		"author": "Author:",
 		"auto": "AUTO",
-		"auto_fill": "Automatic filling",
+		"auto_fill": "အလိုလျှောက်ဖြည့်ခြင်း",
 		"back": "back",
-		"base_on": "Base on",
-		"BE": "Buddhist Era ",
+		"base_on": "Base on:",
+		"BE": "သာသနာတော်နှစ်",
 		"bhumma": "ဘုမ္မ",
 		"book": "book",
 		"book_mark": "Book Mark",
-		"book_name": "book name&nbsp;",
+		"book_name": "book name",
 		"bookmark": "bookmark...",
 		"buddhist_calendar": "Buddhist Calendar",
 		"budha": "ဗုဓ",
-		"by": "By",
-		"cancel": "ဖျက်သိမ်းသည်",
+		"by": "By:",
+		"cancel": "ပယ်ဖျက်ပါ",
 		"canda": "စန္ဒ",
 		"caption": "Caption",
 		"CE": "CE",
-		"change_position": "change position",
 		"chars": "Chars",
 		"checking": "scanning",
-		"children": "Children",
-		"chinese": "中文",
+		"children": "ကလေးများ",
+		"chinese": "တရုတ်ဘာသာ",
 		"click_on": "Click On",
 		"click_word_to": "click word to ",
 		"code_convert": "Code Convert",
-		"color": "Color",
-		"column_compare": "ပေါ်&nbsp;&&nbsp;အောက်",
+		"color": "အရောင်",
+		"column_compare": "Up&nbsp;&&nbsp;Down",
 		"commentary": "Commentary",
 		"completely_delete": "completely delete",
 		"computer": "Computer",
-		"confirm": "Confirm",
-		"content": "မာတိကာ",
-		"contents": "မာတိကာ",
+        "confirm": "Confirm",
+		"content": "Content",
+		"contents": "Contents",
 		"copy": "copy",
-		"copy_to_clipboard": "copy the link to clipboard",
 		"creat_a_new_file_by_yourself": "Creat a new file by yourself",
 		"created": "Created",
-		"current": "Current",
+		"current": "လက်ရှိ",
 		"database_admin": "Database Admin",
-		"date": "Date ",
-		"day": "&nbsp;",
-		"day_1": "&nbsp;",
-		"days": "&nbsp;day(s) ",
+		"date": "ရက်စွဲ",
+		"day": "",
+		"day_1": "",
+		"days": " နေ့များ ",
 		"debug": "Debug",
-		"delete": "Delete",
-		"departure_in_detail": "departure in detail",
+		"delete": "ဖျက်ပါ",
 		"desc": "DESC",
-		"detaile": "Detail",
-		"dhamma_time": "5000 Years of the Buddha’s Dispensation ",
+		"detaile": "Detaile",
+		"dhamma_time": "ဗုဒ္ဓ သာသနာတော်နှစ် ၅၀၀၀",
 		"dict": "Dict",
 		"dict_match": "Match the Dictionary and Document",
 		"dict_terms": "Terms",
 		"dictionary": "အဘိဓာန်",
 		"dictionary_match_result": "Dictionary Match Result",
-		"dictsouce": "Source of Terms",
-		"difficulty": "difficulty level",
+		"dictsouce": "Dictionary Resouce",
+		"difficulty": "ခက်ခဲမှုအတိုင်းအတာ",
 		"done": "&nbsp;scanned",
-		"down": "Down",
+		"down": "အောက်",
 		"download": "[Download]",
-		"draft": "As Draft",
-		"dawn": "dawn",
-		"each_paragraph": "paragraph",
-		"each_sentence": "ဝါကျကဏ္ဍ",
-		"eat": "eat",
-		"edit": "Edit",
-		"edit_now": "Edit in Studio",
+		"dwan": "အရုဏ်တက်ချိန်",
+		"eat": "စားသည်",
+		"edit": "တည်းဖြတ်ပါ",
+		"edit_now": "Edit Now",
 		"edit1": "Edited By ",
-		"edition": "Edition ",
-		"editor": "Editor",
-		"e_mail": "E-mail",
+		"edition": "Edition: ",
+		"editor": "Editor:",
+		"e-mail": "E-mail",
 		"empty": "Empty",
 		"empty_the_data_below": "Empty the Data Below",
 		"empty_the_recycle_bin": "Empty the Recycle Bin",
 		"empty1": "EMPTY",
-		"english": "English",
+		"english": "အင်္ဂလိပ်ဘာသာ",
 		"export": "Export",
 		"export_csv": "Export CSV",
 		"export_html": "Export HTML",
-		"f_mean": "F-Mean",
 		"factor": "Factor",
 		"factors_input": "input factors by click",
-		"favorite": "favorite",
-		"file_name": "File Name",
+		"file_name": "File Name:",
 		"files": "&nbsp;files",
 		"find_replace": "Find & Replace",
 		"finish": "Finish",
-		"finished": "finished",
+		"finished": "ပြီးပြီ",
+		"f-mean": "F-Mean",
 		"g_mean": "G-Mean",
-		"gama_entry": "entry the village",
-		"gramma": "Grammar",
-		"gramma_case": "Grammar Case",
+		"gama_entry": "ရွာအတွင်းသို့ဝင်သည်",
+		"gramma": "သဒ္ဒါ",
+		"gramma_case": "Gramma Case",
 		"guid_creator": "GUID Creator",
 		"guru": "ဂုရု",
 		"h": "(h)",
 		"half": "half",
-		"heading": "Heading",
+		"heading": "ခေါင်းစဉ်",
 		"heading_1": "Heading 1",
 		"heading_2": "Heading 2",
 		"heading_3": "Heading 3",
@@ -131,11 +120,10 @@
 		"heading_lv6": "Heading Lv6",
 		"heading_lv7": "Heading Lv7",
 		"heading_lv8": "Heading Lv8",
-		"hidden": "hide",
+		"hidden": "hidden",
 		"home": "Home",
-		"hori_ref_time": "horizontal refraction correct ",
 		"html_text_data": "HTML Text Data",
-		"import": "Import ",
+		"import": "Import",
 		"import_csv": "Import CSV",
 		"import_export": "Import/Export",
 		"import_the_flie_from_cscd": "Import the flie From Cattha Sangayana data base",
@@ -147,122 +135,117 @@
 		"input": "input",
 		"kala": "ကာလ",
 		"keywords": "Keywords",
-		"language": "ဘာသာ",
-		"language_select": "ဘာသာ",
+		"language": "Language:",
 		"layout": "Layout",
-		"left": "Remains ",
-		"lesson": "သင်တန်း",
+		"left": "Remains",
+		"lesson": "lesson",
 		"letters": "&nbsp;letters",
 		"level": "Lv",
 		"list": "List",
-		"load": "Load",
+		"load": "ထည့်သွင်း",
 		"load_from_database": "Load From Database",
 		"load_from_wbw_file": "Load From WBW File",
-		"loading": "loading…",
+		"loading": "အလုပ်လုပ်နေသည်",
 		"loading_dictionary_list...": "loading Dictionary List...",
-		"lock": "Lock",
-		"login": "Login",
-		"logout": "Logout",
-		"longitude": "Longitude",
+		"lock": "သော့ခတ်ပါ",
+		"login": "ဝင်မည်",
+		"logout": "ထွက်မည်",
 		"magic_dict": "Magic Dict",
 		"magic_gap": "Magic Gap",
 		"magic_split": "Magic Split",
 		"magic_terms": "Magic Terms",
 		"main_code": "Main&nbsp;Code",
-		"mark": "Mark",
+		"mark": "အမှတ်အသား",
 		"māsa": "မာသ",
 		"match_end": "Document update over,Degree of Perfection",
 		"matched": "Matched",
 		"max": "Max",
-		"meaning": "Meaning",
+		"meaning": "အဓိပ္ပာယ်",
 		"meaning_input": "input meanings by click",
 		"message": "message",
-		"min": "min",
-		"mins": "(min)",
+		"min": "(min)",
 		"mobile": "Mobile",
 		"modified": "Modified",
 		"modify": "Modify",
 		"modifyok": "Modified ",
-		"month": "Month ",
-		"month_1": "- ",
-		"months": "&nbsp;month(s) ",
+		"month": "",
+		"month_1": "-",
+		"months": " လများနှင့် ",
 		"more": "more",
 		"my_book": "My Book",
 		"my_dictionary": "My Dictionary",
 		"my_document": "My Document",
-		"my_loc": "အတ္တသ္မိံ",
-		"name": "Name",
-		"need_inform": "without informing other Bhikkhu ",
-		"new": "New",
-		"new_account": "New Account",
-		"new_project": "New Word by Word Analysis",
+		"name": "အမည်",
+		"need_inform": "အခြားရဟန်းများအား အသိမပေးဘဲ ",
+		"new": "အသစ်",
+		"new_account": "အကောင့်အသစ်",
+		"new_project": "New Project",
 		"new_revision": "New Revision",
 		"new_technic_term": "New Technic Term",
 		"newheading": "Text Editor",
-		"newproject": "New Project",
-		"newword": "New Word",
-		"night": "Night",
+		"newproject": "စနစ်သစ်",
+		"newword": "စကားလုံးအသစ်",
+		"night": "",
 		"no.": "No.",
 		"no_related_file": "No related file",
-		"no_string": "cannot ",
+		"no_string": "မလုပ်နိုင်ပါ ",
 		"nofilename": "No File Name",
 		"noon_time": "မဇ္ဈန္ဟိက",
 		"normal": "Normal",
-		"note": "Note",
+		"note": "မှတ်စု",
 		"now_time": "ပစ္စုပ္ပန္န",
 		"num_k": "K",
 		"num_m": "M",
-		"ok": "OK",
+		"ok": "အိုကေ",
 		"order_by": "Order By",
-		"other": "Other&nbsp;",
+		"other": "Other",
 		"other_meaning": "other meaning",
-		"otherdict": "Other Dictionary",
-		"pa_auk_dictionary": "Pa-auk Dictionary",
+		"otherdict": "အခြားအဘိဓာန်",
+		"pa-auk_dictionary": "Pa-auk Dictionary",
 		"pacchā_māsa": "ပစ္ဆာ-မာသ",
-		"pakkha": "Lunar Phases ",
-		"pāli": "ပါဠိ",
-		"pali_canon": "တိပိဋက",
+		"pakkha": "Lunar Phases",
+		"pāli": "Pāli",
+		"pali_canon": "ပါဠိတော်",
 		"pāli_code": "Pāli Code",
-		"para": "&nbsp;Paragraphs",
+		"para": " စာပိုဒ်များ",
 		"paragraph": "Paragraph",
-		"parent": "Parent",
+		"parent": "မိဘ",
 		"parent_input": "input parent by click",
-		"part": "Factors",
+		"part": "တစ်စိတ်တစ်ပိုင်း",
 		"partmeaning": "Factor-Meaning",
-		"password": "Password",
-		"password_again": "Password again",
-		"past": "Passed ",
+		"password": "စကားဝှက်",
+		"password_again": "Confirm Password",
+		"past": "Passed",
 		"pcd_studio": "PCD Studio&nbsp;",
 		"piṭaka": "Piṭaka",
 		"plugin": "Plugin",
-		"poweredby": "Powered by PCSD  build27-Jul-2018",
+		"poweredby": "Powered by PCSD   build:27-Jul-2018",
 		"preview": "preview",
 		"print": "Print",
 		"print_preview": "Print Preview",
-		"product": "translation words",
+		"product": "စကားလုံးများကို ဘာသာပြန်ခြင်း",
 		"project": "Project",
 		"protection": "Protection【en】",
 		"pubba_māsa": "ပုဗ္ဗ-မာသ",
 		"publish": "Publish",
 		"ravi": "ရဝိ",
-		"read": "စာဖတ်",
-		"read_only": "Read Only",
+		"read": "ဖတ်မည်",
+		"read_only": "ဖတ်ရုံသာ",
 		"recent_scan": "Recent Scan",
 		"recycle_bin": "Recycle Bin",
-		"ref_dict": "Dictionary",
+		"ref_dict": "အဘိဓာန်",
 		"refresh": "Refresh",
-		"relation": "အတ္ထယောဇနာ",
 		"remove": "Remove",
-		"removeword": "Slur Factor Removed",
+		"remove//new": "Remove//new",
+		"removeword": "sandhi Factor Removed",
 		"render": "Render",
-		"repeat": "Repeat Quotiety ",
+		"repeat": "Repeat Quotiety: ",
 		"resource": "Resource",
 		"revision": "Revised By ",
 		"revision_mode": "Revision Mode",
-		"round_1": "Round ",
+		"round_1": "အကြိမ် ",
 		"round_2": "&nbsp;dictionary",
-		"row_compare": "ဘယ်&nbsp;&&nbsp;ညာ",
-		"same_word": "same words",
+		"row_compare": "Left&nbsp;&&nbsp;Right",
 		"saṃvacchara": "သံဝစ္ဆရ",
 		"sandhi": "Sandhi",
 		"sandhi_begin": "Sandhi Begin",
@@ -270,170 +253,168 @@
 		"sandhi_end": "Sandhi End",
 		"sandhi_orginal_word": "Sandhi Orginal Word",
 		"sandhi_splited_word": "Sandhi Splited Word",
-		"save": "သိမ်းထားသည",
+		"save": "သိမ်းမည်",
 		"script": "Script",
 		"search": "Search",
-		"season": "Season ",
-		"sec": "sec ",
-		"sent_trans": "Translate of Sentence",
+		"season": "ရာသီ",
+		"sec": "sec",
+		"sent_trans": "စာကြောင်းကို ဘာသာပြန်ပါ",
 		"sentence": "Sentence",
 		"sentence_by_sentence": "Sentence By Sentence",
+		"serach": "serach",
 		"setting": "Setting",
 		"share": "share",
 		"shared": "shared",
-		"show": "Show",
+		"show": "ပြပါ:",
 		"similar_words": "Similar Words",
 		"size": "size",
 		"smart_spell": "smart spell",
 		"sora": "သောရ",
 		"source": "Source",
-		"spell": "spell",
+		"spell": "စာလုံးပေါင်းပါ:",
 		"statistical_data": "statistical data",
 		"style": "Style",
 		"sub_pcode": "Sub&nbsp;Code",
-		"subversion": "Subversion",
-		"success": "&nbsp;Words Successfully",
-		"successful": "Successful",
+		"subversion": "Subversion:",
+		"success": " Words Successfully",
+		"successful": "အောင်မြင်သော",
 		"sukka": "သုက္က",
-		"sun_height_degree": "Max solar altitude ",
 		"system_default": "System Default",
 		"system_dictionary": "System Dictionary",
 		"tag": "tag",
 		"templet": "Templet",
-		"terms_system": "Terms System",
-		"thischapter": "This Chapter",
-		"time": "Time",
+		"thischapter": "ဤအခန်း",
+		"time": "time",
 		"title": "title&nbsp;",
 		"to_the_dhamma": "&nbsp;to the Dhamma&nbsp;",
-		"today": "Today ",
+		"today": "ယနေ့ ",
 		"toDB": "To User Database",
 		"tools": "Tools",
 		"total": "Total&nbsp;",
 		"total_workload": "total workload",
 		"totally": "Totally ",
-		"tran_workload": "whole passage translate ",
-		"translate": "စကားပြန်",
+		"tran_workload": "whole passage translate: ",
+		"translate": "ဘာသာပြန်သည်",
 		"translate_convert": "Translate Convert",
-		"translate1": "Translated By ",
+		"translate1": "ဘာသာပြန်ပြီး",
 		"translation": "Translation",
 		"translation_templet": "Translation Templet",
 		"twilight_time": "အရုဏုဂ္ဂမန",
 		"undo_shared": "undo shared",
-		"unsplit": "Slur Splited",
-		"up": "Up",
-		"up_and_down": "ပေါ် And အောက်",
+		"unsplit": "sandhi Splited",
+		"up": "အထက်",
+		"up_and_down": "အထက်နှင့်အောက်",
 		"update_all_wbw_to_database": "Update All WBW to Database",
 		"user": "User",
-		"to_user_dictionary": "သိမ်းထားသည & Add to My Vocabulary List",
+		"user_dictionary": "User Dictionary",
 		"user_id": "User ID",
-		"userdict": "Vocabulary List",
+		"userdict": "User Dictionary",
 		"vannana": "vaṇṇanā",
-		"view": "View",
+		"view": "မြင်ကွင်း",
 		"vikala": "ဝိကာလ",
-		"vocabulary": "Vocabulary ",
-		"wbw": "Word by Word Analysis",
-		"week": "(week)",
-		"week_day": "Day",
+		"vocabulary": "ဝေါဟာရ: ",
+		"wbw": "တစ်လုံးချင်းစီအတွက်သုံးသပ်ချက်",
+		"week": "(ရက်သတ္တပတ်)",
+		"week_day": "နေ့",
 		"welcome": "Welcome&nbsp;",
-		"white": "White",
+		"white": "အဖြူ",
 		"wiki_term": "Wiki Term",
 		"with_title": "With Title",
 		"wizard": "Wizard",
 		"wizard_my_book": "Wizard -> My Book",
 		"word_base": "Word base",
 		"word_by_word": "Word by Word",
-		"word_gramma_statistics": "Word & Grammar Statistics",
+		"word_gramma_statistics": "Word & Gramma Statistics",
 		"word_length": "average word length",
 		"word_list": "Word List",
 		"word_note": "Word Note",
-		"word_selection_apply_to": "Word Selection Apply to",
+		"word_selection_apply_to": "Word Selection Apply to:",
 		"wordmap": "Word Tree",
-		"wordnum": "Text Amount ",
+		"wordnum": "Text Amount: ",
 		"words": "&nbsp;words",
-		"wordtype": "Word Type",
+		"wordtype": "စကားလုံးအမျိုးအစား",
 		"workload": "workload",
 		"xml_data": "XML Data",
-		"year": "(year)",
-		"year_0": "year",
-		"year_1": "- ",
-		"years": "&nbsp;year(s) ",
-		"yes_string": "can ",
-		"continue": "continue",
-		"account": "Username",
-		"new_to_wikipali": "New to Wikipāḷi",
-		"create_account": "Create an account",
-		"have_account": "I have account",
-		"join_wikipali": "Join wikipāḷi",
-		"pali_literature_platform": "Platform for Editing Pāḷi Literature",
-		"nick_name": "nickname",
-		"name_for_show": "name showed for others",
-		"email_address": "E-mail address",
-		"account_demond": "Username may only contain alphanumeric lower case characters, and try to avoid using ? : ! ; , -  etc.",
-		"password_demond": "Make sure it's at least 5 characters including both numbers and letters",
-		"login_with_google": "Log in with Google",
-		"login_with_facebook": "Log in with Facebook",
-		"login_with_wechat": "Log in with WeChat",
-		"loged_out": "has loged out",
-		"online_dict_db": "Online Search for Pāḷi",
-		"user_data_share": "Editing & Sharing as Open Source",
-		"cooperate_edit": "Multi-translator Collaboration",
-		"cannot_empty": "&nbsp;cannot be empty",
-		"account_existed": "Username is already existed",
-		"incorrect_ID_PASS": "Incorrect Username or password.",
-		"sync": "synchron",
-		"restore": "restore",
-		"group": "group",
-		"add_folder": "new folder",
-		"add_to_folder": "add to folder",
-		"rename": "rename",
-		"collaborate": "collaborate",
+		"year": "(နှစ်)",
+		"year_1": "-",
+		"years": " နှစ်များ ",
+		"yes_string": "လုပ်နိုင်သည် ",
+		"continue": "ဆက်လက်၍သွားသည်၊ သွားစေသည်။",
+		"account": "အကောင့်အမည် ",
+		"new_to_wikipali": "Wikipāḷi အတွက် အသစ်",
+		"create_account": "အကောင့်တစ်ခုဖန်တီးသည်",
+		"have_account": "ကျွနုပ်မှာအကောင့်ရှိတယ်။",
+		"join_wikipali": "wikipāḷi သို့ ဆက်သွယ်ပါ။",
+		"pali_literature_platform": "Pali စာပေကို တည်းဖြတ်ရန် ပလပ်ဖောင်း/နေရာ",
+		"nick_name": "အမည်ပြောင်",
+		"name_for_show": "တစ်ခြားသူတွေကိုပြရန် အမည်",
+		"email_address": " အီးမေး လိပ်စာ",
+		"account_demond": "အသုံးပြုသူအမည်တွင် အက္ခရာဂဏန်းအသေးစာလုံးများသာ ပါဝင်နိုင်ပြီး  ? : ! ; , - စသည်တို့အသုံးမပြုရန် ကြိုးစားပါ။",
+		"password_demond": "နံပါတ်များနှင့် စာလုံးများအပါအဝင် အနည်းဆုံး စာလုံး 5 လုံးရှိရန် သေချာပါစေ။",
+		"login_with_google": "Google ဖြင့် အကောင့်ဝင်ပါ။",
+		"login_with_facebook": "Facebook ဖြင့် အကောင့်ဝင်ပါ။",
+		"login_with_wechat": "WeChat ဖြင့် အကောင့်ဝင်ပါ။",
+		"loged_out": "အကောင့်ထွက်သွားပြီ",
+		"online_dict_db": "Pāḷi အတွက် အွန်လိုင်းရှာဖွေမှု",
+		"user_data_share": "Open Source အဖြစ် တည်းဖြတ်ခြင်းနှင့် မျှဝေခြင်း",
+		"cooperate_edit": "ဘာသာပြန်သူပေါင်းစုံ ပူးပေါင်းဆောင်ရွက်ခြင်း",
+		"cannot_empty": "&nbsp;ဗလာမဖြစ်ရပါ။",
+		"account_existed": "အသုံးပြုသူအမည်သည် ရှိနှင့်ပြီးဖြစ်သည်။",
+		"incorrect_ID_PASS": "အသုံးပြုသူအမည် သို့မဟုတ် စကားဝှက် မမှန်ကန်ပါ။",
+		"sync": "အချိန်ကိုက်။ တစ်ပြိုင်တည်း။ ",
+		"restore": "ပြန်လည်ရယူပါ။",
+		"group": "အဖွဲ့",
+		"add_folder": "ဖိုင်တွဲအသစ်",
+		"add_to_folder": "ဖိုဒါသို့ထည့်ပါ။",
+		"rename": "အမည်ပြောင်း",
+		"collaborate": "ပူးပေါင်းပါ။",
 		"help": "အကူအညီ",
-		"function_introduce": "functions of Wikipāḷi",
-		"vedio_link": "vedio link",
-		"project_introduce": "conference of pāḷi-translating platform",
-		"help_doc": "Help document",
-		"code_add": "View and download code",
-		"test_declare": "This website version is only for function test, there's no garantee for the users’ personal data as so far.",
-		"project_introduce_inbrief": "The general idea of Pali Canon translation project",
-		"start": "Let’s start",
-		"wikipali_suite": "wikipali Suite",
-		"encyclopedia": "Pāḷipedia",
-		"txt_search": "Text Search",
-		"title_search": "Title Search",
-		"dict_builder": "PCD Dict-Builder",
-		"classroom": "Course",
-		"filter": "filter",
-		"result": "results",
-		"find_about": "about&nbsp;",
-		"presented_in": "presented&nbsp;in&nbsp;",
-		"books": "&nbsp;books",
-		"times": "&nbsp;times",
-		"not_login": "login now",
-		"database": "database",
-		"open_with": "open with",
-		"reader": "wikipāli reader",
-		"folk": "folk",
+		"function_introduce": "Wikipāḷi ၏လုပ်ဆောင်ချက်များ",
+		"vedio_link": "ဗီဒီယိုလင့်ခ်",
+		"project_introduce": "ပါဠိ ဘာသာပြန်ပလပ်ဖောင်း၏ ဆွေးနွေးပွဲ",
+		"help_doc": "အကူအညီစာရွက်စာတမ်း",
+		"code_add": "ကုဒ်ကိုကြည့်ရှုပြီး ဒေါင်းလုဒ်လုပ်ပါ။",
+		"test_declare": "ဤဝဘ်ဆိုဒ်ဗားရှင်းသည် လုပ်ဆောင်ချက်စမ်းသပ်ရန်အတွက်သာဖြစ်ပြီး၊ ယခုအချိန်အထိ သုံးစွဲသူများ၏ ကိုယ်ရေးကိုယ်တာဒေတာအတွက် အာမခံချက်မရှိပါ။",
+		"project_introduce_inbrief": "ပါဠိကျမ်းဂန်ဘာသာပြန်ပရောဂျက်၏ ယေဘုယျအယူအဆ",
+		"start": "စလိုက်ရအောင်",
+		"wikipali_suite": "wikipali အစုံ/အစု",
+		"encyclopedia": "ပါဠိစွယ်စုံကျမ်း",
+		"txt_search": "စာသားရှာဖွေမှု",
+		"title_search": "ခေါင်းစဉ်ရှာဖွေမှု",
+		"dict_builder": "PCD Dict- တည်ထောင်သူ",
+		"classroom": "သင်တန်း",
+		"filter": "စစ်ထုတ်ခြင်း/စစ်ထုတ်ကိရိယာ",
+		"result": "ရလဒ်။ အကျိုး။",
+		"find_about": "အကြောင်း&nbsp;",
+		"presented_in": "တင်ပြခဲ့သည်&nbsp;in&nbsp;",
+		"books": "&nbsp;စာအုပ်များ",
+		"times": "&nbsp;အချိန်များ",
+		"not_login": "ယခုအကောင့်ဝင်ရောက်ပါ။",
+		"database": "ဒေတာအချက်အလက်",
+		"open_with": "ဖြင့်ဖွင့်ပါ။",
+		"reader": "wikipāli စာဖတ်သူ",
+		"folk": "လူထု။ လူတို့။",
 		"and": "&nbsp;and&nbsp;",
-		"digest": "digest",
-		"composition": "composition&nbsp;",
-		"corpus_statistics": "corpus statistics",
-		"studio": "Studio",
-		"library": "Library",
-		"turbo_split": "Turbo Split",
-		"full_text": "full text",
-		"word_weight": "weightiness of this word",
-		"characters": "characters",
-		"real_declension": "reality of declensions",
-		"forms": "spelling forms",
-		"add_to": "add to",
-		"undone_function": "unfinished function",
-		"click_to_chart": "click to check the chart",
-		"frequency": "Frequency",
-		"declension_list": "Declension List",
-		"distribution": "Distribution Chart",
-		"statistical": "statistical&nbsp;",
-		"chart": "chart",
-		"in": "present in",
+		"digest": "အတိုချုပ်။အကျဉ်း။",
+		"composition": "ဖွဲ့စည်းမှု&nbsp;",
+		"corpus_statistics": "corpus ကိန်းဂဏန်းများ",
+		"studio": "စတူဒီယို",
+		"library": "စာကြည့်တိုက်",
+		"turbo_split": "Turbo ခွဲပါ။",
+		"full_text": "စာသားအပြည့်အစုံ",
+		"word_weight": "ဤစကားလုံး​၏လေးနက်မှု",
+		"characters": "အက္ခရာ။ စာလုံး။",
+		"real_declension": "ယုတ်မာခြင်း၏အဖြစ်မှန်",
+		"forms": "စာလုံးပေါင်းပုံစံများ",
+		"add_to": "ထည့်သည်",
+		"undone_function": "မပြီးဆုံးသေးသောလုပ်ဆောင်ချက်",
+		"click_to_chart": "ဇယားကို စစ်ဆေးရန် နှိပ်ပါ။",
+		"frequency": "အကြိမ်ရေ",
+		"declension_list": "Declension စာရင်း",
+		"distribution": "ဖြန့်ဝေဇယား",
+		"statistical": "ကိန်းဂဏန်း&nbsp;",
+		"chart": "ဇယား",
+		"in": "ပစ္စုပ္ပန်",
 		"present": "",
 		"sutta": "သုတ္တ",
 		"vinaya": "ဝိနယ",
@@ -442,218 +423,223 @@
 		"mula": "မူလ",
 		"atthakatha": "အဋ္ဌကထာ",
 		"tika": "ဋီကာ",
-		"times2": "times",
-		"co_doc": "Collaborative Document",
-		"open": "Open&nbsp;",
-		"general": "General",
-		"username": "Login ID",
-		"change_password": "change the password",
-		"ignore": "ignore",
-		"oversize_to_load": "unable to load due to oversize, please reduce the articles range",
-		"page_end": "The End of The Page",
-		"academy": "Academy",
-		"interface": "interface",
-		"preference": "preference",
-		"appearance": "appearance",
-		"theme": "theme",
-		"first_choice_word": "first-choice term",
-		"pali_word": "pali word",
-		"required": "required",
-		"optional": "optional",
-		"comment": "comments",
-		"my_term": "my term",
-		"scan_in_reader": "scan in reader",
+		"times2": "အချိန်များ",
+		"co_doc": "ပူးပေါင်းဆောင်ရွက်စာရွက်စာတမ်း",
+		"open": "ဖွင့်&nbsp;",
+		"general": "အထွေထွေ",
+		"username": "အကောင့်ဝင်ရန် ID",
+		"change_password": "စကားဝှက်ကိုပြောင်းပါ။",
+		"ignore": "လျစ်လျူရှု",
+		"oversize_to_load": "အရွယ်အစားကြီးခြင်းကြောင့် တင်၍မရပါ၊ ကျေးဇူးပြု၍ ဆောင်းပါးများ အပိုင်းအခြားကို လျှော့ချပါ။",
+		"page_end": "စာမျက်နှာ၏အဆုံး",
+		"academy": "အထူးပညာရပ်သင်ကျောင်း၊ တက္ကသိုလ်။ အနုပညာ၊ သိပ္ပံ စသည် (တော်ဝင်) အသင်းအဖွဲ့။",
+		"interface": "ကြားခံဆက်သွယ်ပေးသည့် နည်းစနစ်။",
+		"preference": "နှစ်သက် မှု။ လိုလားမှု။ စိတ်ဝင်စားမှု။ ဦးစားပေးမှု။ အကြိုက်ဆုံးအရာ။",
+		"appearance": "ရောက်လာခြင်း။ ရောက်ရှိလာခြင်း။ ပေါ်လာခြင်း။ပုံပန်း။",
+		"theme": "အဓိကဆိုလိုရင်း။ အာဘော်။",
+		"first_choice_word": "ပထမရွေးချယ်မှုသက်တမ်း",
+		"pali_word": "ပါဠိစကားလုံး",
+		"required": "လိုအပ်သည်။",
+		"optional": "ရွေးချယ်ခွင့်",
+		"comment": "မှတ်ချက်များ",
+		"my_term": "ကျွနုပ်အခေါ်အဝေါ်",
+		"scan_in_reader": "စာဖတ်သူတွင်စကင်န်ဖတ်ပါ။",
 		"selected": "မှတ်ပါ",
-		"to_be_selected": "to be selected",
-		"text_without_title": "text without title",
-		"end_of_text": "No Prev",
-		"begin_of_text": "No Next",
-		"chapter_select": "Please choose a chapter in the left sidebar",
+		"to_be_selected": "ရွေးချယ်ခံရရန်",
+		"text_without_title": "ခေါင်းစဉ်မပါသောစာသား",
+		"end_of_text": "ကြိုတင်မရှိပါ။",
+		"begin_of_text": "နောက်ထပ်မရှိပါ။",
+		"chapter_select": "ဘယ်ဘက်ဘေးဘားရှိ အခန်းတစ်ခန်းကို ရွေးပါ။",
 		"kala_pakkha": "ကာဠပက္ခ",
 		"sukka_pakkha": "သုက္ကပက္ခ",
-		"com_dict": "Community Dictionary",
-		"contributor": "contributor",
-		"interface_language": "interface language",
-		"translation_language": "languages of translation",
-		"magic_dict_language": "languages of dictionary",
-		"priority": "priority",
-		"no_need": "no need",
-		"not_started": "not yet start",
-		"in_progress": "in progress",
-		"already_over": "already over",
-		"revise": "revise",
-		"relational_map": "relational map",
-		"pp": "past participle",
-		"prp": "present participle",
-		"fpp": "Future Passive Participle",
-		"new_lesson": "Add a new lesson",
-		"sub_title": "subtitle",
-		"introduction": "introduction",
-		"speaker": "speaker",
-		"notice_live": "notice of live broadcast",
-		"record_replay": "record & replay",
-		"time_arrange": "time arrangement",
-		"duration": "duration",
-		"attachment": "attachment",
-		"submit": "submit",
-		"create_course": "create course",
-		"created_time": "created time",
-		"modified_time": "modified time",
-		"num_of_hit": "num of hits",
-		"all_courses": "all courses",
-		"num_of_played": "Video Views",
-		"recent_update": "recent update",
-		"course_begin": "course starting time",
-		"num_of_lesson": "num of lesson periods",
-		"signed_up": "signed up",
-		"sign_up": "sign up",
-		"watch": "watch",
-		"watched": "watched",
-		"send": "send",
-		"accept_copy": "accept & copy",
-		"with_idea": "I have an idea…",
-		"text_num": "No. of text",
-		"copied_to_clipboard": "has been copied to clipboard.",
-		"I_know": "Got it!",
-		"text": "text&nbsp;",
-		"anthology": "anthology ",
-		"channel": "channel & style",
-		"channels": "channels list",
-		"like": "like",
-		"blank": "blank",
-		"vocabulary_list": "words list",
-		"private": "private",
-		"private_note": "No URL for others,Unshown in Subscriber feed, search & related",
-		"unlisted": "unlisted",
-		"unlisted_note": "Can share URL,Unshown in Subscriber feed, search & related",
-		"public": "public",
-		"public_note": "Can share URL,Shows in Subscriber feed, search & related",
-		"copy_link": "copy the Link",
-		"copy_share_link": "copy share link",
-		"saved": "saved ",
-		"title_necessary": "title is necessary",
-		"example": "for example ",
-		"privacy": "privacy",
-		"new_composition": "new composition",
-		"add": "add&nbsp;",
-		"completed": "completed",
-		"ongoing": "ongoing",
-		"popular": "popular",
-		"recommendation": "recommendation",
-		"collection": "collection",
-		"rates": "rates",
-		"updated": "updated",
-		"my_zone": "my zone",
-		"share_to": "share&nbsp;to",
+		"com_dict": " လူထု အဘိဓာန်။ ",
+		"contributor": "ပံ့ပိုးကူညီသူ",
+		"interface_language": "ကြားခံဆက်သွယ်ပေးသည့်ဘာသာစကား။",
+		"translation_language": "ဘာသာပြန်ဘာသာစကားများ",
+		"magic_dict_language": "အဘိဓာန်ဘာသာစကားများ",
+		"priority": "ဦးစားပေး",
+		"no_need": "မလိုပါဘူး",
+		"not_started": "မစသေးပါ။",
+		"in_progress": "ဆောင်ရွက်ဆဲဖြစ်သည်",
+		"already_over": "ပြီးသွားပြီ",
+		"revise": "ပြန်လည်ပြင်ဆင်ပါ။",
+		"relational_map": "ဆက်စပ်မြေပုံ",
+		"pp": "အတိတ်အပိုင်း",
+		"prp": "လက်ရှိပါဝင်မှု",
+		"fpp": "အနာဂတ် Passive Participle",
+		"new_lesson": "သင်ခန်းစာအသစ်တစ်ခုထပ်ထည့်ပါ။",
+		"sub_title": "စာတန်းထိုး",
+		"introduction": "မိတ်ဆက်",
+		"speaker": "ဟောသူ။ ပြောသူ။ ",
+		"notice_live": "တိုက်ရိုက်ထုတ်လွှင့်မှု အသိပေးချက်",
+		"record_replay": "မှတ်တမ်းတင်ပြီး ပြန်ဖွင့်ပါ။",
+		"time_arrange": "အချိန်အစီအစဉ်",
+		"duration": "ကြာချိန်",
+		"attachment": "ဆက်နွှယ်ပတ်သက်မှု။ ဆက်စပ်မှု။",
+		"submit": "တင်ပြပါ။",
+		"create_course": "သင်တန်းဖန်တီးပါ။",
+		"created_time": "ဖန်တီးချိန်",
+		"modified_time": "ပြုပြင်ထားသောအချိန်",
+		"num_of_hit": "တိုက်သည်။ ထိသည်။ မှန်သည်။စသည့်အရေအတွက်",
+		"all_courses": "သင်တန်းများအားလုံး",
+		"num_of_played": "ဗီဒီယိုကြည့်ရှုမှုများ",
+		"recent_update": "လတ်တလော အပ်ဒိတ်/ လတ်တလော အခြေအနေ။ ",
+		"course_begin": "သင်တန်းစမည့်အချိန်",
+		"num_of_lesson": "သင်ခန်းစာကာလ အရေအတွက်",
+		"signed_up": "အကောင့်ဖွင့်ပါ။",
+		"sign_up": "အကောင့်ဖွင့်ပါ။",
+		"watch": "ကြည့်ရှုသည်",
+		"watched": "ကြည့်ရှုခဲ့သည်",
+		"send": "ပို့သည်",
+		"accept_copy": "လက်ခံသည် နှင့်  ကူးယူသည်",
+		"with_idea": "ကျွနုပ်မှအကြံတစ်ခုရှိတယ်...",
+		"text_num": "စာသားနံပါတ်",
+		"copied_to_clipboard": "ကလစ်ဘုတ်သို့ ကူးယူထားသည်။",
+		"I_know": "နားလည်ပြီ!",
+		"text": "စာသား&nbsp;",
+		"anthology": "ကဗျာစာအုပ်",
+		"channel": "ချန်နယ် & စတိုင်",
+		"channels": "ချန်နယ်များစာရင်း",
+		"like": "ကြိုက်သည်။",
+		"blank": "ဗလာ",
+		"vocabulary_list": "စကားလုံးများစာရင်း",
+		"private": "သီးသန့်",
+		"private_note": "အခြားသူများအတွက် URL မရှိပါ၊ စာရင်းသွင်းသူဖိဒ်တွင် မပြပါ၊ ရှာဖွေမှုနှင့် ဆက်စပ်မှု",
+		"unlisted": "စာရင်းမဝင်",
+		"unlisted_note": "URL၊ စာရင်းသွင်းသူဖိဒ်တွင် မပြဘဲ၊ ရှာဖွေမှုနှင့် ဆက်စပ်မှုကို မျှဝေနိုင်သည်။",
+		"public": "အများနှင့်သက်ဆိုင်သော",
+		"public_note": "URL မျှဝေနိုင်သည်၊ စာရင်းသွင်းသူဖိဒ်တွင်ပြသသည်၊ ရှာဖွေမှုနှင့်ဆက်စပ်သည်။",
+		"copy_link": "လင့်ခ်ကိုကူးယူပါ။",
+		"copy_share_link": "မျှဝေထားသောလင့်ခ်ကို ကူးယူပါ။",
+		"saved": "သိမ်းထားပြီး။",
+		"title_necessary": "ခေါင်းစဉ်လိုအပ်သည်။",
+		"example": "ဥပမာ",
+		"privacy": "ကိုယ်ရေးကိုယ်တာ",
+		"new_composition": "ဖွဲ့စည်းမှုအသစ်",
+		"add": "ထည့်ပါ&nbsp;",
+		"completed": "ပြီးပါပြီ။",
+		"ongoing": "လုပ်ဆောင်ဆဲ",
+		"popular": "နာမည်ကြီး",
+		"recommendation": "ထောက်ခံချက်",
+		"collection": "စုဆောင်းမှု",
+		"rates": "နှုန်းထားများ",
+		"updated": "မွမ်းမံထားသည်။/ နောက်ဆုံးအခြေအနေ",
+		"my_zone": "ကျွနုပ်ဇုန်/ကျွနုပ်နေရာ",
+		"share_to": "မျှဝေပါ။",
 		"EXP": "EXP",
-		"composition_structure": "composition structure",
-		"search_tools": "search&nbsp;tools",
-		"timeline": "timeline",
-		"extension": "extension",
-		"no_created": "&nbsp;is not created yet",
-		"create_now": "create now",
-		"only_this_para": "show this paragraph only",
-		"no": "No&nbsp;",
-		"select": "select",
-		"history": "history",
-		"top_search": "Top search",
-		"similar_sentences": "similar sentences",
-		"close": "close",
-		"timezone": "Timezone",
-		"subfield": "subfield",
-		"local": "Local",
-		"form_sent": "Form sentences with the words given & copy to clipboard",
-		"hot_topic": "hot topic",
-		"composition_intro": "Make the Pāḷi easy to read<br>solution of Pāḷi glossary<br>For translating Pāḷi in Group<br>Show the source reference in Pāḷi",
-		"jump_to_this_sent": "jump to this sentence",
-		"show_nissaya": "show nissaya",
-		"related_para": "related&nbsp;paragraph",
-		"disable": "disable",
-		"disable_note": "disable & invisible to anyone including myself",
-		"not_found": "not&nbsp;found",
-		"progress_curve": "progress curve",
-		"day_EXP": "Daily EXP",
-		"Jan": "Jan",
-		"Feb": "Feb",
-		"Mar": "Mar",
-		"Apr": "Apr",
-		"May": "May",
-		"Jun": "Jun",
-		"Jul": "Jul",
-		"Aug": "Aug",
-		"Sep": "Sep",
-		"Oct": "Oct",
-		"Nov": "Nov",
-		"Dec": "Dec",
-		"EXP_in_total": "EXP in total",
-		"day_action": "Daily Action",
-		"action": "Actions",
-		"cooperators": "Cooperators",
-		"person": "Person",
-		"write": "Write",
-		"sub_group": "Project",
-		"your": "Yours",
-		"status": "status",
-		"in_recycle_bin": "in&nbsp;recycle-bin",
-		"cover": "cover",
-		"member": "Member",
-		"new_group": "Create Group",
-		"new_sub_group": "Create Project",
-		"owner": "Owner",
-		"manager": "Manager",
-		"enter": "Enter",
-		"avatar": "Avatar",
-		"display": "display",
-		"none": "none",
-		"cooperate_group": "cooperative group",
-		"personal": "personal",
-		"empty_null_mark": "Here is so quiet",
-		"lesson_intro": "Let’s take the course to see how the pāḷi experts explain conon",
-		"teaching_course": "teaching course",
-		"watching_course": "watching course",
-		"searching_instruction": "searching instruction",
-		"dict_searching_placehold": "insert “+” into a word to search them separately",
-		"copy_to": "copy to",
-		"add_tran": "add translation",
-		"no_updated": "no update",
-		"secs_ago": "&nbsp;secs ago",
-		"mins_ago": "&nbsp;mins ago",
-		"hs_ago": "&nbsp;hs ago",
-		"days_ago": "&nbsp;days ago",
-		"weeks_ago": "&nbsp;weeks ago",
-		"months_ago": "&nbsp;months ago",
-		"year_ago": "&nbsp;year ago",
-		"years_ago": "&nbsp;years ago",
-		"similar": "similar",
-		"suggest": "suggest",
+		"composition_structure": "ဖွဲ့စည်းမှုဖွဲ့စည်းပုံ",
+		"search_tools": "ရှာဖွေမှု&nbsp;ကိရိယာများ",
+		"timeline": "အချိန်ဇယား",
+		"extension": "တိုးချဲ့မှု",
+		"no_created": "&nbsp;မဖန်တီးရသေးပါ။",
+		"create_now": "ယခုဖန်တီးပါ။",
+		"only_this_para": "ဤစာပိုဒ်ကိုသာ ပြပါ။",
+		"no": "မရှိ&nbsp;",
+		"select": "ရွေးချယ်ပါ။",
+		"history": "သမိုင်း",
+		"top_search": "ထိပ်တန်းရှာဖွေမှု",
+		"similar_sentences": "အလားတူစာကြောင်းများ",
+		"close": "ပိတ်သည်။",
+		"timezone": "အချိန်ဇုန် ။တူညီသော ဒေသစံတော်ချိန်အကန့်။",
+		"subfield": "နယ်ပယ်ခွဲ",
+		"local": "ပြည်တွင်း ။ဒေသခံ။ နယ်ခံ။",
+		"form_sent": "ပေးထားသော စကားလုံးများဖြင့် ကလစ်ဘုတ်သို့ ကော်ပီကူးပါ။",
+		"hot_topic": "ရေပန်းစားသော အကြောင်းအရာ။ ခေါင်းစဉ်။",
+		"composition_intro": "Pāḷi ကို လွယ်လွယ်ကူကူ ဖတ်နိုင်စေရန်<br>Pali ဝေါဟာရဖြေရှင်းချက်<br>Pāḷiကို အုပ်စုတွင် ဘာသာပြန်ရန်အတွက်<br>Pāḷi တွင် အရင်းအမြစ်ကိုးကားချက်ကို ပြပါ",
+		"jump_to_this_sent": "ဒီစာကြောင်းကို ကျော်လိုက်ပါ။",
+		"show_nissaya": "nissaya ကိုပြပါ။",
+		"related_para": "ဆက်စပ်&nbsp;စာပိုဒ်",
+		"disable": "မဖေါ်ပြပါ။",
+		"disable_note": "ကျွနုပ်အပါအဝင်မည်သူမဆို မဖေါ်ပြပါ နှင့် မမြင်နိုင်။",
+		"not_found": "မတွေ့ပါ။",
+		"progress_curve": "တိုးတက်မှုမျဉ်းကွေး",
+		"day_EXP": "နေ့စဉ် EXP",
+		"Jan": "ဇန်နဝါရီလ",
+		"Feb": "ဖေဖေါ်ဝါရီလ",
+		"Mar": "မတ်လ",
+		"Apr": "ဧပရယ်လ",
+		"May": "မေလ",
+		"Jun": "ဇွန်လ",
+		"Jul": "ဇူလိုင်လ",
+		"Aug": "ဩဂုတ်လ",
+		"Sep": "စက်တင်ဘာလ",
+		"Oct": "အောက်တိုဘာလ",
+		"Nov": "နိုဝင်ဘာလ",
+		"Dec": "ဒီဇင်ဘာလ",
+		"EXP_in_total": "စုစုပေါင်း EXP",
+		"day_action": "နေ့စဉ်လုပ်ဆောင်ချက်များ",
+		"action": "လုပ်ဆောင်ချက်များ",
+		"cooperators": "ပူးပေါင်းဆောင်ရွက်သူများ",
+		"person": "လူ",
+		"write": "ရေးသည်",
+		"sub_group": "စီမံကိန်း။ စီမံချက်။",
+		"your": "သင့်အတွက်",
+		"status": "အခြေအနေ",
+		"in_recycle_bin": "&nbsp;အမှိုက်ပုံးတွင်",
+		"cover": "ဖုံးသည်။ အုပ်သည်။ ခြုံသည်။ လွှမ်းသည်။ ကာသည်။ ကွယ်သည်။",
+		"member": "အဖွဲ့ဝင်",
+		"new_group": "အဖွဲ့ ဖန်တီးပါ။",
+		"new_sub_group": "စီမံကိန်း ဖန်တီးပါ။",
+		"owner": "ပိုင်ရှင်။",
+		"manager": "အလုပ်ကိစ္စစီမံခန့်ခွဲသူ။ မန်နေဂျာ။",
+		"enter": "ဝင်သည်။ ဝင်လာသည်။",
+		"avatar": "ကိုယ်ပွား",
+		"display": "ပြသခြင်း။",
+		"none": "မရှိ",
+		"cooperate_group": "သမဝါယမအဖွဲ့",
+		"personal": "ကိုယ်ရေးကိုယ်တာ",
+		"empty_null_mark": "ဒီမှာ အရမ်းတိတ်ဆိတ်နေတယ်။",
+		"lesson_intro": "ပါဠိပညာရှင်များ conon ရှင်းပြပုံကို လေ့လာကြည့်ရအောင်",
+		"teaching_course": "သင်ကြားရေးသင်ခန်းစာ",
+		"watching_course": "ကြည့်ရှုရေးသင်ခန်းစာ",
+		"searching_instruction": "ရှာဖွေခြင်းလမ်းညွှန်",
+		"dict_searching_placehold": "သီးခြားရှာဖွေရန် စကားလုံးတစ်လုံးတွင် “+” ထည့်ပါ။",
+		"copy_to": "သို့ ကူးယူပါ။",
+		"add_tran": "ဘာသာပြန်ထည့်ပါ။",
+		"no_updated": "နောက်ဆုံးupdate အခြေအနေမရှိပါ။",
+		"secs_ago": "&nbsp;ပြီးခဲ့သော စက္ကန့်",
+		"mins_ago": "&nbsp;ပြီးခဲ့သော မိနစ်",
+		"hs_ago": "&nbsp;ပြီးခဲ့သော နာရီ",
+		"days_ago": "&nbsp;ပြီးခဲ့သော ရက်များ",
+		"weeks_ago": "&nbsp;ပြီးခဲ့သော အပတ်များ",
+		"months_ago": "&nbsp;ပြီးခဲ့သော လများ",
+		"year_ago": "&nbsp;ပြီးခဲ့သော နှစ်",
+		"years_ago": "&nbsp;ပြီးခဲ့သော နှစ်များ",
+		"similar": "ဆင်သော။ တူသော။ အလားတူသော။ ",
+		"suggest": "အကြံပြုသည်",
 		"next_line": "နောက်တစ်ကြောင်း",
-		"link": "link",
-		"co_channel": "collaborative channels",
-		"permission": "permission",
-		"first_page": "first page",
-		"previous_page": "previous page",
-		"next_page": "next page",
-		"last_page": "last page",
-		"citations": "citations",
-		"reference": "reference",
-		"original": "original",
-		"page_num": "page",
-		"palihandbook": "pāli handbook",
-		"viewer": "viewer",
-		"invalid_email": "invalid email",
-		"invalid_token": "invalid token",
-		"username_too_long": "username too long",
-		"username_too_short": "username too short",
-		"username_invaild_symbol": "username invaild symbol",
-		"password_invaild_symbol": "password invaild symbol",
-		"error_net_404": "Not Found",
-		"error_net_500": "Internal Server Error",
-		"error_net_timeout": "Timeout",
-		"error_net_abort": "abort",
-		"error_net_parsererror": "parser error",
-		"caus": "caus.",
-		"pass": "pass.",
+		"link": "လင့်ခ်",
+		"co_channel": "ပူးပေါင်းဆောင်ရွက်သော ချန်နယ်များ",
+		"permission": "ခွင့်ပြုချက်",
+		"first_page": "ပထမ စာမျက်နှာ",
+		"previous_page": "အရှေ့/အရင်စာမျက်နှာ",
+		"next_page": "နောက်ထပ် စာမျက်နှာ",
+		"last_page": "နောက်ဆုံး စာမျက်နှာ",
+		"citations": "ကိုးကားခြင်း",
+		"reference": "ကျမ်းကိုး။",
+		"original": "မူရင်း",
+		"page_num": "စာမျက်နှာ",
+		"palihandbook": "ပါဠိ လက်ကိုင်စာအုပ်",
+		"viewer": "ကြည့်ရှုသူ",
+		"invalid_email": "မမှန်ကန်သောအီးမေးလ်",
+		"invalid_token": "မမှန်ကန်သော တိုကင်",
+		"username_too_long": "အသုံးပြုသူအမည် ရှည်လွန်းသည်။",
+		"username_too_short": "အသုံးပြုသူအမည် တိုလွန်းသည်။",
+		"username_invaild_symbol": "အသုံးပြုသူ အမည် မမှန်ကန်သောသင်္ကေတ",
+		"password_invaild_symbol": "အသုံးပြုသူ စကားဝှက် မမှန်ကန်သောသင်္ကေတ",
+		"error_net_404": "မတွေ့ပါ",
+		"error_net_500": "အတွင်းဆာဗာမှားယွင်းမှု",
+		"error_net_timeout": "ခဏပွဲရပ်ခြင်း",
+		"error_net_abort": "ဖျက်သိမ်းသည်။",
+		"error_net_parsererror": "ရုပ်ထွက်မှားယွင်းသည်။",
+		"caus": "အကြောင်း",
+		"pass": "အောင်သည်။ ကျော်ဖျက်သည်။",
 		"space": "&nbsp;",
+		"channel_type": "ချန်နယ်အမျိုးအစား",
+		
+		
+		
+
 		"": ""
 	},
 	"grammastr": [

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

@@ -233,7 +233,7 @@
 		"part": "Factors",
 		"partmeaning": "Factor-Meaning",
 		"password": "Password",
-		"password_again": "Password again",
+		"password_again": "Confirm Password",
 		"past": "අතික්කන්ත ",
 		"pcd_studio": "පාලි කැනොන් දත්තගබඩාව කලාකුටිය",
 		"piṭaka": "පිටක",
@@ -659,6 +659,7 @@
 		"caus": "caus.",
 		"pass": "pass.",
 		"space": "&nbsp;",
+		"channel_type": "channel type",
 		"": ""
 	},
 	"grammastr": [

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

@@ -569,7 +569,7 @@
 		"composition_intro": "依巴利而<b>著</b><br>为明法而<b>作</b>",
 		"jump_to_this_sent": "跳转到此句",
 		"show_nissaya": "显示nissaya",
-		"related_para": "相应段落",
+		"related_para": "相关根本与注释",
 		"disable": "停用",
 		"disable_note": "停用,即使自己也无法更新",
 		"not_found": "未找到",
@@ -657,6 +657,7 @@
 		"caus": "使役",
 		"pass": "被动",
 		"space": "",
+		"channel_type": "资源类型",
 		"": ""
 	},
 	"grammastr": [

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

@@ -568,7 +568,7 @@
 		"hot_topic": "熱門主題",
 		"composition_intro": "依巴利而<b>著</b><br>為明法而<b>作</b>",
 		"show_nissaya": "顯示nissaya",
-		"related_para": "相應段落",
+		"related_para": "相關根本與註釋",
 		"disable": "停用",
 		"disable_note": "停用",
 		"not_found": "未找到",
@@ -655,6 +655,7 @@
 		"error_net_parsererror": "數據解析錯誤",
 		"caus": "使役",
 		"pass": "被動",
+		"channel_type": "資源類型",
 		"space": "",
 		"": ""
 	},

+ 28 - 10
public/app/reader/get_para1.php

@@ -77,7 +77,7 @@ $paraBegin=0;
 $paraEnd=0;
 
 PDO_Connect(_FILE_DB_PALITEXT_);
-$query = "SELECT level , parent, chapter_len,chapter_strlen FROM "._TABLE_PALI_TEXT_."  WHERE book= ? AND paragraph= ?";
+$query = "SELECT level , parent, chapter_len,chapter_strlen FROM "._TABLE_PALI_TEXT_."  WHERE book= ? AND paragraph= ?  order by paragraph asc";
 $FetchParInfo = PDO_FetchRow($query, array($_book, $_para));
 if ($FetchParInfo) {
     switch ($_view) {
@@ -92,7 +92,7 @@ if ($FetchParInfo) {
             else{
 				#不是标题,加载所在段落
 				$paraBegin = $FetchParInfo["parent"];
-				$query = "SELECT  level , parent, chapter_len,chapter_strlen FROM "._TABLE_PALI_TEXT_."  WHERE book= ? AND paragraph= ?";
+				$query = "SELECT  level , parent, chapter_len,chapter_strlen FROM "._TABLE_PALI_TEXT_."  WHERE book= ? AND paragraph= ?  order by paragraph asc";
 				$FetchParInfo = PDO_FetchRow($query, array($_book, $paraBegin));
             	$paraEnd = $paraBegin + $FetchParInfo["chapter_len"] - 1;
 			}
@@ -110,32 +110,49 @@ if ($FetchParInfo) {
     }
 
     //获取下级目录
-    $query = "SELECT level,paragraph,toc FROM "._TABLE_PALI_TEXT_."  WHERE book= ? AND (paragraph BETWEEN ?AND ? ) AND level < 8 ";
+    $query = "SELECT level,paragraph,toc FROM "._TABLE_PALI_TEXT_."  WHERE book= ? AND (paragraph BETWEEN ?AND ? ) AND level < 8 order by paragraph asc";
     $toc = PDO_FetchAll($query, array($_book, $paraBegin, $paraEnd));
 	if(count($toc)>0){
 		$output["title"] = $toc[0]["toc"];
 	}
 
+    /*
+    目录
+    */
+    $sTocOutput = "\n\n";
 	if(count($toc)>1){
 		$currLevel = $toc[0]["level"];
 		$ulLevel = 0;
+        $minLevel = 8;
+        foreach ($toc as $key => $value) {
+            if($value["level"] < $minLevel ){
+                $minLevel = $value["level"];
+            }
+        }
 		foreach ($toc as $key => $value) {
 			# code...
+            if(empty($value["toc"])){
+                $sToc = "unnamed";
+            }else{
+                $sToc = $value["toc"];
+            }
+            $sToc = str_replace(['[',']'],[' [','] '],$sToc);
 			if($value["level"] > $currLevel  ){
 				$ulLevel++;
 			}
 			else if($value["level"] < $currLevel ){
-				$ulLevel--;		
+				$ulLevel--;
 			}
 			$currLevel = $value["level"];
-			for ($i=0; $i < $ulLevel; $i++) { 
+            $space = "";
+			for ($i=$minLevel; $i < $currLevel; $i++) { 
 				# code...
-				$output["content"] .= "    ";
+				$space .= "  ";
 			}
-			$output["content"] .= "- [{$value["toc"]}](../article/index.php?view=chapter&book={$_book}&par={$value["paragraph"]})\n";
+			$sTocOutput .= $space . "- [{$sToc}](../article/index.php?view=chapter&book={$_book}&par={$value["paragraph"]})\n";
 		}		
 	}
-
+$sTocOutput .= "\n\n";
 
     if ($FetchParInfo["chapter_strlen"] > _MAX_CHAPTER_LEN_ && $_view === "chapter" && count($toc) > 1) {
         #文档过大,只加载目录
@@ -146,6 +163,7 @@ if ($FetchParInfo) {
             $output["head"] = 1;
         } else {
             #中间无间隔
+            $output["content"] .= $sTocOutput;
             echo json_encode($output, JSON_UNESCAPED_UNICODE);
             exit;
         }
@@ -153,7 +171,7 @@ if ($FetchParInfo) {
 
     PDO_Connect(_FILE_DB_PALI_SENTENCE_);
 
-    $query = "SELECT book,paragraph, word_begin as begin, word_end as end FROM "._TABLE_PALI_SENT_." WHERE book= ? AND (paragraph BETWEEN ? AND ? ) ";
+    $query = "SELECT book,paragraph, word_begin as begin, word_end as end FROM "._TABLE_PALI_SENT_." WHERE book= ? AND (paragraph BETWEEN ? AND ? )  order by paragraph,word_begin asc";
     $sent_list = PDO_FetchAll($query, array($_book, $paraBegin, $paraEnd));
 	$iCurrPara=0;
 	$output["sent_list"] = $sent_list;
@@ -179,7 +197,7 @@ if ($FetchParInfo) {
 		$output["content"] .= "{{". $value["book"] . "-" . $value["paragraph"] . "-". $value["begin"] . "-" . $value["end"] . "}}";
 
 	}
-    
+    $output["content"] .= $sTocOutput;
     echo json_encode($output, JSON_UNESCAPED_UNICODE);
 
 } else {

+ 1 - 1
public/app/reader/style.css

@@ -129,7 +129,7 @@ note:hover chapter {
 	position: absolute;
 	margin-top: 0;
 	margin-left: -60px;
-	font-family: "Noto Sans", "Noto Sans SC", "Noto Sans TC", "Padauk", Arial, Verdana;
+	font-family: "Noto Sans", "Noto Sans SC", "Noto Sans TC", "Noto Sans Myanmar", Arial, Verdana;
 	color: var(--main-color1);
 	font-size: 80%;
 }

+ 81 - 0
public/app/studio/css/font.css

@@ -262,6 +262,87 @@
     url(../../../font/Padauk/Padauk-Bold.ttf) format("truetype");
   font-display: fallback;
 }
+/*Noto Sans Myanmar*/
+@font-face {
+  font-family: "Noto Sans Myanmar";
+  font-style: normal;
+  font-weight: 100;
+  src: local("Noto Sans Myanmar Thin"),
+    url(../../../font/Noto_Sans_Myanmar/NotoSansMyanmar-Thin.ttf) format("truetype");
+  font-display: fallback;
+}
+
+@font-face {
+  font-family: "Noto Sans Myanmar";
+  font-style: normal;
+  font-weight: 200;
+  src: local("Noto Sans Myanmar ExtraLight"),
+    url(../../../font/Noto_Sans_Myanmar/NotoSansMyanmar-ExtraLight.ttf) format("truetype");
+  font-display: fallback;
+}
+
+@font-face {
+  font-family: "Noto Sans Myanmar";
+  font-style: normal;
+  font-weight: 300;
+  src: local("Noto Sans Myanmar Light"),
+    url(../../../font/Noto_Sans_Myanmar/NotoSansMyanmar-Light.ttf) format("truetype");
+  font-display: fallback;
+}
+
+@font-face {
+  font-family: "Noto Sans Myanmar";
+  font-style: normal;
+  font-weight: 400;
+  src: local("Noto Sans Myanmar Regular"),
+    url(../../../font/Noto_Sans_Myanmar/NotoSansMyanmar-Regular.ttf) format("truetype");
+  font-display: fallback;
+}
+
+@font-face {
+  font-family: "Noto Sans Myanmar";
+  font-style: normal;
+  font-weight: 500;
+  src: local("Noto Sans Myanmar Medium"),
+    url(../../../font/Noto_Sans_Myanmar/NotoSansMyanmar-Medium.ttf) format("truetype");
+  font-display: fallback;
+}
+
+@font-face {
+  font-family: "Noto Sans Myanmar";
+  font-style: normal;
+  font-weight: 600;
+  src: local("Noto Sans Myanmar SemiBold"),
+    url(../../../font/Noto_Sans_Myanmar/NotoSansMyanmar-SemiBold.ttf) format("truetype");
+  font-display: fallback;
+}
+
+@font-face {
+  font-family: "Noto Sans Myanmar";
+  font-style: normal;
+  font-weight: 700;
+  src: local("Noto Sans Myanmar Bold"),
+    url(../../../font/Noto_Sans_Myanmar/NotoSansMyanmar-Bold.ttf) format("truetype");
+  font-display: fallback;
+}
+
+@font-face {
+  font-family: "Noto Sans Myanmar";
+  font-style: normal;
+  font-weight: 800;
+  src: local("Noto Sans Myanmar ExtraBold"),
+    url(../../../font/Noto_Sans_Myanmar/NotoSansMyanmar-ExtraBold.ttf) format("truetype");
+  font-display: fallback;
+}
+
+@font-face {
+  font-family: "Noto Sans Myanmar";
+  font-style: normal;
+  font-weight: 900;
+  src: local("Noto Sans Myanmar Black"),
+    url(../../../font/Noto_Sans_Myanmar/NotoSansMyanmar-Black.ttf) format("truetype");
+  font-display: fallback;
+}
 /*中文繁體*/
 
 @font-face {

+ 3 - 2
public/app/studio/css/style.css

@@ -19,7 +19,7 @@
 }
 
 body {
-	font-family: "Noto Sans", "Noto Sans SC", "Noto Sans TC", "Padauk", Arial, Verdana;
+	font-family: "Noto Sans", "Noto Sans SC", "Noto Sans TC", "Noto Sans Myanmar", Arial, Verdana;
 	font-style: normal;
 	color: var(--main-color);
 	font-weight: 400;
@@ -252,7 +252,7 @@ a:active {
 
 .mainview {
 	background-color: var(--bg-color);
-	padding: 0 50px;
+	padding-left: 50px;
 	z-index: 1;
 	float: left;
 	-webkit-transition-duration: 0.4s;
@@ -4090,6 +4090,7 @@ border-bottom: 2px solid red;
 	display: none;
 	/*margin-top: calc(-1em - 29px);*/
 	margin-top: -20px;
+	max-width: 30vw;
 
 }
 .trans_sent_edit{

+ 137 - 101
public/app/studio/js/relation_list.js

@@ -20,7 +20,7 @@ var list_relation=[
     {
         "id": "IAD",
         "case": "",
-        "note": "tulyādhikaraṇavisesana -> visesya",
+        "note": "tulyādhikaraṇavisesana  visesya",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -38,7 +38,7 @@ var list_relation=[
     {
         "id": "ASV",
         "case": "",
-        "note": "施动者<主格> -> 动词<br>XX把…",
+        "note": "施动者<主格>  动词<br>XX把…",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -47,7 +47,7 @@ var list_relation=[
     {
         "id": "ASV",
         "case": "",
-        "note": "vuttakattar -> kiriyā",
+        "note": "vuttakattar  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -65,7 +65,7 @@ var list_relation=[
     {
         "id": "AOV",
         "case": ".nom.",
-        "note": "受动者<主格> -> 动词<br>XX被…",
+        "note": "受动者<主格>  动词<br>XX被…",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -74,7 +74,7 @@ var list_relation=[
     {
         "id": "AOV",
         "case": ".nom.",
-        "note": "vuttakamma -> kiriyā",
+        "note": "vuttakamma  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -92,7 +92,7 @@ var list_relation=[
     {
         "id": "DASO-P",
         "case": ".nom.",
-        "note": "<字面>主语 -> 系动词<br>XX是…",
+        "note": "<字面>主语  系动词<br>XX是…",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -101,7 +101,7 @@ var list_relation=[
     {
         "id": "DASO-P",
         "case": ".nom.",
-        "note": "pakati <vuttakattar> -> kiriyā",
+        "note": "pakati <vuttakattar>  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -119,7 +119,7 @@ var list_relation=[
     {
         "id": "DASO-S",
         "case": ".nom.",
-        "note": "<字面>表语 -> 系动词<br>…是XX",
+        "note": "<字面>表语  系动词<br>…是XX",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -128,7 +128,7 @@ var list_relation=[
     {
         "id": "DASO-S",
         "case": ".nom.",
-        "note": "vikati <vuttakattar> -> kiriyā",
+        "note": "vikati <vuttakattar>  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -137,7 +137,7 @@ var list_relation=[
     {
         "id": "NIO",
         "case": ".nom.",
-        "note": "被描述 -> 定性<br>XX有…",
+        "note": "被描述(主) ➡ 定性(表)<br>XX即……",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -146,7 +146,7 @@ var list_relation=[
     {
         "id": "NIO",
         "case": ".nom.",
-        "note": "tulyattha -> liṅgattha",
+        "note": "tulyattha  liṅgattha",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -164,7 +164,7 @@ var list_relation=[
     {
         "id": "NID",
         "case": ".nom.",
-        "note": "待命名 -> 命名<br>XX叫做…",
+        "note": "待命名(主) ➡ 命名(表)<br>XX叫做…",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -173,7 +173,7 @@ var list_relation=[
     {
         "id": "NID",
         "case": ".nom.",
-        "note": "saññin <nāmin> -> saññā <nāma>",
+        "note": "saññin <nāmin>  saññā <nāma>",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -191,7 +191,7 @@ var list_relation=[
     {
         "id": "DASD-P",
         "case": ".nom.",
-        "note": "<命名>主 -> 系<br>XX叫做…",
+        "note": "<命名>主  系<br>XX叫做…",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -200,7 +200,7 @@ var list_relation=[
     {
         "id": "DASD-P",
         "case": ".nom.",
-        "note": "pakati<saññin, nāmin> -> kiriyā",
+        "note": "pakati<saññin, nāmin>  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -218,7 +218,7 @@ var list_relation=[
     {
         "id": "DASD-S",
         "case": ".nom.",
-        "note": "<命名>表 -> 系<br>…叫做XX",
+        "note": "<命名>表  系<br>…叫做XX",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -227,7 +227,7 @@ var list_relation=[
     {
         "id": "DASD-S",
         "case": ".nom.",
-        "note": "vikati<saññā,nāma> -> kiriyā",
+        "note": "vikati<saññā,nāma>  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -254,7 +254,7 @@ var list_relation=[
     {
         "id": "DAO",
         "case": ".nom.",
-        "note": "pakati <vuttakamma> -> vikati <vuttakamma>",
+        "note": "pakati <vuttakamma>  vikati <vuttakamma>",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -272,7 +272,7 @@ var list_relation=[
     {
         "id": "IOV",
         "case": ".acc.",
-        "note": "受动者<非主格> -> 动词<br>…把XX",
+        "note": "受动者<非主格>  动词<br>…把XX",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -281,7 +281,7 @@ var list_relation=[
     {
         "id": "IOV",
         "case": ".acc.",
-        "note": "avuttakamma -> kiriyā",
+        "note": "avuttakamma  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -290,7 +290,7 @@ var list_relation=[
     {
         "id": "DIO-P",
         "case": ".acc.",
-        "note": "Double Inactive Object -> Verb Relation",
+        "note": "Double Inactive Object  Verb Relation",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -299,7 +299,7 @@ var list_relation=[
     {
         "id": "DIO-P",
         "case": ".acc.",
-        "note": "双宾语<主要> -> 动词",
+        "note": "双宾语<主要>  动词",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -308,7 +308,7 @@ var list_relation=[
     {
         "id": "DIO-P",
         "case": ".acc.",
-        "note": "pakati <avuttakamma> -> kiriyā",
+        "note": "pakati <avuttakamma>  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -317,7 +317,7 @@ var list_relation=[
     {
         "id": "DIO-S",
         "case": ".acc.",
-        "note": "Double Inactive Object -> Verb Relation",
+        "note": "Double Inactive Object  Verb Relation",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -326,7 +326,7 @@ var list_relation=[
     {
         "id": "DIO-S",
         "case": ".acc.",
-        "note": "双宾语<次要> -> 动词",
+        "note": "双宾语<次要>  动词",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -335,7 +335,7 @@ var list_relation=[
     {
         "id": "DIO-S",
         "case": ".acc.",
-        "note": "vikati <avuttakamma> -> kiriyā",
+        "note": "vikati <avuttakamma>  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -353,7 +353,7 @@ var list_relation=[
     {
         "id": "STC",
         "case": ".acc.",
-        "note": "时空连续 -> 持续动作",
+        "note": "时空连续  持续动作",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -362,7 +362,7 @@ var list_relation=[
     {
         "id": "STC",
         "case": ".acc.",
-        "note": "accantasaṃyoga -> accantasaṃyogavant",
+        "note": "accantasaṃyoga  accantasaṃyogavant",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -380,7 +380,7 @@ var list_relation=[
     {
         "id": "ADV",
         "case": ".acc.",
-        "note": "动词修饰词 -> 动词",
+        "note": "动词修饰词  动词",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -389,7 +389,7 @@ var list_relation=[
     {
         "id": "ADV",
         "case": ".acc.",
-        "note": "kiriyāvisesana -> kiriyā",
+        "note": "kiriyāvisesana  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -407,7 +407,7 @@ var list_relation=[
     {
         "id": "IMP",
         "case": ".inst.",
-        "note": "方式 -> 动词<br>以XX",
+        "note": "方式  动词<br>以XX",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -416,7 +416,7 @@ var list_relation=[
     {
         "id": "IMP",
         "case": ".inst.",
-        "note": "karaṇa -> kiriyā",
+        "note": "karaṇa  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -443,7 +443,7 @@ var list_relation=[
     {
         "id": "SOE",
         "case": ".inst.",
-        "note": "sahayoga <sahādiyoga> -> kiriyā",
+        "note": "sahayoga <sahādiyoga>  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -488,7 +488,7 @@ var list_relation=[
     {
         "id": "ISV",
         "case": ".inst.",
-        "note": "非主格施动者 -> 动词<br>被XX",
+        "note": "非主格施动者  动词<br>被XX",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -497,7 +497,7 @@ var list_relation=[
     {
         "id": "ISV",
         "case": ".inst.",
-        "note": "avuttakattar -> kiriyā",
+        "note": "avuttakattar  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -515,7 +515,7 @@ var list_relation=[
     {
         "id": "CAU",
         "case": ".inst.",
-        "note": "因 -> 果<br>根据XX",
+        "note": "因  果<br>根据XX",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -524,7 +524,7 @@ var list_relation=[
     {
         "id": "CAU",
         "case": ".inst.",
-        "note": "hetu -> phala",
+        "note": "hetu  phala",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -533,7 +533,7 @@ var list_relation=[
     {
         "id": "IOV",
         "case": ".inst.",
-        "note": "被使役宾语 -> 动词<br>令XX…",
+        "note": "被使役宾语  动词<br>令XX…",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -542,7 +542,7 @@ var list_relation=[
     {
         "id": "IOV",
         "case": ".inst.",
-        "note": "avuttakamma -> kiriyā",
+        "note": "avuttakamma  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -569,7 +569,7 @@ var list_relation=[
     {
         "id": "ADJ",
         "case": ".inst.",
-        "note": "名词的形容 -> 被形容",
+        "note": "名词的形容  被形容",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -578,7 +578,7 @@ var list_relation=[
     {
         "id": "ADJ",
         "case": ".inst.",
-        "note": "nāmavisesana -> visesya",
+        "note": "nāmavisesana  visesya",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -596,7 +596,7 @@ var list_relation=[
     {
         "id": "ADV",
         "case": ".inst.",
-        "note": "修饰动作的副词 -> 动词",
+        "note": "修饰动作的副词  动词",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -605,7 +605,7 @@ var list_relation=[
     {
         "id": "ADV",
         "case": ".inst.",
-        "note": "kiriyāvisesana -> kiriyā",
+        "note": "kiriyāvisesana  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -623,7 +623,7 @@ var list_relation=[
     {
         "id": "REC",
         "case": ".dat.",
-        "note": "接收者 -> 授予<br>向XX",
+        "note": "接收者  授予<br>向XX",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -632,7 +632,7 @@ var list_relation=[
     {
         "id": "REC",
         "case": ".dat.",
-        "note": "sampadāna -> sampadānin",
+        "note": "sampadāna  sampadānin",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -650,7 +650,7 @@ var list_relation=[
     {
         "id": "PUR",
         "case": ".dat.",
-        "note": "目的 -> 动词<br>为了…",
+        "note": "目的  动词<br>为了…",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -659,7 +659,7 @@ var list_relation=[
     {
         "id": "PUR",
         "case": ".dat.",
-        "note": "tadattha <tumattha> sampadāna -> kiriyā",
+        "note": "tadattha <tumattha> sampadāna  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -677,7 +677,7 @@ var list_relation=[
     {
         "id": "DET",
         "case": ".abl.",
-        "note": "出发地 -> 出发<br>从XX",
+        "note": "出发地  出发<br>从XX",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -686,7 +686,7 @@ var list_relation=[
     {
         "id": "DET",
         "case": ".abl.",
-        "note": "apādāna -> apādānin",
+        "note": "apādāna  apādānin",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -713,7 +713,7 @@ var list_relation=[
     {
         "id": "COC",
         "case": ".abl.",
-        "note": "Vibhattāpādāna -> Vibhattāpādānin",
+        "note": "Vibhattāpādāna  Vibhattāpādānin",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -731,7 +731,7 @@ var list_relation=[
     {
         "id": "CAU",
         "case": ".abl.",
-        "note": "因 -> 果<br>由于XX",
+        "note": "因  果<br>由于XX",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -740,7 +740,7 @@ var list_relation=[
     {
         "id": "CAU",
         "case": ".abl.",
-        "note": "hetu -> phala",
+        "note": "hetu  phala",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -758,7 +758,7 @@ var list_relation=[
     {
         "id": "ADJ",
         "case": ".abl.",
-        "note": "名词的形容 -> 被形容",
+        "note": "名词的形容  被形容",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -767,7 +767,7 @@ var list_relation=[
     {
         "id": "ADJ",
         "case": ".abl.",
-        "note": "nāmavisesana -> visesya",
+        "note": "nāmavisesana  visesya",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -785,7 +785,7 @@ var list_relation=[
     {
         "id": "POS",
         "case": ".gen.",
-        "note": "所有 -> 被所有<br>属于XX的",
+        "note": "所有  被所有<br>属于XX的",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -794,7 +794,7 @@ var list_relation=[
     {
         "id": "POS",
         "case": ".gen.",
-        "note": "sambandha -> sambandhin",
+        "note": "sambandha  sambandhin",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -803,7 +803,7 @@ var list_relation=[
     {
         "id": "COI",
         "case": ".gen.",
-        "note": "Collection -> Individual Relation",
+        "note": "Collection  Individual Relation",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -812,7 +812,7 @@ var list_relation=[
     {
         "id": "COI",
         "case": ".gen.",
-        "note": "包含[全集] -> 被包含[子集]元素<br>XX中的",
+        "note": "包含[全集]  被包含[子集]元素<br>XX中的",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -821,7 +821,7 @@ var list_relation=[
     {
         "id": "COI",
         "case": ".gen.",
-        "note": "niddhāraṇasamudāya -> niddhāraṇīya",
+        "note": "niddhāraṇasamudāya  niddhāraṇīya",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -839,7 +839,7 @@ var list_relation=[
     {
         "id": "ISV",
         "case": ".gen.",
-        "note": "施动者<非主格> -> 动词<br>XX的…<动作>",
+        "note": "施动者<非主格>  动词<br>XX的…<动作>",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -848,7 +848,7 @@ var list_relation=[
     {
         "id": "ISV",
         "case": ".gen.",
-        "note": "avuttakattar -> kiriyā",
+        "note": "avuttakattar  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -866,7 +866,7 @@ var list_relation=[
     {
         "id": "IOV",
         "case": ".gen.",
-        "note": "受动者<非主格> -> 动词<br>XX的被…",
+        "note": "受动者<非主格>  动词<br>XX的被…",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -875,7 +875,7 @@ var list_relation=[
     {
         "id": "IOV",
         "case": ".gen.",
-        "note": "avuttakamma -> kiriyā",
+        "note": "avuttakamma  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -884,7 +884,7 @@ var list_relation=[
     {
         "id": "LOV",
         "case": ".loc.",
-        "note": "Locus -> Verb Relation",
+        "note": "Locus  Verb Relation",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -893,7 +893,7 @@ var list_relation=[
     {
         "id": "LOV",
         "case": ".loc.",
-        "note": "容器 -> 动词<br>在…",
+        "note": "容器  动词<br>在…",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -902,7 +902,7 @@ var list_relation=[
     {
         "id": "LOV",
         "case": ".loc.",
-        "note": "ādhāra -> ādheyya",
+        "note": "ādhāra  ādheyya",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -920,7 +920,7 @@ var list_relation=[
     {
         "id": "MOT",
         "case": ".loc.",
-        "note": "表现 -> 有表现",
+        "note": "表现  有表现",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -929,7 +929,7 @@ var list_relation=[
     {
         "id": "MOT",
         "case": ".loc.",
-        "note": "nimitta -> nimittavant",
+        "note": "nimitta  nimittavant",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -938,7 +938,7 @@ var list_relation=[
     {
         "id": "WHP",
         "case": ".loc.",
-        "note": "Whole -> Part Relation",
+        "note": "Whole  Part Relation",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -947,7 +947,7 @@ var list_relation=[
     {
         "id": "WHP",
         "case": ".loc.",
-        "note": "整体 -> 局部<br>XX中的",
+        "note": "整体  局部<br>XX中的",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -956,7 +956,7 @@ var list_relation=[
     {
         "id": "WHP",
         "case": ".loc.",
-        "note": "samudāya -> samudāyin",
+        "note": "samudāya  samudāyin",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -965,7 +965,7 @@ var list_relation=[
     {
         "id": "COI",
         "case": ".loc.",
-        "note": "Collection -> Individual Relation",
+        "note": "Collection  Individual Relation",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -974,7 +974,7 @@ var list_relation=[
     {
         "id": "COI",
         "case": ".loc.",
-        "note": "集合 -> 个体元素<br>XXX中的一个",
+        "note": "集合  个体元素<br>XXX中的一个",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -983,7 +983,7 @@ var list_relation=[
     {
         "id": "COI",
         "case": ".loc.",
-        "note": "niddhāraṇasamudāya -> nidhāraṇīya",
+        "note": "niddhāraṇasamudāya  nidhāraṇīya",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1010,7 +1010,7 @@ var list_relation=[
     {
         "id": "IAD",
         "case": ".caus.",
-        "note": "tulyādhikaraṇavisesana -> visesya",
+        "note": "tulyādhikaraṇavisesana  visesya",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1055,7 +1055,7 @@ var list_relation=[
     {
         "id": "ASV",
         "case": ".inf.",
-        "note": "施动者<主格> -> 动词",
+        "note": "施动者<主格>  动词",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1064,7 +1064,7 @@ var list_relation=[
     {
         "id": "ASV",
         "case": ".inf.",
-        "note": "vuttakattar -> kiriyā",
+        "note": "vuttakattar  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1082,11 +1082,20 @@ var list_relation=[
     {
         "id": "ADV",
         "case": ".abs.",
-        "note": "副词",
+        "note": "先动-后动",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
-        "language": "zh-cn"
+        "language": "zh ➡ cn"
+    },
+    {
+        "id": "ADV",
+        "case": ".ger.",
+        "note": "先动-后动",
+        "sys_name": "Sadda Pan Goun",
+        "author": "Ven. Pandita Pariyatti Faculty ITBMU",
+        "editor": "Bhikkhu Kosalla sy1987",
+        "language": "zh ➡ cn"
     },
     {
         "id": "ADV",
@@ -1109,7 +1118,7 @@ var list_relation=[
     {
         "id": "CAU",
         "case": ".abs.",
-        "note": "使役",
+        "note": "因 ➡ 果",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1118,10 +1127,37 @@ var list_relation=[
     {
         "id": "CAU",
         "case": ".abs.",
+        "note": "hetu ➡ phala",
+        "sys_name": "Sadda Pan Goun",
+        "author": "Ven. Pandita Pariyatti Faculty ITBMU",
+        "editor": "Bhikkhu Kosalla sy1987",
+        "language": "default"
+    },
+    {
+        "id": "CAU",
+        "case": ".ger.",
         "note": "Causality Relation",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
+        "language": "en"
+    },
+    {
+        "id": "CAU",
+        "case": ".ger.",
+        "note": "因 ➡ 果",
+        "sys_name": "Sadda Pan Goun",
+        "author": "Ven. Pandita Pariyatti Faculty ITBMU",
+        "editor": "Bhikkhu Kosalla sy1987",
+        "language": "zh-cn"
+    },
+    {
+        "id": "CAU",
+        "case": ".ger.",
+        "note": "hetu ➡ phala",
+        "sys_name": "Sadda Pan Goun",
+        "author": "Ven. Pandita Pariyatti Faculty ITBMU",
+        "editor": "Bhikkhu Kosalla sy1987",
         "language": "default"
     },
     {
@@ -1136,7 +1172,7 @@ var list_relation=[
     {
         "id": "DASO-P",
         "case": ".abs.",
-        "note": "<字面>主语 -> 系动词",
+        "note": "<字面>主语  系动词",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1145,7 +1181,7 @@ var list_relation=[
     {
         "id": "DASO-P",
         "case": ".abs.",
-        "note": "pakati <vuttakattar> -> kiriyā",
+        "note": "pakati <vuttakattar>  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1163,7 +1199,7 @@ var list_relation=[
     {
         "id": "DASO-S",
         "case": ".abs.",
-        "note": "<字面>表语 -> 系动词",
+        "note": "<字面>表语  系动词",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1172,7 +1208,7 @@ var list_relation=[
     {
         "id": "DASO-S",
         "case": ".abs.",
-        "note": "vikati <vuttakattar> -> kiriyā",
+        "note": "vikati <vuttakattar>  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1190,7 +1226,7 @@ var list_relation=[
     {
         "id": "DASD-P",
         "case": ".abs.",
-        "note": "<命名>主 -> 系",
+        "note": "<命名>主  系",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1199,7 +1235,7 @@ var list_relation=[
     {
         "id": "DASD-P",
         "case": ".abs.",
-        "note": "pakati<saññin, nāmin> -> kiriyā",
+        "note": "pakati<saññin, nāmin>  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1217,7 +1253,7 @@ var list_relation=[
     {
         "id": "DASD-S",
         "case": ".abs.",
-        "note": "<命名>表 -> 系",
+        "note": "<命名>表  系",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1226,7 +1262,7 @@ var list_relation=[
     {
         "id": "DASD-S",
         "case": ".abs.",
-        "note": "vikati<saññā,nāma> -> kiriyā",
+        "note": "vikati<saññā,nāma>  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1253,7 +1289,7 @@ var list_relation=[
     {
         "id": "DEF",
         "case": "",
-        "note": "lakkhaṇa -> lakkhya",
+        "note": "lakkhaṇa  lakkhya",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1352,7 +1388,7 @@ var list_relation=[
     {
         "id": "QUS",
         "case": "",
-        "note": "引号内 -> 引号",
+        "note": "引号内  引号",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1361,7 +1397,7 @@ var list_relation=[
     {
         "id": "QUS",
         "case": "",
-        "note": "nidassetabba -> nidassana",
+        "note": "nidassetabba  nidassana",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1379,7 +1415,7 @@ var list_relation=[
     {
         "id": "QUM",
         "case": "",
-        "note": "引号 -> 引号外",
+        "note": "引号  引号外",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1388,7 +1424,7 @@ var list_relation=[
     {
         "id": "QUM",
         "case": "",
-        "note": "nidassana -> nidassanavant",
+        "note": "nidassana  nidassanavant",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1396,7 +1432,7 @@ var list_relation=[
     },
     {
         "id": "ENU",
-        "case": ".adv.",
+        "case": "",
         "note": "enumerative relation",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
@@ -1405,8 +1441,8 @@ var list_relation=[
     },
     {
         "id": "ENU",
-        "case": ".adv.",
-        "note": "罗列 -> 破折号",
+        "case": "",
+        "note": "罗列  破折号",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1414,7 +1450,7 @@ var list_relation=[
     },
     {
         "id": "ENU",
-        "case": ".adv.",
+        "case": "",
         "note": "enumerative relation",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
@@ -1433,7 +1469,7 @@ var list_relation=[
     {
         "id": "ENM",
         "case": ".adv.",
-        "note": "破折号 -> 被罗列<br>- XXX",
+        "note": "破折号  被罗列<br>- XXX",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1451,7 +1487,7 @@ var list_relation=[
     {
         "id": "LOV",
         "case": ".adv.",
-        "note": "Locus -> Verb Relation",
+        "note": "Locus  Verb Relation",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1460,7 +1496,7 @@ var list_relation=[
     {
         "id": "LOV",
         "case": ".adv.",
-        "note": "容纳 -> 被容纳<br>在…",
+        "note": "容纳  被容纳<br>在…",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1469,7 +1505,7 @@ var list_relation=[
     {
         "id": "LOV",
         "case": ".adv.",
-        "note": "ādhāra -> ādheyya",
+        "note": "ādhāra  ādheyya",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",

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

@@ -1,4 +1,4 @@
-var list_relation=[
+[
     {
         "id": "IAD",
         "case": "",
@@ -20,7 +20,7 @@ var list_relation=[
     {
         "id": "IAD",
         "case": "",
-        "note": "tulyādhikaraṇavisesana -> visesya",
+        "note": "tulyādhikaraṇavisesana  visesya",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -38,7 +38,7 @@ var list_relation=[
     {
         "id": "ASV",
         "case": "",
-        "note": "施动者<主格> -> 动词<br>XX把…",
+        "note": "施动者<主格>  动词<br>XX把…",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -47,7 +47,7 @@ var list_relation=[
     {
         "id": "ASV",
         "case": "",
-        "note": "vuttakattar -> kiriyā",
+        "note": "vuttakattar  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -65,7 +65,7 @@ var list_relation=[
     {
         "id": "AOV",
         "case": ".nom.",
-        "note": "受动者<主格> -> 动词<br>XX被…",
+        "note": "受动者<主格>  动词<br>XX被…",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -74,7 +74,7 @@ var list_relation=[
     {
         "id": "AOV",
         "case": ".nom.",
-        "note": "vuttakamma -> kiriyā",
+        "note": "vuttakamma  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -92,7 +92,7 @@ var list_relation=[
     {
         "id": "DASO-P",
         "case": ".nom.",
-        "note": "<字面>主语 -> 系动词<br>XX是…",
+        "note": "<字面>主语  系动词<br>XX是…",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -101,7 +101,7 @@ var list_relation=[
     {
         "id": "DASO-P",
         "case": ".nom.",
-        "note": "pakati <vuttakattar> -> kiriyā",
+        "note": "pakati <vuttakattar>  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -119,7 +119,7 @@ var list_relation=[
     {
         "id": "DASO-S",
         "case": ".nom.",
-        "note": "<字面>表语 -> 系动词<br>…是XX",
+        "note": "<字面>表语  系动词<br>…是XX",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -128,7 +128,7 @@ var list_relation=[
     {
         "id": "DASO-S",
         "case": ".nom.",
-        "note": "vikati <vuttakattar> -> kiriyā",
+        "note": "vikati <vuttakattar>  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -137,7 +137,7 @@ var list_relation=[
     {
         "id": "NIO",
         "case": ".nom.",
-        "note": "被描述 -> 定性<br>XX有…",
+        "note": "被描述  定性<br>XX有…",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -146,7 +146,7 @@ var list_relation=[
     {
         "id": "NIO",
         "case": ".nom.",
-        "note": "tulyattha -> liṅgattha",
+        "note": "tulyattha  liṅgattha",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -164,7 +164,7 @@ var list_relation=[
     {
         "id": "NID",
         "case": ".nom.",
-        "note": "待命名 -> 命名<br>XX叫做…",
+        "note": "待命名  命名<br>XX叫做…",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -173,7 +173,7 @@ var list_relation=[
     {
         "id": "NID",
         "case": ".nom.",
-        "note": "saññin <nāmin> -> saññā <nāma>",
+        "note": "saññin <nāmin>  saññā <nāma>",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -191,7 +191,7 @@ var list_relation=[
     {
         "id": "DASD-P",
         "case": ".nom.",
-        "note": "<命名>主 -> 系<br>XX叫做…",
+        "note": "<命名>主  系<br>XX叫做…",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -200,7 +200,7 @@ var list_relation=[
     {
         "id": "DASD-P",
         "case": ".nom.",
-        "note": "pakati<saññin, nāmin> -> kiriyā",
+        "note": "pakati<saññin, nāmin>  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -218,7 +218,7 @@ var list_relation=[
     {
         "id": "DASD-S",
         "case": ".nom.",
-        "note": "<命名>表 -> 系<br>…叫做XX",
+        "note": "<命名>表  系<br>…叫做XX",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -227,7 +227,7 @@ var list_relation=[
     {
         "id": "DASD-S",
         "case": ".nom.",
-        "note": "vikati<saññā,nāma> -> kiriyā",
+        "note": "vikati<saññā,nāma>  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -254,7 +254,7 @@ var list_relation=[
     {
         "id": "DAO",
         "case": ".nom.",
-        "note": "pakati <vuttakamma> -> vikati <vuttakamma>",
+        "note": "pakati <vuttakamma>  vikati <vuttakamma>",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -272,7 +272,7 @@ var list_relation=[
     {
         "id": "IOV",
         "case": ".acc.",
-        "note": "受动者<非主格> -> 动词<br>…把XX",
+        "note": "受动者<非主格>  动词<br>…把XX",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -281,7 +281,7 @@ var list_relation=[
     {
         "id": "IOV",
         "case": ".acc.",
-        "note": "avuttakamma -> kiriyā",
+        "note": "avuttakamma  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -290,7 +290,7 @@ var list_relation=[
     {
         "id": "DIO-P",
         "case": ".acc.",
-        "note": "Double Inactive Object -> Verb Relation",
+        "note": "Double Inactive Object  Verb Relation",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -299,7 +299,7 @@ var list_relation=[
     {
         "id": "DIO-P",
         "case": ".acc.",
-        "note": "双宾语<主要> -> 动词",
+        "note": "双宾语<主要>  动词",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -308,7 +308,7 @@ var list_relation=[
     {
         "id": "DIO-P",
         "case": ".acc.",
-        "note": "pakati <avuttakamma> -> kiriyā",
+        "note": "pakati <avuttakamma>  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -317,7 +317,7 @@ var list_relation=[
     {
         "id": "DIO-S",
         "case": ".acc.",
-        "note": "Double Inactive Object -> Verb Relation",
+        "note": "Double Inactive Object  Verb Relation",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -326,7 +326,7 @@ var list_relation=[
     {
         "id": "DIO-S",
         "case": ".acc.",
-        "note": "双宾语<次要> -> 动词",
+        "note": "双宾语<次要>  动词",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -335,7 +335,7 @@ var list_relation=[
     {
         "id": "DIO-S",
         "case": ".acc.",
-        "note": "vikati <avuttakamma> -> kiriyā",
+        "note": "vikati <avuttakamma>  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -353,7 +353,7 @@ var list_relation=[
     {
         "id": "STC",
         "case": ".acc.",
-        "note": "时空连续 -> 持续动作",
+        "note": "时空连续  持续动作",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -362,7 +362,7 @@ var list_relation=[
     {
         "id": "STC",
         "case": ".acc.",
-        "note": "accantasaṃyoga -> accantasaṃyogavant",
+        "note": "accantasaṃyoga  accantasaṃyogavant",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -380,7 +380,7 @@ var list_relation=[
     {
         "id": "ADV",
         "case": ".acc.",
-        "note": "动词修饰词 -> 动词",
+        "note": "动词修饰词  动词",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -389,7 +389,7 @@ var list_relation=[
     {
         "id": "ADV",
         "case": ".acc.",
-        "note": "kiriyāvisesana -> kiriyā",
+        "note": "kiriyāvisesana  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -407,7 +407,7 @@ var list_relation=[
     {
         "id": "IMP",
         "case": ".inst.",
-        "note": "方式 -> 动词<br>以XX",
+        "note": "方式  动词<br>以XX",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -416,7 +416,7 @@ var list_relation=[
     {
         "id": "IMP",
         "case": ".inst.",
-        "note": "karaṇa -> kiriyā",
+        "note": "karaṇa  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -443,7 +443,7 @@ var list_relation=[
     {
         "id": "SOE",
         "case": ".inst.",
-        "note": "sahayoga <sahādiyoga> -> kiriyā",
+        "note": "sahayoga <sahādiyoga>  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -488,7 +488,7 @@ var list_relation=[
     {
         "id": "ISV",
         "case": ".inst.",
-        "note": "非主格施动者 -> 动词<br>被XX",
+        "note": "非主格施动者  动词<br>被XX",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -497,7 +497,7 @@ var list_relation=[
     {
         "id": "ISV",
         "case": ".inst.",
-        "note": "avuttakattar -> kiriyā",
+        "note": "avuttakattar  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -515,7 +515,7 @@ var list_relation=[
     {
         "id": "CAU",
         "case": ".inst.",
-        "note": "因 -> 果<br>根据XX",
+        "note": "因  果<br>根据XX",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -524,7 +524,7 @@ var list_relation=[
     {
         "id": "CAU",
         "case": ".inst.",
-        "note": "hetu -> phala",
+        "note": "hetu  phala",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -533,7 +533,7 @@ var list_relation=[
     {
         "id": "IOV",
         "case": ".inst.",
-        "note": "被使役宾语 -> 动词<br>令XX…",
+        "note": "被使役宾语  动词<br>令XX…",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -542,7 +542,7 @@ var list_relation=[
     {
         "id": "IOV",
         "case": ".inst.",
-        "note": "avuttakamma -> kiriyā",
+        "note": "avuttakamma  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -569,7 +569,7 @@ var list_relation=[
     {
         "id": "ADJ",
         "case": ".inst.",
-        "note": "名词的形容 -> 被形容",
+        "note": "名词的形容  被形容",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -578,7 +578,7 @@ var list_relation=[
     {
         "id": "ADJ",
         "case": ".inst.",
-        "note": "nāmavisesana -> visesya",
+        "note": "nāmavisesana  visesya",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -596,7 +596,7 @@ var list_relation=[
     {
         "id": "ADV",
         "case": ".inst.",
-        "note": "修饰动作的副词 -> 动词",
+        "note": "修饰动作的副词  动词",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -605,7 +605,7 @@ var list_relation=[
     {
         "id": "ADV",
         "case": ".inst.",
-        "note": "kiriyāvisesana -> kiriyā",
+        "note": "kiriyāvisesana  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -623,7 +623,7 @@ var list_relation=[
     {
         "id": "REC",
         "case": ".dat.",
-        "note": "接收者 -> 授予<br>向XX",
+        "note": "接收者  授予<br>向XX",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -632,7 +632,7 @@ var list_relation=[
     {
         "id": "REC",
         "case": ".dat.",
-        "note": "sampadāna -> sampadānin",
+        "note": "sampadāna  sampadānin",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -650,7 +650,7 @@ var list_relation=[
     {
         "id": "PUR",
         "case": ".dat.",
-        "note": "目的 -> 动词<br>为了…",
+        "note": "目的  动词<br>为了…",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -659,7 +659,7 @@ var list_relation=[
     {
         "id": "PUR",
         "case": ".dat.",
-        "note": "tadattha <tumattha> sampadāna -> kiriyā",
+        "note": "tadattha <tumattha> sampadāna  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -677,7 +677,7 @@ var list_relation=[
     {
         "id": "DET",
         "case": ".abl.",
-        "note": "出发地 -> 出发<br>从XX",
+        "note": "出发地  出发<br>从XX",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -686,7 +686,7 @@ var list_relation=[
     {
         "id": "DET",
         "case": ".abl.",
-        "note": "apādāna -> apādānin",
+        "note": "apādāna  apādānin",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -713,7 +713,7 @@ var list_relation=[
     {
         "id": "COC",
         "case": ".abl.",
-        "note": "Vibhattāpādāna -> Vibhattāpādānin",
+        "note": "Vibhattāpādāna  Vibhattāpādānin",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -731,7 +731,7 @@ var list_relation=[
     {
         "id": "CAU",
         "case": ".abl.",
-        "note": "因 -> 果<br>由于XX",
+        "note": "因  果<br>由于XX",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -740,7 +740,7 @@ var list_relation=[
     {
         "id": "CAU",
         "case": ".abl.",
-        "note": "hetu -> phala",
+        "note": "hetu  phala",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -758,7 +758,7 @@ var list_relation=[
     {
         "id": "ADJ",
         "case": ".abl.",
-        "note": "名词的形容 -> 被形容",
+        "note": "名词的形容  被形容",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -767,7 +767,7 @@ var list_relation=[
     {
         "id": "ADJ",
         "case": ".abl.",
-        "note": "nāmavisesana -> visesya",
+        "note": "nāmavisesana  visesya",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -785,7 +785,7 @@ var list_relation=[
     {
         "id": "POS",
         "case": ".gen.",
-        "note": "所有 -> 被所有<br>属于XX的",
+        "note": "所有  被所有<br>属于XX的",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -794,7 +794,7 @@ var list_relation=[
     {
         "id": "POS",
         "case": ".gen.",
-        "note": "sambandha -> sambandhin",
+        "note": "sambandha  sambandhin",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -803,7 +803,7 @@ var list_relation=[
     {
         "id": "COI",
         "case": ".gen.",
-        "note": "Collection -> Individual Relation",
+        "note": "Collection  Individual Relation",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -812,7 +812,7 @@ var list_relation=[
     {
         "id": "COI",
         "case": ".gen.",
-        "note": "包含[全集] -> 被包含[子集]元素<br>XX中的",
+        "note": "包含[全集]  被包含[子集]元素<br>XX中的",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -821,7 +821,7 @@ var list_relation=[
     {
         "id": "COI",
         "case": ".gen.",
-        "note": "niddhāraṇasamudāya -> niddhāraṇīya",
+        "note": "niddhāraṇasamudāya  niddhāraṇīya",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -839,7 +839,7 @@ var list_relation=[
     {
         "id": "ISV",
         "case": ".gen.",
-        "note": "施动者<非主格> -> 动词<br>XX的…<动作>",
+        "note": "施动者<非主格>  动词<br>XX的…<动作>",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -848,7 +848,7 @@ var list_relation=[
     {
         "id": "ISV",
         "case": ".gen.",
-        "note": "avuttakattar -> kiriyā",
+        "note": "avuttakattar  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -866,7 +866,7 @@ var list_relation=[
     {
         "id": "IOV",
         "case": ".gen.",
-        "note": "受动者<非主格> -> 动词<br>XX的被…",
+        "note": "受动者<非主格>  动词<br>XX的被…",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -875,7 +875,7 @@ var list_relation=[
     {
         "id": "IOV",
         "case": ".gen.",
-        "note": "avuttakamma -> kiriyā",
+        "note": "avuttakamma  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -884,7 +884,7 @@ var list_relation=[
     {
         "id": "LOV",
         "case": ".loc.",
-        "note": "Locus -> Verb Relation",
+        "note": "Locus  Verb Relation",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -893,7 +893,7 @@ var list_relation=[
     {
         "id": "LOV",
         "case": ".loc.",
-        "note": "容器 -> 动词<br>在…",
+        "note": "容器  动词<br>在…",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -902,7 +902,7 @@ var list_relation=[
     {
         "id": "LOV",
         "case": ".loc.",
-        "note": "ādhāra -> ādheyya",
+        "note": "ādhāra  ādheyya",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -920,7 +920,7 @@ var list_relation=[
     {
         "id": "MOT",
         "case": ".loc.",
-        "note": "表现 -> 有表现",
+        "note": "表现  有表现",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -929,7 +929,7 @@ var list_relation=[
     {
         "id": "MOT",
         "case": ".loc.",
-        "note": "nimitta -> nimittavant",
+        "note": "nimitta  nimittavant",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -938,7 +938,7 @@ var list_relation=[
     {
         "id": "WHP",
         "case": ".loc.",
-        "note": "Whole -> Part Relation",
+        "note": "Whole  Part Relation",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -947,7 +947,7 @@ var list_relation=[
     {
         "id": "WHP",
         "case": ".loc.",
-        "note": "整体 -> 局部<br>XX中的",
+        "note": "整体  局部<br>XX中的",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -956,7 +956,7 @@ var list_relation=[
     {
         "id": "WHP",
         "case": ".loc.",
-        "note": "samudāya -> samudāyin",
+        "note": "samudāya  samudāyin",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -965,7 +965,7 @@ var list_relation=[
     {
         "id": "COI",
         "case": ".loc.",
-        "note": "Collection -> Individual Relation",
+        "note": "Collection  Individual Relation",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -974,7 +974,7 @@ var list_relation=[
     {
         "id": "COI",
         "case": ".loc.",
-        "note": "集合 -> 个体元素<br>XXX中的一个",
+        "note": "集合  个体元素<br>XXX中的一个",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -983,7 +983,7 @@ var list_relation=[
     {
         "id": "COI",
         "case": ".loc.",
-        "note": "niddhāraṇasamudāya -> nidhāraṇīya",
+        "note": "niddhāraṇasamudāya  nidhāraṇīya",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1010,7 +1010,7 @@ var list_relation=[
     {
         "id": "IAD",
         "case": ".caus.",
-        "note": "tulyādhikaraṇavisesana -> visesya",
+        "note": "tulyādhikaraṇavisesana  visesya",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1055,7 +1055,7 @@ var list_relation=[
     {
         "id": "ASV",
         "case": ".inf.",
-        "note": "施动者<主格> -> 动词",
+        "note": "施动者<主格>  动词",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1064,7 +1064,7 @@ var list_relation=[
     {
         "id": "ASV",
         "case": ".inf.",
-        "note": "vuttakattar -> kiriyā",
+        "note": "vuttakattar  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1109,7 +1109,7 @@ var list_relation=[
     {
         "id": "CAU",
         "case": ".abs.",
-        "note": "使役",
+        "note": "因 ➡ 果",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1136,7 +1136,7 @@ var list_relation=[
     {
         "id": "DASO-P",
         "case": ".abs.",
-        "note": "<字面>主语 -> 系动词",
+        "note": "<字面>主语  系动词",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1145,7 +1145,7 @@ var list_relation=[
     {
         "id": "DASO-P",
         "case": ".abs.",
-        "note": "pakati <vuttakattar> -> kiriyā",
+        "note": "pakati <vuttakattar>  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1163,7 +1163,7 @@ var list_relation=[
     {
         "id": "DASO-S",
         "case": ".abs.",
-        "note": "<字面>表语 -> 系动词",
+        "note": "<字面>表语  系动词",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1172,7 +1172,7 @@ var list_relation=[
     {
         "id": "DASO-S",
         "case": ".abs.",
-        "note": "vikati <vuttakattar> -> kiriyā",
+        "note": "vikati <vuttakattar>  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1190,7 +1190,7 @@ var list_relation=[
     {
         "id": "DASD-P",
         "case": ".abs.",
-        "note": "<命名>主 -> 系",
+        "note": "<命名>主  系",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1199,7 +1199,7 @@ var list_relation=[
     {
         "id": "DASD-P",
         "case": ".abs.",
-        "note": "pakati<saññin, nāmin> -> kiriyā",
+        "note": "pakati<saññin, nāmin>  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1217,7 +1217,7 @@ var list_relation=[
     {
         "id": "DASD-S",
         "case": ".abs.",
-        "note": "<命名>表 -> 系",
+        "note": "<命名>表  系",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1226,7 +1226,7 @@ var list_relation=[
     {
         "id": "DASD-S",
         "case": ".abs.",
-        "note": "vikati<saññā,nāma> -> kiriyā",
+        "note": "vikati<saññā,nāma>  kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1253,7 +1253,7 @@ var list_relation=[
     {
         "id": "DEF",
         "case": "",
-        "note": "lakkhaṇa -> lakkhya",
+        "note": "lakkhaṇa  lakkhya",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1352,7 +1352,7 @@ var list_relation=[
     {
         "id": "QUS",
         "case": "",
-        "note": "引号内 -> 引号",
+        "note": "引号内  引号",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1361,7 +1361,7 @@ var list_relation=[
     {
         "id": "QUS",
         "case": "",
-        "note": "nidassetabba -> nidassana",
+        "note": "nidassetabba  nidassana",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1379,7 +1379,7 @@ var list_relation=[
     {
         "id": "QUM",
         "case": "",
-        "note": "引号 -> 引号外",
+        "note": "引号  引号外",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1388,7 +1388,7 @@ var list_relation=[
     {
         "id": "QUM",
         "case": "",
-        "note": "nidassana -> nidassanavant",
+        "note": "nidassana  nidassanavant",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1406,7 +1406,7 @@ var list_relation=[
     {
         "id": "ENU",
         "case": ".adv.",
-        "note": "罗列 -> 破折号",
+        "note": "罗列  破折号",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1433,7 +1433,7 @@ var list_relation=[
     {
         "id": "ENM",
         "case": ".adv.",
-        "note": "破折号 -> 被罗列<br>- XXX",
+        "note": "破折号  被罗列<br>- XXX",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1451,7 +1451,7 @@ var list_relation=[
     {
         "id": "LOV",
         "case": ".adv.",
-        "note": "Locus -> Verb Relation",
+        "note": "Locus  Verb Relation",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1460,7 +1460,7 @@ var list_relation=[
     {
         "id": "LOV",
         "case": ".adv.",
-        "note": "容纳 -> 被容纳<br>在…",
+        "note": "容纳  被容纳<br>在…",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",
@@ -1469,7 +1469,7 @@ var list_relation=[
     {
         "id": "LOV",
         "case": ".adv.",
-        "note": "ādhāra -> ādheyya",
+        "note": "ādhāra  ādheyya",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
         "editor": "Bhikkhu Kosalla sy1987",

+ 209 - 97
public/app/term/note.js

@@ -217,6 +217,9 @@ function note_refresh_new(callback = null) {
 						//初始化mermaid
 						mermaid.initialize({startOnLoad:true});
 
+                        //初始化气泡
+                        guide_init();
+
 					} catch (e) {
 						console.error(e);
 					}
@@ -620,17 +623,17 @@ function onChannelChange() {
 	set_channal(channal_list.join());
 }
 //点击引用 需要响应的事件
-function note_ref_init() {
+function note_ref_init(target='_blank') {
 	$("chapter").click(function () {
 		let bookid = $(this).attr("book");
 		let para = $(this).attr("para");
-		window.open("../article/?view=chapter&book=" + bookid + "&par=" + para, "_blank");
+		window.open("../article/?view=chapter&book=" + bookid + "&par=" + para, target);
 	});
 
 	$("para").click(function () {
 		let bookid = $(this).attr("book");
 		let para = $(this).attr("para");
-		window.open("../article/?view=para&book=" + bookid + "&par=" + para, "_blank");
+		window.open("../article/?view=para&book=" + bookid + "&par=" + para, target);
 	});
 }
 /*
@@ -1000,7 +1003,7 @@ function render_one_sent_tran_a(iterator, diff = false) {
             }else{
                 tranText = iterator.text;
             }
-			tranText = note_init(term_std_str_to_tran(tranText, iterator.channal, iterator.editor, iterator.lang));
+			tranText = note_init(tranText, iterator.channal, iterator.editor, iterator.lang);
             if(iterator.type=='nissaya' || iterator.channalinfo.type=='nissaya'){
                 tranText = "<div class='nissaya'>"+tranText+"</div>";
             }
@@ -1255,33 +1258,191 @@ function render_one_sent_tran_a(iterator, diff = false) {
 	html += "</div>";
 	return html;
 }
+//渲染nissaya单词
 function renderNissayaPreview(str){
     let html ='';
-    //html +="<div class='nissaya'>";
     const sent = str.split("\n");
     for (const iterator of sent) {
         const word =  iterator.split("=");
         if(iterator.indexOf('=')>=0){
             html += "<span class='nsy_word'>"
-            html += "<span class='org'>";
+            html += "<span class='org' lang=";
             switch (getCookie('language')) {
                 case 'my':
+                    html += "'my' >";
                     html +=  $.trim(word[0]) + "၊";
                     break;
                 default:
+                    html += "'en' >";
                     html += my_to_roman(word[0]);
                     break;
             }
             html += "</span>";
-            html += "<span class='meaning'>"+ word[1]+"</span>";
+            html += "<span class='meaning'>";
+            if (getCookie('language') !="my") {
+                let noPeriod = word[1].split('။');
+                noPeriod[0] = myEndingTooltip(noPeriod[0]);
+                html += noPeriod.join('။');
+            }else{
+                html += word[1];
+            }
+            html += "</span>";
             html += "</span>";
         }else{
             html += iterator;
         }
+        html += "\n";
     }
-    //html += "</div>";
     return html;
 }
+//缅文语尾高亮和提示气泡
+function myEndingTooltip(inStr){
+    let myEnding=[
+        {
+            id:"my_nom1",
+            name:"သည်",
+            tooltip:'主语',
+        },
+        {
+            id:"my_nom2",
+            name:"ကား",
+            tooltip:'主格/主语',
+        },        
+        {
+            id:"my_nom3",
+            name:"က",
+            tooltip:'主格/主语',
+        },        
+        {
+            id:"my_acc1",
+            name:"ကို",
+            tooltip:'宾格/宾语',
+        },
+        {
+            id:"my_acc2",
+            name:"သို့",
+            tooltip:'宾格/趋向',
+        },
+        {
+            id:"my_inst1",
+            name:"ဖြင့်",
+            tooltip:'具格/用',
+        },
+        {
+            id:"my_inst2",
+            name:"နှင့်",
+            tooltip:'具格/与',
+        },
+        {
+            id:"my_inst3",
+            name:"ကြောင့်",
+            tooltip:'具格/凭借;从格/原因',
+        },
+        {
+            id:"my_dat1",
+            name:"အား",
+            tooltip:'目的格/对象(间接宾语),对……来说',
+        },
+        {
+            id:"my_dat2",
+            name:"ငှာ",
+            tooltip:'目的格/表示目的,为了……',
+        },
+        {
+            id:"my_abl1",
+            name:"မှ",
+            tooltip:'从格/表示来源,从……',
+        },
+        {
+            id:"my_abl2",
+            name:"အောက်",
+            tooltip:'从格/表达比较,比……多',
+        },
+        {
+            id:"my_abl3",
+            name:"ထက်",
+            tooltip:'从格/表达比较,比……少',
+        },
+        {
+            id:"my_gen1",
+            name:"၏",
+            tooltip:'属格/的',
+        },
+        {
+            id:"my_gen2",
+            name:"တွင်",
+            tooltip:'属格/表达范围,……中的',
+        },
+        {
+            id:"my_loc1",
+            name:"၌",
+            tooltip:'处格/处(范围)',
+        },
+        {
+            id:"my_loc2",
+            name:"ကြောင့်",
+            tooltip:'处格/表达动机,因……,旨在……',
+        },
+        {
+            id:"my_abs",
+            name:"၍",
+            tooltip:'连续体',
+        },
+        {
+            id:"my_pl",
+            name:"တို့",
+            tooltip:'复数',
+        },
+        {
+            id:"my_pl",
+            name:"များ",
+            tooltip:'复数',
+        },
+        {
+            id:"my_pl",
+            name:"ကုန်",
+            tooltip:'复数',
+        },
+        {
+            id:"my_pl",
+            name:"ကြ",
+            tooltip:'复数',
+        },
+        {
+            id:"my_time",
+            name:"ပတ်လုံး",
+            tooltip:'时间的整数',
+        },
+        {
+            id:"my_time",
+            name:"လုံလုံး",
+            tooltip:'时间的整数',
+        },
+        {
+            id:"my_length",
+            name:"တိုင်တိုင်",
+            tooltip:'距离,长度的整数',
+        },
+        {
+            id:"my_length",
+            name:"တိုင်အောင်",
+            tooltip:'距离,长度的整数',
+        },
+        {
+            id:"my_def",
+            name:"နေစဉ်",
+            tooltip:'同时发生的时间状语(当……的时候)',
+        },
+    ];
+
+    for (const iterator of myEnding) {
+        if(inStr.indexOf(iterator.name)>=0){
+			eval("inStr=inStr.replace(/" + iterator.name + " /g,\"<guide gid='grammar_"+iterator.id+"' class='grammar_tag' style='display:unset;'>\"+iterator.name+\"</guide> \");");
+			eval("inStr=inStr.replace(/" + iterator.name + "$/g,\"<guide gid='grammar_"+iterator.id+"' class='grammar_tag' style='display:unset;'>\"+iterator.name+\"</guide>\");");
+        }
+    }
+    return inStr;
+}
 function tran_sent_textarea_event_init() {
 	let textarea = document.querySelectorAll(".tran_sent_textarea");
 	for (let iterator of textarea) {
@@ -1393,7 +1554,7 @@ function render_one_sent_tran(book, para, begin, end, iterator) {
 			"</span>";
 	} else {
 		//note_init处理句子链接
-		output += note_init(term_std_str_to_tran(iterator.text, iterator.channal, iterator.editor, iterator.lang));
+		output += note_init(iterator.text, iterator.channal, iterator.editor, iterator.lang);
 	}
 	output += "</div>";
 	//译文正文结束
@@ -1415,6 +1576,32 @@ function hidden_control(obj) {
 	}
 }
 
+function renderChannelButton(eChannel,obj){
+    let html="";
+    if (_channal.indexOf(eChannel.uid) < 0) {
+        html += '<li class="channel_name" onclick="';
+        html +=
+            "new_sentence('" +
+            $(obj).parent().attr("book") +
+            "' ,'" +
+            $(obj).parent().attr("para") +
+            "' ,'" +
+            $(obj).parent().attr("begin") +
+            "' ,'" +
+            $(obj).parent().attr("end") +
+            "' ,'" +
+            eChannel.uid +
+            "',this)";
+        html += '" title="' + eChannel.nickname;
+        html += '">' + eChannel.name;
+        if (parseInt(eChannel.power) < 20) {
+            html += "(建议)";
+        }
+        html += "</li>";
+    }
+    return html;
+}
+
 function add_new_tran_button_click(obj) {
 
 	let html = "<div style='display:flex; max-width: 70vw; white-space: normal;'>";
@@ -1432,27 +1619,7 @@ function add_new_tran_button_click(obj) {
 	html += "</li>";
 	for (const iterator of _my_channal) {
 		if (iterator.status > 0 && first_lang.indexOf(iterator.lang) != -1 && iterator.lang != 0) {
-			if (_channal.indexOf(iterator.id) < 0) {
-				html += '<li class="channel_name" onclick="';
-				html +=
-					"new_sentence('" +
-					$(obj).parent().attr("book") +
-					"' ,'" +
-					$(obj).parent().attr("para") +
-					"' ,'" +
-					$(obj).parent().attr("begin") +
-					"' ,'" +
-					$(obj).parent().attr("end") +
-					"' ,'" +
-					iterator.id +
-					"',this)";
-				html += '" title="' + iterator.nickname;
-				html += '">' + iterator.name;
-				if (parseInt(iterator.power) < 20) {
-					html += "(建议)";
-				}
-				html += "</li>";
-			}
+            html += renderChannelButton(iterator,obj);
 		}
 	}
 	html += "<li><a href='../channal/my_channal_index.php' target='_blank'><button>" + gLocal.gui.new + "&nbsp;" + gLocal.gui.channel + "</button></a></li>"
@@ -1465,27 +1632,7 @@ function add_new_tran_button_click(obj) {
 	html += "</li>";
 	for (const iterator of _my_channal) {
 		if (iterator.status > 0 && first_lang.indexOf(iterator.lang) == -1 && iterator.lang != 0) {
-			if (_channal.indexOf(iterator.id) < 0) {
-				html += '<li class="channel_name" onclick="';
-				html +=
-					"new_sentence('" +
-					$(obj).parent().attr("book") +
-					"' ,'" +
-					$(obj).parent().attr("para") +
-					"' ,'" +
-					$(obj).parent().attr("begin") +
-					"' ,'" +
-					$(obj).parent().attr("end") +
-					"' ,'" +
-					iterator.id +
-					"',this)";
-				html += '" title="' + iterator.nickname;
-				html += '">' + iterator.name;
-				if (parseInt(iterator.power) < 20) {
-					html += "(建议)";
-				}
-				html += "</li>";
-			}
+			html += renderChannelButton(iterator,obj);
 		}
 	}
 	html += "</ul>";
@@ -1496,27 +1643,7 @@ function add_new_tran_button_click(obj) {
 	html += "</li>";
 	for (const iterator of _my_channal) {
 		if (iterator.status > 0 && iterator.lang == 0 && checkStringIsChinese(iterator.name) == true) {
-			if (_channal.indexOf(iterator.id) < 0) {
-				html += '<li class="channel_name" onclick="';
-				html +=
-					"new_sentence('" +
-					$(obj).parent().attr("book") +
-					"' ,'" +
-					$(obj).parent().attr("para") +
-					"' ,'" +
-					$(obj).parent().attr("begin") +
-					"' ,'" +
-					$(obj).parent().attr("end") +
-					"' ,'" +
-					iterator.id +
-					"',this)";
-				html += '" title="' + iterator.nickname;
-				html += '">' + iterator.name;
-				if (parseInt(iterator.power) < 20) {
-					html += "(建议)";
-				}
-				html += "</li>";
-			}
+			html += renderChannelButton(iterator,obj);
 		}
 	}
 	html += "</ul>";
@@ -1527,27 +1654,7 @@ function add_new_tran_button_click(obj) {
 	html += "</li>";
 	for (const iterator of _my_channal) {
 		if (iterator.status > 0 && iterator.lang == 0 && checkStringIsChinese(iterator.name) == false) {
-			if (_channal.indexOf(iterator.id) < 0) {
-				html += '<li class="channel_name" onclick="';
-				html +=
-					"new_sentence('" +
-					$(obj).parent().attr("book") +
-					"' ,'" +
-					$(obj).parent().attr("para") +
-					"' ,'" +
-					$(obj).parent().attr("begin") +
-					"' ,'" +
-					$(obj).parent().attr("end") +
-					"' ,'" +
-					iterator.id +
-					"',this)";
-				html += '" title="' + iterator.nickname;
-				html += '">' + iterator.name;
-				if (parseInt(iterator.power) < 20) {
-					html += "(建议)";
-				}
-				html += "</li>";
-			}
+			html += renderChannelButton(iterator,obj);
 		}
 	}
 	html += "</ul>";
@@ -1715,7 +1822,8 @@ function set_more_button_display() {
                                 if(channelType==='commentary'){
                                     note_refresh_new();
                                 }
-
+                                popup_init();
+                                guide_init();
 								//初始化文本编辑框消息处理
 								tran_sent_textarea_event_init();
 							}
@@ -1740,7 +1848,7 @@ function set_more_button_display() {
 function note_edit_sentence(book, para, begin, end, channal) {
 	let channalInfo;
 	for (const iterator of _channalData) {
-		if (iterator.id == channal) {
+		if (iterator.uid == channal) {
 			channalInfo = iterator;
 			break;
 		}
@@ -1935,7 +2043,9 @@ function sent_save_callback(data) {
 					}
                     switch (thisChannel.type) {
                         case 'nissaya':
-                            divPreview.html(renderNissayaPreview(result.text));
+                            divPreview.html(
+                                "<div class='nissaya'>"+note_init(renderNissayaPreview(result.text), result.channal, result.editor, result.lang)+"</div>"
+                                );
                             break;
                         case 'commentary':
                             divPreview.html(
@@ -1945,12 +2055,14 @@ function sent_save_callback(data) {
                         break;
                         default:
                             divPreview.html(
-                                marked(term_std_str_to_tran(result.text, result.channal, result.editor, result.lang))
+                                note_init(result.text, result.channal, result.editor, result.lang)
                             );
                             term_updata_translation();                        
                             break;
                     }
 					popup_init();
+                    //初始化气泡
+                    guide_init();
 				}
 			}
 		} else if (result.commit_type == 3) {

+ 1 - 1
public/app/term/popup_note.css

@@ -49,7 +49,7 @@ code ol {
 	box-shadow: 0px 3px 13px 0px var(--shadow-color);
 	color: var(--main-color);
 	z-index: 200;
-	font-family: "Noto Sans", "Noto Sans SC", "Noto Sans TC", Arial, Verdana;
+	/*font-family: "Noto Sans", "Noto Sans SC", "Noto Sans TC", Arial, Verdana;*/
 }
 
 .popup_contence:after {

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно