diff --git a/test/client-old/spec/directives/task.directive.js b/test/client-old/spec/directives/task.directive.js
new file mode 100644
index 0000000000..0735d54fb8
--- /dev/null
+++ b/test/client-old/spec/directives/task.directive.js
@@ -0,0 +1,35 @@
+describe('task Directive', () => {
+ var compile, scope, directiveElem, $modal;
+
+ beforeEach(function(){
+ module(function($provide) {
+ $modal = {
+ open: sandbox.spy(),
+ };
+ $provide.value('$modal', $modal);
+ });
+
+ inject(function($compile, $rootScope, $templateCache) {
+ compile = $compile;
+ scope = $rootScope.$new();
+
+ $templateCache.put('templates/task.html', '
Task
');
+ });
+
+
+ directiveElem = getCompiledElement();
+ });
+
+ function getCompiledElement(){
+ var element = angular.element('');
+ var compiledElement = compile(element)(scope);
+ scope.$digest();
+ return compiledElement;
+ }
+
+ xit('opens task note modal', () => {
+ scope.showNoteDetails();
+
+ expect($modal.open).to.be.calledOnce;
+ });
+})
diff --git a/website/client-old/js/directives/task.directive.js b/website/client-old/js/directives/task.directive.js
index 3c692e7f54..cdb1e948e0 100644
--- a/website/client-old/js/directives/task.directive.js
+++ b/website/client-old/js/directives/task.directive.js
@@ -1,24 +1,41 @@
-'use strict';
-
-(function(){
- angular
- .module('habitrpg')
- .directive('task', task);
-
- task.$inject = [
- 'Shared',
- ];
-
- function task(Shared) {
- return {
- restrict: 'E',
- templateUrl: 'templates/task.html',
- scope: true,
- link: function($scope, element, attrs) {
- $scope.getClasses = function (task, user, list, main) {
- return Shared.taskClasses(task, user.filters, user.preferences.dayStart, user.lastCron, list.showCompleted, main);
- }
- }
- }
- }
-}());
+'use strict';
+
+(function(){
+ angular
+ .module('habitrpg')
+ .directive('task', task);
+
+ task.$inject = [
+ 'Shared',
+ '$modal',
+ ];
+
+ function task(Shared, $modal) {
+ return {
+ restrict: 'E',
+ templateUrl: 'templates/task.html',
+ scope: true,
+ link: function($scope, element, attrs) {
+ $scope.getClasses = function (task, user, list, main) {
+ return Shared.taskClasses(task, user.filters, user.preferences.dayStart, user.lastCron, list.showCompleted, main);
+ }
+
+ $scope.showNoteDetails = function (task) {
+ task.popoverOpen = false;
+
+ $modal.open({
+ templateUrl: 'modals/task-extra-notes.html',
+ controller: function ($scope, task) {
+ $scope.task = task;
+ },
+ resolve: {
+ task: function() {
+ return task;
+ }
+ }
+ })
+ };
+ }
+ }
+ }
+}());
diff --git a/website/common/locales/en/tasks.json b/website/common/locales/en/tasks.json
index d10959dc2a..ae697e369e 100644
--- a/website/common/locales/en/tasks.json
+++ b/website/common/locales/en/tasks.json
@@ -164,6 +164,7 @@
"confirmScoreNotes": "Confirm task scoring with notes",
"taskScoreNotesTooLong": "Task score notes must be less than 256 characters",
"groupTasksByChallenge": "Group tasks by challenge title",
+ "taskNotes": "Task Notes",
"monthlyRepeatHelpContent": "This task will be due every X months",
"yearlyRepeatHelpContent": "This task will be due every X years"
}
diff --git a/website/views/shared/modals/index.jade b/website/views/shared/modals/index.jade
index 83d434351e..afd31bb60e 100644
--- a/website/views/shared/modals/index.jade
+++ b/website/views/shared/modals/index.jade
@@ -26,6 +26,7 @@ include ./login-incentives-reward-unlocked.jade
include ./generic.jade
include ./tasks-edit.jade
include ./task-notes.jade
+include ./task-extra-notes.jade
//- Settings
script(type='text/ng-template', id='modals/change-day-start.html')
diff --git a/website/views/shared/modals/task-extra-notes.jade b/website/views/shared/modals/task-extra-notes.jade
new file mode 100644
index 0000000000..330623a068
--- /dev/null
+++ b/website/views/shared/modals/task-extra-notes.jade
@@ -0,0 +1,10 @@
+script(id='modals/task-extra-notes.html', type='text/ng-template')
+ .modal-header
+ h4=env.t('taskNotes')
+
+ .modal-body
+ div
+ markdown(text='task.notes')
+
+ .modal-footer
+ .btn.btn-primary(ng-click="$close()")=env.t('close')
diff --git a/website/views/shared/tasks/meta_controls.jade b/website/views/shared/tasks/meta_controls.jade
index 6cfd07586d..61828a814d 100644
--- a/website/views/shared/tasks/meta_controls.jade
+++ b/website/views/shared/tasks/meta_controls.jade
@@ -4,14 +4,14 @@
span(ng-if='showDoubleTaskCounter(task, obj)')
span(tooltip=env.t('habitCounterUp')) +{{task.counterUp}}|
span(tooltip=env.t('habitCounterDown')) -{{task.counterDown}}
-
+
span(ng-if='showSingleTaskCounter(task, obj)')
span(tooltip=env.t('habitCounter')) {{task.up ? task.counterUp : task.counterDown}}
-
+
// 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))}}
-
+
// Approval requested
|
span(ng-show='task.group.approval.requested && !task.group.approval.approved')
@@ -29,7 +29,7 @@
// Icons only available if you own the tasks (aka, hidden from challenge stats)
span(ng-if='!obj._locked')
group-task-meta-actions(ng-if="!obj.auth && obj.purchased && obj.purchased.active", task='task', group='obj')
-
+
a(ng-click='pushTask(task,$index,"top")', tooltip=env.t('pushTaskToTop'), ng-class="{'push-down': ctrlPressed}")
span(ng-hide="ctrlPressed").glyphicon.glyphicon-open
span(ng-show="ctrlPressed").glyphicon.glyphicon-save
@@ -39,13 +39,13 @@
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='checkGroupAccess && !checkGroupAccess(obj)', ng-click='editTask(task, user, Shared.taskClasses(task, user.filters, user.preferences.dayStart, user.lastCron, list.showCompleted, main))', tooltip=env.t('edit'))
|
span.glyphicon.glyphicon-pencil
|
-
+
//challenges
span(ng-if='task.challenge.id')
span(ng-if='task.challenge.broken')
@@ -54,7 +54,7 @@
span(ng-if='!task.challenge.broken')
span.glyphicon.glyphicon-bullhorn(tooltip=env.t('challenge'))
|
-
+
// delete
a(ng-if='!task.challenge.id || (obj.leader && obj.leader.id === user._id)', ng-hide="(checkGroupAccess && !checkGroupAccess(obj))" ng-click='removeTask(task, obj)', tooltip=env.t('delete'))
span.glyphicon.glyphicon-trash
@@ -67,6 +67,6 @@
// notes
// Make this icon available regardless of task ownership
- a.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"}}')
+ a.task-notes(ng-show='task.notes && !task._editing', ng-click='showNoteDetails(task);', popover-trigger='hover', data-popover-html="{{task.notes | markdown}}", popover-placement="top", popover-append-to-body='{{::modal ? "false":"true"}}')
span.glyphicon.glyphicon-comment
|