更多操作
(// Edit via Wikitext Extension for VSCode) |
(// Edit via Wikitext Extension for VSCode) |
||
(未显示同一用户的30个中间版本) | |||
第1行: | 第1行: | ||
setTimeout(function(){ | if( $('#tiku-guide-container').length>0){ | ||
setTimeout(function(){ | |||
dashboardInterface() | |||
},0) | console.log('interface') | ||
},0) | |||
} | |||
$.fn.serializeObject = function() | $.fn.serializeObject = function() | ||
{ | { | ||
第19行: | 第22行: | ||
url:'https://www.medforest.cn/medf/api.php', | url:'https://www.medforest.cn/medf/api.php', | ||
des:'本列表包含您创建或者参与编辑的题库' | des:'本列表包含您创建或者参与编辑的题库' | ||
} | } | ||
//编辑页面异步 | //编辑页面异步 | ||
function create(title,content,summary){ | function create(title,content,summary){ | ||
第291行: | 第96行: | ||
"rvprop": "content", | "rvprop": "content", | ||
"rvlimit": pageCount, | "rvlimit": pageCount, | ||
"rvslots": "*", | |||
"rvdir": "older" | "rvdir": "older" | ||
} | } | ||
第465行: | 第271行: | ||
var addName = new OO.ui.TextInputWidget( { | var addName = new OO.ui.TextInputWidget( { | ||
placeholder: '完整题库名称,包括“题库:”前缀', | placeholder: '完整题库名称,包括“题库:”前缀', | ||
id:'addName' | id:'addName', | ||
value:'题库:' | |||
} ) | } ) | ||
var html = $('<div id="addTikuContainer"><div class="header"><div class="heading"><h3>参与编辑一个题库</h3></div></div>' + | var html = $('<div id="addTikuContainer"><div class="header"><div class="heading"><h3>参与编辑一个题库</h3></div></div>' + | ||
第497行: | 第304行: | ||
returnBtn.$element.appendTo(container) | returnBtn.$element.appendTo(container) | ||
var titleContent = resolve(title) | var titleContent = resolve(title) | ||
var inputFieldset = new OO.ui.FieldsetLayout( { | var inputFieldset = new OO.ui.FieldsetLayout( { | ||
第540行: | 第344行: | ||
value:titleContent.ps | value:titleContent.ps | ||
} ) | } ) | ||
,category = new OO.ui.TextInputWidget( { | |||
placeholder: '附加的分类,加载题库主页中', | |||
name:'category', | |||
value:titleContent.category | |||
} ) | |||
,tikuBenkeCategory = new OO.ui.DropdownInputWidget( { | ,tikuBenkeCategory = new OO.ui.DropdownInputWidget( { | ||
label: '--选择一个选项--', | label: '--选择一个选项--', | ||
第546行: | 第355行: | ||
options: [ | options: [ | ||
{ data: '0', label: '--选择一个选项--' } , | { data: '0', label: '--选择一个选项--' } , | ||
{optgroup: '大一'}, | |||
{ data: '本科细胞生物学题库', label: '细胞生物学' } , | { data: '本科细胞生物学题库', label: '细胞生物学' } , | ||
{ data: '本科组织学与胚胎学题库', label: '组织学与胚胎学' } , | { data: '本科组织学与胚胎学题库', label: '组织学与胚胎学' } , | ||
{ data: '本科系统解剖学题库', label: '系统解剖学' } , | { data: '本科系统解剖学题库', label: '系统解剖学' } , | ||
{optgroup: '大二'}, | |||
{ data: '本科生理学题库', label: '生理学' } , | { data: '本科生理学题库', label: '生理学' } , | ||
{ data: '本科生物化学与分子生物学题库', label: '生物化学与分子生物学' } , | { data: '本科生物化学与分子生物学题库', label: '生物化学与分子生物学' } , | ||
第557行: | 第368行: | ||
{ data: '本科医学心理学题库', label: '医学心理学' } , | { data: '本科医学心理学题库', label: '医学心理学' } , | ||
{ data: '本科医学统计学题库', label: '医学统计学' } , | { data: '本科医学统计学题库', label: '医学统计学' } , | ||
{ data: '马克思主义基本原理概论题库', label: '马克思主义基本原理概论' } , | |||
{optgroup: '大三'}, | |||
{ data: '本科十门联考题库', label: '十门联考' } , | { data: '本科十门联考题库', label: '十门联考' } , | ||
{ data: '本科病理学题库', label: '病理学' } , | { data: '本科病理学题库', label: '病理学' } , | ||
第569行: | 第382行: | ||
{ data: '本科医学伦理学题库', label: '医学伦理学' } , | { data: '本科医学伦理学题库', label: '医学伦理学' } , | ||
{ data: '本科中医学题库', label: '中医学' } , | { data: '本科中医学题库', label: '中医学' } , | ||
{ data: '本科全科医学概论题库', label: '全科医学概论' } , | |||
{optgroup: '大四'}, | |||
{ data: '本科外科学题库', label: '外科学' } , | { data: '本科外科学题库', label: '外科学' } , | ||
{ data: '本科内科学题库', label: '内科学' } , | { data: '本科内科学题库', label: '内科学' } , | ||
第575行: | 第390行: | ||
{ data: '本科精神病学题库', label: '精神病学' } , | { data: '本科精神病学题库', label: '精神病学' } , | ||
{ data: '本科神经病学题库', label: '神经病学' } , | { data: '本科神经病学题库', label: '神经病学' } , | ||
{ data: '本科传染病学题库', label: '传染病学' } , | |||
{ data: '本科急诊与灾难医学题库', label: '急诊与灾难医学' } , | { data: '本科急诊与灾难医学题库', label: '急诊与灾难医学' } , | ||
{ data: '本科皮肤性病题库', label: '皮肤性病' } , | { data: '本科皮肤性病题库', label: '皮肤性病' } , | ||
第585行: | 第401行: | ||
{ data: '本科介入放射学题库', label: '介入放射学' } , | { data: '本科介入放射学题库', label: '介入放射学' } , | ||
{ data: '本科法医学题库', label: '法医学' } , | { data: '本科法医学题库', label: '法医学' } , | ||
{optgroup: '考研'}, | |||
{ data: '考研题库', label: '考研' } , | { data: '考研题库', label: '考研' } , | ||
] | ] | ||
第683行: | 第500行: | ||
new OO.ui.FieldLayout( indexContainer, { | new OO.ui.FieldLayout( indexContainer, { | ||
label: '目录编辑', | label: '目录编辑', | ||
align: 'top' | |||
} ), | |||
new OO.ui.FieldLayout( category, { | |||
label: '附加分类', | |||
align: 'top' | align: 'top' | ||
} ), | } ), | ||
第776行: | 第597行: | ||
console.log(text) | console.log(text) | ||
if(text.length>0){ | if(text.length>0){ | ||
var reg1 = new RegExp('(?<=\\{\\{)(.+?)(?=\\}\\})','g') | var reg1 = new RegExp('(?<=\\{\\{目录项)(.+?)(?=\\}\\})','g') | ||
var reg2 = new RegExp('\\{\\{(.+?)\\}\\}','g') | var reg2 = new RegExp('\\{\\{目录项(.+?)\\}\\}','g') | ||
var content = text.match(reg1)[0] | var content = text.match(reg1)[0] | ||
text=text.replace(reg2,'') | text=text.replace(reg2,'') | ||
第793行: | 第614行: | ||
} | } | ||
} | } | ||
//获取题库主页的附加分类信息 | |||
function getMainPageAdditionalCategories(title){ | |||
var text = getPageRevision(tikuCreateConfig.url,title,1) | |||
var result = '' | |||
if(text.isSuccess){ | |||
text = text.result['query']['pages'] | |||
for(var key in text){ | |||
text = text[key]['revisions'][0]['slots']['main']['*'] | |||
} | |||
var cate = text.match(/(?<=\[\[分类:).+(?=\]\])/g) | |||
for(var i=0;i<cate.length;i++){ | |||
if(cate[i]!=='题库目录'){ | |||
result += cate[i]+'|' | |||
} | |||
} | |||
} | |||
console.log(cate) | |||
result = result.substring(0,result.length-1) | |||
console.log(result) | |||
return result | |||
} | |||
//解析分类信息 | //解析分类信息 | ||
function resolveCategories(title){ | function resolveCategories(title){ | ||
第808行: | 第651行: | ||
} | } | ||
function resolve(title){ | function resolve(title){ | ||
console.log(title) | console.log(111,title) | ||
if(title!==undefined){ | if(title!==undefined){ | ||
var cate = resolveCategories( | cateTitle = '模板:目录-'+title.split(':')[1] | ||
var text = getPageRevision(tikuCreateConfig.url, | var cate = resolveCategories(cateTitle) | ||
console.log( | var text = getPageRevision(tikuCreateConfig.url,cateTitle,1) | ||
console.log(cateTitle,cate) | |||
if(text.isSuccess&&cate!==''){ | if(text.isSuccess&&cate!==''){ | ||
text = text.result['query']['pages'] | text = text.result['query']['pages'] | ||
for(var key in text){ | for(var key in text){ | ||
text = text[key]['revisions'][0]['*'] | text = text[key]['revisions'][0]['slots']['main']['*'] | ||
} | } | ||
} | } | ||
}else { | }else { | ||
return {'author':'','name':'','cover':'','publisher':'','index':'','ps':'','time':''} | return {'author':'','name':'','cover':'','publisher':'','index':'','ps':'','time':'','category':''} | ||
} | } | ||
//获取主页的附加分类 | |||
var category = getMainPageAdditionalCategories(title) | |||
//去除目录中的<includeonly>部分内容 | |||
text = text.replace(/<includeonly>(.+?)<\/includeonly>/g,'') | |||
var reg1 = new RegExp('index','g') | var reg1 = new RegExp('index','g') | ||
console.log(text) | console.log(text) | ||
第830行: | 第679行: | ||
text = text.split('|') | text = text.split('|') | ||
var resolved = {} | var resolved = {} | ||
resolved.category = category | |||
resolved.tikuBenkeCategory = cate | resolved.tikuBenkeCategory = cate | ||
for(var i=3;i<text.length;i++){ | for(var i=3;i<text.length;i++){ | ||
第881行: | 第731行: | ||
'|ps='+info.ps+'\n'+ | '|ps='+info.ps+'\n'+ | ||
'|index=\n'+index+'\n}}\n' | '|index=\n'+index+'\n}}\n' | ||
indexTemplateContent += '<includeonly>[[分类:' + info.name + ']]</includeonly>' | indexTemplateContent += '<includeonly>{{#if: {{{noCategory|}}} || [[分类:' + info.name + ']] }}</includeonly>' | ||
indexTemplateContent = indexTemplateContent.replace(/\r/g,'') | indexTemplateContent = indexTemplateContent.replace(/\r/g,'') | ||
console.log(indexTemplateContent) | console.log(indexTemplateContent) | ||
//第二个页面的内容:题库主页面,分类为“分类:题库目录” | //第二个页面的内容:题库主页面,分类为“分类:题库目录” | ||
var additionalCates = info.category.split('|') | |||
var tikuMainPageName = '题库:'+info.name | var tikuMainPageName = '题库:'+info.name | ||
var tikuMainPageContent = '{{目录-'+info.name+'}}\n' + | var tikuMainPageContent = '{{目录-'+info.name+'}}\n' + | ||
'[[分类:题库目录]]' | '[[分类:题库目录]]' | ||
for(var i=0;i<additionalCates.length;i++){ | |||
if(additionalCates[i]!==''){ | |||
tikuMainPageContent+='\n[[分类:'+additionalCates[i]+']]' | |||
} | |||
} | |||
//第三个页面内容:分类页,内容为对应学科分类 | //第三个页面内容:分类页,内容为对应学科分类 | ||
var childCategoryPageName = '分类:'+info.name | var childCategoryPageName = '分类:'+info.name | ||
var childCategoryPageContent = '[[分类:'+info.tikuBenkeCategory+']]' | var childCategoryPageContent = '[[分类:'+info.tikuBenkeCategory+']]\n{{目录-'+info.name+'|noCategory=true}}' | ||
//第四个请求添加阅读列表 | //第四个请求添加阅读列表 |
2023年7月10日 (一) 00:58的最新版本
if( $('#tiku-guide-container').length>0){
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
}
tikuCreateConfig = {
rl:'参与编辑的题库',
project:'https://www.medforest.cn/dic/',
url:'https://www.medforest.cn/medf/api.php',
des:'本列表包含您创建或者参与编辑的题库'
}
//编辑页面异步
function create(title,content,summary){
return new mw.Api().create(
title,
{ summary: summary },
content
)
}
function edit ( title, text, summary ) {
return new mw.Api().edit(
title,
function ( revision ) {
return {
text: text,
summary: summary,
tags:'tiku-creat-guide'
};
}
)
}
function editOrCreat(isExist, title, text, summary){
console.log(isExist)
if(isExist){
return edit ( title, text, summary )
}else{
return create ( title, text,summary )
}
}
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,
"rvslots": "*",
"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 getCategories(url,title){
var result = {status:0,categories:[]}
var PARAMS = {
"action": "query",
"format": "json",
"prop": 'categories',
"titles": title,
"utf8": 1,
}
var isSuccess = {}
$.ajax(
{
url: url,
method: "get",
async: false,
data: PARAMS,
timeout: 5000,
success: function (data){
var page = data.query.pages
if(!('-1' in data.query.pages)){
for(var i in page){
result.status = 1
result.categories = page[i].categories
}
}
console.log(result)
}
})
return result
}
function clearContainer() {
$('#tiku-guide-container').html('')
}
function dashboardInterface(){
clearContainer()
var token = get_token(tikuCreateConfig.url)
var container = $('#tiku-guide-container')
var html = $('<div id="myTikuList"></div>').appendTo(container)
var header = $('<div id="header"></div>')//包括heading, actions
var heading = $('<div id="heading"></div>')
var actions = $('<div id="actions"></div>')
var creatTikuBtn = new OO.ui.ButtonWidget( {
label: '创建一个新题库'
,id:'createTiku'
,flags: [
'progressive'
]
} ).$element.appendTo(actions)
var addTikuToMyListBtn = new OO.ui.ButtonWidget( {
label: '添加题库到我的列表库'
,id:'addTiku'
,flags: [
'progressive'
]
} ).$element.appendTo(actions)
var body = $('<div id="body"></div>')
header.append(heading,actions)
html.append(header,body)
$('#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>')
var editThisBtn = new OO.ui.ButtonWidget( {
label: '编辑此目录'
,id:'editEntry-'+i
,flags: [
'progressive'
]
} ).$element
var delThisBtn = new OO.ui.ButtonWidget( {
label: '移除此条目'
,id:'delEnrty-'+i
,flags: [
'destructive'
]
} ).$element
$('#entry-'+i).children('.entry-body').append(editThisBtn, delThisBtn)
$('#entry-'+i).children('.entry-appendix').html('<p>加入日期:'+enteries[i].created+'</p>')
console.log(enteries[i])
$('#editEntry-'+i).bind('click',{title:enteries[i].title},function (event) {
var title = event.data.title
console.log(title)
createInterface(title)
})
$('#delEnrty-'+i).bind('click',{token:token,id:enteries[i].id},function (event) {
if(confirm('即将从您的列表中去除此条目,此操作不会影响页面内容,确定吗?')){
readlistDelEntry(event.data.id,event.data.token)
clearContainer()
dashboardInterface()
}
})
}
}
}
function addInterface(){
clearContainer()
var container = $('#tiku-guide-container')
var returnBtn = pushLineBtn = new OO.ui.ButtonWidget( {
id:'backDashboard',
label: '返回'
} ).$element.appendTo(container)
$('#backDashboard').bind('click',function () {
dashboardInterface()
})
var addTikuBtn = new OO.ui.ButtonWidget( {
id:'addTiku',
label: '添加',
flags: [
'primary',
'progressive'
]
} )
var addName = new OO.ui.TextInputWidget( {
placeholder: '完整题库名称,包括“题库:”前缀',
id:'addName',
value:'题库:'
} )
var html = $('<div id="addTikuContainer"><div class="header"><div class="heading"><h3>参与编辑一个题库</h3></div></div>' +
'<div class="body"></div></div>')
html.children('.body').append(new OO.ui.ActionFieldLayout( addName, addTikuBtn
, {
align: 'top',
} ).$element)
html.appendTo(container)
$('#addTiku').bind('click',function () {
var inputName = $('#addName').children('input').val()
var result = creatEntryListCheckExit(inputName)
if(result.status === 1){
alertDialog('成功','添加成功','确认',false)
}else{
alertDialog('失败','题库名称添加失败','返回重试',false)
}
})
}
function createInterface(title){
clearContainer()
var container = $('#tiku-guide-container')
var returnBtn = pushLineBtn = new OO.ui.ButtonWidget( {
id:'backDashboard',
label: '返回'
} )
returnBtn.$element.bind('click',function () {
dashboardInterface()
})
returnBtn.$element.appendTo(container)
var titleContent = resolve(title)
var inputFieldset = new OO.ui.FieldsetLayout( {
label: '创建一个题库'
} )
,quickInputFieldset = new OO.ui.FieldsetLayout( {
} )
,inputFieldset2 = new OO.ui.FieldsetLayout( {
} )
,name = new OO.ui.TextInputWidget( {
placeholder: '题库名,必填项',
required: true,
validate: 'non-empty',
name:'name',
value:titleContent.name
} )
,cover = new OO.ui.TextInputWidget( {
placeholder: '题库目录封面的文件名,不需要用中括号包围和文件:前缀',
name:'cover',
value:titleContent.cover
} )
,time = new OO.ui.TextInputWidget( {
placeholder: '题库发行的时间',
name:'time',
value:titleContent.time
} )
,author = new OO.ui.TextInputWidget( {
placeholder: '题库的作者',
name:'author',
value:titleContent.author
} )
,publisher = new OO.ui.TextInputWidget( {
placeholder: '题库的出版社',
name:'publisher',
value:titleContent.publisher
} )
,ps = new OO.ui.TextInputWidget( {
placeholder: '题库的附加说明文字',
name:'ps',
value:titleContent.ps
} )
,category = new OO.ui.TextInputWidget( {
placeholder: '附加的分类,加载题库主页中',
name:'category',
value:titleContent.category
} )
,tikuBenkeCategory = new OO.ui.DropdownInputWidget( {
label: '--选择一个选项--',
name:'tikuBenkeCategory',
value:titleContent.tikuBenkeCategory,
options: [
{ data: '0', label: '--选择一个选项--' } ,
{optgroup: '大一'},
{ data: '本科细胞生物学题库', label: '细胞生物学' } ,
{ data: '本科组织学与胚胎学题库', label: '组织学与胚胎学' } ,
{ data: '本科系统解剖学题库', label: '系统解剖学' } ,
{optgroup: '大二'},
{ data: '本科生理学题库', label: '生理学' } ,
{ data: '本科生物化学与分子生物学题库', label: '生物化学与分子生物学' } ,
{ data: '本科医学微生物学题库', label: '医学微生物学' } ,
{ data: '本科医学免疫学题库', label: '医学免疫学' } ,
{ data: '本科预防医学题库', label: '预防医学' } ,
{ data: '本科医学遗传学题库', label: '医学遗传学' } ,
{ data: '本科医学心理学题库', label: '医学心理学' } ,
{ data: '本科医学统计学题库', label: '医学统计学' } ,
{ data: '马克思主义基本原理概论题库', label: '马克思主义基本原理概论' } ,
{optgroup: '大三'},
{ data: '本科十门联考题库', label: '十门联考' } ,
{ data: '本科病理学题库', label: '病理学' } ,
{ data: '本科病理生理学题库', label: '病理生理学' } ,
{ data: '本科局部解剖学题库', label: '局部解剖学' } ,
{ data: '本科药理学题库', label: '药理学' } ,
{ data: '本科诊断学题库', label: '诊断学' } ,
{ data: '本科人体寄生虫学题库', label: '人体寄生虫学' } ,
{ data: '本科流行病学题库', label: '流行病学' } ,
{ data: '本科医学影像学题库', label: '医学影像学' } ,
{ data: '本科卫生学题库', label: '卫生学' } ,
{ data: '本科医学伦理学题库', label: '医学伦理学' } ,
{ data: '本科中医学题库', label: '中医学' } ,
{ data: '本科全科医学概论题库', label: '全科医学概论' } ,
{optgroup: '大四'},
{ data: '本科外科学题库', label: '外科学' } ,
{ data: '本科内科学题库', label: '内科学' } ,
{ data: '本科妇产科学题库', label: '妇产科学' } ,
{ data: '本科儿科学题库', label: '儿科学' } ,
{ data: '本科精神病学题库', label: '精神病学' } ,
{ data: '本科神经病学题库', label: '神经病学' } ,
{ data: '本科传染病学题库', label: '传染病学' } ,
{ data: '本科急诊与灾难医学题库', label: '急诊与灾难医学' } ,
{ data: '本科皮肤性病题库', label: '皮肤性病' } ,
{ data: '本科耳鼻咽喉头颈外科学题库', label: '耳鼻咽喉头颈外科学' } ,
{ data: '本科眼科学题库', label: '眼科学' } ,
{ data: '本科口腔医学题库', label: '口腔医学' } ,
{ data: '本科临床麻醉学题库', label: '临床麻醉学' } ,
{ data: '本科危重病医学题库', label: '危重病医学' } ,
{ data: '本科核医学题库', label: '核医学' } ,
{ data: '本科介入放射学题库', label: '介入放射学' } ,
{ data: '本科法医学题库', label: '法医学' } ,
{optgroup: '考研'},
{ data: '考研题库', label: '考研' } ,
]
} )
,level = new OO.ui.DropdownInputWidget( {
name:'level',
classes:['horizontalLayoutInput'],
options: [
{ data: '*', label: '*' } ,
{ data: '**', label: '**' } ,
{ data: '***', label: '***' } ,
]
} )
,chapID = new OO.ui.TextInputWidget( {
name:'chapID',
classes:['horizontalLayoutInput'],
placeholder: '章节号(子页面名称)'
} )
,chapName = new OO.ui.TextInputWidget( {
name:'chapName',
classes:['horizontalLayoutInput'],
placeholder: '章节名(显示名称)'
} )
,pushLineBtn = new OO.ui.ButtonWidget( {
id:'addIndex',
label: '添加到末尾'
} )
,indexContainer = new OO.ui.MultilineTextInputWidget( {
name:'index',
id:'indexContainer',
rows: 10,
autosize: true,
placeholder:'* 第一章|绪 论\n**第一节|xxX\n* 第二章|222',
value: titleContent.index
} )
,submitIndexBtn = new OO.ui.ButtonWidget( {
id:'submitIndex',
label: '提交',
flags: [
'primary',
'progressive'
]
} )
,prevIndexBtn = new OO.ui.ButtonWidget( {
id:'prevIndex',
label: '预览'
} )
,logger = new OO.ui.MultilineTextInputWidget( {
name:'logger',
id:'logger',
rows: 10,
row: 15,
readOnly: true
} )
inputFieldset.addItems( [
new OO.ui.FieldLayout( name, {
label: '题库名称',
align: 'inline'
} ),
new OO.ui.FieldLayout( cover, {
label: '封面(请先在维基中上传对应封面)',
align: 'top'
} ),
new OO.ui.FieldLayout( time, {
label: '发型年份(或者录入时间,默认当前时间)',
align: 'top'
} ),
new OO.ui.FieldLayout( author, {
label: '作者(默认创建者)',
align: 'top'
} ),
new OO.ui.FieldLayout( publisher, {
label: '出版社',
align: 'top'
} ),
new OO.ui.FieldLayout( ps, {
label: '备注',
align: 'top'
} ),
new OO.ui.FieldLayout( tikuBenkeCategory, {
label: '学科分类(必选)',
align: 'top'
} ),
] )
quickInputFieldset.addItems( [
new OO.ui.HorizontalLayout( {
items: [
level,chapID,
new OO.ui.LabelWidget( {
label: '|'
} )
,chapName,pushLineBtn
]
} )
] )
inputFieldset2.addItems( [
new OO.ui.FieldLayout( indexContainer, {
label: '目录编辑',
align: 'top'
} ),
new OO.ui.FieldLayout( category, {
label: '附加分类',
align: 'top'
} ),
new OO.ui.HorizontalLayout( {
items: [
submitIndexBtn,prevIndexBtn,
]
} ),
new OO.ui.FieldLayout( logger, {
label: '上传日志',
align: 'top'
} ),
] )
var form = new OO.ui.FormLayout( {
id:'tikuInfo',
items: [ inputFieldset, quickInputFieldset, inputFieldset2 ],
} ).$element.appendTo(container)
$('#addIndex').bind("click",function (){addIndex()})
$('#prevIndex').bind('click',function(){
submit(false)
})
$('#submitIndex').bind('click',function(){submit(true)})
}
function alertDialog(title, message, btnLabel, disabled){
var messageDialog = new OO.ui.MessageDialog();
var windowManager = new OO.ui.WindowManager();
$( 'body' ).append( windowManager.$element );
windowManager.addWindows( [ messageDialog ] );
windowManager.openWindow( messageDialog, {
title:title,
message: message,
actions: [
{
action: 'accept',
label: '关闭',
flags: 'primary',
disabled: disabled,
}
]
});
return windowManager
}
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').children('textarea').val()
$('#indexContainer').children('textarea').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
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]
console.log(chapName)
if(!l.hasOwnProperty(level)){
l[level] = chapID
}else if(l[level] !== chapID){
l[level] = chapID
}
for(var n=0;n<level;n++){
t+='/'+l[(n+1).toString()]
final += '*'
}
console.log(l)
final += ' '+'{{目录项|'+t+'|'+chapName+'}}\n'
console.log('{{目录项|'+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 getMainPageAdditionalCategories(title){
var text = getPageRevision(tikuCreateConfig.url,title,1)
var result = ''
if(text.isSuccess){
text = text.result['query']['pages']
for(var key in text){
text = text[key]['revisions'][0]['slots']['main']['*']
}
var cate = text.match(/(?<=\[\[分类:).+(?=\]\])/g)
for(var i=0;i<cate.length;i++){
if(cate[i]!=='题库目录'){
result += cate[i]+'|'
}
}
}
console.log(cate)
result = result.substring(0,result.length-1)
console.log(result)
return result
}
//解析分类信息
function resolveCategories(title){
var tikuName = title.split('目录-')[1]
var cate = getCategories(tikuCreateConfig.url,'分类:'+tikuName)
if(cate.status === 1){
for(var i=0;i<cate.categories.length;i++){
var cateName = cate.categories[i].title
if(cateName.includes('题库')){
return cateName.split('分类:')[1]
}
}
}
return ''
}
function resolve(title){
console.log(111,title)
if(title!==undefined){
cateTitle = '模板:目录-'+title.split(':')[1]
var cate = resolveCategories(cateTitle)
var text = getPageRevision(tikuCreateConfig.url,cateTitle,1)
console.log(cateTitle,cate)
if(text.isSuccess&&cate!==''){
text = text.result['query']['pages']
for(var key in text){
text = text[key]['revisions'][0]['slots']['main']['*']
}
}
}else {
return {'author':'','name':'','cover':'','publisher':'','index':'','ps':'','time':'','category':''}
}
//获取主页的附加分类
var category = getMainPageAdditionalCategories(title)
//去除目录中的<includeonly>部分内容
text = text.replace(/<includeonly>(.+?)<\/includeonly>/g,'')
var reg1 = new RegExp('index','g')
console.log(text)
var start = text.indexOf('{{目录')
var end = text.lastIndexOf('}}')
text = text.substring(start,end)
console.log(start + '|' + end)
text = text.split('|')
var resolved = {}
resolved.category = category
resolved.tikuBenkeCategory = cate
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) {
cleanLogger()
upload = upload !== undefined ? upload:true
var url = tikuCreateConfig.url
var info = $('#tikuInfo').serializeObject()
//检查是否有未填写的项目
if(info.tikuBenkeCategory==="0"){
alertDialog('错误',"学科未选择!",'返回选择学科' ,false)
return false
}
console.log(info)
//第一个页面的内容:标题为“模板:目录-XXXX”,包含目录模板,分类为“分类:‘书本名’”
var indexTemplateName = '模板:目录-'+info.name
var index = pIndex(info.index,info.name)
console.log(index)
var indexTemplateContent = '{{目录\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}}\n'
indexTemplateContent += '<includeonly>{{#if: {{{noCategory|}}} || [[分类:' + info.name + ']] }}</includeonly>'
indexTemplateContent = indexTemplateContent.replace(/\r/g,'')
console.log(indexTemplateContent)
//第二个页面的内容:题库主页面,分类为“分类:题库目录”
var additionalCates = info.category.split('|')
var tikuMainPageName = '题库:'+info.name
var tikuMainPageContent = '{{目录-'+info.name+'}}\n' +
'[[分类:题库目录]]'
for(var i=0;i<additionalCates.length;i++){
if(additionalCates[i]!==''){
tikuMainPageContent+='\n[[分类:'+additionalCates[i]+']]'
}
}
//第三个页面内容:分类页,内容为对应学科分类
var childCategoryPageName = '分类:'+info.name
var childCategoryPageContent = '[[分类:'+info.tikuBenkeCategory+']]\n{{目录-'+info.name+'|noCategory=true}}'
//第四个请求添加阅读列表
var rlPageName = tikuMainPageName
//判断是否为预览模式,并上传
if (upload){
var rls = isRLExist(tikuCreateConfig.rl)
if(confirm('即将开始上传,确认?')){
//步骤一:检查页面是否存
isCategoryPageExist = getPageRevision(url,childCategoryPageName,1).isSuccess
isTemplatePageExist = getPageRevision(url,indexTemplateName,1).isSuccess
isTikuMainPageExist = getPageRevision(url,tikuMainPageName,1).isSuccess
addLogger('**检查**分类页:'+childCategoryPageName+' 是否存在:'+isCategoryPageExist)
addLogger('**检查**模板页:'+indexTemplateName+' 是否存在:'+isTemplatePageExist)
addLogger('**检查**主页:'+tikuMainPageName+' 是否存在:'+isTikuMainPageExist)
//步骤二:创建分类页
addLogger('**创建**分类页:'+childCategoryPageName+'\n 内容为:'+childCategoryPageContent)
editOrCreat(isCategoryPageExist, childCategoryPageName,childCategoryPageContent,'题库创建向导工具创建').done(
function(r){
addLogger(JSON.stringify(r))
//如果成功则步骤三:创建模板页
if(r.result === "Success"){
addLogger('**创建成功**分类页:'+tikuMainPageName)
addLogger('**创建**模板页:'+indexTemplateName+'\n 内容为:'+indexTemplateContent)
editOrCreat(isTemplatePageExist, indexTemplateName,indexTemplateContent,'题库创建向导工具创建').done(
function(r){
addLogger(JSON.stringify(r))
//如果成功则步骤四:创建题库主页
if(r.result === "Success"){
addLogger('**创建成功**模板页:'+indexTemplateName)
addLogger('**创建**主页:'+tikuMainPageName+'\n 内容为:'+tikuMainPageContent)
editOrCreat(isTikuMainPageExist, tikuMainPageName,tikuMainPageContent,'题库创建向导工具创建').done(
function(r){
addLogger(JSON.stringify(r))
//如果成功则步骤五:添加阅读列表
if(r.result === "Success"){
addLogger('**创建成功**主页:'+tikuMainPageName)
addLogger('**创建**阅读列表:'+tikuMainPageName)
var creatRLresult = creatEntryListCheckExit(tikuMainPageName)
if(creatRLresult.status === 1){
alertDialog('成功','创建成功','确认',false)
}else{
alertDialog('**错误**','阅读列表创建失败,程序退出','返回重试',false)
addLogger('**!!创建失败!!**阅读列表:'+tikuMainPageName)
return false
}
}else{
alertDialog('**错误**','主页创建失败,程序退出','返回重试',false)
addLogger('**!!创建失败!!**主页:'+tikuMainPageName)
return false
}
}
)
}else{
alertDialog('**错误**','模板页创建失败,程序退出','返回重试',false)
addLogger('**!!创建失败!!**模板页:'+indexTemplateName)
return false
}
}
)
}else{
alertDialog('**错误**','分类页创建失败,程序退出','返回重试',false)
addLogger('**!!创建失败!!**分类页:'+tikuMainPageName)
return false
}
}
)
}
}else {
isCategoryPageExist = getPageRevision(url,childCategoryPageName,1).isSuccess
isTemplatePageExist = getPageRevision(url,indexTemplateName,1).isSuccess
isTikuMainPageExist = getPageRevision(url,tikuMainPageName,1).isSuccess
addLogger('**检查**分类页:'+childCategoryPageName+' 是否存在:'+isCategoryPageExist)
addLogger('**检查**模板页:'+indexTemplateName+' 是否存在:'+isTemplatePageExist)
addLogger('**检查**主页:'+tikuMainPageName+' 是否存在:'+isTikuMainPageExist)
addLogger('**创建**分类页:'+tikuMainPageName+'\n 内容为:'+childCategoryPageContent)
addLogger('**MediaWiki:Gadget-tikuGuide.js创建成功**分类页:'+tikuMainPageName)
addLogger('**创建**模板页:'+indexTemplateName+'\n 内容为:'+indexTemplateContent)
addLogger('**创建成功**模板页:'+indexTemplateName)
addLogger('**创建**主页:'+tikuMainPageName+'\n 内容为:'+tikuMainPageContent)
addLogger('**创建成功**主页:'+tikuMainPageName)
addLogger('**创建**阅读列表'+tikuMainPageName)
}
}
function addLogger(text){
var logger = $('#logger').children('textarea')
var currentValue = logger.val()
logger.val(currentValue+'\n'+text)
}
function cleanLogger(){
$('#logger').children('textarea').val('')
}