Skip to content

Instantly share code, notes, and snippets.

@sli
Created March 25, 2012 01:59
Show Gist options
  • Select an option

  • Save sli/2190723 to your computer and use it in GitHub Desktop.

Select an option

Save sli/2190723 to your computer and use it in GitHub Desktop.
localStorage-based todo list
<!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title>Todo Demo</title>
<script>
window.onload = function() {
var item, complete, list;
list = document.getElementById('list');
if (typeof(localStorage) == 'undefined') {
list.innerHTML = 'Sorry, you need a browser that supports localStorage.';
document.getElementById('add').disabled = true;
} else {
try {
var keys = localStorage.getItem('__keys').split(',');
for (k in keys) {
k = keys[k].replace(/ /g,'');
if (k) {
item = localStorage.getItem(k);
complete = localStorage.getItem(k + '_complete');
if (complete === 'true') list.innerHTML += '<li class="complete"> <input type="checkbox" id="'+ k +'" onclick="checkedItem(this)" checked> ' + item;
else list.innerHTML += '<li class="incomplete"> <input type="checkbox" id="'+ k +'" onclick="checkedItem(this)"> ' + item;
}
}
} catch (e) { localStorage.setItem('__keys', ''); }
}
};
var addItem = function() {
// attempt unique name
var item, val, key;
item = document.getElementById('item').value;
val = item.split(' ');
key = '';
for (v in val) {
v = val[v];
key = key + v.substring(0,1);
}
key = key.toLowerCase();
localStorage.setItem(key, item);
localStorage.setItem(key + '_complete', false);
document.getElementById('list').innerHTML += '<li class="incomplete"> <input type="checkbox" id="'+ k +'" onclick="checkedItem(this)"> ' + item;
// update key list
var keylist = localStorage.getItem('__keys') + key + ',';
localStorage.setItem('__keys', keylist);
};
var checkedItem = function(ele) {
if (ele.checked) {
ele.parentNode.className = 'complete';
localStorage.setItem(ele.id+'_complete', 'true');
} else {
ele.parentNode.className = 'incomplete';
localStorage.setItem(ele.id+'_complete', 'false');
}
};
</script>
<style>
body { font-family: helvetica, arial; }
header { font-size: 24pt; font-variant: small-caps; }
input { font-size: 16pt; }
input#item { width: 800px; }
li { font-size: 16pt; list-style: none; }
.content { width: 900px; margin: 0 auto; }
.incomplete { font-weight: bold; }
.complete { text-decoration: line-through; }
</style>
</head>
<body>
<div class="content">
<header>
Todo List
</header>
<div id="main">
<input type="text" id="item"> <input type="button" value="Add" id="add" onclick="addItem()">
<hr>
<div id="list"></div>
</div>
</div>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment