li(bindonce='list', bo-id='"task-"+task.id', ng-repeat='task in obj[list.type+"s"]', class='task {{Shared.taskClasses(task, user.filters, user.preferences.dayStart, user.lastCron, list.showCompleted, main)}}', ng-click='spell && castEnd(task, "task", $event)', ng-class='{"cast-target":spell}', popover-trigger='mouseenter', popover-placement='top', popover='{{task.notes}}', ng-dblclick='editTask(task)') // right-hand side control buttons .task-meta-controls // Due Date span.task-date(ng-if='task.type=="todo" && task.date') span(ng-class='{"label label-important":moment(task.date).isBefore(_today)}') {{moment(task.date).format('MM/DD')}} // Streak span(ng-show='task.streak') {{task.streak}} span(tooltip='Streak Counter') i.icon-forward // Icons only available if you own the tasks (aka, hidden from challenge stats) span(ng-if='!obj._locked') span.badge(ng-if='task.checklist[0]', ng-class='{"badge-success":checklistCompletion(task.checklist) == task.checklist.length}') {{checklistCompletion(task.checklist)}}/{{task.checklist.length}} i.icon-tags(tooltip='{{appliedTags(user.tags, task.tags)}}', ng-hide='Shared.noTags(task.tags)') // edit a(ng-hide='task._editing', ng-click='editTask(task)', tooltip='Edit') i.icon-pencil(ng-hide='task._editing') // cancel a(ng-hide='!task._editing', ng-click='editTask(task)', tooltip='Cancel') i.icon-remove(ng-hide='!task._editing') // save a(ng-hide='!task._editing', ng-click='editTask(task);saveTask(task)', tooltip='Save') i.icon-ok(ng-hide='!task._editing') //challenges span(ng-if='task.challenge.id') span(ng-if='task.challenge.broken') i.icon-bullhorn(style='background-color:red;', ng-click='task._editing = true', tooltip="Broken Challenge Link", tooltip-placement='right') span(ng-if='!task.challenge.broken') i.icon-bullhorn(tooltip="Challenge") // delete a(ng-if='!task.challenge.id', ng-click='removeTask(obj[list.type+"s"], $index)', tooltip='Delete') i.icon-trash // chart a(ng-show='task.history', ng-click='toggleChart(obj._id+task.id, task)', tooltip='Progress') i.icon-signal // notes span.task-notes(ng-show='task.notes && !task._editing') i.icon-comment // left-hand side checkbox .task-controls.task-primary // Habits span(bo-if='task.type=="habit"') // score() is overridden in challengesCtrl to do nothing a.task-action-btn(ng-if='task.up', ng-click='score(task,"up")') + a.task-action-btn(ng-if='task.down', ng-click='score(task,"down")') - // Rewards span(ng-show='task.type=="reward"') a.money.btn-buy(ng-click='score(task, "down")') span.reward-cost {{task.value}} span.shop_gold // Daily & Todos span.task-checker.action-yesno(bo-if='task.type=="daily" || task.type=="todo"') input.visuallyhidden.focusable(ng-if='$state.includes("tasks")', id='box-{{obj._id}}_{{task.id}}', type='checkbox', ng-model='task.completed', ng-change='changeCheck(task)') input.visuallyhidden.focusable(ng-if='!$state.includes("tasks")', id='box-{{obj._id}}_{{task.id}}', type='checkbox') label(for='box-{{obj._id}}_{{task.id}}') // main content p.task-text markdown(ng-model='task.text',target='_blank') //-| {{task.text}} // edit/options dialog div(ng-if='task._editing') .task-options // Broken Challenge .well(ng-if='task.challenge.broken') div(ng-if='task.challenge.broken=="TASK_DELETED"') p Broken Challenge Link: this task was part of a challenge, but has been removed from it. What would you like to do? p a(ng-click='unlink(task, "keep")') Keep It |  |  a(ng-click="removeTask(obj[list.type+'s'], $index)") Remove It div(ng-if='task.challenge.broken=="CHALLENGE_DELETED"') p Broken Challenge Link: this task was part of a challenge, but the challenge (or group) has been deleted. What to do with the orphan tasks? p a(ng-click='unlink(task, "keep-all")') Keep Them |  |  a(ng-click='unlink(task, "remove-all")') Remove Them div(ng-if='task.challenge.broken=="CHALLENGE_CLOSED"') p. This challenge has been completed, and the winner was {{task.challenge.winner}}! What to do with the orphan tasks? p a(ng-click='unlink(task, "keep-all")') Keep Them |  |  a(ng-click='unlink(task, "remove-all")') Remove Them //div(ng-if='task.challenge.broken=="UNSUBSCRIBED"') p Broken Challenge Link: this task was part of a challenge, but you have unsubscribed from the challenge. What to do with the orphan tasks? p a(ng-click="unlink(task, 'keep-all')") Keep Them |  |  a(ng-click="unlink(task, 'remove-all')") Remove Them // Checklists a.btn.btn-small(ng-if='!task.checklist[0] && (task.type=="daily" || task.type=="todo")',ng-click='addChecklist(task)') i.icon-tasks | Add Checklist form.checklist-form(ng-if='task.checklist') fieldset.option-group.task-checklist(ng-if='!$state.includes("options.social.challenges")') legend.option-title Checklist ul.unstyled li(ng-repeat='item in task.checklist') a.pull-right.checklist-icons(ng-click='removeChecklistItem(task,$index)') i.icon-trash(tooltip='Delete') input(type='checkbox',ng-model='item.completed',ng-change='checkChecklistItem(task)') input.inline-edit(type='text',ng-model='item.text',ui-keypress="{13:'saveChecklist(task,$event,$index)'}",ng-blur='saveChecklist(task,$event,$index)') form(ng-submit='saveTask(task)') // text & notes fieldset.option-group label.option-title Text input.option-content(type='text', ng-model='task.text', required, ng-disabled='task.challenge.id') label.option-title Extra Notes textarea.option-content(rows='3', ng-model='task.notes', ng-disabled='task.challenge.id') // if Habit, plus/minus command options fieldset.option-group(ng-if='task.type=="habit" && !task.challenge.id') legend.option-title Direction/Actions span.task-checker.action-plusminus.select-toggle input.visuallyhidden.focusable(id='{{obj._id}}_{{task.id}}-option-plus', type='checkbox', ng-model='task.up') label(for='{{obj._id}}_{{task.id}}-option-plus') span.task-checker.action-plusminus.select-toggle input.visuallyhidden.focusable(id='{{obj._id}}_{{task.id}}-option-minus', type='checkbox', ng-model='task.down') label(for='{{obj._id}}_{{task.id}}-option-minus') // if Daily, calendar fieldset(bo-if='task.type=="daily"', class="option-group") legend.option-title Repeat .task-controls.tile-group.repeat-days(bindonce) // note, does not use data-toggle="buttons-checkbox" - it would interfere with our own click binding button.task-action-btn.tile(ng-class='{active: task.repeat.su}', type='button', ng-click='task.challenge.id || (task.repeat.su = !task.repeat.su)', bo-text='moment.weekdaysMin(0)') button.task-action-btn.tile(ng-class='{active: task.repeat.m}', type='button', ng-click='task.challenge.id || (task.repeat.m = !task.repeat.m)', bo-text='moment.weekdaysMin(1)') button.task-action-btn.tile(ng-class='{active: task.repeat.t}', type='button', ng-click='task.challenge.id || (task.repeat.t = !task.repeat.t)', bo-text='moment.weekdaysMin(2)') button.task-action-btn.tile(ng-class='{active: task.repeat.w}', type='button', ng-click='task.challenge.id || (task.repeat.w = !task.repeat.w)', bo-text='moment.weekdaysMin(3)') button.task-action-btn.tile(ng-class='{active: task.repeat.th}', type='button', ng-click='task.challenge.id || (task.repeat.th = !task.repeat.th)', bo-text='moment.weekdaysMin(4)') button.task-action-btn.tile(ng-class='{active: task.repeat.f}', type='button', ng-click='task.challenge.id || (task.repeat.f= !task.repeat.f)', bo-text='moment.weekdaysMin(5)') button.task-action-btn.tile(ng-class='{active: task.repeat.s}', type='button', ng-click='task.challenge.id || (task.repeat.s = !task.repeat.s)', bo-text='moment.weekdaysMin(6)') // if Reward, pricing fieldset.option-group.option-short(ng-if='task.type=="reward" && !task.challenge.id') legend.option-title Price input.option-content(type='number', size='16', min='0', step="any", ng-model='task.value') .money.input-suffix span.shop_gold // if Todos, the due date fieldset.option-group(ng-if='task.type=="todo" && !task.challenge.id') legend.option-title Due Date input.option-content.datepicker(type='text', datepicker-popup='MM/dd/yyyy', ng-model='task.date') fieldset.option-group(ng-if='!$state.includes("options.social.challenges")') legend.option-title Tags label.checkbox(ng-repeat='tag in user.tags') input(type='checkbox', ng-model='task.tags[tag.id]') | {{tag.name}} // Advanced Options span(bo-if='task.type!="reward"') p.option-title.mega(ng-click='task._advanced = !task._advanced') Advanced Options fieldset.option-group.advanced-option(ng-class="{visuallyhidden: !task._advanced}") legend.option-title a.priority-multiplier-help(href='https://trello.com/card/priority-multiplier/50e5d3684fe3a7266b0036d6/17', target='_blank', popover-title='How difficult is this task?', popover-trigger='mouseenter', popover="This multiplies its point value. Use sparingly, rely instead on our organic value-adjustment algorithms. But some tasks are grossly more valuable (Write Thesis vs Floss Teeth). Click for more info.") i.icon-question-sign | Difficulty .task-controls.tile-group.priority-multiplier button.task-action-btn.tile(type='button', ng-class='{active: task.priority==1 || !task.priority}', ng-click='task.challenge.id || (task.priority=1)') Easy button.task-action-btn.tile(type='button', ng-class='{active: task.priority==1.5}', ng-click='task.challenge.id || (task.priority=1.5)') Medium button.task-action-btn.tile(type='button', ng-class='{active: task.priority==2}', ng-click='task.challenge.id || (task.priority=2)') Hard //span(ng-if='task.type=="daily" && !task.challenge.id') br span(ng-if='task.type=="daily"') legend.option-title Restore Streak input.option-content(type='number', ng-model='task.streak') legend.option-title Attributes .task-controls.tile-group button.task-action-btn.tile(type='button', ng-class='{active: task.attribute=="str"}', ng-click='task.attribute="str"') Physical button.task-action-btn.tile(type='button', ng-class='{active: task.attribute=="int"}', ng-click='task.attribute="int"') Mental button.task-action-btn.tile(type='button', ng-class='{active: task.attribute=="con"}', ng-click='task.attribute="con"') Social button.task-action-btn.tile(type='button', ng-class='{active: task.attribute=="per"}', ng-click='task.attribute="per"') | Other  i.icon-question-sign(popover='Eg, professional pursuits, hobbies, financial, etc.', popover-trigger='mouseenter', popover-placement='top') button.task-action-btn.tile.spacious(type='submit') Save & Close div(class='{{obj._id}}{{task.id}}-chart', ng-show='charts[obj._id+task.id]')