Commit b0411a67 authored by Sindre Sorhus's avatar Sindre Sorhus

jQuery app - code style

parent ae08e0e2
<!doctype html>
<html lang="en">
<head>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>jQuery • TodoMVC</title>
......@@ -9,8 +9,8 @@
<!--[if IE]>
<script src="../../assets/ie.js"></script>
<![endif]-->
</head>
<body>
</head>
<body>
<section id="todoapp">
<header id="header">
<h1>todos</h1>
......@@ -51,5 +51,5 @@
<script src="../../assets/jquery.min.js"></script>
<script src="../../assets/handlebars.min.js"></script>
<script src="js/app.js"></script>
</body>
</body>
</html>
......@@ -3,8 +3,21 @@ jQuery(function ($) {
'use strict';
var Utils = {
// https://gist.github.com/1308368
uuid: function (a,b){for(b=a='';a++<36;b+=a*51&52?(a^15?8^Math.random()*(a^20?16:4):4).toString(16):'-');return b},
uuid: function () {
/*jshint bitwise:false */
var i, random;
var uuid = '';
for (i = 0; i < 32; i++) {
random = Math.random() * 16 | 0;
if (i === 8 || i === 12 || i === 16 || i === 20) {
uuid += '-';
}
uuid += (i === 12 ? 4 : (i === 16 ? (random & 3 | 8) : random)).toString(16);
}
return uuid;
},
pluralize: function (count, word) {
return count === 1 ? word : word + 's';
},
......@@ -57,9 +70,9 @@ jQuery(function ($) {
Utils.store('todos-jquery', this.todos);
},
renderFooter: function () {
var todoCount = this.todos.length,
activeTodoCount = this.activeTodoCount(),
footer = {
var todoCount = this.todos.length;
var activeTodoCount = this.activeTodoCount();
var footer = {
activeTodoCount: activeTodoCount,
activeTodoWord: Utils.pluralize(activeTodoCount, 'item'),
completedTodos: todoCount - activeTodoCount
......@@ -70,34 +83,41 @@ jQuery(function ($) {
},
toggleAll: function () {
var isChecked = $(this).prop('checked');
$.each(App.todos, function (i, val) {
val.completed = isChecked;
});
App.render();
},
activeTodoCount: function () {
var count = 0;
$.each(this.todos, function (i, val) {
if (!val.completed) {
count++;
}
});
return count;
},
destroyCompleted: function () {
var todos = App.todos,
l = todos.length;
var todos = App.todos;
var l = todos.length;
while (l--) {
if (todos[l].completed) {
todos.splice(l, 1);
}
}
App.render();
},
// Accepts an element from inside the ".item" div and
// accepts an element from inside the `.item` div and
// returns the corresponding todo in the todos array
getTodo: function (elem, callback) {
var id = $(elem).closest('li').data('id');
$.each(this.todos, function (i, val) {
if (val.id === id) {
callback.apply(App, arguments);
......@@ -106,16 +126,19 @@ jQuery(function ($) {
});
},
create: function (e) {
var $input = $(this),
val = $.trim($input.val());
var $input = $(this);
var val = $.trim($input.val());
if (e.which !== App.ENTER_KEY || !val) {
return;
}
App.todos.push({
id: Utils.uuid(),
title: val,
completed: false
});
$input.val('');
App.render();
},
......@@ -129,12 +152,13 @@ jQuery(function ($) {
$(this).closest('li').addClass('editing').find('.edit').focus();
},
blurOnEnter: function (e) {
if (e.keyCode === App.ENTER_KEY) {
if (e.which === App.ENTER_KEY) {
e.target.blur();
}
},
update: function () {
var val = $.trim($(this).removeClass('editing').val());
App.getTodo(this, function (i) {
if (val) {
this.todos[i].title = val;
......@@ -153,5 +177,4 @@ jQuery(function ($) {
};
App.init();
});
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment