打开/关闭搜索
搜索
打开/关闭菜单
1.3K
142
374
74K
医林拾薪
导航
首页
医林拾薪论坛
最近更改
随机页面
特殊页面
上传文件
快捷入口
医学本科题库
待翻译的英语单词
待补充英文的名词
小工具
导出ANKI卡组
本科题库创建向导
题库录入工具
录入英语单词
录入名称解释
Toggle preferences menu
通知
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。
user-interface-preferences
个人工具
登录
查看“MediaWiki:Gadget-tikuGuide.js”的源代码
MediaWiki界面页面
分享此页面
查看
阅读
查看源代码
查看历史
associated-pages
消息
讨论
更多操作
←
MediaWiki:Gadget-tikuGuide.js
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
此页面为本wiki上的软件提供界面文本,并受到保护以防止滥用。 如欲修改所有wiki的翻译,请访问
translatewiki.net
上的MediaWiki本地化项目。
您无权编辑此JavaScript页面,因为编辑此页面可能会影响所有访问者。
您可以查看和复制此页面的源代码。
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 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 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="enrty-body"></div><div id="entry-appendix"></div></div>').appendTo($('#myTikuList').children('#body')) $('#entry-'+i).children('.entry-header').html('<a href="'+enteries[i].project+enteries[i].title+'"><h4>'+enteries[i].title+'</h4></a>') } } } 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) } }
本页使用的模板:
模板:目录-'+info.name+'
(
查看源代码
)
模板:目录项
(
查看源代码
)
返回
MediaWiki:Gadget-tikuGuide.js
。