Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Main Todo List View <section class="main"> #51

Closed
5 tasks done
nelsonic opened this issue Aug 6, 2018 · 2 comments
Closed
5 tasks done

Main Todo List View <section class="main"> #51

nelsonic opened this issue Aug 6, 2018 · 2 comments

Comments

@nelsonic
Copy link
Member

nelsonic commented Aug 6, 2018

The "Main" view in the Todo List Application displays the actual list.
Try it: https://todomvc.com/examples/vanillajs/
todomvc-main-section-todo-list-html

This is the HTML copied directly from the browser:

<section class="main" style="display: block;">
  <input class="toggle-all" type="checkbox">
  <label for="toggle-all">Mark all as complete</label>
  <ul class="todo-list">
    <li data-id="1533501855500" class="completed">
      <div class="view">
        <input class="toggle" type="checkbox">
        <label>Learn Elm Architecture</label>
        <button class="destroy"></button>
      </div>
    </li>
    <li data-id="1533501861171" class="">
      <div class="view">
        <input class="toggle" type="checkbox">
        <label>Build Todo List App</label>
        <button class="destroy"></button>
      </div>
    </li>
    <li data-id="1533501867123" class="">
      <div class="view">
        <input class="toggle" type="checkbox">
        <label>Win the Internet!</label>
        <button class="destroy"></button>
      </div>
    </li>
  </ul>
</section>

Acceptance Criteria

  • Todo List items should be displayed as list items <li> in an unordered list <ul>.
  • Each Todo List item <li> should contain a <div> with a class="view" which "wraps":
    • <input class="toggle" type="checkbox"> - the "checkbox" that people can "Toggle" to change the "state" of the Todo item from "active" to "done" (_which updates the model From: model.todos[id].done=false To: model.todos[id].done=true
    • <label> - the text content of the todo list item
    • <button class="destroy"> - the button the person can click/tap to delete a Todo item.

Note: the "toggle-all" (above the "main" list) is a separate issue/feature: #50

This issue is part of the TodoMVC Feature List [Epic] #48

@nelsonic
Copy link
Member Author

nelsonic commented Aug 6, 2018

Test first:

test('render "main" view using (elmish) HTML DOM functions', function (t) {
  const model = {
    todos: [
      { id: 1, title: "Learn Elm Architecture", done: true },
      { id: 2, title: "Build Todo List App",    done: false },
      { id: 3, title: "Win the Internet!",      done: false }
    ],
    hash: '#/' // the "route" to display
  };
  // render the "main" view and append it to the DOM inside the `test-app` node:
  elmish.append_childnodes(app.render_main(model), document.getElementById(id));
  const done = document.querySelectorAll('.completed')[0].textContent;
  t.equal(done, 'Learn Elm Architecture', 'Done: Learn "TEA"');
  const todo = document.querySelectorAll('.view')[1].textContent;
  t.equal(todo, 'Build Todo List App', 'Todo: Build Todo List App');
  const todos = document.querySelectorAll('.toggle');
  [true, false, false].forEach(function(state, index){
    t.equal(todos.checked, state, "Todo #" + index + " is done=" + state)
  })
  elmish.empty(document.getElementById(id)); // clear DOM ready for next test
  t.end();
});

image

@nelsonic
Copy link
Member Author

nelsonic commented Aug 7, 2018

Rendering an individual todo list item (<li>) is handled by render_item see: #52

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant