Commit 2dee7943 authored by Pascal Hartig's avatar Pascal Hartig

jquery: jshint style

parent bcc74618
/*global jQuery, Handlebars */ /*global jQuery, Handlebars */
jQuery(function( $ ) { jQuery(function ($) {
'use strict'; 'use strict';
var Utils = { var Utils = {
// https://gist.github.com/1308368 // 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 (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},
pluralize: function( count, word ) { pluralize: function (count, word) {
return count === 1 ? word : word + 's'; return count === 1 ? word : word + 's';
}, },
store: function( namespace, data ) { store: function (namespace, data) {
if ( arguments.length > 1 ) { if (arguments.length > 1) {
return localStorage.setItem( namespace, JSON.stringify( data ) ); return localStorage.setItem(namespace, JSON.stringify(data));
} else { } else {
var store = localStorage.getItem( namespace ); var store = localStorage.getItem(namespace);
return ( store && JSON.parse( store ) ) || []; return (store && JSON.parse(store)) || [];
} }
} }
}; };
var App = { var App = {
init: function() { init: function () {
this.ENTER_KEY = 13; this.ENTER_KEY = 13;
this.todos = Utils.store('todos-jquery'); this.todos = Utils.store('todos-jquery');
this.cacheElements(); this.cacheElements();
this.bindEvents(); this.bindEvents();
this.render(); this.render();
}, },
cacheElements: function() { cacheElements: function () {
this.todoTemplate = Handlebars.compile( $('#todo-template').html() ); this.todoTemplate = Handlebars.compile($('#todo-template').html());
this.footerTemplate = Handlebars.compile( $('#footer-template').html() ); this.footerTemplate = Handlebars.compile($('#footer-template').html());
this.$todoApp = $('#todoapp'); this.$todoApp = $('#todoapp');
this.$newTodo = $('#new-todo'); this.$newTodo = $('#new-todo');
this.$toggleAll = $('#toggle-all'); this.$toggleAll = $('#toggle-all');
...@@ -38,77 +38,77 @@ jQuery(function( $ ) { ...@@ -38,77 +38,77 @@ jQuery(function( $ ) {
this.$count = $('#todo-count'); this.$count = $('#todo-count');
this.$clearBtn = $('#clear-completed'); this.$clearBtn = $('#clear-completed');
}, },
bindEvents: function() { bindEvents: function () {
var list = this.$todoList; var list = this.$todoList;
this.$newTodo.on( 'keyup', this.create ); this.$newTodo.on('keyup', this.create);
this.$toggleAll.on( 'change', this.toggleAll ); this.$toggleAll.on('change', this.toggleAll);
this.$footer.on( 'click', '#clear-completed', this.destroyCompleted ); this.$footer.on('click', '#clear-completed', this.destroyCompleted);
list.on( 'change', '.toggle', this.toggle ); list.on('change', '.toggle', this.toggle);
list.on( 'dblclick', 'label', this.edit ); list.on('dblclick', 'label', this.edit);
list.on( 'keypress', '.edit', this.blurOnEnter ); list.on('keypress', '.edit', this.blurOnEnter);
list.on( 'blur', '.edit', this.update ); list.on('blur', '.edit', this.update);
list.on( 'click', '.destroy', this.destroy ); list.on('click', '.destroy', this.destroy);
}, },
render: function() { render: function () {
this.$todoList.html( this.todoTemplate( this.todos ) ); this.$todoList.html(this.todoTemplate(this.todos));
this.$main.toggle( !!this.todos.length ); this.$main.toggle(!!this.todos.length);
this.$toggleAll.prop( 'checked', !this.activeTodoCount() ); this.$toggleAll.prop('checked', !this.activeTodoCount());
this.renderFooter(); this.renderFooter();
Utils.store( 'todos-jquery', this.todos ); Utils.store('todos-jquery', this.todos);
}, },
renderFooter: function() { renderFooter: function () {
var todoCount = this.todos.length, var todoCount = this.todos.length,
activeTodoCount = this.activeTodoCount(), activeTodoCount = this.activeTodoCount(),
footer = { footer = {
activeTodoCount: activeTodoCount, activeTodoCount: activeTodoCount,
activeTodoWord: Utils.pluralize( activeTodoCount, 'item' ), activeTodoWord: Utils.pluralize(activeTodoCount, 'item'),
completedTodos: todoCount - activeTodoCount completedTodos: todoCount - activeTodoCount
}; };
this.$footer.toggle( !!todoCount ); this.$footer.toggle(!!todoCount);
this.$footer.html( this.footerTemplate( footer ) ); this.$footer.html(this.footerTemplate(footer));
}, },
toggleAll: function() { toggleAll: function () {
var isChecked = $( this ).prop('checked'); var isChecked = $(this).prop('checked');
$.each( App.todos, function( i, val ) { $.each(App.todos, function (i, val) {
val.completed = isChecked; val.completed = isChecked;
}); });
App.render(); App.render();
}, },
activeTodoCount: function() { activeTodoCount: function () {
var count = 0; var count = 0;
$.each( this.todos, function( i, val ) { $.each(this.todos, function (i, val) {
if ( !val.completed ) { if (!val.completed) {
count++; count++;
} }
}); });
return count; return count;
}, },
destroyCompleted: function() { destroyCompleted: function () {
var todos = App.todos, var todos = App.todos,
l = todos.length; l = todos.length;
while ( l-- ) { while (l--) {
if ( todos[l].completed ) { if (todos[l].completed) {
todos.splice( l, 1 ); todos.splice(l, 1);
} }
} }
App.render(); 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 // returns the corresponding todo in the todos array
getTodo: function( elem, callback ) { getTodo: function (elem, callback) {
var id = $( elem ).closest('li').data('id'); var id = $(elem).closest('li').data('id');
$.each( this.todos, function( i, val ) { $.each(this.todos, function (i, val) {
if ( val.id === id ) { if (val.id === id) {
callback.apply( App, arguments ); callback.apply(App, arguments);
return false; return false;
} }
}); });
}, },
create: function(e) { create: function (e) {
var $input = $(this), var $input = $(this),
val = $.trim( $input.val() ); val = $.trim($input.val());
if ( e.which !== App.ENTER_KEY || !val ) { if (e.which !== App.ENTER_KEY || !val) {
return; return;
} }
App.todos.push({ App.todos.push({
...@@ -119,34 +119,34 @@ jQuery(function( $ ) { ...@@ -119,34 +119,34 @@ jQuery(function( $ ) {
$input.val(''); $input.val('');
App.render(); App.render();
}, },
toggle: function() { toggle: function () {
App.getTodo( this, function( i, val ) { App.getTodo(this, function (i, val) {
val.completed = !val.completed; val.completed = !val.completed;
}); });
App.render(); App.render();
}, },
edit: function() { edit: function () {
$(this).closest('li').addClass('editing').find('.edit').focus(); $(this).closest('li').addClass('editing').find('.edit').focus();
}, },
blurOnEnter: function( e ) { blurOnEnter: function (e) {
if ( e.keyCode === App.ENTER_KEY ) { if (e.keyCode === App.ENTER_KEY) {
e.target.blur(); e.target.blur();
} }
}, },
update: function() { update: function () {
var val = $.trim( $(this).removeClass('editing').val() ); var val = $.trim($(this).removeClass('editing').val());
App.getTodo( this, function( i ) { App.getTodo(this, function (i) {
if ( val ) { if (val) {
this.todos[ i ].title = val; this.todos[i].title = val;
} else { } else {
this.todos.splice( i, 1 ); this.todos.splice(i, 1);
} }
this.render(); this.render();
}); });
}, },
destroy: function() { destroy: function () {
App.getTodo( this, function( i ) { App.getTodo(this, function (i) {
this.todos.splice( i, 1 ); this.todos.splice(i, 1);
this.render(); this.render();
}); });
} }
......
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