Commit 55065f19 authored by Pascal Hartig's avatar Pascal Hartig

Backbone: jshint style

parent 879f666c
/*global $*/
/*jshint unused:false*/
var app = app || {}; var app = app || {};
var ENTER_KEY = 13; var ENTER_KEY = 13;
$(function() { $(function () {
'use strict';
// Kick things off by creating the **App**. // Kick things off by creating the **App**.
new app.AppView(); new app.AppView();
......
/*global Backbone Store*/
var app = app || {}; var app = app || {};
(function() { (function () {
'use strict'; 'use strict';
// Todo Collection // Todo Collection
...@@ -17,28 +18,28 @@ var app = app || {}; ...@@ -17,28 +18,28 @@ var app = app || {};
localStorage: new Store('todos-backbone'), localStorage: new Store('todos-backbone'),
// Filter down the list of all todo items that are finished. // Filter down the list of all todo items that are finished.
completed: function() { completed: function () {
return this.filter(function( todo ) { return this.filter(function (todo) {
return todo.get('completed'); return todo.get('completed');
}); });
}, },
// Filter down the list to only todo items that are still not finished. // Filter down the list to only todo items that are still not finished.
remaining: function() { remaining: function () {
return this.without.apply( this, this.completed() ); return this.without.apply(this, this.completed());
}, },
// We keep the Todos in sequential order, despite being saved by unordered // We keep the Todos in sequential order, despite being saved by unordered
// GUID in the database. This generates the next order number for new items. // GUID in the database. This generates the next order number for new items.
nextOrder: function() { nextOrder: function () {
if ( !this.length ) { if (!this.length) {
return 1; return 1;
} }
return this.last().get('order') + 1; return this.last().get('order') + 1;
}, },
// Todos are sorted by their original insertion order. // Todos are sorted by their original insertion order.
comparator: function( todo ) { comparator: function (todo) {
return todo.get('order'); return todo.get('order');
} }
}); });
......
/*global Backbone*/
var app = app || {}; var app = app || {};
(function() { (function () {
'use strict'; 'use strict';
// Todo Model // Todo Model
...@@ -17,7 +18,7 @@ var app = app || {}; ...@@ -17,7 +18,7 @@ var app = app || {};
}, },
// Toggle the `completed` state of this todo item. // Toggle the `completed` state of this todo item.
toggle: function() { toggle: function () {
this.save({ this.save({
completed: !this.get('completed') completed: !this.get('completed')
}); });
......
/*global Backbone*/
var app = app || {}; var app = app || {};
(function() { (function () {
'use strict'; 'use strict';
// Todo Router // Todo Router
// ---------- // ----------
var Workspace = Backbone.Router.extend({ var Workspace = Backbone.Router.extend({
routes:{ routes: {
'*filter': 'setFilter' '*filter': 'setFilter'
}, },
setFilter: function( param ) { setFilter: function (param) {
// Set the current filter to be used // Set the current filter to be used
app.TodoFilter = param.trim() || ''; app.TodoFilter = param.trim() || '';
......
/*global Backbone _ $ ENTER_KEY*/
var app = app || {}; var app = app || {};
$(function( $ ) { $(function ($) {
'use strict'; 'use strict';
// The Application // The Application
...@@ -14,7 +15,7 @@ $(function( $ ) { ...@@ -14,7 +15,7 @@ $(function( $ ) {
el: '#todoapp', el: '#todoapp',
// Our template for the line of statistics at the bottom of the app. // Our template for the line of statistics at the bottom of the app.
statsTemplate: _.template( $('#stats-template').html() ), statsTemplate: _.template($('#stats-template').html()),
// Delegated events for creating new items, and clearing completed ones. // Delegated events for creating new items, and clearing completed ones.
events: { events: {
...@@ -26,7 +27,7 @@ $(function( $ ) { ...@@ -26,7 +27,7 @@ $(function( $ ) {
// At initialization we bind to the relevant events on the `Todos` // At initialization we bind to the relevant events on the `Todos`
// collection, when items are added or changed. Kick things off by // collection, when items are added or changed. Kick things off by
// loading any preexisting todos that might be saved in *localStorage*. // loading any preexisting todos that might be saved in *localStorage*.
initialize: function() { initialize: function () {
this.allCheckbox = this.$('#toggle-all')[0]; this.allCheckbox = this.$('#toggle-all')[0];
this.$input = this.$('#new-todo'); this.$input = this.$('#new-todo');
this.$footer = this.$('#footer'); this.$footer = this.$('#footer');
...@@ -43,11 +44,11 @@ $(function( $ ) { ...@@ -43,11 +44,11 @@ $(function( $ ) {
// Re-rendering the App just means refreshing the statistics -- the rest // Re-rendering the App just means refreshing the statistics -- the rest
// of the app doesn't change. // of the app doesn't change.
render: function() { render: function () {
var completed = app.Todos.completed().length; var completed = app.Todos.completed().length;
var remaining = app.Todos.remaining().length; var remaining = app.Todos.remaining().length;
if ( app.Todos.length ) { if (app.Todos.length) {
this.$main.show(); this.$main.show();
this.$footer.show(); this.$footer.show();
...@@ -58,7 +59,7 @@ $(function( $ ) { ...@@ -58,7 +59,7 @@ $(function( $ ) {
this.$('#filters li a') this.$('#filters li a')
.removeClass('selected') .removeClass('selected')
.filter('[href="#/' + ( app.TodoFilter || '' ) + '"]') .filter('[href="#/' + (app.TodoFilter || '') + '"]')
.addClass('selected'); .addClass('selected');
} else { } else {
this.$main.hide(); this.$main.hide();
...@@ -70,27 +71,27 @@ $(function( $ ) { ...@@ -70,27 +71,27 @@ $(function( $ ) {
// Add a single todo item to the list by creating a view for it, and // Add a single todo item to the list by creating a view for it, and
// appending its element to the `<ul>`. // appending its element to the `<ul>`.
addOne: function( todo ) { addOne: function (todo) {
var view = new app.TodoView({ model: todo }); var view = new app.TodoView({ model: todo });
$('#todo-list').append( view.render().el ); $('#todo-list').append(view.render().el);
}, },
// Add all items in the **Todos** collection at once. // Add all items in the **Todos** collection at once.
addAll: function() { addAll: function () {
this.$('#todo-list').html(''); this.$('#todo-list').html('');
app.Todos.each(this.addOne, this); app.Todos.each(this.addOne, this);
}, },
filterOne: function( todo ) { filterOne: function (todo) {
todo.trigger('visible'); todo.trigger('visible');
}, },
filterAll: function() { filterAll: function () {
app.Todos.each(this.filterOne, this); app.Todos.each(this.filterOne, this);
}, },
// Generate the attributes for a new Todo item. // Generate the attributes for a new Todo item.
newAttributes: function() { newAttributes: function () {
return { return {
title: this.$input.val().trim(), title: this.$input.val().trim(),
order: app.Todos.nextOrder(), order: app.Todos.nextOrder(),
...@@ -100,25 +101,25 @@ $(function( $ ) { ...@@ -100,25 +101,25 @@ $(function( $ ) {
// If you hit return in the main input field, create new **Todo** model, // If you hit return in the main input field, create new **Todo** model,
// persisting it to *localStorage*. // persisting it to *localStorage*.
createOnEnter: function( e ) { createOnEnter: function (e) {
if ( e.which !== ENTER_KEY || !this.$input.val().trim() ) { if (e.which !== ENTER_KEY || !this.$input.val().trim()) {
return; return;
} }
app.Todos.create( this.newAttributes() ); app.Todos.create(this.newAttributes());
this.$input.val(''); this.$input.val('');
}, },
// Clear all completed todo items, destroying their models. // Clear all completed todo items, destroying their models.
clearCompleted: function() { clearCompleted: function () {
_.invoke(app.Todos.completed(), 'destroy'); _.invoke(app.Todos.completed(), 'destroy');
return false; return false;
}, },
toggleAllComplete: function() { toggleAllComplete: function () {
var completed = this.allCheckbox.checked; var completed = this.allCheckbox.checked;
app.Todos.each(function( todo ) { app.Todos.each(function (todo) {
todo.save({ todo.save({
'completed': completed 'completed': completed
}); });
......
/*global Backbone _ $ ENTER_KEY*/
var app = app || {}; var app = app || {};
$(function() { $(function () {
'use strict'; 'use strict';
// Todo Item View // Todo Item View
...@@ -13,7 +14,7 @@ $(function() { ...@@ -13,7 +14,7 @@ $(function() {
tagName: 'li', tagName: 'li',
// Cache the template function for a single item. // Cache the template function for a single item.
template: _.template( $('#item-template').html() ), template: _.template($('#item-template').html()),
// The DOM events specific to an item. // The DOM events specific to an item.
events: { events: {
...@@ -27,50 +28,50 @@ $(function() { ...@@ -27,50 +28,50 @@ $(function() {
// The TodoView listens for changes to its model, re-rendering. Since there's // The TodoView listens for changes to its model, re-rendering. Since there's
// a one-to-one correspondence between a **Todo** and a **TodoView** in this // a one-to-one correspondence between a **Todo** and a **TodoView** in this
// app, we set a direct reference on the model for convenience. // app, we set a direct reference on the model for convenience.
initialize: function() { initialize: function () {
this.listenTo(this.model, 'change', this.render); this.listenTo(this.model, 'change', this.render);
this.listenTo(this.model, 'destroy', this.remove); this.listenTo(this.model, 'destroy', this.remove);
this.listenTo(this.model, 'visible', this.toggleVisible); this.listenTo(this.model, 'visible', this.toggleVisible);
}, },
// Re-render the titles of the todo item. // Re-render the titles of the todo item.
render: function() { render: function () {
this.$el.html( this.template( this.model.toJSON() ) ); this.$el.html(this.template(this.model.toJSON()));
this.$el.toggleClass( 'completed', this.model.get('completed') ); this.$el.toggleClass('completed', this.model.get('completed'));
this.toggleVisible(); this.toggleVisible();
this.$input = this.$('.edit'); this.$input = this.$('.edit');
return this; return this;
}, },
toggleVisible: function() { toggleVisible: function () {
this.$el.toggleClass( 'hidden', this.isHidden()); this.$el.toggleClass('hidden', this.isHidden());
}, },
isHidden: function() { isHidden: function () {
var isCompleted = this.model.get('completed'); var isCompleted = this.model.get('completed');
return ( // hidden cases only return (// hidden cases only
(!isCompleted && app.TodoFilter === 'completed') (!isCompleted && app.TodoFilter === 'completed') ||
|| (isCompleted && app.TodoFilter === 'active') (isCompleted && app.TodoFilter === 'active')
); );
}, },
// Toggle the `"completed"` state of the model. // Toggle the `"completed"` state of the model.
toggleCompleted: function() { toggleCompleted: function () {
this.model.toggle(); this.model.toggle();
}, },
// Switch this view into `"editing"` mode, displaying the input field. // Switch this view into `"editing"` mode, displaying the input field.
edit: function() { edit: function () {
this.$el.addClass('editing'); this.$el.addClass('editing');
this.$input.focus(); this.$input.focus();
}, },
// Close the `"editing"` mode, saving changes to the todo. // Close the `"editing"` mode, saving changes to the todo.
close: function() { close: function () {
var value = this.$input.val().trim(); var value = this.$input.val().trim();
if ( value ) { if (value) {
this.model.save({ title: value }); this.model.save({ title: value });
} else { } else {
this.clear(); this.clear();
...@@ -80,14 +81,14 @@ $(function() { ...@@ -80,14 +81,14 @@ $(function() {
}, },
// If you hit `enter`, we're through editing the item. // If you hit `enter`, we're through editing the item.
updateOnEnter: function( e ) { updateOnEnter: function (e) {
if ( e.which === ENTER_KEY ) { if (e.which === ENTER_KEY) {
this.close(); this.close();
} }
}, },
// Remove the item, destroy the model from *localStorage* and delete its view. // Remove the item, destroy the model from *localStorage* and delete its view.
clear: function() { clear: function () {
this.model.destroy(); this.model.destroy();
} }
}); });
......
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