Commit 54918bd4 authored by Pascal Hartig's avatar Pascal Hartig

Merge branch 'stephenplusplus-maria' into gh-pages

parents 47a21f2d d019d29f
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
"name": "agilityjs", "name": "agilityjs",
"version": "0.0.0", "version": "0.0.0",
"dependencies": { "dependencies": {
"todomvc-common": "~0.1.2", "todomvc-common": "~0.1.4",
"agility": "~0.1.3", "agility": "~0.1.3",
"jquery": "~1.9.1" "jquery": "~1.9.1"
} }
......
...@@ -2,13 +2,12 @@ ...@@ -2,13 +2,12 @@
'use strict'; 'use strict';
if (location.hostname === 'todomvc.com') { if (location.hostname === 'todomvc.com') {
window._gaq=[['_setAccount','UA-31081062-1'],['_trackPageview']];(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];g.src='//www.google-analytics.com/ga.js';s.parentNode.insertBefore(g,s)}(document,'script')); window._gaq = [['_setAccount','UA-31081062-1'],['_trackPageview']];(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];g.src='//www.google-analytics.com/ga.js';s.parentNode.insertBefore(g,s)}(document,'script'));
} }
function getSourcePath() { function getSourcePath() {
// If accessed via addyosmani.github.com/todomvc/, strip the project // If accessed via addyosmani.github.io/todomvc/, strip the project path.
// path. if (location.hostname.indexOf('github.io') > 0) {
if (location.hostname.indexOf('github.com') > 0) {
return location.pathname.replace(/todomvc\//, ''); return location.pathname.replace(/todomvc\//, '');
} }
return location.pathname; return location.pathname;
...@@ -28,5 +27,12 @@ ...@@ -28,5 +27,12 @@
} }
} }
function redirect() {
if (location.hostname === 'addyosmani.github.io') {
location.href = location.href.replace('addyosmani.github.io/todomvc', 'todomvc.com');
}
}
appendSourceLink(); appendSourceLink();
redirect();
})(); })();
{
"name": "todomvc-common",
"version": "0.1.0",
"gitHead": "63628bfbeff187f6db5bc982a0a222e66e62901e",
"_id": "todomvc-common@0.1.0",
"readme": "ERROR: No README.md file found!",
"description": "ERROR: No README.md file found!",
"repository": {
"type": "git",
"url": "git://github.com/TasteJS/todomvc-common.git"
}
}
\ No newline at end of file
...@@ -3,6 +3,6 @@ ...@@ -3,6 +3,6 @@
"version": "0.0.0", "version": "0.0.0",
"dependencies": { "dependencies": {
"angular": "~1.0.5", "angular": "~1.0.5",
"todomvc-common": "~0.1.2" "todomvc-common": "~0.1.4"
} }
} }
...@@ -2,13 +2,12 @@ ...@@ -2,13 +2,12 @@
'use strict'; 'use strict';
if (location.hostname === 'todomvc.com') { if (location.hostname === 'todomvc.com') {
window._gaq=[['_setAccount','UA-31081062-1'],['_trackPageview']];(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];g.src='//www.google-analytics.com/ga.js';s.parentNode.insertBefore(g,s)}(document,'script')); window._gaq = [['_setAccount','UA-31081062-1'],['_trackPageview']];(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];g.src='//www.google-analytics.com/ga.js';s.parentNode.insertBefore(g,s)}(document,'script'));
} }
function getSourcePath() { function getSourcePath() {
// If accessed via addyosmani.github.com/todomvc/, strip the project // If accessed via addyosmani.github.io/todomvc/, strip the project path.
// path. if (location.hostname.indexOf('github.io') > 0) {
if (location.hostname.indexOf('github.com') > 0) {
return location.pathname.replace(/todomvc\//, ''); return location.pathname.replace(/todomvc\//, '');
} }
return location.pathname; return location.pathname;
...@@ -28,5 +27,12 @@ ...@@ -28,5 +27,12 @@
} }
} }
function redirect() {
if (location.hostname === 'addyosmani.github.io') {
location.href = location.href.replace('addyosmani.github.io/todomvc', 'todomvc.com');
}
}
appendSourceLink(); appendSourceLink();
redirect();
})(); })();
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
"version": "0.0.0", "version": "0.0.0",
"dependencies": { "dependencies": {
"angular": "~1.0.5", "angular": "~1.0.5",
"todomvc-common": "~0.1.2" "todomvc-common": "~0.1.4"
}, },
"devDependencies": { "devDependencies": {
"angular-mocks": "~1.0.5" "angular-mocks": "~1.0.5"
......
...@@ -2,13 +2,12 @@ ...@@ -2,13 +2,12 @@
'use strict'; 'use strict';
if (location.hostname === 'todomvc.com') { if (location.hostname === 'todomvc.com') {
window._gaq=[['_setAccount','UA-31081062-1'],['_trackPageview']];(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];g.src='//www.google-analytics.com/ga.js';s.parentNode.insertBefore(g,s)}(document,'script')); window._gaq = [['_setAccount','UA-31081062-1'],['_trackPageview']];(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];g.src='//www.google-analytics.com/ga.js';s.parentNode.insertBefore(g,s)}(document,'script'));
} }
function getSourcePath() { function getSourcePath() {
// If accessed via addyosmani.github.com/todomvc/, strip the project // If accessed via addyosmani.github.io/todomvc/, strip the project path.
// path. if (location.hostname.indexOf('github.io') > 0) {
if (location.hostname.indexOf('github.com') > 0) {
return location.pathname.replace(/todomvc\//, ''); return location.pathname.replace(/todomvc\//, '');
} }
return location.pathname; return location.pathname;
...@@ -28,5 +27,12 @@ ...@@ -28,5 +27,12 @@
} }
} }
function redirect() {
if (location.hostname === 'addyosmani.github.io') {
location.href = location.href.replace('addyosmani.github.io/todomvc', 'todomvc.com');
}
}
appendSourceLink(); appendSourceLink();
redirect();
})(); })();
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
"backbone": "~1.0.0", "backbone": "~1.0.0",
"underscore": "~1.4.4", "underscore": "~1.4.4",
"jquery": "~1.9.1", "jquery": "~1.9.1",
"todomvc-common": "~0.1.2", "todomvc-common": "~0.1.4",
"backbone.localStorage": "~1.1.0" "backbone.localStorage": "~1.1.0"
} }
} }
...@@ -2,13 +2,12 @@ ...@@ -2,13 +2,12 @@
'use strict'; 'use strict';
if (location.hostname === 'todomvc.com') { if (location.hostname === 'todomvc.com') {
window._gaq=[['_setAccount','UA-31081062-1'],['_trackPageview']];(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];g.src='//www.google-analytics.com/ga.js';s.parentNode.insertBefore(g,s)}(document,'script')); window._gaq = [['_setAccount','UA-31081062-1'],['_trackPageview']];(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];g.src='//www.google-analytics.com/ga.js';s.parentNode.insertBefore(g,s)}(document,'script'));
} }
function getSourcePath() { function getSourcePath() {
// If accessed via addyosmani.github.com/todomvc/, strip the project // If accessed via addyosmani.github.io/todomvc/, strip the project path.
// path. if (location.hostname.indexOf('github.io') > 0) {
if (location.hostname.indexOf('github.com') > 0) {
return location.pathname.replace(/todomvc\//, ''); return location.pathname.replace(/todomvc\//, '');
} }
return location.pathname; return location.pathname;
...@@ -28,5 +27,12 @@ ...@@ -28,5 +27,12 @@
} }
} }
function redirect() {
if (location.hostname === 'addyosmani.github.io') {
location.href = location.href.replace('addyosmani.github.io/todomvc', 'todomvc.com');
}
}
appendSourceLink(); appendSourceLink();
redirect();
})(); })();
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
"dependencies": { "dependencies": {
"jquery": "~1.9.1", "jquery": "~1.9.1",
"canjs": "~1.1.4", "canjs": "~1.1.4",
"canjs-localstorage": "~0.1.0" "canjs-localstorage": "~0.1.0",
"todomvc-common": "~0.1.4"
} }
} }
...@@ -2,13 +2,12 @@ ...@@ -2,13 +2,12 @@
'use strict'; 'use strict';
if (location.hostname === 'todomvc.com') { if (location.hostname === 'todomvc.com') {
window._gaq=[['_setAccount','UA-31081062-1'],['_trackPageview']];(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];g.src='//www.google-analytics.com/ga.js';s.parentNode.insertBefore(g,s)}(document,'script')); window._gaq = [['_setAccount','UA-31081062-1'],['_trackPageview']];(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];g.src='//www.google-analytics.com/ga.js';s.parentNode.insertBefore(g,s)}(document,'script'));
} }
function getSourcePath() { function getSourcePath() {
// If accessed via addyosmani.github.com/todomvc/, strip the project // If accessed via addyosmani.github.io/todomvc/, strip the project path.
// path. if (location.hostname.indexOf('github.io') > 0) {
if (location.hostname.indexOf('github.com') > 0) {
return location.pathname.replace(/todomvc\//, ''); return location.pathname.replace(/todomvc\//, '');
} }
return location.pathname; return location.pathname;
...@@ -28,5 +27,12 @@ ...@@ -28,5 +27,12 @@
} }
} }
function redirect() {
if (location.hostname === 'addyosmani.github.io') {
location.href = location.href.replace('addyosmani.github.io/todomvc', 'todomvc.com');
}
}
appendSourceLink(); appendSourceLink();
redirect();
})(); })();
{
"name": "todomvc-common",
"version": "0.1.1",
"gitHead": "639b3e310c9fd6970e8ccda893ad564915e715f5",
"_id": "todomvc-common@0.1.1",
"readme": "ERROR: No README.md file found!",
"description": "ERROR: No README.md file found!",
"repository": {
"type": "git",
"url": "git://github.com/tastejs/todomvc-common.git"
}
}
\ No newline at end of file
...@@ -2,6 +2,6 @@ ...@@ -2,6 +2,6 @@
"name": "todomvc-closure", "name": "todomvc-closure",
"version": "0.0.0", "version": "0.0.0",
"dependencies": { "dependencies": {
"todomvc-common": "~0.1.2" "todomvc-common": "~0.1.4"
} }
} }
...@@ -6,9 +6,8 @@ ...@@ -6,9 +6,8 @@
} }
function getSourcePath() { function getSourcePath() {
// If accessed via addyosmani.github.com/todomvc/, strip the project // If accessed via addyosmani.github.io/todomvc/, strip the project path.
// path. if (location.hostname.indexOf('github.io') > 0) {
if (location.hostname.indexOf('github.com') > 0) {
return location.pathname.replace(/todomvc\//, ''); return location.pathname.replace(/todomvc\//, '');
} }
return location.pathname; return location.pathname;
...@@ -29,9 +28,8 @@ ...@@ -29,9 +28,8 @@
} }
function redirect() { function redirect() {
if (location.hostname === 'addyosmani.github.com') { if (location.hostname === 'addyosmani.github.io') {
location.href = location.href.replace('addyosmani.github.com/todomvc', location.href = location.href.replace('addyosmani.github.io/todomvc', 'todomvc.com');
'todomvc.com');
} }
} }
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
"name": "todomvc-emberjs", "name": "todomvc-emberjs",
"version": "0.0.0", "version": "0.0.0",
"dependencies": { "dependencies": {
"todomvc-common": "~0.1.2", "todomvc-common": "~0.1.4",
"jquery": "~1.9.1", "jquery": "~1.9.1",
"handlebars": "~1.0.0-rc.3", "handlebars": "~1.0.0-rc.3",
"ember": "~1.0.0-rc.1", "ember": "~1.0.0-rc.1",
......
...@@ -2,13 +2,12 @@ ...@@ -2,13 +2,12 @@
'use strict'; 'use strict';
if (location.hostname === 'todomvc.com') { if (location.hostname === 'todomvc.com') {
window._gaq=[['_setAccount','UA-31081062-1'],['_trackPageview']];(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];g.src='//www.google-analytics.com/ga.js';s.parentNode.insertBefore(g,s)}(document,'script')); window._gaq = [['_setAccount','UA-31081062-1'],['_trackPageview']];(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];g.src='//www.google-analytics.com/ga.js';s.parentNode.insertBefore(g,s)}(document,'script'));
} }
function getSourcePath() { function getSourcePath() {
// If accessed via addyosmani.github.com/todomvc/, strip the project // If accessed via addyosmani.github.io/todomvc/, strip the project path.
// path. if (location.hostname.indexOf('github.io') > 0) {
if (location.hostname.indexOf('github.com') > 0) {
return location.pathname.replace(/todomvc\//, ''); return location.pathname.replace(/todomvc\//, '');
} }
return location.pathname; return location.pathname;
...@@ -28,5 +27,12 @@ ...@@ -28,5 +27,12 @@
} }
} }
function redirect() {
if (location.hostname === 'addyosmani.github.io') {
location.href = location.href.replace('addyosmani.github.io/todomvc', 'todomvc.com');
}
}
appendSourceLink(); appendSourceLink();
redirect();
})(); })();
...@@ -4,6 +4,6 @@ ...@@ -4,6 +4,6 @@
"dependencies": { "dependencies": {
"jquery": "~1.9.1", "jquery": "~1.9.1",
"handlebars": "~1.0.0-rc.3", "handlebars": "~1.0.0-rc.3",
"todomvc-common": "~0.1.2" "todomvc-common": "~0.1.4"
} }
} }
...@@ -2,13 +2,12 @@ ...@@ -2,13 +2,12 @@
'use strict'; 'use strict';
if (location.hostname === 'todomvc.com') { if (location.hostname === 'todomvc.com') {
window._gaq=[['_setAccount','UA-31081062-1'],['_trackPageview']];(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];g.src='//www.google-analytics.com/ga.js';s.parentNode.insertBefore(g,s)}(document,'script')); window._gaq = [['_setAccount','UA-31081062-1'],['_trackPageview']];(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];g.src='//www.google-analytics.com/ga.js';s.parentNode.insertBefore(g,s)}(document,'script'));
} }
function getSourcePath() { function getSourcePath() {
// If accessed via addyosmani.github.com/todomvc/, strip the project // If accessed via addyosmani.github.io/todomvc/, strip the project path.
// path. if (location.hostname.indexOf('github.io') > 0) {
if (location.hostname.indexOf('github.com') > 0) {
return location.pathname.replace(/todomvc\//, ''); return location.pathname.replace(/todomvc\//, '');
} }
return location.pathname; return location.pathname;
...@@ -28,5 +27,12 @@ ...@@ -28,5 +27,12 @@
} }
} }
function redirect() {
if (location.hostname === 'addyosmani.github.io') {
location.href = location.href.replace('addyosmani.github.io/todomvc', 'todomvc.com');
}
}
appendSourceLink(); appendSourceLink();
redirect();
})(); })();
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
"name": "todomvc-knockoutjs", "name": "todomvc-knockoutjs",
"version": "0.0.0", "version": "0.0.0",
"dependencies": { "dependencies": {
"todomvc-common": "~0.1.2", "todomvc-common": "~0.1.4",
"knockout.js": "~2.2.0rc", "knockout.js": "~2.2.0rc",
"director": "~1.1.10" "director": "~1.1.10"
} }
......
...@@ -2,13 +2,12 @@ ...@@ -2,13 +2,12 @@
'use strict'; 'use strict';
if (location.hostname === 'todomvc.com') { if (location.hostname === 'todomvc.com') {
window._gaq=[['_setAccount','UA-31081062-1'],['_trackPageview']];(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];g.src='//www.google-analytics.com/ga.js';s.parentNode.insertBefore(g,s)}(document,'script')); window._gaq = [['_setAccount','UA-31081062-1'],['_trackPageview']];(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];g.src='//www.google-analytics.com/ga.js';s.parentNode.insertBefore(g,s)}(document,'script'));
} }
function getSourcePath() { function getSourcePath() {
// If accessed via addyosmani.github.com/todomvc/, strip the project // If accessed via addyosmani.github.io/todomvc/, strip the project path.
// path. if (location.hostname.indexOf('github.io') > 0) {
if (location.hostname.indexOf('github.com') > 0) {
return location.pathname.replace(/todomvc\//, ''); return location.pathname.replace(/todomvc\//, '');
} }
return location.pathname; return location.pathname;
...@@ -28,5 +27,12 @@ ...@@ -28,5 +27,12 @@
} }
} }
function redirect() {
if (location.hostname === 'addyosmani.github.io') {
location.href = location.href.replace('addyosmani.github.io/todomvc', 'todomvc.com');
}
}
appendSourceLink(); appendSourceLink();
redirect();
})(); })();
{
"name": "todomvc-maria",
"version": "0.0.0",
"dependencies": {
"todomvc-common": "~0.1.4",
"director": "~1.2.0"
}
}
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;
}
(function () {
'use strict';
if (location.hostname === 'todomvc.com') {
window._gaq = [['_setAccount','UA-31081062-1'],['_trackPageview']];(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];g.src='//www.google-analytics.com/ga.js';s.parentNode.insertBefore(g,s)}(document,'script'));
}
function getSourcePath() {
// If accessed via addyosmani.github.io/todomvc/, strip the project path.
if (location.hostname.indexOf('github.io') > 0) {
return location.pathname.replace(/todomvc\//, '');
}
return location.pathname;
}
function appendSourceLink() {
var sourceLink = document.createElement('a');
var paragraph = document.createElement('p');
var footer = document.getElementById('info');
var urlBase = 'https://github.com/addyosmani/todomvc/tree/gh-pages';
if (footer) {
sourceLink.href = urlBase + getSourcePath();
sourceLink.appendChild(document.createTextNode('Check out the source'));
paragraph.appendChild(sourceLink);
footer.appendChild(paragraph);
}
}
function redirect() {
if (location.hostname === 'addyosmani.github.io') {
location.href = location.href.replace('addyosmani.github.io/todomvc', 'todomvc.com');
}
}
appendSourceLink();
redirect();
})();
...@@ -3,16 +3,20 @@ ...@@ -3,16 +3,20 @@
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<title>Maria • TodoMVC</title> <title>Maria • TodoMVC</title>
<link href="components/todomvc-common/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>
<footer id="info">
<p>Double-click to edit a todo</p>
<p>Created by <a href="http://github.com/petermichaux">Peter Michaux</a></p>
<p>Part of <a href="http://todomvc.com">TodoMVC</a></p>
</footer>
<script src="../lib/maria/maria.js"></script> <script src="components/todomvc-common/base.js"></script>
<script src="../lib/aristocrat/aristocrat.js"></script> <script src="components/director/build/director.js"></script>
<script src="../../../assets/director.min.js"></script> <script src="lib/maria/maria.js"></script>
<script src="lib/aristocrat/aristocrat.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>
...@@ -25,12 +29,5 @@ ...@@ -25,12 +29,5 @@
<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>
<footer id="info">
<p>Double-click to edit a todo</p>
<p>Created by <a href="http://github.com/petermichaux">Peter Michaux</a></p>
<p>Part of <a href="http://todomvc.com">TodoMVC</a></p>
</footer>
</body> </body>
</html> </html>
/*jshint strict: false */ /*jshint strict: false */
/*global maria, Router, checkit */ /*global maria, Router, checkit */
maria.on(window, 'load', function() { maria.on(window, 'load', function () {
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)) :
new checkit.TodosModel(); if (store) {
maria.on(model, 'change', function() { model = checkit.TodosModel.fromJSON(JSON.parse(store));
} else {
model = new checkit.TodosModel();
}
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 = new Router(routes);
router.init(); router.init();
var view = new checkit.TodosAppView(model); var view = new checkit.TodosAppView(model);
......
...@@ -3,35 +3,41 @@ ...@@ -3,35 +3,41 @@
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) {
var keyCode = evt.keyCode; var keyCode = evt.keyCode;
if (checkit.isEnterKeyCode(keyCode)) { if (checkit.isEnterKeyCode(keyCode)) {
this.onBlurEdit(); this.onBlurEdit();
} } else if (checkit.isEscapeKeyCode(keyCode)) {
else if (checkit.isEscapeKeyCode(keyCode)) {
var view = this.getView(); var view = this.getView();
view.resetEdit(); view.resetEdit();
view.showDisplay(); view.showDisplay();
} }
}, },
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);
} }
} }
......
...@@ -3,28 +3,33 @@ ...@@ -3,28 +3,33 @@
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();
} }
} }
......
...@@ -5,30 +5,40 @@ maria.Model.subclass(checkit, 'TodoModel', { ...@@ -5,30 +5,40 @@ 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
...@@ -37,9 +47,11 @@ maria.Model.subclass(checkit, 'TodoModel', { ...@@ -37,9 +47,11 @@ maria.Model.subclass(checkit, 'TodoModel', {
} }
}); });
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;
}; };
...@@ -4,61 +4,79 @@ ...@@ -4,61 +4,79 @@
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) {
if (this.getPossibleModes().some(function(m) {return m === mode;})) { setMode: function (mode) {
var modePossible = this.getPossibleModes().some(function (m) {
return m === mode;
});
if (modePossible) {
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() {
return this.filter(function(todo) { getCompleted: function () {
return this.filter(function (todo) {
return todo.isCompleted(); return todo.isCompleted();
}); });
}, },
getIncompleted: function() {
return this.filter(function(todo) { getIncompleted: function () {
return this.filter(function (todo) {
return !todo.isCompleted(); return !todo.isCompleted();
}); });
}, },
isAllCompleted: function() {
isAllCompleted: function () {
return (this.length > 0) && (this.getCompleted().length === this.length); return (this.length > 0) && (this.getCompleted().length === this.length);
}, },
markAllCompleted: function() {
this.forEach(function(todo) { markAllCompleted: function () {
this.forEach(function (todo) {
todo.setCompleted(true); todo.setCompleted(true);
}); });
}, },
markAllIncompleted: function() {
this.forEach(function(todo) { markAllIncompleted: function () {
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() {
return this.map(function(todo) { toJSON: function () {
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++) { var i;
var ilen;
for (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;
}; };
/*jshint strict: false */ /*jshint strict: false */
/*global checkit */ /*global checkit */
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 String(str) return String(str)
.replace(/&(?!\w+;)/g, '&amp;') .replace(/&(?!\w+;)/g, '&amp;')
.replace(/</g, '&lt;') .replace(/</g, '&lt;')
...@@ -13,10 +13,10 @@ checkit.escapeHTML = function(str) { ...@@ -13,10 +13,10 @@ checkit.escapeHTML = function(str) {
.replace(/"/g, '&quot;'); .replace(/"/g, '&quot;');
}; };
checkit.isEnterKeyCode = function(keyCode) { checkit.isEnterKeyCode = function (keyCode) {
return keyCode === 13; return keyCode === 13;
}; };
checkit.isEscapeKeyCode = function(keyCode) { checkit.isEscapeKeyCode = function (keyCode) {
return keyCode === 27; return keyCode === 27;
}; };
...@@ -3,17 +3,18 @@ ...@@ -3,17 +3,18 @@
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'));
...@@ -21,23 +22,32 @@ maria.ElementView.subclass(checkit, 'TodoView', { ...@@ -21,23 +22,32 @@ maria.ElementView.subclass(checkit, 'TodoView', {
this.find('.toggle').checked = model.isCompleted(); this.find('.toggle').checked = model.isCompleted();
}, },
update: function() {
update: function () {
this.buildData(); this.buildData();
}, },
resetEdit: function() {
resetEdit: function () {
var input = this.find('.edit'); var input = this.find('.edit');
input.value = this.getModel().getTitle(); input.value = this.getModel().getTitle();
}, },
showEdit: function() {
this.resetEdit(); showEdit: function () {
var input = this.find('.edit'); var input = this.find('.edit');
this.resetEdit();
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;
} }
} }
......
...@@ -3,12 +3,13 @@ ...@@ -3,12 +3,13 @@
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 length = model.length; var length = model.length;
...@@ -20,7 +21,7 @@ maria.SetView.subclass(checkit, 'TodosAppView', { ...@@ -20,7 +21,7 @@ maria.SetView.subclass(checkit, 'TodosAppView', {
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());
...@@ -42,21 +43,27 @@ maria.SetView.subclass(checkit, 'TodosAppView', { ...@@ -42,21 +43,27 @@ maria.SetView.subclass(checkit, 'TodosAppView', {
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 = '';
} }
} }
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
"version": "0.0.0", "version": "0.0.0",
"dependencies": { "dependencies": {
"spine": "~1.0.9", "spine": "~1.0.9",
"todomvc-common": "~0.1.2", "todomvc-common": "~0.1.4",
"handlebars": "~1.0.0-rc.3", "handlebars": "~1.0.0-rc.3",
"jquery": "~1.8.3" "jquery": "~1.8.3"
} }
......
...@@ -2,13 +2,12 @@ ...@@ -2,13 +2,12 @@
'use strict'; 'use strict';
if (location.hostname === 'todomvc.com') { if (location.hostname === 'todomvc.com') {
window._gaq=[['_setAccount','UA-31081062-1'],['_trackPageview']];(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];g.src='//www.google-analytics.com/ga.js';s.parentNode.insertBefore(g,s)}(document,'script')); window._gaq = [['_setAccount','UA-31081062-1'],['_trackPageview']];(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];g.src='//www.google-analytics.com/ga.js';s.parentNode.insertBefore(g,s)}(document,'script'));
} }
function getSourcePath() { function getSourcePath() {
// If accessed via addyosmani.github.com/todomvc/, strip the project // If accessed via addyosmani.github.io/todomvc/, strip the project path.
// path. if (location.hostname.indexOf('github.io') > 0) {
if (location.hostname.indexOf('github.com') > 0) {
return location.pathname.replace(/todomvc\//, ''); return location.pathname.replace(/todomvc\//, '');
} }
return location.pathname; return location.pathname;
...@@ -28,5 +27,12 @@ ...@@ -28,5 +27,12 @@
} }
} }
function redirect() {
if (location.hostname === 'addyosmani.github.io') {
location.href = location.href.replace('addyosmani.github.io/todomvc', 'todomvc.com');
}
}
appendSourceLink(); appendSourceLink();
redirect();
})(); })();
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
"backbone": "~0.9.10", "backbone": "~0.9.10",
"underscore": "~1.4.4", "underscore": "~1.4.4",
"jquery": "~1.9.1", "jquery": "~1.9.1",
"todomvc-common": "~0.1.2", "todomvc-common": "~0.1.4",
"backbone.localStorage": "~1.1.0", "backbone.localStorage": "~1.1.0",
"requirejs": "~2.1.5", "requirejs": "~2.1.5",
"requirejs-text": "~2.0.5" "requirejs-text": "~2.0.5"
......
...@@ -2,13 +2,12 @@ ...@@ -2,13 +2,12 @@
'use strict'; 'use strict';
if (location.hostname === 'todomvc.com') { if (location.hostname === 'todomvc.com') {
window._gaq=[['_setAccount','UA-31081062-1'],['_trackPageview']];(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];g.src='//www.google-analytics.com/ga.js';s.parentNode.insertBefore(g,s)}(document,'script')); window._gaq = [['_setAccount','UA-31081062-1'],['_trackPageview']];(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];g.src='//www.google-analytics.com/ga.js';s.parentNode.insertBefore(g,s)}(document,'script'));
} }
function getSourcePath() { function getSourcePath() {
// If accessed via addyosmani.github.com/todomvc/, strip the project // If accessed via addyosmani.github.io/todomvc/, strip the project path.
// path. if (location.hostname.indexOf('github.io') > 0) {
if (location.hostname.indexOf('github.com') > 0) {
return location.pathname.replace(/todomvc\//, ''); return location.pathname.replace(/todomvc\//, '');
} }
return location.pathname; return location.pathname;
...@@ -28,5 +27,12 @@ ...@@ -28,5 +27,12 @@
} }
} }
function redirect() {
if (location.hostname === 'addyosmani.github.io') {
location.href = location.href.replace('addyosmani.github.io/todomvc', 'todomvc.com');
}
}
appendSourceLink(); appendSourceLink();
redirect();
})(); })();
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
"es5-shim": "git://github.com/kriskowal/es5-shim.git#2.0.0", "es5-shim": "git://github.com/kriskowal/es5-shim.git#2.0.0",
"flight": "~1.0.3", "flight": "~1.0.3",
"jquery": "1.8.3", "jquery": "1.8.3",
"requirejs": "~2.1.5" "requirejs": "~2.1.5",
"todomvc-common": "~0.1.4"
} }
} }
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;
}
(function () {
'use strict';
if (location.hostname === 'todomvc.com') {
window._gaq = [['_setAccount','UA-31081062-1'],['_trackPageview']];(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];g.src='//www.google-analytics.com/ga.js';s.parentNode.insertBefore(g,s)}(document,'script'));
}
function getSourcePath() {
// If accessed via addyosmani.github.io/todomvc/, strip the project path.
if (location.hostname.indexOf('github.io') > 0) {
return location.pathname.replace(/todomvc\//, '');
}
return location.pathname;
}
function appendSourceLink() {
var sourceLink = document.createElement('a');
var paragraph = document.createElement('p');
var footer = document.getElementById('info');
var urlBase = 'https://github.com/addyosmani/todomvc/tree/gh-pages';
if (footer) {
sourceLink.href = urlBase + getSourcePath();
sourceLink.appendChild(document.createTextNode('Check out the source'));
paragraph.appendChild(sourceLink);
footer.appendChild(paragraph);
}
}
function redirect() {
if (location.hostname === 'addyosmani.github.io') {
location.href = location.href.replace('addyosmani.github.io/todomvc', 'todomvc.com');
}
}
appendSourceLink();
redirect();
})();
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<meta charset="utf-8"> <meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Flight • Todo</title> <title>Flight • Todo</title>
<link rel="stylesheet" href="../../assets/base.css"> <link rel="stylesheet" href="components/todomvc-common/base.css">
</head> </head>
<body> <body>
<section id="todoapp"> <section id="todoapp">
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
<p>Created by <a href="http://github.com/mkuklis">Michal Kuklis</a></p> <p>Created by <a href="http://github.com/mkuklis">Michal Kuklis</a></p>
<p>Part of <a href="http://todomvc.com">TodoMVC</a></p> <p>Part of <a href="http://todomvc.com">TodoMVC</a></p>
</footer> </footer>
<script src="../../assets/base.js"></script> <script src="components/todomvc-common/base.js"></script>
<script data-main="app/js/main" src="components/requirejs/requirejs.js"></script> <script data-main="app/js/main" src="components/requirejs/requirejs.js"></script>
</body> </body>
</html> </html>
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
"name": "todomvc-backbone-marionette", "name": "todomvc-backbone-marionette",
"version": "0.0.0", "version": "0.0.0",
"dependencies": { "dependencies": {
"todomvc-common": "~0.1.2", "todomvc-common": "~0.1.4",
"underscore": "~1.4.4", "underscore": "~1.4.4",
"backbone.localStorage": "~1.1.0", "backbone.localStorage": "~1.1.0",
"backbone.marionette": "~1.0.0-rc6" "backbone.marionette": "~1.0.0-rc6"
......
...@@ -2,13 +2,12 @@ ...@@ -2,13 +2,12 @@
'use strict'; 'use strict';
if (location.hostname === 'todomvc.com') { if (location.hostname === 'todomvc.com') {
window._gaq=[['_setAccount','UA-31081062-1'],['_trackPageview']];(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];g.src='//www.google-analytics.com/ga.js';s.parentNode.insertBefore(g,s)}(document,'script')); window._gaq = [['_setAccount','UA-31081062-1'],['_trackPageview']];(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];g.src='//www.google-analytics.com/ga.js';s.parentNode.insertBefore(g,s)}(document,'script'));
} }
function getSourcePath() { function getSourcePath() {
// If accessed via addyosmani.github.com/todomvc/, strip the project // If accessed via addyosmani.github.io/todomvc/, strip the project path.
// path. if (location.hostname.indexOf('github.io') > 0) {
if (location.hostname.indexOf('github.com') > 0) {
return location.pathname.replace(/todomvc\//, ''); return location.pathname.replace(/todomvc\//, '');
} }
return location.pathname; return location.pathname;
...@@ -28,5 +27,12 @@ ...@@ -28,5 +27,12 @@
} }
} }
function redirect() {
if (location.hostname === 'addyosmani.github.io') {
location.href = location.href.replace('addyosmani.github.io/todomvc', 'todomvc.com');
}
}
appendSourceLink(); appendSourceLink();
redirect();
})(); })();
...@@ -5,6 +5,6 @@ ...@@ -5,6 +5,6 @@
"olives": "~1.4.0", "olives": "~1.4.0",
"emily": "~1.3.5", "emily": "~1.3.5",
"requirejs": "~2.1.5", "requirejs": "~2.1.5",
"todomvc-common": "~0.1.2" "todomvc-common": "~0.1.4"
} }
} }
...@@ -6,9 +6,8 @@ ...@@ -6,9 +6,8 @@
} }
function getSourcePath() { function getSourcePath() {
// If accessed via addyosmani.github.com/todomvc/, strip the project // If accessed via addyosmani.github.io/todomvc/, strip the project path.
// path. if (location.hostname.indexOf('github.io') > 0) {
if (location.hostname.indexOf('github.com') > 0) {
return location.pathname.replace(/todomvc\//, ''); return location.pathname.replace(/todomvc\//, '');
} }
return location.pathname; return location.pathname;
...@@ -29,9 +28,8 @@ ...@@ -29,9 +28,8 @@
} }
function redirect() { function redirect() {
if (location.hostname === 'addyosmani.github.com') { if (location.hostname === 'addyosmani.github.io') {
location.href = location.href.replace('addyosmani.github.com/todomvc', location.href = location.href.replace('addyosmani.github.io/todomvc', 'todomvc.com');
'todomvc.com');
} }
} }
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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