dev.html 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>title</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" class="all" 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:filter">Show All</a> |
  46. <a class="remaining" sd-on="click:filter">Show Remaining</a> |
  47. <a class="completed" sd-on="click:filter">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.plant('TodoList', function (scope, seed) {
  69. scope.remaining = scope.todos.reduce(function (count, todo) {
  70. return count + (todo.done ? 0 : 1)
  71. }, 0)
  72. scope.addTodo = function (e) {
  73. var text = e.el.value
  74. if (text) {
  75. e.el.value = ''
  76. scope.todos.push({
  77. text: text,
  78. done: false
  79. })
  80. scope.remaining++
  81. }
  82. }
  83. scope.removeTodo = function (e) {
  84. var i = e.seed.eachIndex
  85. scope.todos.splice(i, 1)
  86. }
  87. scope.toggleTodo = function (e) {
  88. scope.remaining += e.seed.scope.done ? -1 : 1
  89. }
  90. scope.filter = function (e) {
  91. var filter = e.el.className
  92. seed.el.className = filter
  93. }
  94. })
  95. var now = Date.now()
  96. var app = Seed.sprout({
  97. el: '#app',
  98. data: data
  99. })
  100. console.log(Date.now() - now)
  101. </script>
  102. </body>
  103. </html>