From 78dd949f2079508aecf3848625658d44841082a8 Mon Sep 17 00:00:00 2001 From: Negue Date: Sat, 25 Apr 2015 18:30:11 +0200 Subject: [PATCH 1/8] copy chat messages as todo --- common/locales/en/groups.json | 4 ++- website/public/js/controllers/groupsCtrl.js | 33 ++++++++++++++++++- .../views/options/social/chat-message.jade | 3 ++ website/views/options/social/index.jade | 14 ++++++++ 4 files changed, 52 insertions(+), 2 deletions(-) diff --git a/common/locales/en/groups.json b/common/locales/en/groups.json index c5c2cf8183..c9a731b6b0 100644 --- a/common/locales/en/groups.json +++ b/common/locales/en/groups.json @@ -96,5 +96,7 @@ "abuseReported": "Thank you for reporting this violation. The moderators have been notified.", "abuseAlreadyReported": "You have already reported this message.", "needsText": "Please type a message.", - "needsTextPlaceholder": "Type your message here." + "needsTextPlaceholder": "Type your message here.", + "copyMessageAsToDo": "copy message as to-do", + "messageAddedAsToDo": "Message copied as to-do." } diff --git a/website/public/js/controllers/groupsCtrl.js b/website/public/js/controllers/groupsCtrl.js index 36233ff1f7..d22358ee60 100644 --- a/website/public/js/controllers/groupsCtrl.js +++ b/website/public/js/controllers/groupsCtrl.js @@ -344,7 +344,21 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Shared', 'Groups', ' }); }); } - } + }; + + $scope.copyToDo = function(message) { + var taskNotes = '[' + message.user + '](' + env.BASE_URL + '/static/front/#?memberId=' + message.uuid + + ') wrote in [' + $scope.group.name + '](' + window.location.href + ')'; + + var newScope = $scope.$new(); + newScope.text = message.text; + newScope.notes = taskNotes; + + $rootScope.openModal('copyChatToDo',{ + controller:'CopyMessageModalCtrl', + scope: newScope + }); + }; $scope.sync = function(group){ group.$get(); @@ -549,3 +563,20 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Shared', 'Groups', ' } } ]) + + .controller("CopyMessageModalCtrl", ['$scope', 'User', 'Notification', + function($scope, User, Notification){ + $scope.saveTodo = function() { + var newTask = { + text: $scope.text, + type: 'todo', + notes: $scope.notes + }; + + User.user.ops.addTask({body:newTask}); + Notification.text(window.env.t('messageAddedAsToDo')); + + $scope.$close(); + } + } + ]); diff --git a/website/views/options/social/chat-message.jade b/website/views/options/social/chat-message.jade index 48c6d85e7f..944088faa4 100644 --- a/website/views/options/social/chat-message.jade +++ b/website/views/options/social/chat-message.jade @@ -31,6 +31,9 @@ mixin chatMessages(inbox) |     a(ng-click="flagChatMessage(group._id, message)", ng-if=':: user.contributor.admin || (!message.sent && user.flags.communityGuidelinesAccepted && message.uuid != user.id && message.uuid != "system")') span.glyphicon.glyphicon-flag(tooltip="{{message.flags[user._id] ? env.t('abuseAlreadyReported') : env.t('abuseFlag')}}" ng-class='message.flags[user._id] ? "text-danger" : ""') + |     + a(ng-click="copyToDo(message)") + span.glyphicon.glyphicon-share(tooltip=env.t('copyMessageAsToDo')) span.float-label(ng-class='::contribText(message.contributor, message.backer).length > 30 ? "long-title" : ""') a.label.label-default.chat-message(ng-if=':: message.user', ng-class='::userLevelStyleFromLevel(message.contributor.level, message.backer.npc, style)', ng-click='clickMember(message.uuid, true)') span.glyphicon.glyphicon-arrow-right(ng-if='::message.sent') diff --git a/website/views/options/social/index.jade b/website/views/options/social/index.jade index 54469e5ca5..2516b569e9 100644 --- a/website/views/options/social/index.jade +++ b/website/views/options/social/index.jade @@ -113,3 +113,17 @@ script(type='text/ng-template', id='partials/options.social.html') .tab-content .tab-pane.active div(ui-view) + +script(type='text/ng-template', id='modals/copyChatToDo.html') + .modal-header + h4=env.t('copyMessageAsToDo') + .modal-body + p + input.form-control(type='text',ng-model='text') + br + p + textarea.form-control(type='text',rows='5',ng-model='notes', focus-me) + + .modal-footer + button.btn.btn-default(ng-click='$close()')=env.t('close') + button.btn.btn-default(ng-click='saveTodo()')=env.t('submit') \ No newline at end of file From 75579a7c369ed88bf4f7f9625c5840f676cb8ea1 Mon Sep 17 00:00:00 2001 From: Negue Date: Mon, 27 Apr 2015 19:23:56 +0200 Subject: [PATCH 2/8] add previewMarkdown / click as popover-trigger / misc changes --- common/locales/en/groups.json | 6 ++++-- website/public/js/controllers/groupsCtrl.js | 6 ++++-- website/views/options/social/index.jade | 16 ++++++++++------ website/views/shared/mixins.jade | 6 ++++++ website/views/shared/tasks/task.jade | 2 +- 5 files changed, 25 insertions(+), 11 deletions(-) diff --git a/common/locales/en/groups.json b/common/locales/en/groups.json index c9a731b6b0..6ade797459 100644 --- a/common/locales/en/groups.json +++ b/common/locales/en/groups.json @@ -97,6 +97,8 @@ "abuseAlreadyReported": "You have already reported this message.", "needsText": "Please type a message.", "needsTextPlaceholder": "Type your message here.", - "copyMessageAsToDo": "copy message as to-do", - "messageAddedAsToDo": "Message copied as to-do." + "copyMessageAsToDo": "Copy message as To-Do", + "messageAddedAsToDo": "Message copied as To-Do.", + "messageWroteIn": "<%= user %> wrote in <%= group %>", + "msgPreviewHeading": "Message Preview" } diff --git a/website/public/js/controllers/groupsCtrl.js b/website/public/js/controllers/groupsCtrl.js index d22358ee60..e37c697658 100644 --- a/website/public/js/controllers/groupsCtrl.js +++ b/website/public/js/controllers/groupsCtrl.js @@ -347,8 +347,10 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Shared', 'Groups', ' }; $scope.copyToDo = function(message) { - var taskNotes = '[' + message.user + '](' + env.BASE_URL + '/static/front/#?memberId=' + message.uuid + - ') wrote in [' + $scope.group.name + '](' + window.location.href + ')'; + var taskNotes = env.t("messageWroteIn", { + user: '[' + message.user + '](' + env.BASE_URL + '/static/front/#?memberId=' + message.uuid + ')', + group: '[' + $scope.group.name + '](' + window.location.href + ')' + }); var newScope = $scope.$new(); newScope.text = message.text; diff --git a/website/views/options/social/index.jade b/website/views/options/social/index.jade index 2516b569e9..ecb2215d3d 100644 --- a/website/views/options/social/index.jade +++ b/website/views/options/social/index.jade @@ -118,12 +118,16 @@ script(type='text/ng-template', id='modals/copyChatToDo.html') .modal-header h4=env.t('copyMessageAsToDo') .modal-body - p - input.form-control(type='text',ng-model='text') - br - p - textarea.form-control(type='text',rows='5',ng-model='notes', focus-me) + .form-group + input.form-control(type='text',ng-model='text', ng-model-options="{debounce: 1000}") + .form-group + textarea.form-control(rows='5',ng-model='notes', ng-model-options="{debounce: 1000}", focus-me) + + hr + + div(popover-trigger='click', data-popover-html="{{notes | markdown}}", popover-placement="top") + +previewMarkdown('text') .modal-footer button.btn.btn-default(ng-click='$close()')=env.t('close') - button.btn.btn-default(ng-click='saveTodo()')=env.t('submit') \ No newline at end of file + button.btn.btn-primary(ng-click='saveTodo()')=env.t('submit') \ No newline at end of file diff --git a/website/views/shared/mixins.jade b/website/views/shared/mixins.jade index f2c37b9b56..00bf60c9ce 100644 --- a/website/views/shared/mixins.jade +++ b/website/views/shared/mixins.jade @@ -11,3 +11,9 @@ mixin aLink(url, label) a(href="", ng-click="externalLink('#{url}')")= label else a(href='#{url}', target='_blank')= label + +mixin previewMarkdown(text) + .panel.panel-warning + .panel-heading=env.t('msgPreviewHeading') + .panel-body + markdown(text='#{text}') \ No newline at end of file diff --git a/website/views/shared/tasks/task.jade b/website/views/shared/tasks/task.jade index 9a5644094f..a87ae7bf0e 100644 --- a/website/views/shared/tasks/task.jade +++ b/website/views/shared/tasks/task.jade @@ -1,4 +1,4 @@ -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.notes | markdown}}", popover-placement="top", popover-append-to-body='{{::modal ? "false":"true"}}', ng-show='shouldShow(task, list, user.preferences)') +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='click', data-popover-html="{{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 From 189423b0dbb6cd06cb6c46236381e521897fedb8 Mon Sep 17 00:00:00 2001 From: Negue Date: Mon, 27 Apr 2015 19:47:42 +0200 Subject: [PATCH 3/8] markdown preview - code "inherit white-space" / hide links for 'system' --- website/public/css/index.styl | 3 +++ website/public/js/controllers/groupsCtrl.js | 4 +++- website/views/shared/mixins.jade | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/website/public/css/index.styl b/website/public/css/index.styl index b7fd653a05..b93b9f77fd 100644 --- a/website/public/css/index.styl +++ b/website/public/css/index.styl @@ -187,3 +187,6 @@ a.label color: #fff !important .line-through text-decoration line-through + +.markdown-preview markdown code + white-space inherit \ No newline at end of file diff --git a/website/public/js/controllers/groupsCtrl.js b/website/public/js/controllers/groupsCtrl.js index e37c697658..e865878f89 100644 --- a/website/public/js/controllers/groupsCtrl.js +++ b/website/public/js/controllers/groupsCtrl.js @@ -348,7 +348,9 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Shared', 'Groups', ' $scope.copyToDo = function(message) { var taskNotes = env.t("messageWroteIn", { - user: '[' + message.user + '](' + env.BASE_URL + '/static/front/#?memberId=' + message.uuid + ')', + user: message.uuid == 'system' + ? 'system' + : '[' + message.user + '](' + env.BASE_URL + '/static/front/#?memberId=' + message.uuid + ')', group: '[' + $scope.group.name + '](' + window.location.href + ')' }); diff --git a/website/views/shared/mixins.jade b/website/views/shared/mixins.jade index 00bf60c9ce..c4dde11e38 100644 --- a/website/views/shared/mixins.jade +++ b/website/views/shared/mixins.jade @@ -15,5 +15,5 @@ mixin aLink(url, label) mixin previewMarkdown(text) .panel.panel-warning .panel-heading=env.t('msgPreviewHeading') - .panel-body + .panel-body.markdown-preview markdown(text='#{text}') \ No newline at end of file From fbc1a9ae86e34e01c0f68a54df2969711fc20867 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 30 Apr 2015 08:53:14 -0500 Subject: [PATCH 4/8] Add two unit tests for copyToDo PR --- test/spec/groupCtrlSpec.js | 118 +++++++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) diff --git a/test/spec/groupCtrlSpec.js b/test/spec/groupCtrlSpec.js index bd633b914c..fd3d133925 100644 --- a/test/spec/groupCtrlSpec.js +++ b/test/spec/groupCtrlSpec.js @@ -68,6 +68,70 @@ describe('Groups Controller', function() { }); }); +describe("Chat Controller", function() { + var scope, ctrl, user, $rootScope, $controller; + + beforeEach(function() { + module(function($provide) { + $provide.value('User', {}); + }); + + inject(function(_$rootScope_, _$controller_){ + user = specHelper.newUser(); + user._id = "unique-user-id"; + $rootScope = _$rootScope_; + + scope = _$rootScope_.$new(); + + $controller = _$controller_; + + // Load RootCtrl to ensure shared behaviors are loaded + $controller('RootCtrl', {$scope: scope, User: {user: user}}); + + ctrl = $controller('ChatCtrl', {$scope: scope}); + }); + }); + + describe('copyToDo', function() { + it('when copying a user message it opens modal with information from message', function() { + scope.group = { + name: "Princess Bride" + }; + + var modalSpy = sinon.spy($rootScope, "openModal"); + var message = { + uuid: 'the-dread-pirate-roberts', + user: 'Wesley', + text: 'As you wish' + }; + + scope.copyToDo(message); + + modalSpy.should.have.been.calledOnce; + // @TODO, should probably check the modal options that get passed in as well + modalSpy.should.have.been.calledWith('copyChatToDo'); + }); + + it('when copying a system message it opens modal with information from message', function() { + scope.group = { + name: "Princess Bride" + }; + + var modalSpy = sinon.spy($rootScope, "openModal"); + var message = { + uuid: 'system', + text: 'Wesley attacked the ROUS in the Fire Swamp' + }; + + scope.copyToDo(message); + + modalSpy.should.have.been.calledOnce; + // @TODO, should probably check the modal options that get passed in as well + modalSpy.should.have.been.calledWith('copyChatToDo'); + }); + }); +}); + describe("Autocomplete controller", function() { var scope, ctrl, user, $rootScope, $controller; @@ -172,3 +236,57 @@ describe("Autocomplete controller", function() { }); }); }); + +describe("CopyMessageModal controller", function() { + var scope, ctrl, user, Notification, $rootScope, $controller; + + beforeEach(function() { + module(function($provide) { + $provide.value('User', {}); + }); + + inject(function($rootScope, _$controller_, _Notification_){ + user = specHelper.newUser(); + user._id = "unique-user-id"; + user.ops = { + addTask: sinon.spy() + }; + + scope = $rootScope.$new(); + scope.$close = sinon.spy(); + + $controller = _$controller_; + + // Load RootCtrl to ensure shared behaviors are loaded + $controller('RootCtrl', {$scope: scope, User: {user: user}}); + + ctrl = $controller('CopyMessageModalCtrl', {$scope: scope, User: {user: user}}); + + Notification = _Notification_; + Notification.text = sinon.spy(); + }); + }); + + describe("saveTodo", function() { + it('saves todo', function() { + + scope.text = "A Tavern msg"; + scope.notes = "Some notes"; + var payload = { + body: { + text: scope.text, + type: 'todo', + notes: scope.notes + } + }; + + scope.saveTodo(); + + user.ops.addTask.should.have.been.calledOnce; + user.ops.addTask.should.have.been.calledWith(payload); + Notification.text.should.have.been.calledOnce; + Notification.text.should.have.been.calledWith(window.env.t('messageAddedAsToDo')); + scope.$close.should.have.been.calledOnce; + }); + }); +}); From c3b09d8cce1749a886e26c96faa862f2da7df2e3 Mon Sep 17 00:00:00 2001 From: Negue Date: Fri, 1 May 2015 13:55:33 +0200 Subject: [PATCH 5/8] test 2nd argument for openModal --- test/spec/groupCtrlSpec.js | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/test/spec/groupCtrlSpec.js b/test/spec/groupCtrlSpec.js index fd3d133925..21a43affb0 100644 --- a/test/spec/groupCtrlSpec.js +++ b/test/spec/groupCtrlSpec.js @@ -108,8 +108,11 @@ describe("Chat Controller", function() { scope.copyToDo(message); modalSpy.should.have.been.calledOnce; - // @TODO, should probably check the modal options that get passed in as well - modalSpy.should.have.been.calledWith('copyChatToDo'); + + modalSpy.should.have.been.calledWith('copyChatToDo', sinon.match(function(callArgToMatch){ + return callArgToMatch.controller == 'CopyMessageModalCtrl' + && callArgToMatch.scope.text == message.text + })); }); it('when copying a system message it opens modal with information from message', function() { @@ -126,8 +129,11 @@ describe("Chat Controller", function() { scope.copyToDo(message); modalSpy.should.have.been.calledOnce; - // @TODO, should probably check the modal options that get passed in as well - modalSpy.should.have.been.calledWith('copyChatToDo'); + + modalSpy.should.have.been.calledWith('copyChatToDo', sinon.match(function(callArgToMatch){ + return callArgToMatch.controller == 'CopyMessageModalCtrl' + && callArgToMatch.scope.text == message.text + })); }); }); }); From 1f85b5bf675a908c81fc6e024907929ffc0eae8a Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Fri, 1 May 2015 22:12:00 -0500 Subject: [PATCH 6/8] add hack to have both mouseover and persisten click behavior --- website/views/shared/tasks/task.jade | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/views/shared/tasks/task.jade b/website/views/shared/tasks/task.jade index a87ae7bf0e..09253f8f28 100644 --- a/website/views/shared/tasks/task.jade +++ b/website/views/shared/tasks/task.jade @@ -1,4 +1,4 @@ -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='click', data-popover-html="{{task.notes | markdown}}", popover-placement="top", popover-append-to-body='{{::modal ? "false":"true"}}', ng-show='shouldShow(task, list, user.preferences)') +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 @@ -53,7 +53,7 @@ li(bindonce='list', id='task-{{::task.id}}', ng-repeat='task in obj[list.type+"s span.glyphicon.glyphicon-signal |   // notes - span.task-notes(ng-show='task.notes && !task._editing') + 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 |   From de71db310ae5bccc0c81365e5f7824fecd5b80c1 Mon Sep 17 00:00:00 2001 From: Negue Date: Sun, 3 May 2015 16:34:57 +0200 Subject: [PATCH 7/8] revert popover click trigger --- website/views/shared/tasks/task.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/views/shared/tasks/task.jade b/website/views/shared/tasks/task.jade index a87ae7bf0e..9a5644094f 100644 --- a/website/views/shared/tasks/task.jade +++ b/website/views/shared/tasks/task.jade @@ -1,4 +1,4 @@ -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='click', data-popover-html="{{task.notes | markdown}}", popover-placement="top", popover-append-to-body='{{::modal ? "false":"true"}}', ng-show='shouldShow(task, list, user.preferences)') +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.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 From b2bad4d77f439df6ee3eec42f590f458803dcb98 Mon Sep 17 00:00:00 2001 From: Negue Date: Sun, 3 May 2015 17:12:08 +0200 Subject: [PATCH 8/8] Update todo preview in dialog --- website/public/css/tasks.styl | 8 ++++++++ website/views/options/social/index.jade | 16 ++++++++++++++-- website/views/shared/tasks/task.jade | 2 +- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/website/public/css/tasks.styl b/website/public/css/tasks.styl index 5b1bbdc348..59ea60e0e7 100644 --- a/website/public/css/tasks.styl +++ b/website/public/css/tasks.styl @@ -142,6 +142,14 @@ for $stage in $stages padding: 0 font-weight: 300 +.task-column.preview + padding: 0 + background: transparent + border: 0; + + .task:hover + cursor: auto + // 50% width columns with scrollbars for tablets @media (min-width: 768px) and (max-width: 970px) .task-column diff --git a/website/views/options/social/index.jade b/website/views/options/social/index.jade index 0b41721987..a965b5d1d3 100644 --- a/website/views/options/social/index.jade +++ b/website/views/options/social/index.jade @@ -125,8 +125,20 @@ script(type='text/ng-template', id='modals/copyChatToDo.html') hr - div(popover-trigger='click', data-popover-html="{{notes | markdown}}", popover-placement="top") - +previewMarkdown('text') + div.task-column.preview + div(ng-init='popoverOpen = false', class='task todo uncompleted color-neutral', popover-trigger='mouseenter', data-popover-html="{{popoverOpen ? '' : notes | markdown}}", popover-placement="top") + // right-hand side control buttons + .task-meta-controls + // Icons only available if you own the tasks (aka, hidden from challenge stats) + span(ng-if='!obj._locked') + // notes + span.task-notes(ng-show='notes', ng-click='popoverOpen = !popoverOpen', popover-trigger='click', data-popover-html="{{notes | markdown}}", popover-placement="top") + span.glyphicon.glyphicon-comment + |   + + // main content + div.task-text + markdown(text='text',target='_blank') .modal-footer button.btn.btn-default(ng-click='$close()')=env.t('close') diff --git a/website/views/shared/tasks/task.jade b/website/views/shared/tasks/task.jade index 09253f8f28..05661a939e 100644 --- a/website/views/shared/tasks/task.jade +++ b/website/views/shared/tasks/task.jade @@ -53,7 +53,7 @@ li(bindonce='list', id='task-{{::task.id}}', ng-repeat='task in obj[list.type+"s 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.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 |