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
Eugene Shen
todomvc
Commits
ce37926e
Commit
ce37926e
authored
Sep 12, 2011
by
Christoph Burgdorf
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added an AngularJS example
parent
9af47940
Changes
13
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
12256 additions
and
1 deletion
+12256
-1
index.html
index.html
+1
-1
todo-example/angularjs/css/app.css
todo-example/angularjs/css/app.css
+315
-0
todo-example/angularjs/img/destroy.png
todo-example/angularjs/img/destroy.png
+0
-0
todo-example/angularjs/index.html
todo-example/angularjs/index.html
+79
-0
todo-example/angularjs/js/booter.js
todo-example/angularjs/js/booter.js
+2
-0
todo-example/angularjs/js/controllers.js
todo-example/angularjs/js/controllers.js
+79
-0
todo-example/angularjs/js/directive.js
todo-example/angularjs/js/directive.js
+22
-0
todo-example/angularjs/lib/angular/angular-ie-compat.js
todo-example/angularjs/lib/angular/angular-ie-compat.js
+35
-0
todo-example/angularjs/lib/angular/angular.js
todo-example/angularjs/lib/angular/angular.js
+11544
-0
todo-example/angularjs/lib/angular/angular.min.js
todo-example/angularjs/lib/angular/angular.min.js
+128
-0
todo-example/angularjs/lib/angular/version.txt
todo-example/angularjs/lib/angular/version.txt
+1
-0
todo-example/angularjs/lib/rx/rx.angular.js
todo-example/angularjs/lib/rx/rx.angular.js
+44
-0
todo-example/angularjs/lib/rx/rx.js
todo-example/angularjs/lib/rx/rx.js
+6
-0
No files found.
index.html
View file @
ce37926e
...
@@ -58,7 +58,7 @@ href="#gettingstarted">Getting Started</a> </li> </ul> <!--
...
@@ -58,7 +58,7 @@ href="#gettingstarted">Getting Started</a> </li> </ul> <!--
<!--startpara-->
<header>
<h1
class=
"post-title"
><a
name=
"gettingstarted"
>
Thanks for downloading! Let's get started
</a></h1>
</header>
<!--startpara-->
<header>
<h1
class=
"post-title"
><a
name=
"gettingstarted"
>
Thanks for downloading! Let's get started
</a></h1>
</header>
<!--startpara-->
<h2
class=
"site-headline"
>
TodoMVC is a
<strong>
common
</strong>
set of JavaScript
<!--startpara-->
<h2
class=
"site-headline"
>
TodoMVC is a
<strong>
common
</strong>
set of JavaScript
<strong>
examples
</strong>
for MVC frameworks like SproutCore, JavaScriptMVC, Backbone, YUILibrary, Spine, Sammy and others.
</h2>
<strong>
examples
</strong>
for MVC frameworks like SproutCore, JavaScriptMVC, Backbone, YUILibrary, Spine, Sammy
, AngularJS
and others.
</h2>
<h2>
Live examples
</h2>
<h2>
Live examples
</h2>
...
...
todo-example/angularjs/css/app.css
0 → 100644
View file @
ce37926e
html
,
body
,
div
,
span
,
applet
,
object
,
iframe
,
h1
,
h2
,
h3
,
h4
,
h5
,
h6
,
p
,
blockquote
,
pre
,
a
,
abbr
,
acronym
,
address
,
big
,
cite
,
code
,
del
,
dfn
,
em
,
font
,
img
,
ins
,
kbd
,
q
,
s
,
samp
,
small
,
strike
,
strong
,
sub
,
sup
,
tt
,
var
,
dl
,
dt
,
dd
,
ol
,
ul
,
li
,
fieldset
,
form
,
label
,
legend
,
table
,
caption
,
tbody
,
tfoot
,
thead
,
tr
,
th
,
td
{
margin
:
0
;
padding
:
0
;
border
:
0
;
outline
:
0
;
font-weight
:
inherit
;
font-style
:
inherit
;
font-size
:
100%
;
font-family
:
inherit
;
vertical-align
:
baseline
;
}
body
{
line-height
:
1
;
color
:
black
;
background
:
white
;
}
ol
,
ul
{
list-style
:
none
;
}
a
img
{
border
:
none
;
}
html
{
background
:
#eeeeee
;
}
body
{
font-family
:
"Helvetica Neue"
,
Helvetica
,
Arial
,
sans-serif
;
font-size
:
14px
;
line-height
:
1.4em
;
background
:
#eeeeee
;
color
:
#333333
;
}
.clickable
{
cursor
:
pointer
;
}
#todoapp
{
width
:
480px
;
margin
:
0
auto
40px
;
background
:
white
;
padding
:
20px
;
-moz-box-shadow
:
rgba
(
0
,
0
,
0
,
0.2
)
0
5px
6px
0
;
-webkit-box-shadow
:
rgba
(
0
,
0
,
0
,
0.2
)
0
5px
6px
0
;
-o-box-shadow
:
rgba
(
0
,
0
,
0
,
0.2
)
0
5px
6px
0
;
box-shadow
:
rgba
(
0
,
0
,
0
,
0.2
)
0
5px
6px
0
;
}
#todoapp
h1
{
font-size
:
36px
;
font-weight
:
bold
;
text-align
:
center
;
padding
:
20px
0
30px
0
;
line-height
:
1
;
}
#create-todo
{
position
:
relative
;
}
#todo-form
input
{
width
:
466px
;
font-size
:
24px
;
font-family
:
inherit
;
line-height
:
1.4em
;
border
:
0
;
outline
:
none
;
padding
:
6px
;
border
:
1px
solid
#999999
;
-moz-box-shadow
:
rgba
(
0
,
0
,
0
,
0.2
)
0
1px
2px
0
inset
;
-webkit-box-shadow
:
rgba
(
0
,
0
,
0
,
0.2
)
0
1px
2px
0
inset
;
-o-box-shadow
:
rgba
(
0
,
0
,
0
,
0.2
)
0
1px
2px
0
inset
;
box-shadow
:
rgba
(
0
,
0
,
0
,
0.2
)
0
1px
2px
0
inset
;
}
#create-todo
input
::-webkit-input-placeholder
{
font-style
:
italic
;
}
#create-todo
span
{
position
:
absolute
;
z-index
:
999
;
width
:
170px
;
left
:
50%
;
margin-left
:
-85px
;
}
#todo-list
{
margin-top
:
10px
;
}
#todo-list
li
{
padding
:
12px
20px
11px
0
;
position
:
relative
;
font-size
:
24px
;
line-height
:
1.1em
;
border-bottom
:
1px
solid
#cccccc
;
}
#todo-list
li
:after
{
content
:
"\0020"
;
display
:
block
;
height
:
0
;
clear
:
both
;
overflow
:
hidden
;
visibility
:
hidden
;
}
#todo-list
li
.editing-true
{
padding
:
0
;
border-bottom
:
0
;
}
#todo-list
.editing-true
.display
,
#todo-list
.edit
{
display
:
none
;
}
#todo-list
.editing-true
.edit
{
display
:
block
;
}
#todo-list
.editing-true
input
{
width
:
444px
;
font-size
:
24px
;
font-family
:
inherit
;
margin
:
0
;
line-height
:
1.6em
;
border
:
0
;
outline
:
none
;
padding
:
10px
7px
0px
27px
;
border
:
1px
solid
#999999
;
-moz-box-shadow
:
rgba
(
0
,
0
,
0
,
0.2
)
0
1px
2px
0
inset
;
-webkit-box-shadow
:
rgba
(
0
,
0
,
0
,
0.2
)
0
1px
2px
0
inset
;
-o-box-shadow
:
rgba
(
0
,
0
,
0
,
0.2
)
0
1px
2px
0
inset
;
box-shadow
:
rgba
(
0
,
0
,
0
,
0.2
)
0
1px
2px
0
inset
;
}
#todo-list
.check
{
position
:
relative
;
top
:
9px
;
margin
:
0
10px
0
7px
;
float
:
left
;
}
#todo-list
.done-true
.todo-content
{
text-decoration
:
line-through
;
color
:
#777777
;
}
#todo-list
.todo-destroy
{
position
:
absolute
;
right
:
5px
;
top
:
14px
;
display
:
none
;
cursor
:
pointer
;
width
:
20px
;
height
:
20px
;
background
:
url(../img/destroy.png)
no-repeat
0
0
;
}
#todo-list
li
:hover
.todo-destroy
{
display
:
block
;
}
#todo-list
.todo-destroy
:hover
{
background-position
:
0
-20px
;
}
#todo-stats
{
*
zoom
:
1
;
margin-top
:
10px
;
color
:
#777777
;
}
#todo-stats
:after
{
content
:
"\0020"
;
display
:
block
;
height
:
0
;
clear
:
both
;
overflow
:
hidden
;
visibility
:
hidden
;
}
#todo-stats
.todo-count
{
float
:
left
;
}
#todo-stats
.todo-count
.number
{
font-weight
:
bold
;
color
:
#333333
;
}
#todo-stats
.todo-clear
{
float
:
right
;
}
#todo-stats
.todo-clear
a
{
color
:
#777777
;
font-size
:
12px
;
}
#todo-stats
.todo-clear
a
:visited
{
color
:
#777777
;
}
#todo-stats
.todo-clear
a
:hover
{
color
:
#336699
;
}
#instructions
{
width
:
520px
;
margin
:
10px
auto
;
color
:
#777777
;
text-shadow
:
rgba
(
255
,
255
,
255
,
0.8
)
0
1px
0
;
text-align
:
center
;
}
#instructions
a
{
color
:
#336699
;
}
#credits
{
width
:
520px
;
margin
:
30px
auto
;
color
:
#999
;
text-shadow
:
rgba
(
255
,
255
,
255
,
0.8
)
0
1px
0
;
text-align
:
center
;
}
#credits
a
{
color
:
#888
;
}
/*
* Fran�ois 'cahnory' Germain
*/
.ui-tooltip
,
.ui-tooltip-top
,
.ui-tooltip-right
,
.ui-tooltip-bottom
,
.ui-tooltip-left
{
color
:
#ffffff
;
cursor
:
normal
;
display
:
-moz-inline-stack
;
display
:
inline-block
;
font-size
:
12px
;
font-family
:
arial
;
padding
:
.5em
1em
;
position
:
relative
;
text-align
:
center
;
text-shadow
:
0
-1px
1px
#111111
;
-webkit-border-top-left-radius
:
4px
;
-webkit-border-top-right-radius
:
4px
;
-webkit-border-bottom-right-radius
:
4px
;
-webkit-border-bottom-left-radius
:
4px
;
-khtml-border-top-left-radius
:
4px
;
-khtml-border-top-right-radius
:
4px
;
-khtml-border-bottom-right-radius
:
4px
;
-khtml-border-bottom-left-radius
:
4px
;
-moz-border-radius-topleft
:
4px
;
-moz-border-radius-topright
:
4px
;
-moz-border-radius-bottomright
:
4px
;
-moz-border-radius-bottomleft
:
4px
;
border-top-left-radius
:
4px
;
border-top-right-radius
:
4px
;
border-bottom-right-radius
:
4px
;
border-bottom-left-radius
:
4px
;
-o-box-shadow
:
0
1px
2px
#000000
,
inset
0
0
0
1px
#222222
,
inset
0
2px
#666666
,
inset
0
-2px
2px
#444444
;
-moz-box-shadow
:
0
1px
2px
#000000
,
inset
0
0
0
1px
#222222
,
inset
0
2px
#666666
,
inset
0
-2px
2px
#444444
;
-khtml-box-shadow
:
0
1px
2px
#000000
,
inset
0
0
0
1px
#222222
,
inset
0
2px
#666666
,
inset
0
-2px
2px
#444444
;
-webkit-box-shadow
:
0
1px
2px
#000000
,
inset
0
0
0
1px
#222222
,
inset
0
2px
#666666
,
inset
0
-2px
2px
#444444
;
box-shadow
:
0
1px
2px
#000000
,
inset
0
0
0
1px
#222222
,
inset
0
2px
#666666
,
inset
0
-2px
2px
#444444
;
background-color
:
#3b3b3b
;
background-image
:
-moz-linear-gradient
(
top
,
#555555
,
#222222
);
background-image
:
-webkit-gradient
(
linear
,
left
top
,
left
bottom
,
color-stop
(
0
,
#555555
),
color-stop
(
1
,
#222222
));
filter
:
progid
:
DXImageTransform
.
Microsoft
.
gradient
(
startColorStr
=
#555555
,
EndColorStr
=
#222222
);
-ms-filter
:
progid
:
DXImageTransform
.
Microsoft
.
gradient
(
startColorStr
=
#555555
,
EndColorStr
=
#222222
);
}
.ui-tooltip
:after
,
.ui-tooltip-top
:after
,
.ui-tooltip-right
:after
,
.ui-tooltip-bottom
:after
,
.ui-tooltip-left
:after
{
content
:
"\25B8"
;
display
:
block
;
font-size
:
2em
;
height
:
0
;
line-height
:
0
;
position
:
absolute
;
}
.ui-tooltip
:after
,
.ui-tooltip-bottom
:after
{
color
:
#2a2a2a
;
bottom
:
0
;
left
:
1px
;
text-align
:
center
;
text-shadow
:
1px
0
2px
#000000
;
-o-transform
:
rotate
(
90deg
);
-moz-transform
:
rotate
(
90deg
);
-khtml-transform
:
rotate
(
90deg
);
-webkit-transform
:
rotate
(
90deg
);
width
:
100%
;
}
.ui-tooltip-top
:after
{
bottom
:
auto
;
color
:
#4f4f4f
;
left
:
-2px
;
top
:
0
;
text-align
:
center
;
text-shadow
:
none
;
-o-transform
:
rotate
(
-90deg
);
-moz-transform
:
rotate
(
-90deg
);
-khtml-transform
:
rotate
(
-90deg
);
-webkit-transform
:
rotate
(
-90deg
);
width
:
100%
;
}
.ui-tooltip-right
:after
{
color
:
#222222
;
right
:
-0.375em
;
top
:
50%
;
margin-top
:
-.05em
;
text-shadow
:
0
1px
2px
#000000
;
-o-transform
:
rotate
(
0
);
-moz-transform
:
rotate
(
0
);
-khtml-transform
:
rotate
(
0
);
-webkit-transform
:
rotate
(
0
);
}
.ui-tooltip-left
:after
{
color
:
#222222
;
left
:
-0.375em
;
top
:
50%
;
margin-top
:
.1em
;
text-shadow
:
0
-1px
2px
#000000
;
-o-transform
:
rotate
(
180deg
);
-moz-transform
:
rotate
(
180deg
);
-khtml-transform
:
rotate
(
180deg
);
-webkit-transform
:
rotate
(
180deg
);
}
\ No newline at end of file
todo-example/angularjs/img/destroy.png
0 → 100644
View file @
ce37926e
555 Bytes
todo-example/angularjs/index.html
0 → 100644
View file @
ce37926e
<!doctype html>
<html
xmlns:ng=
"http://angularjs.org/"
>
<head>
<meta
charset=
"utf-8"
>
<title>
AngularJS Todo App
</title>
<link
rel=
"stylesheet"
href=
"css/app.css"
/>
</head>
<body>
<div
ng:controller=
"App.Controllers.TodoController"
id=
"todoapp"
>
<div
class=
"title"
>
<h1>
Todos
</h1>
</div>
<div
class=
"content"
>
<div
id=
"todo-form"
>
</div>
<form
id=
"todo-form"
ng:submit=
"addTodo()"
>
<input
id=
"new-todo"
name=
"newTodo"
placeholder=
"What needs to be done?"
type=
"text"
>
<span
class=
"ui-tooltip-top"
ng:show=
"showHitEnterHint"
>
Press Enter to save this task
</span>
</form>
<div
id=
"todos"
>
<ul
id=
"todo-list"
>
<li
class=
"todo"
ng:class=
"'editing-' + todo.editing + ' done-' + todo.done"
ng:repeat=
"todo in todos"
>
<div
class=
"display"
>
<input
class=
"check"
type=
"checkbox"
name=
"todo.done"
/ >
<div
ng:click=
"editTodo(todo)"
class=
"todo-content"
>
{{ todo.content }}
</div>
<span
class=
"todo-destroy"
ng:click=
"removeTodo(todo)"
></span>
</div>
<div
class=
"edit"
>
<form
ng:submit=
"finishEditing(todo)"
>
<input
class=
"todo-input"
my:focus=
"todo.editing"
my:blur=
"finishEditing(todo)"
name=
"todo.content"
type=
"text"
>
</form>
</div>
</li>
</ul>
</div>
<div
id=
"todo-stats"
>
<span
class=
"todo-count"
ng:show=
"hasTodos()"
>
<span
class=
"number"
>
{{ remainingTodos() }}
</span>
<span
class=
"word"
>
items
</span>
left.
</span>
<span
class=
"todo-clear"
ng:show=
"hasFinishedTodos()"
>
<a
ng:click=
"clearCompletedItems()"
>
Clear
<span
class=
"number-done"
>
{{ finishedTodos() }}
</span>
completed
<span
class=
"word-done"
>
item
</span>
</a>
</span>
</div>
</div>
</div>
<ul
id=
"instructions"
>
<li>
Click to edit a todo.
</li>
</ul>
<div
id=
"credits"
>
<p>
Originally Created by
<br>
<a
href=
"http://jgn.me/"
>
Jérôme Gravel-Niquet
</a>
</p>
<p>
Rewritten to use
<a
href=
"http://angularjs.org"
>
AngularJS
</a>
by
<br>
<a
href=
"http://cburgdorf.wordpress.com/"
>
Christoph Burgdorf
</a>
</p>
</div>
<script
src=
"js/booter.js"
></script>
<script
src=
"lib/angular/angular.js"
ng:autobind
></script>
<script
src=
"lib/rx/rx.js"
></script>
<script
src=
"lib/rx/rx.angular.js"
></script>
<script
src=
"js/services.js"
></script>
<script
src=
"js/controllers.js"
></script>
<script
src=
"js/filters.js"
></script>
<script
src=
"js/widgets.js"
></script>
<script
src=
"js/directive.js"
></script>
</body>
</html>
todo-example/angularjs/js/booter.js
0 → 100644
View file @
ce37926e
var
App
=
{};
App
.
Controllers
=
{};
todo-example/angularjs/js/controllers.js
0 → 100644
View file @
ce37926e
/* App Controllers */
App
.
Controllers
.
TodoController
=
function
()
{
var
self
=
this
;
self
.
newTodo
=
""
;
self
.
addTodo
=
function
()
{
if
(
self
.
newTodo
.
length
===
0
)
return
;
self
.
todos
.
push
({
content
:
self
.
newTodo
,
done
:
false
,
editing
:
false
});
self
.
newTodo
=
""
;
};
self
.
editTodo
=
function
(
todo
)
{
//cancel any active editing operation
angular
.
forEach
(
self
.
todos
,
function
(
value
)
{
value
.
editing
=
false
;
});
todo
.
editing
=
true
;
};
self
.
finishEditing
=
function
(
todo
)
{
todo
.
editing
=
false
;
};
self
.
removeTodo
=
function
(
todo
)
{
angular
.
Array
.
remove
(
self
.
todos
,
todo
);
};
self
.
todos
=
[];
var
countTodos
=
function
(
done
)
{
return
function
()
{
return
angular
.
Array
.
count
(
self
.
todos
,
function
(
x
)
{
return
x
.
done
===
(
done
===
"
done
"
);
});
}
};
self
.
remainingTodos
=
countTodos
(
"
undone
"
);
self
.
finishedTodos
=
countTodos
(
"
done
"
);
self
.
clearCompletedItems
=
function
()
{
var
oldTodos
=
self
.
todos
;
self
.
todos
=
[];
angular
.
forEach
(
oldTodos
,
function
(
todo
)
{
if
(
!
todo
.
done
)
self
.
todos
.
push
(
todo
);
});
};
self
.
hasFinishedTodos
=
function
()
{
return
self
.
finishedTodos
()
>
0
;
};
self
.
hasTodos
=
function
()
{
return
self
.
todos
.
length
>
0
;
};
/*
The following code deals with hiding the hint *while* you are typing,
showing it once you did *finish* typing (aka 500 ms since you hit the last key)
*in case* the result is a non empty string
*/
Rx
.
Observable
.
FromAngularScope
(
self
,
"
newTodo
"
)
.
Do
(
function
()
{
self
.
showHitEnterHint
=
false
;
})
.
Throttle
(
500
)
.
Select
(
function
(
x
)
{
return
x
.
length
>
0
;
})
.
ToOutputProperty
(
self
,
"
showHitEnterHint
"
);
};
\ No newline at end of file
todo-example/angularjs/js/directive.js
0 → 100644
View file @
ce37926e
angular
.
directive
(
'
my:blur
'
,
function
(
expression
,
compiledElement
)
{
var
compiler
=
this
;
return
function
(
linkElement
)
{
var
scope
=
this
;
linkElement
.
bind
(
'
blur
'
,
function
(
event
)
{
scope
.
$apply
(
expression
,
linkElement
);
event
.
stopPropagation
();
});
};
});
angular
.
directive
(
"
my:focus
"
,
function
(
expression
,
compiledElement
){
return
function
(
element
){
this
.
$watch
(
expression
,
function
(){
if
(
angular
.
formatter
.
boolean
.
parse
(
expression
)
&&
element
.
length
>
0
){
element
[
0
].
focus
();
}
},
element
);
};
});
todo-example/angularjs/lib/angular/angular-ie-compat.js
0 → 100644
View file @
ce37926e
/*
Content-Type: multipart/related; boundary="_"
--_
Content-Location:img0
Content-Transfer-Encoding:base64
R0lGODlhCwAXAKIAAMzMzO/v7/f39////////wAAAAAAAAAAACH5BAUUAAQALAAAAAALABcAAAMrSLoc/AG8FeUUIN+sGebWAnbKSJodqqlsOxJtqYooU9vvk+vcJIcTkg+QAAA7
--_
Content-Location:img1
Content-Transfer-Encoding:base64
R0lGODlhCwAXAKIAAMzMzO/v7/f39////////wAAAAAAAAAAACH5BAUUAAQALAAAAAALABcAAAMrCLTcoM29yN6k9socs91e5X3EyJloipYrO4ohTMqA0Fn2XVNswJe+H+SXAAA7
--_
Content-Location:img2
Content-Transfer-Encoding:base64
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
--_--
*/
(
function
(){
var
jsUri
=
document
.
location
.
href
.
replace
(
/
\/[^\/]
+
(
#.*
)?
$/
,
'
/
'
)
+
document
.
getElementById
(
'
ng-ie-compat
'
).
src
,
css
=
'
#ng-callout .ng-arrow-left{*background-image:url("mhtml:
'
+
jsUri
+
'
!img0")}#ng-callout .ng-arrow-right{*background-image:url("mhtml:
'
+
jsUri
+
'
!img1")}.ng-input-indicator-wait {*background-image:url("mhtml:
'
+
jsUri
+
'
!img2")}
'
,
s
=
document
.
createElement
(
'
style
'
);
s
.
setAttribute
(
'
type
'
,
'
text/css
'
);
if
(
s
.
styleSheet
)
{
s
.
styleSheet
.
cssText
=
css
;
}
else
{
s
.
appendChild
(
document
.
createTextNode
(
css
));
}
document
.
getElementsByTagName
(
'
head
'
)[
0
].
appendChild
(
s
);
})();
todo-example/angularjs/lib/angular/angular.js
0 → 100644
View file @
ce37926e
This diff is collapsed.
Click to expand it.
todo-example/angularjs/lib/angular/angular.min.js
0 → 100644
View file @
ce37926e
This diff is collapsed.
Click to expand it.
todo-example/angularjs/lib/angular/version.txt
0 → 100644
View file @
ce37926e
0.10.0
todo-example/angularjs/lib/rx/rx.angular.js
0 → 100644
View file @
ce37926e
(
function
()
{
var
global
=
this
,
root
=
(
typeof
ProvideCustomRxRootObject
==
"
undefined
"
)
?
global
.
Rx
:
ProvideCustomRxRootObject
();
var
observable
=
root
.
Observable
;
var
observableCreate
=
observable
.
Create
;
observable
.
FromAngularScope
=
function
(
angularScope
,
propertyName
)
{
return
observableCreate
(
function
(
observer
)
{
var
unwatch
=
angularScope
.
$watch
(
function
(){
return
angularScope
[
propertyName
];
},
function
(){
observer
.
OnNext
(
angularScope
[
propertyName
]);
});
return
function
()
{
unwatch
();
};
})
.
Skip
(
1
);
//In AngularJS 0.10.x There is no way to avoid initial evaluation. So we take care about it!
};
observable
.
prototype
.
ToOutputProperty
=
function
(
scope
,
propertyName
)
{
var
disposable
=
this
.
Subscribe
(
function
(
data
)
{
scope
[
propertyName
]
=
data
;
scope
.
$apply
();
});
scope
.
$on
(
'
$destroy
'
,
function
(
event
){
//we need to asure that we only dispose the observable when it's our scope that
//was destroyed.
//TODO: Figure out if thats enough to asure the above (e.g what happens when
//a child scope will be destroyed but ours won't be affected. Or the other way around,
//if a higher scope will be destroyed (and therefore ours as well) does it mean that $destroy()
//will be also called on our scope or will our scope get destroyed without actually
//calling $destroy() on it?
if
(
event
.
targetScope
===
scope
){
disposable
.
Dispose
();
}
});
};
})();
\ No newline at end of file
todo-example/angularjs/lib/rx/rx.js
0 → 100644
View file @
ce37926e
This diff is collapsed.
Click to expand it.
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