mirror of
https://github.com/sudoxnym/habitica.git
synced 2026-08-03 00:09:41 +00:00
Refactor task views
This commit is contained in:
parent
b132b3c4fa
commit
701fa2455f
22 changed files with 487 additions and 462 deletions
|
|
@ -38,7 +38,7 @@ html(ng-app="habitrpg", ng-controller="RootCtrl", ng-class='{"applying-action":a
|
|||
include ./shared/header/menu
|
||||
include ./shared/modals/index
|
||||
include ./shared/header/header
|
||||
include ./shared/tasks/lists
|
||||
include ./shared/tasks/index
|
||||
include ./main/index
|
||||
include ./options/index
|
||||
|
||||
|
|
|
|||
70
website/views/shared/tasks/edit/advanced_options.jade
Normal file
70
website/views/shared/tasks/edit/advanced_options.jade
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
div(ng-if='::task.type!="reward"')
|
||||
button.advanced-options-toggle.option-title.mega(type='button',
|
||||
ng-click='task._advanced = !task._advanced', tooltip=env.t('expandCollapse'))
|
||||
=env.t('advancedOptions')
|
||||
|
||||
div(ng-show='task._advanced')
|
||||
div(ng-if='::task.type == "daily"')
|
||||
.form-group
|
||||
legend.option-title=env.t('startDate')
|
||||
.input-group
|
||||
input.form-control(type='text', ng-model='task._tempDateForPicker' datepicker-popup
|
||||
ng-change='updateTaskStartDate(task)' is-open='task._isDatePickerOpen')
|
||||
span.input-group-btn
|
||||
button.btn.btn-default(type='button' ng-click='openDatePicker($event, task)')
|
||||
.glyphicon.glyphicon-calendar
|
||||
|
||||
hr
|
||||
|
||||
.form-group
|
||||
legend.option-title=env.t('repeat')
|
||||
select.form-control(ng-model='task.frequency')
|
||||
option(value='weekly')=env.t('repeatWeek')
|
||||
option(value='daily')=env.t('repeatDays')
|
||||
|
||||
include ./dailies/repeat_options
|
||||
|
||||
hr
|
||||
|
||||
fieldset.option-group.advanced-option(ng-show="task._advanced")
|
||||
|
||||
legend.option-title
|
||||
a.hint.priority-multiplier-help(href='http://habitrpg.wikia.com/wiki/Difficulty', target='_blank', popover-title=env.t('difficultyHelpTitle'), popover-trigger='mouseenter', popover=env.t('difficultyHelpContent'))=env.t('difficulty')
|
||||
ul.priority-multiplier
|
||||
li
|
||||
button(type='button', ng-class='{active: task.priority==1 || !task.priority}',
|
||||
ng-click='task.challenge.id || (task.priority=1)')
|
||||
=env.t('easy')
|
||||
li
|
||||
button(type='button', ng-class='{active: task.priority==1.5}',
|
||||
ng-click='task.challenge.id || (task.priority=1.5)')
|
||||
=env.t('medium')
|
||||
li
|
||||
button(type='button', ng-class='{active: task.priority==2}',
|
||||
ng-click='task.challenge.id || (task.priority=2)')
|
||||
=env.t('hard')
|
||||
|
||||
//span(ng-if='task.type=="daily" && !task.challenge.id')
|
||||
legend.option-title.pull-left=env.t('restoreStreak')
|
||||
input.option-content(type='number', ng-model='task.streak')
|
||||
|
||||
div(ng-if='::(user.preferences.allocationMode == "taskbased" && user.preferences.automaticAllocation) || $state.is("options.social.challenges")')
|
||||
legend.option-title.pull-left=env.t('attributes')
|
||||
ul.task-attributes
|
||||
li
|
||||
button(type='button', ng-class='{active: task.attribute=="str"}',
|
||||
ng-click='task.attribute="str"')
|
||||
=env.t('physical')
|
||||
li
|
||||
button(type='button', ng-class='{active: task.attribute=="int"}',
|
||||
ng-click='task.attribute="int"')
|
||||
=env.t('mental')
|
||||
li
|
||||
button(type='button', ng-class='{active: task.attribute=="con"}',
|
||||
ng-click='task.attribute="con"')
|
||||
=env.t('social')
|
||||
li
|
||||
button(type='button', ng-class='{active: task.attribute=="per"}',
|
||||
ng-click='task.attribute="per"',
|
||||
popover=env.t('otherExamples'), popover-trigger='mouseenter', popover-placement='top')
|
||||
=env.t('other')
|
||||
22
website/views/shared/tasks/edit/checklist.jade
Normal file
22
website/views/shared/tasks/edit/checklist.jade
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
.task-checklist-edit(ng-if='!$state.includes("options.social.challenges")')
|
||||
ul
|
||||
li
|
||||
button(type='button', ng-if='!task.checklist[0] && (task.type=="daily" || task.type=="todo")',
|
||||
ng-click='addChecklist(task)')
|
||||
span.glyphicon.glyphicon-tasks
|
||||
span=env.t('addChecklist')
|
||||
|
||||
form.checklist-form(ng-if='task.checklist')
|
||||
fieldset.option-group(ng-if='!$state.includes("options.social.challenges")')
|
||||
legend.option-title
|
||||
span.hint(popover=env.t('checklistText'), popover-trigger='mouseenter', popover-placement='bottom')
|
||||
=env.t('checklist')
|
||||
ul(hrpg-sort-checklist)
|
||||
li(ng-repeat='item in task.checklist')
|
||||
//input(type='checkbox',ng-model='item.completed',ng-change='saveTask(task,true)')
|
||||
//-,ng-blur='saveTask(task,true)')
|
||||
span.checklist-icon.glyphicon.glyphicon-resize-vertical
|
||||
input(type='text', ng-model='item.text',
|
||||
ui-keyup="{'13':'addChecklistItem(task,$event,$index)','38 40':'navigateChecklist(task,$index,$event)'}")
|
||||
a(ng-click='removeChecklistItem(task,$event,$index,true)')
|
||||
span.glyphicon.glyphicon-trash(tooltip=env.t('delete'))
|
||||
3
website/views/shared/tasks/edit/dailies/calendar.jade
Normal file
3
website/views/shared/tasks/edit/dailies/calendar.jade
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
fieldset.option-group.calendar(ng-if='::task.type=="daily"', class="option-group")
|
||||
.dailies
|
||||
include ./repeat_options
|
||||
27
website/views/shared/tasks/edit/dailies/repeat_options.jade
Normal file
27
website/views/shared/tasks/edit/dailies/repeat_options.jade
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
legend.option-title=env.t('repeatEvery')
|
||||
|
||||
// If frequency is daily
|
||||
.form-group(ng-if='task.frequency=="daily"')
|
||||
.input-group
|
||||
input.form-control(type='number', ng-model='task.everyX', min='1')
|
||||
span.input-group-addon {{task.everyX == 1 ? env.t('day') : env.t('days')}}
|
||||
|
||||
// If frequency is weekly
|
||||
.form-group(ng-show='task.frequency=="weekly"')
|
||||
|
||||
ul.repeat-days(bindonce)
|
||||
// note, does not use data-toggle="buttons-checkbox" - it would interfere with our own click binding
|
||||
li
|
||||
button(ng-class='{active: task.repeat.su}', type='button', ng-click='task.challenge.id || (task.repeat.su = !task.repeat.su)') {{::moment.weekdaysMin(0)}}
|
||||
li
|
||||
button(ng-class='{active: task.repeat.m}', type='button', ng-click='task.challenge.id || (task.repeat.m = !task.repeat.m)') {{::moment.weekdaysMin(1)}}
|
||||
li
|
||||
button(ng-class='{active: task.repeat.t}', type='button', ng-click='task.challenge.id || (task.repeat.t = !task.repeat.t)') {{::moment.weekdaysMin(2)}}
|
||||
li
|
||||
button(ng-class='{active: task.repeat.w}', type='button', ng-click='task.challenge.id || (task.repeat.w = !task.repeat.w)') {{::moment.weekdaysMin(3)}}
|
||||
li
|
||||
button(ng-class='{active: task.repeat.th}', type='button', ng-click='task.challenge.id || (task.repeat.th = !task.repeat.th)') {{::moment.weekdaysMin(4)}}
|
||||
li
|
||||
button(ng-class='{active: task.repeat.f}', type='button', ng-click='task.challenge.id || (task.repeat.f= !task.repeat.f)') {{::moment.weekdaysMin(5)}}
|
||||
li
|
||||
button(ng-class='{active: task.repeat.s}', type='button', ng-click='task.challenge.id || (task.repeat.s = !task.repeat.s)') {{::moment.weekdaysMin(6)}}
|
||||
8
website/views/shared/tasks/edit/habits/plus_minus.jade
Normal file
8
website/views/shared/tasks/edit/habits/plus_minus.jade
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
fieldset.option-group.plusminus(ng-if='task.type=="habit" && !task.challenge.id')
|
||||
legend.option-title=env.t('direction/Actions')
|
||||
span.task-checker
|
||||
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
|
||||
input.visuallyhidden.focusable(id='{{obj._id}}_{{task.id}}-option-minus', type='checkbox', ng-model='task.down')
|
||||
label(for='{{obj._id}}_{{task.id}}-option-minus')
|
||||
52
website/views/shared/tasks/edit/index.jade
Normal file
52
website/views/shared/tasks/edit/index.jade
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
div(ng-if='task._editing')
|
||||
.task-options
|
||||
|
||||
// Broken Challenge
|
||||
.well(ng-if='task.challenge.broken')
|
||||
div(ng-if='task.challenge.broken=="TASK_DELETED"')
|
||||
p=env.t('brokenTask')
|
||||
p
|
||||
a(ng-click='unlink(task, "keep")')=env.t('keepIt')
|
||||
|
|
||||
a(ng-click="removeTask(task, obj[list.type+'s'])")=env.t('removeIt')
|
||||
div(ng-if='task.challenge.broken=="CHALLENGE_DELETED"')
|
||||
p
|
||||
|
|
||||
=env.t('brokenChallenge')
|
||||
p
|
||||
a(ng-click='unlink(task, "keep-all")')=env.t('keepThem')
|
||||
| |
|
||||
a(ng-click='unlink(task, "remove-all")')=env.t('removeThem')
|
||||
div(ng-if='task.challenge.broken=="CHALLENGE_CLOSED"')
|
||||
p
|
||||
!=env.t('challengeCompleted', {user: "{{task.challenge.winner}}"})
|
||||
p
|
||||
a(ng-click='unlink(task, "keep-all")')=env.t('keepThem')
|
||||
| |
|
||||
a(ng-click='unlink(task, "remove-all")')=env.t('removeThem')
|
||||
//div(ng-if='task.challenge.broken=="UNSUBSCRIBED"')
|
||||
p=env.t('unsubChallenge')
|
||||
p
|
||||
a(ng-click="unlink(task, 'keep-all')")=env.t('keepThem')
|
||||
| |
|
||||
a(ng-click="unlink(task, 'remove-all')")=env.t('removeThem')
|
||||
|
||||
include ./checklist
|
||||
|
||||
form(ng-submit='saveTask(task,false,true)')
|
||||
include ./text_notes
|
||||
|
||||
include ./habits/plus_minus
|
||||
|
||||
include ./dailies/calendar
|
||||
|
||||
include ./rewards/pricing
|
||||
|
||||
include ./todos/due_date
|
||||
|
||||
include ./tags
|
||||
|
||||
include ./advanced_options
|
||||
|
||||
.save-close
|
||||
button(type='submit')=env.t('saveAndClose')
|
||||
5
website/views/shared/tasks/edit/rewards/pricing.jade
Normal file
5
website/views/shared/tasks/edit/rewards/pricing.jade
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
fieldset.option-group.option-short(ng-if='task.type=="reward" && !task.challenge.id')
|
||||
legend.option-title=env.t('price')
|
||||
input.option-content(type='number', size='16', min='0', step="any", ng-model='task.value')
|
||||
.money.input-suffix
|
||||
span.shop_gold
|
||||
5
website/views/shared/tasks/edit/tags.jade
Normal file
5
website/views/shared/tasks/edit/tags.jade
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
fieldset.option-group(ng-if='!$state.includes("options.social.challenges")')
|
||||
p.option-title.mega(ng-click='task._tags = !task._tags', tooltip=env.t('expandCollapse'))=env.t('tags')
|
||||
label.checkbox(ng-repeat='tag in user.tags', ng-class="{visuallyhidden: task._tags}")
|
||||
input(type='checkbox', ng-model='task.tags[tag.id]')
|
||||
markdown(text='tag.name')
|
||||
6
website/views/shared/tasks/edit/text_notes.jade
Normal file
6
website/views/shared/tasks/edit/text_notes.jade
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
fieldset.option-group
|
||||
label.option-title=env.t('text')
|
||||
input.option-content(type='text', ng-model='task.text', required, ng-disabled='task.challenge.id')
|
||||
|
||||
label.option-title=env.t('extraNotes')
|
||||
textarea.option-content(rows='3', ng-model='task.notes', ng-model-options="{debounce: 1000}")
|
||||
4
website/views/shared/tasks/edit/todos/due_date.jade
Normal file
4
website/views/shared/tasks/edit/todos/due_date.jade
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
fieldset.option-group(ng-if='task.type=="todo" && !task.challenge.id')
|
||||
legend.option-title=env.t('dueDate')
|
||||
input.option-content.datepicker(type='text', datepicker-popup='{{user.preferences.dateFormat}}', ng-model='task.date', is-open='datepickerOpened', ng-click='datepickerOpened = true')
|
||||
|
||||
39
website/views/shared/tasks/index.jade
Normal file
39
website/views/shared/tasks/index.jade
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
// Note here, we need this part of Habit to be a directive since we're going to be passing it variables from various
|
||||
// parts of the app. The alternative would be to create new scopes for different containing sections, but that
|
||||
// started to get unwieldy
|
||||
|
||||
include ./task_view/mixins
|
||||
script(id='templates/habitrpg-tasks.html', type="text/ng-template")
|
||||
.tasks-lists.container-fluid
|
||||
.row
|
||||
.col-md-3.col-sm-6(ng-repeat='::list in lists', ng-class='::{"rewards-module": list.type==="reward"}')
|
||||
.task-column(class='{{::list.type}}s')
|
||||
|
||||
include ./task_view/graph
|
||||
|
||||
h2.task-column_title {{::list.header}}
|
||||
|
||||
include ./task_view/help
|
||||
|
||||
.todos-chart(ng-if='::list.type == "todo"', ng-show='charts.todos')
|
||||
|
||||
include ./task_view/add_new
|
||||
|
||||
alert.alert-warning.dailiesRestingInInn(ng-if='::list.type == "daily" && user.preferences.sleep')
|
||||
i.glyphicon.glyphicon-warning-sign
|
||||
=env.t('dailiesRestingInInn')
|
||||
|
||||
+taskColumnTabs('top')
|
||||
|
||||
// Actual List
|
||||
ul(class='{{::list.type}}s main-list', ng-show='obj[list.type + "s"].length > 0', hrpg-sort-tasks, ng-if='!$state.includes("options.social.challenges")')
|
||||
include ./task
|
||||
//Loads the non-sortable lists for challenges
|
||||
ul(class='{{::list.type}}s main-list', ng-show='obj[list.type + "s"].length > 0', ng-if='$state.includes("options.social.challenges")')
|
||||
include ./task
|
||||
|
||||
include ./task_view/static_rewards
|
||||
|
||||
include ./task_view/spells
|
||||
|
||||
+taskColumnTabs('bottom')
|
||||
|
|
@ -1,188 +0,0 @@
|
|||
// Note here, we need this part of Habit to be a directive since we're going to be passing it variables from various
|
||||
// parts of the app. The alternative would be to create new scopes for different containing sections, but that
|
||||
// started to get unwieldy
|
||||
script(id='templates/habitrpg-tasks.html', type="text/ng-template")
|
||||
.tasks-lists.container-fluid
|
||||
.row
|
||||
.col-md-3.col-sm-6(bindonce='lists', ng-repeat='list in lists', ng-class='::{"rewards-module": list.type==="reward"}')
|
||||
.task-column(class='{{list.type}}s')
|
||||
|
||||
// Todos export/graph options
|
||||
span.option-box.pull-right(ng-if='::main')
|
||||
a.option-action(ng-if='list.type=="todo"', ng-show='obj.history.todos', ng-click='toggleChart("todos")', tooltip=env.t('progress'), style='margin-right:5px;')
|
||||
span.glyphicon.glyphicon-signal
|
||||
//a.option-action(ng-href='/v1/users/{{user.id}}/calendar.ics?apiToken={{user.apiToken}}', tooltip='iCal')
|
||||
//-a.option-action(ng-if='list.type=="todo"', ng-click='notPorted()', tooltip='iCal', ng-show='false')
|
||||
span.glyphicon.glyphicon-calendar
|
||||
// <a href="https://www.google.com/calendar/render?cid={{encodeiCalLink(_user.id, _user.apiToken)}}" rel=tooltip title="Google Calendar"><i class=icon-calendar></i></a>
|
||||
a.option-action(ng-click='list.help=!list.help', tooltip='Click for help')
|
||||
span.glyphicon.glyphicon-question-sign(style={'zoom':1.5,'vertical-align':'-webkit-baseline-middle'})
|
||||
|
||||
// Header
|
||||
h2.task-column_title
|
||||
| {{list.header}}
|
||||
|
||||
div(ng-if='list.help', ng-switch='::list.type')
|
||||
div(ng-switch-when='habit')
|
||||
ul
|
||||
li!=env.t('habitHelp1', {plusIcon:"<span class='glyphicon glyphicon-plus'></span>"})
|
||||
li!=env.t('habitHelp2', {minusIcon:"<span class='glyphicon glyphicon-minus'></span>"})
|
||||
li!=env.t('habitHelp3')
|
||||
li!=env.t('newbieGuild', {linkStart:"<a href='https://habitrpg.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a' target='_blank'>", linkEnd: "</a>"})
|
||||
div(ng-switch-when='daily')
|
||||
ul
|
||||
li!=env.t('dailyHelp1', {emphasisStart:"<strong>", emphasisEnd:"</strong>", pencilIcon:"<span class='glyphicon glyphicon-pencil'></span>"})
|
||||
li!=env.t('dailyHelp2')
|
||||
li!=env.t('dailyHelp3', {emphasisStart:"<strong>", emphasisEnd:"</strong>"})
|
||||
li!=env.t('dailyHelp4', {linkStart:"<a href='/#/options/settings/settings' target='_blank'>", linkEnd:"</a>"})
|
||||
li!=env.t('dailyHelp5')
|
||||
li!=env.t('newbieGuild', {linkStart:"<a href='https://habitrpg.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a' target='_blank'>", linkEnd: "</a>"})
|
||||
div(ng-switch-when='todo')
|
||||
ul
|
||||
li!=env.t('toDoHelp1')
|
||||
li!=env.t('toDoHelp2')
|
||||
li!=env.t('toDoHelp3')
|
||||
li!=env.t('toDoHelp4')
|
||||
li!=env.t('newbieGuild', {linkStart:"<a href='https://habitrpg.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a' target='_blank'>", linkEnd: "</a>"})
|
||||
div(ng-switch-when='reward')
|
||||
ul
|
||||
li!=env.t('rewardHelp1', {linkStart:"<a href='/#/options/inventory/equipment' target='_blank'>", linkEnd: "</a>"})
|
||||
li!=env.t('rewardHelp2', {linkStart:"<a href='/#/options/profile/stats' target='_blank'>", linkEnd: "</a>"})
|
||||
li!=env.t('rewardHelp3')
|
||||
li!=env.t('rewardHelp4')
|
||||
li!=env.t('newbieGuild', {linkStart:"<a href='https://habitrpg.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a' target='_blank'>", linkEnd: "</a>"})
|
||||
|
||||
// Todo Chart
|
||||
.todos-chart(ng-if='::list.type == "todo"', ng-show='charts.todos')
|
||||
|
||||
// Add New
|
||||
form.task-add(name='new{{list.type}}form', ng-hide='obj._locked', ng-submit='addTask(obj[list.type+"s"],list)')
|
||||
textarea(rows='6', task-focus='list.bulk && list.focus', ng-model='list.newTask', placeholder='{{list.placeHolderBulk}}', ng-if='list.bulk', ui-keydown='{"meta-enter ctrl-enter":"addTask(obj[list.type+\'s\'],list)"}', required)
|
||||
input(type='text', task-focus='!list.bulk && list.focus', ng-model='list.newTask', placeholder='{{list.placeHolder}}', ng-if='!list.bulk', required)
|
||||
button(type='submit', ng-disabled='new{{list.type}}form.$invalid')
|
||||
div.empty-task-notification( ng-show='new{{list.type}}form.$invalid', tooltip=env.t("emptyTask") )
|
||||
span.glyphicon.glyphicon-plus
|
||||
span.glyphicon.glyphicon-plus(ng-show='!new{{list.type}}form.$invalid')
|
||||
small.help-block.btn-link.pull-right(ng-click='toggleBulk(list)')
|
||||
span(ng-if='!list.bulk')=env.t('addmultiple')
|
||||
span(ng-if='list.bulk')=env.t('addsingle')
|
||||
|
||||
alert.alert-warning.dailiesRestingInInn(ng-if='::list.type == "daily" && user.preferences.sleep')
|
||||
i.glyphicon.glyphicon-warning-sign
|
||||
=env.t('dailiesRestingInInn')
|
||||
|
||||
mixin taskColumnTabs(position)
|
||||
// Habits Tabs
|
||||
div(ng-if='::main && list.type=="habit"', class='tabbable tabs-below')
|
||||
ul.task-filter
|
||||
li(ng-class='{active: list.view == "all"}')
|
||||
a(ng-click='list.view = "all"')=env.t('all')
|
||||
li(ng-class='{active: list.view == "yellowred"}')
|
||||
a(ng-click='list.view = "yellowred"')=env.t('yellowred')
|
||||
li(ng-class='{active: list.view == "greenblue"}')
|
||||
a(ng-click='list.view = "greenblue"')=env.t('greenblue')
|
||||
// Daily Tabs
|
||||
div(ng-if='::main && list.type=="daily"', class='tabbable tabs-below')
|
||||
// remaining/completed tabs
|
||||
ul.task-filter
|
||||
li(ng-class='{active: list.view == "all"}')
|
||||
a(ng-click='list.view = "all"')=env.t('all')
|
||||
li(ng-class='{active: list.view == "remaining"}')
|
||||
a(ng-click='list.view = "remaining"')=env.t('due')
|
||||
li(ng-class='{active: list.view == "complete"}')
|
||||
a(ng-click='list.view = "complete"')=env.t('grey')
|
||||
// Todo Tabs
|
||||
div(ng-if='::main && list.type=="todo"', ng-class='::{"tabbable tabs-below": list.type=="todo"}')
|
||||
if position=="bottom"
|
||||
div(ng-show='list.view == "complete"')
|
||||
.alert
|
||||
=env.t('lotOfToDos')
|
||||
button.task-action-btn.tile.spacious.bright(ng-click='user.ops.clearCompleted({})',popover=env.t('deleteToDosExplanation'),popover-trigger='mouseenter')=env.t('clearCompleted')
|
||||
p!=env.t('beeminderDeleteWarning')
|
||||
// remaining/completed tabs
|
||||
ul.task-filter
|
||||
li(ng-class='{active: list.view == "remaining"}')
|
||||
a(ng-click='list.view = "remaining"')=env.t('remaining')
|
||||
li(ng-class='{active: list.view == "dated"}')
|
||||
a(ng-click='list.view = "dated"')=env.t('dated')
|
||||
li(ng-class='{active: list.view == "complete"}')
|
||||
a(ng-click='list.view = "complete"')=env.t('complete')
|
||||
// Rewards Tabs
|
||||
div(ng-if='::main && list.type=="reward"', class='tabbable tabs-below')
|
||||
ul.task-filter
|
||||
li(ng-class='{active: list.view == "all"}')
|
||||
a(ng-click='list.view = "all"')=env.t('all')
|
||||
li(ng-class='{active: list.view == "ingamerewards"}')
|
||||
a(ng-click='list.view = "ingamerewards"')=env.t('ingamerewards')
|
||||
|
||||
+taskColumnTabs('top')
|
||||
|
||||
// Actual List
|
||||
ul(class='{{list.type}}s main-list', ng-show='obj[list.type + "s"].length > 0', hrpg-sort-tasks, ng-if='!$state.includes("options.social.challenges")')
|
||||
include ./task
|
||||
//Loads the non-sortable lists for challenges
|
||||
ul(class='{{list.type}}s main-list', ng-show='obj[list.type + "s"].length > 0', ng-if='$state.includes("options.social.challenges")')
|
||||
include ./task
|
||||
|
||||
// Static Rewards
|
||||
ul.items.rewards(ng-if='main && list.type=="reward"')
|
||||
li.task.reward-item(ng-repeat='item in itemStore',popover-trigger='mouseenter', popover-placement='top', popover='{{item.notes()}}')
|
||||
// right-hand side control buttons
|
||||
.task-meta-controls
|
||||
span.task-notes
|
||||
span.glyphicon.glyphicon-comment
|
||||
//left-hand size commands
|
||||
.task-controls.task-primary
|
||||
a.money.btn-buy.item-btn(ng-class='{highValue: item.value >= 1000}', ng-click='buy(item)')
|
||||
span.shop_gold
|
||||
span.reward-cost {{item.value}}
|
||||
// main content
|
||||
span(ng-class='::{"shop_{{item.key}} shop-sprite item-img": true}').reward-img
|
||||
p.task-text {{item.text()}}
|
||||
|
||||
// Events
|
||||
ul.items.rewards(ng-if='main && list.type=="reward" && (user.items.special.snowball>0 || user.stats.buffs.snowball || user.items.special.spookDust>0 || user.stats.buffs.spookDust || user.items.special.shinySeed>0 || user.stats.buffs.shinySeed)')
|
||||
|
||||
mixin specialSpell(k,canceler)
|
||||
li.task.reward-item(ng-if='#{canceler ? "user.stats.buffs."+canceler : "user.items.special."+k+">0"}',popover-trigger='mouseenter', popover-placement='top', popover='{{Content.spells.special.#{k}.notes()}}')
|
||||
.task-meta-controls
|
||||
span.task-notes
|
||||
span.glyphicon.glyphicon-comment
|
||||
//left-hand size commands
|
||||
.task-controls.task-primary
|
||||
a.money.btn-buy.item-btn(ng-click='castStart(Content.spells.special.#{k})', ng-class='{active: Content.spells.special.#{k}.key == spell.key}')
|
||||
if canceler
|
||||
span.shop_gold
|
||||
span.reward-cost {{Content.spells.special.#{k}.value}}
|
||||
else
|
||||
span.shop_spell(class='shop_#{k}')
|
||||
span.reward-cost {{user.items.special.#{k}}}
|
||||
// main content
|
||||
p.task-text {{Content.spells.special.#{k}.text()}}
|
||||
|
||||
+specialSpell('snowball')
|
||||
+specialSpell('spookDust')
|
||||
+specialSpell('shinySeed')
|
||||
+specialSpell('salt','snowball')
|
||||
+specialSpell('opaquePotion','spookDust')
|
||||
+specialSpell('petalFreePotion','shinySeed')
|
||||
|
||||
// Spells
|
||||
ul.items(ng-if='main && list.type=="reward" && user.stats.class && !user.preferences.disableClasses')
|
||||
li.task.reward-item(ng-repeat='(k,skill) in Content.spells[user.stats.class]', ng-if='user.stats.lvl >= skill.lvl',popover-trigger='mouseenter', popover-placement='top', popover='{{skill.notes()}}')
|
||||
.task-meta-controls
|
||||
span.task-notes
|
||||
span.glyphicon.glyphicon-comment
|
||||
//left-hand size commands
|
||||
.task-controls.task-primary
|
||||
a.money.btn-buy.item-btn(ng-click='castStart(skill)', ng-class='{active: skill.key == spell.key}')
|
||||
span.reward-cost
|
||||
strong {{skill.mana}}
|
||||
=env.t('mp')
|
||||
// main content
|
||||
span(ng-class='{"shop_{{skill.key}} shop-sprite item-img": true}')
|
||||
p.task-text {{skill.text()}}
|
||||
|
||||
br
|
||||
|
||||
+taskColumnTabs('bottom')
|
||||
56
website/views/shared/tasks/meta_controls.jade
Normal file
56
website/views/shared/tasks/meta_controls.jade
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
.task-meta-controls
|
||||
|
||||
// Due Date
|
||||
span(ng-if='task.type=="todo" && task.date')
|
||||
span(ng-class='{"label label-danger":(moment(task.date).isBefore(_today, "days") && !task.completed)}') {{task.date | date:(user.preferences.dateFormat.indexOf('yyyy') == 0 ? user.preferences.dateFormat.substr(5) : user.preferences.dateFormat.substr(0,5))}}
|
||||
|
||||
// Streak
|
||||
|
|
||||
span(ng-show='task.streak') {{task.streak}}
|
||||
span(tooltip=env.t('streakCounter'))
|
||||
span.glyphicon.glyphicon-forward
|
||||
|
|
||||
|
||||
// Icons only available if you own the tasks (aka, hidden from challenge stats)
|
||||
span(ng-if='!obj._locked')
|
||||
a(ng-click='pushTask(task,$index,"top")', tooltip=env.t('pushTaskToTop'))
|
||||
span.glyphicon.glyphicon-open
|
||||
// a(ng-click='pushTask(task,$index,"bottom")', tooltip=env.t('pushTaskToBottom'))
|
||||
// span.glyphicon.glyphicon-import
|
||||
// // glyphicon-import or glyphicon-save or glyphicon-sort-by-attributes
|
||||
a.badge(ng-if='task.checklist[0]', ng-class='{"badge-success":checklistCompletion(task.checklist) == task.checklist.length}', ng-click='collapseChecklist(task)', tooltip=env.t('expandCollapse'))
|
||||
|{{checklistCompletion(task.checklist)}}/{{task.checklist.length}}
|
||||
span.glyphicon.glyphicon-tags(tooltip='{{Shared.appliedTags(user.tags, task.tags)}}', ng-hide='Shared.noTags(task.tags)')
|
||||
// edit
|
||||
a(ng-hide='task._editing', ng-click='editTask(task)', tooltip=env.t('edit'))
|
||||
|
|
||||
span.glyphicon.glyphicon-pencil(ng-hide='task._editing')
|
||||
|
|
||||
a(ng-hide='!task._editing', ng-click='editTask(task)', tooltip=env.t('cancel'))
|
||||
span.glyphicon.glyphicon-remove(ng-hide='!task._editing')
|
||||
|
|
||||
// save
|
||||
a(ng-hide='!task._editing', ng-click='editTask(task);saveTask(task)', tooltip=env.t('save'))
|
||||
span.glyphicon.glyphicon-ok(ng-hide='!task._editing')
|
||||
|
|
||||
//challenges
|
||||
span(ng-if='task.challenge.id')
|
||||
span(ng-if='task.challenge.broken')
|
||||
span.glyphicon.glyphicon-bullhorn(style='background-color:red;', ng-click='task._editing = true', tooltip=env.t('brokenChaLink') tooltip-placement='right')
|
||||
|
|
||||
span(ng-if='!task.challenge.broken')
|
||||
span.glyphicon.glyphicon-bullhorn(tooltip=env.t('challenge'))
|
||||
|
|
||||
// delete
|
||||
a(ng-if='!task.challenge.id', ng-click='removeTask(task, obj[list.type+"s"])', tooltip=env.t('delete'))
|
||||
span.glyphicon.glyphicon-trash
|
||||
|
|
||||
|
||||
// chart
|
||||
a(ng-show='task.history', ng-click='toggleChart(obj._id+task.id, task)', tooltip=env.t('progress'))
|
||||
span.glyphicon.glyphicon-signal
|
||||
|
|
||||
// notes
|
||||
span.task-notes(ng-show='task.notes && !task._editing', ng-click='task.popoverOpen = !task.popoverOpen', popover-trigger='click', data-popover-html="{{task.notes | markdown}}", popover-placement="top", popover-append-to-body='{{::modal ? "false":"true"}}')
|
||||
span.glyphicon.glyphicon-comment
|
||||
|
|
||||
|
|
@ -1,278 +1,16 @@
|
|||
mixin repeatOptions
|
||||
legend.option-title=env.t('repeatEvery')
|
||||
li(id='task-{{::task.id}}',
|
||||
ng-repeat='task in obj[list.type+"s"] | conditionalOrderBy: list.view=="dated":"date"',
|
||||
class='task {{Shared.taskClasses(task, user.filters, user.preferences.dayStart, user.lastCron, list.showCompleted, main)}}',
|
||||
ng-class='{"cast-target":spell && (list.type != "reward"), "locked-task":obj._locked === true}',
|
||||
ng-click='spell && (list.type != "reward") && castEnd(task, "task", $event)',
|
||||
ng-show='shouldShow(task, list, user.preferences)',
|
||||
popover-trigger='mouseenter', popover-placement="top", popover-append-to-body='{{::modal ? "false":"true"}}',
|
||||
data-popover-html="{{task.popoverOpen ? '' : task.notes | markdown}}")
|
||||
|
||||
// If frequency is daily
|
||||
.form-group(ng-if='task.frequency=="daily"')
|
||||
.input-group
|
||||
input.form-control(type='number', ng-model='task.everyX', min='1')
|
||||
span.input-group-addon {{task.everyX == 1 ? env.t('day') : env.t('days')}}
|
||||
include ./meta_controls
|
||||
|
||||
// If frequency is weekly
|
||||
.form-group(ng-show='task.frequency=="weekly"')
|
||||
include ./task_view/index
|
||||
|
||||
ul.repeat-days(bindonce)
|
||||
// note, does not use data-toggle="buttons-checkbox" - it would interfere with our own click binding
|
||||
li
|
||||
button(ng-class='{active: task.repeat.su}', type='button', ng-click='task.challenge.id || (task.repeat.su = !task.repeat.su)') {{::moment.weekdaysMin(0)}}
|
||||
li
|
||||
button(ng-class='{active: task.repeat.m}', type='button', ng-click='task.challenge.id || (task.repeat.m = !task.repeat.m)') {{::moment.weekdaysMin(1)}}
|
||||
li
|
||||
button(ng-class='{active: task.repeat.t}', type='button', ng-click='task.challenge.id || (task.repeat.t = !task.repeat.t)') {{::moment.weekdaysMin(2)}}
|
||||
li
|
||||
button(ng-class='{active: task.repeat.w}', type='button', ng-click='task.challenge.id || (task.repeat.w = !task.repeat.w)') {{::moment.weekdaysMin(3)}}
|
||||
li
|
||||
button(ng-class='{active: task.repeat.th}', type='button', ng-click='task.challenge.id || (task.repeat.th = !task.repeat.th)') {{::moment.weekdaysMin(4)}}
|
||||
li
|
||||
button(ng-class='{active: task.repeat.f}', type='button', ng-click='task.challenge.id || (task.repeat.f= !task.repeat.f)') {{::moment.weekdaysMin(5)}}
|
||||
li
|
||||
button(ng-class='{active: task.repeat.s}', type='button', ng-click='task.challenge.id || (task.repeat.s = !task.repeat.s)') {{::moment.weekdaysMin(6)}}
|
||||
|
||||
li(bindonce='list', id='task-{{::task.id}}', ng-repeat='task in obj[list.type+"s"] | conditionalOrderBy: list.view=="dated":"date"', class='task {{Shared.taskClasses(task, user.filters, user.preferences.dayStart, user.lastCron, list.showCompleted, main)}}', ng-click='spell && (list.type != "reward") && castEnd(task, "task", $event)', ng-class='{"cast-target":spell && (list.type != "reward"), "locked-task":obj._locked === true}', popover-trigger='mouseenter', data-popover-html="{{task.popoverOpen ? '' : task.notes | markdown}}", popover-placement="top", popover-append-to-body='{{::modal ? "false":"true"}}', ng-show='shouldShow(task, list, user.preferences)')
|
||||
// right-hand side control buttons
|
||||
.task-meta-controls
|
||||
|
||||
// Due Date
|
||||
span(ng-if='task.type=="todo" && task.date')
|
||||
span(ng-class='{"label label-danger":(moment(task.date).isBefore(_today, "days") && !task.completed)}') {{task.date | date:(user.preferences.dateFormat.indexOf('yyyy') == 0 ? user.preferences.dateFormat.substr(5) : user.preferences.dateFormat.substr(0,5))}}
|
||||
|
||||
// Streak
|
||||
|
|
||||
span(ng-show='task.streak') {{task.streak}}
|
||||
span(tooltip=env.t('streakCounter'))
|
||||
span.glyphicon.glyphicon-forward
|
||||
|
|
||||
|
||||
// Icons only available if you own the tasks (aka, hidden from challenge stats)
|
||||
span(ng-if='!obj._locked')
|
||||
a(ng-click='pushTask(task,$index,"top")', tooltip=env.t('pushTaskToTop'))
|
||||
span.glyphicon.glyphicon-open
|
||||
// a(ng-click='pushTask(task,$index,"bottom")', tooltip=env.t('pushTaskToBottom'))
|
||||
// span.glyphicon.glyphicon-import
|
||||
// // glyphicon-import or glyphicon-save or glyphicon-sort-by-attributes
|
||||
a.badge(ng-if='task.checklist[0]', ng-class='{"badge-success":checklistCompletion(task.checklist) == task.checklist.length}', ng-click='collapseChecklist(task)', tooltip=env.t('expandCollapse'))
|
||||
|{{checklistCompletion(task.checklist)}}/{{task.checklist.length}}
|
||||
span.glyphicon.glyphicon-tags(tooltip='{{Shared.appliedTags(user.tags, task.tags)}}', ng-hide='Shared.noTags(task.tags)')
|
||||
// edit
|
||||
a(ng-hide='task._editing', ng-click='editTask(task)', tooltip=env.t('edit'))
|
||||
|
|
||||
span.glyphicon.glyphicon-pencil(ng-hide='task._editing')
|
||||
|
|
||||
a(ng-hide='!task._editing', ng-click='editTask(task)', tooltip=env.t('cancel'))
|
||||
span.glyphicon.glyphicon-remove(ng-hide='!task._editing')
|
||||
|
|
||||
// save
|
||||
a(ng-hide='!task._editing', ng-click='editTask(task);saveTask(task)', tooltip=env.t('save'))
|
||||
span.glyphicon.glyphicon-ok(ng-hide='!task._editing')
|
||||
|
|
||||
//challenges
|
||||
span(ng-if='task.challenge.id')
|
||||
span(ng-if='task.challenge.broken')
|
||||
span.glyphicon.glyphicon-bullhorn(style='background-color:red;', ng-click='task._editing = true', tooltip=env.t('brokenChaLink') tooltip-placement='right')
|
||||
|
|
||||
span(ng-if='!task.challenge.broken')
|
||||
span.glyphicon.glyphicon-bullhorn(tooltip=env.t('challenge'))
|
||||
|
|
||||
// delete
|
||||
a(ng-if='!task.challenge.id', ng-click='removeTask(task, obj[list.type+"s"])', tooltip=env.t('delete'))
|
||||
span.glyphicon.glyphicon-trash
|
||||
|
|
||||
|
||||
// chart
|
||||
a(ng-show='task.history', ng-click='toggleChart(obj._id+task.id, task)', tooltip=env.t('progress'))
|
||||
span.glyphicon.glyphicon-signal
|
||||
|
|
||||
// notes
|
||||
span.task-notes(ng-show='task.notes && !task._editing', ng-click='task.popoverOpen = !task.popoverOpen', popover-trigger='click', data-popover-html="{{task.notes | markdown}}", popover-placement="top", popover-append-to-body='{{::modal ? "false":"true"}}')
|
||||
span.glyphicon.glyphicon-comment
|
||||
|
|
||||
|
||||
// left-hand side checkbox
|
||||
.task-controls.task-primary(ng-if='!task._editing')
|
||||
|
||||
// Habits
|
||||
.task-actions(ng-if='::task.type=="habit"')
|
||||
// score() is overridden in challengesCtrl to do nothing
|
||||
a(ng-if='task.up', ng-click='applyingAction || score(task,"up")')
|
||||
span.glyphicon.glyphicon-plus
|
||||
a(ng-if='task.down', ng-click='applyingAction || score(task,"down")')
|
||||
span.glyphicon.glyphicon-minus
|
||||
|
||||
// Rewards
|
||||
span(ng-show='task.type=="reward"')
|
||||
a.money.btn-buy(ng-class='{highValue: task.value >= 1000}', ng-click='score(task, "down")')
|
||||
span.shop_gold
|
||||
span.reward-cost {{task.value}}
|
||||
// Daily & Todos
|
||||
span.task-checker.action-yesno(ng-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='task.type=="todo" && pushTask(task,$index,"bottom"); 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
|
||||
div.task-text(ng-dblclick='task._editing ? saveTask(task) : editTask(task)')
|
||||
markdown(text='task.text',target='_blank')
|
||||
//-| {{task.text}}
|
||||
|
||||
div(ng-if='task.checklist && !$state.includes("options.social.challenges") && !task.collapseChecklist && !task._editing')
|
||||
fieldset.option-group.task-checklist
|
||||
label.checkbox(ng-repeat='item in task.checklist')
|
||||
input(type='checkbox',ng-model='item.completed',ng-change='saveTask(task,true)')
|
||||
markdown(text='item.text',target='_blank')
|
||||
|
||||
// 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=env.t('brokenTask')
|
||||
p
|
||||
a(ng-click='unlink(task, "keep")')=env.t('keepIt')
|
||||
|
|
||||
a(ng-click="removeTask(task, obj[list.type+'s'])")=env.t('removeIt')
|
||||
div(ng-if='task.challenge.broken=="CHALLENGE_DELETED"')
|
||||
p
|
||||
|
|
||||
=env.t('brokenChallenge')
|
||||
p
|
||||
a(ng-click='unlink(task, "keep-all")')=env.t('keepThem')
|
||||
| |
|
||||
a(ng-click='unlink(task, "remove-all")')=env.t('removeThem')
|
||||
div(ng-if='task.challenge.broken=="CHALLENGE_CLOSED"')
|
||||
p
|
||||
!=env.t('challengeCompleted', {user: "{{task.challenge.winner}}"})
|
||||
p
|
||||
a(ng-click='unlink(task, "keep-all")')=env.t('keepThem')
|
||||
| |
|
||||
a(ng-click='unlink(task, "remove-all")')=env.t('removeThem')
|
||||
//div(ng-if='task.challenge.broken=="UNSUBSCRIBED"')
|
||||
p=env.t('unsubChallenge')
|
||||
p
|
||||
a(ng-click="unlink(task, 'keep-all')")=env.t('keepThem')
|
||||
| |
|
||||
a(ng-click="unlink(task, 'remove-all')")=env.t('removeThem')
|
||||
|
||||
// Checklists
|
||||
.task-checklist-edit(ng-if='!$state.includes("options.social.challenges")')
|
||||
ul
|
||||
li
|
||||
button(type='button', ng-if='!task.checklist[0] && (task.type=="daily" || task.type=="todo")',ng-click='addChecklist(task)')
|
||||
span.glyphicon.glyphicon-tasks
|
||||
span=env.t('addChecklist')
|
||||
form.checklist-form(ng-if='task.checklist')
|
||||
fieldset.option-group(ng-if='!$state.includes("options.social.challenges")')
|
||||
legend.option-title
|
||||
span.hint(popover=env.t('checklistText'),popover-trigger='mouseenter',popover-placement='bottom')=env.t('checklist')
|
||||
ul(hrpg-sort-checklist)
|
||||
li(ng-repeat='item in task.checklist')
|
||||
//input(type='checkbox',ng-model='item.completed',ng-change='saveTask(task,true)')
|
||||
//-,ng-blur='saveTask(task,true)')
|
||||
span.checklist-icon.glyphicon.glyphicon-resize-vertical()
|
||||
input(type='text',ng-model='item.text', ui-keyup="{'13':'addChecklistItem(task,$event,$index)','38 40':'navigateChecklist(task,$index,$event)'}")
|
||||
a(ng-click='removeChecklistItem(task,$event,$index,true)')
|
||||
span.glyphicon.glyphicon-trash(tooltip=env.t('delete'))
|
||||
|
||||
form(ng-submit='saveTask(task,false,true)')
|
||||
// text & notes
|
||||
fieldset.option-group
|
||||
label.option-title=env.t('text')
|
||||
input.option-content(type='text', ng-model='task.text', required, ng-disabled='task.challenge.id')
|
||||
|
||||
label.option-title=env.t('extraNotes')
|
||||
textarea.option-content(rows='3', ng-model='task.notes', ng-model-options="{debounce: 1000}")
|
||||
|
||||
// if Habit, plus/minus command options
|
||||
fieldset.option-group.plusminus(ng-if='task.type=="habit" && !task.challenge.id')
|
||||
legend.option-title=env.t('direction/Actions')
|
||||
span.task-checker
|
||||
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
|
||||
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.option-group.calendar(ng-if='::task.type=="daily"', class="option-group")
|
||||
.dailies
|
||||
+repeatOptions
|
||||
|
||||
|
||||
// if Reward, pricing
|
||||
fieldset.option-group.option-short(ng-if='task.type=="reward" && !task.challenge.id')
|
||||
legend.option-title=env.t('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=env.t('dueDate')
|
||||
input.option-content.datepicker(type='text', datepicker-popup='{{user.preferences.dateFormat}}', ng-model='task.date', is-open='datepickerOpened', ng-click='datepickerOpened = true')
|
||||
|
||||
// Tags
|
||||
fieldset.option-group(ng-if='!$state.includes("options.social.challenges")')
|
||||
p.option-title.mega(ng-click='task._tags = !task._tags', tooltip=env.t('expandCollapse'))=env.t('tags')
|
||||
label.checkbox(ng-repeat='tag in user.tags', ng-class="{visuallyhidden: task._tags}")
|
||||
input(type='checkbox', ng-model='task.tags[tag.id]')
|
||||
markdown(text='tag.name')
|
||||
|
||||
// Advanced Options
|
||||
span(ng-if='::task.type!="reward"')
|
||||
button.advanced-options-toggle.option-title.mega(type='button',
|
||||
ng-click='task._advanced = !task._advanced', tooltip=env.t('expandCollapse'))
|
||||
=env.t('advancedOptions')
|
||||
|
||||
div(ng-show='task._advanced')
|
||||
div(ng-if='task.type == "daily"')
|
||||
.form-group
|
||||
legend.option-title=env.t('startDate')
|
||||
.input-group
|
||||
input(type='text' class='form-control' datepicker-popup ng-model='task._tempDateForPicker' ng-change='updateTaskStartDate(task)' is-open='task._isDatePickerOpen')
|
||||
span.input-group-btn
|
||||
button.btn.btn-default(type='button' ng-click='openDatePicker($event, task)')
|
||||
.glyphicon.glyphicon-calendar
|
||||
|
||||
hr
|
||||
|
||||
.form-group
|
||||
legend.option-title=env.t('repeat')
|
||||
select.form-control(ng-model='task.frequency')
|
||||
option(value='weekly')=env.t('repeatWeek')
|
||||
option(value='daily')=env.t('repeatDays')
|
||||
|
||||
+repeatOptions
|
||||
|
||||
hr
|
||||
|
||||
fieldset.option-group.advanced-option(ng-show="task._advanced")
|
||||
|
||||
legend.option-title
|
||||
a.hint.priority-multiplier-help(href='http://habitrpg.wikia.com/wiki/Difficulty', target='_blank', popover-title=env.t('difficultyHelpTitle'), popover-trigger='mouseenter', popover=env.t('difficultyHelpContent'))=env.t('difficulty')
|
||||
ul.priority-multiplier
|
||||
li
|
||||
button(type='button', ng-class='{active: task.priority==1 || !task.priority}', ng-click='task.challenge.id || (task.priority=1)')=env.t('easy')
|
||||
li
|
||||
button(type='button', ng-class='{active: task.priority==1.5}', ng-click='task.challenge.id || (task.priority=1.5)')=env.t('medium')
|
||||
li
|
||||
button(type='button', ng-class='{active: task.priority==2}', ng-click='task.challenge.id || (task.priority=2)')=env.t('hard')
|
||||
//span(ng-if='task.type=="daily" && !task.challenge.id')
|
||||
legend.option-title.pull-left=env.t('restoreStreak')
|
||||
input.option-content(type='number', ng-model='task.streak')
|
||||
|
||||
div(ng-if='(user.preferences.allocationMode == "taskbased" && user.preferences.automaticAllocation) || $state.is("options.social.challenges")')
|
||||
legend.option-title.pull-left=env.t('attributes')
|
||||
ul.task-attributes
|
||||
li
|
||||
button(type='button', ng-class='{active: task.attribute=="str"}', ng-click='task.attribute="str"')=env.t('physical')
|
||||
li
|
||||
button(type='button', ng-class='{active: task.attribute=="int"}', ng-click='task.attribute="int"')=env.t('mental')
|
||||
li
|
||||
button(type='button', ng-class='{active: task.attribute=="con"}', ng-click='task.attribute="con"')=env.t('social')
|
||||
li
|
||||
button(type='button', ng-class='{active: task.attribute=="per"}', ng-click='task.attribute="per"', popover=env.t('otherExamples'), popover-trigger='mouseenter', popover-placement='top')=env.t('other')
|
||||
|
||||
.save-close
|
||||
button(type='submit')=env.t('saveAndClose')
|
||||
include ./edit/index
|
||||
|
||||
div(class='{{obj._id}}{{task.id}}-chart', ng-show='charts[obj._id+task.id]')
|
||||
|
|
|
|||
10
website/views/shared/tasks/task_view/add_new.jade
Normal file
10
website/views/shared/tasks/task_view/add_new.jade
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
form.task-add(name='new{{list.type}}form', ng-hide='obj._locked', ng-submit='addTask(obj[list.type+"s"],list)')
|
||||
textarea(rows='6', task-focus='list.bulk && list.focus', ng-model='list.newTask', placeholder='{{list.placeHolderBulk}}', ng-if='list.bulk', ui-keydown='{"meta-enter ctrl-enter":"addTask(obj[list.type+\'s\'],list)"}', required)
|
||||
input(type='text', task-focus='!list.bulk && list.focus', ng-model='list.newTask', placeholder='{{list.placeHolder}}', ng-if='!list.bulk', required)
|
||||
button(type='submit', ng-disabled='new{{list.type}}form.$invalid')
|
||||
div.empty-task-notification( ng-show='new{{list.type}}form.$invalid', tooltip=env.t("emptyTask") )
|
||||
span.glyphicon.glyphicon-plus
|
||||
span.glyphicon.glyphicon-plus(ng-show='!new{{list.type}}form.$invalid')
|
||||
small.help-block.btn-link.pull-right(ng-click='toggleBulk(list)')
|
||||
span(ng-if='!list.bulk')=env.t('addmultiple')
|
||||
span(ng-if='list.bulk')=env.t('addsingle')
|
||||
9
website/views/shared/tasks/task_view/graph.jade
Normal file
9
website/views/shared/tasks/task_view/graph.jade
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
span.option-box.pull-right(ng-if='::main')
|
||||
a.option-action(ng-if='list.type=="todo"', ng-show='obj.history.todos', ng-click='toggleChart("todos")', tooltip=env.t('progress'), style='margin-right:5px;')
|
||||
span.glyphicon.glyphicon-signal
|
||||
//a.option-action(ng-href='/v1/users/{{user.id}}/calendar.ics?apiToken={{user.apiToken}}', tooltip='iCal')
|
||||
//-a.option-action(ng-if='list.type=="todo"', ng-click='notPorted()', tooltip='iCal', ng-show='false')
|
||||
span.glyphicon.glyphicon-calendar
|
||||
// <a href="https://www.google.com/calendar/render?cid={{encodeiCalLink(_user.id, _user.apiToken)}}" rel=tooltip title="Google Calendar"><i class=icon-calendar></i></a>
|
||||
a.option-action(ng-click='list.help=!list.help', tooltip='Click for help')
|
||||
span.glyphicon.glyphicon-question-sign(style={'zoom':1.5,'vertical-align':'-webkit-baseline-middle'})
|
||||
25
website/views/shared/tasks/task_view/help.jade
Normal file
25
website/views/shared/tasks/task_view/help.jade
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
div(ng-if='list.help', ng-switch='::list.type')
|
||||
ul(ng-switch-when='habit')
|
||||
li!=env.t('habitHelp1', {plusIcon:"<span class='glyphicon glyphicon-plus'></span>"})
|
||||
li!=env.t('habitHelp2', {minusIcon:"<span class='glyphicon glyphicon-minus'></span>"})
|
||||
li!=env.t('habitHelp3')
|
||||
li!=env.t('newbieGuild', {linkStart:"<a href='https://habitrpg.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a' target='_blank'>", linkEnd: "</a>"})
|
||||
ul(ng-switch-when='daily')
|
||||
li!=env.t('dailyHelp1', {emphasisStart:"<strong>", emphasisEnd:"</strong>", pencilIcon:"<span class='glyphicon glyphicon-pencil'></span>"})
|
||||
li!=env.t('dailyHelp2')
|
||||
li!=env.t('dailyHelp3', {emphasisStart:"<strong>", emphasisEnd:"</strong>"})
|
||||
li!=env.t('dailyHelp4', {linkStart:"<a href='/#/options/settings/settings' target='_blank'>", linkEnd:"</a>"})
|
||||
li!=env.t('dailyHelp5')
|
||||
li!=env.t('newbieGuild', {linkStart:"<a href='https://habitrpg.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a' target='_blank'>", linkEnd: "</a>"})
|
||||
ul(ng-switch-when='todo')
|
||||
li!=env.t('toDoHelp1')
|
||||
li!=env.t('toDoHelp2')
|
||||
li!=env.t('toDoHelp3')
|
||||
li!=env.t('toDoHelp4')
|
||||
li!=env.t('newbieGuild', {linkStart:"<a href='https://habitrpg.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a' target='_blank'>", linkEnd: "</a>"})
|
||||
ul(ng-switch-when='reward')
|
||||
li!=env.t('rewardHelp1', {linkStart:"<a href='/#/options/inventory/equipment' target='_blank'>", linkEnd: "</a>"})
|
||||
li!=env.t('rewardHelp2', {linkStart:"<a href='/#/options/profile/stats' target='_blank'>", linkEnd: "</a>"})
|
||||
li!=env.t('rewardHelp3')
|
||||
li!=env.t('rewardHelp4')
|
||||
li!=env.t('newbieGuild', {linkStart:"<a href='https://habitrpg.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a' target='_blank'>", linkEnd: "</a>"})
|
||||
35
website/views/shared/tasks/task_view/index.jade
Normal file
35
website/views/shared/tasks/task_view/index.jade
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
// left-hand side checkbox
|
||||
.task-controls.task-primary(ng-if='!task._editing')
|
||||
|
||||
// Habits
|
||||
.task-actions(ng-if='::task.type=="habit"')
|
||||
// score() is overridden in challengesCtrl to do nothing
|
||||
a(ng-if='task.up', ng-click='applyingAction || score(task,"up")')
|
||||
span.glyphicon.glyphicon-plus
|
||||
a(ng-if='task.down', ng-click='applyingAction || score(task,"down")')
|
||||
span.glyphicon.glyphicon-minus
|
||||
|
||||
// Rewards
|
||||
span(ng-if='::task.type=="reward"')
|
||||
a.money.btn-buy(ng-class='{highValue: task.value >= 1000}', ng-click='score(task, "down")')
|
||||
span.shop_gold
|
||||
span.reward-cost {{task.value}}
|
||||
|
||||
// Daily & Todos
|
||||
span.task-checker.action-yesno(ng-if='::task.type=="daily" || task.type=="todo"')
|
||||
input.visuallyhidden.focusable(id='box-{{::obj._id}}_{{::task.id}}', type='checkbox',
|
||||
ng-model='task.completed', ng-if='$state.includes("tasks")',
|
||||
ng-change='task.type=="todo" && pushTask(task,$index,"bottom"); changeCheck(task)')
|
||||
input.visuallyhidden.focusable(id='box-{{::obj._id}}_{{::task.id}}', type='checkbox',
|
||||
ng-if='!$state.includes("tasks")')
|
||||
label(for='box-{{::obj._id}}_{{::task.id}}')
|
||||
|
||||
// main content
|
||||
.task-text(ng-dblclick='task._editing ? saveTask(task) : editTask(task)')
|
||||
markdown(text='task.text',target='_blank')
|
||||
|
||||
div(ng-if='task.checklist && !$state.includes("options.social.challenges") && !task.collapseChecklist && !task._editing')
|
||||
fieldset.option-group.task-checklist
|
||||
label.checkbox(ng-repeat='item in task.checklist')
|
||||
input(type='checkbox', ng-model='item.completed', ng-change='saveTask(task,true)')
|
||||
markdown(text='item.text', target='_blank')
|
||||
60
website/views/shared/tasks/task_view/mixins.jade
Normal file
60
website/views/shared/tasks/task_view/mixins.jade
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
mixin taskColumnTabs(position)
|
||||
// Habits Tabs
|
||||
div(ng-if='::main && list.type=="habit"', class='tabbable tabs-below')
|
||||
ul.task-filter
|
||||
li(ng-class='{active: list.view == "all"}')
|
||||
a(ng-click='list.view = "all"')=env.t('all')
|
||||
li(ng-class='{active: list.view == "yellowred"}')
|
||||
a(ng-click='list.view = "yellowred"')=env.t('yellowred')
|
||||
li(ng-class='{active: list.view == "greenblue"}')
|
||||
a(ng-click='list.view = "greenblue"')=env.t('greenblue')
|
||||
// Daily Tabs
|
||||
div(ng-if='::main && list.type=="daily"', class='tabbable tabs-below')
|
||||
// remaining/completed tabs
|
||||
ul.task-filter
|
||||
li(ng-class='{active: list.view == "all"}')
|
||||
a(ng-click='list.view = "all"')=env.t('all')
|
||||
li(ng-class='{active: list.view == "remaining"}')
|
||||
a(ng-click='list.view = "remaining"')=env.t('due')
|
||||
li(ng-class='{active: list.view == "complete"}')
|
||||
a(ng-click='list.view = "complete"')=env.t('grey')
|
||||
// Todo Tabs
|
||||
div(ng-if='::main && list.type=="todo"', ng-class='::{"tabbable tabs-below": list.type=="todo"}')
|
||||
if position=="bottom"
|
||||
div(ng-show='list.view == "complete"')
|
||||
.alert
|
||||
=env.t('lotOfToDos')
|
||||
button.task-action-btn.tile.spacious.bright(ng-click='user.ops.clearCompleted({})',popover=env.t('deleteToDosExplanation'),popover-trigger='mouseenter')=env.t('clearCompleted')
|
||||
p!=env.t('beeminderDeleteWarning')
|
||||
// remaining/completed tabs
|
||||
ul.task-filter
|
||||
li(ng-class='{active: list.view == "remaining"}')
|
||||
a(ng-click='list.view = "remaining"')=env.t('remaining')
|
||||
li(ng-class='{active: list.view == "dated"}')
|
||||
a(ng-click='list.view = "dated"')=env.t('dated')
|
||||
li(ng-class='{active: list.view == "complete"}')
|
||||
a(ng-click='list.view = "complete"')=env.t('complete')
|
||||
// Rewards Tabs
|
||||
div(ng-if='::main && list.type=="reward"', class='tabbable tabs-below')
|
||||
ul.task-filter
|
||||
li(ng-class='{active: list.view == "all"}')
|
||||
a(ng-click='list.view = "all"')=env.t('all')
|
||||
li(ng-class='{active: list.view == "ingamerewards"}')
|
||||
a(ng-click='list.view = "ingamerewards"')=env.t('ingamerewards')
|
||||
|
||||
mixin specialSpell(k,canceler)
|
||||
li.task.reward-item(ng-if='#{canceler ? "user.stats.buffs."+canceler : "user.items.special."+k+">0"}',popover-trigger='mouseenter', popover-placement='top', popover='{{Content.spells.special.#{k}.notes()}}')
|
||||
.task-meta-controls
|
||||
span.task-notes
|
||||
span.glyphicon.glyphicon-comment
|
||||
//left-hand size commands
|
||||
.task-controls.task-primary
|
||||
a.money.btn-buy.item-btn(ng-click='castStart(Content.spells.special.#{k})', ng-class='{active: Content.spells.special.#{k}.key == spell.key}')
|
||||
if canceler
|
||||
span.shop_gold
|
||||
span.reward-cost {{Content.spells.special.#{k}.value}}
|
||||
else
|
||||
span.shop_spell(class='shop_#{k}')
|
||||
span.reward-cost {{user.items.special.#{k}}}
|
||||
// main content
|
||||
p.task-text {{Content.spells.special.#{k}.text()}}
|
||||
25
website/views/shared/tasks/task_view/spells.jade
Normal file
25
website/views/shared/tasks/task_view/spells.jade
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
// Events
|
||||
ul.items.rewards(ng-if='main && list.type=="reward" && (user.items.special.snowball>0 || user.stats.buffs.snowball || user.items.special.spookDust>0 || user.stats.buffs.spookDust || user.items.special.shinySeed>0 || user.stats.buffs.shinySeed)')
|
||||
|
||||
+specialSpell('snowball')
|
||||
+specialSpell('spookDust')
|
||||
+specialSpell('shinySeed')
|
||||
+specialSpell('salt','snowball')
|
||||
+specialSpell('opaquePotion','spookDust')
|
||||
+specialSpell('petalFreePotion','shinySeed')
|
||||
|
||||
// Spells
|
||||
ul.items(ng-if='main && list.type=="reward" && user.stats.class && !user.preferences.disableClasses')
|
||||
li.task.reward-item(ng-repeat='(k,skill) in Content.spells[user.stats.class]', ng-if='user.stats.lvl >= skill.lvl',popover-trigger='mouseenter', popover-placement='top', popover='{{skill.notes()}}')
|
||||
.task-meta-controls
|
||||
span.task-notes
|
||||
span.glyphicon.glyphicon-comment
|
||||
//left-hand size commands
|
||||
.task-controls.task-primary
|
||||
a.money.btn-buy.item-btn(ng-click='castStart(skill)', ng-class='{active: skill.key == spell.key}')
|
||||
span.reward-cost
|
||||
strong {{skill.mana}}
|
||||
=env.t('mp')
|
||||
// main content
|
||||
span(ng-class='{"shop_{{skill.key}} shop-sprite item-img": true}')
|
||||
p.task-text {{skill.text()}}
|
||||
14
website/views/shared/tasks/task_view/static_rewards.jade
Normal file
14
website/views/shared/tasks/task_view/static_rewards.jade
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
ul.items.rewards(ng-if='main && list.type=="reward"')
|
||||
li.task.reward-item(ng-repeat='item in itemStore',popover-trigger='mouseenter', popover-placement='top', popover='{{item.notes()}}')
|
||||
// right-hand side control buttons
|
||||
.task-meta-controls
|
||||
span.task-notes
|
||||
span.glyphicon.glyphicon-comment
|
||||
//left-hand size commands
|
||||
.task-controls.task-primary
|
||||
a.money.btn-buy.item-btn(ng-class='{highValue: item.value >= 1000}', ng-click='buy(item)')
|
||||
span.shop_gold
|
||||
span.reward-cost {{item.value}}
|
||||
// main content
|
||||
span(ng-class='::{"shop_{{item.key}} shop-sprite item-img": true}').reward-img
|
||||
p.task-text {{item.text()}}
|
||||
Loading…
Reference in a new issue