From: Dan Brown Date: Sat, 2 Sep 2017 16:36:58 +0000 (+0100) Subject: Merge branch 'master' of git://github.com/Abijeet/BookStack into Abijeet-master X-Git-Tag: v0.18.0~1^2~15^2 X-Git-Url: http://source.bookstackapp.com/bookstack/commitdiff_plain/756ee0b172034de7a36d7307b0b90afb26f81665 Merge branch 'master' of git://github.com/Abijeet/BookStack into Abijeet-master --- 756ee0b172034de7a36d7307b0b90afb26f81665 diff --cc resources/assets/js/directives.js index 8813eb881,eb7d2776b..1f28673e1 --- a/resources/assets/js/directives.js +++ b/resources/assets/js/directives.js @@@ -386,128 -386,152 +386,4 @@@ module.exports = function (ngApp, event } } }]); -- - ngApp.directive('commentReply', [function () { - ngApp.directive('entityLinkSelector', [function($http) { -- 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(); - restrict: 'A', - link: function(scope, element, attrs) { - - const selectButton = element.find('.entity-link-selector-confirm'); - let callback = false; - let entitySelection = null; - - // Handle entity selection change, Stores the selected entity locally - function entitySelectionChange(entity) { - entitySelection = entity; - if (entity === null) { - selectButton.attr('disabled', 'true'); - } else { - selectButton.removeAttr('disabled'); - } - } - events.listen('entity-select-change', entitySelectionChange); - - // Handle selection confirm button click - selectButton.click(event => { - hide(); - if (entitySelection !== null) callback(entitySelection); -- }); -- - scope.closeBox = function () { - element.remove(); - scope.$destroy(); - }; - } - }; - }]); - // Show selector interface - function show() { - element.fadeIn(240); - } -- - 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(); - } - // Hide selector interface - function hide() { - element.fadeOut(240); - } - scope.hide = hide; - - // Listen to confirmation of entity selections (doubleclick) - events.listen('entity-select-confirm', entity => { - hide(); - callback(entity); -- }); -- - scope.closeBox = function () { - element.remove(); - scope.$destroy(); - // Show entity selector, Accessible globally, and store the callback - window.showEntityLinkSelector = function(passedCallback) { - show(); - callback = passedCallback; -- }; - -- } -- }; -- }]); -- -- - ngApp.directive('commentReplyLink', ['$document', '$compile', function ($document, $compile) { - ngApp.directive('entitySelector', ['$http', '$sce', function ($http, $sce) { -- return { - scope: { - comment: '=' - }, - link: function (scope, element, attr) { - element.on('$destroy', function () { - element.off('click'); - scope.$destroy(); - }); - restrict: 'A', - scope: true, - link: function (scope, element, attrs) { - scope.loading = true; - scope.entityResults = false; - scope.search = ''; -- - 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(); - } - // Add input for forms - const input = element.find('[entity-selector-input]').first(); -- - compileHtml($container, scope, attr.isReply === 'true'); - // Detect double click events - let lastClick = 0; - function isDoubleClick() { - let now = Date.now(); - let answer = now - lastClick < 300; - lastClick = now; - return answer; - } - - // Listen to entity item clicks - element.on('click', '.entity-list a', function(event) { - event.preventDefault(); - event.stopPropagation(); - let item = $(this).closest('[data-entity-type]'); - itemSelect(item, isDoubleClick()); -- }); - } - }; - element.on('click', '[data-entity-type]', function(event) { - itemSelect($(this), isDoubleClick()); - }); -- - function compileHtml($container, scope, isReply) { - let lnkFunc = null; - if (isReply) { - lnkFunc = $compile(''); - } else { - lnkFunc = $compile(''); - } - var compiledHTML = lnkFunc(scope); - $container.append(compiledHTML); - } - // Select entity action - function itemSelect(item, doubleClick) { - let entityType = item.attr('data-entity-type'); - let entityId = item.attr('data-entity-id'); - let isSelected = !item.hasClass('selected') || doubleClick; - element.find('.selected').removeClass('selected').removeClass('primary-background'); - if (isSelected) item.addClass('selected').addClass('primary-background'); - let newVal = isSelected ? `${entityType}:${entityId}` : ''; - input.val(newVal); -- - function removeDupe() { - let $existingElement = $document.find('.comments-list comment-reply, .comments-list comment-edit'); - if (!$existingElement.length) { - return; - } - if (!isSelected) { - events.emit('entity-select-change', null); - } -- - $existingElement.remove(); - } - }]); - if (!doubleClick && !isSelected) return; -- - ngApp.directive('commentDeleteLink', ['$window', function ($window) { - return { - controller: 'CommentDeleteController', - scope: { - comment: '=' - }, - link: function (scope, element, attr, ctrl) { - let link = item.find('.entity-list-item-link').attr('href'); - let name = item.find('.entity-list-item-name').text(); -- - element.on('click', function(e) { - e.preventDefault(); - var resp = $window.confirm(trans('entities.comment_delete_confirm')); - if (!resp) { - return; - if (doubleClick) { - events.emit('entity-select-confirm', { - id: Number(entityId), - name: name, - link: link - }); -- } -- - ctrl.delete(scope.comment); - if (isSelected) { - events.emit('entity-select-change', { - id: Number(entityId), - name: name, - link: link - }); - } - } - - // Get search url with correct types - function getSearchUrl() { - let types = (attrs.entityTypes) ? encodeURIComponent(attrs.entityTypes) : encodeURIComponent('page,book,chapter'); - return window.baseUrl(`/ajax/search/entities?types=${types}`); - } - - // Get initial contents - $http.get(getSearchUrl()).then(resp => { - scope.entityResults = $sce.trustAsHtml(resp.data); - scope.loading = false; -- }); - - // Search when typing - scope.searchEntities = function() { - scope.loading = true; - input.val(''); - let url = getSearchUrl() + '&term=' + encodeURIComponent(scope.search); - $http.get(url).then(resp => { - scope.entityResults = $sce.trustAsHtml(resp.data); - scope.loading = false; - }); - }; -- } -- }; -- }]); };