123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- Smalltalk createPackage: 'Trapped-Todo'!
- (Smalltalk packageAt: 'Trapped-Todo') imports: {'trapped/Trapped-Processors'}!
- Object subclass: #TrappedTodo
- instanceVariableNames: 'title todos todoText'
- package: 'Trapped-Todo'!
- !TrappedTodo commentStamp!
- // Code from AngularJS Todo example, http://angularjs.org/#todo-js
- function TodoCtrl($scope) {
- $scope.todos = [
- {text:'learn angular', done:true},
- {text:'build an angular app', done:false}];
-
- $scope.addTodo = function() {
- $scope.todos.push({text:$scope.todoText, done:false});
- $scope.todoText = '';
- };
-
- $scope.remaining = function() {
- var count = 0;
- angular.forEach($scope.todos, function(todo) {
- count += todo.done ? 0 : 1;
- });
- return count;
- };
-
- $scope.archive = function() {
- var oldTodos = $scope.todos;
- $scope.todos = [];
- angular.forEach(oldTodos, function(todo) {
- if (!!todo.done) $scope.todos.push(todo);
- });
- };
- }!
- !TrappedTodo methodsFor: 'accessing'!
- remaining
- ^self todosNotDone size
- !
- title
- ^title
- !
- title: aString
- title := aString
- !
- todoText
- ^todoText
- !
- todoText: aString
- todoText := aString
- !
- todos
- ^todos
- !
- todos: anArray
- todos := anArray
- !
- todosNotDone
- ^self todos reject: [ :each | each at: 'done' ]
- ! !
- !TrappedTodo methodsFor: 'action'!
- addTodo
- self todos add: #{'text'->self todoText. 'done'->false}.
- self todoText: ''
- !
- archive
- self todos: self todosNotDone
- ! !
- !TrappedTodo methodsFor: 'initialization'!
- initialize
- | axon |
- super initialize.
- axon := SimpleAxon new.
- axon registerIn: self.
-
- axon addInterest: (
- InterestedInTrapPathSubtree new
- aspect: #((todos))
- block: [ axon changed: #((remaining)) ]).
- [ self axes: #((todos)) transform: [{
- #{'text'->'learn trapped'. 'done'->true}.
- #{'text'->'build a trapped app'. 'done'->false}
- }]] valueWithTimeout: 2000.
- title := 'Todo'.
- todoText := nil.
- todos := nil
- ! !
- !TrappedProcessor class methodsFor: '*Trapped-Todo'!
- classDoneXxx
- "This processor is not used any more,
- it was replaced by generic
- (replace ^ with ^done-) (attr class)
- in HTML.
- This example is left here to show how you can create quick
- toView-only processor without class by just passing a block"
- ^self dataToView: [ :carrier | carrier target class: 'done-', carrier value ]
- ! !
|