X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/88f93f76ddcccb937ac5d5eea76169118d149bf4..refs/pull/261/head:/resources/assets/js/directives.js diff --git a/resources/assets/js/directives.js b/resources/assets/js/directives.js index 221e18b0e..16d1ad2a4 100644 --- a/resources/assets/js/directives.js +++ b/resources/assets/js/directives.js @@ -822,4 +822,128 @@ module.exports = function (ngApp, events) { } }; }]); + + ngApp.directive('commentReply', [function () { + return { + restrict: 'E', + templateUrl: 'comment-reply.html', + scope: { + pageId: '=', + parentId: '=', + parent: '=' + }, + link: function (scope, element) { + scope.isReply = true; + element.find('textarea').focus(); + scope.$on('evt.comment-success', function (event) { + // no need for the event to do anything more. + event.stopPropagation(); + event.preventDefault(); + scope.closeBox(); + }); + + scope.closeBox = function () { + element.remove(); + scope.$destroy(); + }; + } + }; + }]); + + ngApp.directive('commentEdit', [function () { + return { + restrict: 'E', + templateUrl: 'comment-reply.html', + scope: { + comment: '=' + }, + link: function (scope, element) { + scope.isEdit = true; + element.find('textarea').focus(); + scope.$on('evt.comment-success', function (event, commentId) { + // no need for the event to do anything more. + event.stopPropagation(); + event.preventDefault(); + if (commentId === scope.comment.id && !scope.isNew) { + scope.closeBox(); + } + }); + + scope.closeBox = function () { + element.remove(); + scope.$destroy(); + }; + } + }; + }]); + + + ngApp.directive('commentReplyLink', ['$document', '$compile', function ($document, $compile) { + return { + scope: { + comment: '=' + }, + link: function (scope, element, attr) { + element.on('$destroy', function () { + element.off('click'); + scope.$destroy(); + }); + + element.on('click', function (e) { + e.preventDefault(); + var $container = element.parents('.comment-actions').first(); + if (!$container.length) { + console.error('commentReplyLink directive should be placed inside a container with class comment-box!'); + return; + } + if (attr.noCommentReplyDupe) { + removeDupe(); + } + + compileHtml($container, scope, attr.isReply === 'true'); + }); + } + }; + + function compileHtml($container, scope, isReply) { + let lnkFunc = null; + if (isReply) { + lnkFunc = $compile(''); + } else { + lnkFunc = $compile(''); + } + var compiledHTML = lnkFunc(scope); + $container.append(compiledHTML); + } + + function removeDupe() { + let $existingElement = $document.find('.comments-list comment-reply, .comments-list comment-edit'); + if (!$existingElement.length) { + return; + } + + $existingElement.remove(); + } + }]); + + ngApp.directive('commentDeleteLink', ['$window', function ($window) { + return { + controller: 'CommentDeleteController', + scope: { + comment: '=' + }, + link: function (scope, element, attr, ctrl) { + + element.on('click', function(e) { + e.preventDefault(); + var resp = $window.confirm(trans('entities.comment_delete_confirm')); + if (!resp) { + return; + } + + ctrl.delete(scope.comment); + }); + } + }; + }]); };