' + renderEquation(e));
if (e.charAt(0) != '!') balText = e
MathJax.typeset()
$('#balBtn').html('配平 ')
$('#balBtn').removeClass('disabled')
$('.frame').removeClass('text-muted')
running = 0;
return new Promise(res => res(e))
})
}
function balUp() {
if (mode != 'bal') return;
$('#balInput').val(balText);
input()
}
//QUERY-------------------------------
var modeq = 'query', nameq = 'eq', strict = false, matchMode = 'mole', namels = ['eq', 'mo', 'io', 'el'], ionRegex = ''
function toggl(str, is = 0) {
$('#qryBtn').html(str)
$('.op').hide()
$('.op-' + modeq + '-' + nameq).show()
if (modeq == 'add' || modeq == 'upd') {
$('.add:not(.add-' + nameq + ',#addId)').hide()
$('.add-' + nameq).show(500)
if (modeq == 'upd') $('#addId').show(300)
else $('#addId').hide(300)
} else $('.add').hide()
if (is) $('.qryInputHidable').show()
else $('.qryInputHidable').hide()
}
function setQry() {
$('.qry-group>label').removeClass('active')
$('.frame').removeClass('active')
$('.frame')[0].classList.add('active')
if (modeq == 'query') toggl('查询 ', nameq == 'eq' && strict)
else if (modeq == 'add') toggl('上传 ')
else toggl('修改 ')
if (nameq == 'eq') {
$('.frame')[1].classList.add('active')
$('.qry-group>label')[0].classList.add('active')
if (modeq == 'query') $('#qryInput').attr('placeholder', 'O2=H2O' + '(查询数据库中的化学式,也可输入 id)')
else if (modeq == 'add') $('#qryInput').attr('placeholder', 'H2+O2=H2O' + '(将化学式上传至数据库)')
else $('#qryInput').attr('placeholder', '(修改已有化学式)')
} else if (nameq == 'mo') {
$('.qry-group>label')[1].classList.add('active')
$('.frame')[2].classList.add('active')
if (modeq == 'query') {
if (useIon) {
if (!useIonId) $('#qryInput').attr('placeholder', 'Fe<3e+>' + '(输入离子查询数据库中的分子)')
else {
$('#qryInput').attr('placeholder', '2,3' + '(输入离子编号查询数据库中的分子)')
$('.qry-group>label')[2].classList.add('active')
$('.frame')[3].classList.add('active')
}
} else $('#qryInput').attr('placeholder', 'Fe' + '(查询数据库中的分子,也可输入 id)')
}
else if (modeq == 'add') {
$('#qryInput').attr('placeholder', 'Fe3O4' + '(将分子上传至数据库)')
$('#addTitle').attr('placeholder', '四氧化三铁')
} else {
$('#qryInput').attr('placeholder', '(修改已有分子)')
$('#addTitle').attr('placeholder', '四氧化三铁')
}
if (useIon) $('.op-ionid').show()
} else if (nameq == 'io') {
$('.qry-group>label')[2].classList.add('active')
$('.frame')[3].classList.add('active')
if (modeq == 'query') {
$('#qryInput').attr('placeholder', 'Fe' + '(查询数据库中的离子,也可输入 id)')
}
else if (modeq == 'add') {
$('#qryInput').attr('placeholder', 'Fe<3e+>' + '(将离子上传至数据库)')
$('#addTitle').attr('placeholder', '三价铁')
} else {
$('#qryInput').attr('placeholder', '(修改已有离子)')
$('#addTitle').attr('placeholder', '三价铁')
}
} else {
$('.qry-group>label')[3].classList.add('active')
$('.frame')[4].classList.add('active')
if (modeq == 'query') {
$('#qryInput').attr('placeholder', 'Fe' + '(输入元素获取汇总信息)')
}
}
input2()
if (modeq == 'upd') inputId()
if (collapse) $('.frame:not(.active)').parent().hide(300), $('.frame.active:not(#balFrame)').parent().show(200);
else $('.frame:not(#balFrame)').parent().show(300)
}
function replaceRegex(s) {
return s.replace(/([\+\=\.;])+/g, '$1').replace(/([\(\)])/g, '\\\\$1').replace(/(<\d*)e\+/g, '$1%')
}
function getRegex() {
var ret = ''
if (nameq == 'eq') {
if (strict) {
var acont = $('#qryInput').val(), bcont = $('#qryInput2').val();
if (!acont && !bcont) acont = $('#qryInput').attr('placeholder').split('(')[0]
acont = replaceRegex(acont)
bcont = replaceRegex(bcont)
ret = '^'
if (acont) {
var as = acont.split('+')
for (let i = 0; i < as.length; i++) {
if (matchMode == 'mole') ret += '(?=([^=]*\\+|)[0-9]?' + as[i] + '([+=]|$))'
else ret += '(?=[^=]*' + as[i] + '([^a-z]|$))'
}
}
if (bcont) {
var bs = bcont.split('+');
for (let i = 0; i < bs.length; i++) {
if (matchMode == 'mole') ret += '(?=.*=(.*\\+|)[0-9]?' + bs[i] + '([+=]|$))'
else ret += '(?=.*=.*' + bs[i] + '([^a-z]|$))'
}
}
ret += '.*'
} else {
ret = $('#qryInput').val()
if (ret && !ret.match(/[^\d]/g)) return ret
if (!ret) ret = $('#qryInput').attr('placeholder').split('(')[0]
ret = replaceRegex(ret)
var scont = ret.split('=')
if (scont.length > 2) return;
var as = scont[0].split('+');
ret = matchMode == 'mole' ? '^' : ''
for (let i = 0; i < as.length; i++) {
if (matchMode == 'mole') ret += "(?=(.*[+=]|)[0-9]?" + as[i] + "([+=]|$))"
else ret += '(?=.*' + as[i] + '([^a-z]|$))'
}
if (scont.length > 1) {
var bs = scont[1].split('+')
for (let i = 0; i < bs.length; i++) {
if (matchMode == 'mole') ret += "(?=(.*[+=]|)[0-9]?" + bs[i] + "([+=]|$))"
else ret += '(?=.*' + bs[i] + '([^a-z]|$))'
}
}
ret += '.*'
}
return ret.replace(/%/g, 'e+')
} else return replaceRegex($('#qryInput').val() ? $('#qryInput').val() : $('#qryInput').attr('placeholder').split('(')[0]).replace(/%/g, 'e+') + '([^a-z]|$)'
}
function procClass(e) {
e[0].class = JSON.parse(e[0].class)
let c = e[0].class
for (let j = 0; j < c.length; j++) {
let t = JSON.stringify(c[j]).split(':')[0].split('"')[1]
let str = ''
c.filter(e => {
if (JSON.stringify(e).split(':')[0].split('"')[1] == t) str += ',' + JSON.stringify(e).split(':')[1].split('}')[0].replace(/"/g, '')
})
curClass[t] = str.slice(1)
}
getClass(1)
}
function renderTable(bd, e) {
bd = JSON.parse(bd).content.split('(')[0]
console.log(bd, e)
var uc = [], ut = []
for (i = 0; i < e.length; i++) {
console.log(JSON.parse(e[i].class).filter(e => e[bd])[0])
let k = JSON.parse(e[i].class).filter(e => e[bd])[0][bd]
if (!uc.includes(k)) uc.push(k)
if (!ut.includes(e[i].type)) ut.push(e[i].type)
}
uc.sort()
ut.sort()
console.log(uc, ut)
str = '
' + bd + '
'
for (let i = 0; i < ut.length; i++) {
str += `
${ut[i]}
`
}
str += '
'
for (let i = 0; i < uc.length; i++) {
str += `
${uc[i]}
`
for (let j = 0; j < ut.length; j++) {
let f = e.filter(e =>
JSON.parse(e.class).filter(e => e[bd] == uc[i]).length
&& e.type == ut[j]
)
str += '
'
let g = ''
for (let k = 0; k < f.length; k++) {
g += `${f[k].content}`
if (k < f.length - 1) g += ';'
if (k % 5 == 0) {
str += renderEquation(g)
g = ''
}
}
str += renderEquation(g)
str += '
'
}
str += '
'
}
str += ''
$('.table-el').html(str)
console.log(str)
}
function renderResult(bd, e, isId, replace, insAfter) {
let qin = $('#qryInput').val()
if (e[0] == '!') {
$('.frame')[getC(nameq)].innerHTML = '
' + e + '
';
return
}
e = JSON.parse(e)
if (nameq == 'eq') {
if (insAfter != -1) {
if (isId) {
if (replace) $('#qryInput').val(e[0].content)
$('#addCondition').val(e[0].conditions)
$('#addIdText').val(JSON.parse(bd).content)
$('#addDescription').val(e[0].descriptions)
}
var str = ''
str += '