var _display = "para"; var _mode = "read"; var _direction = "row"; var _word = ""; var _channal = ""; var _lang = ""; var _author = ""; var _arrData = new Array(); var _channalData; var MAX_NOTE_NEST = 2; var gBuildinDictIsOpen = false; var note_renderer = new marked.Renderer(); note_renderer.code = function(code, language) { if (language == "mermaid") return '
' + code + ""; else return "
" + code + "";
};
/*
{{203-1654-23-45@11@en@*}}
标签作为气泡注释
popup_init();
//刷新句子链接递归,有加层数限制。
//note_refresh_new();
//将新的数据添加到数据总表
_arrData = _arrData.concat(sentData);
note_ref_init();
//获取术语字典
term_get_dict(callback);
//刷新channel列表
note_channal_list();
//显示不同的巴利语脚本
refresh_pali_script();
//把巴利语单词用分隔用于点词查询等
splite_pali_word();
//处理编辑框消息
tran_sent_textarea_event_init();
//处理鼠标移入显示菜单消息
setSentToolBarEvent();
//初始化mermaid
mermaid.initialize({startOnLoad:true});
//初始化气泡
guide_init();
} catch (e) {
console.error(e);
}
}
}
);
} else {
term_get_dict(callback);
}
return arrSentInfo.length;
}
//渲染巴利原文句子
function render_pali_sent(palitext){
let output = "";
output =
"";
if(palitext.book<1000){
output += palitext.palitext;
}
else{
output += marked(palitext.palitext);
}
output +=" ";
return output;
}
//渲染阅读模式句子
function render_read_mode_sent(iterator) {
let id = iterator.id;
let strPalitext =render_pali_sent(iterator);
if (
$("#" + id)
.parent()
.parent()
.children(".para_div").length == 0
) {
let tranDivHtml = "";
if (_channal != "") {
let arrChannal = _channal.split(",");
for (let index = arrChannal.length - 1; index >= 0; index--) {
const iChannal = arrChannal[index];
tranDivHtml += "";
}
} else {
tranDivHtml = "";
}
$("#" + id)
.parent()
.parent()
.prepend(
""+
""+
""+
""+
""+
"" +
tranDivHtml +
""
);
}
$("#" + id)
.parent()
.parent()
.children(".para_div")
.find(".palitext")
.first()
.append(strPalitext);
let htmlSent = "";
htmlSent += "";
htmlSent += "";
htmlSent += "" + strPalitext + "";
htmlSent += "";
htmlSent += iterator.book + "-" + iterator.para + "-" + iterator.begin + "-" + iterator.end;
htmlSent += "";
htmlSent += "";
htmlSent += "";
htmlSent += "";
for (const oneTran of iterator.translation) {
let html = "";
//将绝对链接转换为 用户连接的主机链接
//oneTran.text = oneTran.text.replace(/www-[A-z]*.wikipali.org/g,location.host);
html += marked(term_std_str_to_tran(oneTran.text, oneTran.channal, oneTran.editor, oneTran.lang));
html += "";
htmlSent += html;
let channelId = "0";
if (_channal != "") {
channelId = oneTran.channal;
}
$("#" + id)
.parent()
.parent()
.find(".tran_div_channel[channal='" + channelId + "']")
.append(html);
}
htmlSent += "";
htmlSent += ""; //note_body
htmlSent += "";
htmlSent += "" + iterator.ref + "";
htmlSent +=
"" +
iterator.book +
"-" +
iterator.para +
"-" +
iterator.begin +
"-" +
iterator.end +
"";
htmlSent += ""; //note_foot
return htmlSent;
}
//生成channel列表
function note_channal_list() {
console.log("note_channal_list start");
let arrSentInfo = new Array();
$("note").each(function () {
let info = $(this).attr("info");
if (info && info != "") {
arrSentInfo.push({ id: "", data: info });
}
});
if (arrSentInfo.length > 0) {
$.post(
"../term/channal_list.php",
{
setting: "",
data: JSON.stringify(arrSentInfo),
},
function (data, status) {
if (status == "success") {
try {
let active = JSON.parse(data);
_channalData = active;
for (const iterator of _my_channal) {
let found = false;
for (const one of active) {
if (iterator.uid == one.uid) {
found = true;
break;
}
}
if (found == false) {
_channalData.push(iterator);
}
}
let strHtml = "";
for (const iterator of _channalData) {
if (_channal.indexOf(iterator.id) >= 0) {
strHtml += render_channal_list(iterator);
}
}
for (const iterator of _channalData) {
if (_channal.indexOf(iterator.id) == -1) {
strHtml += render_channal_list(iterator);
}
}
$("#channal_list").html(strHtml);
set_more_button_display();
let lang=new Object();
let currLang=_lang;
let firstChannel="";
if(_channal!=""){
firstChannel = _channal.split(",")[0];
}
for (const iterator of _channalData) {
lang[iterator.lang]=1;
if(iterator.id==firstChannel){
currLang = iterator.lang;
}
}
let htmlLangSelect="";
let isLangMatched=false;
for (const key in lang) {
if (lang.hasOwnProperty.call(lang, key)) {
let strLang = key;
if(gLocal.language.hasOwnProperty.call(gLocal.language, key)){
strLang = gLocal.language[key];
}
htmlLangSelect += "";
}
}
$("#select_lang").html(htmlLangSelect);
if(isLangMatched){
render_edition_list(currLang);
}else{
render_edition_list("");
}
} catch (e) {
console.error(e);
}
}
}
);
}
}
function lang_changed(obj){
_lang = $(obj).val();
render_edition_list(_lang);
}
//顶部的版本列表
function render_edition_list(lang=""){
let firstChannel="";
if(_channal!=""){
firstChannel = _channal.split(",")[0];
}
let html = "";
html += "";
let currChannel="选择一个版本";
for (const iterator of _channalData) {
if(iterator.id==firstChannel){
currChannel = iterator.name;
}
if(lang=="" || (lang!="" && lang==iterator.lang)){
if (iterator["final"]){
html += ""+iterator.name+"";
}
}
}
html +="";
html = ""+currChannel+"▼" + html;
$("#edition_dropdown").html(html);
}
function edition_list_changed(channelId){
_channal = channelId;
render_edition_list(_lang);
set_channal(channelId);
}
function find_channal(id) {
for (const iterator of _channalData) {
if (id == iterator.id || id == iterator.uid) {
return iterator;
}
}
return false;
}
//生成版本列表
//选择列表中的版本切换页面
function render_channal_list(channalinfo) {
let output = "";
let checked = "";
let selected = "noselect";
if (_channal.indexOf(channalinfo.uid) >= 0) {
checked = "checked";
selected = "selected";
}
output += "";
output += '";
output +=
'";
output += "";
output += "";
if (parseInt(channalinfo.power) == 30) {
output += gLocal.gui.your.slice(0, 1);
} else {
output += channalinfo.nickname.slice(0, 1);
}
output += "";
output += "";
output += "";
output += "";
return output;
}
function onChannelMultiSelectStart() {
$(".channel_select").show();
}
function onChannelMultiSelectCancel() {
$(".channel_select").hide();
}
function onChannelChange() {
let channal_list = new Array();
$("[channal_id]").each(function () {
if (this.checked) {
channal_list.push($(this).attr("channal_id"));
}
});
set_channal(channal_list.join());
}
//点击引用 需要响应的事件
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, target);
});
$("para").click(function () {
let bookid = $(this).attr("book");
let para = $(this).attr("para");
window.open("../article/?view=para&book=" + bookid + "&par=" + para, target);
});
}
/*
生成编辑模式句子块
id
palitext
tran
ref
*/
function note_json_html(in_json) {
let output = "";
output += '";
let strPalitext = render_pali_sent(in_json);
output += "";
output += "";
output += "" + strPalitext + "";
output += "";
output += "";
output += "";
//译文开始
output += "";
for (const iterator of in_json.translation) {
if(iterator.channalinfo.type != "commentary"){
output += render_one_sent_tran_a(iterator);
}
}
output += "";
//译文结束
output += ""; /**note_body end */
//工具栏开始
let sent_id = in_json.book + "-" + in_json.para + "-" + in_json.begin + "-" + in_json.end;
output += "";
output += "";
//工具栏结束
//未选择的其他译文开始
output += "";
output += "";
output += "";
return output;
}
//设置取消输入框的编辑模式
function sent_tran_set_edit_mode(obj, isEditMode) {
$(".sent_tran").removeClass("edit_mode");
if (isEditMode) {
let jqObj = $(obj);
while (!jqObj.hasClass("sent_tran")) {
jqObj = jqObj.parent();
if (!jqObj) {
return;
}
}
jqObj.addClass("edit_mode");
}
}
function sent_tran_edit(obj) {
let jqObj = $(obj);
while (!jqObj.hasClass("sent_tran")) {
jqObj = jqObj.parent();
if (!jqObj) {
return;
}
}
if (jqObj.hasClass("edit_mode")) {
jqObj.removeClass("edit_mode");
} else {
$(".sent_tran").removeClass("edit_mode");
jqObj.addClass("edit_mode");
}
}
//采纳 pr
function sent_pr_merge(id) {
$.post(
"../usent/sent_pr_merge.php",
{
id: id,
},
function (data) {
let result = JSON.parse(data);
if (result.status > 0) {
alert("error" + result.message);
} else {
ntf_show("成功采纳");
}
}
);
}
function sent_commit(src, id) {
commit_init({
src: src,
sent: [id],
express: false,
});
}
function chapter_Dynamic_open(channel_id){
}
function render_icon_button(icon_id, event, tiptitle) {
let html = "";
html += "";
return html;
}
var menuFocusIndex=0;
var term_data=["amanussa","anadhiṭṭhita","anantarāya","anissaṭṭha","aniyata","antaravāsaka"];
var term_filterd_data=[];
var term_input_text ;
var term_input="";
function TermRenderSentTranTextarea(text,dbId,sentId,channelId,isPr){
let html="";
html += '';
html += '';
html += '';
html += "";
html += '';
return html;
}
function render_one_sent_tran_a(iterator, diff = false) {
let mChannel = get_channel_by_id(iterator.channal);
let tranText;
let sid = iterator.book + "-" + iterator.para + "-" + iterator.begin + "-" + iterator.end;
//将绝对链接转换为 用户连接的主机链接
//let showText = iterator.text.replace(/www-[A-z]*.wikipali.org/g,location.host);
let showText = iterator.text;
if (iterator.text == "") {
if (typeof iterator.channalinfo == "undefined") {
tranText =
"" +
"空" +
"@" +
iterator.editor_name.nickname +
"";
} else {
tranText =
"" +
iterator.channalinfo.name +
"-" +
iterator.channalinfo.lang +
"";
}
} else {
if (diff) {
let orgText = "";
for (const oneSent of _arrData) {
if (
oneSent.book == iterator.book &&
oneSent.para == iterator.para &&
oneSent.begin == iterator.begin &&
oneSent.end == iterator.end
) {
for (const tran of oneSent.translation) {
if (tran.channal == iterator.channal) {
orgText = tran.text;
break;
}
}
break;
}
}
tranText = str_diff(orgText, iterator.text);
} else {
//note_init处理句子链接
if(iterator.type=='nissaya' || iterator.channalinfo.type=='nissaya'){
tranText = renderNissayaPreview(iterator.text);
}else{
tranText = iterator.text;
}
tranText = note_init(tranText, iterator.channal, iterator.editor, iterator.lang);
if(iterator.type=='nissaya' || iterator.channalinfo.type=='nissaya'){
tranText = ""+tranText+"";
}
}
}
let html = "";
html += "";
html += "";
html += '";
//tool_bar 结束
html += '";
html += '';
html += '";
html += '';
html += '';
//输入框
html += TermRenderSentTranTextarea(iterator.text,iterator.id,sid,iterator.channal,iterator.is_pr);
html += "";
html += '';
//html += ""
html += '';
html += ' = ';
html += "" + gLocal.gui.cancel + "";
html += "";
html += "";
html += '';
html += "➕";
html += ' = ';
if (parseInt(iterator.mypower) < 20) {
html += "";
html += gLocal.gui.submit + "" + gLocal.gui.suggest + gLocal.gui.translation + "";
html += "";
} else {
html += "";
html += gLocal.gui.save;
html += "";
}
html += ' = ';
html += gLocal.gui.next_line;
html += "MarkDown✅";
html += "";
html += "";
html += '"; //end of foot bar
html += "";
html += "";
//sent_tran_inner结束
html += '';
html += "";
return html;
}
//渲染nissaya单词
function renderNissayaPreview(str){
let html ='';
const sent = str.split("\n");
for (const iterator of sent) {
const word = iterator.split("=");
if(iterator.indexOf('=')>=0){
html += ""
html += "";
html += $.trim(word[0]) + "၊";
break;
default:
html += "'en' >";
html += my_to_roman(word[0]);
break;
}
html += "";
html += "";
if (getCookie('language') !="my") {
let noPeriod = word[1].split('။');
noPeriod[0] = myEndingTooltip(noPeriod[0]);
html += noPeriod.join('။');
}else{
html += word[1];
}
html += "";
html += "";
}else{
html += iterator;
}
html += "\n";
}
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,\"\"+iterator.name+\" \");");
eval("inStr=inStr.replace(/" + iterator.name + "$/g,\"\"+iterator.name+\" \");");
}
}
return inStr;
}
function tran_sent_textarea_event_init() {
let textarea = document.querySelectorAll(".tran_sent_textarea");
for (let iterator of textarea) {
iterator.onkeydown = function (e) {
let menu = document.querySelector("#menu");
switch (e.key) {
case "Enter":
if (menu && menu.style.display == "block") {
let value = textarea.value;
let selectionStart = textarea.selectionStart;
let str1 = value.slice(0, selectionStart);
let str2 = value.slice(selectionStart);
textarea.value = str1 + data[menuFocusIndex] + "]]" + str2;
menu.style.display = "none";
return false;
} else {
if (e.ctrlKey) {
//回车存盘
tran_sent_save(e.currentTarget);
return false;
}
}
break;
case "Escape":
tran_sent_edit_cancel(e.currentTarget);
break;
default:
break;
}
};
}
}
function render_one_sent_tran(book, para, begin, end, iterator) {
let output = "";
output += "";
//译文工具按钮开始
output += "";
output +=
"";
//译文工具栏开始
output += "";
//译文工具栏结束
output += "";
//译文工具按钮结束
//译文正文开始
output +=
"";
if (iterator.text == "") {
output +=
"" +
iterator.channalinfo.name +
"-" +
iterator.channalinfo.lang +
"";
} else {
//note_init处理句子链接
output += note_init(iterator.text, iterator.channal, iterator.editor, iterator.lang);
}
output += "";
//译文正文结束
output += "";
//单个channal译文框结束
return output;
}
function hidden_control(obj) {
if ($(".lang_2")[0].style.display == "none" && $(".lang_3")[0].style.display == "none") {
$(".lang_2").show();
$(".lang_3").show();
obj.innerHTML = "⬅"
}
else {
$(".lang_2").hide();
$(".lang_3").hide();
obj.innerHTML = "➡"
}
}
function renderChannelButton(eChannel,obj){
let html="";
if (_channal.indexOf(eChannel.uid) < 0) {
html += '' + eChannel.name;
if (parseInt(eChannel.power) < 20) {
html += "(建议)";
}
html += " ";
}
return html;
}
function add_new_tran_button_click(obj) {
let html = "";
var first_lang = "";
for (const iterator of _my_channal) {
if (iterator.lang) {
first_lang = iterator.lang;
break;
}
}
//母语channel列表
html += "";
html += "- ";
html += gLocal.language[first_lang];
html += "
";
for (const iterator of _my_channal) {
if (iterator.status > 0 && first_lang.indexOf(iterator.lang) != -1 && iterator.lang != 0) {
html += renderChannelButton(iterator,obj);
}
}
html += " "
html += "
";
//非母语channel列表
html += "";
html += "- ";
html += gLocal.gui.other;
html += " "
html += "
";
for (const iterator of _my_channal) {
if (iterator.status > 0 && first_lang.indexOf(iterator.lang) == -1 && iterator.lang != 0) {
html += renderChannelButton(iterator,obj);
}
}
html += "
";
//协作channel列表-带中文
html += "";
//协作channel列表-不带中文
html += "";
html += "";
$(obj).parent().children(".tran_text_tool_bar").first().html(html);
if ($(obj).parent().children(".tran_text_tool_bar").css("display") == "block") {
$(obj).parent().children(".tran_text_tool_bar").first().hide();
} else {
$(obj).parent().children(".tran_text_tool_bar").first().show();
$(document).one("click", function () {
$(obj).parent().children(".tran_text_tool_bar").first().hide();
});
event.stopPropagation();
$(obj).parent().show();
}
}
function checkStringIsChinese(str) {
var pattern = new RegExp("[\u4E00-\u9FA5]+");
if (pattern.test(str)) {
return true;
}
return false;
}
function tool_bar_show(element) {
if ($(element).find(".tran_text_tool_bar").css("display") == "none") {
$(element).find(".tran_text_tool_bar").css("display", "flex");
$(element).find(".icon_expand").css("transform", "rotate(-180deg)");
$(element).css("background-color", "var(--btn-bg-color)");
$(element).css("visibility", "visible");
$(document).one("click", function () {
$(element).find(".tran_text_tool_bar").hide();
$(element).css("background-color", "var(--nocolor)");
$(element).find(".icon_expand").css("transform", "unset");
$(element).css("visibility", "");
});
event.stopPropagation();
} else {
$(element).find(".tran_text_tool_bar").hide();
$(element).css("background-color", "var(--nocolor)");
$(element).find(".icon_expand").css("transform", "unset");
$(element).css("visibility", "");
}
}
function new_sentence(book, para, begin, end, channel, obj) {
let newsent = { id: "", text: "", lang: "", channal: channel };
for (let iterator of _arrData) {
if (iterator.book == book && iterator.para == para && iterator.begin == begin && iterator.end == end) {
let found = false;
for (const tran of iterator.translation) {
if (tran.channal == channel) {
found = true;
break;
}
}
if (!found) {
iterator.translation.push(newsent);
}
}
}
if ($(obj).parent().parent().css("display") == "block") {
$(obj).parent().parent().hide();
}
note_edit_sentence(book, para, begin, end, channel);
}
//显示更多译文按钮动作
function set_more_button_display() {
$(".other_bar").each(function () {
const sentid = $(this).attr("sent").split("-");
const channelType = $(this).attr("channel_type");
const book = sentid[0];
const para = sentid[1];
const begin = sentid[2];
const end = sentid[3];
let count = 0;
let commentaryChannel=0;
if(channelType=='commentary'){
for (const iterator of _channal.split(',')) {
let thisChannel = find_channal(iterator);
if(thisChannel && thisChannel.type=='commentary'){
commentaryChannel++;
}
}
}
for (const iterator of _channalData) {
if (iterator.final && iterator.type==channelType) {
for (const onesent of iterator.final) {
let id = onesent.id.split("-");
if (book == id[0] && para == id[1] && begin == id[2] && end == id[3] && onesent.final) {
if(channelType=='commentary'){
count++;
}else{
if (_channal.indexOf(iterator.id) == -1) {
count++;
}
}
}
}
}
}
if (count > 0 || commentaryChannel>0)
{
$(this).find(".other_tran_num").html(count);
$(this).find(".other_tran_num").attr("style", "display:inline-flex;");
$(this).off('click')
.on('click',function () {
const sentid = $(this).attr("sent").split("-");
const channelType = $(this).attr("channel_type");
const book = sentid[0];
const para = sentid[1];
const begin = sentid[2];
const end = sentid[3];
let sentId = $(this).attr("sent");
let otherSentDiv = $(this).parent().parent().siblings(".other_tran").first();
if (otherSentDiv.css("display") == "none") {
otherSentDiv.slideDown();
//加号复位
//$(this).siblings(".more_tran ").css("transform", "unset");
$.get(
"../usent/get.php",
{
book: book,
para: para,
begin: begin,
end: end,
type:channelType,
},
function (data, status) {
let arrSent = JSON.parse(data);
let html = "";
if(channelType==='commentary'){
//先渲染被选择的channel
if (_channal != "") {
//for(const channel of _channal.split(","))
{
for (const sent of _arrData) {
if (sent.book == book && sent.para==para && sent.begin==begin && sent.end==end) {
for (const tran of sent.translation) {
if(tran.channalinfo.type=='commentary'){
html += render_one_sent_tran_a(tran);
}
}
break;
}
}
}
}
}
//然后渲染没有被选择的
for (const iterator of arrSent) {
if (_channal.indexOf(iterator.channal) == -1) {
html += render_one_sent_tran_a(iterator);
}
}
html += "";
otherSentDiv.html(html);
if(channelType==='commentary'){
note_refresh_new();
}
popup_init();
guide_init();
//初始化文本编辑框消息处理
tran_sent_textarea_event_init();
}
);
} else {
otherSentDiv.slideUp();
$(this).siblings(".more_tran ").css("transform", "rotate(-90deg)");
}
return false; // 阻止事件冒泡
});
}else
{
//隐藏自己
//$(this).hide();
$(this).addClass("disable");
//$(this).find(".more_tran").hide();
}
});
}
function note_edit_sentence(book, para, begin, end, channal) {
let channalInfo;
for (const iterator of _channalData) {
if (iterator.uid == channal) {
channalInfo = iterator;
break;
}
}
for (const iterator of _arrData) {
if (iterator.book == book && iterator.para == para && iterator.begin == begin && iterator.end == end) {
for (const tran of iterator.translation) {
if (tran.channal == channal) {
let html = "";
html += "" + channalInfo.name + "@" + channalInfo.nickname + "";
html +=
"";
$("#edit_dialog_content").html(html);
$("#note_sent_edit_dlg").dialog("open");
return;
}
}
}
}
alert("未找到句子");
}
function tran_sent_edit_cancel(obj) {
sent_tran_set_edit_mode(obj, false);
}
function tran_sent_save(obj) {
let sentDiv = find_sent_tran_div(obj);
if (sentDiv) {
let textarea = $(sentDiv).children('.sent_tran_inner').first().children('.body').first().children('.edit').find(".tran_sent_textarea").first();
//let textarea = $(sentDiv).children().find(".tran_sent_textarea").first();
let isPr = $(textarea).attr("is_pr");
if (isPr == "true") {
note_pr_save(textarea);
} else {
note_sent_save_a(textarea);
}
sent_tran_set_edit_mode(textarea, false);
} else {
console.error("sent div not found");
}
}
//保存pr句子 新
function note_pr_save(obj) {
let id = $(obj).attr("dbid");
let sid = $(obj).attr("sid").split("-");
let book = sid[0];
let para = sid[1];
let begin = sid[2];
let end = sid[3];
let channel = $(obj).attr("channel");
let text = $(obj).val();
let sent_tran_div = find_sent_tran_div(obj);
$.post(
"../usent/pr_post.php",
{
id: id,
book: book,
para: para,
begin: begin,
end: end,
channel: channel,
text: text,
},
sent_save_callback
);
if (sent_tran_div) {
$(sent_tran_div).addClass("loading");
}
}
//保存译文句子 新
function note_sent_save_a(obj) {
let id = $(obj).attr("dbid");
let sid = $(obj).attr("sid").split("-");
let book = sid[0];
let para = sid[1];
let begin = sid[2];
let end = sid[3];
let channal = $(obj).attr("channel");
let text = $(obj).val();
let sent_tran_div = find_sent_tran_div(obj);
$.ajaxSetup({
timeout: 5000,
});
$.post("../usent/sent_post.php", {
id: id,
book: book,
para: para,
begin: begin,
end: end,
channal: channal,
text: text,
lang: "zh",
})
.done(function (data) {
let result = JSON.parse(data);
if(result.commit_type==3){
$.post(
"/api/v2/sentpr",
{
book: book,
para: para,
begin: begin,
end: end,
channel: channal,
text: text,
},
function(data){
console.log('pr robot',data);
}
);
}
sent_save_callback(data);
})
.fail(function (xhr, error, data) {
let sid = book + "-" + para + "-" + begin + "-" + end;
let sent_tran_div = $(".sent_tran[channel='" + channal + "'][sid='" + sid + "']");
if (sent_tran_div) {
sent_tran_div.removeClass("loading");
sent_tran_div.addClass("error");
}
switch (error) {
case "timeout":
alert("服务器长时间没有回应。请稍后重试。");
break;
case "error":
alert("与服务器通讯失败,您可能没有连接到网络。请稍后重试。");
break;
case "notmodified":
break;
default:
break;
}
});
if (sent_tran_div) {
$(sent_tran_div).addClass("loading");
$(sent_tran_div).removeClass("error");
}
}
function update_sent_tran(sentData) {}
function sent_save_callback(data) {
let result;
try {
result = JSON.parse(data);
} catch (e) {
alert(e.message);
console.error('sent_save_callback',data);
return;
}
if (result.status > 0) {
alert("error" + result.message);
} else {
let sid = result.book + "-" + result.para + "-" + result.begin + "-" + result.end;
let sent_tran_div = $(
".sent_tran[dbid='" + result.id + "'][channel='" + result.channal + "'][sid='" + sid + "']"
);
if (sent_tran_div) {
sent_tran_div.removeClass("loading");
}
if (result.commit_type == 1 || result.commit_type == 2) {
ntf_show("成功修改");
if (sent_tran_div) {
let divPreview = sent_tran_div.find(".preview").first();
let thisChannel = find_channal(result.channal);
if (result.text == "") {
//内容为空
let channel_info = "Empty";
if (thisChannel) {
channel_info = thisChannel.name + "-" + thisChannel.nickname;
}
divPreview.html("" + channel_info + "");
} else {
for (const iterator of _arrData) {
if (
iterator.book == result.book &&
iterator.para == result.para &&
iterator.begin == result.begin &&
iterator.end == result.end
) {
for (const tran of iterator.translation) {
if (tran.channal == result.channal) {
tran.text = result.text;
break;
}
}
}
}
switch (thisChannel.type) {
case 'nissaya':
divPreview.html(
""+note_init(renderNissayaPreview(result.text), result.channal, result.editor, result.lang)+""
);
break;
case 'commentary':
divPreview.html(
note_init(result.text, result.channal, result.editor, result.lang)
);
note_refresh_new();
break;
default:
divPreview.html(
note_init(result.text, result.channal, result.editor, result.lang)
);
term_updata_translation();
break;
}
popup_init();
//初始化气泡
guide_init();
}
}
} else if (result.commit_type == 3) {
ntf_show("已经提交修改建议");
} else {
ntf_show("未提交");
}
}
}
//保存译文句子
function note_sent_save() {
let id = $("#edit_dialog_text").attr("sent_id");
let book = $("#edit_dialog_text").attr("book");
let para = $("#edit_dialog_text").attr("para");
let begin = $("#edit_dialog_text").attr("begin");
let end = $("#edit_dialog_text").attr("end");
let channal = $("#edit_dialog_text").attr("channal");
let text = $("#edit_dialog_text").val();
$.post(
"../usent/sent_post.php",
{
id: id,
book: book,
para: para,
begin: begin,
end: end,
channal: channal,
text: text,
lang: "zh",
},
function (data) {
let result = JSON.parse(data);
if (result.status > 0) {
alert("error" + result.message);
} else {
if (result.commit_type == 1 || result.commit_type == 2) {
ntf_show("成功修改");
if (result.text == "") {
let channel_info = "Empty";
let thisChannel = find_channal(result.channal);
if (thisChannel) {
channel_info = thisChannel.name + "-" + thisChannel.nickname;
}
$(
"#tran_text_" +
result.book +
"_" +
result.para +
"_" +
result.begin +
"_" +
result.end +
"_" +
result.channal
).html("" + channel_info + "");
} else {
$(
"#tran_text_" +
result.book +
"_" +
result.para +
"_" +
result.begin +
"_" +
result.end +
"_" +
result.channal
).html(marked(term_std_str_to_tran(result.text, result.channal, result.editor, result.lang)));
term_updata_translation();
for (const iterator of _arrData) {
if (
iterator.book == result.book &&
iterator.para == result.para &&
iterator.begin == result.begin &&
iterator.end == result.end
) {
for (const tran of iterator.translation) {
if (tran.channal == result.channal) {
tran.text = result.text;
break;
}
}
}
}
}
} else if (result.commit_type == 3) {
ntf_show("已经提交修改建议");
} else {
ntf_show("未提交");
}
}
}
);
}
function copy_ref(book, para, begin, end) {
let strRef = "{{" + book + "-" + para + "-" + begin + "-" + end + "}}";
copy_to_clipboard(strRef);
}
function goto_nissaya(book, para, begin = 0, end = 0) {
window.open("../nissaya/index.php?book=" + book + "&par=" + para + "&begin=" + begin + "&end=" + end, "nissaya");
}
function edit_in_studio(book, para, begin, end) {
wbw_channal_list_open(book, [para]);
}
//显示和隐藏某个内容 如 巴利文
function setVisibility(key, value) {
switch (key) {
case "palitext":
if ($(value).is(":checked")) {
$(".palitext").show();
} else {
$(".palitext").hide();
}
break;
default:
break;
}
}
function note_show_pali_sim(SentId) {
pali_sim_dlg_open(SentId, 0, 20);
}
function set_pali_script(pos, script) {
if (script == "none") {
$(".palitext" + pos).html("");
} else {
$(".palitext" + pos).each(function () {
let html = $(this).siblings(".palitext_roma").first().html();
$(this).html(html);
});
$(".palitext" + pos)
.find("*")
.contents()
.filter(function () {
return this.nodeType != 1;
})
.wrap(" ");
$(".palitext" + pos)
.contents()
.filter(function () {
return this.nodeType != 1;
})
.wrap(" ");
$("pl" + pos).html(function (index, oldcontent) {
switch(script){
case "မြန်မာ":
return roman_to_my(oldcontent);
case "My2Roman":
return my_to_roman(oldcontent);
case "සිංහල":
return roman_to_si(oldcontent);
case "ᨲ᩠ᩅᩫᨴᩱ᩠ᨿᨵᨾ᩠ᨾ᩼":
return roman_to_tai(oldcontent);
case "อักษรไทย":
return roman_to_thai(oldcontent);
default:
return(oldcontent);
}
});
}
}
function splite_pali_word() {
$("pali")
.contents()
.filter(function () {
return this.nodeType != 1;
})
.wrap(" ");
$("pl").each(function () {
let html = $(this).html();
$(this).html("" + html.replace(/\s/g, " ") + " ");
});
$("w").click(function () {
let word = com_getPaliReal($(this).text());
if (gBuildinDictIsOpen) {
window.open("../dict/index.php?builtin=true&key=" + word, "dict");
}
});
}
function refresh_pali_script() {
if (_display && _display == "para") {
//段落模式
} else {
//句子模式
setting_get("lib.second_script", set_second_scrip);
}
}
function set_second_scrip(value) {
set_pali_script(2, value);
}
function slider_show(obj) {
$(obj).parent().parent().parent().parent().parent().toggleClass("slider_show_shell");
}
function find_sent_tran_div(obj) {
let jqObj = $(obj);
while (!jqObj.hasClass("sent_tran")) {
jqObj = jqObj.parent();
if (!jqObj) {
return false;
}
}
return jqObj;
/*
let parent = obj.parentNode;
while (parent.nodeType == 1) {
if ($(parent).hasClass("sent_tran")) {
return parent;
} else if (parent.nodeName == "BODY") {
return false;
}
parent = parent.parentNode;
}
return false;
*/
}
//显示或隐藏pr数据
function note_pr_show(channel, id) {
let obj = $(".sent_tran[channel='" + channel + "'][sid='" + id + "']").find(".pr_content");
let prHtml = obj.first().html();
if (prHtml == "") {
note_get_pr(channel, id);
} else {
obj.slideUp();
obj.html("");
}
}
//获取pr数据并显示
function note_get_pr(channel, id) {
let sid = id.split("-");
let book = sid[0];
let para = sid[1];
let begin = sid[2];
let end = sid[3];
$.post(
"../usent/get_pr.php",
{
book: book,
para: para,
begin: begin,
end: end,
channel: channel,
},
function (data) {
let result = JSON.parse(data);
if (result.length > 0) {
let html = "";
for (const iterator of result) {
html += render_one_sent_tran_a(iterator, true);
}
html += "";
$(".sent_tran[channel='" + channel + "'][sid='" + id + "']")
.find(".pr_content")
.html(html);
$(".sent_tran[channel='" + channel + "'][sid='" + id + "']")
.find(".pr_content")
.slideDown();
} else {
}
}
);
$(".sent_tran[channel='" + channel + "'][sid='" + id + "']")
.find(".pr_content")
.html("loading");
$(".sent_tran[channel='" + channel + "'][sid='" + id + "']")
.find(".pr_content")
.show();
}
function get_channel_by_id(id) {
if (typeof _channalData != "undefined") {
for (const iterator of _channalData) {
if (iterator.id == id) {
return iterator;
}
}
}
if (typeof _my_channal != "undefined") {
for (const iterator of _my_channal) {
if (iterator.id == id) {
return iterator;
}
}
}
return false;
}
//设置显示方向
function setDirection(obj) {
if (obj.value == "row") {
$("#contents").removeClass("vertical");
$("#contents").addClass("horizontal");
_direction = "row";
} else {
$("#contents").removeClass("horizontal");
$("#contents").addClass("vertical");
_direction = "col";
}
}
//设置逐段或逐句模式
function setDisplay(obj) {
if (obj.value == "para") {
$("#contents").removeClass("sent_mode");
$("#contents").addClass("para_mode");
_display = "para";
} else {
$("#contents").removeClass("para_mode");
$("#contents").addClass("sent_mode");
_display = "sent";
}
}
//获取文章中H 并渲染为目录
function render_heading_toc() {
//$(":header")
}
//术语输入At
const _term_max_menu=9;
function term_set_word_list_data(el){
let sid = $(el).attr("sid");
let asid = sid.split("-");
let words=new Array();
let tmpWords = [];
term_data=[];
for (const it of _arrData) {
if(it.book==asid[0] && it.para==asid[1] && it.begin==asid[2] && it.end==asid[3]){
let palitext = it.palitext;
words = palitext.split(" ");
}
}
console.log("word",words);
//查询parent
for (let index = 0; index < words.length; index++) {
words[index] = com_getPaliReal(words[index]);
if(words[index]!=""){
let parents = term_parent(words[index]);
for (const key in parents) {
if (parents.hasOwnProperty.call(parents, key)) {
//term_data.push({word:key,en:com_getPaliEn(key),weight:weight});
tmpWords[key]={word:key,en:com_getPaliEn(key),weight:3,exist:0};
}
}
}
}
for (const iterator of arrTermAllPali) {
if(tmpWords.hasOwnProperty(iterator.word)){
tmpWords[iterator.word].weight+=1;
tmpWords[iterator.word].exist=1;
}else{
tmpWords[iterator.word]={word:iterator.word,en:com_getPaliEn(iterator.word),weight:1,exist:1};
}
}
//arrMyTerm 词头查重
let tmpMyTerm=[];
for (const iterator of arrMyTerm) {
tmpMyTerm[iterator.word]=1;
}
//加入到列表
//在我的字典中的排名靠前
for (const key in tmpMyTerm) {
if (tmpMyTerm.hasOwnProperty.call(tmpMyTerm, key)) {
if(tmpWords.hasOwnProperty(key)){
tmpWords[key].weight+=1;
tmpWords[key].exist=2;
}else{
tmpWords[key]={word:key,en:com_getPaliEn(key),weight:1,exist:2};
}
}
}
for (const key in tmpWords) {
if (tmpWords.hasOwnProperty.call(tmpWords, key)) {
const element = tmpWords[key];
term_data.push(element);
}
}
term_data.sort(function(a,b){
return b.weight-a.weight;
});
}
function text_input_textarea_focuse(el){
term_set_word_list_data(el);
term_input_text = el;
term_input_text.onresize = function(){
term_input_text.parentElement.querySelector(".text_shadow").style.height=term_input_text.clientHeight+"px";
}
term_input_text.onkeydown = function (e) {
let menu = term_input_text.parentElement.querySelector('.menu');
switch (e.key) {
case "ArrowDown"://down arrow
if(menu.style.display=="block"){
menuFocusIndex++;
if(menuFocusIndex>_term_max_menu){
menuFocusIndex=_term_max_menu;
}
menu.innerHTML=TermAtRenderMenu({focus:menuFocusIndex});
return false;
}
break;
case "ArrowUp"://up arrow
if(menu.style.display=="block"){
menuFocusIndex--;
if(menuFocusIndex<0){
menuFocusIndex=0;
}
menu.innerHTML=TermAtRenderMenu({focus:menuFocusIndex});
return false;
}
break;
case "Enter":
if(menu.style.display=="block"){
term_insert(term_filterd_data[menuFocusIndex]);
return false;
}
if (e.ctrlKey) {
//回车存盘
tran_sent_save(e.currentTarget);
return false;
}
break;
case "Escape":
if(menu.style.display=="block"){
term_at_menu_hide();
}else{
tran_sent_edit_cancel(e.currentTarget);
}
break;
default:
break;
}
}
term_input_text.onkeyup = function (e) {
let textHeight = term_input_text.parentElement.querySelector(".text_shadow").scrollHeight;
let textHeight2 = term_input_text.clientHeight;
if(textHeight2>textHeight){
textHeight=textHeight2;
}
term_input_text.style.height = textHeight+"px";
console.log("text height",textHeight);
let value = term_input_text.value
let selectionStart = term_input_text.selectionStart
let str1 = value.slice(0, selectionStart)
let str2 = value.slice(selectionStart)
let textNode1 = document.createTextNode(str1)
let textNode2 = document.createTextNode(str2)
let cursor = document.createElement('span')
cursor.innerHTML = ' '
cursor.setAttribute('class','cursor')
let mirror = term_input_text.parentElement.querySelector('.text_shadow')
mirror.innerHTML = ''
mirror.appendChild(textNode1)
mirror.appendChild(cursor)
mirror.appendChild(textNode2)
let menu = term_input_text.parentElement.querySelector('.menu');
if(str1.slice(-2)=="[[" ){
if( menu.style.display!="block"){
menuFocusIndex=0;
menu.innerHTML=TermAtRenderMenu({focus:0});
term_at_menu_show(cursor);
}
}else{
if( menu.style.display=="block"){
let pos1=str1.lastIndexOf("[[");
let pos2=str1.lastIndexOf("]]");
if(pos1==-1 || (pos1!=-1 && pos2>pos1)){
//光标前没有[[ 或 光标在[[]] 之后
term_at_menu_hide();
}
}
}
if(menu.style.display=="block"){
//term_input += e.key;
let value = term_input_text.value
let selectionStart = term_input_text.selectionStart
let str1 = value.slice(0, selectionStart)
let str2 = value.slice(selectionStart)
let pos1=str1.lastIndexOf("[[");
let pos2=str1.lastIndexOf("]]");
if(pos1!=-1){
if(pos2==-1 || pos2"+term_input+"|";
html +="