Skip to content

Instantly share code, notes, and snippets.

Created June 25, 2017 14:31
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save anonymous/8fb8ef08a042fcea34656023bab51647 to your computer and use it in GitHub Desktop.
Save anonymous/8fb8ef08a042fcea34656023bab51647 to your computer and use it in GitHub Desktop.
var todo = (function(){
var tasks = [];
var addTask = (function(){
var id = 0;
return function(title){
var result = id;
tasks.push({id: id++, title: title, state: STATE.PROGRESS()});
render();
return result;
}
})();
var removeTask = function(id){
var isRemoved = false;
for(var i =0; i< tasks.length; i++){
if(tasks[i].id === id){
tasks.splice(i,1);
isRemoved = true;
break;
}
}
render();
};
var changeState = function(id, state){
var ID = false, STATE;
for(var i = 0; i < tasks.length; i++){
if(tasks[i].id === id){
ID = id;
break;
}
}
if(ID === false) {
warning('changeState : invalid id - ' + id);
return;
}
STATE = state;
for(var i = 0; i < tasks.length; i++){
if(tasks[i].id === ID){
tasks[i].state = STATE;
break;
}
}
render();
};
var target;
var render = function(){ target.render(Object.assign(tasks)); };
return{
setRenderer: function(renderer){
if (!(renderer instanceof Renderer)) return ;
target = renderer;
target.init(todo);
},
add:addTask,
remove:removeTask,
toggle:function(id){
for(var i = 0; i<tasks.length;i++){
if(tasks[i].id === id){
if(tasks[i].state === STATE.PROGRESS()) changeState(id, STATE.COMPLETE());
else changeState(id, STATE.PROGRESS());
break;
}
}
}
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment