打开/关闭菜单
Toggle preferences menu
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。

MediaWiki:Gadget-unziprecords.js:修订间差异

MediaWiki界面页面
无编辑摘要
无编辑摘要
 
(未显示同一用户的21个中间版本)
第7行: 第7行:
function isRecordsPages(){
function isRecordsPages(){
     var url = window.location.href
     var url = window.location.href
     url = url.split('Records/')
     var isEditPage = url.indexOf('&')
    var regMatch = new RegExp('Records/')
     console.log(url)
     console.log(url)
     if(url.length>1){
     if(regMatch.test(url)&&isEditPage===-1){
         var id = url[1]
         var id = url.split(regMatch)[1]
         return id
         return id
     }else{
     }else{
第16行: 第17行:
     }
     }
}
}
 
function downloadWrongTimu(title,time,result) {
//获取某个页面的历史版本
     var counter = {}
function getPageRevision(url, title, pageCount){
    var url = window.location.href
     var PARAMS = {
    var reg = new RegExp('http[\\s\\S]+\\.cn')
        "action": "query",
    var apiURL = url.match(reg)[0] + '/medf/api.php'
        "format": "json",
    var script = getLatestPageRevision(apiURL,'MediaWiki:Gadget-tikuRenderModule.js')
         "prop": "revisions",
    var css = getLatestPageRevision(apiURL,'MediaWiki:Gadget-tiku.css')
        "titles": title,
    var timu = getParsedWikiText(apiURL,title)
        "utf8": 1,
    var extractedTimu = $('<div></div>')
        "rvprop": "content",
    console.log(result)
        "rvlimit": pageCount,
    if(timu.status){
        "rvdir": "older",
         $(timu.result).children('.data').each(
         "origin":"*"
            function () {
 
                console.log(counter)
                console.log($(this).html())
                console.log($(this).text())
                var content = $.parseJSON($(this).text())
                var type = content.type
                console.log(type)
                console.log(content)
                counter[type] = counter[type] !== undefined ? counter[type] : 0
                console.log(result[type][counter[type]])
                if(result[type][counter[type]].isDone&&(!result[type][counter[type]].isRight)){
                    extractedTimu.append($(this))
                }
                counter[type] += 1
            }
         )
     }
     }
     var isSuccess = {}
     var html = '<!DOCTYPE html>\n' +
    $.ajax(
        '<html lang="en">\n' +
         {
        '<head>\n' +
            url: url,
        '    <meta charset="UTF-8">\n' +
            method: "post",
        '    <title></title>\n' +
            async: false,
        ' <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>' +
            data: PARAMS,
        '<style>'+css+'</style>' +
            timeout: 5000,
        '</head>\n' +
            success: function (results){
        '<body>\n' +
                if('-1' in results.query.pages){
        extractedTimu.html() +
                    console.log('===无此页面===')
         '<script>'+script+'</script>' +
                    isSuccess = {isSuccess:false, result:results}
        '</body>\n' +
                 }else {
        '</html>'
                    isSuccess = {isSuccess:true, result:results}
    console.log(html)
                 }
    downloadFile(title+'.html', html)
}
function downloadAllTimu(title,time) {
    var url = window.location.href
    var reg = new RegExp('http[\\s\\S]+\\.cn')
    var apiURL = url.match(reg)[0] + '/medf/api.php'
    var script = getLatestPageRevision(apiURL,'MediaWiki:Gadget-tikuRenderModule.js')
    var css = getLatestPageRevision(apiURL,'MediaWiki:Gadget-tiku.css')
    var timu = getParsedWikiText(apiURL,getLatestPageRevisionAsTime(apiURL,title,time))
    var extractedTimu = $('<div></div>')
    if(timu.status){
        $(timu.result).children('.data').each(
            function () {
                 // var content = $.parseJSON($(this).text())
                // var type = content.type
                 extractedTimu.append($(this))
             }
             }
         })
         )
     return isSuccess
    }
    var html = '<!DOCTYPE html>\n' +
        '<html lang="en">\n' +
        '<head>\n' +
        '    <meta charset="UTF-8">\n' +
        '    <title></title>\n' +
        ' <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>' +
        '<style>'+css+'</style>' +
        '</head>\n' +
        '<body>\n' +
        extractedTimu.html() +
        '<script>'+script+'</script>' +
        '</body>\n' +
        '</html>'
    console.log(html)
    downloadFile(title+'.html', html)
}
function downloadFile(fname,content) {
     var blob = new Blob([content], {type: 'text/plain' });
    const url3 = window.URL.createObjectURL(blob);
    console.log(url3);
    var timestamp = new Date().getTime()
    var filename = fname
    const link = document.createElement('a');
    link.style.display = 'none';
    link.href = url3;
    link.setAttribute('download', filename);
    document.body.appendChild(link);
    link.click();
}
}
function getFirstPageContent(obj){
function getFirstPageContent(obj){
第82行: 第140行:
     return data
     return data
}
}
function getFormatTime(timestamp,clean=true){
function getFormatTime(timestamp, clean){
    clean = clean !== undefined ? clean: true
     var nowDate
     var nowDate
     if(timestamp===undefined){
     if(timestamp===undefined){
第104行: 第163行:


}
}
function reModelData(id,data) {
function dicToList(obj){
    var container = $('<div id="'+id+'" class="data-container"></div>')
    var result = []
    var resultsContainer = $('<div class="results"></div>')
    for(var i in obj){
    container.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>')
        result.push(obj[i])
    }
    return result
}
 
function progressBar() {
    var o = new Object()
    o.bar = function (title,percentage,data,colorBorder,color,parent) {
 
        var container = $('<div class="progress-bar-container"></div>')
        var titleText = $('<div class="progress-bar-title">'+title+'</div>')
        var progressbar = $('<div class="progress-bar"></div>')
        var progressbarContent = $('<div class="progress-bar-content"></div>')
        var dataText = $('<div class="progress-bar-data">'+data+'</div>')
        progressbar.css({
            'outline': '1px solid '+colorBorder,
        })
        progressbarContent.css({
            'background-color':color,
            'width':percentage+'%'
        })
        progressbar.append(progressbarContent)
        container.append(titleText,progressbar,dataText)
        return container
    }
    return o
}
function readResult(data) {
    var result = {all:0, notdone:0, right:0, wrong:0}
     for(var i in data.results){
     for(var i in data.results){
         // console.log(data.results[i])
         if(typeof(data.results[i])=='object'){
            data.results[i] = dicToList(data.results[i])
        }
         if(data.results[i].length>0) {
         if(data.results[i].length>0) {
            container.append('<h3>' + i + '型题</h3>')
             for (var n = 0; n < data.results[i].length; n++) {
             for (var n = 0; n < data.results[i].length; n++) {
                 console.log(i)
                 result.all += 1
                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){
                 if(data.results[i][n].isDone && data.results[i][n].isRight){
                     btn.addClass('green')
                     result.right += 1
                 }else if(!data.results[i][n].isDone){
                 }else if(!data.results[i][n].isDone){
                     btn.addClass('yellow')
                     result.notdone += 1
                 }else {
                 }else {
                     btn.addClass('red')
                     result.wrong += 1
                 }
                 }
                btn.appendTo(resultsContainer)
                // console.log(n)
                // console.log(data.results[i][n])
             }
             }
            resultsContainer.appendTo(container)
            resultsContainer = $('<div class="results"></div>')
         }
         }
     }
     }
     console.log(container)
     return result
     return container
}
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()
     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.list.title
        if(searchTitle === title){
            latestTime = data.list.time
            var singleData = $('<div class="single-data  data-folded"></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)
            //一些计算的参数
            var calCorrect = (round(result.right/(result.all-result.notdone),4)*100).toFixed(2)
            var calFinish = (round((result.all-result.notdone)/result.all,4)*100).toFixed(2)


            headerText = '<p class="single-header-title-counter">第 ' + counter + ' 次</p>' +
                '<p class="single-header-title-time">'+data.list.time+'</p>'
                // '<p class="single-header-title-finish">完成度:'+(result.all-result.notdone)+'/'+result.all+'['+calFinish+'%]</p>' +
                // '<p class="single-header-title-correct">正确率:'+result.right+'/'+(result.all-result.notdone)+'['+calCorrect+'%]</p>'
            header.bind('click', function () {
                fold($(this).parent(),0)
            })
            header.html(headerText)
            //生成内容
            var functionModule = $('<div class="function-module"></div>')
            var graphs = $('<div class="graph-module"></div>')


            var bar = new progressBar()
            var finish = bar.bar('完成度',calFinish,(result.all-result.notdone)+'/'+result.all,'black','#36c')
            var correct = bar.bar('正确率',calCorrect,result.right+'/'+(result.all-result.notdone),'black','#36c')
            graphs.append(finish,correct)
            var bind = bindBtnData(data,searchTitle)
            functionModule.append(bind.all,bind.wrong,'<hr>',graphs,'<hr>')
            content.append(functionModule)
            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 bindBtnData(data,title) {
    var downloadWrongBtn = $('' +
        '<span class="blue-btn-container">' +
        '<a class="blue-btn-a">' +
        '<span>下载错题</span>' +
        '</a>' +
        '</span>')
    var downloadAllBtn = $('' +
        '<span class="blue-btn-container">' +
        '<a class="blue-btn-a">' +
        '<span>下载本题库</span>' +
        '</a>' +
        '</span>')
    downloadAllBtn.bind('click',function () {
        var wikiTime = data.list.time
        try{
            downloadAllTimu(title,wikiTime)
        }catch (e) {
            alert('下载失败,请重试(本功能仍在测试,如果题目更新导致原题库数量有变化失败属正常现象)' +
                '错误原因:'+e)
        }
       
    })
    console.log(data)
    downloadWrongBtn.bind('click',function () {
        var wikiTime = data.list.time
        console.log(data)
        try{
            downloadWrongTimu(title,wikiTime,data.results)
        }catch (e) {
            alert('下载失败,请重试(本功能仍在测试,如果题目更新导致原题库数量有变化失败属正常现象)' +
                '错误原因:'+e)
        }
       
    })
    return {all:downloadAllBtn,wrong:downloadWrongBtn}
}
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.list.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,openSpeed,closeSpeed) {
    openSpeed = openSpeed !== undefined ? openSpeed : 'fast'
    closeSpeed = closeSpeed !== undefined ? closeSpeed : 'fast'
    var defaultHeight = $('.data-folded').height()
    var paddingHeight = 10
    var targetHeight = defaultHeight + paddingHeight + selector.children('.single-data-container').height()
    var currentHeight = selector.height()
    if(defaultHeight === currentHeight){
        selector.animate({
            height: targetHeight
        }, openSpeed,function () {
            selector.removeClass('data-folded')
            selector.css('height','auto')
        });
    }else {
        selector.animate({
            height: defaultHeight
        }, closeSpeed);
        selector.addClass('data-folded')
    }
}
//维基交互
function getParsedWikiText(url, title){
    var status = false
    var returnResult = ''
    var PARAMS = {
        "action": "parse",
        "format": "json",
        "page": title,
        "utf8": 1,
        'origin':'*',
    }
    $.ajax(
        {
            url: url,
            method: "post",
            async: false,
            data: PARAMS,
            timeout: 5000,
            success: function (results){
                if(results.parse.text['*'] !== undefined){
                    returnResult = results.parse.text['*']
                    status = true
                }
            }
        })
    return {status:status,result:returnResult}
}
//获取某个页面的历史版本
function getPageRevision(url, title, pageCount){
    pageCount = pageCount !== undefined ? pageCount : 1
    var PARAMS = {
        "action": "query",
        "format": "json",
        "prop": "revisions",
        "titles": title,
        "utf8": 1,
        "rvprop": "content",
        "rvlimit": pageCount,
        "rvdir": "older",
        'origin':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 getLatestPageRevision(url, title) {
    var pages = getPageRevision(url,title,1)
    if (pages.isSuccess) {
        pages = pages.result.query.pages
        for (var key in pages) {
            var page = pages[key].revisions[0]['*']
        }
        return page
    }else {
        return false
    }
}
//获取某个页面的历史版本
function getLatestPageRevisionAsTime(url,title,timestamp){
    var PARAMS = {
        "action": "query",
        "format": "json",
        "prop": "revisions",
        "titles": title,
        "utf8": 1,
        "rvprop": "ids|timestamp|content",
        "rvlimit": "1",
        "rvstart": timestamp,
        "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 = false
                }else {
                    var pages = results.query.pages
                    console.log(pages)
                    for (var key in pages) {
                        var page = pages[key].revisions[0]['*']
                    }
                    isSuccess=page
                }
            }
        })
    return isSuccess
}
}
//主函数
//主函数
function unzipRecords(){
function unzipRecords(){
     var id = isRecordsPages()
     var id = isRecordsPages()
    console.log(id)
     if(!id){
     if(!id){
         return '非题库云储存页面!'
         return '非题库云储存页面!'
第151行: 第486行:
     var parsed=parseRecordsJSON('https://www.medforest.cn/medf/api.php',unzipped)
     var parsed=parseRecordsJSON('https://www.medforest.cn/medf/api.php',unzipped)
     var id = 0
     var id = 0
     var analyzed = $('<div class="analyzed"></div>')
     var mainContainer = $('<div class="data-list-container"></div>')
     for(var i in jsonData.archive){
     mainFrame(jsonData.archive).appendTo(mainContainer)
        analyzed.prepend(reModelData(id,jsonData.archive[i]))
     $('#mw-content-text').html('<div><h2>说明:</h2><p class="inline">数据按最后一次做题的时间倒序排列,第一列数字是对应存档的ID,显示的时间是最近一次做本题库的时间</p><hr></div>')
        id += 1
 
    }
     $('#mw-content-text').append(mainContainer)
     $('#mw-content-text').html('<div><h2>说明:</h2><p class="inline">数据按倒序排列,绿色为正确题目,红色错误,黄色未作答</p><hr></div>')
     $('#mw-content-text').append(analyzed)
}
}
unzipRecords()

2023年3月12日 (日) 13:45的最新版本

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('&')
    var regMatch = new RegExp('Records/')
    console.log(url)
    if(regMatch.test(url)&&isEditPage===-1){
        var id = url.split(regMatch)[1]
        return id
    }else{
        return false
    }
}
function downloadWrongTimu(title,time,result) {
    var counter = {}
    var url = window.location.href
    var reg = new RegExp('http[\\s\\S]+\\.cn')
    var apiURL = url.match(reg)[0] + '/medf/api.php'
    var script = getLatestPageRevision(apiURL,'MediaWiki:Gadget-tikuRenderModule.js')
    var css = getLatestPageRevision(apiURL,'MediaWiki:Gadget-tiku.css')
    var timu = getParsedWikiText(apiURL,title)
    var extractedTimu = $('<div></div>')
    console.log(result)
    if(timu.status){
        $(timu.result).children('.data').each(
            function () {
                console.log(counter)
                console.log($(this).html())
                console.log($(this).text())
                var content = $.parseJSON($(this).text())
                var type = content.type
                console.log(type)
                console.log(content)
                counter[type] = counter[type] !== undefined ? counter[type] : 0
                console.log(result[type][counter[type]])
                if(result[type][counter[type]].isDone&&(!result[type][counter[type]].isRight)){
                    extractedTimu.append($(this))
                }
                counter[type] += 1
            }
        )
    }
    var html = '<!DOCTYPE html>\n' +
        '<html lang="en">\n' +
        '<head>\n' +
        '    <meta charset="UTF-8">\n' +
        '    <title></title>\n' +
        ' <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>' +
        '<style>'+css+'</style>' +
        '</head>\n' +
        '<body>\n' +
        extractedTimu.html() +
        '<script>'+script+'</script>' +
        '</body>\n' +
        '</html>'
    console.log(html)
    downloadFile(title+'.html', html)
}
function downloadAllTimu(title,time) {
    var url = window.location.href
    var reg = new RegExp('http[\\s\\S]+\\.cn')
    var apiURL = url.match(reg)[0] + '/medf/api.php'
    var script = getLatestPageRevision(apiURL,'MediaWiki:Gadget-tikuRenderModule.js')
    var css = getLatestPageRevision(apiURL,'MediaWiki:Gadget-tiku.css')
    var timu = getParsedWikiText(apiURL,getLatestPageRevisionAsTime(apiURL,title,time))
    var extractedTimu = $('<div></div>')
    if(timu.status){
        $(timu.result).children('.data').each(
            function () {
                // var content = $.parseJSON($(this).text())
                // var type = content.type
                extractedTimu.append($(this))
            }
        )
    }
    var html = '<!DOCTYPE html>\n' +
        '<html lang="en">\n' +
        '<head>\n' +
        '    <meta charset="UTF-8">\n' +
        '    <title></title>\n' +
        ' <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>' +
        '<style>'+css+'</style>' +
        '</head>\n' +
        '<body>\n' +
        extractedTimu.html() +
        '<script>'+script+'</script>' +
        '</body>\n' +
        '</html>'
    console.log(html)
    downloadFile(title+'.html', html)
}
function downloadFile(fname,content) {
    var blob = new Blob([content], {type: 'text/plain' });
    const url3 = window.URL.createObjectURL(blob);
    console.log(url3);
    var timestamp = new Date().getTime()
    var filename = fname
    const link = document.createElement('a');
    link.style.display = 'none';
    link.href = url3;
    link.setAttribute('download', filename);
    document.body.appendChild(link);
    link.click();
}
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 progressBar() {
    var o = new Object()
    o.bar = function (title,percentage,data,colorBorder,color,parent) {

        var container = $('<div class="progress-bar-container"></div>')
        var titleText = $('<div class="progress-bar-title">'+title+'</div>')
        var progressbar = $('<div class="progress-bar"></div>')
        var progressbarContent = $('<div class="progress-bar-content"></div>')
        var dataText = $('<div class="progress-bar-data">'+data+'</div>')
        progressbar.css({
            'outline': '1px solid '+colorBorder,
        })
        progressbarContent.css({
            'background-color':color,
            'width':percentage+'%'
        })
        progressbar.append(progressbarContent)
        container.append(titleText,progressbar,dataText)
        return container
    }
    return o
}
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()
    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.list.title
        if(searchTitle === title){
            latestTime = data.list.time
            var singleData = $('<div class="single-data  data-folded"></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)
            //一些计算的参数
            var calCorrect = (round(result.right/(result.all-result.notdone),4)*100).toFixed(2)
            var calFinish = (round((result.all-result.notdone)/result.all,4)*100).toFixed(2)

            headerText = '<p class="single-header-title-counter">第 ' + counter + ' 次</p>' +
                '<p class="single-header-title-time">'+data.list.time+'</p>'
                // '<p class="single-header-title-finish">完成度:'+(result.all-result.notdone)+'/'+result.all+'['+calFinish+'%]</p>' +
                // '<p class="single-header-title-correct">正确率:'+result.right+'/'+(result.all-result.notdone)+'['+calCorrect+'%]</p>'
            header.bind('click', function () {
                fold($(this).parent(),0)
            })
            header.html(headerText)
            //生成内容
            var functionModule = $('<div class="function-module"></div>')
            var graphs = $('<div class="graph-module"></div>')

            var bar = new progressBar()
            var finish = bar.bar('完成度',calFinish,(result.all-result.notdone)+'/'+result.all,'black','#36c')
            var correct = bar.bar('正确率',calCorrect,result.right+'/'+(result.all-result.notdone),'black','#36c')
            graphs.append(finish,correct)
            var bind = bindBtnData(data,searchTitle)
            functionModule.append(bind.all,bind.wrong,'<hr>',graphs,'<hr>')
            content.append(functionModule)
            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 bindBtnData(data,title) {
    var downloadWrongBtn = $('' +
        '<span class="blue-btn-container">' +
        '<a class="blue-btn-a">' +
        '<span>下载错题</span>' +
        '</a>' +
        '</span>')
    var downloadAllBtn = $('' +
        '<span class="blue-btn-container">' +
        '<a class="blue-btn-a">' +
        '<span>下载本题库</span>' +
        '</a>' +
        '</span>')
    downloadAllBtn.bind('click',function () {
        var wikiTime = data.list.time
        try{
            downloadAllTimu(title,wikiTime)
        }catch (e) {
            alert('下载失败,请重试(本功能仍在测试,如果题目更新导致原题库数量有变化失败属正常现象)' +
                '错误原因:'+e)
        }
        
    })
    console.log(data)
    downloadWrongBtn.bind('click',function () {
        var wikiTime = data.list.time
        console.log(data)
        try{
            downloadWrongTimu(title,wikiTime,data.results)
        }catch (e) {
            alert('下载失败,请重试(本功能仍在测试,如果题目更新导致原题库数量有变化失败属正常现象)' +
                '错误原因:'+e)
        }
        
    })
    return {all:downloadAllBtn,wrong:downloadWrongBtn}
}
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.list.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,openSpeed,closeSpeed) {
    openSpeed = openSpeed !== undefined ? openSpeed : 'fast'
    closeSpeed = closeSpeed !== undefined ? closeSpeed : 'fast'
    var defaultHeight = $('.data-folded').height()
    var paddingHeight = 10
    var targetHeight = defaultHeight + paddingHeight + selector.children('.single-data-container').height()
    var currentHeight = selector.height()
    if(defaultHeight === currentHeight){
        selector.animate({
            height: targetHeight
        }, openSpeed,function () {
            selector.removeClass('data-folded')
            selector.css('height','auto')
        });

    }else {
        selector.animate({
            height: defaultHeight
        }, closeSpeed);
        selector.addClass('data-folded')
    }
}

//维基交互
function getParsedWikiText(url, title){
    var status = false
    var returnResult = ''
    var PARAMS = {
        "action": "parse",
        "format": "json",
        "page": title,
        "utf8": 1,
        'origin':'*',
    }
    $.ajax(
        {
            url: url,
            method: "post",
            async: false,
            data: PARAMS,
            timeout: 5000,
            success: function (results){
                if(results.parse.text['*'] !== undefined){
                    returnResult = results.parse.text['*']
                    status = true
                }
            }
        })
    return {status:status,result:returnResult}
}
//获取某个页面的历史版本
function getPageRevision(url, title, pageCount){
    pageCount = pageCount !== undefined ? pageCount : 1
    var PARAMS = {
        "action": "query",
        "format": "json",
        "prop": "revisions",
        "titles": title,
        "utf8": 1,
        "rvprop": "content",
        "rvlimit": pageCount,
        "rvdir": "older",
        'origin':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 getLatestPageRevision(url, title) {
    var pages = getPageRevision(url,title,1)
    if (pages.isSuccess) {
        pages = pages.result.query.pages
        for (var key in pages) {
            var page = pages[key].revisions[0]['*']
        }
        return page
    }else {
        return false
    }
}
//获取某个页面的历史版本
function getLatestPageRevisionAsTime(url,title,timestamp){
    var PARAMS = {
        "action": "query",
        "format": "json",
        "prop": "revisions",
        "titles": title,
        "utf8": 1,
        "rvprop": "ids|timestamp|content",
        "rvlimit": "1",
        "rvstart": timestamp,
        "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 = false
                }else {
                    var pages = results.query.pages
                    console.log(pages)
                    for (var key in pages) {
                        var page = pages[key].revisions[0]['*']
                    }
                    isSuccess=page
                }

            }
        })

    return isSuccess
}
//主函数
function unzipRecords(){
    var id = isRecordsPages()
    console.log(id)
    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()