diff --git a/src/Umbraco.Web.UI.Client/src/common/services/editor.service.js b/src/Umbraco.Web.UI.Client/src/common/services/editor.service.js index ca4108e18c..bcfd9544a2 100644 --- a/src/Umbraco.Web.UI.Client/src/common/services/editor.service.js +++ b/src/Umbraco.Web.UI.Client/src/common/services/editor.service.js @@ -898,6 +898,27 @@ When building a custom infinite editor view you can use the same components as a open(editor); } + /** + * @ngdoc method + * @name umbraco.services.editorService#memberEditor + * @methodOf umbraco.services.editorService + * + * @description + * Opens a member editor in infinite editing, the submit callback returns the updated member + * @param {Object} editor rendering options + * @param {String} editor.id The id (GUID) of the member + * @param {Boolean} editor.create Create new member + * @param {Function} editor.submit Callback function when the submit button is clicked. Returns the editor model object + * @param {Function} editor.close Callback function when the close button is clicked. + * @param {String} editor.doctype If editor.create is true, provide member type for the creation of the member + * + * @returns {Object} editor object + */ + function memberEditor(editor) { + editor.view = "views/member/edit.html"; + open(editor); + } + /////////////////////// /** @@ -978,7 +999,8 @@ When building a custom infinite editor view you can use the same components as a itemPicker: itemPicker, macroPicker: macroPicker, memberGroupPicker: memberGroupPicker, - memberPicker: memberPicker + memberPicker: memberPicker, + memberEditor: memberEditor }; return service; diff --git a/src/Umbraco.Web.UI.Client/src/views/dashboard/settings/examinemanagement.controller.js b/src/Umbraco.Web.UI.Client/src/views/dashboard/settings/examinemanagement.controller.js index 7ad87b9e78..11ae4ed227 100644 --- a/src/Umbraco.Web.UI.Client/src/views/dashboard/settings/examinemanagement.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/dashboard/settings/examinemanagement.controller.js @@ -1,4 +1,4 @@ -function ExamineManagementController($scope, $http, $q, $timeout, umbRequestHelper, localizationService, overlayService) { +function ExamineManagementController($scope, $http, $q, $timeout, $location, umbRequestHelper, localizationService, overlayService, editorService) { var vm = this; @@ -20,6 +20,7 @@ function ExamineManagementController($scope, $http, $q, $timeout, umbRequestHelp vm.nextSearchResultPage = nextSearchResultPage; vm.prevSearchResultPage = prevSearchResultPage; vm.goToPageSearchResultPage = goToPageSearchResultPage; + vm.goToResult = goToResult; vm.infoOverlay = null; @@ -50,6 +51,45 @@ function ExamineManagementController($scope, $http, $q, $timeout, umbRequestHelp search(vm.selectedIndex ? vm.selectedIndex : vm.selectedSearcher, null, pageNumber); } + function goToResult(result, event) { + if (!result.editUrl) { + return; + } + // targeting a new tab/window? + if (event.ctrlKey || + event.shiftKey || + event.metaKey || // apple + (event.button && event.button === 1) // middle click, >IE9 + everyone else + ) { + // yes, let the link open itself + return; + } + + const editor = { + id: result.editId, + submit: function (model) { + editorService.close(); + }, + close: function () { + editorService.close(); + } + }; + switch (result.editSection) { + case "content": + editorService.contentEditor(editor); + break; + case "media": + editorService.mediaEditor(editor); + break; + case "member": + editorService.memberEditor(editor); + break; + } + + event.stopPropagation(); + event.preventDefault(); + } + function setViewState(state) { vm.searchResults = null; vm.viewState = state; @@ -125,6 +165,23 @@ function ExamineManagementController($scope, $http, $q, $timeout, umbRequestHelp vm.searchResults.pageNumber = pageNumber ? pageNumber : 1; //20 is page size vm.searchResults.totalPages = Math.ceil(vm.searchResults.totalRecords / 20); + // add URLs to edit well known entities + _.each(vm.searchResults.results, function (result) { + var section = result.values["__IndexType"]; + switch (section) { + case "content": + case "media": + result.editUrl = "/" + section + "/" + section + "/edit/" + result.values["__NodeId"]; + result.editId = result.values["__NodeId"]; + result.editSection = section; + break; + case "member": + result.editUrl = "/member/member/edit/" + result.values["__Key"]; + result.editId = result.values["__Key"]; + result.editSection = section; + break; + } + }); }); } diff --git a/src/Umbraco.Web.UI.Client/src/views/dashboard/settings/examinemanagement.html b/src/Umbraco.Web.UI.Client/src/views/dashboard/settings/examinemanagement.html index 6b7e3f4519..bb11addf08 100644 --- a/src/Umbraco.Web.UI.Client/src/views/dashboard/settings/examinemanagement.html +++ b/src/Umbraco.Web.UI.Client/src/views/dashboard/settings/examinemanagement.html @@ -157,7 +157,9 @@ {{result.score}} {{result.id}} - {{result.values['nodeName']}}  + {{result.values['nodeName']}} + {{result.values['nodeName']}} +   ({{result.fieldCount}} fields) @@ -298,7 +300,9 @@ {{result.score}} {{result.id}} - {{result.values['nodeName']}}  + {{result.values['nodeName']}} + {{result.values['nodeName']}} +   ({{result.fieldCount}} fields)