dev.html 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>Todo</title>
  5. <meta charset="utf-8">
  6. <script src="dist/seed.js"></script>
  7. <style type="text/css">
  8. .red {
  9. color: red;
  10. }
  11. .done {
  12. text-decoration: line-through;
  13. }
  14. #app.all .all {
  15. font-weight: bold;
  16. }
  17. #app.remaining .todo.done {
  18. display: none;
  19. }
  20. #app.remaining .remaining {
  21. font-weight: bold;
  22. }
  23. #app.completed .todo:not(.done) {
  24. display: none;
  25. }
  26. #app.completed .completed {
  27. font-weight: bold;
  28. }
  29. </style>
  30. </head>
  31. <body>
  32. <div id="app" sd-class="filter" sd-controller="TodoList">
  33. <div>
  34. <input placeholder="What needs to be done?" sd-on="change:addTodo">
  35. </div>
  36. <ul sd-show="todos">
  37. <li class="todo" sd-each="todo:todos" sd-class="done:todo.done">
  38. <input type="checkbox" sd-checked="todo.done" sd-on="change:toggleTodo">
  39. <span sd-text="todo.text"></span>
  40. <a sd-on="click:removeTodo">X</a>
  41. </li>
  42. </ul>
  43. <div id="footer">
  44. Remaining: <span sd-text="remaining"></span><br>
  45. <a class="all" sd-on="click:setFilter">Show All</a> |
  46. <a class="remaining" sd-on="click:setFilter">Show Remaining</a> |
  47. <a class="completed" sd-on="click:setFilter">Show Completed</a>
  48. </div>
  49. </div>
  50. <script>
  51. var data = {
  52. todos: [
  53. {
  54. text: '1!',
  55. done: false
  56. },
  57. {
  58. text: '2!',
  59. done: false
  60. },
  61. {
  62. text: '3!',
  63. done: true
  64. }
  65. ]
  66. }
  67. var Seed = require('seed')
  68. Seed.controller('TodoList', function (scope, seed) {
  69. scope.filter = 'all'
  70. scope.remaining = scope.todos.reduce(function (count, todo) {
  71. return count + (todo.done ? 0 : 1)
  72. }, 0)
  73. scope.addTodo = function (e) {
  74. var text = e.el.value
  75. if (text) {
  76. e.el.value = ''
  77. scope.todos.push({
  78. text: text,
  79. done: false
  80. })
  81. scope.remaining++
  82. }
  83. }
  84. scope.removeTodo = function (e) {
  85. var i = e.seed.eachIndex
  86. scope.todos.splice(i, 1)
  87. scope.remaining -= e.seed.scope.done ? 0 : 1
  88. }
  89. scope.toggleTodo = function (e) {
  90. scope.remaining += e.seed.scope.done ? -1 : 1
  91. }
  92. scope.setFilter = function (e) {
  93. scope.filter = e.el.className
  94. }
  95. })
  96. var app = Seed.bootstrap({
  97. el: '#app',
  98. data: data
  99. })
  100. </script>
  101. </body>
  102. </html>