更多操作
无编辑摘要 |
无编辑摘要 |
||
第341行: | 第341行: | ||
$('#entry-'+i).children('.entry-appendix').html('<p>加入日期:'+enteries[i].created+'</p>') | $('#entry-'+i).children('.entry-appendix').html('<p>加入日期:'+enteries[i].created+'</p>') | ||
console.log(enteries[i]) | console.log(enteries[i]) | ||
$('#editEntry-'+i).bind('click',function () { | $('#editEntry-'+i).bind('click',{title:enteries[i].title},function () { | ||
console.log(enteries[i]) | console.log(enteries[i]) | ||
createInterface( | createInterface(title) | ||
}) | }) | ||
$('#delEntry-'+i).bind('click',function () { | $('#delEntry-'+i).bind('click',{token:token,id:enteries[i].id},function () { | ||
if(confirm('即将从您的列表中去除此条目,此操作不会影响页面内容,确定吗?')){ | if(confirm('即将从您的列表中去除此条目,此操作不会影响页面内容,确定吗?')){ | ||
readlistDelEntry( | readlistDelEntry(id,token) | ||
} | } | ||
2022年9月20日 (二) 09:21的版本
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,
}
$.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,
}
$.ajax({
url: tikuCreateConfig.url,
method: "post",
async: false,
data: PARAMS,
timeout: 5000,
success: function (results){
isSuccess = results["createentry"]["result"]
}
})
return isSuccess
}
function readlistSetup(token){
var isSuccess = false
var PARAMS = {
"action": "readinglists",
"format": "json",
"command": "setup",
"utf8": 1,
"token": token,
}
$.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
}
$.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 readlistEntries(id){
var isSuccess = false
var PARAMS = {
"action": "query",
"format": "json",
"list": "readinglistentries",
"utf8": 1,
"rlelists": id
}
$.ajax({
url: tikuCreateConfig.url,
method: "post",
async: false,
data: PARAMS,
timeout: 5000,
success: function (results){
isSuccess = results['query']['readinglistentries']
}
})
return isSuccess
}
function readlistEntriesMeta(project,name){
var isSuccess = false
var PARAMS = {
"action": "query",
"format": "json",
"list": "readinglistentries",
"utf8": 1,
"rlelists": id
}
$.ajax({
url: tikuCreateConfig.url,
method: "post",
async: false,
data: PARAMS,
timeout: 5000,
success: function (results){
isSuccess = results['query']['readinglistentries']
}
})
return isSuccess
}
//编辑页面
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"
}
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'
}
$.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 = token
}
}
})
return isSuccess
}
function clean() {
$('#tiku-guide-container').html('')
}
function dashboardInterface(){
clean()
var token = get_token(tikuCreateConfig.url)
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>')
}else{
var enteries = readlistEntries(rls.id)
for(var i=0;i<enteries.length;i++){
var template = $('<div id="entry-'+i+'"><div class="entry-header"></div><div class="entry-body"></div><div class="entry-appendix"></div></div><hr>').appendTo($('#myTikuList').children('#body'))
$('#entry-'+i).children('.entry-header').html('<a href="'+enteries[i].project+enteries[i].title+'"><h4>'+enteries[i].title+'</h4></a>')
$('#entry-'+i).children('.entry-body').html('<button type="button" id="editEntry-'+i+'">编辑此目录</button><button type="button" id="delEnrty-'+i+'">移除此条目</button>')
$('#entry-'+i).children('.entry-appendix').html('<p>加入日期:'+enteries[i].created+'</p>')
console.log(enteries[i])
$('#editEntry-'+i).bind('click',{title:enteries[i].title},function () {
console.log(enteries[i])
createInterface(title)
})
$('#delEntry-'+i).bind('click',{token:token,id:enteries[i].id},function () {
if(confirm('即将从您的列表中去除此条目,此操作不会影响页面内容,确定吗?')){
readlistDelEntry(id,token)
}
})
}
}
}
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.id,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
}
//** {{目录项|题库:诊断学学习指导与习题集(第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)
}
}