更多操作
无编辑摘要 |
无编辑摘要 |
||
第1行: | 第1行: | ||
setTimeout(function(){ | setTimeout(function(){ | ||
dashboardInterface() | |||
console.log('interface') | console.log('interface') | ||
},0) | },0) | ||
第47行: | 第47行: | ||
} | } | ||
}); | }); | ||
function | |||
var | tikuCreateConfig = { | ||
var | rl:'参与编辑的题库', | ||
var | project:'https://www.medforest.cn/dic/', | ||
$('# | url:'https://www.medforest.cn/medf/api.php', | ||
$('# | des:'本列表包含您创建或者参与编辑的题库' | ||
} | |||
function readlistCreat(name,des,token){ | |||
var isSuccess = false | |||
var PARAMS = { | |||
"action": "readinglists", | |||
"format": "json", | |||
"command": "create", | |||
"utf8": 1, | |||
"token": token, | |||
"name": name, | |||
"description": des, | |||
'origin':'*' | |||
} | |||
$.ajax({ | |||
url: tikuCreateConfig.url, | |||
method: "post", | |||
async: false, | |||
data: PARAMS, | |||
timeout: 5000, | |||
success: function (results){ | |||
var apiResult = results['edit']['result'] | |||
if(apiResult==="Success"){ | |||
isSuccess = [true,results["create"]["result"]] | |||
}else{ | |||
isSuccess = [false,results["create"]["result"]] | |||
} | |||
} | |||
}) | |||
return isSuccess | |||
} | |||
function readlistCreatEntry(list,project,title,token){ | |||
var isSuccess = false | |||
var PARAMS = { | |||
"action": "readinglists", | |||
"format": "json", | |||
"command": "createentry", | |||
"utf8": 1, | |||
"token": token, | |||
"list": list, | |||
"project": project, | |||
"title": title, | |||
'origin':'*' | |||
} | |||
$.ajax({ | |||
url: tikuCreateConfig.url, | |||
method: "post", | |||
async: false, | |||
data: PARAMS, | |||
timeout: 5000, | |||
success: function (results){ | |||
var apiResult = results['edit']['result'] | |||
if(apiResult==="Success"){ | |||
isSuccess = [true,results["create"]["result"]] | |||
}else{ | |||
isSuccess = [false,results["create"]["result"]] | |||
} | |||
} | |||
}) | |||
return isSuccess | |||
} | |||
function readlistSetup(token){ | |||
var isSuccess = false | |||
var PARAMS = { | |||
"action": "readinglists", | |||
"format": "json", | |||
"command": "setup", | |||
"utf8": 1, | |||
"token": token, | |||
'origin':'*' | |||
} | |||
$.ajax({ | |||
url: tikuCreateConfig.url, | |||
method: "post", | |||
async: false, | |||
data: PARAMS, | |||
timeout: 5000, | |||
success: function (results){ | |||
isSuccess = results | |||
} | |||
}) | |||
return isSuccess | |||
} | |||
function readlistDelEntry(entry,token){ | |||
var isSuccess = false | |||
var PARAMS = { | |||
"action": "readinglists", | |||
"format": "json", | |||
"command": "deleteentry", | |||
"utf8": 1, | |||
"token": token, | |||
"entry": entry | |||
} | |||
$.ajax({ | |||
url: tikuCreateConfig.url, | |||
method: "post", | |||
async: false, | |||
data: PARAMS, | |||
timeout: 5000, | |||
success: function (results){ | |||
if (results["deleteentry"]['result']==="Success"){ | |||
isSuccess = true | |||
} | |||
} | |||
}) | |||
return isSuccess | |||
} | |||
function isRLExist(name){ | |||
var exist = false | |||
var PARAMS = { | |||
"action": "query", | |||
"format": "json", | |||
"meta": "readinglists", | |||
"utf8": 1, | |||
'origin':'*' | |||
} | |||
$.ajax({ | |||
url: tikuCreateConfig.url, | |||
method: "post", | |||
async: false, | |||
data: PARAMS, | |||
timeout: 5000, | |||
success: function (results){ | |||
var rls = results.query.readinglists | |||
for(var i=0;i<rls.length;i++){ | |||
var rl = rls[i] | |||
if(rl.name === name){ | |||
exist = rl | |||
} | |||
} | |||
} | |||
}) | |||
return exist | |||
} | |||
function clean() { | |||
$('#tiku-guide-container').html('') | |||
} | |||
function dashboardInterface(){ | |||
clean() | |||
var container = $('#tiku-guide-container') | |||
var html = $('<div id="myTikuList"><div id="header"><div id="heading"></div>' + | |||
'<div id="actions"><button type="button" id="createTiku">创建一个新题库</button>' + | |||
'<button type="button" id="addTiku">添加题库到我的列表</button> </div></div><div id="body"></div></div>').appendTo(container) | |||
$('#createTiku').bind('click',function () { | |||
createInterface() | |||
}) | |||
$('#addTiku').bind('click',function () { | |||
addInterface() | |||
}) | |||
var rls = isRLExist(tikuCreateConfig.rl) | |||
if(!rls){ | |||
$('#myTikuList').children('#header').children('#heading').html('<h3>您还没有参与编辑任何题库!</h3>') | |||
} | |||
} | |||
function addInterface(){ | |||
clean() | |||
var container = $('#tiku-guide-container') | |||
$('<button type="button" id="backDashboard">返回</button>').appendTo(container) | |||
$('#backDashboard').bind('click',function () { | |||
dashboardInterface() | |||
}) | |||
var html = $('<div id="addTikuContainer"><div id="header"><div id="heading"><h3>参与编辑一个题库</h3></div>' + | |||
'<div id="body"><input id="addName" type="text" placeholder="题库名称"><button type="button" id="addTiku">添加</button></div></div>').appendTo(container) | |||
$('#addTiku').bind('click',function () { | |||
var inputName = '题库:'+ $('#addName').val() | |||
var listID = isRLExist(tikuCreateConfig.rl) | |||
console.log(listID) | |||
var token = get_token(tikuCreateConfig.url) | |||
console.log(token) | |||
if(!listID) { | |||
alert('你还没有创建您的阅读列表,即将创建并启用') | |||
readlistSetup(token) | |||
readlistCreat(tikuCreateConfig.rl, tikuCreateConfig.des, token) | |||
alert('创建完成') | |||
} | |||
var result = readlistCreatEntry(listID,tikuCreateConfig.project,inputName,token) | |||
alert(result) | |||
}) | |||
} | } | ||
function | function createInterface(title){ | ||
clean() | |||
var container = $('#tiku-guide-container') | var container = $('#tiku-guide-container') | ||
$('<button type="button" id="backDashboard">返回</button>').appendTo(container) | |||
$('#backDashboard').bind('click',function () { | |||
dashboardInterface() | |||
}) | |||
var titleContent = resolve(title) | |||
var form = $('<form id="tikuInfo">\n' + | var form = $('<form id="tikuInfo">\n' + | ||
' 题库名称:<br>\n' + | ' 题库名称:<br>\n' + | ||
'<input type="text" name="name">\n' + | '<input type="text" name="name" value="'+titleContent.name+'">\n' + | ||
'<br>\n' + | '<br>\n' + | ||
' 封面(请先在维基中上传对应封面):<br>\n' + | ' 封面(请先在维基中上传对应封面):<br>\n' + | ||
'<input type="text" name="cover">\n' + | '<input type="text" name="cover" value="'+titleContent.cover+'">\n' + | ||
'<br>\n' + | '<br>\n' + | ||
' 发型年份(或者录入时间,默认当前时间):<br>\n' + | ' 发型年份(或者录入时间,默认当前时间):<br>\n' + | ||
'<input type="text" name=" | '<input type="text" name="time" value="'+titleContent.time+'">\n' + | ||
'<br>\n' + | '<br>\n' + | ||
' 作者(默认创建者):<br>\n' + | ' 作者(默认创建者):<br>\n' + | ||
'<input type="text" name="author">\n' + | '<input type="text" name="author" value="'+titleContent.author+'">\n' + | ||
'<br>\n' + | '<br>\n' + | ||
' 出版社:<br>\n' + | ' 出版社:<br>\n' + | ||
'<input type="text" name="publisher">\n' + | '<input type="text" name="publisher" value="'+titleContent.publisher+'">\n' + | ||
'<br>\n' + | '<br>\n' + | ||
' 备注:<br>\n' + | ' 备注:<br>\n' + | ||
'<input type="text" name="ps">\n' + | '<input type="text" name="ps" value="'+titleContent.ps+'">\n' + | ||
'<br>\n' + | '<br>\n' + | ||
'目录信息(一行一个目录项,每行首添加 * 区分层级,章节名称与编号用|区分,示例:* 第一章|绪 论):<br>\n' + | '目录信息(一行一个目录项,每行首添加 * 区分层级,章节名称与编号用|区分,示例:* 第一章|绪 论):<br>\n' + | ||
第80行: | 第266行: | ||
'<select name="level"><option value="*">*</option><option value="**">**</option><option value="***">***</option></select>' + | '<select name="level"><option value="*">*</option><option value="**">**</option><option value="***">***</option></select>' + | ||
'<input name="chapID" type="text" placeholder="章节号"/><input id="chapName" name="chapName" type="text" placeholder="章节名"/>'+ | '<input name="chapID" type="text" placeholder="章节号"/><input id="chapName" name="chapName" type="text" placeholder="章节名"/>'+ | ||
'<button | '<button type="button" id="addIndex">添加到末尾</button>'+ | ||
'</div>' + | '</div>' + | ||
'<textarea name="index" id="indexContainer" placeholder="* 第一章|绪 论\n**第一节|xxX\n* 第二章|222" style="width: 300px;height: 500px"></textarea>\n' + | '<textarea name="index" id="indexContainer" placeholder="* 第一章|绪 论\n**第一节|xxX\n* 第二章|222" style="width: 300px;height: 500px"></textarea>\n' + | ||
'</form> ').appendTo(container) | '</form> ').appendTo(container) | ||
$('#indexContainer').val(titleContent.index) | |||
$('<button id="submitIndex">提交</button>').appendTo(container) | $('<button id="submitIndex">提交</button>').appendTo(container) | ||
$('#addIndex').bind("click",function (){ | $('<button id="prevIndex">预览</button>').appendTo(container) | ||
$('#addIndex').bind("click",function (){addIndex()}) | |||
$('#prevIndex').bind('click',function(){submit(false)}) | |||
} | } | ||
function addIndex(){ | |||
function | var info = $('#tikuInfo').serializeObject() | ||
var reg = new RegExp('\\s','g') | |||
if(reg.test(info.chapID)||reg.test(info.chapName)){ | |||
alert('不能包含空格') | |||
return false | |||
} | |||
var text = info.level + ' ' + info.chapID+'|'+info.chapName +'\n' | |||
var val = $('#indexContainer').val() | |||
$('#indexContainer').val(val + text) | |||
$('#chapName').val('') | |||
return text | |||
} | |||
function pIndex(text,title){ | |||
console.log(text) | |||
text = text.split('\n') | text = text.split('\n') | ||
var l = {} | var l = {} | ||
var final = '' | |||
for (var i=0;i<text.length;i++){ | for (var i=0;i<text.length;i++){ | ||
var level = text[i].length | var t = '题库:' + title | ||
console.log(text[i]) | |||
console.log(text[i].split(' ')) | |||
if(text[i].length>0){ | |||
var level = text[i].split(' ')[0].length | |||
var chapID = text[i].split(' ')[1].split('|')[0] | |||
var chapName = text[i].split(' ')[1].split('|')[1] | |||
if(!l.hasOwnProperty(level)){ | |||
l[level] = chapID | l[level] = chapID | ||
}else if(l[level] !== chapID){ | |||
l[level] = chapID | |||
} | |||
for(var n=0;n<level;n++){ | |||
t+='/'+l[level] | |||
final += '*' | |||
} | |||
final += ' '+'{{目录项|'+t+'|'+chapName+'}}\n' | |||
} | |||
} | |||
console.log(final) | |||
return final | |||
} | |||
function editpage(url,token,title, content,model,tags,summary) { | |||
model =model !==undefined ?model : 'wikitext' | |||
tags = tags !== undefined?tags:'' | |||
summary = summary !==undefined?summary:'' | |||
var isSuccess = [false,0] | |||
var PARAMS = { | |||
"action": "edit", | |||
"format": "json", | |||
"title": title, | |||
"text": content, | |||
"token": token, | |||
'contentmodel':model, | |||
"summary": summary, | |||
"tags": tags, | |||
} | |||
$.ajax({ | |||
url: url, | |||
method: "post", | |||
async: false, | |||
data: PARAMS, | |||
timeout: 5000, | |||
success: function (results){ | |||
var apiResult = results['edit']['result'] | |||
if(apiResult==="Success"){ | |||
isSuccess = [true,results["edit"]["result"]] | |||
console.log("===editpage_common 成功===") | |||
}else{ | |||
isSuccess = [false,results["edit"]["result"]] | |||
} | |||
}, | |||
}) | |||
return isSuccess | |||
} | |||
//获取某个页面的历史版本 | |||
function getPageRevision(url, title, pageCount){ | |||
var PARAMS = { | |||
"action": "query", | |||
"format": "json", | |||
"prop": "revisions", | |||
"titles": title, | |||
"utf8": 1, | |||
"rvprop": "content", | |||
"rvlimit": pageCount, | |||
"rvdir": "older", | |||
'origin':'*', | |||
} | |||
var isSuccess = {} | |||
$.ajax( | |||
{ | |||
url: url, | |||
method: "post", | |||
async: false, | |||
data: PARAMS, | |||
timeout: 5000, | |||
success: function (results){ | |||
if('-1' in results.query.pages){ | |||
console.log('===无此页面===') | |||
isSuccess = {isSuccess:false, result:results} | |||
}else { | |||
isSuccess = {isSuccess:true, result:results} | |||
} | |||
} | } | ||
}) | |||
return isSuccess | |||
} | |||
function get_token(url,origin){ | |||
var isSuccess = [false, '0'] | |||
var PARAMS = { | |||
"action": "query", | |||
"format": "json", | |||
'meta':'tokens', | |||
'origin':'*', | |||
} | |||
$.ajax( | |||
{ | |||
url: url, | |||
method: "post", | |||
async: false, | |||
data: PARAMS, | |||
timeout: 5000, | |||
success: function (results) { | |||
var token = results.query.tokens.csrftoken | |||
if(token.length >= 5){ | |||
isSuccess = {isSuccess:true,token:token} | |||
} | |||
} | |||
}) | |||
return isSuccess | |||
} | |||
//** {{目录项|题库:诊断学学习指导与习题集(第4版)/第一篇/第一节|第一节 发热}} | |||
function rIndex(text){ | |||
console.log(text) | |||
if(text.length>0){ | |||
var reg1 = new RegExp('(?<=\\{\\{)(.+?)(?=\\}\\})','g') | |||
var reg2 = new RegExp('\\{\\{(.+?)\\}\\}','g') | |||
var content = text.match(reg1)[0] | |||
text=text.replace(reg2,'') | |||
var level = text.match(/\*/g).length | |||
content = content.split('/').slice(-1) | |||
var finalText = '' | |||
for(var i=0;i<level;i++){ | |||
finalText+='*' | |||
} | |||
finalText+=' '+content+'\n' | |||
console.log(finalText) | |||
return finalText | |||
}else{ | |||
return '' | |||
} | |||
} | |||
function resolve(title){ | |||
var reg1 = new RegExp('index','g') | |||
var text = getPageRevision(tikuCreateConfig.url,title,1) | |||
if(text.isSuccess){ | |||
text = text.result['query']['pages'] | |||
for(var key in text){ | |||
text = text[key]['revisions'][0]['*'] | |||
} | |||
}else { | |||
return {'author':'','name':'','cover':'','publisher':'','index':'','ps':'','time':''} | |||
} | |||
var start = text.indexOf('{{目录') | |||
var end = text.lastIndexOf('}}') | |||
text = text.substring(start,end) | |||
console.log(start + '|' + end) | |||
text = text.split('|') | |||
var resolved = {} | |||
for(var i=3;i<text.length;i++){ | |||
var line = text[i].split('=') | |||
if(reg1.test(line[0])){ | |||
var temp = line[1] | |||
for(var n=i+1;n<text.length;n++){ | |||
temp += '|' + text[n] | |||
} | |||
resolved[line[0]] = temp | |||
break | |||
}else{ | }else{ | ||
resolved[line[0]] = line[1] | |||
} | } | ||
} | } | ||
var index = resolved.index | |||
index = index.split('\n') | |||
var newIndex = '' | |||
console.log(index) | |||
for(var m=1;m<index.length;m++){ | |||
newIndex += rIndex(index[m]) | |||
} | |||
console.log(newIndex) | |||
resolved.index = newIndex | |||
console.log(text) | |||
console.log(resolved) | |||
return resolved | |||
} | } | ||
function submit() { | function submit(upload) { | ||
upload = upload !== undefined ? upload:true | |||
var url = 'https://www.medforest.cn/api.php' | |||
var token = get_token(url).token | |||
var info = $('#tikuInfo').serializeObject() | var info = $('#tikuInfo').serializeObject() | ||
console.log(info) | console.log(info) | ||
var index = pIndex(info.index,info.name) | |||
var text = '{{目录\n' + | |||
'|display={{{display|}}}\n' + | |||
'|cover='+info.cover+'\n'+ | |||
'|name='+info.name+'\n'+ | |||
'|author='+info.author+'\n'+ | |||
'|publisher='+info.publisher+'\n'+ | |||
'|time='+info.time+'\n'+ | |||
'|ps='+info.ps+'\n'+ | |||
'|index=\n'+index+'\n}}' | |||
text += '<includeonly>[[分类:' + info.name + ']]</includeonly>' | |||
console.log(text) | |||
var templateName = '模板:目录-'+info.name | |||
var tikuName = '题库:'+info.name | |||
var tikuContent = '{{目录-'+info.name+'}}\n' + | |||
'[[分类:题库目录]]' | |||
if (upload){ | |||
if(!getPageRevision(url,tikuName,1).isSuccess){ | |||
editpage(false,url,token,tikuName,tikuContent) | |||
} | |||
editpage(false,url,token,templateName,text) | |||
} | } |
2022年9月20日 (二) 08:10的版本
setTimeout(function(){
dashboardInterface()
console.log('interface')
},0)
$.fn.serializeObject = function()
{
var result = {}
var a = this.serializeArray()
console.log(a)
$.each(a,function (e,t) {
result[t['name']] = t['value']
})
return result
}
jQuery.fn.extend({
getCurPos: function(){
var e=$(this).get(0);
e.focus();
if(e.selectionStart){ //FF
return e.selectionStart;
}
if(document.selection){ //IE
var r = document.selection.createRange();
if (r == null) {
return e.value.length;
}
var re = e.createTextRange();
var rc = re.duplicate();
re.moveToBookmark(r.getBookmark());
rc.setEndPoint('EndToStart', re);
return rc.text.length;
}
return e.value.length;
},
setCurPos: function(pos) {
var e=$(this).get(0);
e.focus();
if (e.setSelectionRange) {
e.setSelectionRange(pos, pos);
} else if (e.createTextRange) {
var range = e.createTextRange();
range.collapse(true);
range.moveEnd('character', pos);
range.moveStart('character', pos);
range.select();
}
}
});
tikuCreateConfig = {
rl:'参与编辑的题库',
project:'https://www.medforest.cn/dic/',
url:'https://www.medforest.cn/medf/api.php',
des:'本列表包含您创建或者参与编辑的题库'
}
function readlistCreat(name,des,token){
var isSuccess = false
var PARAMS = {
"action": "readinglists",
"format": "json",
"command": "create",
"utf8": 1,
"token": token,
"name": name,
"description": des,
'origin':'*'
}
$.ajax({
url: tikuCreateConfig.url,
method: "post",
async: false,
data: PARAMS,
timeout: 5000,
success: function (results){
var apiResult = results['edit']['result']
if(apiResult==="Success"){
isSuccess = [true,results["create"]["result"]]
}else{
isSuccess = [false,results["create"]["result"]]
}
}
})
return isSuccess
}
function readlistCreatEntry(list,project,title,token){
var isSuccess = false
var PARAMS = {
"action": "readinglists",
"format": "json",
"command": "createentry",
"utf8": 1,
"token": token,
"list": list,
"project": project,
"title": title,
'origin':'*'
}
$.ajax({
url: tikuCreateConfig.url,
method: "post",
async: false,
data: PARAMS,
timeout: 5000,
success: function (results){
var apiResult = results['edit']['result']
if(apiResult==="Success"){
isSuccess = [true,results["create"]["result"]]
}else{
isSuccess = [false,results["create"]["result"]]
}
}
})
return isSuccess
}
function readlistSetup(token){
var isSuccess = false
var PARAMS = {
"action": "readinglists",
"format": "json",
"command": "setup",
"utf8": 1,
"token": token,
'origin':'*'
}
$.ajax({
url: tikuCreateConfig.url,
method: "post",
async: false,
data: PARAMS,
timeout: 5000,
success: function (results){
isSuccess = results
}
})
return isSuccess
}
function readlistDelEntry(entry,token){
var isSuccess = false
var PARAMS = {
"action": "readinglists",
"format": "json",
"command": "deleteentry",
"utf8": 1,
"token": token,
"entry": entry
}
$.ajax({
url: tikuCreateConfig.url,
method: "post",
async: false,
data: PARAMS,
timeout: 5000,
success: function (results){
if (results["deleteentry"]['result']==="Success"){
isSuccess = true
}
}
})
return isSuccess
}
function isRLExist(name){
var exist = false
var PARAMS = {
"action": "query",
"format": "json",
"meta": "readinglists",
"utf8": 1,
'origin':'*'
}
$.ajax({
url: tikuCreateConfig.url,
method: "post",
async: false,
data: PARAMS,
timeout: 5000,
success: function (results){
var rls = results.query.readinglists
for(var i=0;i<rls.length;i++){
var rl = rls[i]
if(rl.name === name){
exist = rl
}
}
}
})
return exist
}
function clean() {
$('#tiku-guide-container').html('')
}
function dashboardInterface(){
clean()
var container = $('#tiku-guide-container')
var html = $('<div id="myTikuList"><div id="header"><div id="heading"></div>' +
'<div id="actions"><button type="button" id="createTiku">创建一个新题库</button>' +
'<button type="button" id="addTiku">添加题库到我的列表</button> </div></div><div id="body"></div></div>').appendTo(container)
$('#createTiku').bind('click',function () {
createInterface()
})
$('#addTiku').bind('click',function () {
addInterface()
})
var rls = isRLExist(tikuCreateConfig.rl)
if(!rls){
$('#myTikuList').children('#header').children('#heading').html('<h3>您还没有参与编辑任何题库!</h3>')
}
}
function addInterface(){
clean()
var container = $('#tiku-guide-container')
$('<button type="button" id="backDashboard">返回</button>').appendTo(container)
$('#backDashboard').bind('click',function () {
dashboardInterface()
})
var html = $('<div id="addTikuContainer"><div id="header"><div id="heading"><h3>参与编辑一个题库</h3></div>' +
'<div id="body"><input id="addName" type="text" placeholder="题库名称"><button type="button" id="addTiku">添加</button></div></div>').appendTo(container)
$('#addTiku').bind('click',function () {
var inputName = '题库:'+ $('#addName').val()
var listID = isRLExist(tikuCreateConfig.rl)
console.log(listID)
var token = get_token(tikuCreateConfig.url)
console.log(token)
if(!listID) {
alert('你还没有创建您的阅读列表,即将创建并启用')
readlistSetup(token)
readlistCreat(tikuCreateConfig.rl, tikuCreateConfig.des, token)
alert('创建完成')
}
var result = readlistCreatEntry(listID,tikuCreateConfig.project,inputName,token)
alert(result)
})
}
function createInterface(title){
clean()
var container = $('#tiku-guide-container')
$('<button type="button" id="backDashboard">返回</button>').appendTo(container)
$('#backDashboard').bind('click',function () {
dashboardInterface()
})
var titleContent = resolve(title)
var form = $('<form id="tikuInfo">\n' +
' 题库名称:<br>\n' +
'<input type="text" name="name" value="'+titleContent.name+'">\n' +
'<br>\n' +
' 封面(请先在维基中上传对应封面):<br>\n' +
'<input type="text" name="cover" value="'+titleContent.cover+'">\n' +
'<br>\n' +
' 发型年份(或者录入时间,默认当前时间):<br>\n' +
'<input type="text" name="time" value="'+titleContent.time+'">\n' +
'<br>\n' +
' 作者(默认创建者):<br>\n' +
'<input type="text" name="author" value="'+titleContent.author+'">\n' +
'<br>\n' +
' 出版社:<br>\n' +
'<input type="text" name="publisher" value="'+titleContent.publisher+'">\n' +
'<br>\n' +
' 备注:<br>\n' +
'<input type="text" name="ps" value="'+titleContent.ps+'">\n' +
'<br>\n' +
'目录信息(一行一个目录项,每行首添加 * 区分层级,章节名称与编号用|区分,示例:* 第一章|绪 论):<br>\n' +
'<div>' +
'<select name="level"><option value="*">*</option><option value="**">**</option><option value="***">***</option></select>' +
'<input name="chapID" type="text" placeholder="章节号"/><input id="chapName" name="chapName" type="text" placeholder="章节名"/>'+
'<button type="button" id="addIndex">添加到末尾</button>'+
'</div>' +
'<textarea name="index" id="indexContainer" placeholder="* 第一章|绪 论\n**第一节|xxX\n* 第二章|222" style="width: 300px;height: 500px"></textarea>\n' +
'</form> ').appendTo(container)
$('#indexContainer').val(titleContent.index)
$('<button id="submitIndex">提交</button>').appendTo(container)
$('<button id="prevIndex">预览</button>').appendTo(container)
$('#addIndex').bind("click",function (){addIndex()})
$('#prevIndex').bind('click',function(){submit(false)})
}
function addIndex(){
var info = $('#tikuInfo').serializeObject()
var reg = new RegExp('\\s','g')
if(reg.test(info.chapID)||reg.test(info.chapName)){
alert('不能包含空格')
return false
}
var text = info.level + ' ' + info.chapID+'|'+info.chapName +'\n'
var val = $('#indexContainer').val()
$('#indexContainer').val(val + text)
$('#chapName').val('')
return text
}
function pIndex(text,title){
console.log(text)
text = text.split('\n')
var l = {}
var final = ''
for (var i=0;i<text.length;i++){
var t = '题库:' + title
console.log(text[i])
console.log(text[i].split(' '))
if(text[i].length>0){
var level = text[i].split(' ')[0].length
var chapID = text[i].split(' ')[1].split('|')[0]
var chapName = text[i].split(' ')[1].split('|')[1]
if(!l.hasOwnProperty(level)){
l[level] = chapID
}else if(l[level] !== chapID){
l[level] = chapID
}
for(var n=0;n<level;n++){
t+='/'+l[level]
final += '*'
}
final += ' '+'{{目录项|'+t+'|'+chapName+'}}\n'
}
}
console.log(final)
return final
}
function editpage(url,token,title, content,model,tags,summary) {
model =model !==undefined ?model : 'wikitext'
tags = tags !== undefined?tags:''
summary = summary !==undefined?summary:''
var isSuccess = [false,0]
var PARAMS = {
"action": "edit",
"format": "json",
"title": title,
"text": content,
"token": token,
'contentmodel':model,
"summary": summary,
"tags": tags,
}
$.ajax({
url: url,
method: "post",
async: false,
data: PARAMS,
timeout: 5000,
success: function (results){
var apiResult = results['edit']['result']
if(apiResult==="Success"){
isSuccess = [true,results["edit"]["result"]]
console.log("===editpage_common 成功===")
}else{
isSuccess = [false,results["edit"]["result"]]
}
},
})
return isSuccess
}
//获取某个页面的历史版本
function getPageRevision(url, title, pageCount){
var PARAMS = {
"action": "query",
"format": "json",
"prop": "revisions",
"titles": title,
"utf8": 1,
"rvprop": "content",
"rvlimit": pageCount,
"rvdir": "older",
'origin':'*',
}
var isSuccess = {}
$.ajax(
{
url: url,
method: "post",
async: false,
data: PARAMS,
timeout: 5000,
success: function (results){
if('-1' in results.query.pages){
console.log('===无此页面===')
isSuccess = {isSuccess:false, result:results}
}else {
isSuccess = {isSuccess:true, result:results}
}
}
})
return isSuccess
}
function get_token(url,origin){
var isSuccess = [false, '0']
var PARAMS = {
"action": "query",
"format": "json",
'meta':'tokens',
'origin':'*',
}
$.ajax(
{
url: url,
method: "post",
async: false,
data: PARAMS,
timeout: 5000,
success: function (results) {
var token = results.query.tokens.csrftoken
if(token.length >= 5){
isSuccess = {isSuccess:true,token:token}
}
}
})
return isSuccess
}
//** {{目录项|题库:诊断学学习指导与习题集(第4版)/第一篇/第一节|第一节 发热}}
function rIndex(text){
console.log(text)
if(text.length>0){
var reg1 = new RegExp('(?<=\\{\\{)(.+?)(?=\\}\\})','g')
var reg2 = new RegExp('\\{\\{(.+?)\\}\\}','g')
var content = text.match(reg1)[0]
text=text.replace(reg2,'')
var level = text.match(/\*/g).length
content = content.split('/').slice(-1)
var finalText = ''
for(var i=0;i<level;i++){
finalText+='*'
}
finalText+=' '+content+'\n'
console.log(finalText)
return finalText
}else{
return ''
}
}
function resolve(title){
var reg1 = new RegExp('index','g')
var text = getPageRevision(tikuCreateConfig.url,title,1)
if(text.isSuccess){
text = text.result['query']['pages']
for(var key in text){
text = text[key]['revisions'][0]['*']
}
}else {
return {'author':'','name':'','cover':'','publisher':'','index':'','ps':'','time':''}
}
var start = text.indexOf('{{目录')
var end = text.lastIndexOf('}}')
text = text.substring(start,end)
console.log(start + '|' + end)
text = text.split('|')
var resolved = {}
for(var i=3;i<text.length;i++){
var line = text[i].split('=')
if(reg1.test(line[0])){
var temp = line[1]
for(var n=i+1;n<text.length;n++){
temp += '|' + text[n]
}
resolved[line[0]] = temp
break
}else{
resolved[line[0]] = line[1]
}
}
var index = resolved.index
index = index.split('\n')
var newIndex = ''
console.log(index)
for(var m=1;m<index.length;m++){
newIndex += rIndex(index[m])
}
console.log(newIndex)
resolved.index = newIndex
console.log(text)
console.log(resolved)
return resolved
}
function submit(upload) {
upload = upload !== undefined ? upload:true
var url = 'https://www.medforest.cn/api.php'
var token = get_token(url).token
var info = $('#tikuInfo').serializeObject()
console.log(info)
var index = pIndex(info.index,info.name)
var text = '{{目录\n' +
'|display={{{display|}}}\n' +
'|cover='+info.cover+'\n'+
'|name='+info.name+'\n'+
'|author='+info.author+'\n'+
'|publisher='+info.publisher+'\n'+
'|time='+info.time+'\n'+
'|ps='+info.ps+'\n'+
'|index=\n'+index+'\n}}'
text += '<includeonly>[[分类:' + info.name + ']]</includeonly>'
console.log(text)
var templateName = '模板:目录-'+info.name
var tikuName = '题库:'+info.name
var tikuContent = '{{目录-'+info.name+'}}\n' +
'[[分类:题库目录]]'
if (upload){
if(!getPageRevision(url,tikuName,1).isSuccess){
editpage(false,url,token,tikuName,tikuContent)
}
editpage(false,url,token,templateName,text)
}