%li{ class: "todo todo-#{todo.done? ? 'done' : 'pending'}", id: dom_id(todo), data: { url: todo_target_path(todo) } } .todo-avatar = author_avatar(todo, size: 40) .todo-item.todo-block.align-self-center{ data: { qa_selector: "todo_item_container" } } .todo-title - if todo_author_display?(todo) = todo_target_state_pill(todo) %span.title-item.author-name.bold - if todo.author = link_to_author(todo, self_added: todo.self_added?) - else (removed) %span.title-item.action-name{ data: { qa_selector: "todo_action_name_content" } } = todo_action_name(todo) %span.title-item.todo-label.todo-target-link - if todo.target = todo_target_link(todo) - else = _("(removed)") %span.title-item.todo-target-title{ data: { qa_selector: "todo_target_title_content" } } = todo_target_title(todo) %span.title-item.todo-project.todo-label at = todo_parent_path(todo) - if todo.self_assigned? %span.title-item.action-name = todo_self_addressing(todo) %span.title-item · %span.title-item.todo-timestamp #{time_ago_with_tooltip(todo.created_at)} = todo_due_date(todo) - if todo.note.present? .todo-body .todo-note.break-word .md = first_line_in_markdown(todo, :body, 150, project: todo.project) - if todo.pending? .todo-actions = link_to dashboard_todo_path(todo), method: :delete, class: 'btn btn-loading d-flex align-items-center js-done-todo', data: { href: dashboard_todo_path(todo) } do Done %span.spinner.ml-1 = link_to restore_dashboard_todo_path(todo), method: :patch, class: 'btn btn-loading d-flex align-items-center js-undo-todo hidden', data: { href: restore_dashboard_todo_path(todo) } do Undo %span.spinner.ml-1 - else .todo-actions = link_to restore_dashboard_todo_path(todo), method: :patch, class: 'btn btn-loading d-flex align-items-center js-add-todo', data: { href: restore_dashboard_todo_path(todo) } do Add a to do %span.spinner.ml-1