出題フォームを生成する (URL Standard)
HTML
<h1>出題フォームを生成する</h1>
<h2>実装</h2>
<p><code>location.search</code>に存在するGETパラメータを <code>URLSearchParams</code> でパースする。</p>
<h2>サンプル</h2>
<template id="qa-template">
<form id="qa">
<input type="hidden" name="answer-list" />
<p class="current-question">問題</p>
<p><input name="current-answer" type="text" /></p>
<p><input type="submit" value="submit" /></p>
</form>
</template>
<h2>参考リンク</h2>
<ul>
<li><a href="https://gist.github.com/think49/56383a8018e9717679628c55bd4ec852">出題フォームを生成する (URL Standard) - GitHub</a></li>
<li><a href="https://triple-underscore.github.io/URL-ja.html#interface-urlsearchparams">6.2. URLSearchParams class - URL Standard (日本語訳)</a></li>
<li><a href="https://url.spec.whatwg.org/#interface-urlsearchparams">6.2. URLSearchParams class - URL Standard</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams">URLSearchParams - Web APIs | MDN</a></li>
</ul>
JavaScript
/**
* create-qa-form.js
*
* @version 1.0.0
* @author think49
* @url https://gist.github.com/think49/56383a8018e9717679628c55bd4ec852
* @license http://www.opensource.org/licenses/mit-license.php (The MIT License)
*/
(function () {
'use strict';
function createQAForm (form, qaList, answerList) {
var elements = form.elements;
if (answerList && Array.isArray(answerList)) {
var aLen = answerList.length;
if (qaList.length <= aLen) {
return null;
}
elements['answer-list'].value = JSON.stringify(answerList);
form.querySelector('.current-question').firstChild.data = '(問題' + (aLen + 1) + ') ' + qaList[aLen][0];
} else {
// elements['answer-list'].value = JSON.stringify([elements['current-answer'].value]);
form.querySelector('.current-question').firstChild.data = qaList[0][0];
}
return form;
}
function main () {
var qaList = [['Javaと名前が似ているクライアントサイドスクリプト言語の名前は?', 'JavaScript'], ['ブラウザからHTML/XML文書にアクセスする為のAPIの名称は?', 'DOM'], ['JavaScriptで文/演算子等の基本的な文法/ビルトインオブジェクトをまとめた仕様の名称は?', 'ECMAScript']],
searchParams = new URLSearchParams(location.search),
answerList = searchParams.get('answer-list'),
currentAnswer = searchParams.get('current-answer'),
doc = this.document,
template = doc.getElementById('qa-template'),
form;
answerList = answerList ? JSON.parse(answerList) : [];
if (currentAnswer) {
answerList.push(currentAnswer);
}
form = createQAForm(doc.importNode(template.content, true).firstElementChild, qaList, answerList);
if (form) {
template.parentNode.insertBefore(form, template);
} else {
var df = doc.createDocumentFragment(),
p = doc.createElement('p'),
correctOrIncorrect = ['不正解', '正解'];
for (var i = 0, len = answerList.length, answer; i < len; ++i) {
answer = answerList[i];
p = p.cloneNode(false);
p.textContent = '(回答' + (i + 1) + ') ' +...