mirror of
https://github.com/sudoxnym/habitica-self-host.git
synced 2026-07-17 11:32:16 +00:00
Remove everyX check from weeklies; Change UI of frequency selection; Prep for monthlies in UI
This commit is contained in:
parent
0f096bd405
commit
8b347bca8b
3 changed files with 58 additions and 92 deletions
|
|
@ -93,9 +93,7 @@ api.shouldDo = (day, dailyTask, options = {}) ->
|
|||
return everyXCheck && hasStartedCheck
|
||||
else if dailyTask.frequency == 'weekly'
|
||||
dayOfWeekCheck = dailyTask.repeat[api.dayMapping[dayOfWeekNum]]
|
||||
weeksSinceTaskStartWeek = api.numWeeksApart(day, dailyTask.startDate, o)
|
||||
everyXCheck = (weeksSinceTaskStartWeek % dailyTask.everyX == 0)
|
||||
return dayOfWeekCheck && everyXCheck && hasStartedCheck
|
||||
return dayOfWeekCheck && hasStartedCheck
|
||||
else
|
||||
# unexpected frequency string
|
||||
return false
|
||||
|
|
@ -106,16 +104,6 @@ api.numDaysApart = (day1, day2, o) ->
|
|||
numDays = Math.abs(startOfDay1.diff(startOfDay2, 'days'))
|
||||
return numDays
|
||||
|
||||
# weeks between the two days, counting Monday as the start of each week
|
||||
api.numWeeksApart = (day1, day2, o) ->
|
||||
startOfDay1 = api.startOfDay(_.defaults {now:day1}, o)
|
||||
startOfDay2 = api.startOfDay(_.defaults {now:day2}, o)
|
||||
startWeekOfDay1 = startOfDay1.startOf('week')
|
||||
startWeekOfDay2 = startOfDay2.startOf('week')
|
||||
numWeeks = Math.abs(startWeekOfDay1.diff(startWeekOfDay2, 'weeks'))
|
||||
return numWeeks
|
||||
|
||||
|
||||
###
|
||||
------------------------------------------------------
|
||||
Level cap
|
||||
|
|
|
|||
|
|
@ -319,41 +319,12 @@ describe 'daily that repeats every x days', ->
|
|||
user.dailys = [ shared.taskDefaults({type:'daily', startDate: moment(), frequency: 'daily'}) ]
|
||||
daily = user.dailys[0]
|
||||
|
||||
_.times 10, (n) ->
|
||||
due = n + 1
|
||||
_.times 11, (due) ->
|
||||
|
||||
it 'where x equals ' + due, ->
|
||||
daily.everyX = due
|
||||
|
||||
_.times 100, (day) ->
|
||||
_.times 30, (day) ->
|
||||
isDue = shared.shouldDo moment().add(day, 'days'), daily
|
||||
expect(isDue).to.be true if day % due == 0
|
||||
expect(isDue).to.be false if day % due != 0
|
||||
|
||||
describe 'weekly that repeats on M,W,F every x days', ->
|
||||
user = null
|
||||
weekly = null
|
||||
start_date = moment()
|
||||
|
||||
beforeEach ->
|
||||
user = newUser()
|
||||
user.dailys = [ shared.taskDefaults({type:'daily', startDate: start_date, frequency: 'weekly', repeat: {su:false,m:1,t:false,w:1,th:false,f:1,s:false}}) ]
|
||||
weekly = user.dailys[0]
|
||||
|
||||
_.times 10, (n) ->
|
||||
due = n + 1
|
||||
|
||||
it 'where x equals ' + due, ->
|
||||
weekly.everyX = due
|
||||
_.times 100, (day) ->
|
||||
valid_days = { Mon: true, Wed: true, Fri: true }
|
||||
day_to_test = start_date.add(day, 'days')
|
||||
day_of_week = shared.startOfDay({now:day_to_test}).format('ddd')
|
||||
|
||||
isDue = shared.shouldDo day_to_test, weekly
|
||||
is_correct_week = shared.numWeeksApart(day_to_test, start_date) % due == 0
|
||||
|
||||
if valid_days[day_of_week] && is_correct_week
|
||||
expect(isDue).to.be true
|
||||
else
|
||||
expect(isDue).to.be false
|
||||
|
|
|
|||
|
|
@ -1,3 +1,31 @@
|
|||
mixin repeatOptions
|
||||
// If frequency is daily
|
||||
.form-group(ng-if='task.frequency=="daily"')
|
||||
.input-group
|
||||
span.input-group-addon Once every
|
||||
input.form-control(type='number', ng-model='task.everyX', min='1')
|
||||
span.input-group-addon day{{task.everyX == 1 ? '' : 's'}}
|
||||
|
||||
// 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)}}
|
||||
|
||||
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
|
||||
|
|
@ -168,52 +196,7 @@ li(bindonce='list', id='task-{{::task.id}}', ng-repeat='task in obj[list.type+"s
|
|||
.dailies
|
||||
legend.option-title=env.t('repeat')
|
||||
|
||||
// Choose the frequency
|
||||
ul.repeat-frequency
|
||||
li
|
||||
button(ng-class='{active: task.frequency=="daily"}', type='button', ng-click='task.frequency="daily"')='Daily'
|
||||
li
|
||||
button(ng-class='{active: task.frequency=="weekly"}', type='button', ng-click='task.frequency="weekly"')='Weekly'
|
||||
|
||||
// If frequency is daily
|
||||
div.repeat-frequency(ng-show='task.frequency=="daily"')
|
||||
div.repeat-daily
|
||||
| Once every
|
||||
select(ng-model='task.everyX')
|
||||
option(ng-repeat='x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]') {{x}}
|
||||
| days
|
||||
|
||||
// If frequency is weekly
|
||||
div.repeat-frequency(ng-show='task.frequency=="weekly"')
|
||||
div.repeat-weekly
|
||||
| Once every
|
||||
select(ng-model='task.everyX')
|
||||
option(ng-repeat='x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]') {{x}}
|
||||
| weeks on these days:
|
||||
|
||||
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)}}
|
||||
|
||||
label.option-title=env.t('startDate')
|
||||
p.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
|
||||
+repeatOptions
|
||||
|
||||
|
||||
// if Reward, pricing
|
||||
|
|
@ -238,7 +221,32 @@ li(bindonce='list', id='task-{{::task.id}}', ng-repeat='task in obj[list.type+"s
|
|||
// Advanced Options
|
||||
span(ng-if='::task.type!="reward"')
|
||||
p.option-title.mega(ng-click='task._advanced = !task._advanced', tooltip=env.t('expandCollapse'))=env.t('advancedOptions')
|
||||
fieldset.option-group.advanced-option(ng-class="{visuallyhidden: task._advanced}")
|
||||
|
||||
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 Repeat Frequency
|
||||
select.form-control(ng-model='task.frequency')
|
||||
option(value='weekly') Repeat on certain days of the week
|
||||
option(value='daily') Repeat every X days
|
||||
option(value='monthly') Repeat on certain days of the month
|
||||
|
||||
+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
|
||||
|
|
@ -249,7 +257,6 @@ li(bindonce='list', id='task-{{::task.id}}', ng-repeat='task in obj[list.type+"s
|
|||
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')
|
||||
span(ng-if='task.type=="daily"')
|
||||
legend.option-title.pull-left=env.t('restoreStreak')
|
||||
input.option-content(type='number', ng-model='task.streak')
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue