| import View from './view' |
| import Controller from './controller' |
| import Model from './model' |
| import Store from './store' |
| import Template from './template' |
| import {remove} from './helpers' |
| |
| export {updateTodo, getTodo, subscribe} |
| |
| let todo |
| const subscribers = [] |
| |
| /** |
| * Sets up a brand new Todo list. |
| * |
| * @param {string} name The name of your new to do list. |
| */ |
| function Todo(name) { |
| this.storage = new Store(name) |
| this.model = new Model(this.storage) |
| this.template = new Template() |
| this.view = new View(this.template) |
| this.controller = new Controller(this.model, this.view) |
| } |
| |
| function updateTodo() { |
| todo = new Todo('todos-vanillajs') |
| todo.controller.setView(document.location.hash) |
| subscribers.forEach(s => s()) |
| } |
| |
| function getTodo() { |
| return todo |
| } |
| |
| function subscribe(cb) { |
| subscribers.push(cb) |
| return function unsubscribe() { |
| remove(subscribers, cb) |
| } |
| } |