Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
T
todomvc
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Sven Franck
todomvc
Commits
b14a8f87
Commit
b14a8f87
authored
Jan 05, 2016
by
TasteBot
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update the build files for gh-pages [ci skip]
parent
fa837682
Changes
14
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
302 additions
and
487 deletions
+302
-487
examples/angular2/.gitignore
examples/angular2/.gitignore
+1
-7
examples/angular2/app.ts
examples/angular2/app.ts
+0
-75
examples/angular2/app/app.html
examples/angular2/app/app.html
+23
-0
examples/angular2/app/app.js
examples/angular2/app/app.js
+61
-0
examples/angular2/app/app.ts
examples/angular2/app/app.ts
+58
-0
examples/angular2/app/bootstrap.js
examples/angular2/app/bootstrap.js
+5
-0
examples/angular2/app/bootstrap.ts
examples/angular2/app/bootstrap.ts
+5
-0
examples/angular2/app/services/store.js
examples/angular2/app/services/store.js
+68
-0
examples/angular2/app/services/store.ts
examples/angular2/app/services/store.ts
+77
-0
examples/angular2/index.html
examples/angular2/index.html
+2
-7
examples/angular2/node_modules/node-uuid/uuid.js
examples/angular2/node_modules/node-uuid/uuid.js
+0
-272
examples/angular2/node_modules/store.js/store.js
examples/angular2/node_modules/store.js/store.js
+0
-117
examples/angular2/package.json
examples/angular2/package.json
+0
-4
examples/angular2/tsconfig.json
examples/angular2/tsconfig.json
+2
-5
No files found.
examples/angular2/.gitignore
View file @
b14a8f87
...
...
@@ -3,12 +3,6 @@ node_modules/.bin
# ignore the source / documentation of each node module, but retain the
# distribution builds
node_modules/node-uuid
!node_modules/node-uuid/uuid.js
node_modules/store.js
!node_modules/store.js/store.js
node_modules/systemjs
!node_modules/systemjs/dist/system.src.js
...
...
@@ -29,5 +23,5 @@ node_modules/rxjs
node_modules/tsd
node_modules/typescript
*.js.map
typings
examples/angular2/app.ts
deleted
100644 → 0
View file @
fa837682
import
{
Component
}
from
'
angular2/core
'
;
import
{
bootstrap
}
from
'
angular2/platform/browser
'
;
import
{
TodoStore
,
Todo
}
from
'
./services/store
'
;
const
ESC_KEY
=
27
;
const
ENTER_KEY
=
13
;
@
Component
({
selector
:
'
todo-app
'
,
template
:
`
<section class="todoapp">
<header class="header">
<h1>todos</h1>
<input class="new-todo" placeholder="What needs to be done?" autofocus="" #newtodo (keyup)="addTodo($event, newtodo)">
</header>
<section class="main" *ngIf="todoStore.todos.length > 0">
<input class="toggle-all" type="checkbox" *ngIf="todoStore.todos.length" #toggleall [checked]="todoStore.allCompleted()" (click)="todoStore.setAllTo(toggleall)">
<ul class="todo-list">
<li *ngFor="#todo of todoStore.todos" [class.completed]="todo.completed" [class.editing]="todo.editing">
<div class="view">
<input class="toggle" type="checkbox" (click)="toggleCompletion(todo.uid)" [checked]="todo.completed">
<label (dblclick)="editTodo(todo)">{{todo.title}}</label>
<button class="destroy" (click)="remove(todo.uid)"></button>
</div>
<input class="edit" *ngIf="todo.editing" [value]="todo.title" #editedtodo (blur)="stopEditing(todo, editedtodo)" (keyup.enter)="updateEditingTodo(editedtodo, todo)" (keyup.escape)="cancelEditingTodo(todo)">
</li>
</ul>
</section>
<footer class="footer" *ngIf="todoStore.todos.length > 0">
<span class="todo-count"><strong>{{todoStore.getRemaining().length}}</strong> {{todoStore.getRemaining().length == 1 ? 'item' : 'items'}} left</span>
<button class="clear-completed" *ngIf="todoStore.getCompleted().length > 0" (click)="removeCompleted()">Clear completed</button>
</footer>
</section>`
})
class
TodoApp
{
todoStore
:
TodoStore
;
constructor
()
{
this
.
todoStore
=
new
TodoStore
();
}
stopEditing
(
todo
:
Todo
,
editedTitle
)
{
todo
.
setTitle
(
editedTitle
.
value
);
todo
.
editing
=
false
;
}
cancelEditingTodo
(
todo
:
Todo
)
{
todo
.
editing
=
false
;
}
updateEditingTodo
(
editedTitle
,
todo
:
Todo
)
{
editedTitle
=
editedTitle
.
value
.
trim
();
todo
.
editing
=
false
;
if
(
editedTitle
.
length
===
0
)
{
return
this
.
todoStore
.
remove
(
todo
.
uid
);
}
todo
.
setTitle
(
editedTitle
);
}
editTodo
(
todo
:
Todo
)
{
todo
.
editing
=
true
;
}
removeCompleted
()
{
this
.
todoStore
.
removeCompleted
();
}
toggleCompletion
(
uid
:
String
)
{
this
.
todoStore
.
toggleCompletion
(
uid
);
}
remove
(
uid
:
String
){
this
.
todoStore
.
remove
(
uid
);
}
addTodo
(
$event
,
newtodo
)
{
if
(
$event
.
which
===
ENTER_KEY
&&
newtodo
.
value
.
trim
().
length
)
{
this
.
todoStore
.
add
(
newtodo
.
value
);
newtodo
.
value
=
''
;
}
}
}
bootstrap
(
TodoApp
);
examples/angular2/app/app.html
0 → 100644
View file @
b14a8f87
<section
class=
"todoapp"
>
<header
class=
"header"
>
<h1>
todos
</h1>
<input
class=
"new-todo"
placeholder=
"What needs to be done?"
autofocus=
""
[(ngModel)]=
"newTodoText"
(keyup.enter)=
"addTodo()"
>
</header>
<section
class=
"main"
*ngIf=
"todoStore.todos.length > 0"
>
<input
class=
"toggle-all"
type=
"checkbox"
*ngIf=
"todoStore.todos.length"
#toggleall
[checked]=
"todoStore.allCompleted()"
(click)=
"todoStore.setAllTo(toggleall.checked)"
>
<ul
class=
"todo-list"
>
<li
*ngFor=
"#todo of todoStore.todos"
[class.completed]=
"todo.completed"
[class.editing]=
"todo.editing"
>
<div
class=
"view"
>
<input
class=
"toggle"
type=
"checkbox"
(click)=
"toggleCompletion(todo)"
[checked]=
"todo.completed"
>
<label
(dblclick)=
"editTodo(todo)"
>
{{todo.title}}
</label>
<button
class=
"destroy"
(click)=
"remove(todo)"
></button>
</div>
<input
class=
"edit"
*ngIf=
"todo.editing"
[value]=
"todo.title"
#editedtodo
(blur)=
"stopEditing(todo, editedtodo.value)"
(keyup.enter)=
"updateEditingTodo(todo, editedtodo.value)"
(keyup.escape)=
"cancelEditingTodo(todo)"
>
</li>
</ul>
</section>
<footer
class=
"footer"
*ngIf=
"todoStore.todos.length > 0"
>
<span
class=
"todo-count"
><strong>
{{todoStore.getRemaining().length}}
</strong>
{{todoStore.getRemaining().length == 1 ? 'item' : 'items'}} left
</span>
<button
class=
"clear-completed"
*ngIf=
"todoStore.getCompleted().length > 0"
(click)=
"removeCompleted()"
>
Clear completed
</button>
</footer>
</section>
examples/angular2/app.js
→
examples/angular2/app
/app
.js
View file @
b14a8f87
...
...
@@ -8,26 +8,26 @@ var __metadata = (this && this.__metadata) || function (k, v) {
if
(
typeof
Reflect
===
"
object
"
&&
typeof
Reflect
.
metadata
===
"
function
"
)
return
Reflect
.
metadata
(
k
,
v
);
};
var
core_1
=
require
(
'
angular2/core
'
);
var
browser_1
=
require
(
'
angular2/platform/browser
'
);
var
store_1
=
require
(
'
./services/store
'
);
var
ESC_KEY
=
27
;
var
ENTER_KEY
=
13
;
var
TodoApp
=
(
function
()
{
function
TodoApp
()
{
this
.
todoStore
=
new
store_1
.
TodoStore
();
function
TodoApp
(
todoStore
)
{
this
.
newTodoText
=
''
;
this
.
todoStore
=
todoStore
;
}
TodoApp
.
prototype
.
stopEditing
=
function
(
todo
,
editedTitle
)
{
todo
.
setTitle
(
editedTitle
.
value
)
;
todo
.
title
=
editedTitle
;
todo
.
editing
=
false
;
};
TodoApp
.
prototype
.
cancelEditingTodo
=
function
(
todo
)
{
todo
.
editing
=
false
;
};
TodoApp
.
prototype
.
updateEditingTodo
=
function
(
editedTitle
,
todo
)
{
editedTitle
=
editedTitle
.
value
.
trim
();
TodoApp
.
prototype
.
cancelEditingTodo
=
function
(
todo
)
{
todo
.
editing
=
false
;
};
TodoApp
.
prototype
.
updateEditingTodo
=
function
(
todo
,
editedTitle
)
{
editedTitle
=
editedTitle
.
trim
();
todo
.
editing
=
false
;
if
(
editedTitle
.
length
===
0
)
{
return
this
.
todoStore
.
remove
(
todo
.
uid
);
return
this
.
todoStore
.
remove
(
todo
);
}
todo
.
setTitle
(
editedTitle
)
;
todo
.
title
=
editedTitle
;
};
TodoApp
.
prototype
.
editTodo
=
function
(
todo
)
{
todo
.
editing
=
true
;
...
...
@@ -35,26 +35,27 @@ var TodoApp = (function () {
TodoApp
.
prototype
.
removeCompleted
=
function
()
{
this
.
todoStore
.
removeCompleted
();
};
TodoApp
.
prototype
.
toggleCompletion
=
function
(
uid
)
{
this
.
todoStore
.
toggleCompletion
(
uid
);
TodoApp
.
prototype
.
toggleCompletion
=
function
(
todo
)
{
this
.
todoStore
.
toggleCompletion
(
todo
);
};
TodoApp
.
prototype
.
remove
=
function
(
uid
)
{
this
.
todoStore
.
remove
(
uid
);
TodoApp
.
prototype
.
remove
=
function
(
todo
)
{
this
.
todoStore
.
remove
(
todo
);
};
TodoApp
.
prototype
.
addTodo
=
function
(
$event
,
newtodo
)
{
if
(
$event
.
which
===
ENTER_KEY
&&
newtodo
.
value
.
trim
().
length
)
{
this
.
todoStore
.
add
(
newtodo
.
value
);
newtodo
.
value
=
''
;
TodoApp
.
prototype
.
addTodo
=
function
()
{
if
(
this
.
newTodoText
.
trim
().
length
)
{
this
.
todoStore
.
add
(
this
.
newTodoText
);
this
.
newTodoText
=
''
;
}
};
TodoApp
=
__decorate
([
core_1
.
Component
({
selector
:
'
todo-app
'
,
template
:
"
\n\t\t
<section class=
\"
todoapp
\"
>
\n\t\t\t
<header class=
\"
header
\"
>
\n\t\t\t\t
<h1>todos</h1>
\n\t\t\t\t
<input class=
\"
new-todo
\"
placeholder=
\"
What needs to be done?
\"
autofocus=
\"\"
#newtodo (keyup)=
\"
addTodo($event, newtodo)
\"
>
\n\t\t\t
</header>
\n\t\t\t
<section class=
\"
main
\"
*ngIf=
\"
todoStore.todos.length > 0
\"
>
\n\t\t\t\t
<input class=
\"
toggle-all
\"
type=
\"
checkbox
\"
*ngIf=
\"
todoStore.todos.length
\"
#toggleall [checked]=
\"
todoStore.allCompleted()
\"
(click)=
\"
todoStore.setAllTo(toggleall)
\"
>
\n\t\t\t\t
<ul class=
\"
todo-list
\"
>
\n\t\t\t\t\t
<li *ngFor=
\"
#todo of todoStore.todos
\"
[class.completed]=
\"
todo.completed
\"
[class.editing]=
\"
todo.editing
\"
>
\n\t\t\t\t\t\t
<div class=
\"
view
\"
>
\n\t\t\t\t\t\t\t
<input class=
\"
toggle
\"
type=
\"
checkbox
\"
(click)=
\"
toggleCompletion(todo.uid)
\"
[checked]=
\"
todo.completed
\"
>
\n\t\t\t\t\t\t\t
<label (dblclick)=
\"
editTodo(todo)
\"
>{{todo.title}}</label>
\n\t\t\t\t\t\t\t
<button class=
\"
destroy
\"
(click)=
\"
remove(todo.uid)
\"
></button>
\n\t\t\t\t\t\t
</div>
\n\t\t\t\t\t\t
<input class=
\"
edit
\"
*ngIf=
\"
todo.editing
\"
[value]=
\"
todo.title
\"
#editedtodo (blur)=
\"
stopEditing(todo, editedtodo)
\"
(keyup.enter)=
\"
updateEditingTodo(editedtodo, todo)
\"
(keyup.escape)=
\"
cancelEditingTodo(todo)
\"
>
\n\t\t\t\t\t
</li>
\n\t\t\t\t
</ul>
\n\t\t\t
</section>
\n\t\t\t
<footer class=
\"
footer
\"
*ngIf=
\"
todoStore.todos.length > 0
\"
>
\n\t\t\t\t
<span class=
\"
todo-count
\"
><strong>{{todoStore.getRemaining().length}}</strong> {{todoStore.getRemaining().length == 1 ? 'item' : 'items'}} left</span>
\n\t\t\t\t
<button class=
\"
clear-completed
\"
*ngIf=
\"
todoStore.getCompleted().length > 0
\"
(click)=
\"
removeCompleted()
\"
>Clear completed</button>
\n\t\t\t
</footer>
\n\t\t
</section>
"
template
Url
:
'
app/app.html
'
}),
__metadata
(
'
design:paramtypes
'
,
[])
__metadata
(
'
design:paramtypes
'
,
[
store_1
.
TodoStore
])
],
TodoApp
);
return
TodoApp
;
})();
browser_1
.
bootstrap
(
TodoApp
);
Object
.
defineProperty
(
exports
,
"
__esModule
"
,
{
value
:
true
});
exports
.
default
=
TodoApp
;
//# sourceMappingURL=app.js.map
\ No newline at end of file
examples/angular2/app/app.ts
0 → 100644
View file @
b14a8f87
import
{
Component
}
from
'
angular2/core
'
;
import
{
TodoStore
,
Todo
}
from
'
./services/store
'
;
@
Component
({
selector
:
'
todo-app
'
,
templateUrl
:
'
app/app.html
'
})
export
default
class
TodoApp
{
todoStore
:
TodoStore
;
newTodoText
=
''
;
constructor
(
todoStore
:
TodoStore
)
{
this
.
todoStore
=
todoStore
;
}
stopEditing
(
todo
:
Todo
,
editedTitle
:
string
)
{
todo
.
title
=
editedTitle
;
todo
.
editing
=
false
;
}
cancelEditingTodo
(
todo
:
Todo
)
{
todo
.
editing
=
false
;
}
updateEditingTodo
(
todo
:
Todo
,
editedTitle
:
string
)
{
editedTitle
=
editedTitle
.
trim
();
todo
.
editing
=
false
;
if
(
editedTitle
.
length
===
0
)
{
return
this
.
todoStore
.
remove
(
todo
);
}
todo
.
title
=
editedTitle
;
}
editTodo
(
todo
:
Todo
)
{
todo
.
editing
=
true
;
}
removeCompleted
()
{
this
.
todoStore
.
removeCompleted
();
}
toggleCompletion
(
todo
:
Todo
)
{
this
.
todoStore
.
toggleCompletion
(
todo
);
}
remove
(
todo
:
Todo
){
this
.
todoStore
.
remove
(
todo
);
}
addTodo
()
{
if
(
this
.
newTodoText
.
trim
().
length
)
{
this
.
todoStore
.
add
(
this
.
newTodoText
);
this
.
newTodoText
=
''
;
}
}
}
examples/angular2/app/bootstrap.js
0 → 100644
View file @
b14a8f87
var
browser_1
=
require
(
'
angular2/platform/browser
'
);
var
app_1
=
require
(
'
./app
'
);
var
store_1
=
require
(
'
./services/store
'
);
browser_1
.
bootstrap
(
app_1
.
default
,
[
store_1
.
TodoStore
]);
//# sourceMappingURL=bootstrap.js.map
\ No newline at end of file
examples/angular2/app/bootstrap.ts
0 → 100644
View file @
b14a8f87
import
{
bootstrap
}
from
'
angular2/platform/browser
'
;
import
TodoApp
from
'
./app
'
import
{
TodoStore
}
from
'
./services/store
'
;
bootstrap
(
TodoApp
,
[
TodoStore
]);
examples/angular2/services/store.js
→
examples/angular2/
app/
services/store.js
View file @
b14a8f87
var
uuid
=
require
(
'
node-uuid
'
);
require
(
'
store.js
'
);
var
Todo
=
(
function
()
{
function
Todo
(
title
)
{
this
.
uid
=
uuid
.
v4
();
this
.
completed
=
false
;
this
.
editing
=
false
;
this
.
title
=
title
.
trim
();
}
Todo
.
prototype
.
setTitle
=
function
(
title
)
{
this
.
title
=
title
.
trim
();
};
Object
.
defineProperty
(
Todo
.
prototype
,
"
title
"
,
{
get
:
function
()
{
return
this
.
_title
;
},
set
:
function
(
value
)
{
this
.
_title
=
value
.
trim
();
},
enumerable
:
true
,
configurable
:
true
});
return
Todo
;
})();
exports
.
Todo
=
Todo
;
var
TodoStore
=
(
function
()
{
function
TodoStore
()
{
var
persistedTodos
=
store
.
get
(
'
angular2-todos
'
)
||
[]
;
var
persistedTodos
=
JSON
.
parse
(
localStorage
.
getItem
(
'
angular2-todos
'
)
||
'
[]
'
)
;
// Normalize back into classes
this
.
todos
=
persistedTodos
.
map
(
function
(
todo
)
{
var
ret
=
new
Todo
(
todo
.
title
);
var
ret
=
new
Todo
(
todo
.
_
title
);
ret
.
completed
=
todo
.
completed
;
ret
.
uid
=
todo
.
uid
;
return
ret
;
});
}
TodoStore
.
prototype
.
_
updateStore
=
function
()
{
store
.
set
(
'
angular2-todos
'
,
this
.
todos
);
TodoStore
.
prototype
.
updateStore
=
function
()
{
localStorage
.
setItem
(
'
angular2-todos
'
,
JSON
.
stringify
(
this
.
todos
)
);
};
TodoStore
.
prototype
.
get
=
function
(
state
)
{
return
this
.
todos
.
filter
(
function
(
todo
)
{
return
todo
.
completed
===
state
.
completed
;
});
TodoStore
.
prototype
.
get
WithCompleted
=
function
(
completed
)
{
return
this
.
todos
.
filter
(
function
(
todo
)
{
return
todo
.
completed
===
completed
;
});
};
TodoStore
.
prototype
.
allCompleted
=
function
()
{
return
this
.
todos
.
length
===
this
.
getCompleted
().
length
;
};
TodoStore
.
prototype
.
setAllTo
=
function
(
toggler
)
{
this
.
todos
.
forEach
(
function
(
t
)
{
return
t
.
completed
=
toggler
.
check
ed
;
});
this
.
_
updateStore
();
TodoStore
.
prototype
.
setAllTo
=
function
(
completed
)
{
this
.
todos
.
forEach
(
function
(
t
)
{
return
t
.
completed
=
complet
ed
;
});
this
.
updateStore
();
};
TodoStore
.
prototype
.
removeCompleted
=
function
()
{
this
.
todos
=
this
.
get
({
completed
:
false
});
this
.
todos
=
this
.
getWithCompleted
(
false
);
this
.
updateStore
();
};
TodoStore
.
prototype
.
getRemaining
=
function
()
{
return
this
.
get
({
completed
:
false
}
);
return
this
.
get
WithCompleted
(
false
);
};
TodoStore
.
prototype
.
getCompleted
=
function
()
{
return
this
.
get
({
completed
:
true
}
);
return
this
.
get
WithCompleted
(
true
);
};
TodoStore
.
prototype
.
toggleCompletion
=
function
(
uid
)
{
for
(
var
_i
=
0
,
_a
=
this
.
todos
;
_i
<
_a
.
length
;
_i
++
)
{
var
todo
=
_a
[
_i
];
if
(
todo
.
uid
===
uid
)
{
todo
.
completed
=
!
todo
.
completed
;
break
;
}
}
;
this
.
_updateStore
();
TodoStore
.
prototype
.
toggleCompletion
=
function
(
todo
)
{
todo
.
completed
=
!
todo
.
completed
;
this
.
updateStore
();
};
TodoStore
.
prototype
.
remove
=
function
(
uid
)
{
for
(
var
_i
=
0
,
_a
=
this
.
todos
;
_i
<
_a
.
length
;
_i
++
)
{
var
todo
=
_a
[
_i
];
if
(
todo
.
uid
===
uid
)
{
this
.
todos
.
splice
(
this
.
todos
.
indexOf
(
todo
),
1
);
break
;
}
}
this
.
_updateStore
();
TodoStore
.
prototype
.
remove
=
function
(
todo
)
{
this
.
todos
.
splice
(
this
.
todos
.
indexOf
(
todo
),
1
);
this
.
updateStore
();
};
TodoStore
.
prototype
.
add
=
function
(
title
)
{
this
.
todos
.
push
(
new
Todo
(
title
));
this
.
_
updateStore
();
this
.
updateStore
();
};
return
TodoStore
;
})();
...
...
examples/angular2/services/store.ts
→
examples/angular2/
app/
services/store.ts
View file @
b14a8f87
import
*
as
uuid
from
'
node-uuid
'
;
import
'
store.js
'
;
export
class
Todo
{
completed
:
Boolean
;
editing
:
Boolean
;
title
:
String
;
uid
:
String
;
setTitle
(
title
:
String
)
{
this
.
title
=
title
.
trim
();
private
_title
:
String
;
get
title
()
{
return
this
.
_title
;
}
set
title
(
value
:
String
)
{
this
.
_title
=
value
.
trim
();
}
constructor
(
title
:
String
)
{
this
.
uid
=
uuid
.
v4
();
this
.
completed
=
false
;
this
.
editing
=
false
;
this
.
title
=
title
.
trim
();
...
...
@@ -19,58 +19,59 @@ export class Todo {
export
class
TodoStore
{
todos
:
Array
<
Todo
>
;
constructor
()
{
let
persistedTodos
=
store
.
get
(
'
angular2-todos
'
)
||
[]
;
let
persistedTodos
=
JSON
.
parse
(
localStorage
.
getItem
(
'
angular2-todos
'
)
||
'
[]
'
)
;
// Normalize back into classes
this
.
todos
=
persistedTodos
.
map
(
(
todo
:
{
title
:
String
,
completed
:
Boolean
,
uid
:
String
})
=>
{
let
ret
=
new
Todo
(
todo
.
title
);
this
.
todos
=
persistedTodos
.
map
(
(
todo
:
{
_title
:
String
,
completed
:
Boolean
})
=>
{
let
ret
=
new
Todo
(
todo
.
_
title
);
ret
.
completed
=
todo
.
completed
;
ret
.
uid
=
todo
.
uid
;
return
ret
;
});
}
_updateStore
()
{
store
.
set
(
'
angular2-todos
'
,
this
.
todos
);
private
updateStore
()
{
localStorage
.
setItem
(
'
angular2-todos
'
,
JSON
.
stringify
(
this
.
todos
));
}
get
(
state
:
{
completed
:
Boolean
})
{
return
this
.
todos
.
filter
((
todo
:
Todo
)
=>
todo
.
completed
===
state
.
completed
);
private
getWithCompleted
(
completed
:
Boolean
)
{
return
this
.
todos
.
filter
((
todo
:
Todo
)
=>
todo
.
completed
===
completed
);
}
allCompleted
()
{
return
this
.
todos
.
length
===
this
.
getCompleted
().
length
;
}
setAllTo
(
toggler
)
{
this
.
todos
.
forEach
((
t
:
Todo
)
=>
t
.
completed
=
toggler
.
checked
);
this
.
_updateStore
();
setAllTo
(
completed
:
Boolean
)
{
this
.
todos
.
forEach
((
t
:
Todo
)
=>
t
.
completed
=
completed
);
this
.
updateStore
();
}
removeCompleted
()
{
this
.
todos
=
this
.
get
({
completed
:
false
});
this
.
todos
=
this
.
getWithCompleted
(
false
);
this
.
updateStore
();
}
getRemaining
()
{
return
this
.
get
({
completed
:
false
}
);
return
this
.
get
WithCompleted
(
false
);
}
getCompleted
()
{
return
this
.
get
({
completed
:
true
}
);
return
this
.
get
WithCompleted
(
true
);
}
toggleCompletion
(
uid
:
String
)
{
for
(
let
todo
of
this
.
todos
)
{
if
(
todo
.
uid
===
uid
)
{
todo
.
completed
=
!
todo
.
completed
;
break
;
}
};
this
.
_updateStore
();
toggleCompletion
(
todo
:
Todo
)
{
todo
.
completed
=
!
todo
.
completed
;
this
.
updateStore
();
}
remove
(
uid
:
String
)
{
for
(
let
todo
of
this
.
todos
)
{
if
(
todo
.
uid
===
uid
)
{
this
.
todos
.
splice
(
this
.
todos
.
indexOf
(
todo
),
1
);
break
;
}
}
this
.
_updateStore
();
remove
(
todo
:
Todo
)
{
this
.
todos
.
splice
(
this
.
todos
.
indexOf
(
todo
),
1
);
this
.
updateStore
();
}
add
(
title
:
String
)
{
this
.
todos
.
push
(
new
Todo
(
title
));
this
.
_
updateStore
();
this
.
updateStore
();
}
}
examples/angular2/index.html
View file @
b14a8f87
...
...
@@ -15,7 +15,7 @@
<footer
class=
"info"
>
<p>
Double-click to edit a todo
</p>
<p>
Created by
<a
href=
"http://github.com/samccone"
>
Sam Saccone
</a>
Created by
<a
href=
"http://github.com/samccone"
>
Sam Saccone
</a>
and
<a
href=
"http://github.com/colineberhardt"
>
Colin Eberhardt
</a>
using
<a
href=
"http://angular.io"
>
Angular2
</a>
</p>
<p>
Part of
<a
href=
"http://todomvc.com"
>
TodoMVC
</a></p>
...
...
@@ -27,14 +27,9 @@
format
:
'
cjs
'
,
defaultExtension
:
'
js
'
}
},
map
:
{
'
node-uuid
'
:
'
node_modules/node-uuid/uuid.js
'
,
'
store.js
'
:
'
node_modules/store.js/store.js
'
,
'
app
'
:
'
./
'
,
}
});
System
.
import
(
'
app/
ap
p
'
);
System
.
import
(
'
app/
bootstra
p
'
);
</script>
</body>
</html>
examples/angular2/node_modules/node-uuid/uuid.js
deleted
100644 → 0
View file @
fa837682
// uuid.js
//
// Copyright (c) 2010-2012 Robert Kieffer
// MIT License - http://opensource.org/licenses/mit-license.php
/*global window, require, define */
(
function
(
_window
)
{
'
use strict
'
;
// Unique ID creation requires a high quality random # generator. We feature
// detect to determine the best RNG source, normalizing to a function that
// returns 128-bits of randomness, since that's what's usually required
var
_rng
,
_mathRNG
,
_nodeRNG
,
_whatwgRNG
,
_previousRoot
;
function
setupBrowser
()
{
// Allow for MSIE11 msCrypto
var
_crypto
=
_window
.
crypto
||
_window
.
msCrypto
;
if
(
!
_rng
&&
_crypto
&&
_crypto
.
getRandomValues
)
{
// WHATWG crypto-based RNG - http://wiki.whatwg.org/wiki/Crypto
//
// Moderately fast, high quality
try
{
var
_rnds8
=
new
Uint8Array
(
16
);
_whatwgRNG
=
_rng
=
function
whatwgRNG
()
{
_crypto
.
getRandomValues
(
_rnds8
);
return
_rnds8
;
};
_rng
();
}
catch
(
e
)
{}
}
if
(
!
_rng
)
{
// Math.random()-based (RNG)
//
// If all else fails, use Math.random(). It's fast, but is of unspecified
// quality.
var
_rnds
=
new
Array
(
16
);
_mathRNG
=
_rng
=
function
()
{
for
(
var
i
=
0
,
r
;
i
<
16
;
i
++
)
{
if
((
i
&
0x03
)
===
0
)
{
r
=
Math
.
random
()
*
0x100000000
;
}
_rnds
[
i
]
=
r
>>>
((
i
&
0x03
)
<<
3
)
&
0xff
;
}
return
_rnds
;
};
if
(
'
undefined
'
!==
typeof
console
&&
console
.
warn
)
{
console
.
warn
(
"
[SECURITY] node-uuid: crypto not usable, falling back to insecure Math.random()
"
);
}
}
}
function
setupNode
()
{
// Node.js crypto-based RNG - http://nodejs.org/docs/v0.6.2/api/crypto.html
//
// Moderately fast, high quality
if
(
'
function
'
===
typeof
require
)
{
try
{
var
_rb
=
require
(
'
crypto
'
).
randomBytes
;
_nodeRNG
=
_rng
=
_rb
&&
function
()
{
return
_rb
(
16
);};
_rng
();
}
catch
(
e
)
{}
}
}
if
(
_window
)
{
setupBrowser
();
}
else
{
setupNode
();
}
// Buffer class to use
var
BufferClass
=
(
'
function
'
===
typeof
Buffer
)
?
Buffer
:
Array
;
// Maps for number <-> hex string conversion
var
_byteToHex
=
[];
var
_hexToByte
=
{};
for
(
var
i
=
0
;
i
<
256
;
i
++
)
{
_byteToHex
[
i
]
=
(
i
+
0x100
).
toString
(
16
).
substr
(
1
);
_hexToByte
[
_byteToHex
[
i
]]
=
i
;
}
// **`parse()` - Parse a UUID into it's component bytes**
function
parse
(
s
,
buf
,
offset
)
{
var
i
=
(
buf
&&
offset
)
||
0
,
ii
=
0
;
buf
=
buf
||
[];
s
.
toLowerCase
().
replace
(
/
[
0-9a-f
]{2}
/g
,
function
(
oct
)
{
if
(
ii
<
16
)
{
// Don't overflow!
buf
[
i
+
ii
++
]
=
_hexToByte
[
oct
];
}
});
// Zero out remaining bytes if string was short
while
(
ii
<
16
)
{
buf
[
i
+
ii
++
]
=
0
;
}
return
buf
;
}
// **`unparse()` - Convert UUID byte array (ala parse()) into a string**
function
unparse
(
buf
,
offset
)
{
var
i
=
offset
||
0
,
bth
=
_byteToHex
;
return
bth
[
buf
[
i
++
]]
+
bth
[
buf
[
i
++
]]
+
bth
[
buf
[
i
++
]]
+
bth
[
buf
[
i
++
]]
+
'
-
'
+
bth
[
buf
[
i
++
]]
+
bth
[
buf
[
i
++
]]
+
'
-
'
+
bth
[
buf
[
i
++
]]
+
bth
[
buf
[
i
++
]]
+
'
-
'
+
bth
[
buf
[
i
++
]]
+
bth
[
buf
[
i
++
]]
+
'
-
'
+
bth
[
buf
[
i
++
]]
+
bth
[
buf
[
i
++
]]
+
bth
[
buf
[
i
++
]]
+
bth
[
buf
[
i
++
]]
+
bth
[
buf
[
i
++
]]
+
bth
[
buf
[
i
++
]];
}
// **`v1()` - Generate time-based UUID**
//
// Inspired by https://github.com/LiosK/UUID.js
// and http://docs.python.org/library/uuid.html
// random #'s we need to init node and clockseq
var
_seedBytes
=
_rng
();
// Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)
var
_nodeId
=
[
_seedBytes
[
0
]
|
0x01
,
_seedBytes
[
1
],
_seedBytes
[
2
],
_seedBytes
[
3
],
_seedBytes
[
4
],
_seedBytes
[
5
]
];
// Per 4.2.2, randomize (14 bit) clockseq
var
_clockseq
=
(
_seedBytes
[
6
]
<<
8
|
_seedBytes
[
7
])
&
0x3fff
;
// Previous uuid creation time
var
_lastMSecs
=
0
,
_lastNSecs
=
0
;
// See https://github.com/broofa/node-uuid for API details
function
v1
(
options
,
buf
,
offset
)
{
var
i
=
buf
&&
offset
||
0
;
var
b
=
buf
||
[];
options
=
options
||
{};
var
clockseq
=
(
options
.
clockseq
!=
null
)
?
options
.
clockseq
:
_clockseq
;
// UUID timestamps are 100 nano-second units since the Gregorian epoch,
// (1582-10-15 00:00). JSNumbers aren't precise enough for this, so
// time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'
// (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.
var
msecs
=
(
options
.
msecs
!=
null
)
?
options
.
msecs
:
new
Date
().
getTime
();
// Per 4.2.1.2, use count of uuid's generated during the current clock
// cycle to simulate higher resolution clock
var
nsecs
=
(
options
.
nsecs
!=
null
)
?
options
.
nsecs
:
_lastNSecs
+
1
;
// Time since last uuid creation (in msecs)
var
dt
=
(
msecs
-
_lastMSecs
)
+
(
nsecs
-
_lastNSecs
)
/
10000
;
// Per 4.2.1.2, Bump clockseq on clock regression
if
(
dt
<
0
&&
options
.
clockseq
==
null
)
{
clockseq
=
clockseq
+
1
&
0x3fff
;
}
// Reset nsecs if clock regresses (new clockseq) or we've moved onto a new
// time interval
if
((
dt
<
0
||
msecs
>
_lastMSecs
)
&&
options
.
nsecs
==
null
)
{
nsecs
=
0
;
}
// Per 4.2.1.2 Throw error if too many uuids are requested
if
(
nsecs
>=
10000
)
{
throw
new
Error
(
'
uuid.v1(): Can
\'
t create more than 10M uuids/sec
'
);
}
_lastMSecs
=
msecs
;
_lastNSecs
=
nsecs
;
_clockseq
=
clockseq
;
// Per 4.1.4 - Convert from unix epoch to Gregorian epoch
msecs
+=
12219292800000
;
// `time_low`
var
tl
=
((
msecs
&
0xfffffff
)
*
10000
+
nsecs
)
%
0x100000000
;
b
[
i
++
]
=
tl
>>>
24
&
0xff
;
b
[
i
++
]
=
tl
>>>
16
&
0xff
;
b
[
i
++
]
=
tl
>>>
8
&
0xff
;
b
[
i
++
]
=
tl
&
0xff
;
// `time_mid`
var
tmh
=
(
msecs
/
0x100000000
*
10000
)
&
0xfffffff
;
b
[
i
++
]
=
tmh
>>>
8
&
0xff
;
b
[
i
++
]
=
tmh
&
0xff
;
// `time_high_and_version`
b
[
i
++
]
=
tmh
>>>
24
&
0xf
|
0x10
;
// include version
b
[
i
++
]
=
tmh
>>>
16
&
0xff
;
// `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)
b
[
i
++
]
=
clockseq
>>>
8
|
0x80
;
// `clock_seq_low`
b
[
i
++
]
=
clockseq
&
0xff
;
// `node`
var
node
=
options
.
node
||
_nodeId
;
for
(
var
n
=
0
;
n
<
6
;
n
++
)
{
b
[
i
+
n
]
=
node
[
n
];
}
return
buf
?
buf
:
unparse
(
b
);
}
// **`v4()` - Generate random UUID**
// See https://github.com/broofa/node-uuid for API details
function
v4
(
options
,
buf
,
offset
)
{
// Deprecated - 'format' argument, as supported in v1.2
var
i
=
buf
&&
offset
||
0
;
if
(
typeof
(
options
)
===
'
string
'
)
{
buf
=
(
options
===
'
binary
'
)
?
new
BufferClass
(
16
)
:
null
;
options
=
null
;
}
options
=
options
||
{};
var
rnds
=
options
.
random
||
(
options
.
rng
||
_rng
)();
// Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
rnds
[
6
]
=
(
rnds
[
6
]
&
0x0f
)
|
0x40
;
rnds
[
8
]
=
(
rnds
[
8
]
&
0x3f
)
|
0x80
;
// Copy bytes to buffer, if provided
if
(
buf
)
{
for
(
var
ii
=
0
;
ii
<
16
;
ii
++
)
{
buf
[
i
+
ii
]
=
rnds
[
ii
];
}
}
return
buf
||
unparse
(
rnds
);
}
// Export public API
var
uuid
=
v4
;
uuid
.
v1
=
v1
;
uuid
.
v4
=
v4
;
uuid
.
parse
=
parse
;
uuid
.
unparse
=
unparse
;
uuid
.
BufferClass
=
BufferClass
;
uuid
.
_rng
=
_rng
;
uuid
.
_mathRNG
=
_mathRNG
;
uuid
.
_nodeRNG
=
_nodeRNG
;
uuid
.
_whatwgRNG
=
_whatwgRNG
;
if
((
'
undefined
'
!==
typeof
module
)
&&
module
.
exports
)
{
// Publish as node.js module
module
.
exports
=
uuid
;
}
else
if
(
typeof
define
===
'
function
'
&&
define
.
amd
)
{
// Publish as AMD module
define
(
function
()
{
return
uuid
;});
}
else
{
// Publish as global (in browsers)
_previousRoot
=
_window
.
uuid
;
// **`noConflict()` - (browser only) to reset global 'uuid' var**
uuid
.
noConflict
=
function
()
{
_window
.
uuid
=
_previousRoot
;
return
uuid
;
};
_window
.
uuid
=
uuid
;
}
})(
'
undefined
'
!==
typeof
window
?
window
:
null
);
examples/angular2/node_modules/store.js/store.js
deleted
100644 → 0
View file @
fa837682
/* Copyright (c) 2010 Marcus Westin
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
var
store
=
(
function
(){
var
api
=
{},
win
=
window
,
doc
=
win
.
document
,
localStorageName
=
'
localStorage
'
,
globalStorageName
=
'
globalStorage
'
,
storage
api
.
disabled
=
false
api
.
set
=
function
(
key
,
value
)
{}
api
.
get
=
function
(
key
)
{}
api
.
remove
=
function
(
key
)
{}
api
.
clear
=
function
()
{}
api
.
transact
=
function
(
key
,
transactionFn
)
{
var
val
=
api
.
get
(
key
)
if
(
typeof
val
==
'
undefined
'
)
{
val
=
{}
}
transactionFn
(
val
)
api
.
set
(
key
,
val
)
}
api
.
serialize
=
function
(
value
)
{
return
JSON
.
stringify
(
value
)
}
api
.
deserialize
=
function
(
value
)
{
if
(
typeof
value
!=
'
string
'
)
{
return
undefined
}
return
JSON
.
parse
(
value
)
}
// Functions to encapsulate questionable FireFox 3.6.13 behavior
// when about.config::dom.storage.enabled === false
// See https://github.com/marcuswestin/store.js/issues#issue/13
function
isLocalStorageNameSupported
()
{
try
{
return
(
localStorageName
in
win
&&
win
[
localStorageName
])
}
catch
(
err
)
{
return
false
}
}
function
isGlobalStorageNameSupported
()
{
try
{
return
(
globalStorageName
in
win
&&
win
[
globalStorageName
]
&&
win
[
globalStorageName
][
win
.
location
.
hostname
])
}
catch
(
err
)
{
return
false
}
}
if
(
isLocalStorageNameSupported
())
{
storage
=
win
[
localStorageName
]
api
.
set
=
function
(
key
,
val
)
{
storage
.
setItem
(
key
,
api
.
serialize
(
val
))
}
api
.
get
=
function
(
key
)
{
return
api
.
deserialize
(
storage
.
getItem
(
key
))
}
api
.
remove
=
function
(
key
)
{
storage
.
removeItem
(
key
)
}
api
.
clear
=
function
()
{
storage
.
clear
()
}
}
else
if
(
isGlobalStorageNameSupported
())
{
storage
=
win
[
globalStorageName
][
win
.
location
.
hostname
]
api
.
set
=
function
(
key
,
val
)
{
storage
[
key
]
=
api
.
serialize
(
val
)
}
api
.
get
=
function
(
key
)
{
return
api
.
deserialize
(
storage
[
key
]
&&
storage
[
key
].
value
)
}
api
.
remove
=
function
(
key
)
{
delete
storage
[
key
]
}
api
.
clear
=
function
()
{
for
(
var
key
in
storage
)
{
delete
storage
[
key
]
}
}
}
else
if
(
doc
.
documentElement
.
addBehavior
)
{
var
storage
=
doc
.
createElement
(
'
div
'
)
function
withIEStorage
(
storeFunction
)
{
return
function
()
{
var
args
=
Array
.
prototype
.
slice
.
call
(
arguments
,
0
)
args
.
unshift
(
storage
)
// See http://msdn.microsoft.com/en-us/library/ms531081(v=VS.85).aspx
// and http://msdn.microsoft.com/en-us/library/ms531424(v=VS.85).aspx
doc
.
body
.
appendChild
(
storage
)
storage
.
addBehavior
(
'
#default#userData
'
)
storage
.
load
(
localStorageName
)
var
result
=
storeFunction
.
apply
(
api
,
args
)
doc
.
body
.
removeChild
(
storage
)
return
result
}
}
api
.
set
=
withIEStorage
(
function
(
storage
,
key
,
val
)
{
storage
.
setAttribute
(
key
,
api
.
serialize
(
val
))
storage
.
save
(
localStorageName
)
})
api
.
get
=
withIEStorage
(
function
(
storage
,
key
)
{
return
api
.
deserialize
(
storage
.
getAttribute
(
key
))
})
api
.
remove
=
withIEStorage
(
function
(
storage
,
key
)
{
storage
.
removeAttribute
(
key
)
storage
.
save
(
localStorageName
)
})
api
.
clear
=
withIEStorage
(
function
(
storage
)
{
var
attributes
=
storage
.
XMLDocument
.
documentElement
.
attributes
storage
.
load
(
localStorageName
)
for
(
var
i
=
0
,
attr
;
attr
=
attributes
[
i
];
i
++
)
{
storage
.
removeAttribute
(
attr
.
name
)
}
storage
.
save
(
localStorageName
)
})
}
else
{
api
.
disabled
=
true
}
return
api
})();
examples/angular2/package.json
View file @
b14a8f87
{
"private"
:
true
,
"scripts"
:
{
"postinstall"
:
"./node_modules/.bin/tsd query node-uuid-base node-uuid-cjs storejs --action install"
,
"dev"
:
"tsc --watch"
},
"devDependencies"
:
{
"tsd"
:
"^0.6.0"
,
"typescript"
:
"1.7.5"
},
"dependencies"
:
{
"angular2"
:
"2.0.0-beta.0"
,
"systemjs"
:
"0.19.6"
,
"rxjs"
:
"5.0.0-beta.0"
,
"node-uuid"
:
"^1.4.3"
,
"store.js"
:
"^1.0.4"
,
"todomvc-app-css"
:
"^2.0.0"
,
"todomvc-common"
:
"^1.0.1"
}
...
...
examples/angular2/tsconfig.json
View file @
b14a8f87
...
...
@@ -7,12 +7,9 @@
"emitDecoratorMetadata"
:
true
,
"experimentalDecorators"
:
true
,
"removeComments"
:
false
,
"noImplicitAny"
:
fals
e
"noImplicitAny"
:
tru
e
},
"files"
:
[
"typings/node-uuid/node-uuid-base.d.ts"
,
"typings/node-uuid/node-uuid-cjs.d.ts"
,
"typings/storejs/storejs.d.ts"
,
"app.ts"
"app/bootstrap.ts"
]
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment