注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的变更的影响。
- Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5或Ctrl-R(Mac为⌘-R)
- Google Chrome:按Ctrl-Shift-R(Mac为⌘-Shift-R)
- Internet Explorer或Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5
- Opera:按 Ctrl-F5。
function unzip(b64Data) {
var strData = atob(b64Data);
strData = pako.ungzip(strData,{to: 'string'});
return decodeURIComponent(strData);
}
//检查是否为刷题云储存页面
function isRecordsPages(){
var url = window.location.href
var isEditPage = url.indexOf('&action=edit')
url = url.split('Records/')
console.log(url)
if(url.length>1&&isEditPage===-1){
var id = url[1]
return id
}else{
return false
}
}
//获取某个页面的历史版本
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 getFirstPageContent(obj){
obj = obj.result.query.pages
for(var i in obj){
obj = obj[i]
}
obj = obj.revisions[0]['*']
return obj
}
//解析json
function parseRecordsJSON(url,content){
var data
var PARAMS = {
"action": "parse",
"format": "json",
"text":content,
"contentmodel": "json",
"utf8": 1,
"origin":"*"
}
$.ajax({
async: true,
type: "post",
url: url,
data: PARAMS,
datatype: 'json',
success: function (datas) {
data = datas['parse']['text']['*']
// $('#mw-content-text').html(data)
}
});
return data
}
function getFormatTime(timestamp, clean){
clean = clean !== undefined ? clean: true
var nowDate
if(timestamp===undefined){
nowDate= new Date();
}else {
nowDate = new Date(timestamp);
}
var year = nowDate.getFullYear();
var month = nowDate.getMonth() + 1 < 10 ? "0" + (nowDate.getMonth() + 1) : nowDate.getMonth() + 1;
var date = nowDate.getDate() < 10 ? "0" + nowDate.getDate() : nowDate.getDate();
var hour = nowDate.getHours()< 10 ? "0" + nowDate.getHours() : nowDate.getHours();
var minute = nowDate.getMinutes()< 10 ? "0" + nowDate.getMinutes() : nowDate.getMinutes();
var second = nowDate.getSeconds()< 10 ? "0" + nowDate.getSeconds() : nowDate.getSeconds();
var time = ''
if(clean){
time = year + "-" + month + "-" + date+" "+hour+":"+minute+":"+second;
}else {
time = year + "-" + month + "-" + date+"T"+hour+":"+minute+":"+second+'Z'
}
return time
}
function dicToList(obj){
var result = []
for(var i in obj){
result.push(obj[i])
}
return result
}
// function readResult(data) {
// for(var i in data.results){
// if(typeof(data.results[i])=='object'){
// data.results[i] = dicToList(data.results[i])
// }
// if(data.results[i].length>0) {
// container.append('<h3>' + i + '型题</h3>')
// for (var n = 0; n < data.results[i].length; n++) {
// var btn = $('<button id="' + id + '-' + i + '-' + n + '" class="btn btn-circle">' + (n+1) + '</button>')
// if(data.results[i][n].isDone && data.results[i][n].isRight){
// btn.addClass('green')
// }else if(!data.results[i][n].isDone){
// btn.addClass('yellow')
// }else {
// btn.addClass('red')
// }
// btn.appendTo(resultsContainer)
// // console.log(n)
// // console.log(data.results[i][n])
// }
// resultsContainer.appendTo(container)
// resultsContainer = $('<div class="results"></div>')
// }
// }
// header.append('<div><h2>'+data.info.title+'</h2><div><p class="inline">id:'+data.info.id+'</p>|<p class="inline">做题时间:'+getFormatTime(data.info.time)+'</p></div></div>')
// console.log(container)
// container.appendTo(singleContainer)
// }
function readResult(data) {
var result = {all:0, notdone:0, right:0, wrong:0}
for(var i in data.results){
if(typeof(data.results[i])=='object'){
data.results[i] = dicToList(data.results[i])
}
if(data.results[i].length>0) {
for (var n = 0; n < data.results[i].length; n++) {
result.all += 1
if(data.results[i][n].isDone && data.results[i][n].isRight){
result.right += 1
}else if(!data.results[i][n].isDone){
result.notdone += 1
}else {
result.wrong += 1
}
}
}
}
return result
}
function round(number,digit) {
var result
var dig = 1
for(var i=0;i<digit;i++){
dig = dig * 10
}
result = Math.round(number * dig) / dig
result = result.toString()
console.log(result*100)
return result
}
function getSameData(fullData, searchTitle, order) {
var container = $('<div class="single-data-container"></div>')
var counter = 1
var latestTime = ''
for(var i in fullData){
var data = fullData[i]
var title = data.info.title
if(searchTitle === title){
latestTime = data.list.time
var singleData = $('<div class="single-data"></div>')
var header = $('<div class="single-header"></div>')
var content = $('<div class="single-content"></div>')
var ending = $('<div class="single-ending"></div>')
var headerText = ''
var result = readResult(data)
headerText = '在<b>'+data.list.time+'</b>的第<b>' + counter + '</b>次做题' +
'(完成度:'+(result.all-result.notdone)+'/'+result.all+'['+(round((result.all-result.notdone)/result.all,4)*100).toFixed(2)+'%],' +
'正确率:'+result.right+'/'+(result.all-result.notdone)+'['+(round(result.right/(result.all-result.notdone),4)*100).toFixed(2)+'%])'
header.html(headerText)
singleData.append(header,content,ending)
if(order){
container.append(singleData)
}else {
container.prepend(singleData)
}
counter += 1
}
}
return {container:container,counter:counter-1,latestTime:latestTime}
}
function mainFrame(fullData) {
var mainFrame = $('<div class="main-data-container"></div>')
var titlesSet = []
for(var i in fullData){
var data = fullData[i]
var title = data.info.title
if(titlesSet.indexOf(title)!==-1){continue}
var singleDataSet = $('<div id="dataset-'+i+'" class="single-data-set data-folded"></div>')
var dataContainers = getSameData(fullData,title,true)
var header = $('<div class="list-title">' +
'<p class="title-id">'+i+'</p>' +
'<span class="title-content">' +
'<a href="https://www.medforest.cn/dic/'+title+'">'+title+'</a>' +
'<p class="title-content-time">最近一次答题:'+dataContainers.latestTime+'</p>' +
'<p class="title-content-counter">共 '+dataContainers.counter+' 条数据</p>' +
'</span></div>')
header.bind('click', function () {
fold($(this).parent())
})
singleDataSet.append(header,dataContainers.container)
singleDataSet.prependTo(mainFrame)
}
return mainFrame
}
function fold(selector) {
var defaultHeight = 40
var paddingHeight = 10
var targetHeight = defaultHeight + paddingHeight + selector.children('.single-data-container').height()
var currentHeight = selector.height()
if(defaultHeight === currentHeight){
selector.animate({
height: targetHeight
}, "normal");
selector.removeClass('data-folded')
}else {
selector.animate({
height: defaultHeight
}, "normal");
selector.addClass('data-folded')
}
}
//主函数
function unzipRecords(){
var id = isRecordsPages()
if(!id){
return '非题库云储存页面!'
}
// var zippedContent = getFirstPageContent(getPageRevision('https://www.medforest.cn/medf/api.php','题库:Records/66',1))
// console.log(zippedContent)
var zippedContent= $('#mw-content-text').text().replace('[标记此页面为已巡查]','')
$('#mw-content-text').html('<h4 style="color:red;">正在分析做题数据</h4>')
console.log(zippedContent)
var unzipped = unzip(zippedContent)
var jsonData = JSON.parse(unzipped)
console.log(jsonData.archive)
var parsed=parseRecordsJSON('https://www.medforest.cn/medf/api.php',unzipped)
var id = 0
var mainContainer = $('<div class="data-list-container"></div>')
mainFrame(jsonData.archive).appendTo(mainContainer)
$('#mw-content-text').html('<div><h2>说明:</h2><p class="inline">数据按最后一次做题的时间倒序排列,第一列数字是对应存档的ID,显示的时间是最近一次做本题库的时间</p><hr></div>')
$('#mw-content-text').append(mainContainer)
}
unzipRecords()