을 (그리고) :
<!DOCTYPE html>
<html lang="en">
<body>
<ul id="tests"></ul>
<button id="btn-add">Add test</button>
<button id="btn-save">Save tests</button>
<!-- <button id="btn-load">Load tests</button> -->
<button id="btn-clear">Clear storage</button>
<div id="div-result"></div>
<div id="div-total"></div>
<script type="text/javascript">
(function (document, window) {
var result = document.getElementById('div-result')
, total = document.getElementById('div-total');
// default object for a flash-card library
function fc() {
this.cards = {};
}
// clean input from tabs, spaces, uppercases
fc.prototype.simplify = function (val) {
if (val !== null) {
return val.toLowerCase().trim();
}
return null;
}
// add to library an item
fc.prototype.add = function (key, val) {
key = this.simplify(key);
val = this.simplify(val);
if (key !== null && val !== null) {
this.cards[key] = val;
}
}
// check the right value for the key
fc.prototype.check = function (key, val) {
key = this.simplify(key);
val = this.simplify(val);
if (this.cards.hasOwnProperty(key) && this.cards[ key ] === val) {
return true;
}
return false;
}
// test all values in order
fc.prototype.start = function() {
var rights = 0
, wrongs = 0;
result.innerHTML = '';
total.innerHTML = '';
for (var i in this.cards) {
var guess = prompt('and a Spanish word for "' + i + '"');
if (this.check(i, guess)) {
result.innerHTML += 'Right: ' + i + ' → ' + this.cards[ i ];
rights++;
} else {
result.innerHTML += 'Wrong: ' + guess + ', ' + i + ' → ' + this.cards[ i ];
wrongs++;
}
result.innerHTML += '<br>';
}
total.innerHTML = 'Right answers: ' + rights + '<br>Wrong answers: ' + wrongs ;
}
var app = (function (document, window) {
// declare some references, variables
var tests = {}
, el = document.getElementById('tests');
function addTest() {
var name = prompt('test name?');
if (name !== null) {
tests[ name ] = new fc();
render();
}
}
// register some events
function registerEvents() {
document.getElementById('btn-add').addEventListener('click', addTest, false);
document.getElementById('btn-save').addEventListener('click', save, false);
// document.getElementById('btn-load').addEventListener('click', load, false);
document.getElementById('btn-clear').addEventListener('click', clear, false);
}
// render function
function render() {
var li = undefined
, linkAdd = undefined
, linkStart = undefined
, docFrag = document.createDocumentFragment();
// clear the dom
while (el.firstChild) {
el.removeChild(el.firstChild);
};
el.innerHTML = '';
for (var i in tests) {
li = document.createElement('li');
li.innerHTML = i; // test name
li.appendChild(document.createTextNode(' -> '));
// btn start test
btnStart = document.createElement('button');
btnStart.setAttribute('data', i);
btnStart.addEventListener('click', function(e){
var my = this.getAttribute('data');
tests[ my ].start();
}, false);
btnStart.textContent = 'Start test';
li.appendChild(btnStart);
// btn add item to the test
btnAdd = document.createElement('button');
btnAdd.setAttribute('data', i);
btnAdd.addEventListener('click', function(e){
var my = this.getAttribute('data');
tests[ my ].add(prompt('key'), prompt('value'));
}, false);
btnAdd.textContent = 'Add item';
li.appendChild(btnAdd);
// btn remove test
btnRemove = document.createElement('button');
btnRemove.setAttribute('data', i);
btnRemove.addEventListener('click', function(e){
var my = this.getAttribute('data');
delete tests[ my ];
render();
}, false);
btnRemove.textContent = 'Remove test';
li.appendChild(btnRemove);
docFrag.appendChild(li);
};
el.appendChild(docFrag);
}
// save tests to localstorage
function save() {
var data = JSON.stringify(tests);
console.log(data);
localStorage.setItem('tests', data);
}
// load tests form localstorage
function load() {
var saved = localStorage[ 'tests' ] || false;
if (saved) {
var data = undefined;
data = JSON.parse(localStorage.getItem('tests'));
console.log(data);
// initialize test objects with loaded data
for(var i in data) {
tests[ i ] = new fc();
for (var j in data[ i ]) {
tests[ i ][ j ] = data[ i ][ j ];
}
}
render();
}
}
function clear() {
localStorage.clear();
tests = [];
render();
}
// initialisation part
registerEvents();
load();
}) (document, window);
}) (document, window);
</script>
</html>
당신의 모든 도움을 위해 대단히 감사합니다. – user3308258