mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-17 14:47:53 +01:00
Refactored editTask into TaskService
This commit is contained in:
@@ -49,6 +49,7 @@ module.exports = function(config) {
|
|||||||
"website/public/js/services/memberServices.js",
|
"website/public/js/services/memberServices.js",
|
||||||
"website/public/js/services/guideServices.js",
|
"website/public/js/services/guideServices.js",
|
||||||
"website/public/js/services/challengeServices.js",
|
"website/public/js/services/challengeServices.js",
|
||||||
|
"website/public/js/services/taskServices.js",
|
||||||
"website/public/js/services/paymentServices.js",
|
"website/public/js/services/paymentServices.js",
|
||||||
|
|
||||||
"website/public/js/filters/money.js",
|
"website/public/js/filters/money.js",
|
||||||
|
|||||||
@@ -174,4 +174,20 @@ describe('Challenges Controller', function() {
|
|||||||
expect(scope.filterChallenges(notOwnNotMem)).to.eql(true);
|
expect(scope.filterChallenges(notOwnNotMem)).to.eql(true);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('editTask', function() {
|
||||||
|
it('calls Tasks.editTask', function() {
|
||||||
|
inject(function(Tasks) {
|
||||||
|
sinon.stub(Tasks, 'editTask');
|
||||||
|
var task = {
|
||||||
|
id: 'task-id',
|
||||||
|
type: 'todo'
|
||||||
|
};
|
||||||
|
|
||||||
|
scope.editTask(task);
|
||||||
|
expect(Tasks.editTask).to.be.calledOnce;
|
||||||
|
expect(Tasks.editTask).to.be.calledWith(task);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
39
test/spec/controllers/tasksCtrlSpec.js
Normal file
39
test/spec/controllers/tasksCtrlSpec.js
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
describe('Tasks Controller', function() {
|
||||||
|
var $rootScope, scope, user, ctrl;
|
||||||
|
|
||||||
|
beforeEach(function() {
|
||||||
|
user = specHelper.newUser();
|
||||||
|
module(function($provide) {
|
||||||
|
$provide.value('User', {user: user});
|
||||||
|
$provide.value('Guide', {});
|
||||||
|
});
|
||||||
|
|
||||||
|
inject(function($rootScope, $controller){
|
||||||
|
|
||||||
|
scope = $rootScope.$new();
|
||||||
|
|
||||||
|
$controller('RootCtrl', {$scope: scope, User: {user: user}});
|
||||||
|
|
||||||
|
ctrl = $controller('TasksCtrl', {$scope: scope, User: {user: user}});
|
||||||
|
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('editTask', function() {
|
||||||
|
it('calls Tasks.editTask', function() {
|
||||||
|
inject(function(Tasks) {
|
||||||
|
sinon.stub(Tasks, 'editTask');
|
||||||
|
var task = {
|
||||||
|
id: 'task-id',
|
||||||
|
type: 'todo'
|
||||||
|
};
|
||||||
|
|
||||||
|
scope.editTask(task);
|
||||||
|
expect(Tasks.editTask).to.be.calledOnce;
|
||||||
|
expect(Tasks.editTask).to.be.calledWith(task);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
82
test/spec/services/taskServicesSpec.js
Normal file
82
test/spec/services/taskServicesSpec.js
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
describe('Tasks Service', function() {
|
||||||
|
var rootScope, tasks, user;
|
||||||
|
|
||||||
|
beforeEach(function() {
|
||||||
|
|
||||||
|
module(function($provide) {
|
||||||
|
user = specHelper.newUser();
|
||||||
|
$provide.value('User', {user: user});
|
||||||
|
});
|
||||||
|
|
||||||
|
inject(function(_$rootScope_, Tasks, User) {
|
||||||
|
rootScope = _$rootScope_;
|
||||||
|
rootScope.charts = {};
|
||||||
|
tasks = Tasks;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('editTask', function() {
|
||||||
|
|
||||||
|
var task;
|
||||||
|
|
||||||
|
beforeEach(function(){
|
||||||
|
task = { id: 'task-id' }; // @TODO: replace with task factory
|
||||||
|
});
|
||||||
|
|
||||||
|
it('opens the edit menu if it is not already open', function() {
|
||||||
|
tasks.editTask(task);
|
||||||
|
|
||||||
|
expect(task._editing).to.eql(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('closes the edit menu if it is not already open', function() {
|
||||||
|
task._editing = true;
|
||||||
|
tasks.editTask(task);
|
||||||
|
|
||||||
|
expect(task._editing).to.eql(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('shows tags by default', function() {
|
||||||
|
tasks.editTask(task);
|
||||||
|
|
||||||
|
expect(task._tags).to.eql(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('does not show tags if tagsCollapsed preference is enabled', function() {
|
||||||
|
user.preferences.tagsCollapsed = true;
|
||||||
|
tasks.editTask(task);
|
||||||
|
|
||||||
|
expect(task._tags).to.eql(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('closes the edit menu if it is not already open', function() {
|
||||||
|
task._editing = true;
|
||||||
|
tasks.editTask(task);
|
||||||
|
|
||||||
|
expect(task._editing).to.eql(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('does not open open advanced options automatically if user preference is set to collapsed', function(){
|
||||||
|
user.preferences.advancedCollapsed = true;
|
||||||
|
tasks.editTask(task);
|
||||||
|
|
||||||
|
expect(task._advanced).to.eql(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('does open open advanced options automatically if user preference is set to not collapsed', function(){
|
||||||
|
user.preferences.advancedCollapsed = false;
|
||||||
|
tasks.editTask(task);
|
||||||
|
|
||||||
|
expect(task._advanced).to.eql(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('closes task chart if it exists', function() {
|
||||||
|
rootScope.charts[task.id] = true;
|
||||||
|
|
||||||
|
tasks.editTask(task);
|
||||||
|
expect(rootScope.charts[task.id]).to.eql(false);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
habitrpg.controller("ChallengesCtrl", ['$rootScope','$scope', 'Shared', 'User', 'Challenges', 'Notification', '$compile', 'Groups', '$state', '$stateParams',
|
habitrpg.controller("ChallengesCtrl", ['$rootScope','$scope', 'Shared', 'User', 'Challenges', 'Notification', '$compile', 'Groups', '$state', '$stateParams', 'Tasks',
|
||||||
function($rootScope, $scope, Shared, User, Challenges, Notification, $compile, Groups, $state, $stateParams) {
|
function($rootScope, $scope, Shared, User, Challenges, Notification, $compile, Groups, $state, $stateParams, Tasks) {
|
||||||
|
|
||||||
// Use presence of cid to determine whether to show a list or a single
|
// Use presence of cid to determine whether to show a list or a single
|
||||||
// challenge
|
// challenge
|
||||||
@@ -49,6 +49,10 @@ habitrpg.controller("ChallengesCtrl", ['$rootScope','$scope', 'Shared', 'User',
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
$scope.editTask = function(task) {
|
||||||
|
Tasks.editTask(task);
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create
|
* Create
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
habitrpg.controller("TasksCtrl", ['$scope', '$rootScope', '$location', 'User','Notification', '$http', 'ApiUrl', '$timeout', 'Shared', 'Guide',
|
habitrpg.controller("TasksCtrl", ['$scope', '$rootScope', '$location', 'User','Notification', '$http', 'ApiUrl', '$timeout', 'Shared', 'Guide', 'Tasks',
|
||||||
function($scope, $rootScope, $location, User, Notification, $http, ApiUrl, $timeout, Shared, Guide) {
|
function($scope, $rootScope, $location, User, Notification, $http, ApiUrl, $timeout, Shared, Guide, Tasks) {
|
||||||
$scope.obj = User.user; // used for task-lists
|
$scope.obj = User.user; // used for task-lists
|
||||||
$scope.user = User.user;
|
$scope.user = User.user;
|
||||||
|
|
||||||
@@ -65,6 +65,10 @@ habitrpg.controller("TasksCtrl", ['$scope', '$rootScope', '$location', 'User','N
|
|||||||
list.focus = true;
|
list.focus = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
$scope.editTask = function(task) {
|
||||||
|
Tasks.editTask(task);
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add the new task to the actions log
|
* Add the new task to the actions log
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -18,14 +18,6 @@ function habitrpgTasks($rootScope, User) {
|
|||||||
// main: '@', // true if it's the user's main list
|
// main: '@', // true if it's the user's main list
|
||||||
// obj: '='
|
// obj: '='
|
||||||
//},
|
//},
|
||||||
controller: ['$scope', '$rootScope', function($scope, $rootScope){
|
|
||||||
$scope.editTask = function(task){
|
|
||||||
task._editing = !task._editing;
|
|
||||||
task._tags = User.user.preferences.tagsCollapsed;
|
|
||||||
task._advanced = !User.user.preferences.advancedCollapsed;
|
|
||||||
if($rootScope.charts[task.id]) $rootScope.charts[task.id] = false;
|
|
||||||
};
|
|
||||||
}],
|
|
||||||
link: function(scope, element, attrs) {
|
link: function(scope, element, attrs) {
|
||||||
// $scope.obj needs to come from controllers, so we can pass by ref
|
// $scope.obj needs to come from controllers, so we can pass by ref
|
||||||
scope.main = attrs.main;
|
scope.main = attrs.main;
|
||||||
|
|||||||
24
website/public/js/services/taskServices.js
Normal file
24
website/public/js/services/taskServices.js
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
angular
|
||||||
|
.module('habitrpg')
|
||||||
|
.factory('Tasks', tasksFactory);
|
||||||
|
|
||||||
|
tasksFactory.$inject = [
|
||||||
|
'$rootScope',
|
||||||
|
'User'
|
||||||
|
];
|
||||||
|
|
||||||
|
function tasksFactory($rootScope, User) {
|
||||||
|
|
||||||
|
function editTask(task) {
|
||||||
|
task._editing = !task._editing;
|
||||||
|
task._tags = !User.user.preferences.tagsCollapsed;
|
||||||
|
task._advanced = !User.user.preferences.advancedCollapsed;
|
||||||
|
if($rootScope.charts[task.id]) $rootScope.charts[task.id] = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
editTask: editTask
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -46,6 +46,7 @@
|
|||||||
"js/services/groupServices.js",
|
"js/services/groupServices.js",
|
||||||
"js/services/memberServices.js",
|
"js/services/memberServices.js",
|
||||||
"js/services/guideServices.js",
|
"js/services/guideServices.js",
|
||||||
|
"js/services/taskServices.js",
|
||||||
"js/services/challengeServices.js",
|
"js/services/challengeServices.js",
|
||||||
"js/services/paymentServices.js",
|
"js/services/paymentServices.js",
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
fieldset.option-group(ng-if='!$state.includes("options.social.challenges")')
|
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')
|
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}")
|
label.checkbox(ng-repeat='tag in user.tags', ng-if='task._tags')
|
||||||
input(type='checkbox', ng-model='task.tags[tag.id]')
|
input(type='checkbox', ng-model='task.tags[tag.id]')
|
||||||
markdown(text='tag.name')
|
markdown(text='tag.name')
|
||||||
|
|||||||
Reference in New Issue
Block a user