Commit 2a837ab2 authored by Peter Michaux's avatar Peter Michaux

use assests folder instead of copies part of Maria example

parent 4f11e9ad
ul.completed li.incompleted, ul.completed li.incompleted,
ul.incompleted li.completed { ul.incompleted li.completed {
display: none; display: none;
} }
html,
body {
margin: 0;
padding: 0;
}
button {
margin: 0;
padding: 0;
border: 0;
background: none;
font-size: 100%;
vertical-align: baseline;
font-family: inherit;
color: inherit;
-webkit-appearance: none;
/*-moz-appearance: none;*/
-ms-appearance: none;
-o-appearance: none;
appearance: none;
}
body {
font: 14px 'Helvetica Neue', Helvetica, Arial, sans-serif;
line-height: 1.4em;
background: #eaeaea url('bg.png');
color: #4d4d4d;
width: 550px;
margin: 0 auto;
-webkit-font-smoothing: antialiased;
-moz-font-smoothing: antialiased;
-ms-font-smoothing: antialiased;
-o-font-smoothing: antialiased;
font-smoothing: antialiased;
}
#todoapp {
background: #fff;
background: rgba(255, 255, 255, 0.9);
margin: 130px 0 40px 0;
border: 1px solid #ccc;
position: relative;
border-top-left-radius: 2px;
border-top-right-radius: 2px;
box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.2),
0 25px 50px 0 rgba(0, 0, 0, 0.15);
}
#todoapp:before {
content: '';
border-left: 1px solid #f5d6d6;
border-right: 1px solid #f5d6d6;
width: 2px;
position: absolute;
top: 0;
left: 40px;
height: 100%;
}
#todoapp input::-webkit-input-placeholder {
font-style: italic;
}
#todoapp input:-moz-placeholder {
font-style: italic;
color: #a9a9a9;
}
#todoapp h1 {
position: absolute;
top: -120px;
width: 100%;
font-size: 70px;
font-weight: bold;
text-align: center;
color: #b3b3b3;
color: rgba(255, 255, 255, 0.3);
text-shadow: -1px -1px rgba(0, 0, 0, 0.2);
-webkit-text-rendering: optimizeLegibility;
-moz-text-rendering: optimizeLegibility;
-ms-text-rendering: optimizeLegibility;
-o-text-rendering: optimizeLegibility;
text-rendering: optimizeLegibility;
}
#header {
padding-top: 15px;
border-radius: inherit;
}
#header:before {
content: '';
position: absolute;
top: 0;
right: 0;
left: 0;
height: 15px;
z-index: 2;
border-bottom: 1px solid #6c615c;
background: #8d7d77;
background: -webkit-gradient(linear, left top, left bottom, from(rgba(132, 110, 100, 0.8)),to(rgba(101, 84, 76, 0.8)));
background: -webkit-linear-gradient(top, rgba(132, 110, 100, 0.8), rgba(101, 84, 76, 0.8));
background: -moz-linear-gradient(top, rgba(132, 110, 100, 0.8), rgba(101, 84, 76, 0.8));
background: -o-linear-gradient(top, rgba(132, 110, 100, 0.8), rgba(101, 84, 76, 0.8));
background: -ms-linear-gradient(top, rgba(132, 110, 100, 0.8), rgba(101, 84, 76, 0.8));
background: linear-gradient(top, rgba(132, 110, 100, 0.8), rgba(101, 84, 76, 0.8));
filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#9d8b83', EndColorStr='#847670');
border-top-left-radius: 1px;
border-top-right-radius: 1px;
}
#new-todo,
.edit {
position: relative;
margin: 0;
width: 100%;
font-size: 24px;
font-family: inherit;
line-height: 1.4em;
border: 0;
outline: none;
color: inherit;
padding: 6px;
border: 1px solid #999;
box-shadow: inset 0 -1px 5px 0 rgba(0, 0, 0, 0.2);
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
-ms-box-sizing: border-box;
-o-box-sizing: border-box;
box-sizing: border-box;
-webkit-font-smoothing: antialiased;
-moz-font-smoothing: antialiased;
-ms-font-smoothing: antialiased;
-o-font-smoothing: antialiased;
font-smoothing: antialiased;
}
#new-todo {
padding: 16px 16px 16px 60px;
border: none;
background: rgba(0, 0, 0, 0.02);
z-index: 2;
box-shadow: none;
}
#main {
position: relative;
z-index: 2;
border-top: 1px dotted #adadad;
}
label[for='toggle-all'] {
display: none;
}
#toggle-all {
position: absolute;
top: -42px;
left: -4px;
width: 40px;
text-align: center;
border: none; /* Mobile Safari */
}
#toggle-all:before {
content: '»';
font-size: 28px;
color: #d9d9d9;
padding: 0 25px 7px;
}
#toggle-all:checked:before {
color: #737373;
}
#todo-list {
margin: 0;
padding: 0;
list-style: none;
}
#todo-list li {
position: relative;
font-size: 24px;
border-bottom: 1px dotted #ccc;
}
#todo-list li:last-child {
border-bottom: none;
}
#todo-list li.editing {
border-bottom: none;
padding: 0;
}
#todo-list li.editing .edit {
display: block;
width: 506px;
padding: 13px 17px 12px 17px;
margin: 0 0 0 43px;
}
#todo-list li.editing .view {
display: none;
}
#todo-list li .toggle {
text-align: center;
width: 40px;
/* auto, since non-WebKit browsers doesn't support input styling */
height: auto;
position: absolute;
top: 0;
bottom: 0;
margin: auto 0;
border: none; /* Mobile Safari */
-webkit-appearance: none;
/*-moz-appearance: none;*/
-ms-appearance: none;
-o-appearance: none;
appearance: none;
}
#todo-list li .toggle:after {
content: '✔';
line-height: 43px; /* 40 + a couple of pixels visual adjustment */
font-size: 20px;
color: #d9d9d9;
text-shadow: 0 -1px 0 #bfbfbf;
}
#todo-list li .toggle:checked:after {
color: #85ada7;
text-shadow: 0 1px 0 #669991;
bottom: 1px;
position: relative;
}
#todo-list li label {
word-break: break-word;
padding: 15px;
margin-left: 45px;
display: block;
line-height: 1.2;
-webkit-transition: color 0.4s;
-moz-transition: color 0.4s;
-ms-transition: color 0.4s;
-o-transition: color 0.4s;
transition: color 0.4s;
}
#todo-list li.completed label {
color: #a9a9a9;
text-decoration: line-through;
}
#todo-list li .destroy {
display: none;
position: absolute;
top: 0;
right: 10px;
bottom: 0;
width: 40px;
height: 40px;
margin: auto 0;
font-size: 22px;
color: #a88a8a;
-webkit-transition: all 0.2s;
-moz-transition: all 0.2s;
-ms-transition: all 0.2s;
-o-transition: all 0.2s;
transition: all 0.2s;
}
#todo-list li .destroy:hover {
text-shadow: 0 0 1px #000,
0 0 10px rgba(199, 107, 107, 0.8);
-webkit-transform: scale(1.3);
-moz-transform: scale(1.3);
-ms-transform: scale(1.3);
-o-transform: scale(1.3);
transform: scale(1.3);
}
#todo-list li .destroy:after {
content: '✖';
}
#todo-list li:hover .destroy {
display: block;
}
#todo-list li .edit {
display: none;
}
#todo-list li.editing:last-child {
margin-bottom: -1px;
}
#footer {
color: #777;
padding: 0 15px;
position: absolute;
right: 0;
bottom: -31px;
left: 0;
height: 20px;
z-index: 1;
text-align: center;
}
#footer:before {
content: '';
position: absolute;
right: 0;
bottom: 31px;
left: 0;
height: 50px;
z-index: -1;
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.3),
0 6px 0 -3px rgba(255, 255, 255, 0.8),
0 7px 1px -3px rgba(0, 0, 0, 0.3),
0 43px 0 -6px rgba(255, 255, 255, 0.8),
0 44px 2px -6px rgba(0, 0, 0, 0.2);
}
#todo-count {
float: left;
text-align: left;
}
#filters {
margin: 0;
padding: 0;
list-style: none;
position: absolute;
right: 0;
left: 0;
}
#filters li {
display: inline;
}
#filters li a {
color: #83756f;
margin: 2px;
text-decoration: none;
}
#filters li a.selected {
font-weight: bold;
}
#clear-completed {
float: right;
position: relative;
line-height: 20px;
text-decoration: none;
background: rgba(0, 0, 0, 0.1);
font-size: 11px;
padding: 0 10px;
border-radius: 3px;
box-shadow: 0 -1px 0 0 rgba(0, 0, 0, 0.2);
}
#clear-completed:hover {
background: rgba(0, 0, 0, 0.15);
box-shadow: 0 -1px 0 0 rgba(0, 0, 0, 0.3);
}
#info {
margin: 65px auto 0;
color: #a6a6a6;
font-size: 12px;
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.7);
text-align: center;
}
#info a {
color: inherit;
}
/*
Hack to remove background from Mobile Safari.
Can't use it globally since it destroys checkboxes in Firefox and Opera
*/
@media screen and (-webkit-min-device-pixel-ratio:0) {
#toggle-all,
#todo-list li .toggle {
background: none;
}
#todo-list li .toggle {
height: 40px;
}
#toggle-all {
top: -56px;
left: -15px;
width: 65px;
height: 41px;
-webkit-transform: rotate(90deg);
transform: rotate(90deg);
-webkit-appearance: none;
appearance: none;
}
}
.hidden{
display:none;
}
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<title>Maria • TodoMVC</title> <title>Maria • TodoMVC</title>
<link href="../../../../assets/base.css" rel="stylesheet"> <link href="../../../../assets/base.css" rel="stylesheet">
<link href="css/app.css" rel="stylesheet"> <link href="css/app.css" rel="stylesheet">
</head> </head>
<body> <body>
<noscript> <noscript>
<p>This application uses JavaScript. Please enable JavaScript in your browser and refresh the page.</p> <p>This application uses JavaScript. Please enable JavaScript in your browser and refresh the page.</p>
</noscript> </noscript>
<script> <script>
document.write('<p id="loading">loading...</p>'); document.write('<p id="loading">loading...</p>');
</script> </script>
<script src="../lib/maria/maria.js"></script> <script src="../lib/maria/maria.js"></script>
<script src="../lib/aristocrat/aristocrat.js"></script> <script src="../lib/aristocrat/aristocrat.js"></script>
<script src="../../../../assets/director.min.js"></script> <script src="../../../../assets/director.min.js"></script>
<script src="js/namespace.js"></script> <script src="js/namespace.js"></script>
<script src="js/util.js"></script> <script src="js/util.js"></script>
<script src="js/models/TodoModel.js"></script> <script src="js/models/TodoModel.js"></script>
<script src="js/models/TodosModel.js"></script> <script src="js/models/TodosModel.js"></script>
<script src="js/templates/TodosTemplate.js"></script> <script src="js/templates/TodosTemplate.js"></script>
<script src="js/views/TodosView.js"></script> <script src="js/views/TodosView.js"></script>
<script src="js/controllers/TodosController.js"></script> <script src="js/controllers/TodosController.js"></script>
<script src="js/templates/TodoTemplate.js"></script> <script src="js/templates/TodoTemplate.js"></script>
<script src="js/views/TodoView.js"></script> <script src="js/views/TodoView.js"></script>
<script src="js/controllers/TodoController.js"></script> <script src="js/controllers/TodoController.js"></script>
<script src="js/bootstrap.js"></script> <script src="js/bootstrap.js"></script>
</body> </body>
</html> </html>
maria.on(window, 'load', function() { maria.on(window, 'load', function() {
var loading = document.getElementById('loading'); var loading = document.getElementById('loading');
loading.parentNode.removeChild(loading); loading.parentNode.removeChild(loading);
var model; var model;
if ((typeof localStorage === 'object') && (typeof JSON === 'object')) { if ((typeof localStorage === 'object') && (typeof JSON === 'object')) {
var store = localStorage.getItem('todos-maria'); var store = localStorage.getItem('todos-maria');
model = store ? checkit.TodosModel.fromJSON(JSON.parse(store)) : model = store ? checkit.TodosModel.fromJSON(JSON.parse(store)) :
new checkit.TodosModel(); new checkit.TodosModel();
maria.on(model, 'change', function() { maria.on(model, 'change', function() {
localStorage.setItem('todos-maria', JSON.stringify(model.toJSON())); localStorage.setItem('todos-maria', JSON.stringify(model.toJSON()));
}); });
} }
else { else {
model = new checkit.TodosModel(); model = new checkit.TodosModel();
} }
var routes = { var routes = {
'/': function() { '/': function() {
model.setMode('all'); model.setMode('all');
}, },
'/active': function() { '/active': function() {
model.setMode('incompleted'); model.setMode('incompleted');
}, },
'/completed': function() { '/completed': function() {
model.setMode('completed'); model.setMode('completed');
} }
}; };
var router = Router(routes); var router = Router(routes);
router.init(); router.init();
var view = new checkit.TodosAppView(model); var view = new checkit.TodosAppView(model);
document.body.appendChild(view.build()); document.body.appendChild(view.build());
}); });
maria.Controller.subclass(checkit, 'TodoController', { maria.Controller.subclass(checkit, 'TodoController', {
properties: { properties: {
onClickDestroy: function() { onClickDestroy: function() {
this.getModel().destroy(); this.getModel().destroy();
}, },
onClickToggle: function() { onClickToggle: function() {
this.getModel().toggleCompleted(); this.getModel().toggleCompleted();
}, },
onDblclickLabel: function() { onDblclickLabel: function() {
this.getView().showEdit(); this.getView().showEdit();
}, },
onKeyupEdit: function(evt) { onKeyupEdit: function(evt) {
if (checkit.isEnterKeyCode(evt.keyCode)) { if (checkit.isEnterKeyCode(evt.keyCode)) {
this.onBlurEdit(); this.onBlurEdit();
} }
}, },
onBlurEdit: function() { onBlurEdit: function() {
var model = this.getModel(); var model = this.getModel();
var view = this.getView(); var view = this.getView();
var value = view.getInputValue(); var value = view.getInputValue();
view.showDisplay(); view.showDisplay();
if (checkit.isBlank(value)) { if (checkit.isBlank(value)) {
model.destroy(); model.destroy();
} }
else { else {
model.setTitle(value); model.setTitle(value);
} }
} }
} }
}); });
maria.Controller.subclass(checkit, 'TodosAppController', { maria.Controller.subclass(checkit, 'TodosAppController', {
properties: { properties: {
onKeyupNewTodo: function(evt) { onKeyupNewTodo: function(evt) {
if (checkit.isEnterKeyCode(evt.keyCode)) { if (checkit.isEnterKeyCode(evt.keyCode)) {
var view = this.getView(); var view = this.getView();
var value = view.getInputValue(); var value = view.getInputValue();
if (!checkit.isBlank(value)) { if (!checkit.isBlank(value)) {
var todo = new checkit.TodoModel(); var todo = new checkit.TodoModel();
todo.setTitle(value); todo.setTitle(value);
this.getModel().add(todo); this.getModel().add(todo);
view.clearInput(); view.clearInput();
} }
} }
}, },
onClickToggleAll: function() { onClickToggleAll: function() {
var model = this.getModel(); var model = this.getModel();
if (model.isAllCompleted()) { if (model.isAllCompleted()) {
model.markAllIncompleted(); model.markAllIncompleted();
} }
else { else {
model.markAllCompleted(); model.markAllCompleted();
} }
}, },
onClickClearCompleted: function() { onClickClearCompleted: function() {
this.getModel().deleteCompleted(); this.getModel().deleteCompleted();
} }
} }
}); });
maria.Model.subclass(checkit, 'TodoModel', { maria.Model.subclass(checkit, 'TodoModel', {
properties: { properties: {
_title: '', _title: '',
_completed: false, _completed: false,
getTitle: function() { getTitle: function() {
return this._title; return this._title;
}, },
setTitle: function(title) { setTitle: function(title) {
title = ('' + title).trim(); title = ('' + title).trim();
if (this._title !== title) { if (this._title !== title) {
this._title = title; this._title = title;
this.dispatchEvent({type: 'change'}); this.dispatchEvent({type: 'change'});
} }
}, },
isCompleted: function() { isCompleted: function() {
return this._completed; return this._completed;
}, },
setCompleted: function(completed) { setCompleted: function(completed) {
completed = !!completed; completed = !!completed;
if (this._completed !== completed) { if (this._completed !== completed) {
this._completed = completed; this._completed = completed;
this.dispatchEvent({type: 'change'}); this.dispatchEvent({type: 'change'});
} }
}, },
toggleCompleted: function() { toggleCompleted: function() {
this.setCompleted(!this.isCompleted()); this.setCompleted(!this.isCompleted());
}, },
toJSON: function() { toJSON: function() {
return { return {
title: this._title, title: this._title,
completed: this._completed completed: this._completed
}; };
} }
} }
}); });
checkit.TodoModel.fromJSON = function(todoJSON) { checkit.TodoModel.fromJSON = function(todoJSON) {
var model = new checkit.TodoModel(); var model = new checkit.TodoModel();
model._title = todoJSON.title; model._title = todoJSON.title;
model._completed = todoJSON.completed; model._completed = todoJSON.completed;
return model; return model;
}; };
maria.SetModel.subclass(checkit, 'TodosModel', { maria.SetModel.subclass(checkit, 'TodosModel', {
properties: { properties: {
_mode: 'all', _mode: 'all',
getPossibleModes: function() { getPossibleModes: function() {
return ['all', 'incompleted', 'completed']; return ['all', 'incompleted', 'completed'];
}, },
getMode: function() { getMode: function() {
return this._mode; return this._mode;
}, },
setMode: function(mode) { setMode: function(mode) {
if (this.getPossibleModes().some(function(m) {return m === mode;})) { if (this.getPossibleModes().some(function(m) {return m === mode;})) {
if (this._mode !== mode) { if (this._mode !== mode) {
this._mode = mode; this._mode = mode;
this.dispatchEvent({type: 'change'}); this.dispatchEvent({type: 'change'});
} }
} }
else { else {
throw new Error('checkit.TodosModel.prototype.setMode: unsupported mode "'+mode+'".'); throw new Error('checkit.TodosModel.prototype.setMode: unsupported mode "'+mode+'".');
} }
}, },
getCompleted: function() { getCompleted: function() {
return this.filter(function(todo) { return this.filter(function(todo) {
return todo.isCompleted(); return todo.isCompleted();
}); });
}, },
getIncompleted: function() { getIncompleted: function() {
return this.filter(function(todo) { return this.filter(function(todo) {
return !todo.isCompleted(); return !todo.isCompleted();
}); });
}, },
isAllCompleted: function() { isAllCompleted: function() {
return (this.length > 0) && return (this.length > 0) &&
(this.getCompleted().length === this.length); (this.getCompleted().length === this.length);
}, },
markAllCompleted: function() { markAllCompleted: function() {
this.forEach(function(todo) { this.forEach(function(todo) {
todo.setCompleted(true); todo.setCompleted(true);
}); });
}, },
markAllIncompleted: function() { markAllIncompleted: function() {
this.forEach(function(todo) { this.forEach(function(todo) {
todo.setCompleted(false); todo.setCompleted(false);
}); });
}, },
deleteCompleted: function() { deleteCompleted: function() {
this['delete'].apply(this, this.getCompleted()); this['delete'].apply(this, this.getCompleted());
}, },
toJSON: function() { toJSON: function() {
return this.map(function(todo) { return this.map(function(todo) {
return todo.toJSON(); return todo.toJSON();
}); });
} }
} }
}); });
checkit.TodosModel.fromJSON = function(todosJSON) { checkit.TodosModel.fromJSON = function(todosJSON) {
var model = new checkit.TodosModel(); var model = new checkit.TodosModel();
for (var i = 0, ilen = todosJSON.length; i < ilen; i++) { for (var i = 0, ilen = todosJSON.length; i < ilen; i++) {
model.add(checkit.TodoModel.fromJSON(todosJSON[i])); model.add(checkit.TodoModel.fromJSON(todosJSON[i]));
} }
return model; return model;
}; };
...@@ -7,11 +7,11 @@ ...@@ -7,11 +7,11 @@
// included here. // included here.
// //
checkit.TodoTemplate = checkit.TodoTemplate =
'<li>' + '<li>' +
'<div class="view">' + '<div class="view">' +
'<input class="toggle" type="checkbox">' + '<input class="toggle" type="checkbox">' +
'<label></label>' + '<label></label>' +
'<button class="destroy"></span>' + '<button class="destroy"></span>' +
'</div>' + '</div>' +
'<input class="edit">' + '<input class="edit">' +
'</li>'; '</li>';
...@@ -7,34 +7,34 @@ ...@@ -7,34 +7,34 @@
// included here. // included here.
// //
checkit.TodosAppTemplate = checkit.TodosAppTemplate =
'<section id="todoapp">' + '<section id="todoapp">' +
'<header id="header">' + '<header id="header">' +
'<h1>todos</h1>' + '<h1>todos</h1>' +
'<input id="new-todo" placeholder="What needs to be done?" autofocus>' + '<input id="new-todo" placeholder="What needs to be done?" autofocus>' +
'</header>' + '</header>' +
'<section id="main">' + '<section id="main">' +
'<input id="toggle-all" type="checkbox">' + '<input id="toggle-all" type="checkbox">' +
'<label for="toggle-all">Mark all as completed</label>' + '<label for="toggle-all">Mark all as completed</label>' +
'<ul id="todo-list"></ul>' + '<ul id="todo-list"></ul>' +
'</section>' + '</section>' +
'<footer id="footer">' + '<footer id="footer">' +
'<span id="todo-count"></span>' + '<span id="todo-count"></span>' +
'<ul id="filters">' + '<ul id="filters">' +
'<li>' + '<li>' +
'<a class="all-filter" href="#/">All</a>' + '<a class="all-filter" href="#/">All</a>' +
'</li>' + '</li>' +
'<li>' + '<li>' +
'<a class="incompleted-filter" href="#/active">Active</a>' + '<a class="incompleted-filter" href="#/active">Active</a>' +
'</li>' + '</li>' +
'<li>' + '<li>' +
'<a class="completed-filter" href="#/completed">Completed</a>' + '<a class="completed-filter" href="#/completed">Completed</a>' +
'</li>' + '</li>' +
'</ul>' + '</ul>' +
'<button id="clear-completed"></button>' + '<button id="clear-completed"></button>' +
'</footer>' + '</footer>' +
'</section>' + '</section>' +
'<footer id="info">' + '<footer id="info">' +
'<p>Double-click to edit a todo</p>' + '<p>Double-click to edit a todo</p>' +
'<p>Inspired by the official <a href="https://github.com/maccman/spine.todos">Spine.Todos</a></p>' + '<p>Inspired by the official <a href="https://github.com/maccman/spine.todos">Spine.Todos</a></p>' +
'<p>Created by <a href="http://github.com/petermichaux">Peter Michaux</a></p>' + '<p>Created by <a href="http://github.com/petermichaux">Peter Michaux</a></p>' +
'</footer>'; '</footer>';
checkit.isBlank = function(str) { checkit.isBlank = function(str) {
return /^\s*$/.test(str); return /^\s*$/.test(str);
}; };
checkit.escapeHTML = function(str) { checkit.escapeHTML = function(str) {
return str.replace('&', '&amp;').replace('<', '&lt;'); return str.replace('&', '&amp;').replace('<', '&lt;');
}; };
checkit.isEnterKeyCode = function(keyCode) { checkit.isEnterKeyCode = function(keyCode) {
return keyCode === 13; return keyCode === 13;
}; };
maria.ElementView.subclass(checkit, 'TodoView', { maria.ElementView.subclass(checkit, 'TodoView', {
uiActions: { uiActions: {
'click .destroy': 'onClickDestroy' , 'click .destroy': 'onClickDestroy' ,
'click .toggle' : 'onClickToggle' , 'click .toggle' : 'onClickToggle' ,
'dblclick label' : 'onDblclickLabel', 'dblclick label' : 'onDblclickLabel',
'keyup .edit' : 'onKeyupEdit' , 'keyup .edit' : 'onKeyupEdit' ,
'blur .edit' : 'onBlurEdit' 'blur .edit' : 'onBlurEdit'
}, },
properties: { properties: {
buildData: function() { buildData: function() {
var model = this.getModel(); var model = this.getModel();
var item = this.find('li'); var item = this.find('li');
aristocrat.removeClass(item, '(in|)completed'); aristocrat.removeClass(item, '(in|)completed');
aristocrat.addClass(item, (model.isCompleted() ? 'completed' : 'incompleted')); aristocrat.addClass(item, (model.isCompleted() ? 'completed' : 'incompleted'));
this.find('label').innerHTML = checkit.escapeHTML(model.getTitle()); this.find('label').innerHTML = checkit.escapeHTML(model.getTitle());
this.find('.toggle').checked = model.isCompleted(); this.find('.toggle').checked = model.isCompleted();
}, },
update: function() { update: function() {
this.buildData(); this.buildData();
}, },
showEdit: function() { showEdit: function() {
var input = this.find('.edit'); var input = this.find('.edit');
input.value = this.getModel().getTitle(); input.value = this.getModel().getTitle();
aristocrat.addClass(this.find('li'), 'editing'); aristocrat.addClass(this.find('li'), 'editing');
input.focus(); input.focus();
}, },
showDisplay: function() { showDisplay: function() {
aristocrat.removeClass(this.find('li'), 'editing'); aristocrat.removeClass(this.find('li'), 'editing');
}, },
getInputValue: function() { getInputValue: function() {
return this.find('.edit').value; return this.find('.edit').value;
} }
} }
}); });
maria.SetView.subclass(checkit, 'TodosAppView', { maria.SetView.subclass(checkit, 'TodosAppView', {
uiActions: { uiActions: {
'keyup #new-todo' : 'onKeyupNewTodo' , 'keyup #new-todo' : 'onKeyupNewTodo' ,
'click #toggle-all' : 'onClickToggleAll' , 'click #toggle-all' : 'onClickToggleAll' ,
'click #clear-completed': 'onClickClearCompleted' 'click #clear-completed': 'onClickClearCompleted'
}, },
properties: { properties: {
buildData: function() { buildData: function() {
var model = this.getModel(); var model = this.getModel();
var checkbox = this.find('#toggle-all'); var checkbox = this.find('#toggle-all');
checkbox.checked = model.isAllCompleted(); checkbox.checked = model.isAllCompleted();
checkbox.disabled = model.isEmpty(); checkbox.disabled = model.isEmpty();
var todoList = this.find('#todo-list'); var todoList = this.find('#todo-list');
model.getPossibleModes().forEach(function(mode) { model.getPossibleModes().forEach(function(mode) {
aristocrat.removeClass(todoList, mode); aristocrat.removeClass(todoList, mode);
}); });
aristocrat.addClass(todoList, model.getMode()); aristocrat.addClass(todoList, model.getMode());
var incompletedLength = model.getIncompleted().length; var incompletedLength = model.getIncompleted().length;
this.find('#todo-count').innerHTML = this.find('#todo-count').innerHTML =
'<strong>' + incompletedLength + '</strong> ' + '<strong>' + incompletedLength + '</strong> ' +
((incompletedLength === 1) ? 'item' : 'items') + ((incompletedLength === 1) ? 'item' : 'items') +
' left'; ' left';
var selected = this.find('.selected'); var selected = this.find('.selected');
if (selected) { if (selected) {
aristocrat.removeClass(selected, 'selected'); aristocrat.removeClass(selected, 'selected');
} }
aristocrat.addClass(this.find('.' + model.getMode() + '-filter'), 'selected'); aristocrat.addClass(this.find('.' + model.getMode() + '-filter'), 'selected');
var completedLength = model.getCompleted().length; var completedLength = model.getCompleted().length;
var clearButton = this.find('#clear-completed'); var clearButton = this.find('#clear-completed');
clearButton.style.display = (completedLength > 0) ? '' : 'none'; clearButton.style.display = (completedLength > 0) ? '' : 'none';
clearButton.innerHTML = 'Clear completed (' + completedLength + ')'; clearButton.innerHTML = 'Clear completed (' + completedLength + ')';
}, },
update: function(evt) { update: function(evt) {
maria.SetView.prototype.update.call(this, evt); maria.SetView.prototype.update.call(this, evt);
this.buildData(); this.buildData();
}, },
getContainerEl: function() { getContainerEl: function() {
// child views will be appended to this element // child views will be appended to this element
return this.find('#todo-list'); return this.find('#todo-list');
}, },
createChildView: function(todoModel) { createChildView: function(todoModel) {
return new checkit.TodoView(todoModel); return new checkit.TodoView(todoModel);
}, },
getInputValue: function() { getInputValue: function() {
return this.find('#new-todo').value; return this.find('#new-todo').value;
}, },
clearInput: function() { clearInput: function() {
this.find('#new-todo').value = ''; this.find('#new-todo').value = '';
} }
} }
}); });
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