更多操作
无编辑摘要 |
无编辑摘要 |
||
第331行: | 第331行: | ||
console.log(settings) | console.log(settings) | ||
var realSource = getRealSource(json.source) | var realSource = getRealSource(json.source) | ||
var sourcePrefix = realSource.prefix===''?'':realSource.prefix | var sourcePrefix = realSource.prefix===''?'':realSource.prefix | ||
//subjectForm | //subjectForm | ||
var range = rangeInline(this.source, this.sourceRange) | var range = rangeInline(this.source, this.sourceRange) | ||
第344行: | 第344行: | ||
'isA3':true, | 'isA3':true, | ||
"type":"A", | "type":"A", | ||
"source":sourcePrefix+(i+1), | "source":sourcePrefix+realSource.source+'-'+(i+1), | ||
"title":this.title[i], | "title":this.title[i], | ||
"answer":this.answer[i], | "answer":this.answer[i], | ||
第371行: | 第371行: | ||
o.B = function () { | o.B = function () { | ||
var realSource = getRealSource(json.source) | var realSource = getRealSource(json.source) | ||
var sourcePrefix = realSource.prefix===''?'':realSource.prefix | var sourcePrefix = realSource.prefix===''?'':realSource.prefix | ||
//subjectForm | //subjectForm | ||
var range = rangeInline(this.source, this.sourceRange) | var range = rangeInline(this.source, this.sourceRange) | ||
第393行: | 第393行: | ||
var explainInlineObj = this.explain[i] === undefined || this.explain[i] === '' ? '暂无解析' : explainInline(this.explain[i]) | var explainInlineObj = this.explain[i] === undefined || this.explain[i] === '' ? '暂无解析' : explainInline(this.explain[i]) | ||
resultGroupList.push( | resultGroupList.push( | ||
'<b>'+sourcePrefix+i+'</b>', | '<b>'+sourcePrefix+realSource.source+'-'+i+'</b>', | ||
$('<div style="margin-left:10px"></div>').append(answerInlineObj), | $('<div style="margin-left:10px"></div>').append(answerInlineObj), | ||
$('<div style="margin-left:10px"></div>').append(explainInlineObj) | $('<div style="margin-left:10px"></div>').append(explainInlineObj) | ||
第407行: | 第407行: | ||
o.C = function () { | o.C = function () { | ||
var realSource = getRealSource(json.source) | var realSource = getRealSource(json.source) | ||
var sourcePrefix = realSource.prefix===''?'':realSource.prefix | var sourcePrefix = realSource.prefix===''?'':realSource.prefix | ||
//subjectForm | //subjectForm | ||
var range = rangeInline(this.source, this.sourceRange) | var range = rangeInline(this.source, this.sourceRange) | ||
第429行: | 第429行: | ||
var explainInlineObj = this.explain[i] === undefined || this.explain[i] === '' ? '暂无解析' : explainInline(this.explain[i]) | var explainInlineObj = this.explain[i] === undefined || this.explain[i] === '' ? '暂无解析' : explainInline(this.explain[i]) | ||
resultGroupList.push( | resultGroupList.push( | ||
'<b>'+sourcePrefix+i+'</b>', | '<b>'+sourcePrefix+realSource.source+'-'+i+'</b>', | ||
$('<div style="margin-left:10px"></div>').append(answerInlineObj), | $('<div style="margin-left:10px"></div>').append(answerInlineObj), | ||
$('<div style="margin-left:10px"></div>').append(explainInlineObj) | $('<div style="margin-left:10px"></div>').append(explainInlineObj) |
2023年6月22日 (四) 16:55的版本
/*<%-- [PAGE_INFO]
comment = #Please do not remove this struct. It's record contains some important information of edit. This struct will be removed automatically after you push edits.#
pageTitle = #MediaWiki:Gadget-tikuRenderModule.js#
pageID = #3426#
revisionID = #69839#
contentModel = #javascript#
contentFormat = #text/javascript#
[END_PAGE_INFO] --%>*/
//主函数
function renderTimuFromSessionStorage(){
var timuList = gDomTimuList()
console.log(timuList)
var order = timuList.order
var timu = timuList.timu
var errors = timuList.errors
var repeatSource = timuList.repeatSource
for(var i=0;i<order.length;i++){
if(order[i].isError){
var errorWidget = new OO.ui.MessageWidget( {
type: 'error',
showClose:true,
label: 'id='+i+'的题目加载错误,错误信息:'+errors[i].info.name+':'+errors[i].info.message+'\n'+'对应文本:'+errors[i].dataText
} )
render(i,'A',$('<di></div>').append(errorWidget.$element,'<hr>'))
}else{
var dataJSON = timu[i].dataJSON
var o = newTimu(i,dataJSON,{})[dataJSON.type]()
render(i,dataJSON.type,o)
var needCheck = $('#noRepeatCheck').length<=0
if(repeatSource[i]!==undefined&&needCheck){
var warningWidget = new OO.ui.MessageWidget( {
type: 'warning',
label: '本题与本页面id为'+repeatSource[i]+'的题目source参数重复,本参数重复可能引起错误,请检查并修改!'
} )
render(i,'A',warningWidget.$element)
}
}
}
}
//题目渲染函数
//生成info
function infoInline(info){
return $('<div class="info">'+info+'</div>')
}
//单行题干的处理titleInline(type, source, title)
//生成titleGroup
function titlesGroup(titlesList){
var group = $('<div class="titlesGroup"></div>')
for(var i=0;i<titlesList.length;i++){
group.append(titlesList[i])
}
return group
}
//生成titleInline
function titleInline(id, type,originalSource, sourceSuffix,title, classes){
classes = classes===undefined?'':classes
return $('<div id="title-'+id+'" class="'+classes+'"></div>').append(
titleInlineType(type),
titleInlineSource(originalSource,sourceSuffix),
titleInlineTitle(title)
)
}
function titleInlineType(type){
var typeChinese = {
A:'A',
A2:'A2',
A3:'A3',
B:'B',
C:'C',
X:'X',
TK:'填空',
PD:'判断',
MJ:'名解'
}
return $('<p class="type">'+typeChinese[type]+'</p>')
}
//从有中文的source中提取最后一个连续数字作为真实的source
function getRealSource(source){
var getContinueNumber = source.match(/[0-9]+/g)
var splitContinueNumber = source.split(/[0-9]+/g)
var realSource = getContinueNumber[getContinueNumber.length-1]*1
var prefix = ''
for(var i=0;i<getContinueNumber.length;i++){
prefix += splitContinueNumber[i]
}
return {prefix:prefix,source:realSource}
}
//返回source的obj
function titleInlineSource(originalSource, suffix){
var realSource = getRealSource(originalSource)
var prefix = realSource.prefix
var source = realSource.source
var suffix = suffix === undefined ? '':'-'+suffix
return $('<p class="source">'+prefix+source+suffix+'</p>')
}
//返回sourceRange的obj
function rangeInline(originalSource, sourceRange, type){
var source = getRealSource(originalSource).source
var end = source*1+sourceRange*1 -1
var rangeText = '第 '+source +' 到 ' + end + ' 题'
var suffix = type==='B'?'共用备选答案':'共用题干'
return $('<div class="sourceRange">'+rangeText + suffix +'</div>')
}
//返回title 的 obj
function titleInlineTitle(title){
return $('<p class="title">'+title+'</p>')
}
//生成B、C型题的选择框
function dropDownInputWidget(id, availabelOptions){
var options = []
for(var i=0;i<availabelOptions.length;i++){
options.push({
data:availabelOptions[i],
label:availabelOptions[i]
})
}
return new OO.ui.DropdownInputWidget( {
name:'dropdown-input-'+id,
options: options,
classes:['dorpdown']
} ).$element
}
//生成options(options 是 Map对象)
function optionsGroup(type,id,options){
var flexClass = (type==='B')||(type==='C') ? 'optionsGroup-flex':''
var inputType = type==='X' ? 'checkbox':'radio'
var optionGroupObj = $('<div class="optionsGroup '+flexClass+'"></div>')
options.forEach(function(value, key, map){
optionGroupObj.append(optionInline(id, key, value, !((type==='B')||(type==='C')), inputType))
})
return optionGroupObj
}
//生成optionInline
function optionInline(id, option, content,input,inputType){
console.log(input)
var input = input ? $('<input id="option-input-'+id+'-'+option+'" name="optionsGroup-' + id + '" type="'+inputType+'" value="' + option + '" />'):''
var optionLabel = $('<label for="option-input-'+id+'-'+option+'">'+option+'. </label>')
var contentLabel = $('<label for="option-input-'+id+'-'+option+'">'+content+'</label>')
return $('<div id="option-'+id+'-'+option+'" class="optionInline"></div>').append(input,optionLabel,contentLabel)
}
//清理json中的choice(清除空项并排序),接收Obj,
function cleanOptions(options){
return sortDicByKey(filterEmptyEntries(options)) //返回一个 Map 对象
}
//生成buttonGroup
function buttonGroup(showSubmitBtn, showEditBtn, id, type, correctAnswer, hoverTarget){
console.log(showEditBtn)
var buttonGroupObj = $('<div class="buttonGroup"></div>')
if(showSubmitBtn){buttonGroupObj.append(
new OO.ui.ButtonWidget( {
id:'showThisAnswer-'+id,
label: '提交',
flags: [
'progressive'
]
} ).$element.bind("click",function (){
showThisAnswer(id,type,correctAnswer)
})
)}
if(showEditBtn){
buttonGroupObj.append(
// $('<a class="editThisBtn" style="" href="javascript:void(0)"><span class="" id="editThis-' + id + '">题目有误?点击编辑本题</span></a>'),
new OO.ui.ButtonWidget( {
id:'editThis-' + id,
classes:['editThisBtn'],
framed: false,
flags: [
'progressive'
],
icon: 'edit',
label: '题目有误?点击编辑本题'
} ).$element.bind("click",function (){
editThis(id)
})
)
hoverTarget.hover(function () {
buttonGroupObj.children('.editThisBtn').fadeIn(10)
},function (){
buttonGroupObj.children('.editThisBtn').fadeOut(70)
})
}
return buttonGroupObj
}
//生成subject 的form, 顺序items顺序添加 (title, options, buttonGroup)
function subjectFrom(id, items, title, options, buttonGroup){
var form = $('<form id="timuFrom-'+id+'" class="subjectForm"></form>')
for(var i=0;i<items.length;i++){
form.append(items[i])
}
return form
}
//resultGroup: answer和explain的显示框
function resultGroup(id, items, answerInline,explainInline){
var group = $('<div id="resultGroup-'+id+'" class="resultGroup"></div>')
for(var i=0;i<items.length;i++){
group.append(items[i])
}
return group
}
//生成answerInline
function answerInline(answer){
return $('<div class="answerInline"><label>正确答案:</label>'+answer+'</div>')
}
//生成explainInline
function explainInline(explain){
return $('<div class="explainInline"><label>解析:</label>'+explain+'</div>')
}
//生成填空输入框
function fillBlank(id, title, pos, classes){
console.log(pos)
var posReg = new RegExp(pos,'g')
var blankLen = title.match(posReg).length
var split = title.split(posReg)
console.log(blankLen)
var newTitle = ''
for(var i=0;i<(blankLen+split.length);i++){
if(i%2===0){
newTitle += '<p class="title">'+split[Math.floor(i/2)]+'</div>'
}else{
newTitle += new OO.ui.TextInputWidget( {
name:'textInput-'+id+'-'+Math.floor(i/2),
id:'textInput-'+id+'-'+Math.floor(i/2),
classes:classes
} ).$element.prop('outerHTML')
}
}
return newTitle
}
function newTimu(id,json, settings){
settings = json.settings===undefined||json.isA3 ? settings:json.settings//检测json是否带有settings或者是否为A3子题目
parent = settings.parent === undefined ? '' : settings.parent
showHr = settings.showHr == undefined ? true : settings.showHr
showSubmitBtn = settings.showSubmitBtn === undefined ? true : settings.showSubmitBtn
showEditBtn = settings.showEditBtn === undefined ? true : settings.showEditBtn
showBtnGroup = settings.showBtnGroup === undefined? true:settings.showBtnGroup
var o = new Object()
o.type = json.type
o.pos = json.pos
o.inputBox = json.inputBox
o.source = json.source
o.sourceRange = json.sourceRange
o.info = json.info
o.title = json.title
o.options = json.choices
console.log(o.options)
//将choice 统一为Array的转换为obj
if(typeOfObj(o.options)==='[object Array]'&&o.options.length===1&&o.type!=='A3'){
o.options = o.options[0]
}
o.options = o.options!==undefined? cleanOptions(o.options):''
console.log(o.options)
o.answer = json.answer
o.explain = json.explain
o.temp = {
main:$('<div name="timu-'+(id+1)+'" id="'+id+'" class="type'+o.type+' timuContainer"><p class="timuID">'+id+'</p></div>'),
subject:$('<form class="subject"></form>'),
range:$('<div class="sourceRange"></div>'),
info:$('<div class="info"></div>'),
titleCon:$('<div class="titleContainer"></div>'),
type:$('<p class="source"></p>'),
source:$('<p class="source"></p>'),
title:$('<p class="title"></p>'),
options:$('<div class="options"></div>'),
btn:$('<button type="button" class="button-small button-pill button button-caution" id="showSingle-' + id + '" class="showSingleBtn">提交</button>'),
editBtn:$('<a class="editThisButton" style="display:none;font-size: 14px;margin-left: 5px" href="javascript:void(0)"><span class="" id="editThis-' + id + '">题目有误?点击编辑本题</span></a>'),
ansCon:$('<div id="ansContainer" class="ansContainer noDisplay"></div>'),
correct:$('<p style="display:inline;"><b>正确答案:</b></p><p class="correctAnswer"></p><br>'),
explain:$('<p style="display:inline;"><b>解析: </b></p><p class="explain"></p><br>'),
select:$('<select class="button-small button-rounded button"></select>'),
subTitle:$('<div id=""></div>')
}
o.parent = parent
// if(this.type==='A3'){
// $(this).children('.subject').children('.editThisButton').fadeIn(1)
// }
o.temp.main.hover(function () {
$('editThis-' + id).fadeIn(10)
},function (){
$('editThis-' + id).fadeOut(70)
})
o.A = function () {
//subjectForm
var optionsGroupObj = optionsGroup(this.type, id, this.options)
var titleInlineObj = titleInline(id, this.type,this.source,undefined,this.title,'titleInline')
var buttonGroupObj = showBtnGroup? buttonGroup(showSubmitBtn, showEditBtn, id, this.type, this.answer, this.temp.main):''
var subjectForm = subjectFrom(id, [titleInlineObj, optionsGroupObj, buttonGroupObj])
//resultGroupObj
var answerInlineObj = answerInline(this.answer)
var explainInlineObj = this.explain === undefined || this.explain === '' ? '暂无解析' : explainInline(this.explain)
var resultGroupObj = resultGroup(id, [answerInlineObj, explainInlineObj])
this.temp.main.append(subjectForm,resultGroupObj)
if(showHr){this.temp.main.append('<hr>')}
return this.temp.main
}
o.A2 = function () {
//subjectForm
var optionsGroupObj = optionsGroup(this.type, id, this.options)
var titleInlineObj = titleInline(id, this.type,this.source,undefined,this.title,'titleInline')
var buttonGroupObj = buttonGroup(showSubmitBtn, showEditBtn, id, this.type, this.answer, this.temp.main)
var subjectForm = subjectFrom(id, [titleInlineObj, optionsGroupObj, buttonGroupObj])
//resultGroupObj
var answerInlineObj = answerInline(this.answer)
var explainInlineObj = this.explain === undefined || this.explain === '' ? '暂无解析' : explainInline(this.explain)
var resultGroupObj = resultGroup(id, [answerInlineObj, explainInlineObj])
this.temp.main.append(subjectForm,resultGroupObj)
if(showHr){this.temp.main.append('<hr>')}
return this.temp.main
}
o.A3 = function () {
console.log(settings)
var realSource = getRealSource(json.source)
var sourcePrefix = realSource.prefix===''?'':realSource.prefix
//subjectForm
var range = rangeInline(this.source, this.sourceRange)
var info = infoInline(this.info)
var subTitlesList = []
for(var i=0;i<this.title.length;i++){
if(this.explain[i]==undefined){
this.explain[i] = '暂无解析'
}
var data = {
'isA3':true,
"type":"A",
"source":sourcePrefix+realSource.source+'-'+(i+1),
"title":this.title[i],
"answer":this.answer[i],
"explain":this.explain[i],
"choices":this.options.get(i+''),
}
console.log(data)
console.log(this.options)
subTitlesList.push(newTimu(id+'-'+i,data,{
showHr:false,
showEditBtn:false,
showSubmitBtn:false,
showBtnGroup:false
}).A())
}
console.log(this.answer)
var buttonGroupObj = buttonGroup(true, false, id, this.type, this.answer, this.temp.main)
console.log(buttonGroupObj)
var subjectFormObj = subjectFrom(id, [subTitlesList,buttonGroupObj])
this.temp.main.append(range,info, subjectFormObj)
this.temp.main.append('<hr>')
return this.temp.main
}
o.B = function () {
var realSource = getRealSource(json.source)
var sourcePrefix = realSource.prefix===''?'':realSource.prefix
//subjectForm
var range = rangeInline(this.source, this.sourceRange)
var optionsGroupObj = optionsGroup(this.type, id, this.options)
var titleInlineList = []
for(var i=0;i<this.title.length;i++){
var dropdown = dropDownInputWidget(id+'-'+i, mapKeysList(this.options))
var titleInlineObj = titleInline(id+'-'+i, this.type, json.source, i, this.title[i],'titleInline')
titleInlineObj.append(dropdown)
titleInlineList.push(titleInlineObj)
}
var titlesGroupObj = titlesGroup(titleInlineList)
var buttonGroupObj = buttonGroup(showSubmitBtn, showEditBtn, id, this.type, this.answer, this.temp.main)
var subjectForm = subjectFrom(id, [optionsGroupObj, titlesGroupObj, buttonGroupObj])
//resultGroupObj
var resultGroupList = []
for(var i=0;i<this.answer.length;i++){
var answerInlineObj = answerInline(this.answer[i])
var explainInlineObj = this.explain[i] === undefined || this.explain[i] === '' ? '暂无解析' : explainInline(this.explain[i])
resultGroupList.push(
'<b>'+sourcePrefix+realSource.source+'-'+i+'</b>',
$('<div style="margin-left:10px"></div>').append(answerInlineObj),
$('<div style="margin-left:10px"></div>').append(explainInlineObj)
)
}
var resultGroupObj = resultGroup(id, resultGroupList)
this.temp.main.append(range ,subjectForm,resultGroupObj)
if(showHr){this.temp.main.append('<hr>')}
return this.temp.main
}
o.C = function () {
var realSource = getRealSource(json.source)
var sourcePrefix = realSource.prefix===''?'':realSource.prefix
//subjectForm
var range = rangeInline(this.source, this.sourceRange)
var optionsGroupObj = optionsGroup(this.type, id, this.options)
var titleInlineList = []
for(var i=0;i<this.title.length;i++){
var dropdown = dropDownInputWidget(id+'-'+i, mapKeysList(this.options))
var titleInlineObj = titleInline(id+'-'+i, this.type, json.source, i, this.title[i],'titleInline')
titleInlineObj.append(dropdown)
titleInlineList.push(titleInlineObj)
}
var titlesGroupObj = titlesGroup(titleInlineList)
var buttonGroupObj = buttonGroup(showSubmitBtn, showEditBtn, id, this.type, this.answer, this.temp.main)
var subjectForm = subjectFrom(id, [titlesGroupObj, optionsGroupObj, buttonGroupObj])
//resultGroupObj
var resultGroupList = []
for(var i=0;i<this.answer.length;i++){
var answerInlineObj = answerInline(this.answer[i])
var explainInlineObj = this.explain[i] === undefined || this.explain[i] === '' ? '暂无解析' : explainInline(this.explain[i])
resultGroupList.push(
'<b>'+sourcePrefix+realSource.source+'-'+i+'</b>',
$('<div style="margin-left:10px"></div>').append(answerInlineObj),
$('<div style="margin-left:10px"></div>').append(explainInlineObj)
)
}
var resultGroupObj = resultGroup(id, resultGroupList)
this.temp.main.append(range ,subjectForm,resultGroupObj)
if(showHr){this.temp.main.append('<hr>')}
return this.temp.main
}
o.X = function () {
//subjectForm
var optionsGroupObj = optionsGroup(this.type, id, this.options)
var titleInlineObj = titleInline(id, this.type,this.source,undefined,this.title,'titleInline')
var buttonGroupObj = showBtnGroup? buttonGroup(showSubmitBtn, showEditBtn, id, this.type, this.answer, this.temp.main):''
var subjectForm = subjectFrom(id, [titleInlineObj, optionsGroupObj, buttonGroupObj])
//resultGroupObj
var answerInlineObj = answerInline(this.answer)
var explainInlineObj = this.explain === undefined || this.explain === '' ? '暂无解析' : explainInline(this.explain)
var resultGroupObj = resultGroup(id, [answerInlineObj, explainInlineObj])
this.temp.main.append(subjectForm,resultGroupObj)
if(showHr){this.temp.main.append('<hr>')}
return this.temp.main
}
o.PD = function () {
var dic = {
right: ['对', '正确', 't', '✓', '√', '1', 'true'],
wrong: ['错', '错误', '×', 'x', 'f', 'false', 'wrong', '0']
}
this.temp.type.text('判断')
this.temp.source.text(json.source)
this.temp.title.html(json.title)
this.temp.explain.nextAll('.explain').html(json.explain)
var ans = ''
var ansOption = ''
if(isInArray(dic.right, json.answer.toLowerCase())){
ans = '正确'
ansOption = 'A'
}else if(isInArray(dic.wrong, json.answer.toLowerCase())){
ans = '错误'
ansOption = 'B'
}else {
ans = '系统错误:该判断题答案不符合标准格式'
}
//subjectForm
var option = new Map()
option.set('A', '正确')
option.set('B', '错误')
var optionsGroupObj = optionsGroup(this.type, id, option)
var titleInlineObj = titleInline(id, this.type,this.source,undefined,this.title,'titleInline')
var buttonGroupObj = showBtnGroup? buttonGroup(showSubmitBtn, showEditBtn, id, 'A', ansOption, this.temp.main):''
var subjectForm = subjectFrom(id, [titleInlineObj, optionsGroupObj, buttonGroupObj])
//resultGroupObj
var answerInlineObj = answerInline(ans)
var explainInlineObj = this.explain === undefined || this.explain === '' ? '暂无解析' : explainInline(this.explain)
var resultGroupObj = resultGroup(id, [answerInlineObj, explainInlineObj])
this.temp.main.append(subjectForm,resultGroupObj)
if(showHr){this.temp.main.append('<hr>')}
return this.temp.main
}
o.TK = function () {
var tkTitle = fillBlank(id, this.title, this.pos, ['textInput-tk'])
var titleInlineObj = titleInline(id, this.type,this.source,undefined,tkTitle, 'titleInline-no-flex')
titleInlineObj.children('.textInput-tk').each(function(i,v){
console.log(i,v)
$(this).children('input').css(
'display','inline'
)
$(this).children('input').css(
'width','200px'
)
})
var buttonGroupObj = showBtnGroup? buttonGroup(showSubmitBtn, showEditBtn, id, this.type, this.answer, this.temp.main):''
var subjectForm = subjectFrom(id, [titleInlineObj, buttonGroupObj])
this.temp.main.append(subjectForm)
if(showHr){this.temp.main.append('<hr>')}
return this.temp.main
}
o.MJ = function () {
var mjTitle = ''
if(this.inputBox===0){
mjTitle = json.title + ':<span class="blur" tabindex="0" style="display:inline;outline=0;" onclick="">' + json.answer +'</span>'
}else{
mjTitle = fillBlank(id, this.title+':()', '()', ['textInput-mj'])
}
var titleInlineObj = titleInline(id, this.type,this.source,undefined,mjTitle, 'titleInline-no-flex')
titleInlineObj.children('.textInput-mj').each(function(i,v){
console.log(i,v)
$(this).children('input').css(
'display','inline'
)
$(this).children('input').css(
'width','auto'
)
})
var buttonGroupObj = this.inputBox!==0 ? buttonGroup(showSubmitBtn, showEditBtn, id, 'TK', [this.answer], this.temp.main):''
var subjectForm = subjectFrom(id, [titleInlineObj, buttonGroupObj])
this.temp.main.append(subjectForm)
if(showHr){this.temp.main.append('<hr>')}
return this.temp.main
}
return o
}
function getSelectedAnswer(id){
var data = formToJSON('#timuFrom-'+id,true)
return data
}
function showThisAnswer(id,type,correctAnswer){
var subjectCon = $('#'+id)
var titleCon = subjectCon.children('.subject').children('.titleContainer')
var resultGroup = $('#resultGroup-'+id)
resultGroup.fadeIn(100)
var answers = subjectCon.children('.subject').children('.options')
$('#showThisAnswer-'+id).fadeOut(1)
if(type==="A" || type ==='A2'){
var optionGroupID = 'optionsGroup-'+id
var optionInlinePrefixID = 'option-'+id
var usersChoice = getSelectedAnswer(id)[optionGroupID]
var correctDivObj = $('#'+optionInlinePrefixID + '-' + correctAnswer)
var usersChoiceDivObj = $('#'+optionInlinePrefixID + '-' + usersChoice)
if(usersChoice===correctAnswer){
correctDivObj.addClass('correct')
}else{
correctDivObj.addClass('correct')
usersChoiceDivObj.addClass('wrong')
}
}else if(type==='A3'){
for(var i=0;i<correctAnswer.length;i++){
//以下与A型题时一样的代码,知识用subID替换ID变量
showThisAnswer(id+'-'+i,'A',correctAnswer[i])
}
} else if(type==='B'){
var dropDownInputPrefix = 'dropdown-input-'+id +'-'
var usersChoice = getSelectedAnswer(id)
console.log(usersChoice)
for(var i in usersChoice){
var dorpdownID = i.replace(dropDownInputPrefix,'')//获取子ID
var subTimuID = id+'-'+dorpdownID
var thisTimuUsersChoice = usersChoice[i]
var thisTimuCorrectAnswer = correctAnswer[dorpdownID]
var subTimuDiv = $('#title-'+subTimuID)
if(thisTimuUsersChoice===thisTimuCorrectAnswer){
subTimuDiv.addClass('correct')
}else{
subTimuDiv.addClass('wrong')
subTimuDiv.append('<label class="answerTip">正确答案:'+thisTimuCorrectAnswer+'</label>')
}
}
} else if(type=="C"){
var dropDownInputPrefix = 'dropdown-input-'+id +'-'
var usersChoice = getSelectedAnswer(id)
console.log(usersChoice)
for(var i in usersChoice){
var dorpdownID = i.replace(dropDownInputPrefix,'')//获取子ID
var subTimuID = id+'-'+dorpdownID
var thisTimuUsersChoice = usersChoice[i]
var thisTimuCorrectAnswer = correctAnswer[dorpdownID]
var subTimuDiv = $('#title-'+subTimuID)
if(thisTimuUsersChoice===thisTimuCorrectAnswer){
subTimuDiv.addClass('correct')
}else{
subTimuDiv.addClass('wrong')
subTimuDiv.append('<label class="answerTip">正确答案:'+thisTimuCorrectAnswer+'</label>')
}
}
}else if(type=="X"){
var optionGroupID = 'optionsGroup-'+id
var optionInlinePrefixID = 'option-'+id
var usersChoice = getCheckBoxValue(optionGroupID).sort()
correctAnswer = correctAnswer.match(/[A-Z]/g).sort()
var lenCorrect = correctAnswer.length
var lenUser = usersChoice.length
console.log(correctAnswer)
for(var i=0;i<lenUser;i++){
console.log(isInArray(correctAnswer, usersChoice[i]),usersChoice[i] ,correctAnswer)
if(!isInArray(correctAnswer, usersChoice[i])){
$('#'+optionInlinePrefixID + '-' + usersChoice[i]).addClass('wrong')
}
}
for(var i=0;i<lenCorrect;i++){
if(!isInArray(usersChoice,correctAnswer[i])){
$('#'+optionInlinePrefixID + '-' + correctAnswer[i]).addClass('notChoiced')
}else {
$('#'+optionInlinePrefixID + '-' + correctAnswer[i]).addClass('correct')
}
}
}else if(type=="TK"){
var textInputPrefix = 'textInput-'+id+'-'
var usersChoice = getSelectedAnswer(id)
for(var i in usersChoice){
var inputID = i.replace(textInputPrefix,'')
console.log('#'+i)
var corrcetAnswerText = correctAnswer[inputID]===undefined?'暂无答案':correctAnswer[inputID]
if(usersChoice[i]===correctAnswer[inputID]){
$('#'+i).html('<label class="answerTip correct">'+corrcetAnswerText+'</label>')
}else{
$('#'+i).after('<label class="answerTip wrong">'+corrcetAnswerText+'</label>')
}
}
}
}
function removeBackground(obj){
obj.addClass('no-background')
}
//DOM操作
//获取checkbox值
function getCheckBoxValue(name) {
var ids = $('input:checkbox[name="'+name+'"]:checked');
var data = [];
for (var i = 0; i < ids.length; i ++) {
//利用三元运算符去点
data.push(ids[i].value)
}
return data
}
//将题目放在模板加载位置
function addAfterIDData(id,content) {
var data = $('.data')
content.insertAfter(data[id])
}
//渲染题目
function render(id,type,obj,parent,isAfter){
parent =parent !==undefined ?parent : '#subjectContainer-'+type
if(typeof(parent)!=='object'){
parent = $(parent)
}
if(isObjExist(parent)){
if(isAfter){
parent.after(obj)
}else {
obj.appendTo(parent)
}
}else {
addAfterIDData(id,obj)
}
}
//基础函数
//判断函数
function isObjExist(t){
return $(t).length>0
}
function isInArray (arr, value) {
for (var i = 0; i < arr.length; i++) {
if (value === arr[i]) {
return true
}
}
return false
}
//数据查询函数
function dicLen(dic){
var count=0;
for(var key in dic){
console.log(key+'='+dic[key]);
count++;
}
return count
}
//html操作函数
function entityToString(entity){
var div=$('<div></div>');
div.html(entity)
var res=div.html();
console.log(entity,'->',res);
return res;
}
//获取map中键的列表
function mapKeysList(map){
return Array.from(map.keys())
}
//数据清理
//去除字典中的空值
function filterEmptyEntries(dic){
console.log(Object.fromEntries(
Object.entries(dic).filter(function(key, value){return value !== null && value !== undefined && value.length !== 0})
))
return Object.fromEntries(
Object.entries(dic).filter(function(key, value){return value !== null && value !== undefined && value.length !== 0})
)
}
//排序字典并返回一个map对象
function sortDicByKey(dic){
var sort = Object.keys(dic).sort()
var map = new Map()
for(var i=0;i<sort.length;i++){
map.set(sort[i],dic[sort[i]])
}
return map
}