Commit d57de54a authored by Pascal Hartig's avatar Pascal Hartig

Thorax: jshint style

parent 669bdfe1
/*global $, Thorax, Backbone*/
/*jshint unused:false*/
var ENTER_KEY = 13;
$(function() {
$(function () {
'use strict';
// Kick things off by creating the **App**.
var view = new Thorax.Views['app']({
collection: window.app.Todos
});
view.appendTo('body');
Backbone.history.start();
var view = new Thorax.Views.app({
collection: window.app.Todos
});
view.appendTo('body');
Backbone.history.start();
});
(function() {
/*global Thorax, Store*/
(function () {
'use strict';
// Todo Collection
......@@ -15,28 +16,28 @@
localStorage: new Store('todos-backbone-thorax'),
// Filter down the list of all todo items that are finished.
completed: function() {
return this.filter(function( todo ) {
completed: function () {
return this.filter(function (todo) {
return todo.get('completed');
});
},
// Filter down the list to only todo items that are still not finished.
remaining: function() {
return this.without.apply( this, this.completed() );
remaining: function () {
return this.without.apply(this, this.completed());
},
// 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.
nextOrder: function() {
if ( !this.length ) {
nextOrder: function () {
if (!this.length) {
return 1;
}
return this.last().get('order') + 1;
},
// Todos are sorted by their original insertion order.
comparator: function( todo ) {
comparator: function (todo) {
return todo.get('order');
}
});
......@@ -44,7 +45,7 @@
// Create our global collection of **Todos**.
window.app.Todos = new TodoList();
// Ensure that we always have data available
window.app.Todos.fetch();
// Ensure that we always have data available
window.app.Todos.fetch();
}());
(function() {
/*global Thorax*/
(function () {
'use strict';
// Todo Model
......@@ -15,7 +16,7 @@
},
// Toggle the `completed` state of this todo item.
toggle: function() {
toggle: function () {
this.save({
completed: !this.get('completed')
});
......
(function() {
/*global Backbone*/
(function () {
'use strict';
// Todo Router
......@@ -10,7 +11,7 @@
':filter': 'setFilter'
},
setFilter: function( param ) {
setFilter: function (param) {
// Set the current filter to be used
window.app.TodoFilter = param ? param.trim().replace(/^\//, '') : '';
// Thorax listens for a `filter` event which will
......
$(function( $ ) {
/*global Thorax, $, ENTER_KEY*/
$(function () {
'use strict';
// The Application
......@@ -23,7 +24,7 @@ $(function( $ ) {
rendered: 'toggleToggleAllButton'
},
toggleToggleAllButton: function() {
toggleToggleAllButton: function () {
var toggleInput = this.$('#toggle-all')[0];
if (toggleInput) {
toggleInput.checked = !this.collection.remaining().length;
......@@ -32,12 +33,12 @@ $(function( $ ) {
// When this function is specified, items will only be shown
// when this function returns true
itemFilter: function(model) {
itemFilter: function (model) {
return model.isVisible();
},
// Generate the attributes for a new Todo item.
newAttributes: function() {
newAttributes: function () {
return {
title: this.$('#new-todo').val().trim(),
order: this.collection.nextOrder(),
......@@ -47,18 +48,18 @@ $(function( $ ) {
// If you hit return in the main input field, create new **Todo** model,
// persisting it to *localStorage*.
createOnEnter: function( e ) {
if ( e.which !== ENTER_KEY || !this.$('#new-todo').val().trim() ) {
createOnEnter: function (e) {
if (e.which !== ENTER_KEY || !this.$('#new-todo').val().trim()) {
return;
}
this.collection.create( this.newAttributes() );
this.collection.create(this.newAttributes());
this.$('#new-todo').val('');
},
toggleAllComplete: function() {
toggleAllComplete: function () {
var completed = this.$('#toggle-all')[0].checked;
this.collection.each(function( todo ) {
this.collection.each(function (todo) {
todo.save({
completed: completed
});
......
/*global Thorax, _*/
'use strict';
Thorax.View.extend({
name: 'stats',
events: {
'click #clear-completed': 'clearCompleted',
// The "rendered" event is triggered by Thorax each time render()
// is called and the result of the template has been appended
// to the View's $el
rendered: 'highlightFilter'
},
initialize: function() {
// Whenever the Todos collection changes re-render the stats
// render() needs to be called with no arguments, otherwise calling
// it with arguments will insert the arguments as content
this.listenTo(window.app.Todos, 'all', _.debounce(function() {
this.render();
}));
},
// Clear all completed todo items, destroying their models.
clearCompleted: function() {
_.each( window.app.Todos.completed(), function( todo ) {
todo.destroy();
});
return false;
},
// Each time the stats view is rendered this function will
// be called to generate the context / scope that the template
// will be called with. "context" defaults to "return this"
context: function() {
var remaining = window.app.Todos.remaining().length;
return {
itemText: remaining === 1 ? 'item' : 'items',
completed: window.app.Todos.completed().length,
remaining: remaining
};
},
// Highlight which filter will appear to be active
highlightFilter: function() {
this.$('#filters li a')
.removeClass('selected')
.filter('[href="#/' + ( window.app.TodoFilter || '' ) + '"]')
.addClass('selected');
}
});
\ No newline at end of file
name: 'stats',
events: {
'click #clear-completed': 'clearCompleted',
// The "rendered" event is triggered by Thorax each time render()
// is called and the result of the template has been appended
// to the View's $el
rendered: 'highlightFilter'
},
initialize: function () {
// Whenever the Todos collection changes re-render the stats
// render() needs to be called with no arguments, otherwise calling
// it with arguments will insert the arguments as content
this.listenTo(window.app.Todos, 'all', _.debounce(function () {
this.render();
}));
},
// Clear all completed todo items, destroying their models.
clearCompleted: function () {
_.each(window.app.Todos.completed(), function (todo) {
todo.destroy();
});
return false;
},
// Each time the stats view is rendered this function will
// be called to generate the context / scope that the template
// will be called with. "context" defaults to "return this"
context: function () {
var remaining = window.app.Todos.remaining().length;
return {
itemText: remaining === 1 ? 'item' : 'items',
completed: window.app.Todos.completed().length,
remaining: remaining
};
},
// Highlight which filter will appear to be active
highlightFilter: function () {
this.$('#filters li a')
.removeClass('selected')
.filter('[href="#/' + (window.app.TodoFilter || '') + '"]')
.addClass('selected');
}
});
$(function() {
/*global Thorax, $, ENTER_KEY*/
$(function () {
'use strict';
// Todo Item View
......@@ -23,27 +24,27 @@ $(function() {
// The "rendered" event is triggered by Thorax each time render()
// is called and the result of the template has been appended
// to the View's $el
rendered: function() {
this.$el.toggleClass( 'completed', this.model.get('completed') );
rendered: function () {
this.$el.toggleClass('completed', this.model.get('completed'));
}
},
// Toggle the `"completed"` state of the model.
toggleCompleted: function() {
toggleCompleted: function () {
this.model.toggle();
},
// Switch this view into `"editing"` mode, displaying the input field.
edit: function() {
edit: function () {
this.$el.addClass('editing');
this.$('.edit').focus();
},
// Close the `"editing"` mode, saving changes to the todo.
close: function() {
close: function () {
var value = this.$('.edit').val().trim();
if ( value ) {
if (value) {
this.model.save({ title: value });
} else {
this.clear();
......@@ -53,14 +54,14 @@ $(function() {
},
// If you hit `enter`, we're through editing the item.
updateOnEnter: function( e ) {
if ( e.which === ENTER_KEY ) {
updateOnEnter: function (e) {
if (e.which === ENTER_KEY) {
this.close();
}
},
// Remove the item, destroy the model from *localStorage* and delete its view.
clear: function() {
clear: function () {
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