blob: f0ac23832b22911afb002fc9b4c93cb7aaf668f1 [file] [log] [blame]
library todomvc.web.elements.td_todos;
import 'dart:html';
import 'package:polymer/polymer.dart';
import 'td_input.dart';
import 'td_model.dart';
@CustomTag('td-todos')
class TodoList extends PolymerElement {
@published String modelId;
@observable TodoModel model;
@observable String activeRoute;
factory TodoList() => new Element.tag('td-todos');
TodoList.created() : super.created();
TodoInput get _newTodo => $['new-todo'];
void modelIdChanged() {
model = document.querySelector('#$modelId');
}
void routeAction(e, route) {
if (model != null) model.filter = route;
// TODO(jmesserly): polymer_expressions lacks boolean conversions.
activeRoute = (route != null && route != '') ? route : 'all';
}
void addTodoAction() {
model.newItem(_newTodo.value);
// when polyfilling Object.observe, make sure we update immediately
Observable.dirtyCheck();
_newTodo.value = '';
}
void cancelAddTodoAction() {
_newTodo.value = '';
}
void itemChangedAction() {
if (model != null) model.itemsChanged();
}
void destroyItemAction(e, detail) {
model.destroyItem(detail);
}
void toggleAllCompletedAction(e, detail, sender) {
model.setItemsCompleted(sender.checked);
}
void clearCompletedAction() {
model.clearItems();
}
// TODO(jmesserly): workaround for HTML Imports not setting correct baseURI
String get baseUri =>
declaration.element.ownerDocument == document ? '../' : '';
}