mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-19 07:37:25 +01:00
Repeatables (#8444)
* Added initial should do weekly tests * Added support back in for days of the week and every x day * Added better week day mapper * Added initial monthly * Added every x months * Added yearlies * Fixed every nth weekdy of month * Fixed tests to check every x week on weekday * Began combining x month with nth weekday * Added every x month combined with date and weekday * Fixed lint issues * Saved moment-recurr to package.json * Added new repeat fields * Added UI for repeatables * Ensured only dalies are affected by summary * Added local strings * Updated npm shrinkwrap * Shared day map constant * Updated shrinkwrap * Added ui back * Updated copy of test cases * Added new translation strings * Updated shrinkwrap * Fixed broken test * Made should do tests static for better consitency * Fixed issue with no repeat * Fixed line endings * Added frequency enum values * Fixed spacing
This commit is contained in:
@@ -281,12 +281,108 @@ angular.module('habitrpg')
|
||||
}
|
||||
modalScope.cancelTaskEdit = cancelTaskEdit;
|
||||
|
||||
$rootScope.openModal('task-edit', {scope: modalScope })
|
||||
.result.catch(function() {
|
||||
cancelTaskEdit(task);
|
||||
});
|
||||
modalScope.task._edit.repeatsOn = 'dayOfMonth';
|
||||
if (modalScope.task === 'daily' && modalScope.task._edit.weeksOfMonth.length > 0) {
|
||||
modalScope.task._edit.repeatsOn = 'dayOfWeek';
|
||||
}
|
||||
|
||||
$rootScope.openModal('task-edit', {
|
||||
scope: modalScope,
|
||||
controller: function ($scope) {
|
||||
$scope.$watch('task._edit', function (newValue, oldValue) {
|
||||
if ($scope.task.type !== 'daily') return;
|
||||
$scope.summary = generateSummary($scope.task);
|
||||
|
||||
$scope.repeatSuffix = generateRepeatSuffix($scope.task);
|
||||
|
||||
if ($scope.task._edit.repeatsOn == 'dayOfMonth') {
|
||||
var date = moment().date();
|
||||
$scope.task._edit.weeksOfMonth = [];
|
||||
$scope.task._edit.dayOfMonth = [date]; // @TODO This can handle multiple dates later
|
||||
} else if ($scope.task._edit.repeatsOn == 'dayOfWeek') {
|
||||
var week = Math.ceil(moment().date() / 7) - 1;
|
||||
var dayOfWeek = moment().day();
|
||||
var shortDay = numberToShortDay[dayOfWeek];
|
||||
$scope.task._edit.dayOfMonth = [];
|
||||
$scope.task._edit.weeksOfMonth = [week]; // @TODO: This can handle multiple weeks
|
||||
for (var key in $scope.task._edit.repeat) {
|
||||
$scope.task._edit.repeat[key] = false;
|
||||
}
|
||||
$scope.task._edit.repeat[shortDay] = true;
|
||||
}
|
||||
}, true);
|
||||
},
|
||||
})
|
||||
.result.catch(function() {
|
||||
cancelTaskEdit(task);
|
||||
});
|
||||
}
|
||||
|
||||
/*
|
||||
* Summary
|
||||
*/
|
||||
|
||||
var frequencyMap = {
|
||||
'daily': 'days',
|
||||
'weekly': 'weeks',
|
||||
'monthly': 'months',
|
||||
'yearly': 'years',
|
||||
};
|
||||
|
||||
var shortDayToLongDayMap = {
|
||||
'su': moment().day(0).format('dddd'),
|
||||
's': moment().day(6).format('dddd'),
|
||||
'f': moment().day(5).format('dddd'),
|
||||
'th': moment().day(4).format('dddd'),
|
||||
'w': moment().day(3).format('dddd'),
|
||||
't': moment().day(2).format('dddd'),
|
||||
'm': moment().day(1).format('dddd'),
|
||||
};
|
||||
|
||||
var numberToShortDay = Shared.DAY_MAPPING;
|
||||
|
||||
function generateSummary(task) {
|
||||
var frequencyPlural = frequencyMap[task._edit.frequency];
|
||||
|
||||
var repeatDays = '';
|
||||
for (var key in task._edit.repeat) {
|
||||
if (task._edit.repeat[key]) {
|
||||
repeatDays += shortDayToLongDayMap[key] + ', ';
|
||||
}
|
||||
}
|
||||
|
||||
var summary = 'Repeats ' + task._edit.frequency + ' every ' + task._edit.everyX + ' ' + frequencyPlural;
|
||||
|
||||
if (task._edit.frequency === 'weekly') summary += ' on ' + repeatDays;
|
||||
|
||||
if (task._edit.frequency === 'monthly' && task._edit.repeatsOn == 'dayOfMonth') {
|
||||
var date = moment().date();
|
||||
summary += ' on the ' + date;
|
||||
} else if (task._edit.frequency === 'monthly' && task._edit.repeatsOn == 'dayOfWeek') {
|
||||
var week = Math.ceil(moment().date() / 7) - 1;
|
||||
var dayOfWeek = moment().day();
|
||||
var shortDay = numberToShortDay[dayOfWeek];
|
||||
var longDay = shortDayToLongDayMap[shortDay];
|
||||
|
||||
summary += ' on the ' + (week + 1) + ' ' + longDay;
|
||||
}
|
||||
|
||||
return summary;
|
||||
}
|
||||
|
||||
function generateRepeatSuffix (task) {
|
||||
if (task._edit.frequency === 'daily') {
|
||||
return task._edit.everyX == 1 ? window.env.t('day') : window.env.t('days');
|
||||
} else if (task._edit.frequency === 'weekly') {
|
||||
return task._edit.everyX == 1 ? window.env.t('week') : window.env.t('weeks');
|
||||
} else if (task._edit.frequency === 'monthly') {
|
||||
return task._edit.everyX == 1 ? window.env.t('month') : window.env.t('months');
|
||||
} else if (task._edit.frequency === 'yearly') {
|
||||
return task._edit.everyX == 1 ? window.env.t('year') : window.env.t('years');
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
function cancelTaskEdit(task) {
|
||||
task._edit = undefined;
|
||||
task._editing = false;
|
||||
|
||||
Reference in New Issue
Block a user