gets content picker ignore start nodes working, fixes descriptions

This commit is contained in:
Shannon
2019-07-01 18:23:36 +10:00
parent 1885767ef1
commit 42d86f147f
12 changed files with 103 additions and 79 deletions

View File

@@ -1,7 +1,7 @@
//used for the media picker dialog
angular.module("umbraco")
.controller("Umbraco.Editors.MediaPickerController",
function($scope, mediaResource, entityResource, userService, mediaHelper, mediaTypeHelper, eventsService, treeService, localStorageService, localizationService, editorService) {
function ($scope, mediaResource, entityResource, userService, mediaHelper, mediaTypeHelper, eventsService, treeService, localStorageService, localizationService, editorService) {
if (!$scope.model.title) {
localizationService.localizeMany(["defaultdialogs_selectMedia", "general_includeFromsubFolders"])
@@ -47,7 +47,7 @@ angular.module("umbraco")
$scope.acceptedMediatypes = [];
mediaTypeHelper.getAllowedImagetypes($scope.startNodeId)
.then(function(types) {
.then(function (types) {
$scope.acceptedMediatypes = types;
});
@@ -96,7 +96,7 @@ angular.module("umbraco")
//media object so we need to look it up
var id = $scope.target.udi ? $scope.target.udi : $scope.target.id;
var altText = $scope.target.altText;
entityResource.getById(id, "Media")
entityResource.getById(id, "Media")
.then(function (node) {
$scope.target = node;
if (ensureWithinStartNode(node)) {
@@ -106,28 +106,28 @@ angular.module("umbraco")
$scope.openDetailsDialog();
}
},
gotoStartNode);
gotoStartNode);
}
}
$scope.upload = function(v) {
$scope.upload = function (v) {
angular.element(".umb-file-dropzone .file-select").trigger("click");
};
$scope.dragLeave = function(el, event) {
$scope.dragLeave = function (el, event) {
$scope.activeDrag = false;
};
$scope.dragEnter = function(el, event) {
$scope.dragEnter = function (el, event) {
$scope.activeDrag = true;
};
$scope.submitFolder = function() {
$scope.submitFolder = function () {
if ($scope.model.newFolderName) {
$scope.model.creatingFolder = true;
mediaResource
.addFolder($scope.model.newFolderName, $scope.currentFolder.id)
.then(function(data) {
.then(function (data) {
//we've added a new folder so lets clear the tree cache for that specific item
treeService.clearCache({
cacheKey: "__media", //this is the main media tree cache key
@@ -143,14 +143,14 @@ angular.module("umbraco")
}
};
$scope.enterSubmitFolder = function(event) {
$scope.enterSubmitFolder = function (event) {
if (event.keyCode === 13) {
$scope.submitFolder();
event.stopPropagation();
}
};
$scope.gotoFolder = function(folder) {
$scope.gotoFolder = function (folder) {
if (!$scope.multiPicker) {
deselectAllImages($scope.model.selection);
}
@@ -161,15 +161,15 @@ angular.module("umbraco")
if (folder.id > 0) {
entityResource.getAncestors(folder.id, "media", { dataTypeId: $scope.model.dataTypeId })
.then(function(anc) {
.then(function (anc) {
$scope.path = _.filter(anc,
function(f) {
function (f) {
return f.path.indexOf($scope.startNodeId) !== -1;
});
});
mediaTypeHelper.getAllowedImagetypes(folder.id)
.then(function(types) {
.then(function (types) {
$scope.acceptedMediatypes = types;
});
} else {
@@ -183,7 +183,7 @@ angular.module("umbraco")
return getChildren(folder.id);
};
$scope.clickHandler = function(image, event, index) {
$scope.clickHandler = function (image, event, index) {
if (image.isFolder) {
if ($scope.disableFolderSelect) {
$scope.gotoFolder(image);
@@ -211,7 +211,7 @@ angular.module("umbraco")
}
};
$scope.clickItemName = function(item) {
$scope.clickItemName = function (item) {
if (item.isFolder) {
$scope.gotoFolder(item);
}
@@ -243,8 +243,8 @@ angular.module("umbraco")
images.length = 0;
}
$scope.onUploadComplete = function(files) {
$scope.gotoFolder($scope.currentFolder).then(function() {
$scope.onUploadComplete = function (files) {
$scope.gotoFolder($scope.currentFolder).then(function () {
if (files.length === 1 && $scope.model.selection.length === 0) {
var image = $scope.images[$scope.images.length - 1];
$scope.target = image;
@@ -254,7 +254,7 @@ angular.module("umbraco")
});
};
$scope.onFilesQueue = function() {
$scope.onFilesQueue = function () {
$scope.activeDrag = false;
};
@@ -287,12 +287,12 @@ angular.module("umbraco")
$scope.gotoFolder({ id: $scope.startNodeId, name: "Media", icon: "icon-folder" });
}
$scope.openDetailsDialog = function() {
$scope.openDetailsDialog = function () {
$scope.mediaPickerDetailsOverlay = {};
$scope.mediaPickerDetailsOverlay.show = true;
$scope.mediaPickerDetailsOverlay.submit = function(model) {
$scope.mediaPickerDetailsOverlay.submit = function (model) {
$scope.model.selection.push($scope.target);
$scope.model.submit($scope.model);
@@ -300,42 +300,42 @@ angular.module("umbraco")
$scope.mediaPickerDetailsOverlay = null;
};
$scope.mediaPickerDetailsOverlay.close = function(oldModel) {
$scope.mediaPickerDetailsOverlay.close = function (oldModel) {
$scope.mediaPickerDetailsOverlay.show = false;
$scope.mediaPickerDetailsOverlay = null;
};
};
var debounceSearchMedia = _.debounce(function() {
$scope.$apply(function() {
if ($scope.searchOptions.filter) {
searchMedia();
} else {
// reset pagination
$scope.searchOptions = {
pageNumber: 1,
pageSize: 100,
totalItems: 0,
totalPages: 0,
filter: '',
dataTypeId: $scope.model.dataTypeId
};
getChildren($scope.currentFolder.id);
}
});
}, 500);
var debounceSearchMedia = _.debounce(function () {
$scope.$apply(function () {
if ($scope.searchOptions.filter) {
searchMedia();
} else {
// reset pagination
$scope.searchOptions = {
pageNumber: 1,
pageSize: 100,
totalItems: 0,
totalPages: 0,
filter: '',
dataTypeId: $scope.model.dataTypeId
};
getChildren($scope.currentFolder.id);
}
});
}, 500);
$scope.changeSearch = function() {
$scope.changeSearch = function () {
$scope.loading = true;
debounceSearchMedia();
};
$scope.toggle = function() {
$scope.toggle = function () {
// Make sure to activate the changeSearch function everytime the toggle is clicked
$scope.changeSearch();
}
$scope.changePagination = function(pageNumber) {
$scope.changePagination = function (pageNumber) {
$scope.loading = true;
$scope.searchOptions.pageNumber = pageNumber;
searchMedia();
@@ -344,9 +344,9 @@ angular.module("umbraco")
function searchMedia() {
$scope.loading = true;
entityResource.getPagedDescendants($scope.currentFolder.id, "Media", $scope.searchOptions)
.then(function(data) {
.then(function (data) {
// update image data to work with image grid
angular.forEach(data.items, function(mediaItem) {
angular.forEach(data.items, function (mediaItem) {
setMediaMetaData(mediaItem);
});
// update images
@@ -389,10 +389,9 @@ angular.module("umbraco")
function getChildren(id) {
$scope.loading = true;
return entityResource.getChildren(id, "Media", $scope.searchOptions)
.then(function(data) {
for (i=0;i<data.length;i++){
if(data[i].metaData.MediaPath !== null){
.then(function (data) {
for (var i = 0; i < data.length; i++) {
if (data[i].metaData.MediaPath !== null) {
data[i].thumbnail = mediaHelper.resolveFileFromEntity(data[i], true);
data[i].image = mediaHelper.resolveFileFromEntity(data[i], false);
}
@@ -428,15 +427,15 @@ angular.module("umbraco")
}
}
$scope.editMediaItem = function(item) {
$scope.editMediaItem = function (item) {
var mediaEditor = {
id: item.id,
submit: function(model) {
submit: function (model) {
editorService.close()
// update the media picker item in the picker so it matched the saved media item
// the media picker is using media entities so we get the
// entity so we easily can format it for use in the media grid
if(model && model.mediaNode) {
if (model && model.mediaNode) {
entityResource.getById(model.mediaNode.id, "media")
.then(function (mediaEntity) {
angular.extend(item, mediaEntity);
@@ -445,7 +444,7 @@ angular.module("umbraco")
});
}
},
close: function(model) {
close: function (model) {
setUpdatedMediaNodes(item);
editorService.close();
}
@@ -455,19 +454,19 @@ angular.module("umbraco")
function setUpdatedMediaNodes(item) {
// add udi to list of updated media items so we easily can update them in other editors
if($scope.model.updatedMediaNodes.indexOf(item.udi) === -1) {
if ($scope.model.updatedMediaNodes.indexOf(item.udi) === -1) {
$scope.model.updatedMediaNodes.push(item.udi);
}
}
$scope.submit = function() {
if($scope.model.submit) {
$scope.submit = function () {
if ($scope.model.submit) {
$scope.model.submit($scope.model);
}
};
$scope.close = function() {
if($scope.model.close) {
$scope.close = function () {
if ($scope.model.close) {
$scope.model.close($scope.model);
}
};

View File

@@ -28,10 +28,12 @@ angular.module("umbraco").controller("Umbraco.Editors.TreePickerController",
vm.treeAlias = $scope.model.treeAlias;
vm.multiPicker = $scope.model.multiPicker;
vm.hideHeader = (typeof $scope.model.hideHeader) === "boolean" ? $scope.model.hideHeader : true;
vm.dataTypeId = $scope.model.dataTypeId;
vm.searchInfo = {
searchFromId: $scope.model.startNodeId,
searchFromName: null,
showSearch: false,
dataTypeId: vm.dataTypeId,
results: [],
selectedSearchResults: []
}
@@ -190,6 +192,10 @@ angular.module("umbraco").controller("Umbraco.Editors.TreePickerController",
if (vm.selectedLanguage && vm.selectedLanguage.id) {
queryParams["culture"] = vm.selectedLanguage.culture;
}
if (vm.dataTypeId) {
queryParams["dataTypeId"] = vm.dataTypeId;
}
var queryString = $.param(queryParams); //create the query string from the params object
if (!queryString) {

View File

@@ -36,6 +36,7 @@
search-from-id="{{vm.searchInfo.searchFromId}}"
search-from-name="{{vm.searchInfo.searchFromName}}"
show-search="{{vm.searchInfo.showSearch}}"
datatype-id="{{searchInfo.dataTypeId}}"
section="{{vm.section}}">
</umb-tree-search-box>
</div>

View File

@@ -133,7 +133,7 @@ function contentPickerController($scope, entityResource, editorState, iconHelper
multiPicker: $scope.model.config.multiPicker,
entityType: entityType,
filterCssClass: "not-allowed not-published",
startNodeId: null,
startNodeId: null,
currentNode: editorState ? editorState.current : null,
callback: function (data) {
if (angular.isArray(data)) {
@@ -155,6 +155,8 @@ function contentPickerController($scope, entityResource, editorState, iconHelper
// pre-value config on to the dialog options
angular.extend(dialogOptions, $scope.model.config);
dialogOptions.dataTypeId = $scope.model.dataTypeId;
// if we can't pick more than one item, explicitly disable multiPicker in the dialog options
if ($scope.model.config.maxNumber && parseInt($scope.model.config.maxNumber) === 1) {
dialogOptions.multiPicker = false;
@@ -211,7 +213,6 @@ function contentPickerController($scope, entityResource, editorState, iconHelper
//dialog
$scope.openCurrentPicker = function () {
$scope.currentPicker = dialogOptions;
$scope.contentPickerOverlay.dataTypeId = $scope.model.dataTypeId;
$scope.currentPicker.submit = function (model) {
if (angular.isArray(model.selection)) {