enhance(client): add quiz preset for play
This commit is contained in:
parent
e8c5307f66
commit
14cff15c89
1 changed files with 118 additions and 0 deletions
|
@ -173,6 +173,119 @@ var cursor = 0
|
||||||
do()
|
do()
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
const PRESET_QUIZ = `/// @ 0.12.4
|
||||||
|
let title = '地理クイズ'
|
||||||
|
|
||||||
|
let qas = [{
|
||||||
|
q: 'オーストラリアの首都は?'
|
||||||
|
choices: ['シドニー' 'キャンベラ' 'メルボルン']
|
||||||
|
a: 'キャンベラ'
|
||||||
|
aDescription: '最大の都市はシドニーですが首都はキャンベラです。'
|
||||||
|
} {
|
||||||
|
q: '国土面積2番目の国は?'
|
||||||
|
choices: ['カナダ' 'アメリカ' '中国']
|
||||||
|
a: 'カナダ'
|
||||||
|
aDescription: '大きい順にロシア、カナダ、アメリカ、中国です。'
|
||||||
|
} {
|
||||||
|
q: '二重内陸国ではないのは?'
|
||||||
|
choices: ['リヒテンシュタイン' 'ウズベキスタン' 'レソト']
|
||||||
|
a: 'レソト'
|
||||||
|
aDescription: 'レソトは(一重)内陸国です。'
|
||||||
|
} {
|
||||||
|
q: '閘門がない運河は?'
|
||||||
|
choices: ['キール運河' 'スエズ運河' 'パナマ運河']
|
||||||
|
a: 'スエズ運河'
|
||||||
|
aDescription: 'スエズ運河は高低差がないので閘門はありません。'
|
||||||
|
}]
|
||||||
|
|
||||||
|
let qaEls = [Ui:C:container({
|
||||||
|
align: 'center'
|
||||||
|
children: [
|
||||||
|
Ui:C:text({
|
||||||
|
size: 1.5
|
||||||
|
bold: true
|
||||||
|
text: title
|
||||||
|
})
|
||||||
|
]
|
||||||
|
})]
|
||||||
|
|
||||||
|
var qn = 0
|
||||||
|
each (let qa, qas) {
|
||||||
|
qn += 1
|
||||||
|
qa.id = Util:uuid()
|
||||||
|
qaEls.push(Ui:C:container({
|
||||||
|
align: 'center'
|
||||||
|
bgColor: '#000'
|
||||||
|
fgColor: '#fff'
|
||||||
|
padding: 16
|
||||||
|
rounded: true
|
||||||
|
children: [
|
||||||
|
Ui:C:text({
|
||||||
|
text: \`Q{qn} {qa.q}\`
|
||||||
|
})
|
||||||
|
Ui:C:select({
|
||||||
|
items: qa.choices.map(@(c) {{ text: c, value: c }})
|
||||||
|
onChange: @(v) { qa.userAnswer = v }
|
||||||
|
})
|
||||||
|
Ui:C:container({
|
||||||
|
children: []
|
||||||
|
} \`{qa.id}:a\`)
|
||||||
|
]
|
||||||
|
} qa.id))
|
||||||
|
}
|
||||||
|
|
||||||
|
@finish() {
|
||||||
|
var score = 0
|
||||||
|
|
||||||
|
each (let qa, qas) {
|
||||||
|
let correct = qa.userAnswer == qa.a
|
||||||
|
if (correct) score += 1
|
||||||
|
let el = Ui:get(\`{qa.id}:a\`)
|
||||||
|
el.update({
|
||||||
|
children: [
|
||||||
|
Ui:C:text({
|
||||||
|
size: 1.2
|
||||||
|
bold: true
|
||||||
|
color: if (correct) '#f00' else '#00f'
|
||||||
|
text: if (correct) '🎉正解' else '不正解'
|
||||||
|
})
|
||||||
|
Ui:C:text({
|
||||||
|
text: qa.aDescription
|
||||||
|
})
|
||||||
|
]
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
let result = \`{title}の結果は{qas.len}問中{score}問正解でした。\`
|
||||||
|
Ui:get('footer').update({
|
||||||
|
children: [
|
||||||
|
Ui:C:postFormButton({
|
||||||
|
text: '結果を共有'
|
||||||
|
rounded: true
|
||||||
|
primary: true
|
||||||
|
form: {
|
||||||
|
text: \`{result}{Str:lf}{THIS_URL}\`
|
||||||
|
}
|
||||||
|
})
|
||||||
|
]
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
qaEls.push(Ui:C:container({
|
||||||
|
align: 'center'
|
||||||
|
children: [
|
||||||
|
Ui:C:button({
|
||||||
|
text: '答え合わせ'
|
||||||
|
primary: true
|
||||||
|
rounded: true
|
||||||
|
onClick: finish
|
||||||
|
})
|
||||||
|
]
|
||||||
|
} 'footer'))
|
||||||
|
|
||||||
|
Ui:render(qaEls)
|
||||||
|
`;
|
||||||
|
|
||||||
const PRESET_TIMELINE = `/// @ 0.12.4
|
const PRESET_TIMELINE = `/// @ 0.12.4
|
||||||
// APIリクエストを行いローカルタイムラインを表示するプリセット
|
// APIリクエストを行いローカルタイムラインを表示するプリセット
|
||||||
|
|
||||||
|
@ -258,6 +371,11 @@ function selectPreset(ev: MouseEvent) {
|
||||||
action: () => {
|
action: () => {
|
||||||
script = PRESET_SHUFFLE;
|
script = PRESET_SHUFFLE;
|
||||||
},
|
},
|
||||||
|
}, {
|
||||||
|
text: 'Quiz',
|
||||||
|
action: () => {
|
||||||
|
script = PRESET_QUIZ;
|
||||||
|
},
|
||||||
}, {
|
}, {
|
||||||
text: 'Timeline viewer',
|
text: 'Timeline viewer',
|
||||||
action: () => {
|
action: () => {
|
||||||
|
|
Loading…
Reference in a new issue